PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Pgo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+CjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj48aGVhZD4KPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KPCEtLQogICAgICAgIFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYCiAgICAgICAgICAgICAgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBmcm9tIHhtbCBzb3VyY2U6IERPIE5PVCBFRElUCiAgICAgICAgWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKICAgICAgLS0+Cjx0aXRsZT5FeHByZXNzaW9ucyBpbiBBcGFjaGUgSFRUUCBTZXJ2ZXIgLSBBcGFjaGUgSFRUUCBTZXJ2ZXIgVmVyc2lvbiAyLjQ8L3RpdGxlPgo8bGluayBocmVmPSIuL3N0eWxlL2Nzcy9tYW51YWwuY3NzIiByZWw9InN0eWxlc2hlZXQiIG1lZGlhPSJhbGwiIHR5cGU9InRleHQvY3NzIiB0aXRsZT0iTWFpbiBzdHlsZXNoZWV0IiAvPgo8bGluayBocmVmPSIuL3N0eWxlL2Nzcy9tYW51YWwtbG9vc2UtMTAwcGMuY3NzIiByZWw9ImFsdGVybmF0ZSBzdHlsZXNoZWV0IiBtZWRpYT0iYWxsIiB0eXBlPSJ0ZXh0L2NzcyIgdGl0bGU9Ik5vIFNpZGViYXIgLSBEZWZhdWx0IGZvbnQgc2l6ZSIgLz4KPGxpbmsgaHJlZj0iLi9zdHlsZS9jc3MvbWFudWFsLXByaW50LmNzcyIgcmVsPSJzdHlsZXNoZWV0IiBtZWRpYT0icHJpbnQiIHR5cGU9InRleHQvY3NzIiAvPjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii4vc3R5bGUvY3NzL3ByZXR0aWZ5LmNzcyIgLz4KPHNjcmlwdCBzcmM9Ii4vc3R5bGUvc2NyaXB0cy9wcmV0dGlmeS5taW4uanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Cjwvc2NyaXB0PgoKPGxpbmsgaHJlZj0iLi9pbWFnZXMvZmF2aWNvbi5pY28iIHJlbD0ic2hvcnRjdXQgaWNvbiIgLz48L2hlYWQ+Cjxib2R5IGlkPSJtYW51YWwtcGFnZSI+PGRpdiBpZD0icGFnZS1oZWFkZXIiPgo8cCBjbGFzcz0ibWVudSI+PGEgaHJlZj0iLi9tb2QvIj5Nb2R1bGVzPC9hPiB8IDxhIGhyZWY9Ii4vbW9kL2RpcmVjdGl2ZXMuaHRtbCI+RGlyZWN0aXZlczwvYT4gfCA8YSBocmVmPSJodHRwOi8vd2lraS5hcGFjaGUub3JnL2h0dHBkL0ZBUSI+RkFRPC9hPiB8IDxhIGhyZWY9Ii4vZ2xvc3NhcnkuaHRtbCI+R2xvc3Nhcnk8L2E+IHwgPGEgaHJlZj0iLi9zaXRlbWFwLmh0bWwiPlNpdGVtYXA8L2E+PC9wPgo8cCBjbGFzcz0iYXBhY2hlIj5BcGFjaGUgSFRUUCBTZXJ2ZXIgVmVyc2lvbiAyLjQ8L3A+CjxpbWcgYWx0PSIiIHNyYz0iLi9pbWFnZXMvZmVhdGhlci5wbmciIC8+PC9kaXY+CjxkaXYgY2xhc3M9InVwIj48YSBocmVmPSIuLyI+PGltZyB0aXRsZT0iJmx0Oy0iIGFsdD0iJmx0Oy0iIHNyYz0iLi9pbWFnZXMvbGVmdC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGlkPSJwYXRoIj4KPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnLyI+QXBhY2hlPC9hPiAmZ3Q7IDxhIGhyZWY9Imh0dHA6Ly9odHRwZC5hcGFjaGUub3JnLyI+SFRUUCBTZXJ2ZXI8L2E+ICZndDsgPGEgaHJlZj0iaHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvZG9jcy8iPkRvY3VtZW50YXRpb248L2E+ICZndDsgPGEgaHJlZj0iLi8iPlZlcnNpb24gMi40PC9hPjwvZGl2PjxkaXYgaWQ9InBhZ2UtY29udGVudCI+PGRpdiBpZD0icHJlYW1ibGUiPjxoMT5FeHByZXNzaW9ucyBpbiBBcGFjaGUgSFRUUCBTZXJ2ZXI8L2gxPgo8ZGl2IGNsYXNzPSJ0b3BsYW5nIj4KPHA+PHNwYW4+QXZhaWxhYmxlIExhbmd1YWdlczogPC9zcGFuPjxhIGhyZWY9Ii4vZW4vZXhwci5odG1sIiB0aXRsZT0iRW5nbGlzaCI+Jm5ic3A7ZW4mbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi9mci9leHByLmh0bWwiIGhyZWZsYW5nPSJmciIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJGcmFu52FpcyI+Jm5ic3A7ZnImbmJzcDs8L2E+PC9wPgo8L2Rpdj4KCiAgICA8cD5IaXN0b3JpY2FsbHksIHRoZXJlIGFyZSBzZXZlcmFsIHN5bnRheCB2YXJpYW50cyBmb3IgZXhwcmVzc2lvbnMKICAgIHVzZWQgdG8gZXhwcmVzcyBhIGNvbmRpdGlvbiBpbiB0aGUgZGlmZmVyZW50IG1vZHVsZXMgb2YgdGhlIEFwYWNoZQogICAgSFRUUCBTZXJ2ZXIuICBUaGVyZSBpcyBzb21lIG9uZ29pbmcgZWZmb3J0IHRvIG9ubHkgdXNlIGEgc2luZ2xlCiAgICB2YXJpYW50LCBjYWxsZWQgPGVtPmFwX2V4cHI8L2VtPiwgZm9yIGFsbCBjb25maWd1cmF0aW9uIGRpcmVjdGl2ZXMuCiAgICBUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgPGVtPmFwX2V4cHI8L2VtPiBleHByZXNzaW9uIHBhcnNlci4KICAgIDwvcD4KICAgIDxwPlRoZSA8ZW0+YXBfZXhwcjwvZW0+IGV4cHJlc3Npb24gaXMgaW50ZW5kZWQgdG8gcmVwbGFjZSBtb3N0IG90aGVyCiAgICBleHByZXNzaW9uIHZhcmlhbnRzIGluIEhUVFBELiBGb3IgZXhhbXBsZSwgdGhlIGRlcHJlY2F0ZWQgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvbW9kX3NzbC5odG1sI3NzbHJlcXVpcmUiPlNTTFJlcXVpcmU8L2E+PC9jb2RlPiBleHByZXNzaW9ucyBjYW4gYmUgcmVwbGFjZWQKICAgIGJ5IDxhIGhyZWY9Im1vZC9tb2RfYXV0aHpfY29yZS5odG1sI3JlcWV4cHIiPlJlcXVpcmUgZXhwcjwvYT4uICA8L3A+CiAgPC9kaXY+CjxkaXYgaWQ9InF1aWNrdmlldyI+PHVsIGlkPSJ0b2MiPjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjZ3JhbW1hciI+R3JhbW1hciBpbiBCYWNrdXMtTmF1ciBGb3JtIG5vdGF0aW9uPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjdmFycyI+VmFyaWFibGVzPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjYmlub3AiPkJpbmFyeSBvcGVyYXRvcnM8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiN1bm5vcCI+VW5hcnkgb3BlcmF0b3JzPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjZnVuY3Rpb25zIj5GdW5jdGlvbnM8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNleGFtcGxlcyI+RXhhbXBsZSBleHByZXNzaW9uczwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI290aGVyIj5PdGhlcjwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI3NzbHJlcXVpcmUiPkNvbXBhcmlzb24gd2l0aCBTU0xSZXF1aXJlPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjY29tcGF0aWJpbGl0eSI+VmVyc2lvbiBIaXN0b3J5PC9hPjwvbGk+CjwvdWw+PGgzPlNlZSBhbHNvPC9oMz48dWwgY2xhc3M9InNlZWFsc28iPjxsaT48Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9jb3JlLmh0bWwjaWYiPiZsdDtJZiZndDs8L2E+PC9jb2RlPjwvbGk+PGxpPjxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL2NvcmUuaHRtbCNlbHNlaWYiPiZsdDtFbHNlSWYmZ3Q7PC9hPjwvY29kZT48L2xpPjxsaT48Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9jb3JlLmh0bWwjZWxzZSI+Jmx0O0Vsc2UmZ3Q7PC9hPjwvY29kZT48L2xpPjxsaT48Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9jb3JlLmh0bWwjZXJyb3Jkb2N1bWVudCI+RXJyb3JEb2N1bWVudDwvYT48L2NvZGU+PC9saT48bGk+PGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2FsaWFzLmh0bWwjYWxpYXMiPkFsaWFzPC9hPjwvY29kZT48L2xpPjxsaT48Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9tb2RfYWxpYXMuaHRtbCNzY3JpcHRhbGlhcyI+U2NyaXB0QWxpYXM8L2E+PC9jb2RlPjwvbGk+PGxpPjxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL21vZF9hbGlhcy5odG1sI3JlZGlyZWN0Ij5SZWRpcmVjdDwvYT48L2NvZGU+PC9saT48bGk+PGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2F1dGhfYmFzaWMuaHRtbCNhdXRoYmFzaWNmYWtlIj5BdXRoQmFzaWNGYWtlPC9hPjwvY29kZT48L2xpPjxsaT48Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9tb2RfYXV0aF9mb3JtLmh0bWwjYXV0aGZvcm1sb2dpbnJlcXVpcmVkbG9jYXRpb24iPkF1dGhGb3JtTG9naW5SZXF1aXJlZExvY2F0aW9uPC9hPjwvY29kZT48L2xpPjxsaT48Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9tb2RfYXV0aF9mb3JtLmh0bWwjYXV0aGZvcm1sb2dpbnN1Y2Nlc3Nsb2NhdGlvbiI+QXV0aEZvcm1Mb2dpblN1Y2Nlc3NMb2NhdGlvbjwvYT48L2NvZGU+PC9saT48bGk+PGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2F1dGhfZm9ybS5odG1sI2F1dGhmb3JtbG9nb3V0bG9jYXRpb24iPkF1dGhGb3JtTG9nb3V0TG9jYXRpb248L2E+PC9jb2RlPjwvbGk+PGxpPjxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL21vZF9yZXdyaXRlLmh0bWwjcmV3cml0ZWNvbmQiPlJld3JpdGVDb25kPC9hPjwvY29kZT48L2xpPjxsaT48Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9tb2Rfc2V0ZW52aWYuaHRtbCNzZXRlbnZpZmV4cHIiPlNldEVudklmRXhwcjwvYT48L2NvZGU+PC9saT48bGk+PGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2hlYWRlcnMuaHRtbCNoZWFkZXIiPkhlYWRlcjwvYT48L2NvZGU+PC9saT48bGk+PGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2hlYWRlcnMuaHRtbCNyZXF1ZXN0aGVhZGVyIj5SZXF1ZXN0SGVhZGVyPC9hPjwvY29kZT48L2xpPjxsaT48Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9tb2RfZmlsdGVyLmh0bWwjZmlsdGVycHJvdmlkZXIiPkZpbHRlclByb3ZpZGVyPC9hPjwvY29kZT48L2xpPjxsaT48YSBocmVmPSJtb2QvbW9kX2F1dGh6X2NvcmUuaHRtbCNyZXFleHByIj5SZXF1aXJlIGV4cHI8L2E+PC9saT48bGk+PGEgaHJlZj0ibW9kL21vZF9hdXRobnpfbGRhcC5odG1sI3JlcXVzZXIiPlJlcXVpcmUgbGRhcC11c2VyPC9hPjwvbGk+PGxpPjxhIGhyZWY9Im1vZC9tb2RfYXV0aG56X2xkYXAuaHRtbCNyZXFncm91cCI+UmVxdWlyZSBsZGFwLWdyb3VwPC9hPjwvbGk+PGxpPjxhIGhyZWY9Im1vZC9tb2RfYXV0aG56X2xkYXAuaHRtbCNyZXFkbiI+UmVxdWlyZSBsZGFwLWRuPC9hPjwvbGk+PGxpPjxhIGhyZWY9Im1vZC9tb2RfYXV0aG56X2xkYXAuaHRtbCNyZXFhdHRyaWJ1dGUiPlJlcXVpcmUgbGRhcC1hdHRyaWJ1dGU8L2E+PC9saT48bGk+PGEgaHJlZj0ibW9kL21vZF9hdXRobnpfbGRhcC5odG1sI3JlcWZpbHRlciI+UmVxdWlyZSBsZGFwLWZpbHRlcjwvYT48L2xpPjxsaT48YSBocmVmPSJtb2QvbW9kX2F1dGh6X2RiZC5odG1sI3JlcWdyb3VwIj5SZXF1aXJlIGRiZC1ncm91cDwvYT48L2xpPjxsaT48YSBocmVmPSJtb2QvbW9kX2F1dGh6X2RibS5odG1sI3JlcWdyb3VwIj5SZXF1aXJlIGRibS1ncm91cDwvYT48L2xpPjxsaT48YSBocmVmPSJtb2QvbW9kX2F1dGh6X2dyb3VwZmlsZS5odG1sI3JlcWdyb3VwIj5SZXF1aXJlIGdyb3VwPC9hPjwvbGk+PGxpPjxhIGhyZWY9Im1vZC9tb2RfYXV0aHpfaG9zdC5odG1sI3JlcWhvc3QiPlJlcXVpcmUgaG9zdDwvYT48L2xpPjxsaT48Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9tb2Rfc3NsLmh0bWwjc3NscmVxdWlyZSI+U1NMUmVxdWlyZTwvYT48L2NvZGU+PC9saT48bGk+PGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2xvZ19kZWJ1Zy5odG1sI2xvZ21lc3NhZ2UiPkxvZ01lc3NhZ2U8L2E+PC9jb2RlPjwvbGk+PGxpPjxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4vbW9kL21vZF9pbmNsdWRlLmh0bWwiPm1vZF9pbmNsdWRlPC9hPjwvY29kZT48L2xpPjxsaT48YSBocmVmPSIjY29tbWVudHNfc2VjdGlvbiI+Q29tbWVudHM8L2E+PC9saT48L3VsPjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9ImdyYW1tYXIiIGlkPSJncmFtbWFyIj5HcmFtbWFyIGluIEJhY2t1cy1OYXVyIEZvcm0gbm90YXRpb248L2E+PC9oMj4KICAgIAogICAgICA8cD48YSBocmVmPSJodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0JhY2t1cyVFMiU4MCU5M05hdXJfRm9ybSI+QmFja3VzLU5hdXIKICAgICAgRm9ybTwvYT4gKEJORikgaXMgYSBub3RhdGlvbiB0ZWNobmlxdWUgZm9yIGNvbnRleHQtZnJlZSBncmFtbWFycywKICAgICAgb2Z0ZW4gdXNlZCB0byBkZXNjcmliZSB0aGUgc3ludGF4IG9mIGxhbmd1YWdlcyB1c2VkIGluIGNvbXB1dGluZy4KICAgICAgSW4gbW9zdCBjYXNlcywgZXhwcmVzc2lvbnMgYXJlIHVzZWQgdG8gZXhwcmVzcyBib29sZWFuIHZhbHVlcy4KICAgICAgRm9yIHRoZXNlLCB0aGUgc3RhcnRpbmcgcG9pbnQgaW4gdGhlIEJORiBpcyA8Y29kZT5leHByPC9jb2RlPi4KICAgICAgSG93ZXZlciwgYSBmZXcgZGlyZWN0aXZlcyBsaWtlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL21vZF9sb2dfZGVidWcuaHRtbCNsb2dtZXNzYWdlIj5Mb2dNZXNzYWdlPC9hPjwvY29kZT4gYWNjZXB0IGV4cHJlc3Npb25zCiAgICAgIHRoYXQgZXZhbHVhdGUgdG8gYSBzdHJpbmcgdmFsdWUuIEZvciB0aG9zZSwgdGhlIHN0YXJ0aW5nIHBvaW50IGluCiAgICAgIHRoZSBCTkYgaXMgPGNvZGU+c3RyaW5nPC9jb2RlPi4KICAgICAgPC9wPgo8YmxvY2txdW90ZT4KPHByZT5leHByICAgICAgICA6Oj0gIjxzdHJvbmc+dHJ1ZTwvc3Ryb25nPiIgfCAiPHN0cm9uZz5mYWxzZTwvc3Ryb25nPiIKICAgICAgICAgICAgICB8ICI8c3Ryb25nPiE8L3N0cm9uZz4iIGV4cHIKICAgICAgICAgICAgICB8IGV4cHIgIjxzdHJvbmc+JmFtcDsmYW1wOzwvc3Ryb25nPiIgZXhwcgogICAgICAgICAgICAgIHwgZXhwciAiPHN0cm9uZz58fDwvc3Ryb25nPiIgZXhwcgogICAgICAgICAgICAgIHwgIjxzdHJvbmc+KDwvc3Ryb25nPiIgZXhwciAiPHN0cm9uZz4pPC9zdHJvbmc+IgogICAgICAgICAgICAgIHwgY29tcAoKY29tcCAgICAgICAgOjo9IHN0cmluZ2NvbXAKICAgICAgICAgICAgICB8IGludGVnZXJjb21wCiAgICAgICAgICAgICAgfCB1bmFyeW9wIHdvcmQKICAgICAgICAgICAgICB8IHdvcmQgYmluYXJ5b3Agd29yZAogICAgICAgICAgICAgIHwgd29yZCAiPHN0cm9uZz5pbjwvc3Ryb25nPiIgIjxzdHJvbmc+ezwvc3Ryb25nPiIgd29yZGxpc3QgIjxzdHJvbmc+fTwvc3Ryb25nPiIKICAgICAgICAgICAgICB8IHdvcmQgIjxzdHJvbmc+aW48L3N0cm9uZz4iIGxpc3RmdW5jdGlvbgogICAgICAgICAgICAgIHwgd29yZCAiPHN0cm9uZz49fjwvc3Ryb25nPiIgcmVnZXgKICAgICAgICAgICAgICB8IHdvcmQgIjxzdHJvbmc+IX48L3N0cm9uZz4iIHJlZ2V4CgoKc3RyaW5nY29tcCAgOjo9IHdvcmQgIjxzdHJvbmc+PT08L3N0cm9uZz4iIHdvcmQKICAgICAgICAgICAgICB8IHdvcmQgIjxzdHJvbmc+IT08L3N0cm9uZz4iIHdvcmQKICAgICAgICAgICAgICB8IHdvcmQgIjxzdHJvbmc+Jmx0Ozwvc3Ryb25nPiIgIHdvcmQKICAgICAgICAgICAgICB8IHdvcmQgIjxzdHJvbmc+Jmx0Oz08L3N0cm9uZz4iIHdvcmQKICAgICAgICAgICAgICB8IHdvcmQgIjxzdHJvbmc+Jmd0Ozwvc3Ryb25nPiIgIHdvcmQKICAgICAgICAgICAgICB8IHdvcmQgIjxzdHJvbmc+Jmd0Oz08L3N0cm9uZz4iIHdvcmQKCmludGVnZXJjb21wIDo6PSB3b3JkICI8c3Ryb25nPi1lcTwvc3Ryb25nPiIgd29yZCB8IHdvcmQgIjxzdHJvbmc+ZXE8L3N0cm9uZz4iIHdvcmQKICAgICAgICAgICAgICB8IHdvcmQgIjxzdHJvbmc+LW5lPC9zdHJvbmc+IiB3b3JkIHwgd29yZCAiPHN0cm9uZz5uZTwvc3Ryb25nPiIgd29yZAogICAgICAgICAgICAgIHwgd29yZCAiPHN0cm9uZz4tbHQ8L3N0cm9uZz4iIHdvcmQgfCB3b3JkICI8c3Ryb25nPmx0PC9zdHJvbmc+IiB3b3JkCiAgICAgICAgICAgICAgfCB3b3JkICI8c3Ryb25nPi1sZTwvc3Ryb25nPiIgd29yZCB8IHdvcmQgIjxzdHJvbmc+bGU8L3N0cm9uZz4iIHdvcmQKICAgICAgICAgICAgICB8IHdvcmQgIjxzdHJvbmc+LWd0PC9zdHJvbmc+IiB3b3JkIHwgd29yZCAiPHN0cm9uZz5ndDwvc3Ryb25nPiIgd29yZAogICAgICAgICAgICAgIHwgd29yZCAiPHN0cm9uZz4tZ2U8L3N0cm9uZz4iIHdvcmQgfCB3b3JkICI8c3Ryb25nPmdlPC9zdHJvbmc+IiB3b3JkCgp3b3JkbGlzdCAgICA6Oj0gd29yZAogICAgICAgICAgICAgIHwgd29yZGxpc3QgIjxzdHJvbmc+LDwvc3Ryb25nPiIgd29yZAoKd29yZCAgICAgICAgOjo9IHdvcmQgIjxzdHJvbmc+Ljwvc3Ryb25nPiIgd29yZAogICAgICAgICAgICAgIHwgZGlnaXQKICAgICAgICAgICAgICB8ICI8c3Ryb25nPic8L3N0cm9uZz4iIHN0cmluZyAiPHN0cm9uZz4nPC9zdHJvbmc+IgogICAgICAgICAgICAgIHwgIjxzdHJvbmc+Ijwvc3Ryb25nPiIgc3RyaW5nICI8c3Ryb25nPiI8L3N0cm9uZz4iCiAgICAgICAgICAgICAgfCB2YXJpYWJsZQogICAgICAgICAgICAgIHwgcmViYWNrcmVmCiAgICAgICAgICAgICAgfCBmdW5jdGlvbgoKc3RyaW5nICAgICAgOjo9IHN0cmluZ3BhcnQKICAgICAgICAgICAgICB8IHN0cmluZyBzdHJpbmdwYXJ0CgpzdHJpbmdwYXJ0ICA6Oj0gY3N0cmluZwogICAgICAgICAgICAgIHwgdmFyaWFibGUKICAgICAgICAgICAgICB8IHJlYmFja3JlZgoKY3N0cmluZyAgICAgOjo9IC4uLgpkaWdpdCAgICAgICA6Oj0gWzAtOV0rCgp2YXJpYWJsZSAgICA6Oj0gIjxzdHJvbmc+JXs8L3N0cm9uZz4iIHZhcm5hbWUgIjxzdHJvbmc+fTwvc3Ryb25nPiIKICAgICAgICAgICAgICB8ICI8c3Ryb25nPiV7PC9zdHJvbmc+IiBmdW5jbmFtZSAiPHN0cm9uZz46PC9zdHJvbmc+IiBmdW5jYXJncyAiPHN0cm9uZz59PC9zdHJvbmc+IgoKcmViYWNrcmVmICAgOjo9ICI8c3Ryb25nPiQ8L3N0cm9uZz4iIFswLTldCgpmdW5jdGlvbiAgICAgOjo9IGZ1bmNuYW1lICI8c3Ryb25nPig8L3N0cm9uZz4iIHdvcmQgIjxzdHJvbmc+KTwvc3Ryb25nPiIKCmxpc3RmdW5jdGlvbiA6Oj0gbGlzdGZ1bmNuYW1lICI8c3Ryb25nPig8L3N0cm9uZz4iIHdvcmQgIjxzdHJvbmc+KTwvc3Ryb25nPiI8L3ByZT4KPC9ibG9ja3F1b3RlPgoKPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJ2YXJzIiBpZD0idmFycyI+VmFyaWFibGVzPC9hPjwvaDI+CiAgICAKCiAgICA8cD5UaGUgZXhwcmVzc2lvbiBwYXJzZXIgcHJvdmlkZXMgYSBudW1iZXIgb2YgdmFyaWFibGVzIG9mIHRoZSBmb3JtCiAgICA8Y29kZT4le0hUVFBfSE9TVH08L2NvZGU+LiBOb3RlIHRoYXQgdGhlIHZhbHVlIG9mIGEgdmFyaWFibGUgbWF5IGRlcGVuZAogICAgb24gdGhlIHBoYXNlIG9mIHRoZSByZXF1ZXN0IHByb2Nlc3NpbmcgaW4gd2hpY2ggaXQgaXMgZXZhbHVhdGVkLiAgRm9yCiAgICBleGFtcGxlLCBhbiBleHByZXNzaW9uIHVzZWQgaW4gYW4gPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+Jmx0O0lmICZndDs8L2NvZGU+CiAgICBkaXJlY3RpdmUgaXMgZXZhbHVhdGVkIGJlZm9yZSBhdXRoZW50aWNhdGlvbiBpcyBkb25lLiBUaGVyZWZvcmUsCiAgICA8Y29kZT4le1JFTU9URV9VU0VSfTwvY29kZT4gd2lsbCBub3QgYmUgc2V0IGluIHRoaXMgY2FzZS48L3A+CgogICAgPHA+VGhlIGZvbGxvd2luZyB2YXJpYWJsZXMgcHJvdmlkZSB0aGUgdmFsdWVzIG9mIHRoZSBuYW1lZCBIVFRQIHJlcXVlc3QKICAgIGhlYWRlcnMuIFRoZSB2YWx1ZXMgb2Ygb3RoZXIgaGVhZGVycyBjYW4gYmUgb2J0YWluZWQgd2l0aCB0aGUKICAgIDxjb2RlPnJlcTwvY29kZT4gPGEgaHJlZj0iI2Z1bmN0aW9ucyI+ZnVuY3Rpb248L2E+LiBVc2luZyB0aGVzZQogICAgdmFyaWFibGVzIG1heSBjYXVzZSB0aGUgaGVhZGVyIG5hbWUgdG8gYmUgYWRkZWQgdG8gdGhlIFZhcnkKICAgIGhlYWRlciBvZiB0aGUgSFRUUCByZXNwb25zZSwgZXhjZXB0IHdoZXJlIG90aGVyd2lzZSBub3RlZCBmb3IgdGhlCiAgICBkaXJlY3RpdmUgYWNjZXB0aW5nIHRoZSBleHByZXNzaW9uLiBUaGUgPGNvZGU+cmVxX25vdmFyeTwvY29kZT4KICAgIDxhIGhyZWY9IiNmdW5jdGlvbnMiPmZ1bmN0aW9uPC9hPiBtYXkgYmUgdXNlZCB0byBjaXJjdW12ZW50IHRoaXMKICAgIGJlaGF2aW9yLjwvcD4KCiAgICA8dGFibGUgY2xhc3M9ImJvcmRlcmVkIj48dHIgY2xhc3M9ImhlYWRlciI+PHRoPk5hbWU8L3RoPjwvdHI+Cjx0cj48dGQ+PGNvZGU+SFRUUF9BQ0NFUFQ8L2NvZGU+PC90ZD48L3RyPgo8dHIgY2xhc3M9Im9kZCI+PHRkPjxjb2RlPkhUVFBfQ09PS0lFPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0ZD48Y29kZT5IVFRQX0ZPUldBUkRFRDwvY29kZT48L3RkPjwvdHI+Cjx0ciBjbGFzcz0ib2RkIj48dGQ+PGNvZGU+SFRUUF9IT1NUPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0ZD48Y29kZT5IVFRQX1BST1hZX0NPTk5FQ1RJT048L2NvZGU+PC90ZD48L3RyPgo8dHIgY2xhc3M9Im9kZCI+PHRkPjxjb2RlPkhUVFBfUkVGRVJFUjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGQ+PGNvZGU+SFRUUF9VU0VSX0FHRU5UPC9jb2RlPjwvdGQ+PC90cj4KPC90YWJsZT4KCiAgICA8cD5PdGhlciByZXF1ZXN0IHJlbGF0ZWQgdmFyaWFibGVzPC9wPgoKICAgIDx0YWJsZSBjbGFzcz0iYm9yZGVyZWQiPjx0ciBjbGFzcz0iaGVhZGVyIj48dGg+TmFtZTwvdGg+PHRoPkRlc2NyaXB0aW9uPC90aD48L3RyPgo8dHI+PHRkPjxjb2RlPlJFUVVFU1RfTUVUSE9EPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPlRoZSBIVFRQIG1ldGhvZCBvZiB0aGUgaW5jb21pbmcgcmVxdWVzdCAoZS5nLgogICAgICAgICAgICA8Y29kZT5HRVQ8L2NvZGU+KTwvdGQ+PC90cj4KPHRyIGNsYXNzPSJvZGQiPjx0ZD48Y29kZT5SRVFVRVNUX1NDSEVNRTwvY29kZT48L3RkPgogICAgICAgIDx0ZD5UaGUgc2NoZW1lIHBhcnQgb2YgdGhlIHJlcXVlc3QncyBVUkk8L3RkPjwvdHI+Cjx0cj48dGQ+PGNvZGU+UkVRVUVTVF9VUkk8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+VGhlIHBhdGggcGFydCBvZiB0aGUgcmVxdWVzdCdzIFVSSTwvdGQ+PC90cj4KPHRyIGNsYXNzPSJvZGQiPjx0ZD48Y29kZT5ET0NVTUVOVF9VUkk8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+U2FtZSBhcyA8Y29kZT5SRVFVRVNUX1VSSTwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGQ+PGNvZGU+UkVRVUVTVF9GSUxFTkFNRTwvY29kZT48L3RkPgogICAgICAgIDx0ZD5UaGUgZnVsbCBsb2NhbCBmaWxlc3lzdGVtIHBhdGggdG8gdGhlIGZpbGUgb3Igc2NyaXB0IG1hdGNoaW5nIHRoZQogICAgICAgICAgICByZXF1ZXN0LCBpZiB0aGlzIGhhcyBhbHJlYWR5IGJlZW4gZGV0ZXJtaW5lZCBieSB0aGUgc2VydmVyIGF0IHRoZQogICAgICAgICAgICB0aW1lIDxjb2RlPlJFUVVFU1RfRklMRU5BTUU8L2NvZGU+IGlzIHJlZmVyZW5jZWQuIE90aGVyd2lzZSwgc3VjaAogICAgICAgICAgICBhcyB3aGVuIHVzZWQgaW4gdmlydHVhbCBob3N0IGNvbnRleHQsIHRoZSBzYW1lIHZhbHVlIGFzCiAgICAgICAgICAgIDxjb2RlPlJFUVVFU1RfVVJJPC9jb2RlPiA8L3RkPjwvdHI+Cjx0ciBjbGFzcz0ib2RkIj48dGQ+PGNvZGU+U0NSSVBUX0ZJTEVOQU1FPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPlNhbWUgYXMgPGNvZGU+UkVRVUVTVF9GSUxFTkFNRTwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGQ+PGNvZGU+TEFTVF9NT0RJRklFRDwvY29kZT48L3RkPgogICAgICAgIDx0ZD5UaGUgZGF0ZSBhbmQgdGltZSBvZiBsYXN0IG1vZGlmaWNhdGlvbiBvZiB0aGUgZmlsZSBpbiB0aGUgZm9ybWF0CiAgICAgICAgICAgIDxjb2RlPjIwMTAxMjMxMjM1OTU5PC9jb2RlPiwgaWYgdGhpcyBoYXMgYWxyZWFkeSBiZWVuIGRldGVybWluZWQgYnkKICAgICAgICAgICAgdGhlIHNlcnZlciBhdCB0aGUgdGltZSA8Y29kZT5MQVNUX01PRElGSUVEPC9jb2RlPiBpcyByZWZlcmVuY2VkLgogICAgICAgICAgICA8L3RkPjwvdHI+Cjx0ciBjbGFzcz0ib2RkIj48dGQ+PGNvZGU+U0NSSVBUX1VTRVI8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+VGhlIHVzZXIgbmFtZSBvZiB0aGUgb3duZXIgb2YgdGhlIHNjcmlwdC48L3RkPjwvdHI+Cjx0cj48dGQ+PGNvZGU+U0NSSVBUX0dST1VQPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPlRoZSBncm91cCBuYW1lIG9mIHRoZSBncm91cCBvZiB0aGUgc2NyaXB0LjwvdGQ+PC90cj4KPHRyIGNsYXNzPSJvZGQiPjx0ZD48Y29kZT5QQVRIX0lORk88L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+VGhlIHRyYWlsaW5nIHBhdGggbmFtZSBpbmZvcm1hdGlvbiwgc2VlCiAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL2NvcmUuaHRtbCNhY2NlcHRwYXRoaW5mbyI+QWNjZXB0UGF0aEluZm88L2E+PC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0ZD48Y29kZT5RVUVSWV9TVFJJTkc8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+VGhlIHF1ZXJ5IHN0cmluZyBvZiB0aGUgY3VycmVudCByZXF1ZXN0PC90ZD48L3RyPgo8dHIgY2xhc3M9Im9kZCI+PHRkPjxjb2RlPklTX1NVQlJFUTwvY29kZT48L3RkPgogICAgICAgIDx0ZD4iPGNvZGU+dHJ1ZTwvY29kZT4iIGlmIHRoZSBjdXJyZW50IHJlcXVlc3QgaXMgYSBzdWJyZXF1ZXN0LAogICAgICAgICAgICAiPGNvZGU+ZmFsc2U8L2NvZGU+IiBvdGhlcndpc2U8L3RkPjwvdHI+Cjx0cj48dGQ+PGNvZGU+VEhFX1JFUVVFU1Q8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+VGhlIGNvbXBsZXRlIHJlcXVlc3QgbGluZSAoZS5nLiwKICAgICAgICAgICAgIjxjb2RlPkdFVCAvaW5kZXguaHRtbCBIVFRQLzEuMTwvY29kZT4iKTwvdGQ+PC90cj4KPHRyIGNsYXNzPSJvZGQiPjx0ZD48Y29kZT5SRU1PVEVfQUREUjwvY29kZT48L3RkPgogICAgICAgIDx0ZD5UaGUgSVAgYWRkcmVzcyBvZiB0aGUgcmVtb3RlIGhvc3Q8L3RkPjwvdHI+Cjx0cj48dGQ+PGNvZGU+UkVNT1RFX0hPU1Q8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+VGhlIGhvc3QgbmFtZSBvZiB0aGUgcmVtb3RlIGhvc3Q8L3RkPjwvdHI+Cjx0ciBjbGFzcz0ib2RkIj48dGQ+PGNvZGU+UkVNT1RFX1VTRVI8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+VGhlIG5hbWUgb2YgdGhlIGF1dGhlbnRpY2F0ZWQgdXNlciwgaWYgYW55IChub3QgYXZhaWxhYmxlIGR1cmluZyA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj4mbHQ7SWYgJmd0OzwvY29kZT4pPC90ZD48L3RyPgo8dHI+PHRkPjxjb2RlPlJFTU9URV9JREVOVDwvY29kZT48L3RkPgogICAgICAgIDx0ZD5UaGUgdXNlciBuYW1lIHNldCBieSA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2RfaWRlbnQuaHRtbCI+bW9kX2lkZW50PC9hPjwvY29kZT48L3RkPjwvdHI+Cjx0ciBjbGFzcz0ib2RkIj48dGQ+PGNvZGU+U0VSVkVSX05BTUU8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+VGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL2NvcmUuaHRtbCNzZXJ2ZXJuYW1lIj5TZXJ2ZXJOYW1lPC9hPjwvY29kZT4gb2YKICAgICAgICAgICAgdGhlIGN1cnJlbnQgdmhvc3Q8L3RkPjwvdHI+Cjx0cj48dGQ+PGNvZGU+U0VSVkVSX1BPUlQ8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+VGhlIHNlcnZlciBwb3J0IG9mIHRoZSBjdXJyZW50IHZob3N0LCBzZWUKICAgICAgICAgICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvY29yZS5odG1sI3NlcnZlcm5hbWUiPlNlcnZlck5hbWU8L2E+PC9jb2RlPjwvdGQ+PC90cj4KPHRyIGNsYXNzPSJvZGQiPjx0ZD48Y29kZT5TRVJWRVJfQURNSU48L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+VGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL2NvcmUuaHRtbCNzZXJ2ZXJhZG1pbiI+U2VydmVyQWRtaW48L2E+PC9jb2RlPiBvZgogICAgICAgICAgICB0aGUgY3VycmVudCB2aG9zdDwvdGQ+PC90cj4KPHRyPjx0ZD48Y29kZT5TRVJWRVJfUFJPVE9DT0w8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+VGhlIHByb3RvY29sIHVzZWQgYnkgdGhlIHJlcXVlc3Q8L3RkPjwvdHI+Cjx0ciBjbGFzcz0ib2RkIj48dGQ+PGNvZGU+RE9DVU1FTlRfUk9PVDwvY29kZT48L3RkPgogICAgICAgIDx0ZD5UaGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvY29yZS5odG1sI2RvY3VtZW50cm9vdCI+RG9jdW1lbnRSb290PC9hPjwvY29kZT4gb2YKICAgICAgICAgICAgdGhlIGN1cnJlbnQgdmhvc3Q8L3RkPjwvdHI+Cjx0cj48dGQ+PGNvZGU+QVVUSF9UWVBFPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPlRoZSBjb25maWd1cmVkIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL21vZF9hdXRobl9jb3JlLmh0bWwjYXV0aHR5cGUiPkF1dGhUeXBlPC9hPjwvY29kZT4gKGUuZy4KICAgICAgICAiPGNvZGU+YmFzaWM8L2NvZGU+Iik8L3RkPjwvdHI+Cjx0ciBjbGFzcz0ib2RkIj48dGQ+PGNvZGU+Q09OVEVOVF9UWVBFPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPlRoZSBjb250ZW50IHR5cGUgb2YgdGhlIHJlc3BvbnNlIChub3QgYXZhaWxhYmxlIGR1cmluZyA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj4mbHQ7SWYgJmd0OzwvY29kZT4pPC90ZD48L3RyPgo8dHI+PHRkPjxjb2RlPkhBTkRMRVI8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+VGhlIG5hbWUgb2YgdGhlIDxhIGhyZWY9ImhhbmRsZXIuaHRtbCI+aGFuZGxlcjwvYT4gY3JlYXRpbmcKICAgICAgICAgICAgdGhlIHJlc3BvbnNlPC90ZD48L3RyPgo8dHIgY2xhc3M9Im9kZCI+PHRkPjxjb2RlPkhUVFAyPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPiI8Y29kZT5vbjwvY29kZT4iIGlmIHRoZSByZXF1ZXN0IHVzZXMgaHR0cC8yLAogICAgICAgICAgICAiPGNvZGU+b2ZmPC9jb2RlPiIgb3RoZXJ3aXNlPC90ZD48L3RyPgo8dHI+PHRkPjxjb2RlPkhUVFBTPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPiI8Y29kZT5vbjwvY29kZT4iIGlmIHRoZSByZXF1ZXN0IHVzZXMgaHR0cHMsCiAgICAgICAgICAgICI8Y29kZT5vZmY8L2NvZGU+IiBvdGhlcndpc2U8L3RkPjwvdHI+Cjx0ciBjbGFzcz0ib2RkIj48dGQ+PGNvZGU+SVBWNjwvY29kZT48L3RkPgogICAgICAgIDx0ZD4iPGNvZGU+b248L2NvZGU+IiBpZiB0aGUgY29ubmVjdGlvbiB1c2VzIElQdjYsCiAgICAgICAgICAgICI8Y29kZT5vZmY8L2NvZGU+IiBvdGhlcndpc2U8L3RkPjwvdHI+Cjx0cj48dGQ+PGNvZGU+UkVRVUVTVF9TVEFUVVM8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+VGhlIEhUVFAgZXJyb3Igc3RhdHVzIG9mIHRoZSByZXF1ZXN0IChub3QgYXZhaWxhYmxlIGR1cmluZyA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj4mbHQ7SWYgJmd0OzwvY29kZT4pPC90ZD48L3RyPgo8dHIgY2xhc3M9Im9kZCI+PHRkPjxjb2RlPlJFUVVFU1RfTE9HX0lEPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPlRoZSBlcnJvciBsb2cgaWQgb2YgdGhlIHJlcXVlc3QgKHNlZQogICAgICAgICAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9jb3JlLmh0bWwjZXJyb3Jsb2dmb3JtYXQiPkVycm9yTG9nRm9ybWF0PC9hPjwvY29kZT4pPC90ZD48L3RyPgo8dHI+PHRkPjxjb2RlPkNPTk5fTE9HX0lEPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPlRoZSBlcnJvciBsb2cgaWQgb2YgdGhlIGNvbm5lY3Rpb24gKHNlZQogICAgICAgICAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9jb3JlLmh0bWwjZXJyb3Jsb2dmb3JtYXQiPkVycm9yTG9nRm9ybWF0PC9hPjwvY29kZT4pPC90ZD48L3RyPgo8dHIgY2xhc3M9Im9kZCI+PHRkPjxjb2RlPkNPTk5fUkVNT1RFX0FERFI8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+VGhlIHBlZXIgSVAgYWRkcmVzcyBvZiB0aGUgY29ubmVjdGlvbiAoc2VlIHRoZQogICAgICAgICAgICA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2RfcmVtb3RlaXAuaHRtbCI+bW9kX3JlbW90ZWlwPC9hPjwvY29kZT4gbW9kdWxlKTwvdGQ+PC90cj4KPHRyPjx0ZD48Y29kZT5DT05URVhUX1BSRUZJWDwvY29kZT48L3RkPgogICAgICAgIDx0ZCAvPjwvdHI+Cjx0ciBjbGFzcz0ib2RkIj48dGQ+PGNvZGU+Q09OVEVYVF9ET0NVTUVOVF9ST09UPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkIC8+PC90cj4KPC90YWJsZT4KCiAgICA8cD5NaXNjIHZhcmlhYmxlczwvcD4KCiAgICA8dGFibGUgY2xhc3M9ImJvcmRlcmVkIj48dHIgY2xhc3M9ImhlYWRlciI+PHRoPk5hbWU8L3RoPjx0aD5EZXNjcmlwdGlvbjwvdGg+PC90cj4KPHRyPjx0ZD48Y29kZT5USU1FX1lFQVI8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+VGhlIGN1cnJlbnQgeWVhciAoZS5nLiA8Y29kZT4yMDEwPC9jb2RlPik8L3RkPjwvdHI+Cjx0ciBjbGFzcz0ib2RkIj48dGQ+PGNvZGU+VElNRV9NT048L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+VGhlIGN1cnJlbnQgbW9udGggKDxjb2RlPjE8L2NvZGU+LCAuLi4sIDxjb2RlPjEyPC9jb2RlPik8L3RkPjwvdHI+Cjx0cj48dGQ+PGNvZGU+VElNRV9EQVk8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+VGhlIGN1cnJlbnQgZGF5IG9mIHRoZSBtb250aDwvdGQ+PC90cj4KPHRyIGNsYXNzPSJvZGQiPjx0ZD48Y29kZT5USU1FX0hPVVI8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+VGhlIGhvdXIgcGFydCBvZiB0aGUgY3VycmVudCB0aW1lCiAgICAgICAgICAgICg8Y29kZT4wPC9jb2RlPiwgLi4uLCA8Y29kZT4yMzwvY29kZT4pPC90ZD48L3RyPgo8dHI+PHRkPjxjb2RlPlRJTUVfTUlOPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPlRoZSBtaW51dGUgcGFydCBvZiB0aGUgY3VycmVudCB0aW1lIDwvdGQ+PC90cj4KPHRyIGNsYXNzPSJvZGQiPjx0ZD48Y29kZT5USU1FX1NFQzwvY29kZT48L3RkPgogICAgICAgIDx0ZD5UaGUgc2Vjb25kIHBhcnQgb2YgdGhlIGN1cnJlbnQgdGltZSA8L3RkPjwvdHI+Cjx0cj48dGQ+PGNvZGU+VElNRV9XREFZPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPlRoZSBkYXkgb2YgdGhlIHdlZWsgKHN0YXJ0aW5nIHdpdGggPGNvZGU+MDwvY29kZT4KICAgICAgICAgICAgZm9yIFN1bmRheSk8L3RkPjwvdHI+Cjx0ciBjbGFzcz0ib2RkIj48dGQ+PGNvZGU+VElNRTwvY29kZT48L3RkPgogICAgICAgIDx0ZD5UaGUgZGF0ZSBhbmQgdGltZSBpbiB0aGUgZm9ybWF0CiAgICAgICAgPGNvZGU+MjAxMDEyMzEyMzU5NTk8L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRkPjxjb2RlPlNFUlZFUl9TT0ZUV0FSRTwvY29kZT48L3RkPgogICAgICAgIDx0ZD5UaGUgc2VydmVyIHZlcnNpb24gc3RyaW5nPC90ZD48L3RyPgo8dHIgY2xhc3M9Im9kZCI+PHRkPjxjb2RlPkFQSV9WRVJTSU9OPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPlRoZSBkYXRlIG9mIHRoZSBBUEkgdmVyc2lvbiAobW9kdWxlIG1hZ2ljIG51bWJlcik8L3RkPjwvdHI+CjwvdGFibGU+CgogICAgPHA+U29tZSBtb2R1bGVzIHJlZ2lzdGVyIGFkZGl0aW9uYWwgdmFyaWFibGVzLCBzZWUgZS5nLgogICAgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX3NzbC5odG1sIj5tb2Rfc3NsPC9hPjwvY29kZT4uPC9wPgoKPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJiaW5vcCIgaWQ9ImJpbm9wIj5CaW5hcnkgb3BlcmF0b3JzPC9hPjwvaDI+CiAgICAKCiAgICA8cD5XaXRoIHRoZSBleGNlcHRpb24gb2Ygc29tZSBidWlsdC1pbiBjb21wYXJpc29uIG9wZXJhdG9ycywgYmluYXJ5CiAgICBvcGVyYXRvcnMgaGF2ZSB0aGUgZm9ybSAiPGNvZGU+LVthLXpBLVpdW2EtekEtWjAtOV9dKzwvY29kZT4iLCBpLmUuIGEKICAgIG1pbnVzIGFuZCBhdCBsZWFzdCB0d28gY2hhcmFjdGVycy4gVGhlIG5hbWUgaXMgbm90IGNhc2Ugc2Vuc2l0aXZlLgogICAgTW9kdWxlcyBtYXkgcmVnaXN0ZXIgYWRkaXRpb25hbCBiaW5hcnkgb3BlcmF0b3JzLjwvcD4KCiAgICA8aDM+PGEgbmFtZT0iY29tcCIgaWQ9ImNvbXAiPkNvbXBhcmlzb24gb3BlcmF0b3JzPC9hPjwvaDM+CiAgICAKCiAgICA8dGFibGUgY2xhc3M9ImJvcmRlcmVkIj48dHIgY2xhc3M9ImhlYWRlciI+PHRoPk5hbWU8L3RoPjx0aD5BbHRlcm5hdGl2ZTwvdGg+IDx0aD5EZXNjcmlwdGlvbjwvdGg+PC90cj4KPHRyPjx0ZD48Y29kZT49PTwvY29kZT48L3RkPgogICAgICAgIDx0ZD48Y29kZT49PC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPlN0cmluZyBlcXVhbGl0eTwvdGQ+PC90cj4KPHRyIGNsYXNzPSJvZGQiPjx0ZD48Y29kZT4hPTwvY29kZT48L3RkPgogICAgICAgIDx0ZCAvPgogICAgICAgIDx0ZD5TdHJpbmcgaW5lcXVhbGl0eTwvdGQ+PC90cj4KPHRyPjx0ZD48Y29kZT4mbHQ7PC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkIC8+CiAgICAgICAgPHRkPlN0cmluZyBsZXNzIHRoYW48L3RkPjwvdHI+Cjx0ciBjbGFzcz0ib2RkIj48dGQ+PGNvZGU+Jmx0Oz08L2NvZGU+PC90ZD4KICAgICAgICA8dGQgLz4KICAgICAgICA8dGQ+U3RyaW5nIGxlc3MgdGhhbiBvciBlcXVhbDwvdGQ+PC90cj4KPHRyPjx0ZD48Y29kZT4mZ3Q7PC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkIC8+CiAgICAgICAgPHRkPlN0cmluZyBncmVhdGVyIHRoYW48L3RkPjwvdHI+Cjx0ciBjbGFzcz0ib2RkIj48dGQ+PGNvZGU+Jmd0Oz08L2NvZGU+PC90ZD4KICAgICAgICA8dGQgLz4KICAgICAgICA8dGQ+U3RyaW5nIGdyZWF0ZXIgdGhhbiBvciBlcXVhbDwvdGQ+PC90cj4KPHRyPjx0ZD48Y29kZT4tZXE8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+PGNvZGU+ZXE8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+SW50ZWdlciBlcXVhbGl0eTwvdGQ+PC90cj4KPHRyIGNsYXNzPSJvZGQiPjx0ZD48Y29kZT4tbmU8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+PGNvZGU+bmU8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+SW50ZWdlciBpbmVxdWFsaXR5PC90ZD48L3RyPgo8dHI+PHRkPjxjb2RlPi1sdDwvY29kZT48L3RkPgogICAgICAgIDx0ZD48Y29kZT5sdDwvY29kZT48L3RkPgogICAgICAgIDx0ZD5JbnRlZ2VyIGxlc3MgdGhhbjwvdGQ+PC90cj4KPHRyIGNsYXNzPSJvZGQiPjx0ZD48Y29kZT4tbGU8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+PGNvZGU+bGU8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+SW50ZWdlciBsZXNzIHRoYW4gb3IgZXF1YWw8L3RkPjwvdHI+Cjx0cj48dGQ+PGNvZGU+LWd0PC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPjxjb2RlPmd0PC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPkludGVnZXIgZ3JlYXRlciB0aGFuPC90ZD48L3RyPgo8dHIgY2xhc3M9Im9kZCI+PHRkPjxjb2RlPi1nZTwvY29kZT48L3RkPgogICAgICAgIDx0ZD48Y29kZT5nZTwvY29kZT48L3RkPgogICAgICAgIDx0ZD5JbnRlZ2VyIGdyZWF0ZXIgdGhhbiBvciBlcXVhbDwvdGQ+PC90cj4KPC90YWJsZT4KICAgIAoKICAgIDxoMz48YSBuYW1lPSJiaW5hcnlvdGhlciIgaWQ9ImJpbmFyeW90aGVyIj5PdGhlciBiaW5hcnkgb3BlcmF0b3JzPC9hPjwvaDM+CiAgICAKCiAgICA8dGFibGUgY2xhc3M9ImJvcmRlcmVkIj48dHIgY2xhc3M9ImhlYWRlciI+PHRoPk5hbWU8L3RoPjx0aD5EZXNjcmlwdGlvbjwvdGg+PC90cj4KPHRyPjx0ZD48Y29kZT4taXBtYXRjaDwvY29kZT48L3RkPgogICAgICAgIDx0ZD5JUCBhZGRyZXNzIG1hdGNoZXMgYWRkcmVzcy9uZXRtYXNrPC90ZD48L3RyPgo8dHIgY2xhc3M9Im9kZCI+PHRkPjxjb2RlPi1zdHJtYXRjaDwvY29kZT48L3RkPgogICAgICAgIDx0ZD5sZWZ0IHN0cmluZyBtYXRjaGVzIHBhdHRlcm4gZ2l2ZW4gYnkgcmlnaHQgc3RyaW5nIChjb250YWluaW5nCiAgICAgICAgICAgIHdpbGRjYXJkcyAqLCA/LCBbXSk8L3RkPjwvdHI+Cjx0cj48dGQ+PGNvZGU+LXN0cmNtYXRjaDwvY29kZT48L3RkPgogICAgICAgIDx0ZD5zYW1lIGFzIDxjb2RlPi1zdHJtYXRjaDwvY29kZT4sIGJ1dCBjYXNlIGluc2Vuc2l0aXZlPC90ZD48L3RyPgo8dHIgY2xhc3M9Im9kZCI+PHRkPjxjb2RlPi1mbm1hdGNoPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPnNhbWUgYXMgPGNvZGU+LXN0cm1hdGNoPC9jb2RlPiwgYnV0IHNsYXNoZXMgYXJlIG5vdCBtYXRjaGVkIGJ5CiAgICAgICAgICAgIHdpbGRjYXJkczwvdGQ+PC90cj4KPC90YWJsZT4KICAgIAoKPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJ1bm5vcCIgaWQ9InVubm9wIj5VbmFyeSBvcGVyYXRvcnM8L2E+PC9oMj4KICAgIAoKICAgIDxwPlVuYXJ5IG9wZXJhdG9ycyB0YWtlIG9uZSBhcmd1bWVudCBhbmQgaGF2ZSB0aGUgZm9ybQogICAgIjxjb2RlPi1bYS16QS1aXTwvY29kZT4iLCBpLmUuIGEgbWludXMgYW5kIG9uZSBjaGFyYWN0ZXIuCiAgICBUaGUgbmFtZSA8ZW0+aXM8L2VtPiBjYXNlIHNlbnNpdGl2ZS4KICAgIE1vZHVsZXMgbWF5IHJlZ2lzdGVyIGFkZGl0aW9uYWwgdW5hcnkgb3BlcmF0b3JzLjwvcD4KCiAgICA8dGFibGUgY2xhc3M9ImJvcmRlcmVkIj48dHIgY2xhc3M9ImhlYWRlciI+PHRoPk5hbWU8L3RoPjx0aD5EZXNjcmlwdGlvbjwvdGg+PHRoPlJlc3RyaWN0ZWQ8L3RoPjwvdHI+Cjx0cj48dGQ+PGNvZGU+LWQ8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+VGhlIGFyZ3VtZW50IGlzIHRyZWF0ZWQgYXMgYSBmaWxlbmFtZS4KICAgICAgICAgICAgVHJ1ZSBpZiB0aGUgZmlsZSBleGlzdHMgYW5kIGlzIGEgZGlyZWN0b3J5PC90ZD48dGQ+eWVzPC90ZD48L3RyPgo8dHIgY2xhc3M9Im9kZCI+PHRkPjxjb2RlPi1lPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPlRoZSBhcmd1bWVudCBpcyB0cmVhdGVkIGFzIGEgZmlsZW5hbWUuCiAgICAgICAgICAgIFRydWUgaWYgdGhlIGZpbGUgKG9yIGRpciBvciBzcGVjaWFsKSBleGlzdHM8L3RkPjx0ZD55ZXM8L3RkPjwvdHI+Cjx0cj48dGQ+PGNvZGU+LWY8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+VGhlIGFyZ3VtZW50IGlzIHRyZWF0ZWQgYXMgYSBmaWxlbmFtZS4KICAgICAgICAgICAgVHJ1ZSBpZiB0aGUgZmlsZSBleGlzdHMgYW5kIGlzIHJlZ3VsYXIgZmlsZTwvdGQ+PHRkPnllczwvdGQ+PC90cj4KPHRyIGNsYXNzPSJvZGQiPjx0ZD48Y29kZT4tczwvY29kZT48L3RkPgogICAgICAgIDx0ZD5UaGUgYXJndW1lbnQgaXMgdHJlYXRlZCBhcyBhIGZpbGVuYW1lLgogICAgICAgICAgICBUcnVlIGlmIHRoZSBmaWxlIGV4aXN0cyBhbmQgaXMgbm90IGVtcHR5PC90ZD48dGQ+eWVzPC90ZD48L3RyPgo8dHI+PHRkPjxjb2RlPi1MPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPlRoZSBhcmd1bWVudCBpcyB0cmVhdGVkIGFzIGEgZmlsZW5hbWUuCiAgICAgICAgICAgIFRydWUgaWYgdGhlIGZpbGUgZXhpc3RzIGFuZCBpcyBzeW1saW5rPC90ZD48dGQ+eWVzPC90ZD48L3RyPgo8dHIgY2xhc3M9Im9kZCI+PHRkPjxjb2RlPi1oPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPlRoZSBhcmd1bWVudCBpcyB0cmVhdGVkIGFzIGEgZmlsZW5hbWUuCiAgICAgICAgICAgIFRydWUgaWYgdGhlIGZpbGUgZXhpc3RzIGFuZCBpcyBzeW1saW5rCiAgICAgICAgICAgIChzYW1lIGFzIDxjb2RlPi1MPC9jb2RlPik8L3RkPjx0ZD55ZXM8L3RkPjwvdHI+Cjx0cj48dGQ+PGNvZGU+LUY8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+VHJ1ZSBpZiBzdHJpbmcgaXMgYSB2YWxpZCBmaWxlLCBhY2Nlc3NpYmxlIHZpYSBhbGwgdGhlIHNlcnZlcidzCiAgICAgICAgICAgIGN1cnJlbnRseS1jb25maWd1cmVkIGFjY2VzcyBjb250cm9scyBmb3IgdGhhdCBwYXRoLiBUaGlzIHVzZXMgYW4KICAgICAgICAgICAgaW50ZXJuYWwgc3VicmVxdWVzdCB0byBkbyB0aGUgY2hlY2ssIHNvIHVzZSBpdCB3aXRoIGNhcmUgLSBpdCBjYW4KICAgICAgICAgICAgaW1wYWN0IHlvdXIgc2VydmVyJ3MgcGVyZm9ybWFuY2UhPC90ZD48dGQgLz48L3RyPgo8dHIgY2xhc3M9Im9kZCI+PHRkPjxjb2RlPi1VPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPlRydWUgaWYgc3RyaW5nIGlzIGEgdmFsaWQgVVJMLCBhY2Nlc3NpYmxlIHZpYSBhbGwgdGhlIHNlcnZlcidzCiAgICAgICAgICAgIGN1cnJlbnRseS1jb25maWd1cmVkIGFjY2VzcyBjb250cm9scyBmb3IgdGhhdCBwYXRoLiBUaGlzIHVzZXMgYW4KICAgICAgICAgICAgaW50ZXJuYWwgc3VicmVxdWVzdCB0byBkbyB0aGUgY2hlY2ssIHNvIHVzZSBpdCB3aXRoIGNhcmUgLSBpdCBjYW4KICAgICAgICAgICAgaW1wYWN0IHlvdXIgc2VydmVyJ3MgcGVyZm9ybWFuY2UhPC90ZD48dGQgLz48L3RyPgo8dHI+PHRkPjxjb2RlPi1BPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPkFsaWFzIGZvciA8Y29kZT4tVTwvY29kZT48L3RkPjx0ZCAvPjwvdHI+Cjx0ciBjbGFzcz0ib2RkIj48dGQ+PGNvZGU+LW48L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+VHJ1ZSBpZiBzdHJpbmcgaXMgbm90IGVtcHR5PC90ZD48dGQgLz48L3RyPgo8dHI+PHRkPjxjb2RlPi16PC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPlRydWUgaWYgc3RyaW5nIGlzIGVtcHR5PC90ZD48dGQgLz48L3RyPgo8dHIgY2xhc3M9Im9kZCI+PHRkPjxjb2RlPi1UPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPkZhbHNlIGlmIHN0cmluZyBpcyBlbXB0eSwgIjxjb2RlPjA8L2NvZGU+IiwgIjxjb2RlPm9mZjwvY29kZT4iLAogICAgICAgICAgICAiPGNvZGU+ZmFsc2U8L2NvZGU+Iiwgb3IgIjxjb2RlPm5vPC9jb2RlPiIgKGNhc2UgaW5zZW5zaXRpdmUpLgogICAgICAgICAgICBUcnVlIG90aGVyd2lzZS48L3RkPjx0ZCAvPjwvdHI+Cjx0cj48dGQ+PGNvZGU+LVI8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+U2FtZSBhcyAiPGNvZGU+JXtSRU1PVEVfQUREUn0gLWlwbWF0Y2ggLi4uPC9jb2RlPiIsIGJ1dCBtb3JlCiAgICAgICAgZWZmaWNpZW50CiAgICAgICAgPC90ZD48dGQgLz48L3RyPgo8L3RhYmxlPgoKICAgIDxwPlRoZSBvcGVyYXRvcnMgbWFya2VkIGFzICJyZXN0cmljdGVkIiBhcmUgbm90IGF2YWlsYWJsZSBpbiBzb21lIG1vZHVsZXMKICAgIGxpa2UgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2luY2x1ZGUuaHRtbCI+bW9kX2luY2x1ZGU8L2E+PC9jb2RlPi48L3A+CjwvZGl2PjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0iZnVuY3Rpb25zIiBpZD0iZnVuY3Rpb25zIj5GdW5jdGlvbnM8L2E+PC9oMj4KICAgIAoKICAgIDxwPk5vcm1hbCBzdHJpbmctdmFsdWVkIGZ1bmN0aW9ucyB0YWtlIG9uZSBzdHJpbmcgYXMgYXJndW1lbnQgYW5kIHJldHVybgogICAgYSBzdHJpbmcuIEZ1bmN0aW9ucyBuYW1lcyBhcmUgbm90IGNhc2Ugc2Vuc2l0aXZlLgogICAgTW9kdWxlcyBtYXkgcmVnaXN0ZXIgYWRkaXRpb25hbCBmdW5jdGlvbnMuPC9wPgoKICAgIDx0YWJsZSBjbGFzcz0iYm9yZGVyZWQiPjx0ciBjbGFzcz0iaGVhZGVyIj48dGg+TmFtZTwvdGg+PHRoPkRlc2NyaXB0aW9uPC90aD48dGg+UmVzdHJpY3RlZDwvdGg+PC90cj4KPHRyPjx0ZD48Y29kZT5yZXE8L2NvZGU+LCA8Y29kZT5odHRwPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPkdldCBIVFRQIHJlcXVlc3QgaGVhZGVyOyBoZWFkZXIgbmFtZXMgbWF5IGJlIGFkZGVkIHRvIHRoZSBWYXJ5CiAgICAgICAgICAgIGhlYWRlciwgc2VlIGJlbG93PC90ZD48dGQgLz48L3RyPgo8dHIgY2xhc3M9Im9kZCI+PHRkPjxjb2RlPnJlcV9ub3Zhcnk8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+U2FtZSBhcyA8Y29kZT5yZXE8L2NvZGU+LCBidXQgaGVhZGVyIG5hbWVzIHdpbGwgbm90IGJlIGFkZGVkIHRvIHRoZQogICAgICAgICAgICBWYXJ5IGhlYWRlcjwvdGQ+PHRkIC8+PC90cj4KPHRyPjx0ZD48Y29kZT5yZXNwPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPkdldCBIVFRQIHJlc3BvbnNlIGhlYWRlcjwvdGQ+PHRkIC8+PC90cj4KPHRyIGNsYXNzPSJvZGQiPjx0ZD48Y29kZT5yZXFlbnY8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+TG9va3VwIHJlcXVlc3QgZW52aXJvbm1lbnQgdmFyaWFibGUgKGFzIGEgc2hvcnRjdXQsCiAgICAgICAgPGNvZGU+djwvY29kZT4gY2FuIGJlIHVzZWQgdG9vIHRvIGFjY2VzcwogICAgICAgIHZhcmlhYmxlcykuPC90ZD48dGQgLz48L3RyPgo8dHI+PHRkPjxjb2RlPm9zZW52PC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPkxvb2t1cCBvcGVyYXRpbmcgc3lzdGVtIGVudmlyb25tZW50IHZhcmlhYmxlPC90ZD48dGQgLz48L3RyPgo8dHIgY2xhc3M9Im9kZCI+PHRkPjxjb2RlPm5vdGU8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+TG9va3VwIHJlcXVlc3Qgbm90ZTwvdGQ+PHRkIC8+PC90cj4KPHRyPjx0ZD48Y29kZT5lbnY8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+UmV0dXJuIGZpcnN0IG1hdGNoIG9mIDxjb2RlPm5vdGU8L2NvZGU+LCA8Y29kZT5yZXFlbnY8L2NvZGU+LAogICAgICAgICAgICA8Y29kZT5vc2VudjwvY29kZT48L3RkPjx0ZCAvPjwvdHI+Cjx0ciBjbGFzcz0ib2RkIj48dGQ+PGNvZGU+dG9sb3dlcjwvY29kZT48L3RkPgogICAgICAgIDx0ZD5Db252ZXJ0IHN0cmluZyB0byBsb3dlciBjYXNlPC90ZD48dGQgLz48L3RyPgo8dHI+PHRkPjxjb2RlPnRvdXBwZXI8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+Q29udmVydCBzdHJpbmcgdG8gdXBwZXIgY2FzZTwvdGQ+PHRkIC8+PC90cj4KPHRyIGNsYXNzPSJvZGQiPjx0ZD48Y29kZT5lc2NhcGU8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+RXNjYXBlIHNwZWNpYWwgY2hhcmFjdGVycyBpbiAlaGV4IGVuY29kaW5nPC90ZD48dGQgLz48L3RyPgo8dHI+PHRkPjxjb2RlPnVuZXNjYXBlPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPlVuZXNjYXBlICVoZXggZW5jb2RlZCBzdHJpbmcsIGxlYXZpbmcgZW5jb2RlZCBzbGFzaGVzIGFsb25lOwogICAgICAgICAgICByZXR1cm4gZW1wdHkgc3RyaW5nIGlmICUwMCBpcyBmb3VuZDwvdGQ+PHRkIC8+PC90cj4KPHRyIGNsYXNzPSJvZGQiPjx0ZD48Y29kZT5iYXNlNjQ8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+RW5jb2RlIHRoZSBzdHJpbmcgdXNpbmcgYmFzZTY0IGVuY29kaW5nPC90ZD48dGQgLz48L3RyPgo8dHI+PHRkPjxjb2RlPnVuYmFzZTY0PC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPkRlY29kZSBiYXNlNjQgZW5jb2RlZCBzdHJpbmcsIHJldHVybiB0cnVuY2F0ZWQgc3RyaW5nIGlmIDB4MDAgaXMKICAgICAgICAgICAgZm91bmQ8L3RkPjx0ZCAvPjwvdHI+Cjx0ciBjbGFzcz0ib2RkIj48dGQ+PGNvZGU+bWQ1PC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPkhhc2ggdGhlIHN0cmluZyB1c2luZyBNRDUsIHRoZW4gZW5jb2RlIHRoZSBoYXNoIHdpdGggaGV4YWRlY2ltYWwKICAgICAgICAgICAgZW5jb2Rpbmc8L3RkPjx0ZCAvPjwvdHI+Cjx0cj48dGQ+PGNvZGU+c2hhMTwvY29kZT48L3RkPgogICAgICAgIDx0ZD5IYXNoIHRoZSBzdHJpbmcgdXNpbmcgU0hBMSwgdGhlbiBlbmNvZGUgdGhlIGhhc2ggd2l0aCBoZXhhZGVjaW1hbAogICAgICAgICAgICBlbmNvZGluZzwvdGQ+PHRkIC8+PC90cj4KPHRyIGNsYXNzPSJvZGQiPjx0ZD48Y29kZT5maWxlPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPlJlYWQgY29udGVudHMgZnJvbSBhIGZpbGUgKGluY2x1ZGluZyBsaW5lIGVuZGluZ3MsIHdoZW4gcHJlc2VudCkKICAgICAgICA8L3RkPjx0ZD55ZXM8L3RkPjwvdHI+Cjx0cj48dGQ+PGNvZGU+ZmlsZXNpemU8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+UmV0dXJuIHNpemUgb2YgYSBmaWxlIChvciAwIGlmIGZpbGUgZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90CiAgICAgICAgICAgIHJlZ3VsYXIgZmlsZSk8L3RkPjx0ZD55ZXM8L3RkPjwvdHI+CjwvdGFibGU+CgogICAgPHA+VGhlIGZ1bmN0aW9ucyBtYXJrZWQgYXMgInJlc3RyaWN0ZWQiIGFyZSBub3QgYXZhaWxhYmxlIGluIHNvbWUgbW9kdWxlcwogICAgbGlrZSA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2RfaW5jbHVkZS5odG1sIj5tb2RfaW5jbHVkZTwvYT48L2NvZGU+LjwvcD4KCiAgICA8cD5XaGVuIHRoZSBmdW5jdGlvbnMgPGNvZGU+cmVxPC9jb2RlPiBvciA8Y29kZT5odHRwPC9jb2RlPiBhcmUgdXNlZCwKICAgIHRoZSBoZWFkZXIgbmFtZSB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgYWRkZWQgdG8gdGhlIFZhcnkgaGVhZGVyIG9mIHRoZQogICAgSFRUUCByZXNwb25zZSwgZXhjZXB0IHdoZXJlIG90aGVyd2lzZSBub3RlZCBmb3IgdGhlIGRpcmVjdGl2ZSBhY2NlcHRpbmcKICAgIHRoZSBleHByZXNzaW9uLiBUaGUgPGNvZGU+cmVxX25vdmFyeTwvY29kZT4gZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8KICAgIHByZXZlbnQgbmFtZXMgZnJvbSBiZWluZyBhZGRlZCB0byB0aGUgVmFyeSBoZWFkZXIuPC9wPgoKICAgIDxwPkluIGFkZGl0aW9uIHRvIHN0cmluZy12YWx1ZWQgZnVuY3Rpb25zLCB0aGVyZSBhcmUgYWxzbwogICAgbGlzdC12YWx1ZWQgZnVuY3Rpb25zIHdoaWNoIHRha2Ugb25lIHN0cmluZyBhcyBhcmd1bWVudCBhbmQgcmV0dXJuIGEKICAgIHdvcmRsaXN0LCBpLmUuIGEgbGlzdCBvZiBzdHJpbmdzLiBUaGUgd29yZGxpc3QgY2FuIGJlIHVzZWQgd2l0aCB0aGUKICAgIHNwZWNpYWwgPGNvZGU+LWluPC9jb2RlPiBvcGVyYXRvci4gIEZ1bmN0aW9ucyBuYW1lcyBhcmUgbm90IGNhc2UKICAgIHNlbnNpdGl2ZS4gIE1vZHVsZXMgbWF5IHJlZ2lzdGVyIGFkZGl0aW9uYWwgZnVuY3Rpb25zLjwvcD4KCiAgICA8cD5UaGVyZSBhcmUgbm8gYnVpbHQtaW4gbGlzdC12YWx1ZWQgZnVuY3Rpb25zLiA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2Rfc3NsLmh0bWwiPm1vZF9zc2w8L2E+PC9jb2RlPgogICAgcHJvdmlkZXMgPGNvZGU+UGVlckV4dExpc3Q8L2NvZGU+LiAgU2VlIHRoZSBkZXNjcmlwdGlvbiBvZgogICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvbW9kX3NzbC5odG1sI3NzbHJlcXVpcmUiPlNTTFJlcXVpcmU8L2E+PC9jb2RlPiBmb3IgZGV0YWlscwogICAgKGJ1dCA8Y29kZT5QZWVyRXh0TGlzdDwvY29kZT4gaXMgYWxzbyB1c2FibGUgb3V0c2lkZQogICAgb2YgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvbW9kX3NzbC5odG1sI3NzbHJlcXVpcmUiPlNTTFJlcXVpcmU8L2E+PC9jb2RlPikuPC9wPgoKPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJleGFtcGxlcyIgaWQ9ImV4YW1wbGVzIj5FeGFtcGxlIGV4cHJlc3Npb25zPC9hPjwvaDI+CiAgICAKCQogICAgPHA+VGhlIGZvbGxvd2luZyBleGFtcGxlcyBzaG93IGhvdyBleHByZXNzaW9ucyBtaWdodCBiZSB1c2VkIHRvCiAgICBldmFsdWF0ZSByZXF1ZXN0czo8L3A+CgkKCTxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctY29uZmlnIj4jIENvbXBhcmUgdGhlIGhvc3QgbmFtZSB0byBleGFtcGxlLmNvbSBhbmQgcmVkaXJlY3QgdG8gd3d3LmV4YW1wbGUuY29tIGlmIGl0IG1hdGNoZXMKJmx0O0lmICIle0hUVFBfSE9TVH0gPT0gJ2V4YW1wbGUuY29tJyImZ3Q7CiAgICBSZWRpcmVjdCBwZXJtYW5lbnQgIi8iICJodHRwOi8vd3d3LmV4YW1wbGUuY29tLyIKJmx0Oy9JZiZndDsKCiMgRm9yY2UgdGV4dC9wbGFpbiBpZiByZXF1ZXN0aW5nIGEgZmlsZSB3aXRoIHRoZSBxdWVyeSBzdHJpbmcgY29udGFpbnMgJ2ZvcmNldGV4dCcKJmx0O0lmICIle1FVRVJZX1NUUklOR30gPX4gL2ZvcmNldGV4dC8iJmd0OwogICAgRm9yY2VUeXBlIHRleHQvcGxhaW4KJmx0Oy9JZiZndDsKCiMgT25seSBhbGxvdyBhY2Nlc3MgdG8gdGhpcyBjb250ZW50IGR1cmluZyBidXNpbmVzcyBob3VycwombHQ7RGlyZWN0b3J5ICIvZm9vL2Jhci9idXNpbmVzcyImZ3Q7CiAgICBSZXF1aXJlIGV4cHIgJXtUSU1FX0hPVVJ9IC1ndCA5ICZhbXA7JmFtcDsgJXtUSU1FX0hPVVJ9IC1sdCAxNwombHQ7L0RpcmVjdG9yeSZndDsJCgojIENoZWNrIGEgSFRUUCBoZWFkZXIgZm9yIGEgbGlzdCBvZiB2YWx1ZXMKJmx0O0lmICIle0hUVFA6WC1leGFtcGxlLWhlYWRlcn0gaW4geyAnZm9vJywgJ2JhcicsICdiYXonIH0iJmd0OwogICAgSGVhZGVyIHNldCBtYXRjaGVkIHRydWUKJmx0Oy9JZiZndDsKCiMgQ2hlY2sgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgZm9yIGEgcmVndWxhciBleHByZXNzaW9uLCBuZWdhdGVkLgombHQ7SWYgIiEgcmVxZW52KCdSRURJUkVDVF9GT08nKSA9fiAvYmFyLyImZ3Q7CiAgICBIZWFkZXIgc2V0IG1hdGNoZWQgdHJ1ZQombHQ7L0lmJmd0OwoKIyBDaGVjayByZXN1bHQgb2YgVVJJIG1hcHBpbmcgYnkgcnVubmluZyBpbiBEaXJlY3RvcnkgY29udGV4dCB3aXRoIC1mCiZsdDtEaXJlY3RvcnkgIi92YXIvd3d3IiZndDsKICAgIEFkZEVuY29kaW5nIHgtZ3ppcCBnegombHQ7SWYgIi1mICcle1JFUVVFU1RfRklMRU5BTUV9LnVuemlwbWUnICZhbXA7JmFtcDsgISAle0hUVFA6QWNjZXB0LUVuY29kaW5nfSA9fiAvZ3ppcC8iJmd0OwogICAgICBTZXRPdXRwdXRGaWx0ZXIgSU5GTEFURQombHQ7L0lmJmd0OwombHQ7L0RpcmVjdG9yeSZndDsKCiMgQ2hlY2sgYWdhaW5zdCB0aGUgY2xpZW50IElQCiZsdDtJZiAiLVIgJzE5Mi4xNjguMS4wLzI0JyImZ3Q7CiAgICBIZWFkZXIgc2V0IG1hdGNoZWQgdHJ1ZQombHQ7L0lmJmd0OwoKIyBGdW5jdGlvbiBleGFtcGxlIGluIGJvb2xlYW4gY29udGV4dAombHQ7SWYgIm1kNSgnZm9vJykgPT0gJ2FjYmQxOGRiNGNjMmY4NWNlZGVmNjU0ZmNjYzRhNGQ4JyImZ3Q7CiAgSGVhZGVyIHNldCBjaGVja3N1bS1tYXRjaGVkIHRydWUKJmx0Oy9JZiZndDsKCiMgRnVuY3Rpb24gZXhhbXBsZSBpbiBzdHJpbmcgY29udGV4dApIZWFkZXIgc2V0IGZvby1jaGVja3N1bSAiZXhwcj0le21kNTpmb299IgoKIyBUaGlzIGRlbGF5cyB0aGUgZXZhbHVhdGlvbiBvZiB0aGUgY29uZGl0aW9uIGNsYXVzZSBjb21wYXJlZCB0byAmbHQ7SWYmZ3Q7CkhlYWRlciBhbHdheXMgc2V0IEN1c3RvbUhlYWRlciBteS12YWx1ZSAiZXhwcj0le1JFUVVFU1RfVVJJfSA9fiBtI14vc3BlY2lhbF9wYXRoLnBocCQjIjwvcHJlPgoKPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJvdGhlciIgaWQ9Im90aGVyIj5PdGhlcjwvYT48L2gyPgogICAgCgogICAgPHRhYmxlIGNsYXNzPSJib3JkZXJlZCI+PHRyIGNsYXNzPSJoZWFkZXIiPjx0aD5OYW1lPC90aD48dGg+QWx0ZXJuYXRpdmU8L3RoPiA8dGg+RGVzY3JpcHRpb248L3RoPjwvdHI+Cjx0cj48dGQ+PGNvZGU+LWluPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPjxjb2RlPmluPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPnN0cmluZyBjb250YWluZWQgaW4gd29yZGxpc3Q8L3RkPjwvdHI+Cjx0ciBjbGFzcz0ib2RkIj48dGQ+PGNvZGU+L3JlZ2V4cC88L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+PGNvZGU+bSNyZWdleHAjPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPlJlZ3VsYXIgZXhwcmVzc2lvbiAodGhlIHNlY29uZCBmb3JtIGFsbG93cyBkaWZmZXJlbnQKICAgICAgICBkZWxpbWl0ZXJzIHRoYW4gLyk8L3RkPjwvdHI+Cjx0cj48dGQ+PGNvZGU+L3JlZ2V4cC9pPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPjxjb2RlPm0jcmVnZXhwI2k8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+Q2FzZSBpbnNlbnNpdGl2ZSByZWd1bGFyIGV4cHJlc3Npb248L3RkPjwvdHI+Cjx0ciBjbGFzcz0ib2RkIj48dGQ+PGNvZGU+JDAgLi4uICQ5PC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkIC8+CiAgICAgICAgPHRkPlJlZ3VsYXIgZXhwcmVzc2lvbiBiYWNrcmVmZXJlbmNlczwvdGQ+PC90cj4KPC90YWJsZT4KCiAgICA8aDM+PGEgbmFtZT0icmViYWNrcmVmIiBpZD0icmViYWNrcmVmIj5SZWd1bGFyIGV4cHJlc3Npb24gYmFja3JlZmVyZW5jZXM8L2E+PC9oMz4KICAgICAgICAKICAgICAgICA8cD5UaGUgc3RyaW5ncyA8Y29kZT4kMDwvY29kZT4gLi4uIDxjb2RlPiQ5PC9jb2RlPiBhbGxvdyB0byByZWZlcmVuY2UKICAgICAgICB0aGUgY2FwdHVyZSBncm91cHMgZnJvbSBhIHByZXZpb3VzbHkgZXhlY3V0ZWQsIHN1Y2Nlc3NmdWxseQogICAgICAgIG1hdGNoaW5nIHJlZ3VsYXIgZXhwcmVzc2lvbnMuIFRoZXkgY2FuIG5vcm1hbGx5IG9ubHkgYmUgdXNlZCBpbiB0aGUKICAgICAgICBzYW1lIGV4cHJlc3Npb24gYXMgdGhlIG1hdGNoaW5nIHJlZ2V4LCBidXQgc29tZSBtb2R1bGVzIGFsbG93IHNwZWNpYWwKICAgICAgICB1c2VzLjwvcD4KICAgIAoKPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJzc2xyZXF1aXJlIiBpZD0ic3NscmVxdWlyZSI+Q29tcGFyaXNvbiB3aXRoIFNTTFJlcXVpcmU8L2E+PC9oMj4KICAgIAogICAgPHA+VGhlIDxlbT5hcF9leHByPC9lbT4gc3ludGF4IGlzIG1vc3RseSBhIHN1cGVyc2V0IG9mIHRoZSBzeW50YXggb2YgdGhlCiAgICBkZXByZWNhdGVkIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL21vZF9zc2wuaHRtbCNzc2xyZXF1aXJlIj5TU0xSZXF1aXJlPC9hPjwvY29kZT4gZGlyZWN0aXZlLgogICAgVGhlIGRpZmZlcmVuY2VzIGFyZSBkZXNjcmliZWQgaW4gPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvbW9kX3NzbC5odG1sI3NzbHJlcXVpcmUiPlNTTFJlcXVpcmU8L2E+PC9jb2RlPidzIGRvY3VtZW50YXRpb24uPC9wPgo8L2Rpdj48ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9ImNvbXBhdGliaWxpdHkiIGlkPSJjb21wYXRpYmlsaXR5Ij5WZXJzaW9uIEhpc3Rvcnk8L2E+PC9oMj4KICAgIAogICAgPHA+VGhlIDxjb2RlPnJlcV9ub3Zhcnk8L2NvZGU+IDxhIGhyZWY9IiNmdW5jdGlvbnMiPmZ1bmN0aW9uPC9hPgogICAgaXMgYXZhaWxhYmxlIGZvciB2ZXJzaW9ucyAyLjQuNCBhbmQgbGF0ZXIuPC9wPgo8L2Rpdj48L2Rpdj4KPGRpdiBjbGFzcz0iYm90dG9tbGFuZyI+CjxwPjxzcGFuPkF2YWlsYWJsZSBMYW5ndWFnZXM6IDwvc3Bhbj48YSBocmVmPSIuL2VuL2V4cHIuaHRtbCIgdGl0bGU9IkVuZ2xpc2giPiZuYnNwO2VuJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4vZnIvZXhwci5odG1sIiBocmVmbGFuZz0iZnIiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iRnJhbudhaXMiPiZuYnNwO2ZyJm5ic3A7PC9hPjwvcD4KPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgc3JjPSIuL2ltYWdlcy91cC5naWYiIGFsdD0idG9wIiAvPjwvYT48L2Rpdj48ZGl2IGNsYXNzPSJzZWN0aW9uIj48aDI+PGEgaWQ9ImNvbW1lbnRzX3NlY3Rpb24iIG5hbWU9ImNvbW1lbnRzX3NlY3Rpb24iPkNvbW1lbnRzPC9hPjwvaDI+PGRpdiBjbGFzcz0id2FybmluZyI+PHN0cm9uZz5Ob3RpY2U6PC9zdHJvbmc+PGJyIC8+VGhpcyBpcyBub3QgYSBRJmFtcDtBIHNlY3Rpb24uIENvbW1lbnRzIHBsYWNlZCBoZXJlIHNob3VsZCBiZSBwb2ludGVkIHRvd2FyZHMgc3VnZ2VzdGlvbnMgb24gaW1wcm92aW5nIHRoZSBkb2N1bWVudGF0aW9uIG9yIHNlcnZlciwgYW5kIG1heSBiZSByZW1vdmVkIGFnYWluIGJ5IG91ciBtb2RlcmF0b3JzIGlmIHRoZXkgYXJlIGVpdGhlciBpbXBsZW1lbnRlZCBvciBjb25zaWRlcmVkIGludmFsaWQvb2ZmLXRvcGljLiBRdWVzdGlvbnMgb24gaG93IHRvIG1hbmFnZSB0aGUgQXBhY2hlIEhUVFAgU2VydmVyIHNob3VsZCBiZSBkaXJlY3RlZCBhdCBlaXRoZXIgb3VyIElSQyBjaGFubmVsLCAjaHR0cGQsIG9uIEZyZWVub2RlLCBvciBzZW50IHRvIG91ciA8YSBocmVmPSJodHRwOi8vaHR0cGQuYXBhY2hlLm9yZy9saXN0cy5odG1sIj5tYWlsaW5nIGxpc3RzPC9hPi48L2Rpdj4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0vLy0tPjwhW0NEQVRBWy8vPjwhLS0KdmFyIGNvbW1lbnRzX3Nob3J0bmFtZSA9ICdodHRwZCc7CnZhciBjb21tZW50c19pZGVudGlmaWVyID0gJ2h0dHA6Ly9odHRwZC5hcGFjaGUub3JnL2RvY3MvMi40L2V4cHIuaHRtbCc7CihmdW5jdGlvbih3LCBkKSB7CiAgICBpZiAody5sb2NhdGlvbi5ob3N0bmFtZS50b0xvd2VyQ2FzZSgpID09ICJodHRwZC5hcGFjaGUub3JnIikgewogICAgICAgIGQud3JpdGUoJzxkaXYgaWQ9ImNvbW1lbnRzX3RocmVhZCI+PFwvZGl2PicpOwogICAgICAgIHZhciBzID0gZC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsKICAgICAgICBzLnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0JzsKICAgICAgICBzLmFzeW5jID0gdHJ1ZTsKICAgICAgICBzLnNyYyA9ICdodHRwczovL2NvbW1lbnRzLmFwYWNoZS5vcmcvc2hvd19jb21tZW50cy5sdWE/c2l0ZT0nICsgY29tbWVudHNfc2hvcnRuYW1lICsgJyZwYWdlPScgKyBjb21tZW50c19pZGVudGlmaWVyOwogICAgICAgIChkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0gfHwgZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYm9keScpWzBdKS5hcHBlbmRDaGlsZChzKTsKICAgIH0KICAgIGVsc2UgeyAKICAgICAgICBkLndyaXRlKCc8ZGl2IGlkPSJjb21tZW50c190aHJlYWQiPkNvbW1lbnRzIGFyZSBkaXNhYmxlZCBmb3IgdGhpcyBwYWdlIGF0IHRoZSBtb21lbnQuPFwvZGl2PicpOwogICAgfQp9KSh3aW5kb3csIGRvY3VtZW50KTsKLy8tLT48IV1dPjwvc2NyaXB0PjwvZGl2PjxkaXYgaWQ9ImZvb3RlciI+CjxwIGNsYXNzPSJhcGFjaGUiPkNvcHlyaWdodCAyMDE2IFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi48YnIgLz5MaWNlbnNlZCB1bmRlciB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5BcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjA8L2E+LjwvcD4KPHAgY2xhc3M9Im1lbnUiPjxhIGhyZWY9Ii4vbW9kLyI+TW9kdWxlczwvYT4gfCA8YSBocmVmPSIuL21vZC9kaXJlY3RpdmVzLmh0bWwiPkRpcmVjdGl2ZXM8L2E+IHwgPGEgaHJlZj0iaHR0cDovL3dpa2kuYXBhY2hlLm9yZy9odHRwZC9GQVEiPkZBUTwvYT4gfCA8YSBocmVmPSIuL2dsb3NzYXJ5Lmh0bWwiPkdsb3NzYXJ5PC9hPiB8IDxhIGhyZWY9Ii4vc2l0ZW1hcC5odG1sIj5TaXRlbWFwPC9hPjwvcD48L2Rpdj48c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLS8vLS0+PCFbQ0RBVEFbLy8+PCEtLQppZiAodHlwZW9mKHByZXR0eVByaW50KSAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgIHByZXR0eVByaW50KCk7Cn0KLy8tLT48IV1dPjwvc2NyaXB0Pgo8L2JvZHk+PC9odG1sPg==