PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Pgo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+CjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj48aGVhZD4KPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KPCEtLQogICAgICAgIFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYCiAgICAgICAgICAgICAgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBmcm9tIHhtbCBzb3VyY2U6IERPIE5PVCBFRElUCiAgICAgICAgWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKICAgICAgLS0+Cjx0aXRsZT5BcGFjaGUgaHR0cGQgVHV0b3JpYWw6IEludHJvZHVjdGlvbiB0byBTZXJ2ZXIgU2lkZSBJbmNsdWRlcyAtIEFwYWNoZSBIVFRQIFNlcnZlciBWZXJzaW9uIDIuNTwvdGl0bGU+CjxsaW5rIGhyZWY9Ii4uL3N0eWxlL2Nzcy9tYW51YWwuY3NzIiByZWw9InN0eWxlc2hlZXQiIG1lZGlhPSJhbGwiIHR5cGU9InRleHQvY3NzIiB0aXRsZT0iTWFpbiBzdHlsZXNoZWV0IiAvPgo8bGluayBocmVmPSIuLi9zdHlsZS9jc3MvbWFudWFsLWxvb3NlLTEwMHBjLmNzcyIgcmVsPSJhbHRlcm5hdGUgc3R5bGVzaGVldCIgbWVkaWE9ImFsbCIgdHlwZT0idGV4dC9jc3MiIHRpdGxlPSJObyBTaWRlYmFyIC0gRGVmYXVsdCBmb250IHNpemUiIC8+CjxsaW5rIGhyZWY9Ii4uL3N0eWxlL2Nzcy9tYW51YWwtcHJpbnQuY3NzIiByZWw9InN0eWxlc2hlZXQiIG1lZGlhPSJwcmludCIgdHlwZT0idGV4dC9jc3MiIC8+PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iLi4vc3R5bGUvY3NzL3ByZXR0aWZ5LmNzcyIgLz4KPHNjcmlwdCBzcmM9Ii4uL3N0eWxlL3NjcmlwdHMvcHJldHRpZnkubWluLmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgo8L3NjcmlwdD4KCjxsaW5rIGhyZWY9Ii4uL2ltYWdlcy9mYXZpY29uLmljbyIgcmVsPSJzaG9ydGN1dCBpY29uIiAvPjwvaGVhZD4KPGJvZHkgaWQ9Im1hbnVhbC1wYWdlIj48ZGl2IGlkPSJwYWdlLWhlYWRlciI+CjxwIGNsYXNzPSJtZW51Ij48YSBocmVmPSIuLi9tb2QvIj5Nb2R1bGVzPC9hPiB8IDxhIGhyZWY9Ii4uL21vZC9xdWlja3JlZmVyZW5jZS5odG1sIj5EaXJlY3RpdmVzPC9hPiB8IDxhIGhyZWY9Imh0dHA6Ly93aWtpLmFwYWNoZS5vcmcvaHR0cGQvRkFRIj5GQVE8L2E+IHwgPGEgaHJlZj0iLi4vZ2xvc3NhcnkuaHRtbCI+R2xvc3Nhcnk8L2E+IHwgPGEgaHJlZj0iLi4vc2l0ZW1hcC5odG1sIj5TaXRlbWFwPC9hPjwvcD4KPHAgY2xhc3M9ImFwYWNoZSI+QXBhY2hlIEhUVFAgU2VydmVyIFZlcnNpb24gMi41PC9wPgo8aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9mZWF0aGVyLnBuZyIgLz48L2Rpdj4KPGRpdiBjbGFzcz0idXAiPjxhIGhyZWY9Ii4vIj48aW1nIHRpdGxlPSImbHQ7LSIgYWx0PSImbHQ7LSIgc3JjPSIuLi9pbWFnZXMvbGVmdC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGlkPSJwYXRoIj4KPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnLyI+QXBhY2hlPC9hPiAmZ3Q7IDxhIGhyZWY9Imh0dHA6Ly9odHRwZC5hcGFjaGUub3JnLyI+SFRUUCBTZXJ2ZXI8L2E+ICZndDsgPGEgaHJlZj0iaHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvZG9jcy8iPkRvY3VtZW50YXRpb248L2E+ICZndDsgPGEgaHJlZj0iLi4vIj5WZXJzaW9uIDIuNTwvYT4gJmd0OyA8YSBocmVmPSIuLyI+SG93LVRvIC8gVHV0b3JpYWxzPC9hPjwvZGl2PjxkaXYgaWQ9InBhZ2UtY29udGVudCI+PGRpdiBpZD0icHJlYW1ibGUiPjxoMT5BcGFjaGUgaHR0cGQgVHV0b3JpYWw6IEludHJvZHVjdGlvbiB0byBTZXJ2ZXIgU2lkZSBJbmNsdWRlczwvaDE+CjxkaXYgY2xhc3M9InRvcGxhbmciPgo8cD48c3Bhbj5BdmFpbGFibGUgTGFuZ3VhZ2VzOiA8L3NwYW4+PGEgaHJlZj0iLi4vZW4vaG93dG8vc3NpLmh0bWwiIHRpdGxlPSJFbmdsaXNoIj4mbmJzcDtlbiZuYnNwOzwvYT4gfAo8YSBocmVmPSIuLi9lcy9ob3d0by9zc2kuaHRtbCIgaHJlZmxhbmc9ImVzIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IkVzcGHxb2wiPiZuYnNwO2VzJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4uL2ZyL2hvd3RvL3NzaS5odG1sIiBocmVmbGFuZz0iZnIiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iRnJhbudhaXMiPiZuYnNwO2ZyJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4uL2phL2hvd3RvL3NzaS5odG1sIiBocmVmbGFuZz0iamEiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iSmFwYW5lc2UiPiZuYnNwO2phJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4uL2tvL2hvd3RvL3NzaS5odG1sIiBocmVmbGFuZz0ia28iIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iS29yZWFuIj4mbmJzcDtrbyZuYnNwOzwvYT48L3A+CjwvZGl2PgoKPHA+U2VydmVyLXNpZGUgaW5jbHVkZXMgcHJvdmlkZSBhIG1lYW5zIHRvIGFkZCBkeW5hbWljIGNvbnRlbnQgdG8KZXhpc3RpbmcgSFRNTCBkb2N1bWVudHMuPC9wPgo8L2Rpdj4KPGRpdiBpZD0icXVpY2t2aWV3Ij48dWwgaWQ9InRvYyI+PGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjcmVsYXRlZCI+SW50cm9kdWN0aW9uPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI3doYXQiPldoYXQgYXJlIFNTST88L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjY29uZmlndXJpbmciPkNvbmZpZ3VyaW5nIHlvdXIgc2VydmVyIHRvIHBlcm1pdCBTU0k8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjYmFzaWMiPkJhc2ljIFNTSSBkaXJlY3RpdmVzPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2FkZGl0aW9uYWxleGFtcGxlcyI+QWRkaXRpb25hbCBleGFtcGxlczwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNjb25maWciPldoYXQgZWxzZSBjYW4gSSBjb25maWc/PC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2V4ZWMiPkV4ZWN1dGluZyBjb21tYW5kczwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNhZHZhbmNlZCI+QWR2YW5jZWQgU1NJIHRlY2huaXF1ZXM8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjY29uY2x1c2lvbiI+Q29uY2x1c2lvbjwvYT48L2xpPgo8L3VsPjxoMz5TZWUgYWxzbzwvaDM+PHVsIGNsYXNzPSJzZWVhbHNvIj48bGk+PGEgaHJlZj0iI2NvbW1lbnRzX3NlY3Rpb24iPkNvbW1lbnRzPC9hPjwvbGk+PC91bD48L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0icmVsYXRlZCIgaWQ9InJlbGF0ZWQiPkludHJvZHVjdGlvbjwvYT4gPGEgdGl0bGU9IlBlcm1hbmVudCBsaW5rIiBocmVmPSIjcmVsYXRlZCIgY2xhc3M9InBlcm1hbGluayI+JnBhcmE7PC9hPjwvaDI+CiA8dGFibGUgY2xhc3M9InJlbGF0ZWQiPjx0cj48dGg+UmVsYXRlZCBNb2R1bGVzPC90aD48dGg+UmVsYXRlZCBEaXJlY3RpdmVzPC90aD48L3RyPjx0cj48dGQ+PHVsPjxsaT48Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX2luY2x1ZGUuaHRtbCI+bW9kX2luY2x1ZGU8L2E+PC9jb2RlPjwvbGk+PGxpPjxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfY2dpLmh0bWwiPm1vZF9jZ2k8L2E+PC9jb2RlPjwvbGk+PGxpPjxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfZXhwaXJlcy5odG1sIj5tb2RfZXhwaXJlczwvYT48L2NvZGU+PC9saT48L3VsPjwvdGQ+PHRkPjx1bD48bGk+PGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL2NvcmUuaHRtbCNvcHRpb25zIj5PcHRpb25zPC9hPjwvY29kZT48L2xpPjxsaT48Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvbW9kX2luY2x1ZGUuaHRtbCN4Yml0aGFjayI+WEJpdEhhY2s8L2E+PC9jb2RlPjwvbGk+PGxpPjxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfbWltZS5odG1sI2FkZHR5cGUiPkFkZFR5cGU8L2E+PC9jb2RlPjwvbGk+PGxpPjxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9jb3JlLmh0bWwjc2V0b3V0cHV0ZmlsdGVyIj5TZXRPdXRwdXRGaWx0ZXI8L2E+PC9jb2RlPjwvbGk+PGxpPjxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9tb2Rfc2V0ZW52aWYuaHRtbCNicm93c2VybWF0Y2hub2Nhc2UiPkJyb3dzZXJNYXRjaE5vQ2FzZTwvYT48L2NvZGU+PC9saT48L3VsPjwvdGQ+PC90cj48L3RhYmxlPgoKICAgIDxwPlRoaXMgYXJ0aWNsZSBkZWFscyB3aXRoIFNlcnZlciBTaWRlIEluY2x1ZGVzLCB1c3VhbGx5IGNhbGxlZAogICAgc2ltcGx5IFNTSS4gSW4gdGhpcyBhcnRpY2xlLCBJJ2xsIHRhbGsgYWJvdXQgY29uZmlndXJpbmcgeW91cgogICAgc2VydmVyIHRvIHBlcm1pdCBTU0ksIGFuZCBpbnRyb2R1Y2Ugc29tZSBiYXNpYyBTU0kgdGVjaG5pcXVlcwogICAgZm9yIGFkZGluZyBkeW5hbWljIGNvbnRlbnQgdG8geW91ciBleGlzdGluZyBIVE1MIHBhZ2VzLjwvcD4KCiAgICA8cD5JbiB0aGUgbGF0dGVyIHBhcnQgb2YgdGhlIGFydGljbGUsIHdlJ2xsIHRhbGsgYWJvdXQgc29tZSBvZgogICAgdGhlIHNvbWV3aGF0IG1vcmUgYWR2YW5jZWQgdGhpbmdzIHRoYXQgY2FuIGJlIGRvbmUgd2l0aCBTU0ksCiAgICBzdWNoIGFzIGNvbmRpdGlvbmFsIHN0YXRlbWVudHMgaW4geW91ciBTU0kgZGlyZWN0aXZlcy48L3A+Cgo8L2Rpdj48ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJ3aGF0IiBpZD0id2hhdCI+V2hhdCBhcmUgU1NJPzwvYT4gPGEgdGl0bGU9IlBlcm1hbmVudCBsaW5rIiBocmVmPSIjd2hhdCIgY2xhc3M9InBlcm1hbGluayI+JnBhcmE7PC9hPjwvaDI+CgogICAgPHA+U1NJIChTZXJ2ZXIgU2lkZSBJbmNsdWRlcykgYXJlIGRpcmVjdGl2ZXMgdGhhdCBhcmUgcGxhY2VkIGluCiAgICBIVE1MIHBhZ2VzLCBhbmQgZXZhbHVhdGVkIG9uIHRoZSBzZXJ2ZXIgd2hpbGUgdGhlIHBhZ2VzIGFyZQogICAgYmVpbmcgc2VydmVkLiBUaGV5IGxldCB5b3UgYWRkIGR5bmFtaWNhbGx5IGdlbmVyYXRlZCBjb250ZW50IHRvCiAgICBhbiBleGlzdGluZyBIVE1MIHBhZ2UsIHdpdGhvdXQgaGF2aW5nIHRvIHNlcnZlIHRoZSBlbnRpcmUgcGFnZQogICAgdmlhIGEgQ0dJIHByb2dyYW0sIG9yIG90aGVyIGR5bmFtaWMgdGVjaG5vbG9neS48L3A+CgogICAgPHA+Rm9yIGV4YW1wbGUsIHlvdSBtaWdodCBwbGFjZSBhIGRpcmVjdGl2ZSBpbnRvIGFuIGV4aXN0aW5nIEhUTUwKICAgIHBhZ2UsIHN1Y2ggYXM6PC9wPgoKICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUiPjxwPjxjb2RlPgogICAgJmx0OyEtLSNlY2hvIHZhcj0iREFURV9MT0NBTCIgLS0mZ3Q7CiAgICA8L2NvZGU+PC9wPjwvZGl2PgoKICAgIDxwPkFuZCwgd2hlbiB0aGUgcGFnZSBpcyBzZXJ2ZWQsIHRoaXMgZnJhZ21lbnQgd2lsbCBiZSBldmFsdWF0ZWQgYW5kIHJlcGxhY2VkIHdpdGggaXRzIHZhbHVlOjwvcD4KCiAgICA8ZGl2IGNsYXNzPSJleGFtcGxlIj48cD48Y29kZT4KICAgIFR1ZXNkYXksIDE1LUphbi0yMDEzIDE5OjI4OjU0IEVTVAogICAgPC9jb2RlPjwvcD48L2Rpdj4KCiAgICA8cD5UaGUgZGVjaXNpb24gb2Ygd2hlbiB0byB1c2UgU1NJLCBhbmQgd2hlbiB0byBoYXZlIHlvdXIgcGFnZQogICAgZW50aXJlbHkgZ2VuZXJhdGVkIGJ5IHNvbWUgcHJvZ3JhbSwgaXMgdXN1YWxseSBhIG1hdHRlciBvZiBob3cKICAgIG11Y2ggb2YgdGhlIHBhZ2UgaXMgc3RhdGljLCBhbmQgaG93IG11Y2ggbmVlZHMgdG8gYmUKICAgIHJlY2FsY3VsYXRlZCBldmVyeSB0aW1lIHRoZSBwYWdlIGlzIHNlcnZlZC4gU1NJIGlzIGEgZ3JlYXQgd2F5CiAgICB0byBhZGQgc21hbGwgcGllY2VzIG9mIGluZm9ybWF0aW9uLCBzdWNoIGFzIHRoZSBjdXJyZW50IHRpbWUgLSBzaG93bgogICAgYWJvdmUuICBCdXQgaWYgYSBtYWpvcml0eSBvZiB5b3VyIHBhZ2UgaXMgYmVpbmcgZ2VuZXJhdGVkIGF0IHRoZSB0aW1lCiAgICB0aGF0IGl0IGlzIHNlcnZlZCwgeW91IG5lZWQgdG8gbG9vayBmb3Igc29tZSBvdGhlciBzb2x1dGlvbi48L3A+CjwvZGl2PjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9ImNvbmZpZ3VyaW5nIiBpZD0iY29uZmlndXJpbmciPkNvbmZpZ3VyaW5nIHlvdXIgc2VydmVyIHRvIHBlcm1pdCBTU0k8L2E+IDxhIHRpdGxlPSJQZXJtYW5lbnQgbGluayIgaHJlZj0iI2NvbmZpZ3VyaW5nIiBjbGFzcz0icGVybWFsaW5rIj4mcGFyYTs8L2E+PC9oMj4KCgogICAgPHA+VG8gcGVybWl0IFNTSSBvbiB5b3VyIHNlcnZlciwgeW91IG11c3QgaGF2ZSB0aGUgZm9sbG93aW5nCiAgICBkaXJlY3RpdmUgZWl0aGVyIGluIHlvdXIgPGNvZGU+aHR0cGQuY29uZjwvY29kZT4gZmlsZSwgb3IgaW4gYQogICAgPGNvZGU+Lmh0YWNjZXNzPC9jb2RlPiBmaWxlOjwvcD4KPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1jb25maWciPk9wdGlvbnMgK0luY2x1ZGVzPC9wcmU+CgoKICAgIDxwPlRoaXMgdGVsbHMgQXBhY2hlIHRoYXQgeW91IHdhbnQgdG8gcGVybWl0IGZpbGVzIHRvIGJlIHBhcnNlZAogICAgZm9yIFNTSSBkaXJlY3RpdmVzLiAgTm90ZSB0aGF0IG1vc3QgY29uZmlndXJhdGlvbnMgY29udGFpbgogICAgbXVsdGlwbGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL2NvcmUuaHRtbCNvcHRpb25zIj5PcHRpb25zPC9hPjwvY29kZT4gZGlyZWN0aXZlcwogICAgdGhhdCBjYW4gb3ZlcnJpZGUgZWFjaCBvdGhlci4gIFlvdSB3aWxsIHByb2JhYmx5IG5lZWQgdG8gYXBwbHkgdGhlCiAgICA8Y29kZT5PcHRpb25zPC9jb2RlPiB0byB0aGUgc3BlY2lmaWMgZGlyZWN0b3J5IHdoZXJlIHlvdSB3YW50IFNTSQogICAgZW5hYmxlZCBpbiBvcmRlciB0byBhc3N1cmUgdGhhdCBpdCBnZXRzIGV2YWx1YXRlZCBsYXN0LjwvcD4KCiAgICA8cD5Ob3QganVzdCBhbnkgZmlsZSBpcyBwYXJzZWQgZm9yIFNTSSBkaXJlY3RpdmVzLiBZb3UgaGF2ZSB0bwogICAgdGVsbCBBcGFjaGUgd2hpY2ggZmlsZXMgc2hvdWxkIGJlIHBhcnNlZC4gVGhlcmUgYXJlIHR3byB3YXlzIHRvCiAgICBkbyB0aGlzLiBZb3UgY2FuIHRlbGwgQXBhY2hlIHRvIHBhcnNlIGFueSBmaWxlIHdpdGggYQogICAgcGFydGljdWxhciBmaWxlIGV4dGVuc2lvbiwgc3VjaCBhcyA8Y29kZT4uc2h0bWw8L2NvZGU+LCB3aXRoCiAgICB0aGUgZm9sbG93aW5nIGRpcmVjdGl2ZXM6PC9wPgo8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWNvbmZpZyI+QWRkVHlwZSB0ZXh0L2h0bWwgLnNodG1sCkFkZE91dHB1dEZpbHRlciBJTkNMVURFUyAuc2h0bWw8L3ByZT4KCgogICAgPHA+T25lIGRpc2FkdmFudGFnZSB0byB0aGlzIGFwcHJvYWNoIGlzIHRoYXQgaWYgeW91IHdhbnRlZCB0bwogICAgYWRkIFNTSSBkaXJlY3RpdmVzIHRvIGFuIGV4aXN0aW5nIHBhZ2UsIHlvdSB3b3VsZCBoYXZlIHRvCiAgICBjaGFuZ2UgdGhlIG5hbWUgb2YgdGhhdCBwYWdlLCBhbmQgYWxsIGxpbmtzIHRvIHRoYXQgcGFnZSwgaW4KICAgIG9yZGVyIHRvIGdpdmUgaXQgYSA8Y29kZT4uc2h0bWw8L2NvZGU+IGV4dGVuc2lvbiwgc28gdGhhdCB0aG9zZQogICAgZGlyZWN0aXZlcyB3b3VsZCBiZSBleGVjdXRlZC48L3A+CgogICAgPHA+VGhlIG90aGVyIG1ldGhvZCBpcyB0byB1c2UgdGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfaW5jbHVkZS5odG1sI3hiaXRoYWNrIj5YQml0SGFjazwvYT48L2NvZGU+IGRpcmVjdGl2ZTo8L3A+CjxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctY29uZmlnIj5YQml0SGFjayBvbjwvcHJlPgoKCiAgICA8cD48Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvbW9kX2luY2x1ZGUuaHRtbCN4Yml0aGFjayI+WEJpdEhhY2s8L2E+PC9jb2RlPgogICAgdGVsbHMgQXBhY2hlIHRvIHBhcnNlIGZpbGVzIGZvciBTU0kKICAgIGRpcmVjdGl2ZXMgaWYgdGhleSBoYXZlIHRoZSBleGVjdXRlIGJpdCBzZXQuIFNvLCB0byBhZGQgU1NJCiAgICBkaXJlY3RpdmVzIHRvIGFuIGV4aXN0aW5nIHBhZ2UsIHJhdGhlciB0aGFuIGhhdmluZyB0byBjaGFuZ2UKICAgIHRoZSBmaWxlIG5hbWUsIHlvdSB3b3VsZCBqdXN0IG5lZWQgdG8gbWFrZSB0aGUgZmlsZSBleGVjdXRhYmxlCiAgICB1c2luZyA8Y29kZT5jaG1vZDwvY29kZT4uPC9wPgo8ZGl2IGNsYXNzPSJleGFtcGxlIj48cD48Y29kZT4KICAgICAgICBjaG1vZCAreCBwYWdlbmFtZS5odG1sCjwvY29kZT48L3A+PC9kaXY+CgogICAgPHA+QSBicmllZiBjb21tZW50IGFib3V0IHdoYXQgbm90IHRvIGRvLiBZb3UnbGwgb2NjYXNpb25hbGx5CiAgICBzZWUgcGVvcGxlIHJlY29tbWVuZGluZyB0aGF0IHlvdSBqdXN0IHRlbGwgQXBhY2hlIHRvIHBhcnNlIGFsbAogICAgPGNvZGU+Lmh0bWw8L2NvZGU+IGZpbGVzIGZvciBTU0ksIHNvIHRoYXQgeW91IGRvbid0IGhhdmUgdG8KICAgIG1lc3Mgd2l0aCA8Y29kZT4uc2h0bWw8L2NvZGU+IGZpbGUgbmFtZXMuIFRoZXNlIGZvbGtzIGhhdmUKICAgIHBlcmhhcHMgbm90IGhlYXJkIGFib3V0IDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfaW5jbHVkZS5odG1sI3hiaXRoYWNrIj5YQml0SGFjazwvYT48L2NvZGU+LiBUaGUgdGhpbmcgdG8KICAgIGtlZXAgaW4gbWluZCBpcyB0aGF0LCBieSBkb2luZyB0aGlzLCB5b3UncmUgcmVxdWlyaW5nIHRoYXQKICAgIEFwYWNoZSByZWFkIHRocm91Z2ggZXZlcnkgc2luZ2xlIGZpbGUgdGhhdCBpdCBzZW5kcyBvdXQgdG8KICAgIGNsaWVudHMsIGV2ZW4gaWYgdGhleSBkb24ndCBjb250YWluIGFueSBTU0kgZGlyZWN0aXZlcy4gVGhpcwogICAgY2FuIHNsb3cgdGhpbmdzIGRvd24gcXVpdGUgYSBiaXQsIGFuZCBpcyBub3QgYSBnb29kIGlkZWEuPC9wPgoKICAgIDxwPk9mIGNvdXJzZSwgb24gV2luZG93cywgdGhlcmUgaXMgbm8gc3VjaCB0aGluZyBhcyBhbiBleGVjdXRlCiAgICBiaXQgdG8gc2V0LCBzbyB0aGF0IGxpbWl0cyB5b3VyIG9wdGlvbnMgYSBsaXR0bGUuPC9wPgoKICAgIDxwPkluIGl0cyBkZWZhdWx0IGNvbmZpZ3VyYXRpb24sIEFwYWNoZSBkb2VzIG5vdCBzZW5kIHRoZSBsYXN0CiAgICBtb2RpZmllZCBkYXRlIG9yIGNvbnRlbnQgbGVuZ3RoIEhUVFAgaGVhZGVycyBvbiBTU0kgcGFnZXMsCiAgICBiZWNhdXNlIHRoZXNlIHZhbHVlcyBhcmUgZGlmZmljdWx0IHRvIGNhbGN1bGF0ZSBmb3IgZHluYW1pYwogICAgY29udGVudC4gVGhpcyBjYW4gcHJldmVudCB5b3VyIGRvY3VtZW50IGZyb20gYmVpbmcgY2FjaGVkLCBhbmQKICAgIHJlc3VsdCBpbiBzbG93ZXIgcGVyY2VpdmVkIGNsaWVudCBwZXJmb3JtYW5jZS4gVGhlcmUgYXJlIHR3bwogICAgd2F5cyB0byBzb2x2ZSB0aGlzOjwvcD4KCiAgICA8b2w+CiAgICAgIDxsaT5Vc2UgdGhlIDxjb2RlPlhCaXRIYWNrIEZ1bGw8L2NvZGU+IGNvbmZpZ3VyYXRpb24uIFRoaXMKICAgICAgdGVsbHMgQXBhY2hlIHRvIGRldGVybWluZSB0aGUgbGFzdCBtb2RpZmllZCBkYXRlIGJ5IGxvb2tpbmcKICAgICAgb25seSBhdCB0aGUgZGF0ZSBvZiB0aGUgb3JpZ2luYWxseSByZXF1ZXN0ZWQgZmlsZSwgaWdub3JpbmcKICAgICAgdGhlIG1vZGlmaWNhdGlvbiBkYXRlIG9mIGFueSBpbmNsdWRlZCBmaWxlcy48L2xpPgoKICAgICAgPGxpPlVzZSB0aGUgZGlyZWN0aXZlcyBwcm92aWRlZCBieQogICAgICA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX2V4cGlyZXMuaHRtbCI+bW9kX2V4cGlyZXM8L2E+PC9jb2RlPiB0byBzZXQgYW4gZXhwbGljaXQgZXhwaXJhdGlvbgogICAgICB0aW1lIG9uIHlvdXIgZmlsZXMsIHRoZXJlYnkgbGV0dGluZyBicm93c2VycyBhbmQgcHJveGllcwogICAgICBrbm93IHRoYXQgaXQgaXMgYWNjZXB0YWJsZSB0byBjYWNoZSB0aGVtLjwvbGk+CiAgICA8L29sPgo8L2Rpdj48ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJiYXNpYyIgaWQ9ImJhc2ljIj5CYXNpYyBTU0kgZGlyZWN0aXZlczwvYT4gPGEgdGl0bGU9IlBlcm1hbmVudCBsaW5rIiBocmVmPSIjYmFzaWMiIGNsYXNzPSJwZXJtYWxpbmsiPiZwYXJhOzwvYT48L2gyPgoKICAgIDxwPlNTSSBkaXJlY3RpdmVzIGhhdmUgdGhlIGZvbGxvd2luZyBzeW50YXg6PC9wPgo8ZGl2IGNsYXNzPSJleGFtcGxlIj48cD48Y29kZT4KICAgICAgICAmbHQ7IS0tI2Z1bmN0aW9uIGF0dHJpYnV0ZT12YWx1ZSBhdHRyaWJ1dGU9dmFsdWUgLi4uIC0tJmd0Owo8L2NvZGU+PC9wPjwvZGl2PgoKICAgIDxwPkl0IGlzIGZvcm1hdHRlZCBsaWtlIGFuIEhUTUwgY29tbWVudCwgc28gaWYgeW91IGRvbid0IGhhdmUKICAgIFNTSSBjb3JyZWN0bHkgZW5hYmxlZCwgdGhlIGJyb3dzZXIgd2lsbCBpZ25vcmUgaXQsIGJ1dCBpdCB3aWxsCiAgICBzdGlsbCBiZSB2aXNpYmxlIGluIHRoZSBIVE1MIHNvdXJjZS4gSWYgeW91IGhhdmUgU1NJIGNvcnJlY3RseQogICAgY29uZmlndXJlZCwgdGhlIGRpcmVjdGl2ZSB3aWxsIGJlIHJlcGxhY2VkIHdpdGggaXRzCiAgICByZXN1bHRzLjwvcD4KCiAgICA8cD5UaGUgZnVuY3Rpb24gY2FuIGJlIG9uZSBvZiBhIG51bWJlciBvZiB0aGluZ3MsIGFuZCB3ZSdsbCB0YWxrCiAgICBzb21lIG1vcmUgYWJvdXQgbW9zdCBvZiB0aGVzZSBpbiB0aGUgbmV4dCBpbnN0YWxsbWVudCBvZiB0aGlzCiAgICBzZXJpZXMuIEZvciBub3csIGhlcmUgYXJlIHNvbWUgZXhhbXBsZXMgb2Ygd2hhdCB5b3UgY2FuIGRvIHdpdGgKICAgIFNTSTwvcD4KCjxoMz48YSBuYW1lPSJ0b2RheXNkYXRlIiBpZD0idG9kYXlzZGF0ZSI+VG9kYXkncyBkYXRlPC9hPjwvaDM+Cgo8ZGl2IGNsYXNzPSJleGFtcGxlIj48cD48Y29kZT4KICAgICAgICAmbHQ7IS0tI2VjaG8gdmFyPSJEQVRFX0xPQ0FMIiAtLSZndDsKPC9jb2RlPjwvcD48L2Rpdj4KCiAgICA8cD5UaGUgPGNvZGU+ZWNobzwvY29kZT4gZnVuY3Rpb24ganVzdCBzcGl0cyBvdXQgdGhlIHZhbHVlIG9mIGEKICAgIHZhcmlhYmxlLiBUaGVyZSBhcmUgYSBudW1iZXIgb2Ygc3RhbmRhcmQgdmFyaWFibGVzLCB3aGljaAogICAgaW5jbHVkZSB0aGUgd2hvbGUgc2V0IG9mIGVudmlyb25tZW50IHZhcmlhYmxlcyB0aGF0IGFyZQogICAgYXZhaWxhYmxlIHRvIENHSSBwcm9ncmFtcy4gQWxzbywgeW91IGNhbiBkZWZpbmUgeW91ciBvd24KICAgIHZhcmlhYmxlcyB3aXRoIHRoZSA8Y29kZT5zZXQ8L2NvZGU+IGZ1bmN0aW9uLjwvcD4KCiAgICA8cD5JZiB5b3UgZG9uJ3QgbGlrZSB0aGUgZm9ybWF0IGluIHdoaWNoIHRoZSBkYXRlIGdldHMgcHJpbnRlZCwKICAgIHlvdSBjYW4gdXNlIHRoZSA8Y29kZT5jb25maWc8L2NvZGU+IGZ1bmN0aW9uLCB3aXRoIGEKICAgIDxjb2RlPnRpbWVmbXQ8L2NvZGU+IGF0dHJpYnV0ZSwgdG8gbW9kaWZ5IHRoYXQgZm9ybWF0dGluZy48L3A+Cgo8ZGl2IGNsYXNzPSJleGFtcGxlIj48cD48Y29kZT4KICAgICAgICAmbHQ7IS0tI2NvbmZpZyB0aW1lZm10PSIlQSAlQiAlZCwgJVkiIC0tJmd0OzxiciAvPgogICAgICAgIFRvZGF5IGlzICZsdDshLS0jZWNobyB2YXI9IkRBVEVfTE9DQUwiIC0tJmd0Owo8L2NvZGU+PC9wPjwvZGl2PgoKCjxoMz48YSBuYW1lPSJsYXN0bW9kaWZpZWQiIGlkPSJsYXN0bW9kaWZpZWQiPk1vZGlmaWNhdGlvbiBkYXRlIG9mIHRoZSBmaWxlPC9hPjwvaDM+Cgo8ZGl2IGNsYXNzPSJleGFtcGxlIj48cD48Y29kZT4KICAgICAgICBUaGlzIGRvY3VtZW50IGxhc3QgbW9kaWZpZWQgJmx0OyEtLSNmbGFzdG1vZCBmaWxlPSJpbmRleC5odG1sIiAtLSZndDsKPC9jb2RlPjwvcD48L2Rpdj4KCiAgICA8cD5UaGlzIGZ1bmN0aW9uIGlzIGFsc28gc3ViamVjdCB0byA8Y29kZT50aW1lZm10PC9jb2RlPiBmb3JtYXQKICAgIGNvbmZpZ3VyYXRpb25zLjwvcD4KCgo8aDM+PGEgbmFtZT0iY2dpIiBpZD0iY2dpIj5JbmNsdWRpbmcgdGhlIHJlc3VsdHMgb2YgYSBDR0kgcHJvZ3JhbTwvYT48L2gzPgoKICAgIDxwPlRoaXMgaXMgb25lIG9mIHRoZSBtb3JlIGNvbW1vbiB1c2VzIG9mIFNTSSAtIHRvIG91dHB1dCB0aGUKICAgIHJlc3VsdHMgb2YgYSBDR0kgcHJvZ3JhbSwgc3VjaCBhcyBldmVyeWJvZHkncyBmYXZvcml0ZSwgYSBgYGhpdAogICAgY291bnRlci4nJzwvcD4KCjxkaXYgY2xhc3M9ImV4YW1wbGUiPjxwPjxjb2RlPgogICAgICAgICZsdDshLS0jaW5jbHVkZSB2aXJ0dWFsPSIvY2dpLWJpbi9jb3VudGVyLnBsIiAtLSZndDsKPC9jb2RlPjwvcD48L2Rpdj4KCgo8L2Rpdj48ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJhZGRpdGlvbmFsZXhhbXBsZXMiIGlkPSJhZGRpdGlvbmFsZXhhbXBsZXMiPkFkZGl0aW9uYWwgZXhhbXBsZXM8L2E+IDxhIHRpdGxlPSJQZXJtYW5lbnQgbGluayIgaHJlZj0iI2FkZGl0aW9uYWxleGFtcGxlcyIgY2xhc3M9InBlcm1hbGluayI+JnBhcmE7PC9hPjwvaDI+CgoKICAgIDxwPkZvbGxvd2luZyBhcmUgc29tZSBzcGVjaWZpYyBleGFtcGxlcyBvZiB0aGluZ3MgeW91IGNhbiBkbyBpbgogICAgeW91ciBIVE1MIGRvY3VtZW50cyB3aXRoIFNTSS48L3A+Cgo8aDM+PGEgbmFtZT0iZG9jbW9kaWZpZWQiIGlkPSJkb2Ntb2RpZmllZCI+V2hlbiB3YXMgdGhpcyBkb2N1bWVudAptb2RpZmllZD88L2E+PC9oMz4KCiAgICA8cD5FYXJsaWVyLCB3ZSBtZW50aW9uZWQgdGhhdCB5b3UgY291bGQgdXNlIFNTSSB0byBpbmZvcm0gdGhlCiAgICB1c2VyIHdoZW4gdGhlIGRvY3VtZW50IHdhcyBtb3N0IHJlY2VudGx5IG1vZGlmaWVkLiBIb3dldmVyLCB0aGUKICAgIGFjdHVhbCBtZXRob2QgZm9yIGRvaW5nIHRoYXQgd2FzIGxlZnQgc29tZXdoYXQgaW4gcXVlc3Rpb24uIFRoZQogICAgZm9sbG93aW5nIGNvZGUsIHBsYWNlZCBpbiB5b3VyIEhUTUwgZG9jdW1lbnQsIHdpbGwgcHV0IHN1Y2ggYQogICAgdGltZSBzdGFtcCBvbiB5b3VyIHBhZ2UuIE9mIGNvdXJzZSwgeW91IHdpbGwgaGF2ZSB0byBoYXZlIFNTSQogICAgY29ycmVjdGx5IGVuYWJsZWQsIGFzIGRpc2N1c3NlZCBhYm92ZS48L3A+CjxkaXYgY2xhc3M9ImV4YW1wbGUiPjxwPjxjb2RlPgogICAgICAgICZsdDshLS0jY29uZmlnIHRpbWVmbXQ9IiVBICVCICVkLCAlWSIgLS0mZ3Q7PGJyIC8+CiAgICAgICAgVGhpcyBmaWxlIGxhc3QgbW9kaWZpZWQgJmx0OyEtLSNmbGFzdG1vZCBmaWxlPSJzc2kuc2h0bWwiIC0tJmd0Owo8L2NvZGU+PC9wPjwvZGl2PgoKICAgIDxwPk9mIGNvdXJzZSwgeW91IHdpbGwgbmVlZCB0byByZXBsYWNlIHRoZQogICAgPGNvZGU+c3NpLnNodG1sPC9jb2RlPiB3aXRoIHRoZSBhY3R1YWwgbmFtZSBvZiB0aGUgZmlsZSB0aGF0CiAgICB5b3UncmUgcmVmZXJyaW5nIHRvLiBUaGlzIGNhbiBiZSBpbmNvbnZlbmllbnQgaWYgeW91J3JlIGp1c3QKICAgIGxvb2tpbmcgZm9yIGEgZ2VuZXJpYyBwaWVjZSBvZiBjb2RlIHRoYXQgeW91IGNhbiBwYXN0ZSBpbnRvIGFueQogICAgZmlsZSwgc28geW91IHByb2JhYmx5IHdhbnQgdG8gdXNlIHRoZQogICAgPGNvZGU+TEFTVF9NT0RJRklFRDwvY29kZT4gdmFyaWFibGUgaW5zdGVhZDo8L3A+CjxkaXYgY2xhc3M9ImV4YW1wbGUiPjxwPjxjb2RlPgogICAgICAgICZsdDshLS0jY29uZmlnIHRpbWVmbXQ9IiVEIiAtLSZndDs8YnIgLz4KICAgICAgICBUaGlzIGZpbGUgbGFzdCBtb2RpZmllZCAmbHQ7IS0tI2VjaG8gdmFyPSJMQVNUX01PRElGSUVEIiAtLSZndDsKPC9jb2RlPjwvcD48L2Rpdj4KCiAgICA8cD5Gb3IgbW9yZSBkZXRhaWxzIG9uIHRoZSA8Y29kZT50aW1lZm10PC9jb2RlPiBmb3JtYXQsIGdvIHRvCiAgICB5b3VyIGZhdm9yaXRlIHNlYXJjaCBzaXRlIGFuZCBsb29rIGZvciA8Y29kZT5zdHJmdGltZTwvY29kZT4uIFRoZQogICAgc3ludGF4IGlzIHRoZSBzYW1lLjwvcD4KCgo8aDM+PGEgbmFtZT0ic3RhbmRhcmQtZm9vdGVyIiBpZD0ic3RhbmRhcmQtZm9vdGVyIj5JbmNsdWRpbmcgYSBzdGFuZGFyZCBmb290ZXI8L2E+PC9oMz4KCgogICAgPHA+SWYgeW91IGFyZSBtYW5hZ2luZyBhbnkgc2l0ZSB0aGF0IGlzIG1vcmUgdGhhbiBhIGZldyBwYWdlcywKICAgIHlvdSBtYXkgZmluZCB0aGF0IG1ha2luZyBjaGFuZ2VzIHRvIGFsbCB0aG9zZSBwYWdlcyBjYW4gYmUgYQogICAgcmVhbCBwYWluLCBwYXJ0aWN1bGFybHkgaWYgeW91IGFyZSB0cnlpbmcgdG8gbWFpbnRhaW4gc29tZSBraW5kCiAgICBvZiBzdGFuZGFyZCBsb29rIGFjcm9zcyBhbGwgdGhvc2UgcGFnZXMuPC9wPgoKICAgIDxwPlVzaW5nIGFuIGluY2x1ZGUgZmlsZSBmb3IgYSBoZWFkZXIgYW5kL29yIGEgZm9vdGVyIGNhbgogICAgcmVkdWNlIHRoZSBidXJkZW4gb2YgdGhlc2UgdXBkYXRlcy4gWW91IGp1c3QgaGF2ZSB0byBtYWtlIG9uZQogICAgZm9vdGVyIGZpbGUsIGFuZCB0aGVuIGluY2x1ZGUgaXQgaW50byBlYWNoIHBhZ2Ugd2l0aCB0aGUKICAgIDxjb2RlPmluY2x1ZGU8L2NvZGU+IFNTSSBjb21tYW5kLiBUaGUgPGNvZGU+aW5jbHVkZTwvY29kZT4KICAgIGZ1bmN0aW9uIGNhbiBkZXRlcm1pbmUgd2hhdCBmaWxlIHRvIGluY2x1ZGUgd2l0aCBlaXRoZXIgdGhlCiAgICA8Y29kZT5maWxlPC9jb2RlPiBhdHRyaWJ1dGUsIG9yIHRoZSA8Y29kZT52aXJ0dWFsPC9jb2RlPgogICAgYXR0cmlidXRlLiBUaGUgPGNvZGU+ZmlsZTwvY29kZT4gYXR0cmlidXRlIGlzIGEgZmlsZSBwYXRoLAogICAgPGVtPnJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeTwvZW0+LiBUaGF0IG1lYW5zIHRoYXQgaXQKICAgIGNhbm5vdCBiZSBhbiBhYnNvbHV0ZSBmaWxlIHBhdGggKHN0YXJ0aW5nIHdpdGggLyksIG5vciBjYW4gaXQKICAgIGNvbnRhaW4gLi4vIGFzIHBhcnQgb2YgdGhhdCBwYXRoLiBUaGUgPGNvZGU+dmlydHVhbDwvY29kZT4KICAgIGF0dHJpYnV0ZSBpcyBwcm9iYWJseSBtb3JlIHVzZWZ1bCwgYW5kIHNob3VsZCBzcGVjaWZ5IGEgVVJMCiAgICByZWxhdGl2ZSB0byB0aGUgZG9jdW1lbnQgYmVpbmcgc2VydmVkLiBJdCBjYW4gc3RhcnQgd2l0aCBhIC8sCiAgICBidXQgbXVzdCBiZSBvbiB0aGUgc2FtZSBzZXJ2ZXIgYXMgdGhlIGZpbGUgYmVpbmcgc2VydmVkLjwvcD4KPGRpdiBjbGFzcz0iZXhhbXBsZSI+PHA+PGNvZGU+CiAgICAgICAgJmx0OyEtLSNpbmNsdWRlIHZpcnR1YWw9Ii9mb290ZXIuaHRtbCIgLS0mZ3Q7CjwvY29kZT48L3A+PC9kaXY+CgogICAgPHA+SSdsbCBmcmVxdWVudGx5IGNvbWJpbmUgdGhlIGxhc3QgdHdvIHRoaW5ncywgcHV0dGluZyBhCiAgICA8Y29kZT5MQVNUX01PRElGSUVEPC9jb2RlPiBkaXJlY3RpdmUgaW5zaWRlIGEgZm9vdGVyIGZpbGUgdG8gYmUKICAgIGluY2x1ZGVkLiBTU0kgZGlyZWN0aXZlcyBjYW4gYmUgY29udGFpbmVkIGluIHRoZSBpbmNsdWRlZCBmaWxlLAogICAgYW5kIGluY2x1ZGVzIGNhbiBiZSBuZXN0ZWQgLSB0aGF0IGlzLCB0aGUgaW5jbHVkZWQgZmlsZSBjYW4KICAgIGluY2x1ZGUgYW5vdGhlciBmaWxlLCBhbmQgc28gb24uPC9wPgoKCjwvZGl2PjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9ImNvbmZpZyIgaWQ9ImNvbmZpZyI+V2hhdCBlbHNlIGNhbiBJIGNvbmZpZz88L2E+IDxhIHRpdGxlPSJQZXJtYW5lbnQgbGluayIgaHJlZj0iI2NvbmZpZyIgY2xhc3M9InBlcm1hbGluayI+JnBhcmE7PC9hPjwvaDI+CgoKICAgIDxwPkluIGFkZGl0aW9uIHRvIGJlaW5nIGFibGUgdG8gPGNvZGU+Y29uZmlnPC9jb2RlPiB0aGUgdGltZQogICAgZm9ybWF0LCB5b3UgY2FuIGFsc28gPGNvZGU+Y29uZmlnPC9jb2RlPiB0d28gb3RoZXIgdGhpbmdzLjwvcD4KCiAgICA8cD5Vc3VhbGx5LCB3aGVuIHNvbWV0aGluZyBnb2VzIHdyb25nIHdpdGggeW91ciBTU0kgZGlyZWN0aXZlLAogICAgeW91IGdldCB0aGUgbWVzc2FnZTwvcD4KPGRpdiBjbGFzcz0iZXhhbXBsZSI+PHA+PGNvZGU+CiAgICAgICAgW2FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHByb2Nlc3NpbmcgdGhpcyBkaXJlY3RpdmVdCjwvY29kZT48L3A+PC9kaXY+CgogICAgPHA+SWYgeW91IHdhbnQgdG8gY2hhbmdlIHRoYXQgbWVzc2FnZSB0byBzb21ldGhpbmcgZWxzZSwgeW91CiAgICBjYW4gZG8gc28gd2l0aCB0aGUgPGNvZGU+ZXJybXNnPC9jb2RlPiBhdHRyaWJ1dGUgdG8gdGhlCiAgICA8Y29kZT5jb25maWc8L2NvZGU+IGZ1bmN0aW9uOjwvcD4KPGRpdiBjbGFzcz0iZXhhbXBsZSI+PHA+PGNvZGU+CiAgICAgICAgJmx0OyEtLSNjb25maWcgZXJybXNnPSJbSXQgYXBwZWFycyB0aGF0IHlvdSBkb24ndCBrbm93IGhvdyB0byB1c2UgU1NJXSIgLS0mZ3Q7CjwvY29kZT48L3A+PC9kaXY+CgogICAgPHA+SG9wZWZ1bGx5LCBlbmQgdXNlcnMgd2lsbCBuZXZlciBzZWUgdGhpcyBtZXNzYWdlLCBiZWNhdXNlCiAgICB5b3Ugd2lsbCBoYXZlIHJlc29sdmVkIGFsbCB0aGUgcHJvYmxlbXMgd2l0aCB5b3VyIFNTSQogICAgZGlyZWN0aXZlcyBiZWZvcmUgeW91ciBzaXRlIGdvZXMgbGl2ZS4gKFJpZ2h0Pyk8L3A+CgogICAgPHA+QW5kIHlvdSBjYW4gPGNvZGU+Y29uZmlnPC9jb2RlPiB0aGUgZm9ybWF0IGluIHdoaWNoIGZpbGUKICAgIHNpemVzIGFyZSByZXR1cm5lZCB3aXRoIHRoZSA8Y29kZT5zaXplZm10PC9jb2RlPiBhdHRyaWJ1dGUuIFlvdQogICAgY2FuIHNwZWNpZnkgPGNvZGU+Ynl0ZXM8L2NvZGU+IGZvciBhIGZ1bGwgY291bnQgaW4gYnl0ZXMsIG9yCiAgICA8Y29kZT5hYmJyZXY8L2NvZGU+IGZvciBhbiBhYmJyZXZpYXRlZCBudW1iZXIgaW4gS2Igb3IgTWIsIGFzCiAgICBhcHByb3ByaWF0ZS48L3A+CiAgICA8L2Rpdj48ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJleGVjIiBpZD0iZXhlYyI+RXhlY3V0aW5nIGNvbW1hbmRzPC9hPiA8YSB0aXRsZT0iUGVybWFuZW50IGxpbmsiIGhyZWY9IiNleGVjIiBjbGFzcz0icGVybWFsaW5rIj4mcGFyYTs8L2E+PC9oMj4KICAgIAoKICAgIDxwPkhlcmUncyBzb21ldGhpbmcgZWxzZSB0aGF0IHlvdSBjYW4gZG8gd2l0aCB0aGUgPGNvZGU+ZXhlYzwvY29kZT4KICAgIGZ1bmN0aW9uLiBZb3UgY2FuIGFjdHVhbGx5IGhhdmUgU1NJIGV4ZWN1dGUgYSBjb21tYW5kIHVzaW5nIHRoZQogICAgc2hlbGwgKDxjb2RlPi9iaW4vc2g8L2NvZGU+LCB0byBiZSBwcmVjaXNlIC0gb3IgdGhlIERPUyBzaGVsbCwKICAgIGlmIHlvdSdyZSBvbiBXaW4zMikuIFRoZSBmb2xsb3dpbmcsIGZvciBleGFtcGxlLCB3aWxsIGdpdmUgeW91CiAgICBhIGRpcmVjdG9yeSBsaXN0aW5nLjwvcD4KPGRpdiBjbGFzcz0iZXhhbXBsZSI+PHA+PGNvZGU+CiAgICAgICAgJmx0O3ByZSZndDs8YnIgLz4KICAgICAgICAmbHQ7IS0tI2V4ZWMgY21kPSJscyIgLS0mZ3Q7PGJyIC8+CiAgICAgICAgJmx0Oy9wcmUmZ3Q7CjwvY29kZT48L3A+PC9kaXY+CgogICAgPHA+b3IsIG9uIFdpbmRvd3M8L3A+CjxkaXYgY2xhc3M9ImV4YW1wbGUiPjxwPjxjb2RlPgogICAgICAgICZsdDtwcmUmZ3Q7PGJyIC8+CiAgICAgICAgJmx0OyEtLSNleGVjIGNtZD0iZGlyIiAtLSZndDs8YnIgLz4KICAgICAgICAmbHQ7L3ByZSZndDsKPC9jb2RlPjwvcD48L2Rpdj4KCiAgICA8cD5Zb3UgbWlnaHQgbm90aWNlIHNvbWUgc3RyYW5nZSBmb3JtYXR0aW5nIHdpdGggdGhpcyBkaXJlY3RpdmUKICAgIG9uIFdpbmRvd3MsIGJlY2F1c2UgdGhlIG91dHB1dCBmcm9tIDxjb2RlPmRpcjwvY29kZT4gY29udGFpbnMKICAgIHRoZSBzdHJpbmcgYGAmbHQ7PGNvZGU+ZGlyPC9jb2RlPiZndDsnJyBpbiBpdCwgd2hpY2ggY29uZnVzZXMKICAgIGJyb3dzZXJzLjwvcD4KCiAgICA8cD5Ob3RlIHRoYXQgdGhpcyBmZWF0dXJlIGlzIGV4Y2VlZGluZ2x5IGRhbmdlcm91cywgYXMgaXQgd2lsbAogICAgZXhlY3V0ZSB3aGF0ZXZlciBjb2RlIGhhcHBlbnMgdG8gYmUgZW1iZWRkZWQgaW4gdGhlCiAgICA8Y29kZT5leGVjPC9jb2RlPiB0YWcuIElmIHlvdSBoYXZlIGFueSBzaXR1YXRpb24gd2hlcmUgdXNlcnMKICAgIGNhbiBlZGl0IGNvbnRlbnQgb24geW91ciB3ZWIgcGFnZXMsIHN1Y2ggYXMgd2l0aCBhCiAgICBgYGd1ZXN0Ym9vaycnLCBmb3IgZXhhbXBsZSwgbWFrZSBzdXJlIHRoYXQgeW91IGhhdmUgdGhpcwogICAgZmVhdHVyZSBkaXNhYmxlZC4gWW91IGNhbiBhbGxvdyBTU0ksIGJ1dCBub3QgdGhlCiAgICA8Y29kZT5leGVjPC9jb2RlPiBmZWF0dXJlLCB3aXRoIHRoZSA8Y29kZT5JbmNsdWRlc05PRVhFQzwvY29kZT4KICAgIGFyZ3VtZW50IHRvIHRoZSA8Y29kZT5PcHRpb25zPC9jb2RlPiBkaXJlY3RpdmUuPC9wPgogICAgPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0iYWR2YW5jZWQiIGlkPSJhZHZhbmNlZCI+QWR2YW5jZWQgU1NJIHRlY2huaXF1ZXM8L2E+IDxhIHRpdGxlPSJQZXJtYW5lbnQgbGluayIgaHJlZj0iI2FkdmFuY2VkIiBjbGFzcz0icGVybWFsaW5rIj4mcGFyYTs8L2E+PC9oMj4KCgogICAgPHA+SW4gYWRkaXRpb24gdG8gc3BpdHRpbmcgb3V0IGNvbnRlbnQsIEFwYWNoZSBTU0kgZ2l2ZXMgeW91CiAgICB0aGUgb3B0aW9uIG9mIHNldHRpbmcgdmFyaWFibGVzLCBhbmQgdXNpbmcgdGhvc2UgdmFyaWFibGVzIGluCiAgICBjb21wYXJpc29ucyBhbmQgY29uZGl0aW9uYWxzLjwvcD4KCjxoMz48YSBuYW1lPSJ2YXJpYWJsZXMiIGlkPSJ2YXJpYWJsZXMiPlNldHRpbmcgdmFyaWFibGVzPC9hPjwvaDM+CgogICAgPHA+VXNpbmcgdGhlIDxjb2RlPnNldDwvY29kZT4gZGlyZWN0aXZlLCB5b3UgY2FuIHNldCB2YXJpYWJsZXMKICAgIGZvciBsYXRlciB1c2UuIFdlJ2xsIG5lZWQgdGhpcyBsYXRlciBpbiB0aGUgZGlzY3Vzc2lvbiwgc28KICAgIHdlJ2xsIHRhbGsgYWJvdXQgaXQgaGVyZS4gVGhlIHN5bnRheCBvZiB0aGlzIGlzIGFzIGZvbGxvd3M6PC9wPgo8ZGl2IGNsYXNzPSJleGFtcGxlIj48cD48Y29kZT4KICAgICAgICAmbHQ7IS0tI3NldCB2YXI9Im5hbWUiIHZhbHVlPSJSaWNoIiAtLSZndDsKPC9jb2RlPjwvcD48L2Rpdj4KCiAgICA8cD5JbiBhZGRpdGlvbiB0byBtZXJlbHkgc2V0dGluZyB2YWx1ZXMgbGl0ZXJhbGx5IGxpa2UgdGhhdCwgeW91CiAgICBjYW4gdXNlIGFueSBvdGhlciB2YXJpYWJsZSwgaW5jbHVkaW5nIDxhIGhyZWY9Ii4uL2Vudi5odG1sIj5lbnZpcm9ubWVudCB2YXJpYWJsZXM8L2E+IG9yIHRoZSB2YXJpYWJsZXMKICAgIGRpc2N1c3NlZCBhYm92ZSAobGlrZSA8Y29kZT5MQVNUX01PRElGSUVEPC9jb2RlPiwgZm9yIGV4YW1wbGUpIHRvCiAgICBnaXZlIHZhbHVlcyB0byB5b3VyIHZhcmlhYmxlcy4gWW91IHdpbGwgc3BlY2lmeSB0aGF0IHNvbWV0aGluZyBpcwogICAgYSB2YXJpYWJsZSwgcmF0aGVyIHRoYW4gYSBsaXRlcmFsIHN0cmluZywgYnkgdXNpbmcgdGhlIGRvbGxhciBzaWduCiAgICAoJCkgYmVmb3JlIHRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZS48L3A+CgogICAgPGRpdiBjbGFzcz0iZXhhbXBsZSI+PHA+PGNvZGU+ICZsdDshLS0jc2V0IHZhcj0ibW9kaWZpZWQiIHZhbHVlPSIkTEFTVF9NT0RJRklFRCIgLS0mZ3Q7CiAgICA8L2NvZGU+PC9wPjwvZGl2PgoKICAgIDxwPlRvIHB1dCBhIGxpdGVyYWwgZG9sbGFyIHNpZ24gaW50byB0aGUgdmFsdWUgb2YgeW91cgogICAgdmFyaWFibGUsIHlvdSBuZWVkIHRvIGVzY2FwZSB0aGUgZG9sbGFyIHNpZ24gd2l0aCBhCiAgICBiYWNrc2xhc2guPC9wPgo8ZGl2IGNsYXNzPSJleGFtcGxlIj48cD48Y29kZT4KICAgICAgICAmbHQ7IS0tI3NldCB2YXI9ImNvc3QiIHZhbHVlPSJcJDEwMCIgLS0mZ3Q7CjwvY29kZT48L3A+PC9kaXY+CgogICAgPHA+RmluYWxseSwgaWYgeW91IHdhbnQgdG8gcHV0IGEgdmFyaWFibGUgaW4gdGhlIG1pZHN0IG9mIGEKICAgIGxvbmdlciBzdHJpbmcsIGFuZCB0aGVyZSdzIGEgY2hhbmNlIHRoYXQgdGhlIG5hbWUgb2YgdGhlCiAgICB2YXJpYWJsZSB3aWxsIHJ1biB1cCBhZ2FpbnN0IHNvbWUgb3RoZXIgY2hhcmFjdGVycywgYW5kIHRodXMgYmUKICAgIGNvbmZ1c2VkIHdpdGggdGhvc2UgY2hhcmFjdGVycywgeW91IGNhbiBwbGFjZSB0aGUgbmFtZSBvZiB0aGUKICAgIHZhcmlhYmxlIGluIGJyYWNlcywgdG8gcmVtb3ZlIHRoaXMgY29uZnVzaW9uLiAoSXQncyBoYXJkIHRvCiAgICBjb21lIHVwIHdpdGggYSByZWFsbHkgZ29vZCBleGFtcGxlIG9mIHRoaXMsIGJ1dCBob3BlZnVsbHkKICAgIHlvdSdsbCBnZXQgdGhlIHBvaW50Lik8L3A+CjxkaXYgY2xhc3M9ImV4YW1wbGUiPjxwPjxjb2RlPgogICAgICAgICZsdDshLS0jc2V0IHZhcj0iZGF0ZSIgdmFsdWU9IiR7REFURV9MT0NBTH1fJHtEQVRFX0dNVH0iIC0tJmd0Owo8L2NvZGU+PC9wPjwvZGl2PgoKCjxoMz48YSBuYW1lPSJjb25kaXRpb25hbCIgaWQ9ImNvbmRpdGlvbmFsIj5Db25kaXRpb25hbCBleHByZXNzaW9uczwvYT48L2gzPgoKCiAgICA8cD5Ob3cgdGhhdCB3ZSBoYXZlIHZhcmlhYmxlcywgYW5kIGFyZSBhYmxlIHRvIHNldCBhbmQgY29tcGFyZQogICAgdGhlaXIgdmFsdWVzLCB3ZSBjYW4gdXNlIHRoZW0gdG8gZXhwcmVzcyBjb25kaXRpb25hbHMuIFRoaXMKICAgIGxldHMgU1NJIGJlIGEgdGlueSBwcm9ncmFtbWluZyBsYW5ndWFnZSBvZiBzb3J0cy4KICAgIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfaW5jbHVkZS5odG1sIj5tb2RfaW5jbHVkZTwvYT48L2NvZGU+IHByb3ZpZGVzIGFuIDxjb2RlPmlmPC9jb2RlPiwKICAgIDxjb2RlPmVsaWY8L2NvZGU+LCA8Y29kZT5lbHNlPC9jb2RlPiwgPGNvZGU+ZW5kaWY8L2NvZGU+CiAgICBzdHJ1Y3R1cmUgZm9yIGJ1aWxkaW5nIGNvbmRpdGlvbmFsIHN0YXRlbWVudHMuIFRoaXMgYWxsb3dzIHlvdQogICAgdG8gZWZmZWN0aXZlbHkgZ2VuZXJhdGUgbXVsdGlwbGUgbG9naWNhbCBwYWdlcyBvdXQgb2Ygb25lCiAgICBhY3R1YWwgcGFnZS48L3A+CgogICAgPHA+VGhlIHN0cnVjdHVyZSBvZiB0aGlzIGNvbmRpdGlvbmFsIGNvbnN0cnVjdCBpczo8L3A+CjxkaXYgY2xhc3M9ImV4YW1wbGUiPjxwPjxjb2RlPgogICAgJmx0OyEtLSNpZiBleHByPSJ0ZXN0X2NvbmRpdGlvbiIgLS0mZ3Q7PGJyIC8+CiAgICAmbHQ7IS0tI2VsaWYgZXhwcj0idGVzdF9jb25kaXRpb24iIC0tJmd0OzxiciAvPgogICAgJmx0OyEtLSNlbHNlIC0tJmd0OzxiciAvPgogICAgJmx0OyEtLSNlbmRpZiAtLSZndDsKPC9jb2RlPjwvcD48L2Rpdj4KCiAgICA8cD5BIDxlbT50ZXN0X2NvbmRpdGlvbjwvZW0+IGNhbiBiZSBhbnkgc29ydCBvZiBsb2dpY2FsCiAgICBjb21wYXJpc29uIC0gZWl0aGVyIGNvbXBhcmluZyB2YWx1ZXMgdG8gb25lIGFub3RoZXIsIG9yIHRlc3RpbmcKICAgIHRoZSBgYHRydXRoJycgb2YgYSBwYXJ0aWN1bGFyIHZhbHVlLiAoQSBnaXZlbiBzdHJpbmcgaXMgdHJ1ZSBpZgogICAgaXQgaXMgbm9uZW1wdHkuKSBGb3IgYSBmdWxsIGxpc3Qgb2YgdGhlIGNvbXBhcmlzb24gb3BlcmF0b3JzCiAgICBhdmFpbGFibGUgdG8geW91LCBzZWUgdGhlIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfaW5jbHVkZS5odG1sIj5tb2RfaW5jbHVkZTwvYT48L2NvZGU+CiAgICBkb2N1bWVudGF0aW9uLjwvcD4KCiAgICA8cD5Gb3IgZXhhbXBsZSwgaWYgeW91IHdpc2ggdG8gY3VzdG9taXplIHRoZSB0ZXh0IG9uIHlvdXIgd2ViIHBhZ2UKICAgIGJhc2VkIG9uIHRoZSB0aW1lIG9mIGRheSwgeW91IGNvdWxkIHVzZSB0aGUgZm9sbG93aW5nIHJlY2lwZSwgcGxhY2VkCiAgICBpbiB0aGUgSFRNTCBwYWdlOjwvcD4KCiAgICA8ZGl2IGNsYXNzPSJleGFtcGxlIj48cD48Y29kZT4KICAgIEdvb2QKICAgICZsdDshLS0jaWYgZXhwcj0iJXtUSU1FX0hPVVJ9ICZsdDsxMiIgLS0mZ3Q7PGJyIC8+CiAgICBtb3JuaW5nITxiciAvPgogICAgJmx0OyEtLSNlbHNlIC0tJmd0OzxiciAvPgogICAgYWZ0ZXJub29uITxiciAvPgogICAgJmx0OyEtLSNlbmRpZiAtLSZndDs8YnIgLz4KICAgIDwvY29kZT48L3A+PC9kaXY+CgogICAgPHA+QW55IG90aGVyIHZhcmlhYmxlIChlaXRoZXIgb25lcyB0aGF0IHlvdSBkZWZpbmUsIG9yIG5vcm1hbAogICAgZW52aXJvbm1lbnQgdmFyaWFibGVzKSBjYW4gYmUgdXNlZCBpbiBjb25kaXRpb25hbCBzdGF0ZW1lbnRzLgogICAgU2VlIDxhIGhyZWY9Ii4uL2V4cHIuaHRtbCI+RXhwcmVzc2lvbnMgaW4gQXBhY2hlIEhUVFAgU2VydmVyPC9hPiBmb3IKICAgIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIGV4cHJlc3Npb24gZXZhbHVhdGlvbiBlbmdpbmUuPC9wPgoKICAgIDxwPldpdGggQXBhY2hlJ3MgYWJpbGl0eSB0byBzZXQgZW52aXJvbm1lbnQgdmFyaWFibGVzIHdpdGggdGhlCiAgICA8Y29kZT5TZXRFbnZJZjwvY29kZT4gZGlyZWN0aXZlcywgYW5kIG90aGVyIHJlbGF0ZWQgZGlyZWN0aXZlcywKICAgIHRoaXMgZnVuY3Rpb25hbGl0eSBjYW4gbGV0IHlvdSBkbyBhIHdpZGUgdmFyaWV0eSBvZiBkeW5hbWljIGNvbnRlbnQKICAgIG9uIHRoZSBzZXJ2ZXIgc2lkZSB3aXRob3V0IHJlc29ydGluZyBhIGZ1bGwgd2ViIGFwcGxpY2F0aW9uLjwvcD4KCjwvZGl2PjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9ImNvbmNsdXNpb24iIGlkPSJjb25jbHVzaW9uIj5Db25jbHVzaW9uPC9hPiA8YSB0aXRsZT0iUGVybWFuZW50IGxpbmsiIGhyZWY9IiNjb25jbHVzaW9uIiBjbGFzcz0icGVybWFsaW5rIj4mcGFyYTs8L2E+PC9oMj4KCiAgICA8cD5TU0kgaXMgY2VydGFpbmx5IG5vdCBhIHJlcGxhY2VtZW50IGZvciBDR0ksIG9yIG90aGVyCiAgICB0ZWNobm9sb2dpZXMgdXNlZCBmb3IgZ2VuZXJhdGluZyBkeW5hbWljIHdlYiBwYWdlcy4gQnV0IGl0IGlzIGEKICAgIGdyZWF0IHdheSB0byBhZGQgc21hbGwgYW1vdW50cyBvZiBkeW5hbWljIGNvbnRlbnQgdG8gcGFnZXMsCiAgICB3aXRob3V0IGRvaW5nIGEgbG90IG9mIGV4dHJhIHdvcmsuPC9wPgo8L2Rpdj48L2Rpdj4KPGRpdiBjbGFzcz0iYm90dG9tbGFuZyI+CjxwPjxzcGFuPkF2YWlsYWJsZSBMYW5ndWFnZXM6IDwvc3Bhbj48YSBocmVmPSIuLi9lbi9ob3d0by9zc2kuaHRtbCIgdGl0bGU9IkVuZ2xpc2giPiZuYnNwO2VuJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4uL2VzL2hvd3RvL3NzaS5odG1sIiBocmVmbGFuZz0iZXMiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iRXNwYfFvbCI+Jm5ic3A7ZXMmbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi4vZnIvaG93dG8vc3NpLmh0bWwiIGhyZWZsYW5nPSJmciIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJGcmFu52FpcyI+Jm5ic3A7ZnImbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi4vamEvaG93dG8vc3NpLmh0bWwiIGhyZWZsYW5nPSJqYSIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJKYXBhbmVzZSI+Jm5ic3A7amEmbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi4va28vaG93dG8vc3NpLmh0bWwiIGhyZWZsYW5nPSJrbyIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJLb3JlYW4iPiZuYnNwO2tvJm5ic3A7PC9hPjwvcD4KPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiBhbHQ9InRvcCIgLz48L2E+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdGlvbiI+PGgyPjxhIGlkPSJjb21tZW50c19zZWN0aW9uIiBuYW1lPSJjb21tZW50c19zZWN0aW9uIj5Db21tZW50czwvYT48L2gyPjxkaXYgY2xhc3M9Indhcm5pbmciPjxzdHJvbmc+Tm90aWNlOjwvc3Ryb25nPjxiciAvPlRoaXMgaXMgbm90IGEgUSZhbXA7QSBzZWN0aW9uLiBDb21tZW50cyBwbGFjZWQgaGVyZSBzaG91bGQgYmUgcG9pbnRlZCB0b3dhcmRzIHN1Z2dlc3Rpb25zIG9uIGltcHJvdmluZyB0aGUgZG9jdW1lbnRhdGlvbiBvciBzZXJ2ZXIsIGFuZCBtYXkgYmUgcmVtb3ZlZCBhZ2FpbiBieSBvdXIgbW9kZXJhdG9ycyBpZiB0aGV5IGFyZSBlaXRoZXIgaW1wbGVtZW50ZWQgb3IgY29uc2lkZXJlZCBpbnZhbGlkL29mZi10b3BpYy4gUXVlc3Rpb25zIG9uIGhvdyB0byBtYW5hZ2UgdGhlIEFwYWNoZSBIVFRQIFNlcnZlciBzaG91bGQgYmUgZGlyZWN0ZWQgYXQgZWl0aGVyIG91ciBJUkMgY2hhbm5lbCwgI2h0dHBkLCBvbiBGcmVlbm9kZSwgb3Igc2VudCB0byBvdXIgPGEgaHJlZj0iaHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvbGlzdHMuaHRtbCI+bWFpbGluZyBsaXN0czwvYT4uPC9kaXY+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tLy8tLT48IVtDREFUQVsvLz48IS0tCnZhciBjb21tZW50c19zaG9ydG5hbWUgPSAnaHR0cGQnOwp2YXIgY29tbWVudHNfaWRlbnRpZmllciA9ICdodHRwOi8vaHR0cGQuYXBhY2hlLm9yZy9kb2NzL3RydW5rL2hvd3RvL3NzaS5odG1sJzsKKGZ1bmN0aW9uKHcsIGQpIHsKICAgIGlmICh3LmxvY2F0aW9uLmhvc3RuYW1lLnRvTG93ZXJDYXNlKCkgPT0gImh0dHBkLmFwYWNoZS5vcmciKSB7CiAgICAgICAgZC53cml0ZSgnPGRpdiBpZD0iY29tbWVudHNfdGhyZWFkIj48XC9kaXY+Jyk7CiAgICAgICAgdmFyIHMgPSBkLmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOwogICAgICAgIHMudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnOwogICAgICAgIHMuYXN5bmMgPSB0cnVlOwogICAgICAgIHMuc3JjID0gJ2h0dHBzOi8vY29tbWVudHMuYXBhY2hlLm9yZy9zaG93X2NvbW1lbnRzLmx1YT9zaXRlPScgKyBjb21tZW50c19zaG9ydG5hbWUgKyAnJnBhZ2U9JyArIGNvbW1lbnRzX2lkZW50aWZpZXI7CiAgICAgICAgKGQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXSB8fCBkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdib2R5JylbMF0pLmFwcGVuZENoaWxkKHMpOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgZC53cml0ZSgnPGRpdiBpZD0iY29tbWVudHNfdGhyZWFkIj5Db21tZW50cyBhcmUgZGlzYWJsZWQgZm9yIHRoaXMgcGFnZSBhdCB0aGUgbW9tZW50LjxcL2Rpdj4nKTsKICAgIH0KfSkod2luZG93LCBkb2N1bWVudCk7Ci8vLS0+PCFdXT48L3NjcmlwdD48L2Rpdj48ZGl2IGlkPSJmb290ZXIiPgo8cCBjbGFzcz0iYXBhY2hlIj5Db3B5cmlnaHQgMjAxOSBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uPGJyIC8+TGljZW5zZWQgdW5kZXIgdGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+QXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wPC9hPi48L3A+CjxwIGNsYXNzPSJtZW51Ij48YSBocmVmPSIuLi9tb2QvIj5Nb2R1bGVzPC9hPiB8IDxhIGhyZWY9Ii4uL21vZC9xdWlja3JlZmVyZW5jZS5odG1sIj5EaXJlY3RpdmVzPC9hPiB8IDxhIGhyZWY9Imh0dHA6Ly93aWtpLmFwYWNoZS5vcmcvaHR0cGQvRkFRIj5GQVE8L2E+IHwgPGEgaHJlZj0iLi4vZ2xvc3NhcnkuaHRtbCI+R2xvc3Nhcnk8L2E+IHwgPGEgaHJlZj0iLi4vc2l0ZW1hcC5odG1sIj5TaXRlbWFwPC9hPjwvcD48L2Rpdj48c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLS8vLS0+PCFbQ0RBVEFbLy8+PCEtLQppZiAodHlwZW9mKHByZXR0eVByaW50KSAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgIHByZXR0eVByaW50KCk7Cn0KLy8tLT48IV1dPjwvc2NyaXB0Pgo8L2JvZHk+PC9odG1sPg==