PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Pgo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+CjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj48aGVhZD4KPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KPCEtLQogICAgICAgIFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYCiAgICAgICAgICAgICAgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBmcm9tIHhtbCBzb3VyY2U6IERPIE5PVCBFRElUCiAgICAgICAgWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKICAgICAgLS0+Cjx0aXRsZT5PdmVydmlldyBvZiBuZXcgZmVhdHVyZXMgaW4gQXBhY2hlIEhUVFAgU2VydmVyIDIuMCAtIEFwYWNoZSBIVFRQIFNlcnZlciBWZXJzaW9uIDIuNTwvdGl0bGU+CjxsaW5rIGhyZWY9Ii4vc3R5bGUvY3NzL21hbnVhbC5jc3MiIHJlbD0ic3R5bGVzaGVldCIgbWVkaWE9ImFsbCIgdHlwZT0idGV4dC9jc3MiIHRpdGxlPSJNYWluIHN0eWxlc2hlZXQiIC8+CjxsaW5rIGhyZWY9Ii4vc3R5bGUvY3NzL21hbnVhbC1sb29zZS0xMDBwYy5jc3MiIHJlbD0iYWx0ZXJuYXRlIHN0eWxlc2hlZXQiIG1lZGlhPSJhbGwiIHR5cGU9InRleHQvY3NzIiB0aXRsZT0iTm8gU2lkZWJhciAtIERlZmF1bHQgZm9udCBzaXplIiAvPgo8bGluayBocmVmPSIuL3N0eWxlL2Nzcy9tYW51YWwtcHJpbnQuY3NzIiByZWw9InN0eWxlc2hlZXQiIG1lZGlhPSJwcmludCIgdHlwZT0idGV4dC9jc3MiIC8+PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iLi9zdHlsZS9jc3MvcHJldHRpZnkuY3NzIiAvPgo8c2NyaXB0IHNyYz0iLi9zdHlsZS9zY3JpcHRzL3ByZXR0aWZ5Lm1pbi5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KPC9zY3JpcHQ+Cgo8bGluayBocmVmPSIuL2ltYWdlcy9mYXZpY29uLmljbyIgcmVsPSJzaG9ydGN1dCBpY29uIiAvPjwvaGVhZD4KPGJvZHkgaWQ9Im1hbnVhbC1wYWdlIj48ZGl2IGlkPSJwYWdlLWhlYWRlciI+CjxwIGNsYXNzPSJtZW51Ij48YSBocmVmPSIuL21vZC8iPk1vZHVsZXM8L2E+IHwgPGEgaHJlZj0iLi9tb2QvcXVpY2tyZWZlcmVuY2UuaHRtbCI+RGlyZWN0aXZlczwvYT4gfCA8YSBocmVmPSJodHRwOi8vd2lraS5hcGFjaGUub3JnL2h0dHBkL0ZBUSI+RkFRPC9hPiB8IDxhIGhyZWY9Ii4vZ2xvc3NhcnkuaHRtbCI+R2xvc3Nhcnk8L2E+IHwgPGEgaHJlZj0iLi9zaXRlbWFwLmh0bWwiPlNpdGVtYXA8L2E+PC9wPgo8cCBjbGFzcz0iYXBhY2hlIj5BcGFjaGUgSFRUUCBTZXJ2ZXIgVmVyc2lvbiAyLjU8L3A+CjxpbWcgYWx0PSIiIHNyYz0iLi9pbWFnZXMvZmVhdGhlci5wbmciIC8+PC9kaXY+CjxkaXYgY2xhc3M9InVwIj48YSBocmVmPSIuLyI+PGltZyB0aXRsZT0iJmx0Oy0iIGFsdD0iJmx0Oy0iIHNyYz0iLi9pbWFnZXMvbGVmdC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGlkPSJwYXRoIj4KPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnLyI+QXBhY2hlPC9hPiAmZ3Q7IDxhIGhyZWY9Imh0dHA6Ly9odHRwZC5hcGFjaGUub3JnLyI+SFRUUCBTZXJ2ZXI8L2E+ICZndDsgPGEgaHJlZj0iaHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvZG9jcy8iPkRvY3VtZW50YXRpb248L2E+ICZndDsgPGEgaHJlZj0iLi8iPlZlcnNpb24gMi41PC9hPjwvZGl2PjxkaXYgaWQ9InBhZ2UtY29udGVudCI+PGRpdiBpZD0icHJlYW1ibGUiPjxoMT5PdmVydmlldyBvZiBuZXcgZmVhdHVyZXMgaW4gQXBhY2hlIEhUVFAgU2VydmVyIDIuMDwvaDE+CjxkaXYgY2xhc3M9InRvcGxhbmciPgo8cD48c3Bhbj5BdmFpbGFibGUgTGFuZ3VhZ2VzOiA8L3NwYW4+PGEgaHJlZj0iLi9kZS9uZXdfZmVhdHVyZXNfMl8wLmh0bWwiIGhyZWZsYW5nPSJkZSIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJEZXV0c2NoIj4mbmJzcDtkZSZuYnNwOzwvYT4gfAo8YSBocmVmPSIuL2VuL25ld19mZWF0dXJlc18yXzAuaHRtbCIgdGl0bGU9IkVuZ2xpc2giPiZuYnNwO2VuJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4vZnIvbmV3X2ZlYXR1cmVzXzJfMC5odG1sIiBocmVmbGFuZz0iZnIiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iRnJhbudhaXMiPiZuYnNwO2ZyJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4vamEvbmV3X2ZlYXR1cmVzXzJfMC5odG1sIiBocmVmbGFuZz0iamEiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iSmFwYW5lc2UiPiZuYnNwO2phJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4va28vbmV3X2ZlYXR1cmVzXzJfMC5odG1sIiBocmVmbGFuZz0ia28iIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iS29yZWFuIj4mbmJzcDtrbyZuYnNwOzwvYT4gfAo8YSBocmVmPSIuL3B0LWJyL25ld19mZWF0dXJlc18yXzAuaHRtbCIgaHJlZmxhbmc9InB0LWJyIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IlBvcnR1Z3XqcyAoQnJhc2lsKSI+Jm5ic3A7cHQtYnImbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi9ydS9uZXdfZmVhdHVyZXNfMl8wLmh0bWwiIGhyZWZsYW5nPSJydSIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJSdXNzaWFuIj4mbmJzcDtydSZuYnNwOzwvYT4gfAo8YSBocmVmPSIuL3RyL25ld19mZWF0dXJlc18yXzAuaHRtbCIgaHJlZmxhbmc9InRyIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IlT8cmvnZSI+Jm5ic3A7dHImbmJzcDs8L2E+PC9wPgo8L2Rpdj4KCiAgPHA+VGhpcyBkb2N1bWVudCBkZXNjcmliZXMgc29tZSBvZiB0aGUgbWFqb3IgY2hhbmdlcyBiZXR3ZWVuIHRoZQogICAgIDEuMyBhbmQgMi4wIHZlcnNpb25zIG9mIHRoZSBBcGFjaGUgSFRUUCBTZXJ2ZXIuPC9wPgo8L2Rpdj4KPGRpdiBpZD0icXVpY2t2aWV3Ij48dWwgaWQ9InRvYyI+PGxpPjxpbWcgYWx0PSIiIHNyYz0iLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNjb3JlIj5Db3JlIEVuaGFuY2VtZW50czwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI21vZHVsZSI+TW9kdWxlIEVuaGFuY2VtZW50czwvYT48L2xpPgo8L3VsPjxoMz5TZWUgYWxzbzwvaDM+PHVsIGNsYXNzPSJzZWVhbHNvIj48bGk+PGEgaHJlZj0idXBncmFkaW5nLmh0bWwiPlVwZ3JhZGluZyB0byAyLjAgZnJvbSAxLjM8L2E+PC9saT48bGk+PGEgaHJlZj0iI2NvbW1lbnRzX3NlY3Rpb24iPkNvbW1lbnRzPC9hPjwvbGk+PC91bD48L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJjb3JlIiBpZD0iY29yZSI+Q29yZSBFbmhhbmNlbWVudHM8L2E+PC9oMj4KICAgIAoKICAgIDxkbD4KICAgICAgPGR0PlVuaXggVGhyZWFkaW5nPC9kdD4KCiAgICAgIDxkZD5PbiBVbml4IHN5c3RlbXMgd2l0aCBQT1NJWCB0aHJlYWRzIHN1cHBvcnQsIEFwYWNoZSBodHRwZCBjYW4KICAgICAgbm93IHJ1biBpbiBhIGh5YnJpZCBtdWx0aXByb2Nlc3MsIG11bHRpdGhyZWFkZWQgbW9kZS4gVGhpcwogICAgICBpbXByb3ZlcyBzY2FsYWJpbGl0eSBmb3IgbWFueSwgYnV0IG5vdCBhbGwgY29uZmlndXJhdGlvbnMuPC9kZD4KCiAgICAgIDxkdD5OZXcgQnVpbGQgU3lzdGVtPC9kdD4KCiAgICAgIDxkZD5UaGUgYnVpbGQgc3lzdGVtIGhhcyBiZWVuIHJld3JpdHRlbiBmcm9tIHNjcmF0Y2ggdG8gYmUKICAgICAgYmFzZWQgb24gPGNvZGU+YXV0b2NvbmY8L2NvZGU+IGFuZCA8Y29kZT5saWJ0b29sPC9jb2RlPi4KICAgICAgVGhpcyBtYWtlcyBBcGFjaGUgaHR0cGQncyBjb25maWd1cmF0aW9uIHN5c3RlbSBtb3JlIHNpbWlsYXIgdG8KICAgICAgdGhhdCBvZiBvdGhlciBwYWNrYWdlcy48L2RkPgoKICAgICAgPGR0Pk11bHRpcHJvdG9jb2wgU3VwcG9ydDwvZHQ+CgogICAgICA8ZGQ+QXBhY2hlIEhUVFAgU2VydmVyIG5vdyBoYXMgc29tZSBvZiB0aGUgaW5mcmFzdHJ1Y3R1cmUgaW4gcGxhY2UgdG8KICAgICAgc3VwcG9ydCBzZXJ2aW5nIG11bHRpcGxlIHByb3RvY29scy4gPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2VjaG8uaHRtbCI+bW9kX2VjaG88L2E+PC9jb2RlPiBoYXMKICAgICAgYmVlbiB3cml0dGVuIGFzIGFuIGV4YW1wbGUuPC9kZD4KCiAgICAgIDxkdD5CZXR0ZXIgc3VwcG9ydCBmb3Igbm9uLVVuaXgKICAgICAgcGxhdGZvcm1zPC9kdD4KCiAgICAgIDxkZD5BcGFjaGUgSFRUUCBTZXJ2ZXIgMi4wIGlzIGZhc3RlciBhbmQgbW9yZSBzdGFibGUgb24gbm9uLVVuaXgKICAgICAgcGxhdGZvcm1zIHN1Y2ggYXMgQmVPUywgT1MvMiwgYW5kIFdpbmRvd3MuIFdpdGggdGhlCiAgICAgIGludHJvZHVjdGlvbiBvZiBwbGF0Zm9ybS1zcGVjaWZpYyA8YSBocmVmPSJtcG0uaHRtbCI+bXVsdGktcHJvY2Vzc2luZyBtb2R1bGVzPC9hPiAoTVBNcykgYW5kIHRoZQogICAgICBBcGFjaGUgUG9ydGFibGUgUnVudGltZSAoQVBSKSwgdGhlc2UgcGxhdGZvcm1zIGFyZSBub3cKICAgICAgaW1wbGVtZW50ZWQgaW4gdGhlaXIgbmF0aXZlIEFQSSwgYXZvaWRpbmcgdGhlIG9mdGVuIGJ1Z2d5IGFuZAogICAgICBwb29ybHkgcGVyZm9ybWluZyBQT1NJWC1lbXVsYXRpb24gbGF5ZXJzLjwvZGQ+CgogICAgICA8ZHQ+TmV3IEFwYWNoZSBodHRwZCBBUEk8L2R0PgoKICAgICAgPGRkPlRoZSBBUEkgZm9yIG1vZHVsZXMgaGFzIGNoYW5nZWQgc2lnbmlmaWNhbnRseSBmb3IgMi4wLgogICAgICBNYW55IG9mIHRoZSBtb2R1bGUtb3JkZXJpbmcvLXByaW9yaXR5IHByb2JsZW1zIGZyb20gMS4zIHNob3VsZAogICAgICBiZSBnb25lLiAyLjAgZG9lcyBtdWNoIG9mIHRoaXMgYXV0b21hdGljYWxseSwgYW5kIG1vZHVsZSBvcmRlcmluZwogICAgICBpcyBub3cgZG9uZSBwZXItaG9vayB0byBhbGxvdyBtb3JlIGZsZXhpYmlsaXR5LiBBbHNvLCBuZXcgY2FsbHMKICAgICAgaGF2ZSBiZWVuIGFkZGVkIHRoYXQgcHJvdmlkZSBhZGRpdGlvbmFsIG1vZHVsZSBjYXBhYmlsaXRpZXMKICAgICAgd2l0aG91dCBwYXRjaGluZyB0aGUgY29yZSBBcGFjaGUgSFRUUCBTZXJ2ZXIuPC9kZD4KCiAgICAgIDxkdD5JUHY2IFN1cHBvcnQ8L2R0PgoKICAgICAgPGRkPk9uIHN5c3RlbXMgd2hlcmUgSVB2NiBpcyBzdXBwb3J0ZWQgYnkgdGhlIHVuZGVybHlpbmcKICAgICAgQXBhY2hlIFBvcnRhYmxlIFJ1bnRpbWUgbGlicmFyeSwgQXBhY2hlIGh0dHBkIGdldHMgSVB2NiBsaXN0ZW5pbmcKICAgICAgc29ja2V0cyBieSBkZWZhdWx0LiBBZGRpdGlvbmFsbHksIHRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9tcG1fY29tbW9uLmh0bWwjbGlzdGVuIj5MaXN0ZW48L2E+PC9jb2RlPiwgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvY29yZS5odG1sI25hbWV2aXJ0dWFsaG9zdCI+TmFtZVZpcnR1YWxIb3N0PC9hPjwvY29kZT4sIGFuZCA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9jb3JlLmh0bWwjdmlydHVhbGhvc3QiPlZpcnR1YWxIb3N0PC9hPjwvY29kZT4gZGlyZWN0aXZlcyBzdXBwb3J0CiAgICAgIElQdjYgbnVtZXJpYyBhZGRyZXNzIHN0cmluZ3MgKGUuZy4sICI8Y29kZT5MaXN0ZW4KICAgICAgWzIwMDE6ZGI4OjoxXTo4MDgwPC9jb2RlPiIpLjwvZGQ+CgogICAgICA8ZHQ+RmlsdGVyaW5nPC9kdD4KCiAgICAgIDxkZD5BcGFjaGUgaHR0cGQgbW9kdWxlcyBtYXkgbm93IGJlIHdyaXR0ZW4gYXMgZmlsdGVycyB3aGljaCBhY3Qgb24KICAgICAgdGhlIHN0cmVhbSBvZiBjb250ZW50IGFzIGl0IGlzIGRlbGl2ZXJlZCB0byBvciBmcm9tIHRoZQogICAgICBzZXJ2ZXIuIFRoaXMgYWxsb3dzLCBmb3IgZXhhbXBsZSwgdGhlIG91dHB1dCBvZiBDR0kgc2NyaXB0cyB0bwogICAgICBiZSBwYXJzZWQgZm9yIFNlcnZlciBTaWRlIEluY2x1ZGUgZGlyZWN0aXZlcyB1c2luZyB0aGUKICAgICAgPGNvZGU+SU5DTFVERVM8L2NvZGU+IGZpbHRlciBpbiA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2RfaW5jbHVkZS5odG1sIj5tb2RfaW5jbHVkZTwvYT48L2NvZGU+LiBUaGUKICAgICAgbW9kdWxlIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4vbW9kL21vZF9leHRfZmlsdGVyLmh0bWwiPm1vZF9leHRfZmlsdGVyPC9hPjwvY29kZT4gYWxsb3dzIGV4dGVybmFsIHByb2dyYW1zIHRvCiAgICAgIGFjdCBhcyBmaWx0ZXJzIGluIG11Y2ggdGhlIHNhbWUgd2F5IHRoYXQgQ0dJIHByb2dyYW1zIGNhbiBhY3QgYXMKICAgICAgaGFuZGxlcnMuPC9kZD4KCiAgICAgIDxkdD5NdWx0aWxhbmd1YWdlIEVycm9yIFJlc3BvbnNlczwvZHQ+CgogICAgICA8ZGQ+RXJyb3IgcmVzcG9uc2UgbWVzc2FnZXMgdG8gdGhlIGJyb3dzZXIgYXJlIG5vdyBwcm92aWRlZCBpbgogICAgICBzZXZlcmFsIGxhbmd1YWdlcywgdXNpbmcgU1NJIGRvY3VtZW50cy4gVGhleSBtYXkgYmUgY3VzdG9taXplZAogICAgICBieSB0aGUgYWRtaW5pc3RyYXRvciB0byBhY2hpZXZlIGEgY29uc2lzdGVudCBsb29rIGFuZCBmZWVsLjwvZGQ+CgogICAgICA8ZHQ+U2ltcGxpZmllZCBjb25maWd1cmF0aW9uPC9kdD4KCiAgICAgIDxkZD5NYW55IGNvbmZ1c2luZyBkaXJlY3RpdmVzIGhhdmUgYmVlbiBzaW1wbGlmaWVkLiBUaGUgb2Z0ZW4KICAgICAgY29uZnVzaW5nIDxjb2RlPlBvcnQ8L2NvZGU+IGFuZCA8Y29kZT5CaW5kQWRkcmVzczwvY29kZT4gZGlyZWN0aXZlcwogICAgICBhcmUgZ29uZTsgb25seSB0aGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvbXBtX2NvbW1vbi5odG1sI2xpc3RlbiI+TGlzdGVuPC9hPjwvY29kZT4KICAgICAgZGlyZWN0aXZlIGlzIHVzZWQgZm9yIElQIGFkZHJlc3MgYmluZGluZzsgdGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL2NvcmUuaHRtbCNzZXJ2ZXJuYW1lIj5TZXJ2ZXJOYW1lPC9hPjwvY29kZT4gZGlyZWN0aXZlIHNwZWNpZmllcyB0aGUKICAgICAgc2VydmVyIG5hbWUgYW5kIHBvcnQgbnVtYmVyIG9ubHkgZm9yIHJlZGlyZWN0aW9uIGFuZCB2aG9zdAogICAgICByZWNvZ25pdGlvbi48L2RkPgoKICAgICAgPGR0Pk5hdGl2ZSBXaW5kb3dzIE5UIFVuaWNvZGUgU3VwcG9ydDwvZHQ+CgogICAgICA8ZGQ+QXBhY2hlIGh0dHBkIDIuMCBvbiBXaW5kb3dzIE5UIG5vdyB1c2VzIHV0Zi04IGZvciBhbGwgZmlsZW5hbWUKICAgICAgZW5jb2RpbmdzLiBUaGVzZSBkaXJlY3RseSB0cmFuc2xhdGUgdG8gdGhlIHVuZGVybHlpbmcgVW5pY29kZQogICAgICBmaWxlIHN5c3RlbSwgcHJvdmlkaW5nIG11bHRpbGFuZ3VhZ2Ugc3VwcG9ydCBmb3IgYWxsIFdpbmRvd3MKICAgICAgTlQtYmFzZWQgaW5zdGFsbGF0aW9ucywgaW5jbHVkaW5nIFdpbmRvd3MgMjAwMCBhbmQgV2luZG93cyBYUC4KICAgICAgPGVtPlRoaXMgc3VwcG9ydCBkb2VzIG5vdCBleHRlbmQgdG8gV2luZG93cyA5NSwgOTggb3IgTUUsIHdoaWNoCiAgICAgIGNvbnRpbnVlIHRvIHVzZSB0aGUgbWFjaGluZSdzIGxvY2FsIGNvZGVwYWdlIGZvciBmaWxlc3lzdGVtCiAgICAgIGFjY2Vzcy48L2VtPjwvZGQ+CgogICAgICA8ZHQ+UmVndWxhciBFeHByZXNzaW9uIExpYnJhcnkgVXBkYXRlZDwvZHQ+CgogICAgICA8ZGQ+QXBhY2hlIGh0dHBkIDIuMCBpbmNsdWRlcyB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5wY3JlLm9yZy8iPlBlcmwKICAgICAgQ29tcGF0aWJsZSBSZWd1bGFyIEV4cHJlc3Npb24gTGlicmFyeTwvYT4gKFBDUkUpLiAgQWxsIHJlZ3VsYXIKICAgICAgZXhwcmVzc2lvbiBldmFsdWF0aW9uIG5vdyB1c2VzIHRoZSBtb3JlIHBvd2VyZnVsIFBlcmwgNQogICAgICBzeW50YXguPC9kZD4KCiAgICA8L2RsPgogIDwvZGl2PjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0ibW9kdWxlIiBpZD0ibW9kdWxlIj5Nb2R1bGUgRW5oYW5jZW1lbnRzPC9hPjwvaDI+CiAgICAKCiAgICA8ZGw+CiAgICAgIDxkdD48Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2Rfc3NsLmh0bWwiPm1vZF9zc2w8L2E+PC9jb2RlPjwvZHQ+CgogICAgICA8ZGQ+TmV3IG1vZHVsZSBpbiBBcGFjaGUgaHR0cGQgMi4wLiBUaGlzIG1vZHVsZSBpcyBhbiBpbnRlcmZhY2UKICAgICAgdG8gdGhlIFNTTC9UTFMgZW5jcnlwdGlvbiBwcm90b2NvbHMgcHJvdmlkZWQgYnkKICAgICAgT3BlblNTTC48L2RkPgoKICAgICAgPGR0Pjxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4vbW9kL21vZF9kYXYuaHRtbCI+bW9kX2RhdjwvYT48L2NvZGU+PC9kdD4KCiAgICAgIDxkZD5OZXcgbW9kdWxlIGluIEFwYWNoZSBodHRwZCAyLjAuIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgdGhlIEhUVFAKICAgICAgRGlzdHJpYnV0ZWQgQXV0aG9yaW5nIGFuZCBWZXJzaW9uaW5nIChEQVYpIHNwZWNpZmljYXRpb24gZm9yCiAgICAgIHBvc3RpbmcgYW5kIG1haW50YWluaW5nIHdlYiBjb250ZW50LjwvZGQ+CgogICAgICA8ZHQ+PGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2RlZmxhdGUuaHRtbCI+bW9kX2RlZmxhdGU8L2E+PC9jb2RlPjwvZHQ+CgogICAgICA8ZGQ+TmV3IG1vZHVsZSBpbiBBcGFjaGUgaHR0cGQgMi4wLiAgVGhpcyBtb2R1bGUgYWxsb3dzIHN1cHBvcnRpbmcKICAgICAgYnJvd3NlcnMgdG8gcmVxdWVzdCB0aGF0IGNvbnRlbnQgYmUgY29tcHJlc3NlZCBiZWZvcmUgZGVsaXZlcnksCiAgICAgIHNhdmluZyBuZXR3b3JrIGJhbmR3aWR0aC48L2RkPgoKICAgICAgPGR0Pjxjb2RlIGNsYXNzPSJtb2R1bGUiPm1vZF9hdXRoX2xkYXA8L2NvZGU+PC9kdD4KCiAgICAgIDxkZD5OZXcgbW9kdWxlIGluIEFwYWNoZSBodHRwZCAyLjAuNDEuICBUaGlzIG1vZHVsZSBhbGxvd3MgYW4gTERBUAogICAgICBkYXRhYmFzZSB0byBiZSB1c2VkIHRvIHN0b3JlIGNyZWRlbnRpYWxzIGZvciBIVFRQIEJhc2ljCiAgICAgIEF1dGhlbnRpY2F0aW9uLiAgQSBjb21wYW5pb24gbW9kdWxlLCA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2RfbGRhcC5odG1sIj5tb2RfbGRhcDwvYT48L2NvZGU+CiAgICAgIHByb3ZpZGVzIGNvbm5lY3Rpb24gcG9vbGluZyBhbmQgcmVzdWx0cyBjYWNoaW5nLjwvZGQ+CgogICAgICA8ZHQ+PGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2F1dGhfZGlnZXN0Lmh0bWwiPm1vZF9hdXRoX2RpZ2VzdDwvYT48L2NvZGU+PC9kdD4KCiAgICAgIDxkZD5JbmNsdWRlcyBhZGRpdGlvbmFsIHN1cHBvcnQgZm9yIHNlc3Npb24gY2FjaGluZyBhY3Jvc3MKICAgICAgcHJvY2Vzc2VzIHVzaW5nIHNoYXJlZCBtZW1vcnkuPC9kZD4KCiAgICAgIDxkdD48Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2RfY2hhcnNldF9saXRlLmh0bWwiPm1vZF9jaGFyc2V0X2xpdGU8L2E+PC9jb2RlPjwvZHQ+CgogICAgICA8ZGQ+TmV3IG1vZHVsZSBpbiBBcGFjaGUgaHR0cGQgMi4wLiBUaGlzIGV4cGVyaW1lbnRhbCBtb2R1bGUgYWxsb3dzCiAgICAgIGZvciBjaGFyYWN0ZXIgc2V0IHRyYW5zbGF0aW9uIG9yIHJlY29kaW5nLjwvZGQ+CgogICAgICA8ZHQ+PGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2ZpbGVfY2FjaGUuaHRtbCI+bW9kX2ZpbGVfY2FjaGU8L2E+PC9jb2RlPjwvZHQ+CgogICAgICA8ZGQ+TmV3IG1vZHVsZSBpbiBBcGFjaGUgaHR0cGQgMi4wLiBUaGlzIG1vZHVsZSBpbmNsdWRlcyB0aGUKICAgICAgZnVuY3Rpb25hbGl0eSBvZiA8Y29kZT5tb2RfbW1hcF9zdGF0aWM8L2NvZGU+IGluIEFwYWNoZSBIVFRQCiAgICAgIFNlcnZlciB2ZXJzaW9uIDEuMywgcGx1cyBhZGRzIGZ1cnRoZXIgY2FjaGluZyBhYmlsaXRpZXMuPC9kZD4KCiAgICAgIDxkdD48Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2RfaGVhZGVycy5odG1sIj5tb2RfaGVhZGVyczwvYT48L2NvZGU+PC9kdD4KCiAgICAgIDxkZD5UaGlzIG1vZHVsZSBpcyBtdWNoIG1vcmUgZmxleGlibGUgaW4gQXBhY2hlIGh0dHBkIDIuMC4gSXQgY2FuIG5vdwogICAgICBtb2RpZnkgcmVxdWVzdCBoZWFkZXJzIHVzZWQgYnkgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX3Byb3h5Lmh0bWwiPm1vZF9wcm94eTwvYT48L2NvZGU+LCBhbmQKICAgICAgaXQgY2FuIGNvbmRpdGlvbmFsbHkgc2V0IHJlc3BvbnNlIGhlYWRlcnMuPC9kZD4KCiAgICAgIDxkdD48Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2RfcHJveHkuaHRtbCI+bW9kX3Byb3h5PC9hPjwvY29kZT48L2R0PgoKICAgICAgPGRkPlRoZSBwcm94eSBtb2R1bGUgaGFzIGJlZW4gY29tcGxldGVseSByZXdyaXR0ZW4gdG8gdGFrZQogICAgICBhZHZhbnRhZ2Ugb2YgdGhlIG5ldyBmaWx0ZXIgaW5mcmFzdHJ1Y3R1cmUgYW5kIHRvIGltcGxlbWVudCBhCiAgICAgIG1vcmUgcmVsaWFibGUsIEhUVFAvMS4xIGNvbXBsaWFudCBwcm94eS4gSW4gYWRkaXRpb24sIG5ldwogICAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9tb2RfcHJveHkuaHRtbCNwcm94eSI+Jmx0O1Byb3h5Jmd0OzwvYT48L2NvZGU+CiAgICAgIGNvbmZpZ3VyYXRpb24gc2VjdGlvbnMgcHJvdmlkZSBtb3JlIHJlYWRhYmxlIChhbmQgaW50ZXJuYWxseQogICAgICBmYXN0ZXIpIGNvbnRyb2wgb2YgcHJveGllZCBzaXRlczsgb3ZlcmxvYWRlZCA8Y29kZT4mbHQ7RGlyZWN0b3J5CiAgICAgICJwcm94eTouLi4iJmd0OzwvY29kZT4gY29uZmlndXJhdGlvbiBhcmUgbm90IHN1cHBvcnRlZC4gVGhlIG1vZHVsZQogICAgICBpcyBub3cgZGl2aWRlZCBpbnRvIHNwZWNpZmljIHByb3RvY29sIHN1cHBvcnQgbW9kdWxlcyBpbmNsdWRpbmcKICAgICAgPGNvZGU+cHJveHlfY29ubmVjdDwvY29kZT4sIDxjb2RlPnByb3h5X2Z0cDwvY29kZT4gYW5kCiAgICAgIDxjb2RlPnByb3h5X2h0dHA8L2NvZGU+LjwvZGQ+CgogICAgICA8ZHQ+PGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX25lZ290aWF0aW9uLmh0bWwiPm1vZF9uZWdvdGlhdGlvbjwvYT48L2NvZGU+PC9kdD4KCiAgICAgIDxkZD5BIG5ldyA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9tb2RfbmVnb3RpYXRpb24uaHRtbCNmb3JjZWxhbmd1YWdlcHJpb3JpdHkiPkZvcmNlTGFuZ3VhZ2VQcmlvcml0eTwvYT48L2NvZGU+IGRpcmVjdGl2ZSBjYW4gYmUgdXNlZCB0byBhc3N1cmUgdGhhdAogICAgICB0aGUgY2xpZW50IHJlY2VpdmVzIGEgc2luZ2xlIGRvY3VtZW50IGluIGFsbCBjYXNlcywgcmF0aGVyIHRoYW4KICAgICAgTk9UIEFDQ0VQVEFCTEUgb3IgTVVMVElQTEUgQ0hPSUNFUyByZXNwb25zZXMuIEluIGFkZGl0aW9uLCB0aGUKICAgICAgbmVnb3RpYXRpb24gYW5kIE11bHRpVmlld3MgYWxnb3JpdGhtcyBoYXZlIGJlZW4gY2xlYW5lZCB1cCB0bwogICAgICBwcm92aWRlIG1vcmUgY29uc2lzdGVudCByZXN1bHRzIGFuZCBhIG5ldyBmb3JtIG9mIHR5cGUgbWFwIHRoYXQKICAgICAgY2FuIGluY2x1ZGUgZG9jdW1lbnQgY29udGVudCBpcyBwcm92aWRlZC48L2RkPgoKICAgICAgPGR0Pjxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4vbW9kL21vZF9hdXRvaW5kZXguaHRtbCI+bW9kX2F1dG9pbmRleDwvYT48L2NvZGU+PC9kdD4KCiAgICAgIDxkZD5BdXRvaW5kZXgnZWQgZGlyZWN0b3J5IGxpc3RpbmdzIGNhbiBub3cgYmUgY29uZmlndXJlZCB0bwogICAgICB1c2UgSFRNTCB0YWJsZXMgZm9yIGNsZWFuZXIgZm9ybWF0dGluZywgYW5kIGFsbG93IGZpbmVyLWdyYWluZWQKICAgICAgY29udHJvbCBvZiBzb3J0aW5nLCBpbmNsdWRpbmcgdmVyc2lvbi1zb3J0aW5nLCBhbmQgd2lsZGNhcmQKICAgICAgZmlsdGVyaW5nIG9mIHRoZSBkaXJlY3RvcnkgbGlzdGluZy48L2RkPgoKICAgICAgPGR0Pjxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4vbW9kL21vZF9pbmNsdWRlLmh0bWwiPm1vZF9pbmNsdWRlPC9hPjwvY29kZT48L2R0PgoKICAgICAgPGRkPk5ldyBkaXJlY3RpdmVzIGFsbG93IHRoZSBkZWZhdWx0IHN0YXJ0IGFuZCBlbmQgdGFncyBmb3IgU1NJIGVsZW1lbnRzCiAgICAgIHRvIGJlIGNoYW5nZWQgYW5kIGFsbG93IGZvciBlcnJvciBhbmQgdGltZSBmb3JtYXQgY29uZmlndXJhdGlvbgogICAgICB0byB0YWtlIHBsYWNlIGluIHRoZSBtYWluIGNvbmZpZ3VyYXRpb24gZmlsZSByYXRoZXIgdGhhbiBpbiB0aGUKICAgICAgU1NJIGRvY3VtZW50LiBSZXN1bHRzIGZyb20gcmVndWxhciBleHByZXNzaW9uIHBhcnNpbmcgYW5kIGdyb3VwaW5nCiAgICAgIChub3cgYmFzZWQgb24gUGVybCdzIHJlZ3VsYXIgZXhwcmVzc2lvbiBzeW50YXgpIGNhbiBiZSByZXRyaWV2ZWQKICAgICAgdXNpbmcgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX2luY2x1ZGUuaHRtbCI+bW9kX2luY2x1ZGU8L2E+PC9jb2RlPidzIHZhcmlhYmxlcyA8Y29kZT4kMDwvY29kZT4KICAgICAgLi4gPGNvZGU+JDk8L2NvZGU+LjwvZGQ+CgogICAgICA8ZHQ+PGNvZGUgY2xhc3M9Im1vZHVsZSI+bW9kX2F1dGhfZGJtPC9jb2RlPjwvZHQ+CgogICAgICA8ZGQ+Tm93IHN1cHBvcnRzIG11bHRpcGxlIHR5cGVzIG9mIERCTS1saWtlIGRhdGFiYXNlcyB1c2luZyB0aGUKICAgICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+QXV0aERCTVR5cGU8L2NvZGU+IGRpcmVjdGl2ZS48L2RkPgoKICAgIDwvZGw+CiAgPC9kaXY+PC9kaXY+CjxkaXYgY2xhc3M9ImJvdHRvbWxhbmciPgo8cD48c3Bhbj5BdmFpbGFibGUgTGFuZ3VhZ2VzOiA8L3NwYW4+PGEgaHJlZj0iLi9kZS9uZXdfZmVhdHVyZXNfMl8wLmh0bWwiIGhyZWZsYW5nPSJkZSIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJEZXV0c2NoIj4mbmJzcDtkZSZuYnNwOzwvYT4gfAo8YSBocmVmPSIuL2VuL25ld19mZWF0dXJlc18yXzAuaHRtbCIgdGl0bGU9IkVuZ2xpc2giPiZuYnNwO2VuJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4vZnIvbmV3X2ZlYXR1cmVzXzJfMC5odG1sIiBocmVmbGFuZz0iZnIiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iRnJhbudhaXMiPiZuYnNwO2ZyJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4vamEvbmV3X2ZlYXR1cmVzXzJfMC5odG1sIiBocmVmbGFuZz0iamEiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iSmFwYW5lc2UiPiZuYnNwO2phJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4va28vbmV3X2ZlYXR1cmVzXzJfMC5odG1sIiBocmVmbGFuZz0ia28iIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iS29yZWFuIj4mbmJzcDtrbyZuYnNwOzwvYT4gfAo8YSBocmVmPSIuL3B0LWJyL25ld19mZWF0dXJlc18yXzAuaHRtbCIgaHJlZmxhbmc9InB0LWJyIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IlBvcnR1Z3XqcyAoQnJhc2lsKSI+Jm5ic3A7cHQtYnImbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi9ydS9uZXdfZmVhdHVyZXNfMl8wLmh0bWwiIGhyZWZsYW5nPSJydSIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJSdXNzaWFuIj4mbmJzcDtydSZuYnNwOzwvYT4gfAo8YSBocmVmPSIuL3RyL25ld19mZWF0dXJlc18yXzAuaHRtbCIgaHJlZmxhbmc9InRyIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IlT8cmvnZSI+Jm5ic3A7dHImbmJzcDs8L2E+PC9wPgo8L2Rpdj48ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBzcmM9Ii4vaW1hZ2VzL3VwLmdpZiIgYWx0PSJ0b3AiIC8+PC9hPjwvZGl2PjxkaXYgY2xhc3M9InNlY3Rpb24iPjxoMj48YSBpZD0iY29tbWVudHNfc2VjdGlvbiIgbmFtZT0iY29tbWVudHNfc2VjdGlvbiI+Q29tbWVudHM8L2E+PC9oMj48ZGl2IGNsYXNzPSJ3YXJuaW5nIj48c3Ryb25nPk5vdGljZTo8L3N0cm9uZz48YnIgLz5UaGlzIGlzIG5vdCBhIFEmYW1wO0Egc2VjdGlvbi4gQ29tbWVudHMgcGxhY2VkIGhlcmUgc2hvdWxkIGJlIHBvaW50ZWQgdG93YXJkcyBzdWdnZXN0aW9ucyBvbiBpbXByb3ZpbmcgdGhlIGRvY3VtZW50YXRpb24gb3Igc2VydmVyLCBhbmQgbWF5IGJlIHJlbW92ZWQgYWdhaW4gYnkgb3VyIG1vZGVyYXRvcnMgaWYgdGhleSBhcmUgZWl0aGVyIGltcGxlbWVudGVkIG9yIGNvbnNpZGVyZWQgaW52YWxpZC9vZmYtdG9waWMuIFF1ZXN0aW9ucyBvbiBob3cgdG8gbWFuYWdlIHRoZSBBcGFjaGUgSFRUUCBTZXJ2ZXIgc2hvdWxkIGJlIGRpcmVjdGVkIGF0IGVpdGhlciBvdXIgSVJDIGNoYW5uZWwsICNodHRwZCwgb24gRnJlZW5vZGUsIG9yIHNlbnQgdG8gb3VyIDxhIGhyZWY9Imh0dHA6Ly9odHRwZC5hcGFjaGUub3JnL2xpc3RzLmh0bWwiPm1haWxpbmcgbGlzdHM8L2E+LjwvZGl2Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLS8vLS0+PCFbQ0RBVEFbLy8+PCEtLQp2YXIgY29tbWVudHNfc2hvcnRuYW1lID0gJ2h0dHBkJzsKdmFyIGNvbW1lbnRzX2lkZW50aWZpZXIgPSAnaHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvZG9jcy90cnVuay9uZXdfZmVhdHVyZXNfMl8wLmh0bWwnOwooZnVuY3Rpb24odywgZCkgewogICAgaWYgKHcubG9jYXRpb24uaG9zdG5hbWUudG9Mb3dlckNhc2UoKSA9PSAiaHR0cGQuYXBhY2hlLm9yZyIpIHsKICAgICAgICBkLndyaXRlKCc8ZGl2IGlkPSJjb21tZW50c190aHJlYWQiPjxcL2Rpdj4nKTsKICAgICAgICB2YXIgcyA9IGQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7CiAgICAgICAgcy50eXBlID0gJ3RleHQvamF2YXNjcmlwdCc7CiAgICAgICAgcy5hc3luYyA9IHRydWU7CiAgICAgICAgcy5zcmMgPSAnaHR0cHM6Ly9jb21tZW50cy5hcGFjaGUub3JnL3Nob3dfY29tbWVudHMubHVhP3NpdGU9JyArIGNvbW1lbnRzX3Nob3J0bmFtZSArICcmcGFnZT0nICsgY29tbWVudHNfaWRlbnRpZmllcjsKICAgICAgICAoZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdIHx8IGQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2JvZHknKVswXSkuYXBwZW5kQ2hpbGQocyk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBkLndyaXRlKCc8ZGl2IGlkPSJjb21tZW50c190aHJlYWQiPkNvbW1lbnRzIGFyZSBkaXNhYmxlZCBmb3IgdGhpcyBwYWdlIGF0IHRoZSBtb21lbnQuPFwvZGl2PicpOwogICAgfQp9KSh3aW5kb3csIGRvY3VtZW50KTsKLy8tLT48IV1dPjwvc2NyaXB0PjwvZGl2PjxkaXYgaWQ9ImZvb3RlciI+CjxwIGNsYXNzPSJhcGFjaGUiPkNvcHlyaWdodCAyMDE2IFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi48YnIgLz5MaWNlbnNlZCB1bmRlciB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5BcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjA8L2E+LjwvcD4KPHAgY2xhc3M9Im1lbnUiPjxhIGhyZWY9Ii4vbW9kLyI+TW9kdWxlczwvYT4gfCA8YSBocmVmPSIuL21vZC9xdWlja3JlZmVyZW5jZS5odG1sIj5EaXJlY3RpdmVzPC9hPiB8IDxhIGhyZWY9Imh0dHA6Ly93aWtpLmFwYWNoZS5vcmcvaHR0cGQvRkFRIj5GQVE8L2E+IHwgPGEgaHJlZj0iLi9nbG9zc2FyeS5odG1sIj5HbG9zc2FyeTwvYT4gfCA8YSBocmVmPSIuL3NpdGVtYXAuaHRtbCI+U2l0ZW1hcDwvYT48L3A+PC9kaXY+PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0vLy0tPjwhW0NEQVRBWy8vPjwhLS0KaWYgKHR5cGVvZihwcmV0dHlQcmludCkgIT09ICd1bmRlZmluZWQnKSB7CiAgICBwcmV0dHlQcmludCgpOwp9Ci8vLS0+PCFdXT48L3NjcmlwdD4KPC9ib2R5PjwvaHRtbD4=