PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Pgo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+CjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj48aGVhZD4KPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KPCEtLQogICAgICAgIFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYCiAgICAgICAgICAgICAgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBmcm9tIHhtbCBzb3VyY2U6IERPIE5PVCBFRElUCiAgICAgICAgWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKICAgICAgLS0+Cjx0aXRsZT5odGNhY2hlY2xlYW4gLSBDbGVhbiB1cCB0aGUgZGlzayBjYWNoZSAtIEFwYWNoZSBIVFRQIFNlcnZlciBWZXJzaW9uIDIuNTwvdGl0bGU+CjxsaW5rIGhyZWY9Ii4uL3N0eWxlL2Nzcy9tYW51YWwuY3NzIiByZWw9InN0eWxlc2hlZXQiIG1lZGlhPSJhbGwiIHR5cGU9InRleHQvY3NzIiB0aXRsZT0iTWFpbiBzdHlsZXNoZWV0IiAvPgo8bGluayBocmVmPSIuLi9zdHlsZS9jc3MvbWFudWFsLWxvb3NlLTEwMHBjLmNzcyIgcmVsPSJhbHRlcm5hdGUgc3R5bGVzaGVldCIgbWVkaWE9ImFsbCIgdHlwZT0idGV4dC9jc3MiIHRpdGxlPSJObyBTaWRlYmFyIC0gRGVmYXVsdCBmb250IHNpemUiIC8+CjxsaW5rIGhyZWY9Ii4uL3N0eWxlL2Nzcy9tYW51YWwtcHJpbnQuY3NzIiByZWw9InN0eWxlc2hlZXQiIG1lZGlhPSJwcmludCIgdHlwZT0idGV4dC9jc3MiIC8+PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iLi4vc3R5bGUvY3NzL3ByZXR0aWZ5LmNzcyIgLz4KPHNjcmlwdCBzcmM9Ii4uL3N0eWxlL3NjcmlwdHMvcHJldHRpZnkubWluLmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgo8L3NjcmlwdD4KCjxsaW5rIGhyZWY9Ii4uL2ltYWdlcy9mYXZpY29uLmljbyIgcmVsPSJzaG9ydGN1dCBpY29uIiAvPjwvaGVhZD4KPGJvZHkgaWQ9Im1hbnVhbC1wYWdlIj48ZGl2IGlkPSJwYWdlLWhlYWRlciI+CjxwIGNsYXNzPSJtZW51Ij48YSBocmVmPSIuLi9tb2QvIj5Nb2R1bGVzPC9hPiB8IDxhIGhyZWY9Ii4uL21vZC9xdWlja3JlZmVyZW5jZS5odG1sIj5EaXJlY3RpdmVzPC9hPiB8IDxhIGhyZWY9Imh0dHA6Ly93aWtpLmFwYWNoZS5vcmcvaHR0cGQvRkFRIj5GQVE8L2E+IHwgPGEgaHJlZj0iLi4vZ2xvc3NhcnkuaHRtbCI+R2xvc3Nhcnk8L2E+IHwgPGEgaHJlZj0iLi4vc2l0ZW1hcC5odG1sIj5TaXRlbWFwPC9hPjwvcD4KPHAgY2xhc3M9ImFwYWNoZSI+QXBhY2hlIEhUVFAgU2VydmVyIFZlcnNpb24gMi41PC9wPgo8aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9mZWF0aGVyLnBuZyIgLz48L2Rpdj4KPGRpdiBjbGFzcz0idXAiPjxhIGhyZWY9Ii4vIj48aW1nIHRpdGxlPSImbHQ7LSIgYWx0PSImbHQ7LSIgc3JjPSIuLi9pbWFnZXMvbGVmdC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGlkPSJwYXRoIj4KPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnLyI+QXBhY2hlPC9hPiAmZ3Q7IDxhIGhyZWY9Imh0dHA6Ly9odHRwZC5hcGFjaGUub3JnLyI+SFRUUCBTZXJ2ZXI8L2E+ICZndDsgPGEgaHJlZj0iaHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvZG9jcy8iPkRvY3VtZW50YXRpb248L2E+ICZndDsgPGEgaHJlZj0iLi4vIj5WZXJzaW9uIDIuNTwvYT4gJmd0OyA8YSBocmVmPSIuLyI+UHJvZ3JhbXM8L2E+PC9kaXY+PGRpdiBpZD0icGFnZS1jb250ZW50Ij48ZGl2IGlkPSJwcmVhbWJsZSI+PGgxPmh0Y2FjaGVjbGVhbiAtIENsZWFuIHVwIHRoZSBkaXNrIGNhY2hlPC9oMT4KPGRpdiBjbGFzcz0idG9wbGFuZyI+CjxwPjxzcGFuPkF2YWlsYWJsZSBMYW5ndWFnZXM6IDwvc3Bhbj48YSBocmVmPSIuLi9lbi9wcm9ncmFtcy9odGNhY2hlY2xlYW4uaHRtbCIgdGl0bGU9IkVuZ2xpc2giPiZuYnNwO2VuJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4uL2tvL3Byb2dyYW1zL2h0Y2FjaGVjbGVhbi5odG1sIiBocmVmbGFuZz0ia28iIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iS29yZWFuIj4mbmJzcDtrbyZuYnNwOzwvYT4gfAo8YSBocmVmPSIuLi90ci9wcm9ncmFtcy9odGNhY2hlY2xlYW4uaHRtbCIgaHJlZmxhbmc9InRyIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IlT8cmvnZSI+Jm5ic3A7dHImbmJzcDs8L2E+PC9wPgo8L2Rpdj4KCiAgICA8cD48Y29kZT5odGNhY2hlY2xlYW48L2NvZGU+IGlzIHVzZWQgdG8ga2VlcCB0aGUgc2l6ZSBvZgogICAgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9jYWNoZV9kaXNrLmh0bWwiPm1vZF9jYWNoZV9kaXNrPC9hPjwvY29kZT4ncyBzdG9yYWdlIHdpdGhpbiBhIGdpdmVuIHNpemUgbGltaXQsIG9yCiAgICBsaW1pdCBvbiBpbm9kZXMgaW4gdXNlLiBUaGlzIHRvb2wgY2FuIHJ1biBlaXRoZXIgbWFudWFsbHkgb3IgaW4gZGFlbW9uIG1vZGUuCiAgICBXaGVuIHJ1bm5pbmcgaW4gZGFlbW9uIG1vZGUsIGl0IHNsZWVwcyBpbiB0aGUgYmFja2dyb3VuZCBhbmQgY2hlY2tzIHRoZSBjYWNoZQogICAgZGlyZWN0b3J5IGF0IHJlZ3VsYXIgaW50ZXJ2YWxzIGZvciBjYWNoZWQgY29udGVudCB0byBiZSByZW1vdmVkLiBZb3UgY2FuIHN0b3AKICAgIHRoZSBkYWVtb24gY2xlYW5seSBieSBzZW5kaW5nIGl0IGEgVEVSTSBvciBJTlQgc2lnbmFsLiBXaGVuIHJ1biBtYW51YWxseSwgYQogICAgb25jZSBvZmYgY2hlY2sgb2YgdGhlIGNhY2hlIGRpcmVjdG9yeSBpcyBtYWRlIGZvciBjYWNoZWQgY29udGVudCB0byBiZQogICAgcmVtb3ZlZC4gSWYgb25lIG9yIG1vcmUgVVJMcyBhcmUgc3BlY2lmaWVkLCBlYWNoIFVSTCB3aWxsIGJlIGRlbGV0ZWQgZnJvbQogICAgdGhlIGNhY2hlLCBpZiBwcmVzZW50LjwvcD4KPC9kaXY+CjxkaXYgaWQ9InF1aWNrdmlldyI+PHVsIGlkPSJ0b2MiPjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI3N5bm9wc2lzIj5TeW5vcHNpczwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNvcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2RlbGV0ZSI+RGVsZXRpbmcgYSBzcGVjaWZpYyBVUkw8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjbGlzdCI+TGlzdGluZyBVUkxzIGluIHRoZSBDYWNoZTwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNleGl0Ij5FeGl0IFN0YXR1czwvYT48L2xpPgo8L3VsPjxoMz5TZWUgYWxzbzwvaDM+PHVsIGNsYXNzPSJzZWVhbHNvIj48bGk+PGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9jYWNoZV9kaXNrLmh0bWwiPm1vZF9jYWNoZV9kaXNrPC9hPjwvY29kZT48L2xpPjxsaT48YSBocmVmPSIjY29tbWVudHNfc2VjdGlvbiI+Q29tbWVudHM8L2E+PC9saT48L3VsPjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJzeW5vcHNpcyIgaWQ9InN5bm9wc2lzIj5TeW5vcHNpczwvYT48L2gyPgogICAgPHA+PGNvZGU+PHN0cm9uZz5odGNhY2hlY2xlYW48L3N0cm9uZz4KICAgIFsgLTxzdHJvbmc+RDwvc3Ryb25nPiBdCiAgICBbIC08c3Ryb25nPnY8L3N0cm9uZz4gXQogICAgWyAtPHN0cm9uZz50PC9zdHJvbmc+IF0KICAgIFsgLTxzdHJvbmc+cjwvc3Ryb25nPiBdCiAgICBbIC08c3Ryb25nPm48L3N0cm9uZz4gXQogICAgWyAtPHN0cm9uZz5SPC9zdHJvbmc+PHZhcj5yb3VuZDwvdmFyPiBdCiAgICAtPHN0cm9uZz5wPC9zdHJvbmc+PHZhcj5wYXRoPC92YXI+CiAgICBbLTxzdHJvbmc+bDwvc3Ryb25nPjx2YXI+bGltaXQ8L3Zhcj58CiAgICAtPHN0cm9uZz5MPC9zdHJvbmc+PHZhcj5saW1pdDwvdmFyPl08L2NvZGU+PC9wPgoKICAgIDxwPjxjb2RlPjxzdHJvbmc+aHRjYWNoZWNsZWFuPC9zdHJvbmc+CiAgICBbIC08c3Ryb25nPm48L3N0cm9uZz4gXQogICAgWyAtPHN0cm9uZz50PC9zdHJvbmc+IF0KICAgIFsgLTxzdHJvbmc+aTwvc3Ryb25nPiBdCiAgICBbIC08c3Ryb25nPlA8L3N0cm9uZz48dmFyPnBpZGZpbGU8L3Zhcj4gXQogICAgWyAtPHN0cm9uZz5SPC9zdHJvbmc+PHZhcj5yb3VuZDwvdmFyPiBdCiAgICAtPHN0cm9uZz5kPC9zdHJvbmc+PHZhcj5pbnRlcnZhbDwvdmFyPgogICAgLTxzdHJvbmc+cDwvc3Ryb25nPjx2YXI+cGF0aDwvdmFyPgogICAgWy08c3Ryb25nPmw8L3N0cm9uZz48dmFyPmxpbWl0PC92YXI+fAogICAgLTxzdHJvbmc+TDwvc3Ryb25nPjx2YXI+bGltaXQ8L3Zhcj5dPC9jb2RlPjwvcD4KCiAgICA8cD48Y29kZT48c3Ryb25nPmh0Y2FjaGVjbGVhbjwvc3Ryb25nPgogICAgWyAtPHN0cm9uZz52PC9zdHJvbmc+IF0KICAgIFsgLTxzdHJvbmc+Ujwvc3Ryb25nPjx2YXI+cm91bmQ8L3Zhcj4gXQogICAgLTxzdHJvbmc+cDwvc3Ryb25nPjx2YXI+cGF0aDwvdmFyPgogICAgWyAtPHN0cm9uZz5hPC9zdHJvbmc+IF0KICAgIFsgLTxzdHJvbmc+QTwvc3Ryb25nPiBdPC9jb2RlPjwvcD4KCiAgICA8cD48Y29kZT48c3Ryb25nPmh0Y2FjaGVjbGVhbjwvc3Ryb25nPgogICAgWyAtPHN0cm9uZz5EPC9zdHJvbmc+IF0KICAgIFsgLTxzdHJvbmc+djwvc3Ryb25nPiBdCiAgICBbIC08c3Ryb25nPnQ8L3N0cm9uZz4gXQogICAgWyAtPHN0cm9uZz5SPC9zdHJvbmc+PHZhcj5yb3VuZDwvdmFyPiBdCiAgICAtPHN0cm9uZz5wPC9zdHJvbmc+PHZhcj5wYXRoPC92YXI+CiAgICA8dmFyPnVybDwvdmFyPjwvY29kZT48L3A+CjwvZGl2PjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9Im9wdGlvbnMiIGlkPSJvcHRpb25zIj5PcHRpb25zPC9hPjwvaDI+CiAgICA8ZGw+CiAgICA8ZHQ+PGNvZGU+LWQ8dmFyPmludGVydmFsPC92YXI+PC9jb2RlPjwvZHQ+CiAgICA8ZGQ+RGFlbW9uaXplIGFuZCByZXBlYXQgY2FjaGUgY2xlYW5pbmcgZXZlcnkgPHZhcj5pbnRlcnZhbDwvdmFyPiBtaW51dGVzLgogICAgVGhpcyBvcHRpb24gaXMgbXV0dWFsbHkgZXhjbHVzaXZlIHdpdGggdGhlIDxjb2RlPi1EPC9jb2RlPiwgPGNvZGU+LXY8L2NvZGU+CiAgICBhbmQgPGNvZGU+LXI8L2NvZGU+IG9wdGlvbnMuIFRvIHNodXRkb3duIHRoZSBkYWVtb24gY2xlYW5seSwganVzdCBzZW5kIGl0CiAgICBhIDxjb2RlPlNJR1RFUk08L2NvZGU+IG9yIDxjb2RlPlNJR0lOVDwvY29kZT4uPC9kZD4KCiAgICA8ZHQ+PGNvZGU+LUQ8L2NvZGU+PC9kdD4KICAgIDxkZD5EbyBhIGRyeSBydW4gYW5kIGRvbid0IGRlbGV0ZSBhbnl0aGluZy4gVGhpcyBvcHRpb24gaXMgbXV0dWFsbHkKICAgICAgICBleGNsdXNpdmUgd2l0aCB0aGUgPGNvZGU+LWQ8L2NvZGU+IG9wdGlvbi4gV2hlbiBkb2luZyBhIGRyeSBydW4gYW5kCiAgICAgICAgZGVsZXRpbmcgZGlyZWN0b3JpZXMgd2l0aCA8Y29kZT4tdDwvY29kZT4sIHRoZSBpbm9kZXMgcmVwb3J0ZWQgZGVsZXRlZAogICAgICAgIGluIHRoZSBzdGF0cyBjYW5ub3QgdGFrZSBpbnRvIGFjY291bnQgdGhlIGRpcmVjdG9yaWVzIGRlbGV0ZWQsIGFuZCB3aWxsCiAgICAgICAgYmUgbWFya2VkIGFzIGFuIGVzdGltYXRlLjwvZGQ+CgogICAgPGR0Pjxjb2RlPi12PC9jb2RlPjwvZHQ+CiAgICA8ZGQ+QmUgdmVyYm9zZSBhbmQgcHJpbnQgc3RhdGlzdGljcy4gVGhpcyBvcHRpb24gaXMgbXV0dWFsbHkgZXhjbHVzaXZlCiAgICB3aXRoIHRoZSA8Y29kZT4tZDwvY29kZT4gb3B0aW9uLjwvZGQ+CgogICAgPGR0Pjxjb2RlPi1yPC9jb2RlPjwvZHQ+CiAgICA8ZGQ+Q2xlYW4gdGhvcm91Z2hseS4gVGhpcyBhc3N1bWVzIHRoYXQgdGhlIEFwYWNoZSB3ZWIgc2VydmVyIGlzCiAgICBub3QgcnVubmluZyAob3RoZXJ3aXNlIHlvdSBtYXkgZ2V0IGdhcmJhZ2UgaW4gdGhlIGNhY2hlKS4gVGhpcyBvcHRpb24KICAgIGlzIG11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIHRoZSA8Y29kZT4tZDwvY29kZT4gb3B0aW9uIGFuZCBpbXBsaWVzCiAgICB0aGUgPGNvZGU+LXQ8L2NvZGU+IG9wdGlvbi48L2RkPgoKICAgIDxkdD48Y29kZT4tbjwvY29kZT48L2R0PgogICAgPGRkPkJlIG5pY2UuIFRoaXMgY2F1c2VzIHNsb3dlciBwcm9jZXNzaW5nIGluIGZhdm91ciBvZiBvdGhlcgogICAgcHJvY2Vzc2VzLiA8Y29kZT5odGNhY2hlY2xlYW48L2NvZGU+IHdpbGwgc2xlZXAgZnJvbSB0aW1lIHRvIHRpbWUKICAgIHNvIHRoYXQgKGEpIHRoZSBkaXNrIElPIHdpbGwgYmUgZGVsYXllZCBhbmQgKGIpIHRoZSBrZXJuZWwgY2FuIHNjaGVkdWxlCiAgICBvdGhlciBwcm9jZXNzZXMgaW4gdGhlIG1lYW50aW1lLjwvZGQ+CgogICAgPGR0Pjxjb2RlPi10PC9jb2RlPjwvZHQ+CiAgICA8ZGQ+RGVsZXRlIGFsbCBlbXB0eSBkaXJlY3Rvcmllcy4gQnkgZGVmYXVsdCBvbmx5IGNhY2hlIGZpbGVzIGFyZQogICAgcmVtb3ZlZCwgaG93ZXZlciB3aXRoIHNvbWUgY29uZmlndXJhdGlvbnMgdGhlIGxhcmdlIG51bWJlciBvZgogICAgZGlyZWN0b3JpZXMgY3JlYXRlZCBtYXkgcmVxdWlyZSBhdHRlbnRpb24uIElmIHlvdXIgY29uZmlndXJhdGlvbgogICAgcmVxdWlyZXMgYSB2ZXJ5IGxhcmdlIG51bWJlciBvZiBkaXJlY3RvcmllcywgdG8gdGhlIHBvaW50IHRoYXQKICAgIGlub2RlIG9yIGZpbGUgYWxsb2NhdGlvbiB0YWJsZSBleGhhdXN0aW9uIG1heSBiZWNvbWUgYW4gaXNzdWUsIHVzZQogICAgb2YgdGhpcyBvcHRpb24gaXMgYWR2aXNlZC48L2RkPgoKICAgIDxkdD48Y29kZT4tcDx2YXI+cGF0aDwvdmFyPjwvY29kZT48L2R0PgogICAgPGRkPlNwZWNpZnkgPHZhcj5wYXRoPC92YXI+IGFzIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGUgZGlzayBjYWNoZS4gVGhpcwogICAgc2hvdWxkIGJlIHRoZSBzYW1lIHZhbHVlIGFzIHNwZWNpZmllZCB3aXRoIHRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvbW9kX2NhY2hlX2Rpc2suaHRtbCNjYWNoZXJvb3QiPkNhY2hlUm9vdDwvYT48L2NvZGU+IGRpcmVjdGl2ZS48L2RkPgoKICAgIDxkdD48Y29kZT4tUDx2YXI+cGlkZmlsZTwvdmFyPjwvY29kZT48L2R0PgogICAgPGRkPlNwZWNpZnkgPHZhcj5waWRmaWxlPC92YXI+IGFzIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvIHdyaXRlIHRoZQogICAgcHJvY2VzcyBJRCB0byB3aGVuIGRhZW1vbml6ZWQuPC9kZD4KCiAgICA8ZHQ+PGNvZGU+LVI8dmFyPnJvdW5kPC92YXI+PC9jb2RlPjwvZHQ+CiAgICA8ZGQ+U3BlY2lmeSA8dmFyPnJvdW5kPC92YXI+IGFzIHRoZSBhbW91bnQgdG8gcm91bmQgc2l6ZXMgdXAgdG8sIHRvCiAgICBjb21wZW5zYXRlIGZvciBkaXNrIGJsb2NrIHNpemVzLiBTZXQgdG8gdGhlIGJsb2NrIHNpemUgb2YgdGhlIGNhY2hlCiAgICBwYXJ0aXRpb24uPC9kZD4KCiAgICA8ZHQ+PGNvZGU+LWw8dmFyPmxpbWl0PC92YXI+PC9jb2RlPjwvZHQ+CiAgICA8ZGQ+U3BlY2lmeSA8dmFyPmxpbWl0PC92YXI+IGFzIHRoZSB0b3RhbCBkaXNrIGNhY2hlIHNpemUgbGltaXQuIFRoZSB2YWx1ZQogICAgaXMgZXhwcmVzc2VkIGluIGJ5dGVzIGJ5IGRlZmF1bHQgKG9yIGF0dGFjaGluZyA8Y29kZT5CPC9jb2RlPiB0byB0aGUKICAgIG51bWJlcikuIEF0dGFjaCA8Y29kZT5LPC9jb2RlPiBmb3IgS2J5dGVzIG9yIDxjb2RlPk08L2NvZGU+IGZvcgogICAgTUJ5dGVzLjwvZGQ+CgogICAgPGR0Pjxjb2RlPi1MPHZhcj5saW1pdDwvdmFyPjwvY29kZT48L2R0PgogICAgPGRkPlNwZWNpZnkgPHZhcj5saW1pdDwvdmFyPiBhcyB0aGUgdG90YWwgZGlzayBjYWNoZSBpbm9kZSBsaW1pdC48L2RkPgoKICAgIDxkdD48Y29kZT4taTwvY29kZT48L2R0PgogICAgPGRkPkJlIGludGVsbGlnZW50IGFuZCBydW4gb25seSB3aGVuIHRoZXJlIHdhcyBhIG1vZGlmaWNhdGlvbiBvZiB0aGUgZGlzawogICAgY2FjaGUuIFRoaXMgb3B0aW9uIGlzIG9ubHkgcG9zc2libGUgdG9nZXRoZXIgd2l0aCB0aGUgPGNvZGU+LWQ8L2NvZGU+CiAgICBvcHRpb24uPC9kZD4KCiAgICA8ZHQ+PGNvZGU+LWE8L2NvZGU+PC9kdD4KICAgIDxkZD5MaXN0IHRoZSBVUkxzIGN1cnJlbnRseSBzdG9yZWQgaW4gdGhlIGNhY2hlLiBWYXJpYW50cyBvZiB0aGUgc2FtZSBVUkwKICAgIHdpbGwgYmUgbGlzdGVkIG9uY2UgZm9yIGVhY2ggdmFyaWFudC48L2RkPgoKICAgIDxkdD48Y29kZT4tQTwvY29kZT48L2R0PgogICAgPGRkPkxpc3QgdGhlIFVSTHMgY3VycmVudGx5IHN0b3JlZCBpbiB0aGUgY2FjaGUsIGFsb25nIHdpdGggdGhlaXIKICAgIGF0dHJpYnV0ZXMgaW4gdGhlIGZvbGxvd2luZyBvcmRlcjogdXJsLCBoZWFkZXIgc2l6ZSwgYm9keSBzaXplLCBzdGF0dXMsCiAgICBlbnRpdHkgdmVyc2lvbiwgZGF0ZSwgZXhwaXJ5LCByZXF1ZXN0IHRpbWUsIHJlc3BvbnNlIHRpbWUsIGJvZHkgcHJlc2VudCwKICAgIGhlYWQgcmVxdWVzdC48L2RkPgogICAgPC9kbD4KCjwvZGl2PjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9ImRlbGV0ZSIgaWQ9ImRlbGV0ZSI+RGVsZXRpbmcgYSBzcGVjaWZpYyBVUkw8L2E+PC9oMj4KICAgIDxwPklmIDxjb2RlPmh0Y2FjaGVjbGVhbjwvY29kZT4gaXMgcGFzc2VkIG9uZSBvciBtb3JlIFVSTHMsIGVhY2ggVVJMIHdpbGwKICAgIGJlIGRlbGV0ZWQgZnJvbSB0aGUgY2FjaGUuIElmIG11bHRpcGxlIHZhcmlhbnRzIG9mIGFuIFVSTCBleGlzdHMsIGFsbAogICAgdmFyaWFudHMgd291bGQgYmUgZGVsZXRlZC48L3A+CgogICAgPHA+V2hlbiBhIHJldmVyc2UgcHJveGllZCBVUkwgaXMgdG8gYmUgZGVsZXRlZCwgdGhlIGVmZmVjdGl2ZSBVUkwgaXMKICAgIGNvbnN0cnVjdGVkIGZyb20gdGhlIDxzdHJvbmc+SG9zdDwvc3Ryb25nPiBoZWFkZXIsIHRoZQogICAgPHN0cm9uZz5wb3J0PC9zdHJvbmc+LCB0aGUgPHN0cm9uZz5wYXRoPC9zdHJvbmc+IGFuZCB0aGUKICAgIDxzdHJvbmc+cXVlcnk8L3N0cm9uZz4uIE5vdGUgdGhlICc/JyBpbiB0aGUgVVJMIG11c3QgYWx3YXlzIGJlIHNwZWNpZmllZAogICAgZXhwbGljaXRseSwgd2hldGhlciBhIHF1ZXJ5IHN0cmluZyBpcyBwcmVzZW50IG9yIG5vdC4gRm9yIGV4YW1wbGUsIGFuCiAgICBhdHRlbXB0IHRvIGRlbGV0ZSB0aGUgcGF0aCA8c3Ryb25nPi88L3N0cm9uZz4gZnJvbSB0aGUgc2VydmVyCiAgICA8c3Ryb25nPmxvY2FsaG9zdDwvc3Ryb25nPiwgdGhlIFVSTCB0byBkZWxldGUgd291bGQgYmUKICAgIDxzdHJvbmc+aHR0cDovL2xvY2FsaG9zdDo4MC8/PC9zdHJvbmc+LjwvcD4KCjwvZGl2PjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9Imxpc3QiIGlkPSJsaXN0Ij5MaXN0aW5nIFVSTHMgaW4gdGhlIENhY2hlPC9hPjwvaDI+CiAgICA8cD5CeSBwYXNzaW5nIHRoZSA8Y29kZT4tYTwvY29kZT4gb3IgPGNvZGU+LUE8L2NvZGU+IG9wdGlvbnMgdG8KICAgIDxjb2RlPmh0Y2FjaGVjbGVhbjwvY29kZT4sIHRoZSBVUkxzIHdpdGhpbiB0aGUgY2FjaGUgd2lsbCBiZSBsaXN0ZWQKICAgIGFzIHRoZXkgYXJlIGZvdW5kLCBvbmUgVVJMIHBlciBsaW5lLiBUaGUgPGNvZGU+LUE8L2NvZGU+IG9wdGlvbgogICAgZHVtcHMgdGhlIGZ1bGwgY2FjaGUgZW50cnkgYWZ0ZXIgdGhlIFVSTCwgd2l0aCBmaWVsZHMgaW4gdGhlCiAgICBmb2xsb3dpbmcgb3JkZXI6PC9wPgoKICAgIDxkbD4KICAgICAgICA8ZHQ+dXJsPC9kdD48ZGQ+VGhlIFVSTCBvZiB0aGUgZW50cnkuPC9kZD4KICAgICAgICA8ZHQ+aGVhZGVyIHNpemU8L2R0PjxkZD5UaGUgc2l6ZSBvZiB0aGUgaGVhZGVyIGluIGJ5dGVzLjwvZGQ+CiAgICAgICAgPGR0PmJvZHkgc2l6ZTwvZHQ+PGRkPlRoZSBzaXplIG9mIHRoZSBib2R5IGluIGJ5dGVzLjwvZGQ+CiAgICAgICAgPGR0PnN0YXR1czwvZHQ+PGRkPlN0YXR1cyBvZiB0aGUgY2FjaGVkIHJlc3BvbnNlLjwvZGQ+CiAgICAgICAgPGR0PmVudGl0eSB2ZXJzaW9uPC9kdD48ZGQ+VGhlIG51bWJlciBvZiB0aW1lcyB0aGlzIGVudHJ5IGhhcyBiZWVuCiAgICAgICAgcmV2YWxpZGF0ZWQgd2l0aG91dCBiZWluZyBkZWxldGVkLjwvZGQ+CiAgICAgICAgPGR0PmRhdGU8L2R0PjxkZD5EYXRlIG9mIHRoZSByZXNwb25zZS48L2RkPgogICAgICAgIDxkdD5leHBpcnk8L2R0PjxkZD5FeHBpcnkgZGF0ZSBvZiB0aGUgcmVzcG9uc2UuPC9kZD4KICAgICAgICA8ZHQ+cmVxdWVzdCB0aW1lPC9kdD48ZGQ+VGltZSBvZiB0aGUgc3RhcnQgb2YgdGhlIHJlcXVlc3QuPC9kZD4KICAgICAgICA8ZHQ+cmVzcG9uc2UgdGltZTwvZHQ+PGRkPlRpbWUgb2YgdGhlIGVuZCBvZiB0aGUgcmVxdWVzdC48L2RkPgogICAgICAgIDxkdD5ib2R5IHByZXNlbnQ8L2R0PjxkZD5JZiAwLCBubyBib2R5IGlzIHN0b3JlZCB3aXRoIHRoaXMgcmVxdWVzdCwKICAgICAgICAxIG90aGVyd2lzZS48L2RkPgogICAgICAgIDxkdD5oZWFkIHJlcXVlc3Q8L2R0PjxkZD5JZiAxLCB0aGUgZW50cnkgY29udGFpbnMgYSBjYWNoZWQgSEVBRAogICAgICAgIHJlcXVlc3Qgd2l0aCBubyBib2R5LCAwIG90aGVyd2lzZS48L2RkPgogICAgPC9kbD4KCjwvZGl2PjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9ImV4aXQiIGlkPSJleGl0Ij5FeGl0IFN0YXR1czwvYT48L2gyPgogICAgPHA+PGNvZGU+aHRjYWNoZWNsZWFuPC9jb2RlPiByZXR1cm5zIGEgemVybyBzdGF0dXMgKCJ0cnVlIikgaWYgYWxsCiAgICBvcGVyYXRpb25zIHdlcmUgc3VjY2Vzc2Z1bCwgPGNvZGU+MTwvY29kZT4gb3RoZXJ3aXNlLiBJZiBhbiBVUkwgaXMKICAgIHNwZWNpZmllZCwgYW5kIHRoZSBVUkwgd2FzIGNhY2hlZCBhbmQgc3VjY2Vzc2Z1bGx5IHJlbW92ZWQsCiAgICA8Y29kZT4wPC9jb2RlPiBpcyByZXR1cm5lZCwgPGNvZGU+MjwvY29kZT4gb3RoZXJ3aXNlLiBJZiBhbiBlcnJvcgogICAgb2NjdXJyZWQgZHVyaW5nIFVSTCByZW1vdmFsLCA8Y29kZT4xPC9jb2RlPiBpcyByZXR1cm5lZC48L3A+CjwvZGl2PjwvZGl2Pgo8ZGl2IGNsYXNzPSJib3R0b21sYW5nIj4KPHA+PHNwYW4+QXZhaWxhYmxlIExhbmd1YWdlczogPC9zcGFuPjxhIGhyZWY9Ii4uL2VuL3Byb2dyYW1zL2h0Y2FjaGVjbGVhbi5odG1sIiB0aXRsZT0iRW5nbGlzaCI+Jm5ic3A7ZW4mbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi4va28vcHJvZ3JhbXMvaHRjYWNoZWNsZWFuLmh0bWwiIGhyZWZsYW5nPSJrbyIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJLb3JlYW4iPiZuYnNwO2tvJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4uL3RyL3Byb2dyYW1zL2h0Y2FjaGVjbGVhbi5odG1sIiBocmVmbGFuZz0idHIiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iVPxya+dlIj4mbmJzcDt0ciZuYnNwOzwvYT48L3A+CjwvZGl2PjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgYWx0PSJ0b3AiIC8+PC9hPjwvZGl2PjxkaXYgY2xhc3M9InNlY3Rpb24iPjxoMj48YSBpZD0iY29tbWVudHNfc2VjdGlvbiIgbmFtZT0iY29tbWVudHNfc2VjdGlvbiI+Q29tbWVudHM8L2E+PC9oMj48ZGl2IGNsYXNzPSJ3YXJuaW5nIj48c3Ryb25nPk5vdGljZTo8L3N0cm9uZz48YnIgLz5UaGlzIGlzIG5vdCBhIFEmYW1wO0Egc2VjdGlvbi4gQ29tbWVudHMgcGxhY2VkIGhlcmUgc2hvdWxkIGJlIHBvaW50ZWQgdG93YXJkcyBzdWdnZXN0aW9ucyBvbiBpbXByb3ZpbmcgdGhlIGRvY3VtZW50YXRpb24gb3Igc2VydmVyLCBhbmQgbWF5IGJlIHJlbW92ZWQgYWdhaW4gYnkgb3VyIG1vZGVyYXRvcnMgaWYgdGhleSBhcmUgZWl0aGVyIGltcGxlbWVudGVkIG9yIGNvbnNpZGVyZWQgaW52YWxpZC9vZmYtdG9waWMuIFF1ZXN0aW9ucyBvbiBob3cgdG8gbWFuYWdlIHRoZSBBcGFjaGUgSFRUUCBTZXJ2ZXIgc2hvdWxkIGJlIGRpcmVjdGVkIGF0IGVpdGhlciBvdXIgSVJDIGNoYW5uZWwsICNodHRwZCwgb24gRnJlZW5vZGUsIG9yIHNlbnQgdG8gb3VyIDxhIGhyZWY9Imh0dHA6Ly9odHRwZC5hcGFjaGUub3JnL2xpc3RzLmh0bWwiPm1haWxpbmcgbGlzdHM8L2E+LjwvZGl2Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLS8vLS0+PCFbQ0RBVEFbLy8+PCEtLQp2YXIgY29tbWVudHNfc2hvcnRuYW1lID0gJ2h0dHBkJzsKdmFyIGNvbW1lbnRzX2lkZW50aWZpZXIgPSAnaHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvZG9jcy90cnVuay9wcm9ncmFtcy9odGNhY2hlY2xlYW4uaHRtbCc7CihmdW5jdGlvbih3LCBkKSB7CiAgICBpZiAody5sb2NhdGlvbi5ob3N0bmFtZS50b0xvd2VyQ2FzZSgpID09ICJodHRwZC5hcGFjaGUub3JnIikgewogICAgICAgIGQud3JpdGUoJzxkaXYgaWQ9ImNvbW1lbnRzX3RocmVhZCI+PFwvZGl2PicpOwogICAgICAgIHZhciBzID0gZC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsKICAgICAgICBzLnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0JzsKICAgICAgICBzLmFzeW5jID0gdHJ1ZTsKICAgICAgICBzLnNyYyA9ICdodHRwczovL2NvbW1lbnRzLmFwYWNoZS5vcmcvc2hvd19jb21tZW50cy5sdWE/c2l0ZT0nICsgY29tbWVudHNfc2hvcnRuYW1lICsgJyZwYWdlPScgKyBjb21tZW50c19pZGVudGlmaWVyOwogICAgICAgIChkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0gfHwgZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYm9keScpWzBdKS5hcHBlbmRDaGlsZChzKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgIGQud3JpdGUoJzxkaXYgaWQ9ImNvbW1lbnRzX3RocmVhZCI+Q29tbWVudHMgYXJlIGRpc2FibGVkIGZvciB0aGlzIHBhZ2UgYXQgdGhlIG1vbWVudC48XC9kaXY+Jyk7CiAgICB9Cn0pKHdpbmRvdywgZG9jdW1lbnQpOwovLy0tPjwhXV0+PC9zY3JpcHQ+PC9kaXY+PGRpdiBpZD0iZm9vdGVyIj4KPHAgY2xhc3M9ImFwYWNoZSI+Q29weXJpZ2h0IDIwMTYgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLjxiciAvPkxpY2Vuc2VkIHVuZGVyIHRoZSA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPkFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMDwvYT4uPC9wPgo8cCBjbGFzcz0ibWVudSI+PGEgaHJlZj0iLi4vbW9kLyI+TW9kdWxlczwvYT4gfCA8YSBocmVmPSIuLi9tb2QvcXVpY2tyZWZlcmVuY2UuaHRtbCI+RGlyZWN0aXZlczwvYT4gfCA8YSBocmVmPSJodHRwOi8vd2lraS5hcGFjaGUub3JnL2h0dHBkL0ZBUSI+RkFRPC9hPiB8IDxhIGhyZWY9Ii4uL2dsb3NzYXJ5Lmh0bWwiPkdsb3NzYXJ5PC9hPiB8IDxhIGhyZWY9Ii4uL3NpdGVtYXAuaHRtbCI+U2l0ZW1hcDwvYT48L3A+PC9kaXY+PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0vLy0tPjwhW0NEQVRBWy8vPjwhLS0KaWYgKHR5cGVvZihwcmV0dHlQcmludCkgIT09ICd1bmRlZmluZWQnKSB7CiAgICBwcmV0dHlQcmludCgpOwp9Ci8vLS0+PCFdXT48L3NjcmlwdD4KPC9ib2R5PjwvaHRtbD4=