PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Pgo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+CjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj48aGVhZD4KPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KPCEtLQogICAgICAgIFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYCiAgICAgICAgICAgICAgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBmcm9tIHhtbCBzb3VyY2U6IERPIE5PVCBFRElUCiAgICAgICAgWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKICAgICAgLS0+Cjx0aXRsZT5tb2RfbG9nX2NvbmZpZyAtIEFwYWNoZSBIVFRQIFNlcnZlciBWZXJzaW9uIDIuNTwvdGl0bGU+CjxsaW5rIGhyZWY9Ii4uL3N0eWxlL2Nzcy9tYW51YWwuY3NzIiByZWw9InN0eWxlc2hlZXQiIG1lZGlhPSJhbGwiIHR5cGU9InRleHQvY3NzIiB0aXRsZT0iTWFpbiBzdHlsZXNoZWV0IiAvPgo8bGluayBocmVmPSIuLi9zdHlsZS9jc3MvbWFudWFsLWxvb3NlLTEwMHBjLmNzcyIgcmVsPSJhbHRlcm5hdGUgc3R5bGVzaGVldCIgbWVkaWE9ImFsbCIgdHlwZT0idGV4dC9jc3MiIHRpdGxlPSJObyBTaWRlYmFyIC0gRGVmYXVsdCBmb250IHNpemUiIC8+CjxsaW5rIGhyZWY9Ii4uL3N0eWxlL2Nzcy9tYW51YWwtcHJpbnQuY3NzIiByZWw9InN0eWxlc2hlZXQiIG1lZGlhPSJwcmludCIgdHlwZT0idGV4dC9jc3MiIC8+PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iLi4vc3R5bGUvY3NzL3ByZXR0aWZ5LmNzcyIgLz4KPHNjcmlwdCBzcmM9Ii4uL3N0eWxlL3NjcmlwdHMvcHJldHRpZnkubWluLmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgo8L3NjcmlwdD4KCjxsaW5rIGhyZWY9Ii4uL2ltYWdlcy9mYXZpY29uLmljbyIgcmVsPSJzaG9ydGN1dCBpY29uIiAvPjwvaGVhZD4KPGJvZHk+CjxkaXYgaWQ9InBhZ2UtaGVhZGVyIj4KPHAgY2xhc3M9Im1lbnUiPjxhIGhyZWY9Ii4uL21vZC8iPk1vZHVsZXM8L2E+IHwgPGEgaHJlZj0iLi4vbW9kL3F1aWNrcmVmZXJlbmNlLmh0bWwiPkRpcmVjdGl2ZXM8L2E+IHwgPGEgaHJlZj0iaHR0cDovL3dpa2kuYXBhY2hlLm9yZy9odHRwZC9GQVEiPkZBUTwvYT4gfCA8YSBocmVmPSIuLi9nbG9zc2FyeS5odG1sIj5HbG9zc2FyeTwvYT4gfCA8YSBocmVmPSIuLi9zaXRlbWFwLmh0bWwiPlNpdGVtYXA8L2E+PC9wPgo8cCBjbGFzcz0iYXBhY2hlIj5BcGFjaGUgSFRUUCBTZXJ2ZXIgVmVyc2lvbiAyLjU8L3A+CjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2ZlYXRoZXIucG5nIiAvPjwvZGl2Pgo8ZGl2IGNsYXNzPSJ1cCI+PGEgaHJlZj0iLi8iPjxpbWcgdGl0bGU9IiZsdDstIiBhbHQ9IiZsdDstIiBzcmM9Ii4uL2ltYWdlcy9sZWZ0LmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgaWQ9InBhdGgiPgo8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvIj5BcGFjaGU8L2E+ICZndDsgPGEgaHJlZj0iaHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvIj5IVFRQIFNlcnZlcjwvYT4gJmd0OyA8YSBocmVmPSJodHRwOi8vaHR0cGQuYXBhY2hlLm9yZy9kb2NzLyI+RG9jdW1lbnRhdGlvbjwvYT4gJmd0OyA8YSBocmVmPSIuLi8iPlZlcnNpb24gMi41PC9hPiAmZ3Q7IDxhIGhyZWY9Ii4vIj5Nb2R1bGVzPC9hPjwvZGl2Pgo8ZGl2IGlkPSJwYWdlLWNvbnRlbnQiPgo8ZGl2IGlkPSJwcmVhbWJsZSI+PGgxPkFwYWNoZSBNb2R1bGUgbW9kX2xvZ19jb25maWc8L2gxPgo8ZGl2IGNsYXNzPSJ0b3BsYW5nIj4KPHA+PHNwYW4+QXZhaWxhYmxlIExhbmd1YWdlczogPC9zcGFuPjxhIGhyZWY9Ii4uL2VuL21vZC9tb2RfbG9nX2NvbmZpZy5odG1sIiB0aXRsZT0iRW5nbGlzaCI+Jm5ic3A7ZW4mbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi4vamEvbW9kL21vZF9sb2dfY29uZmlnLmh0bWwiIGhyZWZsYW5nPSJqYSIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJKYXBhbmVzZSI+Jm5ic3A7amEmbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi4va28vbW9kL21vZF9sb2dfY29uZmlnLmh0bWwiIGhyZWZsYW5nPSJrbyIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJLb3JlYW4iPiZuYnNwO2tvJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4uL3RyL21vZC9tb2RfbG9nX2NvbmZpZy5odG1sIiBocmVmbGFuZz0idHIiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iVPxya+dlIj4mbmJzcDt0ciZuYnNwOzwvYT48L3A+CjwvZGl2Pgo8dGFibGUgY2xhc3M9Im1vZHVsZSI+PHRyPjx0aD48YSBocmVmPSJtb2R1bGUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+TG9nZ2luZyBvZiB0aGUgcmVxdWVzdHMgbWFkZSB0byB0aGUgc2VydmVyPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9Im1vZHVsZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkJhc2U8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0ibW9kdWxlLWRpY3QuaHRtbCNNb2R1bGVJZGVudGlmaWVyIj5Nb2R1bGWgSWRlbnRpZmllcjo8L2E+PC90aD48dGQ+bG9nX2NvbmZpZ19tb2R1bGU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0ibW9kdWxlLWRpY3QuaHRtbCNTb3VyY2VGaWxlIj5Tb3VyY2WgRmlsZTo8L2E+PC90aD48dGQ+bW9kX2xvZ19jb25maWcuYzwvdGQ+PC90cj48L3RhYmxlPgo8aDM+U3VtbWFyeTwvaDM+CgogICAgPHA+VGhpcyBtb2R1bGUgcHJvdmlkZXMgZm9yIGZsZXhpYmxlIGxvZ2dpbmcgb2YgY2xpZW50CiAgICByZXF1ZXN0cy4gTG9ncyBhcmUgd3JpdHRlbiBpbiBhIGN1c3RvbWl6YWJsZSBmb3JtYXQsIGFuZCBtYXkgYmUKICAgIHdyaXR0ZW4gZGlyZWN0bHkgdG8gYSBmaWxlLCBvciB0byBhbiBleHRlcm5hbCBwcm9ncmFtLgogICAgQ29uZGl0aW9uYWwgbG9nZ2luZyBpcyBwcm92aWRlZCBzbyB0aGF0IGluZGl2aWR1YWwgcmVxdWVzdHMgbWF5CiAgICBiZSBpbmNsdWRlZCBvciBleGNsdWRlZCBmcm9tIHRoZSBsb2dzIGJhc2VkIG9uIGNoYXJhY3RlcmlzdGljcwogICAgb2YgdGhlIHJlcXVlc3QuPC9wPgoKICAgIDxwPlRocmVlIGRpcmVjdGl2ZXMgYXJlIHByb3ZpZGVkIGJ5IHRoaXMgbW9kdWxlOgogICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI3RyYW5zZmVybG9nIj5UcmFuc2ZlckxvZzwvYT48L2NvZGU+IHRvIGNyZWF0ZQogICAgYSBsb2cgZmlsZSwgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI2xvZ2Zvcm1hdCI+TG9nRm9ybWF0PC9hPjwvY29kZT4KICAgIHRvIHNldCBhIGN1c3RvbSBmb3JtYXQsIGFuZCA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjY3VzdG9tbG9nIj5DdXN0b21Mb2c8L2E+PC9jb2RlPiB0byBkZWZpbmUgYSBsb2cgZmlsZSBhbmQgZm9ybWF0IGluIG9uZQogICAgc3RlcC4gVGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPlRyYW5zZmVyTG9nPC9jb2RlPiBhbmQgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+Q3VzdG9tTG9nPC9jb2RlPiBkaXJlY3RpdmVzIGNhbiBiZSB1c2VkIG11bHRpcGxlIHRpbWVzIGluIGVhY2gKICAgIHNlcnZlciB0byBjYXVzZSBlYWNoIHJlcXVlc3QgdG8gYmUgbG9nZ2VkIHRvIG11bHRpcGxlIGZpbGVzLjwvcD4KPC9kaXY+CjxkaXYgaWQ9InF1aWNrdmlldyI+PGgzPlRvcGljczwvaDM+Cjx1bCBpZD0idG9waWNzIj4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjZm9ybWF0cyI+Q3VzdG9tIExvZyBGb3JtYXRzPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI3NlY3VyaXR5Ij5TZWN1cml0eSBDb25zaWRlcmF0aW9uczwvYT48L2xpPgo8L3VsPjxoMyBjbGFzcz0iZGlyZWN0aXZlcyI+RGlyZWN0aXZlczwvaDM+Cjx1bCBpZD0idG9jIj4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjYnVmZmVyZWRsb2dzIj5CdWZmZXJlZExvZ3M8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjY3VzdG9tbG9nIj5DdXN0b21Mb2c8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjZ2xvYmFsbG9nIj5HbG9iYWxMb2c8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjbG9nZm9ybWF0Ij5Mb2dGb3JtYXQ8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjdHJhbnNmZXJsb2ciPlRyYW5zZmVyTG9nPC9hPjwvbGk+CjwvdWw+CjxoMz5CdWdmaXggY2hlY2tsaXN0PC9oMz48dWwgY2xhc3M9InNlZWFsc28iPjxsaT48YSBocmVmPSJodHRwczovL3d3dy5hcGFjaGUub3JnL2Rpc3QvaHR0cGQvQ0hBTkdFU18yLjQiPmh0dHBkIGNoYW5nZWxvZzwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwczovL2J6LmFwYWNoZS5vcmcvYnVnemlsbGEvYnVnbGlzdC5jZ2k/YnVnX3N0YXR1cz1fX29wZW5fXyZhbXA7bGlzdF9pZD0xNDQ1MzImYW1wO3Byb2R1Y3Q9QXBhY2hlJTIwaHR0cGQtMiZhbXA7cXVlcnlfZm9ybWF0PXNwZWNpZmljJmFtcDtvcmRlcj1jaGFuZ2VkZGF0ZSUyMERFU0MlMkNwcmlvcml0eSUyQ2J1Z19zZXZlcml0eSZhbXA7Y29tcG9uZW50PW1vZF9sb2dfY29uZmlnIj5Lbm93biBpc3N1ZXM8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cHM6Ly9iei5hcGFjaGUub3JnL2J1Z3ppbGxhL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD1BcGFjaGUlMjBodHRwZC0yJmFtcDtjb21wb25lbnQ9bW9kX2xvZ19jb25maWciPlJlcG9ydCBhIGJ1ZzwvYT48L2xpPjwvdWw+PGgzPlNlZSBhbHNvPC9oMz4KPHVsIGNsYXNzPSJzZWVhbHNvIj4KPGxpPjxhIGhyZWY9Ii4uL2xvZ3MuaHRtbCI+QXBhY2hlIExvZyBGaWxlczwvYT48L2xpPgo8bGk+PGEgaHJlZj0iI2NvbW1lbnRzX3NlY3Rpb24iPkNvbW1lbnRzPC9hPjwvbGk+PC91bD48L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0iZm9ybWF0cyIgaWQ9ImZvcm1hdHMiPkN1c3RvbSBMb2cgRm9ybWF0czwvYT48L2gyPgoKICAgIDxwPlRoZSBmb3JtYXQgYXJndW1lbnQgdG8gdGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNsb2dmb3JtYXQiPkxvZ0Zvcm1hdDwvYT48L2NvZGU+IGFuZCA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjY3VzdG9tbG9nIj5DdXN0b21Mb2c8L2E+PC9jb2RlPiBkaXJlY3RpdmVzIGlzIGEgc3RyaW5nLiBUaGlzIHN0cmluZyBpcwogICAgdXNlZCB0byBsb2cgZWFjaCByZXF1ZXN0IHRvIHRoZSBsb2cgZmlsZS4gSXQgY2FuIGNvbnRhaW4gbGl0ZXJhbAogICAgY2hhcmFjdGVycyBjb3BpZWQgaW50byB0aGUgbG9nIGZpbGVzIGFuZCB0aGUgQy1zdHlsZSBjb250cm9sCiAgICBjaGFyYWN0ZXJzICJcbiIgYW5kICJcdCIgdG8gcmVwcmVzZW50IG5ldy1saW5lcyBhbmQgdGFicy4KICAgIExpdGVyYWwgcXVvdGVzIGFuZCBiYWNrc2xhc2hlcyBzaG91bGQgYmUgZXNjYXBlZCB3aXRoCiAgICBiYWNrc2xhc2hlcy48L3A+CgogICAgPHA+VGhlIGNoYXJhY3RlcmlzdGljcyBvZiB0aGUgcmVxdWVzdCBpdHNlbGYgYXJlIGxvZ2dlZCBieQogICAgcGxhY2luZyAiPGNvZGU+JTwvY29kZT4iIGRpcmVjdGl2ZXMgaW4gdGhlIGZvcm1hdCBzdHJpbmcsIHdoaWNoIGFyZQogICAgcmVwbGFjZWQgaW4gdGhlIGxvZyBmaWxlIGJ5IHRoZSB2YWx1ZXMgYXMgZm9sbG93czo8L3A+CgogICAgPHRhYmxlIGNsYXNzPSJib3JkZXJlZCI+PHRyIGNsYXNzPSJoZWFkZXIiPjx0aD5Gb3JtYXQmbmJzcDtTdHJpbmc8L3RoPgogICAgICAgIDx0aD5EZXNjcmlwdGlvbjwvdGg+PC90cj4KPHRyPjx0ZD48Y29kZT4lJTwvY29kZT48L3RkPgogICAgICAgIDx0ZD5UaGUgcGVyY2VudCBzaWduLjwvdGQ+PC90cj4KPHRyIGNsYXNzPSJvZGQiPjx0ZD48Y29kZT4lYTwvY29kZT48L3RkPgogICAgICAgIDx0ZD5DbGllbnQgSVAgYWRkcmVzcyBvZiB0aGUgcmVxdWVzdCAoc2VlIHRoZQogICAgICAgIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfcmVtb3RlaXAuaHRtbCI+bW9kX3JlbW90ZWlwPC9hPjwvY29kZT4gbW9kdWxlKS48L3RkPjwvdHI+Cjx0cj48dGQ+PGNvZGU+JXtjfWE8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+VW5kZXJseWluZyBwZWVyIElQIGFkZHJlc3Mgb2YgdGhlIGNvbm5lY3Rpb24gKHNlZSB0aGUKICAgICAgICA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX3JlbW90ZWlwLmh0bWwiPm1vZF9yZW1vdGVpcDwvYT48L2NvZGU+IG1vZHVsZSkuPC90ZD48L3RyPgo8dHIgY2xhc3M9Im9kZCI+PHRkPjxjb2RlPiVBPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPkxvY2FsIElQLWFkZHJlc3MuPC90ZD48L3RyPgo8dHI+PHRkPjxjb2RlPiVCPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPlNpemUgb2YgcmVzcG9uc2UgaW4gYnl0ZXMsIGV4Y2x1ZGluZyBIVFRQIGhlYWRlcnMuPC90ZD48L3RyPgo8dHIgY2xhc3M9Im9kZCI+PHRkPjxjb2RlPiViPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPlNpemUgb2YgcmVzcG9uc2UgaW4gYnl0ZXMsIGV4Y2x1ZGluZyBIVFRQIGhlYWRlcnMuIEluIENMRiBmb3JtYXQsIDxlbT5pLmUuPC9lbT4KICAgICAgICBhICc8Y29kZT4tPC9jb2RlPicgcmF0aGVyIHRoYW4gYSAwIHdoZW4gbm8gYnl0ZXMgYXJlIHNlbnQuPC90ZD48L3RyPgo8dHI+PHRkPjxjb2RlPiV7PHZhcj5WQVJOQU1FPC92YXI+fUM8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+VGhlIGNvbnRlbnRzIG9mIGNvb2tpZSA8dmFyPlZBUk5BTUU8L3Zhcj4gaW4gdGhlIHJlcXVlc3Qgc2VudAogICAgICAgIHRvIHRoZSBzZXJ2ZXIuIE9ubHkgdmVyc2lvbiAwIGNvb2tpZXMgYXJlIGZ1bGx5IHN1cHBvcnRlZC48L3RkPjwvdHI+Cjx0ciBjbGFzcz0ib2RkIj48dGQ+PGNvZGU+JUQ8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+VGhlIHRpbWUgdGFrZW4gdG8gc2VydmUgdGhlIHJlcXVlc3QsIGluIG1pY3Jvc2Vjb25kcy48L3RkPjwvdHI+Cjx0cj48dGQ+PGNvZGU+JXs8dmFyPlZBUk5BTUU8L3Zhcj59ZTwvY29kZT48L3RkPgogICAgICAgIDx0ZD5UaGUgY29udGVudHMgb2YgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlCiAgICAgICAgPHZhcj5WQVJOQU1FPC92YXI+LjwvdGQ+PC90cj4KPHRyIGNsYXNzPSJvZGQiPjx0ZD48Y29kZT4lZjwvY29kZT48L3RkPgogICAgICAgIDx0ZD5GaWxlbmFtZS48L3RkPjwvdHI+Cjx0cj48dGQ+PGNvZGU+JWg8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+UmVtb3RlIGhvc3RuYW1lLiBXaWxsIGxvZyB0aGUgSVAgYWRkcmVzcyBpZiA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvY29yZS5odG1sI2hvc3RuYW1lbG9va3VwcyI+SG9zdG5hbWVMb29rdXBzPC9hPjwvY29kZT4gaXMgc2V0IHRvCiAgICAgICAgPGNvZGU+T2ZmPC9jb2RlPiwgd2hpY2ggaXMgdGhlIGRlZmF1bHQuIElmIGl0IGxvZ3MgdGhlIGhvc3RuYW1lCiAgICAgICAgZm9yIG9ubHkgYSBmZXcgaG9zdHMsIHlvdSBwcm9iYWJseSBoYXZlIGFjY2VzcyBjb250cm9sCiAgICAgICAgZGlyZWN0aXZlcyBtZW50aW9uaW5nIHRoZW0gYnkgbmFtZS4gU2VlIDxhIGhyZWY9Im1vZF9hdXRoel9ob3N0Lmh0bWwjcmVxaG9zdCI+dGhlIFJlcXVpcmUgaG9zdAogICAgICAgIGRvY3VtZW50YXRpb248L2E+LjwvdGQ+PC90cj4KPHRyIGNsYXNzPSJvZGQiPjx0ZD48Y29kZT4lSDwvY29kZT48L3RkPgogICAgICAgIDx0ZD5UaGUgcmVxdWVzdCBwcm90b2NvbC48L3RkPjwvdHI+Cjx0cj48dGQ+PGNvZGU+JXs8dmFyPlZBUk5BTUU8L3Zhcj59aTwvY29kZT48L3RkPgogICAgICAgIDx0ZD5UaGUgY29udGVudHMgb2YgPGNvZGU+PHZhcj5WQVJOQU1FPC92YXI+OjwvY29kZT4gaGVhZGVyIGxpbmUocykKICAgICAgICBpbiB0aGUgcmVxdWVzdCBzZW50IHRvIHRoZSBzZXJ2ZXIuIENoYW5nZXMgbWFkZSBieSBvdGhlcgogICAgICAgIG1vZHVsZXMgKGUuZy4gPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9oZWFkZXJzLmh0bWwiPm1vZF9oZWFkZXJzPC9hPjwvY29kZT4pIGFmZmVjdCB0aGlzLiAgSWYgeW91J3JlCiAgICAgICAgaW50ZXJlc3RlZCBpbiB3aGF0IHRoZSByZXF1ZXN0IGhlYWRlciB3YXMgcHJpb3IgdG8gd2hlbiBtb3N0CiAgICAgICAgbW9kdWxlcyB3b3VsZCBoYXZlIG1vZGlmaWVkIGl0LCB1c2UgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9zZXRlbnZpZi5odG1sIj5tb2Rfc2V0ZW52aWY8L2E+PC9jb2RlPgogICAgICAgIHRvIGNvcHkgdGhlIGhlYWRlciBpbnRvIGFuIGludGVybmFsIGVudmlyb25tZW50IHZhcmlhYmxlIGFuZCBsb2cKICAgICAgICB0aGF0IHZhbHVlIHdpdGggdGhlIDxjb2RlPiV7PHZhcj5WQVJOQU1FPC92YXI+fWU8L2NvZGU+IGRlc2NyaWJlZAogICAgICAgIGFib3ZlLgogICAgICAgIDwvdGQ+PC90cj4KPHRyIGNsYXNzPSJvZGQiPjx0ZD48Y29kZT4lazwvY29kZT48L3RkPgogICAgICAgIDx0ZD5OdW1iZXIgb2Yga2VlcGFsaXZlIHJlcXVlc3RzIGhhbmRsZWQgb24gdGhpcyBjb25uZWN0aW9uLiAgSW50ZXJlc3RpbmcgaWYKICAgICAgICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9jb3JlLmh0bWwja2VlcGFsaXZlIj5LZWVwQWxpdmU8L2E+PC9jb2RlPiBpcyBiZWluZyB1c2VkLCBzbyB0aGF0LAogICAgICAgICAgZm9yIGV4YW1wbGUsIGEgJzEnIG1lYW5zIHRoZSBmaXJzdCBrZWVwYWxpdmUgcmVxdWVzdCBhZnRlciB0aGUgaW5pdGlhbAogICAgICAgICAgb25lLCAnMicgdGhlIHNlY29uZCwgZXRjLi4uOwogICAgICAgICAgb3RoZXJ3aXNlIHRoaXMgaXMgYWx3YXlzIDAgKGluZGljYXRpbmcgdGhlIGluaXRpYWwgcmVxdWVzdCkuPC90ZD48L3RyPgo8dHI+PHRkPjxjb2RlPiVsPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPlJlbW90ZSBsb2duYW1lIChmcm9tIGlkZW50ZCwgaWYgc3VwcGxpZWQpLiBUaGlzIHdpbGwgcmV0dXJuIGEKICAgICAgICBkYXNoIHVubGVzcyA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX2lkZW50Lmh0bWwiPm1vZF9pZGVudDwvYT48L2NvZGU+IGlzIHByZXNlbnQgYW5kIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfaWRlbnQuaHRtbCNpZGVudGl0eWNoZWNrIj5JZGVudGl0eUNoZWNrPC9hPjwvY29kZT4gaXMgc2V0CiAgICAgICAgPGNvZGU+T248L2NvZGU+LjwvdGQ+PC90cj4KPHRyIGNsYXNzPSJvZGQiPjx0ZD48Y29kZT4lTDwvY29kZT48L3RkPgogICAgICAgIDx0ZD5UaGUgcmVxdWVzdCBsb2cgSUQgZnJvbSB0aGUgZXJyb3IgbG9nIChvciAnLScgaWYgbm90aGluZyBoYXMgYmVlbgogICAgICAgICAgICBsb2dnZWQgdG8gdGhlIGVycm9yIGxvZyBmb3IgdGhpcyByZXF1ZXN0KS4gTG9vayBmb3IgdGhlCiAgICAgICAgICAgIG1hdGNoaW5nIGVycm9yIGxvZyBsaW5lIHRvIHNlZSB3aGF0IHJlcXVlc3QgY2F1c2VkIHdoYXQgZXJyb3IuPC90ZD48L3RyPgo8dHI+PHRkPjxjb2RlPiVtPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPlRoZSByZXF1ZXN0IG1ldGhvZC48L3RkPjwvdHI+Cjx0ciBjbGFzcz0ib2RkIj48dGQ+PGNvZGU+JXs8dmFyPlZBUk5BTUU8L3Zhcj59bjwvY29kZT48L3RkPgogICAgICAgIDx0ZD5UaGUgY29udGVudHMgb2Ygbm90ZSA8dmFyPlZBUk5BTUU8L3Zhcj4gZnJvbSBhbm90aGVyCiAgICAgICAgbW9kdWxlLjwvdGQ+PC90cj4KPHRyPjx0ZD48Y29kZT4lezx2YXI+VkFSTkFNRTwvdmFyPn1vPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPlRoZSBjb250ZW50cyBvZiA8Y29kZT48dmFyPlZBUk5BTUU8L3Zhcj46PC9jb2RlPiBoZWFkZXIgbGluZShzKQogICAgICAgIGluIHRoZSByZXBseS48L3RkPjwvdHI+Cjx0ciBjbGFzcz0ib2RkIj48dGQ+PGNvZGU+JXA8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+VGhlIGNhbm9uaWNhbCBwb3J0IG9mIHRoZSBzZXJ2ZXIgc2VydmluZyB0aGUgcmVxdWVzdC48L3RkPjwvdHI+Cjx0cj48dGQ+PGNvZGU+JXs8dmFyPmZvcm1hdDwvdmFyPn1wPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPlRoZSBjYW5vbmljYWwgcG9ydCBvZiB0aGUgc2VydmVyIHNlcnZpbmcgdGhlIHJlcXVlc3QsIG9yIHRoZQogICAgICAgIHNlcnZlcidzIGFjdHVhbCBwb3J0LCBvciB0aGUgY2xpZW50J3MgYWN0dWFsIHBvcnQuIFZhbGlkIGZvcm1hdHMKICAgICAgICBhcmUgPGNvZGU+Y2Fub25pY2FsPC9jb2RlPiwgPGNvZGU+bG9jYWw8L2NvZGU+LCBvciA8Y29kZT5yZW1vdGU8L2NvZGU+LgogICAgICAgIDwvdGQ+PC90cj4KPHRyIGNsYXNzPSJvZGQiPjx0ZD48Y29kZT4lUDwvY29kZT48L3RkPgogICAgICAgIDx0ZD5UaGUgcHJvY2VzcyBJRCBvZiB0aGUgY2hpbGQgdGhhdCBzZXJ2aWNlZCB0aGUgcmVxdWVzdC48L3RkPjwvdHI+Cjx0cj48dGQ+PGNvZGU+JXs8dmFyPmZvcm1hdDwvdmFyPn1QPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPlRoZSBwcm9jZXNzIElEIG9yIHRocmVhZCBJRCBvZiB0aGUgY2hpbGQgdGhhdCBzZXJ2aWNlZCB0aGUKICAgICAgICByZXF1ZXN0LiAgVmFsaWQgZm9ybWF0cyBhcmUgPGNvZGU+cGlkPC9jb2RlPiwgPGNvZGU+dGlkPC9jb2RlPiwKICAgICAgICBhbmQgPGNvZGU+aGV4dGlkPC9jb2RlPi4gIDxjb2RlPmhleHRpZDwvY29kZT4gcmVxdWlyZXMgQVBSIDEuMi4wIG9yCiAgICAgICAgaGlnaGVyLgogICAgICAgIDwvdGQ+PC90cj4KPHRyIGNsYXNzPSJvZGQiPjx0ZD48Y29kZT4lcTwvY29kZT48L3RkPgogICAgICAgIDx0ZD5UaGUgcXVlcnkgc3RyaW5nIChwcmVwZW5kZWQgd2l0aCBhIDxjb2RlPj88L2NvZGU+IGlmIGEgcXVlcnkKICAgICAgICBzdHJpbmcgZXhpc3RzLCBvdGhlcndpc2UgYW4gZW1wdHkgc3RyaW5nKS48L3RkPjwvdHI+Cjx0cj48dGQ+PGNvZGU+JXI8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+Rmlyc3QgbGluZSBvZiByZXF1ZXN0LjwvdGQ+PC90cj4KPHRyIGNsYXNzPSJvZGQiPjx0ZD48Y29kZT4lUjwvY29kZT48L3RkPgogICAgICAgIDx0ZD5UaGUgaGFuZGxlciBnZW5lcmF0aW5nIHRoZSByZXNwb25zZSAoaWYgYW55KS48L3RkPjwvdHI+Cjx0cj48dGQ+PGNvZGU+JXM8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+U3RhdHVzLiBGb3IgcmVxdWVzdHMgdGhhdCBoYXZlIGJlZW4gaW50ZXJuYWxseSByZWRpcmVjdGVkLCB0aGlzIGlzCiAgICAgICAgdGhlIHN0YXR1cyBvZiB0aGUgPGVtPm9yaWdpbmFsPC9lbT4gcmVxdWVzdC4gVXNlIDxjb2RlPiUmZ3Q7czwvY29kZT4KICAgICAgICBmb3IgdGhlIGZpbmFsIHN0YXR1cy48L3RkPjwvdHI+Cjx0ciBjbGFzcz0ib2RkIj48dGQ+PGNvZGU+JXQ8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+VGltZSB0aGUgcmVxdWVzdCB3YXMgcmVjZWl2ZWQsIGluIHRoZSBmb3JtYXQgPGNvZGU+WzE4L1NlcC8yMDExOjE5OjE4OjI4IC0wNDAwXTwvY29kZT4uCiAgICAgICAgVGhlIGxhc3QgbnVtYmVyIGluZGljYXRlcyB0aGUgdGltZXpvbmUgb2Zmc2V0IGZyb20gR01UPC90ZD48L3RyPgo8dHI+PHRkPjxjb2RlPiV7PHZhcj5mb3JtYXQ8L3Zhcj59dDwvY29kZT48L3RkPgogICAgICAgIDx0ZD5UaGUgdGltZSwgaW4gdGhlIGZvcm0gZ2l2ZW4gYnkgZm9ybWF0LCB3aGljaCBzaG91bGQgYmUgaW4KICAgICAgICBhbiBleHRlbmRlZCA8Y29kZT5zdHJmdGltZSgzKTwvY29kZT4gZm9ybWF0IChwb3RlbnRpYWxseSBsb2NhbGl6ZWQpLgogICAgICAgIElmIHRoZSBmb3JtYXQgc3RhcnRzIHdpdGggPGNvZGU+YmVnaW46PC9jb2RlPiAoZGVmYXVsdCkgdGhlIHRpbWUgaXMgdGFrZW4KICAgICAgICBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSByZXF1ZXN0IHByb2Nlc3NpbmcuIElmIGl0IHN0YXJ0cyB3aXRoCiAgICAgICAgPGNvZGU+ZW5kOjwvY29kZT4gaXQgaXMgdGhlIHRpbWUgd2hlbiB0aGUgbG9nIGVudHJ5IGdldHMgd3JpdHRlbiwKICAgICAgICBjbG9zZSB0byB0aGUgZW5kIG9mIHRoZSByZXF1ZXN0IHByb2Nlc3NpbmcuIEluIGFkZGl0aW9uIHRvIHRoZSBmb3JtYXRzCiAgICAgICAgc3VwcG9ydGVkIGJ5IDxjb2RlPnN0cmZ0aW1lKDMpPC9jb2RlPiwgdGhlIGZvbGxvd2luZyBmb3JtYXQgdG9rZW5zIGFyZQogICAgICAgIHN1cHBvcnRlZDoKICAgICAgICA8dGFibGU+CiAgICAgICAgPHRyPjx0ZD48Y29kZT5zZWM8L2NvZGU+PC90ZD48dGQ+bnVtYmVyIG9mIHNlY29uZHMgc2luY2UgdGhlIEVwb2NoPC90ZD48L3RyPgogICAgICAgIDx0cj48dGQ+PGNvZGU+bXNlYzwvY29kZT48L3RkPjx0ZD5udW1iZXIgb2YgbWlsbGlzZWNvbmRzIHNpbmNlIHRoZSBFcG9jaDwvdGQ+PC90cj4KICAgICAgICA8dHI+PHRkPjxjb2RlPnVzZWM8L2NvZGU+PC90ZD48dGQ+bnVtYmVyIG9mIG1pY3Jvc2Vjb25kcyBzaW5jZSB0aGUgRXBvY2g8L3RkPjwvdHI+CiAgICAgICAgPHRyPjx0ZD48Y29kZT5tc2VjX2ZyYWM8L2NvZGU+PC90ZD48dGQ+bWlsbGlzZWNvbmQgZnJhY3Rpb248L3RkPjwvdHI+CiAgICAgICAgPHRyPjx0ZD48Y29kZT51c2VjX2ZyYWM8L2NvZGU+PC90ZD48dGQ+bWljcm9zZWNvbmQgZnJhY3Rpb248L3RkPjwvdHI+CiAgICAgICAgPC90YWJsZT4KICAgICAgICBUaGVzZSB0b2tlbnMgY2FuIG5vdCBiZSBjb21iaW5lZCB3aXRoIGVhY2ggb3RoZXIgb3IgPGNvZGU+c3RyZnRpbWUoMyk8L2NvZGU+CiAgICAgICAgZm9ybWF0dGluZyBpbiB0aGUgc2FtZSBmb3JtYXQgc3RyaW5nLiBZb3UgY2FuIHVzZSBtdWx0aXBsZQogICAgICAgIDxjb2RlPiV7PHZhcj5mb3JtYXQ8L3Zhcj59dDwvY29kZT4gdG9rZW5zIGluc3RlYWQuCiAgICAgICAgPC90ZD48L3RyPgo8dHIgY2xhc3M9Im9kZCI+PHRkPjxjb2RlPiVUPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPlRoZSB0aW1lIHRha2VuIHRvIHNlcnZlIHRoZSByZXF1ZXN0LCBpbiBzZWNvbmRzLjwvdGQ+PC90cj4KPHRyPjx0ZD48Y29kZT4lezx2YXI+VU5JVDwvdmFyPn1UPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPlRoZSB0aW1lIHRha2VuIHRvIHNlcnZlIHRoZSByZXF1ZXN0LCBpbiBhIHRpbWUgdW5pdCBnaXZlbiBieQogICAgICAgIDxjb2RlPlVOSVQ8L2NvZGU+LiBWYWxpZCB1bml0cyBhcmUgPGNvZGU+bXM8L2NvZGU+IGZvciBtaWxsaXNlY29uZHMsCiAgICAgICAgPGNvZGU+dXM8L2NvZGU+IGZvciBtaWNyb3NlY29uZHMsIGFuZCA8Y29kZT5zPC9jb2RlPiBmb3Igc2Vjb25kcy4KICAgICAgICBVc2luZyA8Y29kZT5zPC9jb2RlPiBnaXZlcyB0aGUgc2FtZSByZXN1bHQgYXMgPGNvZGU+JVQ8L2NvZGU+CiAgICAgICAgd2l0aG91dCBhbnkgZm9ybWF0OyB1c2luZyA8Y29kZT51czwvY29kZT4gZ2l2ZXMgdGhlIHNhbWUgcmVzdWx0CiAgICAgICAgYXMgPGNvZGU+JUQ8L2NvZGU+LiBDb21iaW5pbmcgPGNvZGU+JVQ8L2NvZGU+IHdpdGggYSB1bml0IGlzCiAgICAgICAgYXZhaWxhYmxlIGluIDIuNC4xMyBhbmQgbGF0ZXIuPC90ZD48L3RyPgo8dHIgY2xhc3M9Im9kZCI+PHRkPjxjb2RlPiV1PC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPlJlbW90ZSB1c2VyIGlmIHRoZSByZXF1ZXN0IHdhcyBhdXRoZW50aWNhdGVkLiBNYXkgYmUgYm9ndXMgaWYgcmV0dXJuIHN0YXR1cwogICAgICAgICg8Y29kZT4lczwvY29kZT4pIGlzIDQwMSAodW5hdXRob3JpemVkKS48L3RkPjwvdHI+Cjx0cj48dGQ+PGNvZGU+JVU8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+VGhlIFVSTCBwYXRoIHJlcXVlc3RlZCwgbm90IGluY2x1ZGluZyBhbnkgcXVlcnkgc3RyaW5nLjwvdGQ+PC90cj4KPHRyIGNsYXNzPSJvZGQiPjx0ZD48Y29kZT4ldjwvY29kZT48L3RkPgogICAgICAgIDx0ZD5UaGUgY2Fub25pY2FsIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9jb3JlLmh0bWwjc2VydmVybmFtZSI+U2VydmVyTmFtZTwvYT48L2NvZGU+CiAgICAgICAgb2YgdGhlIHNlcnZlciBzZXJ2aW5nIHRoZSByZXF1ZXN0LjwvdGQ+PC90cj4KPHRyPjx0ZD48Y29kZT4lVjwvY29kZT48L3RkPgogICAgICAgIDx0ZD5UaGUgc2VydmVyIG5hbWUgYWNjb3JkaW5nIHRvIHRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvY29yZS5odG1sI3VzZWNhbm9uaWNhbG5hbWUiPlVzZUNhbm9uaWNhbE5hbWU8L2E+PC9jb2RlPiBzZXR0aW5nLjwvdGQ+PC90cj4KPHRyIGNsYXNzPSJvZGQiPjx0ZD48Y29kZT4lWDwvY29kZT48L3RkPgogICAgICAgIDx0ZD5Db25uZWN0aW9uIHN0YXR1cyB3aGVuIHJlc3BvbnNlIGlzIGNvbXBsZXRlZDoKCiAgICAgICAgPHRhYmxlPgogICAgICAgIAogICAgICAgIDx0cj48dGQ+PGNvZGU+WDwvY29kZT4gPTwvdGQ+CiAgICAgICAgICAgIDx0ZD5Db25uZWN0aW9uIGFib3J0ZWQgYmVmb3JlIHRoZSByZXNwb25zZSBjb21wbGV0ZWQuPC90ZD48L3RyPgogICAgICAgIDx0cj48dGQ+PGNvZGU+KzwvY29kZT4gPTwvdGQ+CiAgICAgICAgICAgIDx0ZD5Db25uZWN0aW9uIG1heSBiZSBrZXB0IGFsaXZlIGFmdGVyIHRoZSByZXNwb25zZSBpcwogICAgICAgICAgICBzZW50LjwvdGQ+PC90cj4KICAgICAgICA8dHI+PHRkPjxjb2RlPi08L2NvZGU+ID0gPC90ZD4KICAgICAgICAgICAgPHRkPkNvbm5lY3Rpb24gd2lsbCBiZSBjbG9zZWQgYWZ0ZXIgdGhlIHJlc3BvbnNlIGlzCiAgICAgICAgICAgIHNlbnQuPC90ZD48L3RyPgogICAgICAgIDwvdGFibGU+CgogICAgICAgIDwvdGQ+PC90cj4KPHRyPjx0ZD48Y29kZT4lSTwvY29kZT48L3RkPgogICAgICAgIDx0ZD5CeXRlcyByZWNlaXZlZCwgaW5jbHVkaW5nIHJlcXVlc3QgYW5kIGhlYWRlcnMuIENhbm5vdCBiZSB6ZXJvLgogICAgICAgIFlvdSBuZWVkIHRvIGVuYWJsZSA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX2xvZ2lvLmh0bWwiPm1vZF9sb2dpbzwvYT48L2NvZGU+IHRvIHVzZSB0aGlzLjwvdGQ+PC90cj4KPHRyIGNsYXNzPSJvZGQiPjx0ZD48Y29kZT4lTzwvY29kZT48L3RkPgogICAgICAgIDx0ZD5CeXRlcyBzZW50LCBpbmNsdWRpbmcgaGVhZGVycy4gTWF5IGJlIHplcm8gaW4gcmFyZSBjYXNlcwogICAgICAgIHN1Y2ggYXMgd2hlbiBhIHJlcXVlc3QgaXMgYWJvcnRlZCBiZWZvcmUgYSByZXNwb25zZSBpcyBzZW50LgogICAgICAgIFlvdSBuZWVkIHRvIGVuYWJsZSA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX2xvZ2lvLmh0bWwiPm1vZF9sb2dpbzwvYT48L2NvZGU+IHRvIHVzZSB0aGlzLjwvdGQ+PC90cj4KPHRyPjx0ZD48Y29kZT4lUzwvY29kZT48L3RkPgogICAgICAgIDx0ZD5CeXRlcyB0cmFuc2ZlcnJlZCAocmVjZWl2ZWQgYW5kIHNlbnQpLCBpbmNsdWRpbmcgcmVxdWVzdCBhbmQgaGVhZGVycywKICAgICAgICBjYW5ub3QgYmUgemVyby4gVGhpcyBpcyB0aGUgY29tYmluYXRpb24gb2YgJUkgYW5kICVPLiBZb3UgbmVlZCB0bwogICAgICAgIGVuYWJsZSA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX2xvZ2lvLmh0bWwiPm1vZF9sb2dpbzwvYT48L2NvZGU+IHRvIHVzZSB0aGlzLjwvdGQ+PC90cj4KPHRyIGNsYXNzPSJvZGQiPjx0ZD48Y29kZT4lezx2YXI+VkFSTkFNRTwvdmFyPn1edGk8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+VGhlIGNvbnRlbnRzIG9mIDxjb2RlPjx2YXI+VkFSTkFNRTwvdmFyPjo8L2NvZGU+IHRyYWlsZXIgbGluZShzKQogICAgICAgIGluIHRoZSByZXF1ZXN0IHNlbnQgdG8gdGhlIHNlcnZlci4gIDwvdGQ+PC90cj4KPHRyPjx0ZD48Y29kZT4lezx2YXI+VkFSTkFNRTwvdmFyPn1edG88L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+VGhlIGNvbnRlbnRzIG9mIDxjb2RlPjx2YXI+VkFSTkFNRTwvdmFyPjo8L2NvZGU+IHRyYWlsZXIgbGluZShzKQogICAgICAgIGluIHRoZSByZXNwb25zZSBzZW50IGZyb20gdGhlIHNlcnZlci4gIDwvdGQ+PC90cj4KPC90YWJsZT4KCiAgICA8aDM+PGEgbmFtZT0ibW9kaWZpZXJzIiBpZD0ibW9kaWZpZXJzIj5Nb2RpZmllcnM8L2E+PC9oMz4KCiAgICAgIDxwPlBhcnRpY3VsYXIgaXRlbXMgY2FuIGJlIHJlc3RyaWN0ZWQgdG8gcHJpbnQgb25seSBmb3IKICAgICAgcmVzcG9uc2VzIHdpdGggc3BlY2lmaWMgSFRUUCBzdGF0dXMgY29kZXMgYnkgcGxhY2luZyBhCiAgICAgIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHN0YXR1cyBjb2RlcyBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlCiAgICAgICIlIi4gVGhlIHN0YXR1cyBjb2RlIGxpc3QgbWF5IGJlIHByZWNlZGVkIGJ5IGEgIjxjb2RlPiE8L2NvZGU+IiB0bwogICAgICBpbmRpY2F0ZSBuZWdhdGlvbi48L3A+CgogICAgPHRhYmxlIGNsYXNzPSJib3JkZXJlZCI+PHRyIGNsYXNzPSJoZWFkZXIiPjx0aD5Gb3JtYXQgU3RyaW5nPC90aD4KICAgIDx0aD5NZWFuaW5nPC90aD48L3RyPgo8dHI+CiAgICA8dGQ+PGNvZGU+JTQwMCw1MDF7VXNlci1hZ2VudH1pPC9jb2RlPjwvdGQ+CiAgICA8dGQ+TG9ncyA8Y29kZT5Vc2VyLWFnZW50PC9jb2RlPiBvbiA0MDAgZXJyb3JzIGFuZCA1MDEgZXJyb3JzIG9ubHkuIEZvcgogICAgICBvdGhlciBzdGF0dXMgY29kZXMsIHRoZSBsaXRlcmFsIHN0cmluZyA8Y29kZT4iLSI8L2NvZGU+IHdpbGwgYmUKICAgICAgbG9nZ2VkLjwvdGQ+PC90cj4KPHRyIGNsYXNzPSJvZGQiPjx0ZD48Y29kZT4lITIwMCwzMDQsMzAye1JlZmVyZXJ9aTwvY29kZT48L3RkPgogICAgPHRkPkxvZ3MgPGNvZGU+UmVmZXJlcjwvY29kZT4gb24gYWxsIHJlcXVlc3RzIHRoYXQgZG8KICAgIDxlbT5ub3Q8L2VtPiByZXR1cm4gb25lIG9mIHRoZSB0aHJlZSBzcGVjaWZpZWQgY29kZXMsCiAgICAiPGNvZGU+LTwvY29kZT4iIG90aGVyd2lzZS4KICAgIDwvdGQ+PC90cj4KPC90YWJsZT4KCiAgICAgIDxwPlRoZSBtb2RpZmllcnMgIiZsdDsiIGFuZCAiJmd0OyIgY2FuIGJlIHVzZWQgZm9yIHJlcXVlc3RzIHRoYXQKICAgICAgaGF2ZSBiZWVuIGludGVybmFsbHkgcmVkaXJlY3RlZCB0byBjaG9vc2Ugd2hldGhlciB0aGUgb3JpZ2luYWwKICAgICAgb3IgZmluYWwgKHJlc3BlY3RpdmVseSkgcmVxdWVzdCBzaG91bGQgYmUgY29uc3VsdGVkLiAgQnkKICAgICAgZGVmYXVsdCwgdGhlIDxjb2RlPiU8L2NvZGU+IGRpcmVjdGl2ZXMgPGNvZGU+JXMsICVVLCAlVCwKICAgICAgJUQsPC9jb2RlPiBhbmQgPGNvZGU+JXI8L2NvZGU+IGxvb2sgYXQgdGhlIG9yaWdpbmFsIHJlcXVlc3QKICAgICAgd2hpbGUgYWxsIG90aGVycyBsb29rIGF0IHRoZSBmaW5hbCByZXF1ZXN0LiAgU28gZm9yIGV4YW1wbGUsCiAgICAgIDxjb2RlPiUmZ3Q7czwvY29kZT4gY2FuIGJlIHVzZWQgdG8gcmVjb3JkIHRoZSBmaW5hbCBzdGF0dXMgb2YKICAgICAgdGhlIHJlcXVlc3QgYW5kIDxjb2RlPiUmbHQ7dTwvY29kZT4gY2FuIGJlIHVzZWQgdG8gcmVjb3JkIHRoZQogICAgICBvcmlnaW5hbCBhdXRoZW50aWNhdGVkIHVzZXIgb24gYSByZXF1ZXN0IHRoYXQgaXMgaW50ZXJuYWxseQogICAgICByZWRpcmVjdGVkIHRvIGFuIHVuYXV0aGVudGljYXRlZCByZXNvdXJjZS48L3A+CgogICAgCgogICAgPGgzPjxhIG5hbWU9ImZvcm1hdC1ub3RlcyIgaWQ9ImZvcm1hdC1ub3RlcyI+Rm9ybWF0IE5vdGVzPC9hPjwvaDM+CgogICAgICA8cD5Gb3Igc2VjdXJpdHkgcmVhc29ucywgc3RhcnRpbmcgd2l0aCB2ZXJzaW9uIDIuMC40NiwKICAgICAgbm9uLXByaW50YWJsZSBhbmQgb3RoZXIgc3BlY2lhbCBjaGFyYWN0ZXJzIGluIDxjb2RlPiVyPC9jb2RlPiwKICAgICAgPGNvZGU+JWk8L2NvZGU+IGFuZCA8Y29kZT4lbzwvY29kZT4gYXJlIGVzY2FwZWQgdXNpbmcKICAgICAgPGNvZGU+XHg8dmFyPmhoPC92YXI+PC9jb2RlPiBzZXF1ZW5jZXMsIHdoZXJlIDx2YXI+aGg8L3Zhcj4KICAgICAgc3RhbmRzIGZvciB0aGUgaGV4YWRlY2ltYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIHJhdwogICAgICBieXRlLiBFeGNlcHRpb25zIGZyb20gdGhpcyBydWxlIGFyZSA8Y29kZT4iPC9jb2RlPiBhbmQKICAgICAgPGNvZGU+XDwvY29kZT4sIHdoaWNoIGFyZSBlc2NhcGVkIGJ5IHByZXBlbmRpbmcgYSBiYWNrc2xhc2gsIGFuZAogICAgICBhbGwgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzLCB3aGljaCBhcmUgd3JpdHRlbiBpbiB0aGVpciBDLXN0eWxlCiAgICAgIG5vdGF0aW9uICg8Y29kZT5cbjwvY29kZT4sIDxjb2RlPlx0PC9jb2RlPiwgZXRjKS4gIEluIHZlcnNpb25zCiAgICAgIHByaW9yIHRvIDIuMC40Niwgbm8gZXNjYXBpbmcgd2FzIHBlcmZvcm1lZCBvbiB0aGVzZSBzdHJpbmdzIHNvCiAgICAgIHlvdSBoYWQgdG8gYmUgcXVpdGUgY2FyZWZ1bCB3aGVuIGRlYWxpbmcgd2l0aCByYXcgbG9nIGZpbGVzLjwvcD4KCiAgICAgIDxwPlNpbmNlIGh0dHBkIDIuMCwgdW5saWtlIDEuMywgdGhlIDxjb2RlPiViPC9jb2RlPiBhbmQKICAgICAgPGNvZGU+JUI8L2NvZGU+IGZvcm1hdCBzdHJpbmdzIGRvIG5vdCByZXByZXNlbnQgdGhlIG51bWJlciBvZgogICAgICBieXRlcyBzZW50IHRvIHRoZSBjbGllbnQsIGJ1dCBzaW1wbHkgdGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlCiAgICAgIEhUVFAgcmVzcG9uc2UgKHdoaWNoIHdpbGwgZGlmZmVyLCBmb3IgaW5zdGFuY2UsIGlmIHRoZQogICAgICBjb25uZWN0aW9uIGlzIGFib3J0ZWQsIG9yIGlmIFNTTCBpcyB1c2VkKS4gIFRoZSA8Y29kZT4lTzwvY29kZT4KICAgICAgZm9ybWF0IHByb3ZpZGVkIGJ5IDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfbG9naW8uaHRtbCI+bW9kX2xvZ2lvPC9hPjwvY29kZT4gd2lsbCBsb2cgdGhlCiAgICAgIGFjdHVhbCBudW1iZXIgb2YgYnl0ZXMgc2VudCBvdmVyIHRoZSBuZXR3b3JrLjwvcD4KCiAgICAgIDxkaXYgY2xhc3M9Im5vdGUiPgogICAgICA8cD5Ob3RlOiA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX2NhY2hlLmh0bWwiPm1vZF9jYWNoZTwvYT48L2NvZGU+IGlzIGltcGxlbWVudGVkIGFzIGEKICAgICAgcXVpY2staGFuZGxlciBhbmQgbm90IGFzIGEgc3RhbmRhcmQgaGFuZGxlci4gVGhlcmVmb3JlLCB0aGUKICAgICAgPGNvZGU+JVI8L2NvZGU+IGZvcm1hdCBzdHJpbmcgd2lsbCBub3QgcmV0dXJuIGFueSBoYW5kbGVyCiAgICAgIGluZm9ybWF0aW9uIHdoZW4gY29udGVudCBjYWNoaW5nIGlzIGludm9sdmVkLjwvcD4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJub3RlIj4KICAgICAgPHA+Tm90ZTogVGhlICdeJyBjaGFyYWN0ZXIgYXQgdGhlIHN0YXJ0IG9mIHRocmVlLWNoYXJhY3RlciBmb3JtYXRzCiAgICAgIGhhcyBubyBzaWduaWZpY2FuY2UsIGJ1dCBpdCBtdXN0IGJlIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgYW55IG5ld2x5CiAgICAgIGFkZGVkIHRocmVlLWNoYXJhY3RlciBmb3JtYXQgdG8gYXZvaWQgcG90ZW50aWFsIGNvbmZsaWN0cyB3aXRoIGxvZwogICAgICBmb3JtYXRzIHRoYXQgdXNlIGxpdGVyYWxzIGFkamFjZW50IHRvIGEgZm9ybWF0IHNwZWNpZmllciwgc3VjaCBhcwogICAgICAiJUR1cyIuPC9wPgogICAgICA8L2Rpdj4KCiAgICAKCiAgICA8aDM+PGEgbmFtZT0iZXhhbXBsZXMiIGlkPSJleGFtcGxlcyI+RXhhbXBsZXM8L2E+PC9oMz4KCiAgICAgIDxwPlNvbWUgY29tbW9ubHkgdXNlZCBsb2cgZm9ybWF0IHN0cmluZ3MgYXJlOjwvcD4KCiAgICAgIDxkbD4KICAgICAgICA8ZHQ+Q29tbW9uIExvZyBGb3JtYXQgKENMRik8L2R0PgogICAgICAgIDxkZD48Y29kZT4iJWggJWwgJXUgJXQgXCIlclwiICUmZ3Q7cyAlYiI8L2NvZGU+PC9kZD4KCiAgICAgICAgPGR0PkNvbW1vbiBMb2cgRm9ybWF0IHdpdGggVmlydHVhbCBIb3N0PC9kdD4KICAgICAgICA8ZGQ+PGNvZGU+IiV2ICVoICVsICV1ICV0IFwiJXJcIiAlJmd0O3MgJWIiPC9jb2RlPjwvZGQ+CgogICAgICAgIDxkdD5OQ1NBIGV4dGVuZGVkL2NvbWJpbmVkIGxvZyBmb3JtYXQ8L2R0PgogICAgICAgIDxkZD48Y29kZT4iJWggJWwgJXUgJXQgXCIlclwiICUmZ3Q7cyAlYiBcIiV7UmVmZXJlcn1pXCIKICAgICAgICBcIiV7VXNlci1hZ2VudH1pXCIiPC9jb2RlPjwvZGQ+CgogICAgICAgIDxkdD5SZWZlcmVyIGxvZyBmb3JtYXQ8L2R0PgogICAgICAgIDxkZD48Y29kZT4iJXtSZWZlcmVyfWkgLSZndDsgJVUiPC9jb2RlPjwvZGQ+CgogICAgICAgIDxkdD5BZ2VudCAoQnJvd3NlcikgbG9nIGZvcm1hdDwvZHQ+CiAgICAgICAgPGRkPjxjb2RlPiIle1VzZXItYWdlbnR9aSI8L2NvZGU+PC9kZD4KICAgICAgPC9kbD4KCiAgICAgIDxwPllvdSBjYW4gdXNlIHRoZSA8Y29kZT4le2Zvcm1hdH10PC9jb2RlPiBkaXJlY3RpdmUgbXVsdGlwbGUKICAgICAgdGltZXMgdG8gYnVpbGQgdXAgYSB0aW1lIGZvcm1hdCB1c2luZyB0aGUgZXh0ZW5kZWQgZm9ybWF0IHRva2VucwogICAgICBsaWtlIDxjb2RlPm1zZWNfZnJhYzwvY29kZT46PC9wPgogICAgICA8ZGw+CjxkdD5UaW1lc3RhbXAgaW5jbHVkaW5nIG1pbGxpc2Vjb25kczwvZHQ+CjxkZD48Y29kZT4iJXslZC8lYi8lWSAlVH10LiV7bXNlY19mcmFjfXQgJXslen10IjwvY29kZT48L2RkPgoKICAgICAgPC9kbD4KCiAgICAKPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0ic2VjdXJpdHkiIGlkPSJzZWN1cml0eSI+U2VjdXJpdHkgQ29uc2lkZXJhdGlvbnM8L2E+PC9oMj4KICAgIDxwPlNlZSB0aGUgPGEgaHJlZj0iLi4vbWlzYy9zZWN1cml0eV90aXBzLmh0bWwjc2VydmVycm9vdCI+c2VjdXJpdHkgdGlwczwvYT4KICAgIGRvY3VtZW50IGZvciBkZXRhaWxzIG9uIHdoeSB5b3VyIHNlY3VyaXR5IGNvdWxkIGJlIGNvbXByb21pc2VkCiAgICBpZiB0aGUgZGlyZWN0b3J5IHdoZXJlIGxvZ2ZpbGVzIGFyZSBzdG9yZWQgaXMgd3JpdGFibGUgYnkKICAgIGFueW9uZSBvdGhlciB0aGFuIHRoZSB1c2VyIHRoYXQgc3RhcnRzIHRoZSBzZXJ2ZXIuPC9wPgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iQnVmZmVyZWRMb2dzIiBpZD0iQnVmZmVyZWRMb2dzIj5CdWZmZXJlZExvZ3M8L2E+IDxhIG5hbWU9ImJ1ZmZlcmVkbG9ncyIgaWQ9ImJ1ZmZlcmVkbG9ncyI+RGlyZWN0aXZlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+QnVmZmVyIGxvZyBlbnRyaWVzIGluIG1lbW9yeSBiZWZvcmUgd3JpdGluZyB0byBkaXNrPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXg6PC9hPjwvdGg+PHRkPjxjb2RlPkJ1ZmZlcmVkTG9ncyBPbnxPZmY8L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVmYXVsdCI+RGVmYXVsdDo8L2E+PC90aD48dGQ+PGNvZGU+QnVmZmVyZWRMb2dzIE9mZjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkJhc2U8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+bW9kX2xvZ19jb25maWc8L3RkPjwvdHI+CjwvdGFibGU+CiAgICA8cD5UaGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+QnVmZmVyZWRMb2dzPC9jb2RlPiBkaXJlY3RpdmUgY2F1c2VzCiAgICA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX2xvZ19jb25maWcuaHRtbCI+bW9kX2xvZ19jb25maWc8L2E+PC9jb2RlPiB0byBzdG9yZSBzZXZlcmFsIGxvZyBlbnRyaWVzIGluCiAgICBtZW1vcnkgYW5kIHdyaXRlIHRoZW0gdG9nZXRoZXIgdG8gZGlzaywgcmF0aGVyIHRoYW4gd3JpdGluZyB0aGVtCiAgICBhZnRlciBlYWNoIHJlcXVlc3QuICBPbiBzb21lIHN5c3RlbXMsIHRoaXMgbWF5IHJlc3VsdCBpbiBtb3JlCiAgICBlZmZpY2llbnQgZGlzayBhY2Nlc3MgYW5kIGhlbmNlIGhpZ2hlciBwZXJmb3JtYW5jZS4gIEl0IG1heSBiZQogICAgc2V0IG9ubHkgb25jZSBmb3IgdGhlIGVudGlyZSBzZXJ2ZXI7IGl0IGNhbm5vdCBiZSBjb25maWd1cmVkCiAgICBwZXIgdmlydHVhbC1ob3N0LjwvcD4KCiAgICA8ZGl2IGNsYXNzPSJub3RlIj5UaGlzIGRpcmVjdGl2ZSBzaG91bGQgYmUgdXNlZCB3aXRoIGNhdXRpb24gYXMgYSBjcmFzaCBtaWdodAogICAgY2F1c2UgbG9zcyBvZiBsb2dnaW5nIGRhdGEuPC9kaXY+Cgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iQ3VzdG9tTG9nIiBpZD0iQ3VzdG9tTG9nIj5DdXN0b21Mb2c8L2E+IDxhIG5hbWU9ImN1c3RvbWxvZyIgaWQ9ImN1c3RvbWxvZyI+RGlyZWN0aXZlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+U2V0cyBmaWxlbmFtZSBhbmQgZm9ybWF0IG9mIGxvZyBmaWxlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXg6PC9hPjwvdGg+PHRkPjxjb2RlPkN1c3RvbUxvZyAgPHZhcj5maWxlPC92YXI+fDx2YXI+cGlwZTwvdmFyPnw8dmFyPnByb3ZpZGVyPC92YXI+Cjx2YXI+Zm9ybWF0PC92YXI+fDx2YXI+bmlja25hbWU8L3Zhcj4KW2Vudj1bIV08dmFyPmVudmlyb25tZW50LXZhcmlhYmxlPC92YXI+fApleHByPTx2YXI+ZXhwcmVzc2lvbjwvdmFyPl08L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dDo8L2E+PC90aD48dGQ+c2VydmVyIGNvbmZpZywgdmlydHVhbCBob3N0PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkJhc2U8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+bW9kX2xvZ19jb25maWc8L3RkPjwvdHI+CjwvdGFibGU+CiAgICA8cD5UaGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+Q3VzdG9tTG9nPC9jb2RlPiBkaXJlY3RpdmUgaXMgdXNlZCB0bwogICAgbG9nIHJlcXVlc3RzIHRvIHRoZSBzZXJ2ZXIuIEEgbG9nIGZvcm1hdCBpcyBzcGVjaWZpZWQsIGFuZCB0aGUKICAgIGxvZ2dpbmcgY2FuIG9wdGlvbmFsbHkgYmUgbWFkZSBjb25kaXRpb25hbCBvbiByZXF1ZXN0CiAgICBjaGFyYWN0ZXJpc3RpY3MgdXNpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzLjwvcD4KCiAgICA8cD5UaGUgZmlyc3QgYXJndW1lbnQsIHdoaWNoIHNwZWNpZmllcyB0aGUgbG9jYXRpb24gdG8gd2hpY2gKICAgIHRoZSBsb2dzIHdpbGwgYmUgd3JpdHRlbiwgY2FuIHRha2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgdHdvCiAgICB0eXBlcyBvZiB2YWx1ZXM6PC9wPgoKICAgIDxkbD4KICAgICAgPGR0Pjx2YXI+ZmlsZTwvdmFyPjwvZHQ+CiAgICAgIDxkZD5BIGZpbGVuYW1lLCByZWxhdGl2ZSB0byB0aGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL2NvcmUuaHRtbCNzZXJ2ZXJyb290Ij5TZXJ2ZXJSb290PC9hPjwvY29kZT4uPC9kZD4KCiAgICAgIDxkdD48dmFyPnBpcGU8L3Zhcj48L2R0PgogICAgICA8ZGQ+VGhlIHBpcGUgY2hhcmFjdGVyICI8Y29kZT58PC9jb2RlPiIsIGZvbGxvd2VkIGJ5IHRoZSBwYXRoCiAgICAgIHRvIGEgcHJvZ3JhbSB0byByZWNlaXZlIHRoZSBsb2cgaW5mb3JtYXRpb24gb24gaXRzIHN0YW5kYXJkCiAgICAgIGlucHV0LiBTZWUgdGhlIG5vdGVzIG9uIDxhIGhyZWY9Ii4uL2xvZ3MuaHRtbCNwaXBlZCI+cGlwZWQgbG9nczwvYT4KICAgICAgZm9yIG1vcmUgaW5mb3JtYXRpb24uCgogICAgICA8ZGl2IGNsYXNzPSJ3YXJuaW5nIj48aDM+U2VjdXJpdHk6PC9oMz4KICAgICAgPHA+SWYgYSBwcm9ncmFtIGlzIHVzZWQsIHRoZW4gaXQgd2lsbCBiZSBydW4gYXMgdGhlIHVzZXIgd2hvCiAgICAgIHN0YXJ0ZWQgPGNvZGUgY2xhc3M9InByb2dyYW0iPjxhIGhyZWY9Ii4uL3Byb2dyYW1zL2h0dHBkLmh0bWwiPmh0dHBkPC9hPjwvY29kZT4uIFRoaXMgd2lsbCBiZSByb290IGlmIHRoZSBzZXJ2ZXIgd2FzCiAgICAgIHN0YXJ0ZWQgYnkgcm9vdDsgYmUgc3VyZSB0aGF0IHRoZSBwcm9ncmFtIGlzIHNlY3VyZS48L3A+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJ3YXJuaW5nIj48aDM+Tm90ZTwvaDM+CiAgICAgICAgPHA+V2hlbiBlbnRlcmluZyBhIGZpbGUgcGF0aCBvbiBub24tVW5peCBwbGF0Zm9ybXMsIGNhcmUgc2hvdWxkIGJlIHRha2VuCiAgICAgICAgdG8gbWFrZSBzdXJlIHRoYXQgb25seSBmb3J3YXJkIHNsYXNoZWQgYXJlIHVzZWQgZXZlbiB0aG91Z2ggdGhlIHBsYXRmb3JtCiAgICAgICAgbWF5IGFsbG93IHRoZSB1c2Ugb2YgYmFjayBzbGFzaGVzLiBJbiBnZW5lcmFsIGl0IGlzIGEgZ29vZCBpZGVhIHRvIGFsd2F5cwogICAgICAgIHVzZSBmb3J3YXJkIHNsYXNoZXMgdGhyb3VnaG91dCB0aGUgY29uZmlndXJhdGlvbiBmaWxlcy48L3A+CiAgICAgIDwvZGl2PjwvZGQ+CiAgICAgIDxkdD48dmFyPnByb3ZpZGVyPC92YXI+PC9kdD4KICAgICAgPGRkPk1vZHVsZXMgaW1wbGVtZW50aW5nIEVycm9yTG9nIHByb3ZpZGVycyBjYW4gYWxzbyBiZSB1c2VkIGFzIGEgdGFyZ2V0CiAgICAgIGZvciBDdXN0b21Mb2cgbWVzc2FnZXMuIFRvIHVzZSBFcnJvckxvZyBwcm92aWRlciBhcyBhIHRhcmdldCwKICAgICAgInByb3ZpZGVyOmFyZ3VtZW50IiBzeW50YXggbXVzdCBiZSB1c2VkLiBZb3UgY2FuIGZvciBleGFtcGxlIHVzZQogICAgICA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX2pvdXJuYWxkLmh0bWwiPm1vZF9qb3VybmFsZDwvYT48L2NvZGU+IG9yIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2Rfc3lzbG9nLmh0bWwiPm1vZF9zeXNsb2c8L2E+PC9jb2RlPgogICAgICBhcyBhIHByb3ZpZGVyOgogICAgPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1jb25maWciPiMgQ3VzdG9tTG9nIGxvZ2dpbmcgdG8gam91cm5hbGQKQ3VzdG9tTG9nICJqb3VybmFsZCIgIiVoICVsICV1ICV0IFwiJXJcIiAlJmd0O3MgJWIiCgojIEN1c3RvbUxvZyBsb2dnaW5nIHRvIHN5c2xvZyB3aXRoICJ1c2VyIiBmYWNpbGl0eQpDdXN0b21Mb2cgInN5c2xvZzp1c2VyIiAiJWggJWwgJXUgJXQgXCIlclwiICUmZ3Q7cyAlYiI8L3ByZT4KCiAgICAgIDwvZGQ+CiAgICA8L2RsPgoKICAgIDxwPlRoZSBzZWNvbmQgYXJndW1lbnQgc3BlY2lmaWVzIHdoYXQgd2lsbCBiZSB3cml0dGVuIHRvIHRoZQogICAgbG9nIGZpbGUuIEl0IGNhbiBzcGVjaWZ5IGVpdGhlciBhIDx2YXI+bmlja25hbWU8L3Zhcj4gZGVmaW5lZCBieQogICAgYSBwcmV2aW91cyA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjbG9nZm9ybWF0Ij5Mb2dGb3JtYXQ8L2E+PC9jb2RlPgogICAgZGlyZWN0aXZlLCBvciBpdCBjYW4gYmUgYW4gZXhwbGljaXQgPHZhcj5mb3JtYXQ8L3Zhcj4gc3RyaW5nIGFzCiAgICBkZXNjcmliZWQgaW4gdGhlIDxhIGhyZWY9IiNmb3JtYXRzIj5sb2cgZm9ybWF0czwvYT4gc2VjdGlvbi48L3A+CgogICAgPHA+Rm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgdHdvIHNldHMgb2YgZGlyZWN0aXZlcyBoYXZlCiAgICBleGFjdGx5IHRoZSBzYW1lIGVmZmVjdDo8L3A+CgogICAgPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1jb25maWciPiMgQ3VzdG9tTG9nIHdpdGggZm9ybWF0IG5pY2tuYW1lCkxvZ0Zvcm1hdCAiJWggJWwgJXUgJXQgXCIlclwiICUmZ3Q7cyAlYiIgY29tbW9uCkN1c3RvbUxvZyAibG9ncy9hY2Nlc3NfbG9nIiBjb21tb24KCiMgQ3VzdG9tTG9nIHdpdGggZXhwbGljaXQgZm9ybWF0IHN0cmluZwpDdXN0b21Mb2cgImxvZ3MvYWNjZXNzX2xvZyIgIiVoICVsICV1ICV0IFwiJXJcIiAlJmd0O3MgJWIiPC9wcmU+CgoKICAgIDxwPlRoZSB0aGlyZCBhcmd1bWVudCBpcyBvcHRpb25hbCBhbmQgY29udHJvbHMgd2hldGhlciBvcgogICAgbm90IHRvIGxvZyBhIHBhcnRpY3VsYXIgcmVxdWVzdC4gVGhlIGNvbmRpdGlvbiBjYW4gYmUgdGhlCiAgICBwcmVzZW5jZSBvciBhYnNlbmNlIChpbiB0aGUgY2FzZSBvZiBhICc8Y29kZT5lbnY9ITx2YXI+bmFtZTwvdmFyPjwvY29kZT4nCiAgICBjbGF1c2UpIG9mIGEgcGFydGljdWxhciB2YXJpYWJsZSBpbiB0aGUgc2VydmVyCiAgICA8YSBocmVmPSIuLi9lbnYuaHRtbCI+ZW52aXJvbm1lbnQ8L2E+LiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29uZGl0aW9uCiAgICBjYW4gYmUgZXhwcmVzc2VkIGFzIGFyYml0cmFyeSBib29sZWFuIDxhIGhyZWY9Ii4uL2V4cHIuaHRtbCI+ZXhwcmVzc2lvbjwvYT4uIElmIHRoZSBjb25kaXRpb24gaXMgbm90IHNhdGlzZmllZCwgdGhlIHJlcXVlc3QKICAgIHdpbGwgbm90IGJlIGxvZ2dlZC4gUmVmZXJlbmNlcyB0byBIVFRQIGhlYWRlcnMgIGluIHRoZSBleHByZXNzaW9uCiAgICB3aWxsIG5vdCBjYXVzZSB0aGUgaGVhZGVyIG5hbWVzIHRvIGJlIGFkZGVkIHRvIHRoZSBWYXJ5IGhlYWRlci48L3A+CgogICAgPHA+RW52aXJvbm1lbnQgdmFyaWFibGVzIGNhbiBiZSBzZXQgb24gYSBwZXItcmVxdWVzdAogICAgYmFzaXMgdXNpbmcgdGhlIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2Rfc2V0ZW52aWYuaHRtbCI+bW9kX3NldGVudmlmPC9hPjwvY29kZT4KICAgIGFuZC9vciA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX3Jld3JpdGUuaHRtbCI+bW9kX3Jld3JpdGU8L2E+PC9jb2RlPiBtb2R1bGVzLiBGb3IKICAgIGV4YW1wbGUsIGlmIHlvdSB3YW50IHRvIHJlY29yZCByZXF1ZXN0cyBmb3IgYWxsIEdJRgogICAgaW1hZ2VzIG9uIHlvdXIgc2VydmVyIGluIGEgc2VwYXJhdGUgbG9nZmlsZSBidXQgbm90IGluIHlvdXIgbWFpbgogICAgbG9nLCB5b3UgY2FuIHVzZTo8L3A+CgogICAgPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1jb25maWciPlNldEVudklmIFJlcXVlc3RfVVJJIFwuZ2lmJCBnaWYtaW1hZ2UKQ3VzdG9tTG9nICJnaWYtcmVxdWVzdHMubG9nIiBjb21tb24gZW52PWdpZi1pbWFnZQpDdXN0b21Mb2cgIm5vbmdpZi1yZXF1ZXN0cy5sb2ciIGNvbW1vbiBlbnY9IWdpZi1pbWFnZTwvcHJlPgoKCiAgICA8cD5PciwgdG8gcmVwcm9kdWNlIHRoZSBiZWhhdmlvciBvZiB0aGUgb2xkIFJlZmVyZXJJZ25vcmUKICAgIGRpcmVjdGl2ZSwgeW91IG1pZ2h0IHVzZSB0aGUgZm9sbG93aW5nOjwvcD4KCiAgICA8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWNvbmZpZyI+U2V0RW52SWYgUmVmZXJlciBleGFtcGxlXC5jb20gbG9jYWxyZWZlcmVyCkN1c3RvbUxvZyAicmVmZXJlci5sb2ciIHJlZmVyZXIgZW52PSFsb2NhbHJlZmVyZXI8L3ByZT4KCgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iR2xvYmFsTG9nIiBpZD0iR2xvYmFsTG9nIj5HbG9iYWxMb2c8L2E+IDxhIG5hbWU9Imdsb2JhbGxvZyIgaWQ9Imdsb2JhbGxvZyI+RGlyZWN0aXZlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+U2V0cyBmaWxlbmFtZSBhbmQgZm9ybWF0IG9mIGxvZyBmaWxlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXg6PC9hPjwvdGg+PHRkPjxjb2RlPkdsb2JhbExvZyAgPHZhcj5maWxlPC92YXI+fDx2YXI+cGlwZTwvdmFyPnw8dmFyPnByb3ZpZGVyPC92YXI+Cjx2YXI+Zm9ybWF0PC92YXI+fDx2YXI+bmlja25hbWU8L3Zhcj4KW2Vudj1bIV08dmFyPmVudmlyb25tZW50LXZhcmlhYmxlPC92YXI+fApleHByPTx2YXI+ZXhwcmVzc2lvbjwvdmFyPl08L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dDo8L2E+PC90aD48dGQ+c2VydmVyIGNvbmZpZzwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5CYXNlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPm1vZF9sb2dfY29uZmlnPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29tcGF0aWJpbGl0eSI+Q29tcGF0aWJpbGl0eTo8L2E+PC90aD48dGQ+QXZhaWxhYmxlIGluIEFwYWNoZSBIVFRQIFNlcnZlciAyLjQuMTkgYW5kIGxhdGVyPC90ZD48L3RyPgo8L3RhYmxlPgoKICAgIDxwPlRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5HbG9iYWxMb2c8L2NvZGU+IGRpcmVjdGl2ZSBkZWZpbmVzIGEgbG9nIHNoYXJlZAogICAgICAgYnkgdGhlIG1haW4gc2VydmVyIGNvbmZpZ3VyYXRpb24gYW5kIGFsbCBkZWZpbmVkIHZpcnR1YWwgaG9zdHMuPC9wPgoKICAgIDxwPlRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5HbG9iYWxMb2c8L2NvZGU+IGRpcmVjdGl2ZSBpcyBpZGVudGljYWwgdG8KICAgIHRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5DdXN0b21Mb2c8L2NvZGU+IGRpcmVjdGl2ZSwgYXBhcnQgZnJvbSB0aGUgZm9sbG93aW5nCiAgICBkaWZmZXJlbmNlczo8L3A+CiAgICA8dWw+CiAgICAgICA8bGk+PGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+R2xvYmFsTG9nPC9jb2RlPiBpcyBub3QgdmFsaWQgaW4gdmlydHVhbCBob3N0CiAgICAgICAgICAgIGNvbnRleHQuPC9saT4KICAgICAgIDxsaT48Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5HbG9iYWxMb2c8L2NvZGU+IGlzIHVzZWQgYnkgdmlydHVhbCBob3N0cyB0aGF0CiAgICAgICAgICAgZGVmaW5lIHRoZWlyIG93biA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5DdXN0b21Mb2c8L2NvZGU+LCB1bmxpa2UgYSAKICAgICAgICAgICBnbG9iYWxseSBzcGVjaWZpZWQgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+Q3VzdG9tTG9nPC9jb2RlPi48L2xpPgogICAgPC91bD4KCjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJMb2dGb3JtYXQiIGlkPSJMb2dGb3JtYXQiPkxvZ0Zvcm1hdDwvYT4gPGEgbmFtZT0ibG9nZm9ybWF0IiBpZD0ibG9nZm9ybWF0Ij5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5EZXNjcmliZXMgYSBmb3JtYXQgZm9yIHVzZSBpbiBhIGxvZyBmaWxlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXg6PC9hPjwvdGg+PHRkPjxjb2RlPkxvZ0Zvcm1hdCA8dmFyPmZvcm1hdDwvdmFyPnw8dmFyPm5pY2tuYW1lPC92YXI+Cls8dmFyPm5pY2tuYW1lPC92YXI+XTwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZWZhdWx0Ij5EZWZhdWx0OjwvYT48L3RoPjx0ZD48Y29kZT5Mb2dGb3JtYXQgIiVoICVsICV1ICV0IFwiJXJcIiAlJmd0O3MgJWIiPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHQ6PC9hPjwvdGg+PHRkPnNlcnZlciBjb25maWcsIHZpcnR1YWwgaG9zdDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5CYXNlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPm1vZF9sb2dfY29uZmlnPC90ZD48L3RyPgo8L3RhYmxlPgogICAgPHA+VGhpcyBkaXJlY3RpdmUgc3BlY2lmaWVzIHRoZSBmb3JtYXQgb2YgdGhlIGFjY2VzcyBsb2cKICAgIGZpbGUuPC9wPgoKICAgIDxwPlRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5Mb2dGb3JtYXQ8L2NvZGU+IGRpcmVjdGl2ZSBjYW4gdGFrZSBvbmUgb2YgdHdvCiAgICBmb3Jtcy4gSW4gdGhlIGZpcnN0IGZvcm0sIHdoZXJlIG9ubHkgb25lIGFyZ3VtZW50IGlzIHNwZWNpZmllZCwKICAgIHRoaXMgZGlyZWN0aXZlIHNldHMgdGhlIGxvZyBmb3JtYXQgd2hpY2ggd2lsbCBiZSB1c2VkIGJ5IGxvZ3MKICAgIHNwZWNpZmllZCBpbiBzdWJzZXF1ZW50IDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPlRyYW5zZmVyTG9nPC9jb2RlPgogICAgZGlyZWN0aXZlcy4gVGhlIHNpbmdsZSBhcmd1bWVudCBjYW4gc3BlY2lmeSBhbiBleHBsaWNpdAogICAgPHZhcj5mb3JtYXQ8L3Zhcj4gYXMgZGlzY3Vzc2VkIGluIHRoZSA8YSBocmVmPSIjZm9ybWF0cyI+Y3VzdG9tIGxvZwogICAgZm9ybWF0czwvYT4gc2VjdGlvbiBhYm92ZS4gQWx0ZXJuYXRpdmVseSwgaXQgY2FuIHVzZSBhCiAgICA8dmFyPm5pY2tuYW1lPC92YXI+IHRvIHJlZmVyIHRvIGEgbG9nIGZvcm1hdCBkZWZpbmVkIGluIGEKICAgIHByZXZpb3VzIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPkxvZ0Zvcm1hdDwvY29kZT4gZGlyZWN0aXZlIGFzIGRlc2NyaWJlZAogICAgYmVsb3cuPC9wPgoKICAgIDxwPlRoZSBzZWNvbmQgZm9ybSBvZiB0aGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+TG9nRm9ybWF0PC9jb2RlPgogICAgZGlyZWN0aXZlIGFzc29jaWF0ZXMgYW4gZXhwbGljaXQgPHZhcj5mb3JtYXQ8L3Zhcj4gd2l0aCBhCiAgICA8dmFyPm5pY2tuYW1lPC92YXI+LiBUaGlzIDx2YXI+bmlja25hbWU8L3Zhcj4gY2FuIHRoZW4gYmUgdXNlZCBpbgogICAgc3Vic2VxdWVudCA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5Mb2dGb3JtYXQ8L2NvZGU+IG9yCiAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjY3VzdG9tbG9nIj5DdXN0b21Mb2c8L2E+PC9jb2RlPiBkaXJlY3RpdmVzCiAgICByYXRoZXIgdGhhbiByZXBlYXRpbmcgdGhlIGVudGlyZSBmb3JtYXQgc3RyaW5nLiBBCiAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5Mb2dGb3JtYXQ8L2NvZGU+IGRpcmVjdGl2ZSB0aGF0IGRlZmluZXMgYSBuaWNrbmFtZQogICAgPHN0cm9uZz5kb2VzIG5vdGhpbmcgZWxzZTwvc3Ryb25nPiAtLSB0aGF0IGlzLCBpdCA8ZW0+b25seTwvZW0+CiAgICBkZWZpbmVzIHRoZSBuaWNrbmFtZSwgaXQgZG9lc24ndCBhY3R1YWxseSBhcHBseSB0aGUgZm9ybWF0IGFuZCBtYWtlCiAgICBpdCB0aGUgZGVmYXVsdC4gVGhlcmVmb3JlLCBpdCB3aWxsIG5vdCBhZmZlY3Qgc3Vic2VxdWVudAogICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI3RyYW5zZmVybG9nIj5UcmFuc2ZlckxvZzwvYT48L2NvZGU+IGRpcmVjdGl2ZXMuCiAgICBJbiBhZGRpdGlvbiwgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+TG9nRm9ybWF0PC9jb2RlPiBjYW5ub3QgdXNlIG9uZSBuaWNrbmFtZQogICAgdG8gZGVmaW5lIGFub3RoZXIgbmlja25hbWUuIE5vdGUgdGhhdCB0aGUgbmlja25hbWUgc2hvdWxkIG5vdCBjb250YWluCiAgICBwZXJjZW50IHNpZ25zICg8Y29kZT4lPC9jb2RlPikuPC9wPgoKICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUiPjxoMz5FeGFtcGxlPC9oMz48cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWNvbmZpZyI+TG9nRm9ybWF0ICIldiAlaCAlbCAldSAldCBcIiVyXCIgJSZndDtzICViIiB2aG9zdF9jb21tb248L3ByZT4KPC9kaXY+CgoKPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9IlRyYW5zZmVyTG9nIiBpZD0iVHJhbnNmZXJMb2ciPlRyYW5zZmVyTG9nPC9hPiA8YSBuYW1lPSJ0cmFuc2ZlcmxvZyIgaWQ9InRyYW5zZmVybG9nIj5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5TcGVjaWZ5IGxvY2F0aW9uIG9mIGEgbG9nIGZpbGU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+VHJhbnNmZXJMb2cgPHZhcj5maWxlPC92YXI+fDx2YXI+cGlwZTwvdmFyPjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnLCB2aXJ0dWFsIGhvc3Q8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1czo8L2E+PC90aD48dGQ+QmFzZTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI01vZHVsZSI+TW9kdWxlOjwvYT48L3RoPjx0ZD5tb2RfbG9nX2NvbmZpZzwvdGQ+PC90cj4KPC90YWJsZT4KICAgIDxwPlRoaXMgZGlyZWN0aXZlIGhhcyBleGFjdGx5IHRoZSBzYW1lIGFyZ3VtZW50cyBhbmQgZWZmZWN0IGFzCiAgICB0aGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI2N1c3RvbWxvZyI+Q3VzdG9tTG9nPC9hPjwvY29kZT4KICAgIGRpcmVjdGl2ZSwgd2l0aCB0aGUgZXhjZXB0aW9uIHRoYXQgaXQgZG9lcyBub3QgYWxsb3cgdGhlIGxvZyBmb3JtYXQKICAgIHRvIGJlIHNwZWNpZmllZCBleHBsaWNpdGx5IG9yIGZvciBjb25kaXRpb25hbCBsb2dnaW5nIG9mIHJlcXVlc3RzLgogICAgSW5zdGVhZCwgdGhlIGxvZyBmb3JtYXQgaXMgZGV0ZXJtaW5lZCBieSB0aGUgbW9zdCByZWNlbnRseSBzcGVjaWZpZWQKICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNsb2dmb3JtYXQiPkxvZ0Zvcm1hdDwvYT48L2NvZGU+IGRpcmVjdGl2ZQogICAgd2hpY2ggZG9lcyBub3QgZGVmaW5lIGEgbmlja25hbWUuIENvbW1vbiBMb2cgRm9ybWF0IGlzIHVzZWQgaWYgbm8KICAgIG90aGVyIGZvcm1hdCBoYXMgYmVlbiBzcGVjaWZpZWQuPC9wPgoKICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUiPjxoMz5FeGFtcGxlPC9oMz48cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWNvbmZpZyI+TG9nRm9ybWF0ICIlaCAlbCAldSAldCBcIiVyXCIgJSZndDtzICViIFwiJXtSZWZlcmVyfWlcIiBcIiV7VXNlci1hZ2VudH1pXCIiClRyYW5zZmVyTG9nICJsb2dzL2FjY2Vzc19sb2ciPC9wcmU+CjwvZGl2PgoKPC9kaXY+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJib3R0b21sYW5nIj4KPHA+PHNwYW4+QXZhaWxhYmxlIExhbmd1YWdlczogPC9zcGFuPjxhIGhyZWY9Ii4uL2VuL21vZC9tb2RfbG9nX2NvbmZpZy5odG1sIiB0aXRsZT0iRW5nbGlzaCI+Jm5ic3A7ZW4mbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi4vamEvbW9kL21vZF9sb2dfY29uZmlnLmh0bWwiIGhyZWZsYW5nPSJqYSIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJKYXBhbmVzZSI+Jm5ic3A7amEmbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi4va28vbW9kL21vZF9sb2dfY29uZmlnLmh0bWwiIGhyZWZsYW5nPSJrbyIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJLb3JlYW4iPiZuYnNwO2tvJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4uL3RyL21vZC9tb2RfbG9nX2NvbmZpZy5odG1sIiBocmVmbGFuZz0idHIiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iVPxya+dlIj4mbmJzcDt0ciZuYnNwOzwvYT48L3A+CjwvZGl2PjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgYWx0PSJ0b3AiIC8+PC9hPjwvZGl2PjxkaXYgY2xhc3M9InNlY3Rpb24iPjxoMj48YSBpZD0iY29tbWVudHNfc2VjdGlvbiIgbmFtZT0iY29tbWVudHNfc2VjdGlvbiI+Q29tbWVudHM8L2E+PC9oMj48ZGl2IGNsYXNzPSJ3YXJuaW5nIj48c3Ryb25nPk5vdGljZTo8L3N0cm9uZz48YnIgLz5UaGlzIGlzIG5vdCBhIFEmYW1wO0Egc2VjdGlvbi4gQ29tbWVudHMgcGxhY2VkIGhlcmUgc2hvdWxkIGJlIHBvaW50ZWQgdG93YXJkcyBzdWdnZXN0aW9ucyBvbiBpbXByb3ZpbmcgdGhlIGRvY3VtZW50YXRpb24gb3Igc2VydmVyLCBhbmQgbWF5IGJlIHJlbW92ZWQgYWdhaW4gYnkgb3VyIG1vZGVyYXRvcnMgaWYgdGhleSBhcmUgZWl0aGVyIGltcGxlbWVudGVkIG9yIGNvbnNpZGVyZWQgaW52YWxpZC9vZmYtdG9waWMuIFF1ZXN0aW9ucyBvbiBob3cgdG8gbWFuYWdlIHRoZSBBcGFjaGUgSFRUUCBTZXJ2ZXIgc2hvdWxkIGJlIGRpcmVjdGVkIGF0IGVpdGhlciBvdXIgSVJDIGNoYW5uZWwsICNodHRwZCwgb24gRnJlZW5vZGUsIG9yIHNlbnQgdG8gb3VyIDxhIGhyZWY9Imh0dHA6Ly9odHRwZC5hcGFjaGUub3JnL2xpc3RzLmh0bWwiPm1haWxpbmcgbGlzdHM8L2E+LjwvZGl2Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLS8vLS0+PCFbQ0RBVEFbLy8+PCEtLQp2YXIgY29tbWVudHNfc2hvcnRuYW1lID0gJ2h0dHBkJzsKdmFyIGNvbW1lbnRzX2lkZW50aWZpZXIgPSAnaHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvZG9jcy90cnVuay9tb2QvbW9kX2xvZ19jb25maWcuaHRtbCc7CihmdW5jdGlvbih3LCBkKSB7CiAgICBpZiAody5sb2NhdGlvbi5ob3N0bmFtZS50b0xvd2VyQ2FzZSgpID09ICJodHRwZC5hcGFjaGUub3JnIikgewogICAgICAgIGQud3JpdGUoJzxkaXYgaWQ9ImNvbW1lbnRzX3RocmVhZCI+PFwvZGl2PicpOwogICAgICAgIHZhciBzID0gZC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsKICAgICAgICBzLnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0JzsKICAgICAgICBzLmFzeW5jID0gdHJ1ZTsKICAgICAgICBzLnNyYyA9ICdodHRwczovL2NvbW1lbnRzLmFwYWNoZS5vcmcvc2hvd19jb21tZW50cy5sdWE/c2l0ZT0nICsgY29tbWVudHNfc2hvcnRuYW1lICsgJyZwYWdlPScgKyBjb21tZW50c19pZGVudGlmaWVyOwogICAgICAgIChkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0gfHwgZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYm9keScpWzBdKS5hcHBlbmRDaGlsZChzKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgIGQud3JpdGUoJzxkaXYgaWQ9ImNvbW1lbnRzX3RocmVhZCI+Q29tbWVudHMgYXJlIGRpc2FibGVkIGZvciB0aGlzIHBhZ2UgYXQgdGhlIG1vbWVudC48XC9kaXY+Jyk7CiAgICB9Cn0pKHdpbmRvdywgZG9jdW1lbnQpOwovLy0tPjwhXV0+PC9zY3JpcHQ+PC9kaXY+PGRpdiBpZD0iZm9vdGVyIj4KPHAgY2xhc3M9ImFwYWNoZSI+Q29weXJpZ2h0IDIwMTcgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLjxiciAvPkxpY2Vuc2VkIHVuZGVyIHRoZSA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPkFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMDwvYT4uPC9wPgo8cCBjbGFzcz0ibWVudSI+PGEgaHJlZj0iLi4vbW9kLyI+TW9kdWxlczwvYT4gfCA8YSBocmVmPSIuLi9tb2QvcXVpY2tyZWZlcmVuY2UuaHRtbCI+RGlyZWN0aXZlczwvYT4gfCA8YSBocmVmPSJodHRwOi8vd2lraS5hcGFjaGUub3JnL2h0dHBkL0ZBUSI+RkFRPC9hPiB8IDxhIGhyZWY9Ii4uL2dsb3NzYXJ5Lmh0bWwiPkdsb3NzYXJ5PC9hPiB8IDxhIGhyZWY9Ii4uL3NpdGVtYXAuaHRtbCI+U2l0ZW1hcDwvYT48L3A+PC9kaXY+PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0vLy0tPjwhW0NEQVRBWy8vPjwhLS0KaWYgKHR5cGVvZihwcmV0dHlQcmludCkgIT09ICd1bmRlZmluZWQnKSB7CiAgICBwcmV0dHlQcmludCgpOwp9Ci8vLS0+PCFdXT48L3NjcmlwdD4KPC9ib2R5PjwvaHRtbD4=