PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Pgo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+CjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBsYW5nPSJmciIgeG1sOmxhbmc9ImZyIj48aGVhZD4KPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KPCEtLQogICAgICAgIFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYCiAgICAgICAgICAgICAgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBmcm9tIHhtbCBzb3VyY2U6IERPIE5PVCBFRElUCiAgICAgICAgWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKICAgICAgLS0+Cjx0aXRsZT5NZXNzYWdlcyBkJ2VycmV1ciBwZXJzb25uYWxpc+lzIC0gU2VydmV1ciBBcGFjaGUgSFRUUCBWZXJzaW9uIDIuNTwvdGl0bGU+CjxsaW5rIGhyZWY9Ii4vc3R5bGUvY3NzL21hbnVhbC5jc3MiIHJlbD0ic3R5bGVzaGVldCIgbWVkaWE9ImFsbCIgdHlwZT0idGV4dC9jc3MiIHRpdGxlPSJNYWluIHN0eWxlc2hlZXQiIC8+CjxsaW5rIGhyZWY9Ii4vc3R5bGUvY3NzL21hbnVhbC1sb29zZS0xMDBwYy5jc3MiIHJlbD0iYWx0ZXJuYXRlIHN0eWxlc2hlZXQiIG1lZGlhPSJhbGwiIHR5cGU9InRleHQvY3NzIiB0aXRsZT0iTm8gU2lkZWJhciAtIERlZmF1bHQgZm9udCBzaXplIiAvPgo8bGluayBocmVmPSIuL3N0eWxlL2Nzcy9tYW51YWwtcHJpbnQuY3NzIiByZWw9InN0eWxlc2hlZXQiIG1lZGlhPSJwcmludCIgdHlwZT0idGV4dC9jc3MiIC8+PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iLi9zdHlsZS9jc3MvcHJldHRpZnkuY3NzIiAvPgo8c2NyaXB0IHNyYz0iLi9zdHlsZS9zY3JpcHRzL3ByZXR0aWZ5Lm1pbi5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KPC9zY3JpcHQ+Cgo8bGluayBocmVmPSIuL2ltYWdlcy9mYXZpY29uLmljbyIgcmVsPSJzaG9ydGN1dCBpY29uIiAvPjwvaGVhZD4KPGJvZHkgaWQ9Im1hbnVhbC1wYWdlIj48ZGl2IGlkPSJwYWdlLWhlYWRlciI+CjxwIGNsYXNzPSJtZW51Ij48YSBocmVmPSIuL21vZC8iPk1vZHVsZXM8L2E+IHwgPGEgaHJlZj0iLi9tb2QvcXVpY2tyZWZlcmVuY2UuaHRtbCI+RGlyZWN0aXZlczwvYT4gfCA8YSBocmVmPSJodHRwOi8vd2lraS5hcGFjaGUub3JnL2h0dHBkL0ZBUSI+RkFRPC9hPiB8IDxhIGhyZWY9Ii4vZ2xvc3NhcnkuaHRtbCI+R2xvc3NhaXJlPC9hPiB8IDxhIGhyZWY9Ii4vc2l0ZW1hcC5odG1sIj5QbGFuIGR1IHNpdGU8L2E+PC9wPgo8cCBjbGFzcz0iYXBhY2hlIj5TZXJ2ZXVyIEFwYWNoZSBIVFRQIFZlcnNpb24gMi41PC9wPgo8aW1nIGFsdD0iIiBzcmM9Ii4vaW1hZ2VzL2ZlYXRoZXIucG5nIiAvPjwvZGl2Pgo8ZGl2IGNsYXNzPSJ1cCI+PGEgaHJlZj0iLi8iPjxpbWcgdGl0bGU9IiZsdDstIiBhbHQ9IiZsdDstIiBzcmM9Ii4vaW1hZ2VzL2xlZnQuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBpZD0icGF0aCI+CjxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy8iPkFwYWNoZTwvYT4gJmd0OyA8YSBocmVmPSJodHRwOi8vaHR0cGQuYXBhY2hlLm9yZy8iPlNlcnZldXIgSFRUUDwvYT4gJmd0OyA8YSBocmVmPSJodHRwOi8vaHR0cGQuYXBhY2hlLm9yZy9kb2NzLyI+RG9jdW1lbnRhdGlvbjwvYT4gJmd0OyA8YSBocmVmPSIuLyI+VmVyc2lvbiAyLjU8L2E+PC9kaXY+PGRpdiBpZD0icGFnZS1jb250ZW50Ij48ZGl2IGlkPSJwcmVhbWJsZSI+PGgxPk1lc3NhZ2VzIGQnZXJyZXVyIHBlcnNvbm5hbGlz6XM8L2gxPgo8ZGl2IGNsYXNzPSJ0b3BsYW5nIj4KPHA+PHNwYW4+TGFuZ3VlcyBEaXNwb25pYmxlczogPC9zcGFuPjxhIGhyZWY9Ii4vZW4vY3VzdG9tLWVycm9yLmh0bWwiIGhyZWZsYW5nPSJlbiIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJFbmdsaXNoIj4mbmJzcDtlbiZuYnNwOzwvYT4gfAo8YSBocmVmPSIuL2VzL2N1c3RvbS1lcnJvci5odG1sIiBocmVmbGFuZz0iZXMiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iRXNwYfFvbCI+Jm5ic3A7ZXMmbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi9mci9jdXN0b20tZXJyb3IuaHRtbCIgdGl0bGU9IkZyYW7nYWlzIj4mbmJzcDtmciZuYnNwOzwvYT4gfAo8YSBocmVmPSIuL2phL2N1c3RvbS1lcnJvci5odG1sIiBocmVmbGFuZz0iamEiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iSmFwYW5lc2UiPiZuYnNwO2phJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4va28vY3VzdG9tLWVycm9yLmh0bWwiIGhyZWZsYW5nPSJrbyIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJLb3JlYW4iPiZuYnNwO2tvJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4vdHIvY3VzdG9tLWVycm9yLmh0bWwiIGhyZWZsYW5nPSJ0ciIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJU/HJr52UiPiZuYnNwO3RyJm5ic3A7PC9hPjwvcD4KPC9kaXY+CgogICAgPHA+TGUgc2VydmV1ciBIVFRQIEFwYWNoZSBmb3Vybml0IGRlcyBtZXNzYWdlcyBkJ2VycmV1ciBn6W7pcmlxdWVzCiAgICBwb3VyIGxlcyBjb2RlcyBkZSBzdGF0dXQgNHh4IG91IDV4eCA7IGNlcyBtZXNzYWdlcyBzb250IGNlcGVuZGFudAogICAgcmVsYXRpdmVtZW50IGF1c3TocmVzLCBpbXBy6WNpcywgZXQgcGV1dmVudCBzJ2F26XJlciBpbnRpbWlkYW50cwogICAgcG91ciBsZXMgdmlzaXRldXJzIGR1IHNpdGUuIFNpIHZvdXMgbGUgc291aGFpdGV6LCB2b3VzIHBvdXZlegogICAgYWZmaWNoZXIgZGVzIG1lc3NhZ2VzIGQnZXJyZXVyIHBsdXMgY29udml2aWF1eCwgZGFucyB1biBsYW5nYWdlCiAgICBhdXRyZSBxdWUgbCdhbmdsYWlzLCBvdSBt6m1lIHNvdXMgdW5lIGZvcm1lIHBsdXMgZW4gYWTpcXVhdGlvbiBhdmVjCiAgICBsZSBzdHlsZSBkZSB2b3RyZSBzaXRlLjwvcD4KCiAgICA8cD5JbCBlc3QgcG9zc2libGUgZGUgZOlmaW5pciBkZXMgbWVzc2FnZXMgZCdlcnJldXIgcGVyc29ubmFsaXPpcwogICAgcG91ciBjaGFxdWUgY29kZSBkZSBzdGF0dXQgSFRUUCBhc3NvY2npIOAgdW5lIGNvbmRpdGlvbiBkJ2VycmV1ciAtCiAgICBjJ2VzdCDgIGRpcmUgdG91dCBjb2RlIGRlIHN0YXR1dCA0eHggb3UgNXh4LjwvcD4KCiAgICA8cD5EZSBwbHVzLCBpbCBlc3QgcG9zc2libGUgZGUKICAgIHBlcnNvbm5hbGlzZXIgbGUgbWVzc2FnZSBkJ2VycmV1ciBlbiBmb25jdGlvbiBkJ3VuIGpldSBkZSB2YWxldXJzCiAgICBmb3VybmksIGVuIHV0aWxpc2FudCBsZXMgPGEgaHJlZj0iaG93dG8vc3NpLmh0bWwiPkluY2x1c2lvbnMgQ/R06QogICAgU2VydmV1ciAoU1NJKTwvYT4uIFVuIHByb2dyYW1tZSBDR0kgb3UgdW4gYXV0cmUgZ2VzdGlvbm5haXJlCiAgICBkeW5hbWlxdWUgKFBIUCwgbW9kX3BlcmwsIGV0Yy4uLikgcGV1dCBhdXNzaSB1dGlsaXNlciBjZXMgdmFyaWFibGVzCiAgICBwb3VyIGfpcmVyIGxlcyBjb25kaXRpb25zIGQnZXJyZXVyLjwvcD4KCgogIDwvZGl2Pgo8ZGl2IGlkPSJxdWlja3ZpZXciPjx1bCBpZD0idG9jIj48bGk+PGltZyBhbHQ9IiIgc3JjPSIuL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2NvbmZpZ3VyYXRpb24iPkNvbmZpZ3VyYXRpb248L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiN2YXJpYWJsZXMiPlZhcmlhYmxlcyBkaXNwb25pYmxlczwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2N1c3RvbSI+UGVyc29ubmFsaXNhdGlvbiBkZXMgbWVzc2FnZXMgZCdlcnJldXI8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNtdWx0aS1sYW5nIj5NZXNzYWdlcyBkJ2VycmV1ciBwZXJzb25uYWxpc+lzCiAgbXVsdGlsaW5ndWVzPC9hPjwvbGk+CjwvdWw+PGgzPlZvaXIgYXVzc2k8L2gzPjx1bCBjbGFzcz0ic2VlYWxzbyI+PGxpPjxhIGhyZWY9IiNjb21tZW50c19zZWN0aW9uIj5Db21tZW50YWlyZXM8L2E+PC9saT48L3VsPjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9ImNvbmZpZ3VyYXRpb24iIGlkPSJjb25maWd1cmF0aW9uIj5Db25maWd1cmF0aW9uPC9hPjwvaDI+CgogICAgPHA+TGVzIG1lc3NhZ2VzIGQnZXJyZXVyIHBlcnNvbm5hbGlz6XMgc29udCBjb25maWd1culzIHZpYSBsYQogICAgZGlyZWN0aXZlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL2NvcmUuaHRtbCNlcnJvcmRvY3VtZW50Ij5FcnJvckRvY3VtZW50PC9hPjwvY29kZT4sIHF1aQogICAgcGV1dCDqdHJlIHV0aWxpc+llIGRhbnMgdW4gY29udGV4dGUgZ2xvYmFsLCBzZXJ2ZXVyIHZpcnR1ZWwgb3UKICAgIHLpcGVydG9pcmUuIE9uIHBldXQgdXRpbGlzZXIgY2V0dGUgZGlyZWN0aXZlIGRhbnMgbGVzIGZpY2hpZXJzCiAgICAuaHRhY2Nlc3Mgc2kgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvY29yZS5odG1sI2FsbG93b3ZlcnJpZGUiPkFsbG93T3ZlcnJpZGU8L2E+PC9jb2RlPiBlc3QKICAgIGTpZmluaWUg4CBGaWxlSW5mby48L3A+CgogICAgPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1jb25maWciPkVycm9yRG9jdW1lbnQgNTAwICJE6XNvbOksIG5vdHJlIHNjcmlwdCBzJ2VzdApjcmFzaOkgOyBjb21tZSBjJ2VzdCBkb21tYWdlICEiCkVycm9yRG9jdW1lbnQgNTAwIC9jZ2ktYmluL2NyYXNoLXJlY292ZXIKRXJyb3JEb2N1bWVudCA1MDAgaHR0cDovL2Vycm9yLmV4YW1wbGUuY29tL3NlcnZlcl9lcnJvci5odG1sCkVycm9yRG9jdW1lbnQgNDA0IC9lcnJvcnMvbm90X2ZvdW5kLmh0bWwgCkVycm9yRG9jdW1lbnQgNDAxIC9zdWJzY3JpcHRpb24vaG93X3RvX3N1YnNjcmliZS5odG1sPC9wcmU+CgoKPHA+TGEgc3ludGF4ZSBkZSBsYSBkaXJlY3RpdmUgPGNvZGU+RXJyb3JEb2N1bWVudDwvY29kZT4gZXN0IDo8L3A+CiAgICAgIDxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctY29uZmlnIj5FcnJvckRvY3VtZW50ICZsdDtjb2RlXzNfY2hpZmZyZXMmZ3Q7ICZsdDthY3Rpb24mZ3Q7PC9wcmU+CgogICAgICA8cD5v+SBhY3Rpb24gcGV1dCDqdHJlIHRyYWl06WUgY29tbWUgOjwvcD4KICAgICAgICA8b2w+CiAgICAgIDxsaT5VbmUgVVJMIGRlIHJlZGlyZWN0aW9uIGxvY2FsIChzaSBsJ2FjdGlvbiBjb21tZW5jZSBwYXIgdW4gIi8iKS48L2xpPgogICAgICA8bGk+VW5lIFVSTCBkZSByZWRpcmVjdGlvbiBleHRlcm5lIChzaSBhY3Rpb24gZXN0IHVuZSBVUkwgdmFsaWRlKS48L2xpPgogICAgICA8bGk+TGUgdGV4dGUg4CBhZmZpY2hlciAoc2kgbCdhY3Rpb24gbmUgculwb25kIOAgYXVjdW5lIGRlcwogICAgICBkZXV4IGNvbmRpdGlvbnMgcHLpY+lkZW50ZXMpLiBFbnRvdXJleiBsZSB0ZXh0ZSBkZSBndWlsbGVtZXRzICgiKQogICAgICBzJ2lsIGNvbnRpZW50IHBsdXNpZXVycyBtb3RzLjwvbGk+CiAgICAgICAgPC9vbD4KCiAgICA8cD5EYW5zIGxlIGNhcyBkJ3VuZSByZWRpcmVjdGlvbiB2ZXJzIHVuZSBVUkwgbG9jYWxlLCBkZXMgdmFyaWFibGVzCiAgICBkJ2Vudmlyb25uZW1lbnQgc3VwcGzpbWVudGFpcmVzIHNvbnQgZOlmaW5pZXMgZGUgZmHnb24g4CBjZSBxdWUgbGEKICAgIHLpcG9uc2UgcHVpc3NlIOp0cmUgcGVyc29ubmFsaXPpZSBwYXIgbGEgc3VpdGUuIEVsbGVzIG5lIHNvbnQgcGFzCiAgICBlbnZveellcyBhdXggVVJMcyBleHRlcm5lcy48L3A+CgogIDwvZGl2PjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0idmFyaWFibGVzIiBpZD0idmFyaWFibGVzIj5WYXJpYWJsZXMgZGlzcG9uaWJsZXM8L2E+PC9oMj4KCiAgICAgIDxwPkxhIHJlZGlyZWN0aW9uIHZlcnMgdW5lIGF1dHJlIFVSTCBwZXV0IOp0cmUgdXRpbGUsIG1haXMKICAgICAgc2V1bGVtZW50IHMnaWwgZXN0IHBvc3NpYmxlIGRlIHRyYW5zbWV0dHJlIGNlcnRhaW5lcyBpbmZvcm1hdGlvbnMKICAgICAgcXVpIHBvdXJyb250IOp0cmUgdXRpbGlz6WVzIHBvdXIgZXhwbGlxdWVyIG91IGpvdXJuYWxpc2VyCiAgICAgIGxhIGNvbmRpdGlvbiBkJ2VycmV1ciBvdSBsZSBwcm9ibOhtZSBwbHVzIGNsYWlyZW1lbnQuPC9wPgoKCTxwPlBvdXIgeSBwYXJ2ZW5pciwgbG9yc3F1ZSBsYSByZWRpcmVjdGlvbiBkJ2VycmV1ciBlc3QgZW52b3npZSwKCWRlcyB2YXJpYWJsZXMgZCdlbnZpcm9ubmVtZW50IHN1cHBs6W1lbnRhaXJlcyBzb250IGTpZmluaWVzIOAKCXBhcnRpciBkZXMgZW4tdOp0ZXMgZGUgbGEgcmVxdep0ZSBvcmlnaW5hbGUgZW4gcHLpZml4YW50IGxlIG5vbQoJZCdvcmlnaW5lIGRlIGwnZW4tdOp0ZSBwYXIgJ1JFRElSRUNUXycsIGNlIHF1aSBwZXJtZXQgZGUgZm91cm5pciBhdQoJbWVzc2FnZSBkJ2VycmV1ciBsZSBjb250ZXh0ZSBkZSBsYSByZXF16nRlIG9yaWdpbmVsbGUuPC9wPgoKICAgICAgPHA+UGFyIGV4ZW1wbGUsIGVuIHBsdXMgZGVzIHZhcmlhYmxlcyBkJ2Vudmlyb25uZW1lbnQgaGFiaXR1ZWxsZXMsCiAgICAgIHZvdXMgcG91dmV6IHJlY2V2b2lyIGNlIHF1aSBzdWl0IDo8L3A+CgoKICAgICAgPGRpdiBjbGFzcz0iZXhhbXBsZSI+PHA+PGNvZGU+CiAgICAgICAgUkVESVJFQ1RfSFRUUF9BQ0NFUFQ9Ki8qLCBpbWFnZS9naWYsIGltYWdlL2pwZWcsIGltYWdlL3BuZzxiciAvPgogICAgICAgIFJFRElSRUNUX0hUVFBfVVNFUl9BR0VOVD1Nb3ppbGxhLzUuMCBGZWRvcmEvMy41LjgtMS5mYzEyIEZpcmVmb3gvMy41Ljg8YnIgLz4KICAgICAgICBSRURJUkVDVF9QQVRIPS46L2JpbjovdXNyL2xvY2FsL2Jpbjovc2JpbjxiciAvPgogICAgICAgIFJFRElSRUNUX1FVRVJZX1NUUklORz08YnIgLz4KICAgICAgICBSRURJUkVDVF9SRU1PVEVfQUREUj0xMjEuMzQ1Ljc4LjEyMzxiciAvPgogICAgICAgIFJFRElSRUNUX1JFTU9URV9IT1NUPWNsaWVudC5leGFtcGxlLmNvbTxiciAvPgogICAgICAgIFJFRElSRUNUX1NFUlZFUl9OQU1FPXd3dy5leGFtcGxlLmVkdTxiciAvPgogICAgICAgIFJFRElSRUNUX1NFUlZFUl9QT1JUPTgwPGJyIC8+CiAgICAgICAgUkVESVJFQ1RfU0VSVkVSX1NPRlRXQVJFPUFwYWNoZS8yLjIuMTU8YnIgLz4KICAgICAgICBSRURJUkVDVF9VUkw9L2NnaS1iaW4vYnVnZ3kucGwKICAgICAgPC9jb2RlPjwvcD48L2Rpdj4KCiAgICAgIDxwPkxlcyB2YXJpYWJsZXMgZCdlbnZpcm9ubmVtZW50IDxjb2RlPlJFRElSRUNUXzwvY29kZT4gc29udAogICAgICBjcunpZXMg4CBwYXJ0aXIgZGVzIHZhcmlhYmxlcyBkJ2Vudmlyb25uZW1lbnQgcHLpZXhpc3RhbnRlcyDgIGxhCiAgICAgIHJlZGlyZWN0aW9uIHF1aSBzb250IHBy6WZpeOllcyBwYXIgbGEgY2hh7m5lIDxjb2RlPlJFRElSRUNUXzwvY29kZT4gOwogICAgICBwYXIgZXhlbXBsZSwgPGNvZGU+SFRUUF9VU0VSX0FHRU5UPC9jb2RlPiBkZXZpZW50CiAgICAgIDxjb2RlPlJFRElSRUNUX0hUVFBfVVNFUl9BR0VOVDwvY29kZT4uPC9wPgoKICAgICAgPHA+PGNvZGU+UkVESVJFQ1RfVVJMPC9jb2RlPiwgPGNvZGU+UkVESVJFQ1RfU1RBVFVTPC9jb2RlPiwgZXQKICAgICAgPGNvZGU+UkVESVJFQ1RfUVVFUllfU1RSSU5HPC9jb2RlPiBzb250IHN5c3TpbWF0aXF1ZW1lbnQgZOlmaW5pZXMsCiAgICAgIGxlcyBhdXRyZXMgdmFyaWFibGVzIG4n6XRhbnQgZOlmaW5pZXMgcXVlIHNpIGwnZW4tdOp0ZQogICAgICBjb3JyZXNwb25kYW50IGV4aXN0YWl0IGF2YW50IGxhIGNvbmRpdGlvbiBkJ2VycmV1ci48L3A+CgogICAgICA8cD48c3Ryb25nPkF1Y3VuZTwvc3Ryb25nPiBkJ2VudHJlIGVsbGVzIG5lIHNlcmEgZOlmaW5pZSBzaSB2b3RyZQogICAgICBkaXJlY3RpdmUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi9tb2QvY29yZS5odG1sI2Vycm9yZG9jdW1lbnQiPkVycm9yRG9jdW1lbnQ8L2E+PC9jb2RlPgogICAgICBzcOljaWZpZSB1bmUgcmVkaXJlY3Rpb24gPGVtPmV4dGVybmU8L2VtPiAodG91dGUgVVJMIGNvbW1lbudhbnQKICAgICAgcGFyIHVuIHByb3RvY29sZSBkdSBzdHlsZSA8Y29kZT5odHRwOjwvY29kZT4sIG3qbWUgc2kgZWxsZSBmYWl0CiAgICAgIHLpZulyZW5jZSBhdSBt6m1lIGj0dGUgcXVlIGxlIHNlcnZldXIpLjwvcD4KCiAgPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJjdXN0b20iIGlkPSJjdXN0b20iPlBlcnNvbm5hbGlzYXRpb24gZGVzIG1lc3NhZ2VzIGQnZXJyZXVyPC9hPjwvaDI+CgoKCTxwPlNpIHZvdXMgZmFpdGVzIHBvaW50ZXIgdm90cmUgZGlyZWN0aXZlCgk8Y29kZT5FcnJvckRvY3VtZW50PC9jb2RlPiB2ZXJzIGNlcnRhaW5zIGdlc3Rpb25uYWlyZXMKCWR5bmFtaXF1ZXMgY29tbWUgbGVzIGluY2x1c2lvbnMgY/R06SBzZXJ2ZXVyLCBsZXMgc2NyaXB0cyBDR0kgb3UKCWQnYXV0cmVzIGdlc3Rpb25uYWlyZXMsIHZvdXMgcG91dmV6IHV0aWxpc2VyIGxlcyB2YXJpYWJsZXMKCWQnZW52aXJvbm5lbWVudCBzdXBwbOltZW50YWlyZXMgZGlzcG9uaWJsZXMgcG91ciBwZXJzb25uYWxpc2VyCglsZSBtZXNzYWdlLjwvcD4KCgogICAgICA8cD5TaSBsYSBkaXJlY3RpdmUgRXJyb3JEbmFtZS1iYXNlZG9jdW1lbnQgc3DpY2lmaWUgdW5lIHJlZGlyZWN0aW9uIGxvY2FsZQogICAgICB2ZXJzIHVuIHNjcmlwdCBDR0ksIGNlIGRlcm5pZXIgZG9pdCBham91dGVyIHVuIGVuLXTqdGUKICAgICAgIjxjb2RlPlN0YXR1czo8L2NvZGU+IiBkYW5zIHNhIHNvcnRpZSBhZmluIGRlIHMnYXNzdXJlciBkdSBib24KICAgICAgYWNoZW1pbmVtZW50IGp1c3F1J2F1IGNsaWVudCBkZSBsYSBjb25kaXRpb24gZCdlcnJldXIgcXVpIGEKICAgICAgcHJvdm9xdekgY2V0dGUgcmVkaXJlY3Rpb24uIFBhciBleGVtcGxlLCB1biBzY3JpcHQgUGVybCBzcOljaWZp6QogICAgICBwYXIgdW5lIGRpcmVjdGl2ZSBFcnJvckRvY3VtZW50IHBvdXJyYWl0IGNvbnRlbmlyIGNlIHF1aSBzdWl0CiAgICAgIDo8L3A+CgogICAgICA8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLXBlcmwiPi4uLgpwcmludCAgIkNvbnRlbnQtdHlwZTogdGV4dC9odG1sXG4iOyAKcHJpbnRmICJTdGF0dXM6ICVzIENvbmRpdGlvbiBJbnRlcmNlcHRlZFxuIiwgJEVOVnsiUkVESVJFQ1RfU1RBVFVTIn07IAouLi48L3ByZT4KCgogICAgICA8cD5TaSB1biBzY3JpcHQgZXN0IGTpZGnpIOAgbGEgZ2VzdGlvbiBkJ3VuZSBjb25kaXRpb24gZCdlcnJldXIKICAgICAgc3DpY2lmaXF1ZSwgdGVsbGUgcXVlIDxjb2RlPjQwNCZuYnNwO05vdCZuYnNwO0ZvdW5kPC9jb2RlPiwgaWwKICAgICAgcGV1dCB1dGlsaXNlciBsZSBjb2RlIGV0IGxlIHRleHRlIGRlIGwnZXJyZXVyIHNw6WNpZmlxdWVzIOAgbGEKICAgICAgcGxhY2UuPC9wPgoKICAgICAgPHA+Tm90ZXogcXVlIHNpIGxhIHLpcG9uc2UgY29udGllbnQgdW4gZW4tdOp0ZQogICAgICA8Y29kZT5Mb2NhdGlvbjo8L2NvZGU+IChhZmluIGQnaW5pdGllciB1bmUgcmVkaXJlY3Rpb24gY/R06QogICAgICBjbGllbnQpLCBsZSBzY3JpcHQgPGVtPmRvaXQ8L2VtPiDpbWV0dHJlIHVuIGVuLXTqdGUgYXBwcm9wcmnpCiAgICAgIChjb21tZSA8Y29kZT4zMDImbmJzcDtGb3VuZDwvY29kZT4pLiBEYW5zIGxlIGNhcyBjb250cmFpcmUsCiAgICAgIGwnZW4tdOp0ZSA8Y29kZT5Mb2NhdGlvbjo8L2NvZGU+IG5lIHByb2R1aXJhIGF1Y3VuIGVmZmV0LjwvcD4KICA8L2Rpdj48ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9Im11bHRpLWxhbmciIGlkPSJtdWx0aS1sYW5nIj5NZXNzYWdlcyBkJ2VycmV1ciBwZXJzb25uYWxpc+lzCiAgbXVsdGlsaW5ndWVzPC9hPjwvaDI+CgogICAgPHA+Vm91cyB0cm91dmVyZXogZGFucyBsYSBkaXN0cmlidXRpb24gZHUgc2VydmV1ciBIVFRQIEFwYWNoZSB1bgogICAgculwZXJ0b2lyZSBjb250ZW5hbnQgZGVzIG1lc3NhZ2VzIGQnZXJyZXVyIHBlcnNvbm5hbGlz6XMgdHJhZHVpdHMgZW4KICAgIDE2IGxhbmd1ZXMgZGlmZulyZW50ZXMuIFBvdXIgYWN0aXZlciBjZXR0ZSBmb25jdGlvbm5hbGl06Swgdm91cwogICAgcG91dmV6IGF1c3NpIGluY2x1cmUgdW4gZmljaGllciBkZSBjb25maWd1cmF0aW9uIHF1aSBzZSB0cm91dmUgZGFucwogICAgbGUgculwZXJ0b2lyZSBkZSBjb25maWd1cmF0aW9uIDxjb2RlPmNvbmYvZXh0cmE8L2NvZGU+LjwvcD4KCiAgICA8cD5EYW5zIGxlIGZpY2hpZXIgZGUgY29uZmlndXJhdGlvbiBkZSB2b3RyZSBzZXJ2ZXVyLCB2b3VzIHRyb3V2ZXJlegogICAgdW4gZ3JvdXBlIGRlIGxpZ25lcyBkdSBzdHlsZSA6PC9wPgoKICAgIDxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctY29uZmlnIj4gICAgIyBNdWx0aS1sYW5ndWFnZSBlcnJvciBtZXNzYWdlcwogICAgI0luY2x1ZGUgY29uZi9leHRyYS9odHRwZC1tdWx0aWxhbmctZXJyb3Jkb2MuY29uZjwvcHJlPgoKCiAgICA8cD5E6WNvbW1lbnRleiBsYSBsaWduZSA8Y29kZT5JbmNsdWRlPC9jb2RlPiBwb3VyIGFjdGl2ZXIgY2V0dGUKICAgIGZvbmN0aW9ubmFsaXTpLCBldCBwculzZW50ZXIgZGVzIG1lc3NhZ2VzIGQnZXJyZXVyIGRvbnQgbGUgbGFuZ2FnZQogICAgc2VyYSBu6WdvY2npIGVuIGZvbmN0aW9uIGR1IGxhbmdhZ2UgcHLpZuly6SBk6WZpbmkgYXUgbml2ZWF1IGR1CiAgICBuYXZpZ2F0ZXVyIGR1IGNsaWVudC48L3A+CgogICAgPHA+RGUgcGx1cywgY2VzIGRvY3VtZW50cyBjb250aWVubmVudCBkaXZlcnNlcyB2YXJpYWJsZXMKICAgIDxjb2RlPlJFRElSRUNUXzwvY29kZT4sIGRlIGZh529uIOAgY2UgcXVlIGwndXRpbGlzYXRldXIgZmluYWwKICAgIGRpc3Bvc2UgZCdpbmZvcm1hdGlvbnMgc3VwcGzpbWVudGFpcmVzIOAgcHJvcG9zIGRlIGNlIHF1aSBhIHB1IHNlCiAgICBwcm9kdWlyZSwgZXQgZGUgY2UgcXUnaWwgZXN0IHN1c2NlcHRpYmxlIGRlIGZhaXJlIG1haW50ZW5hbnQuPC9wPgoKICAgIDxwPkNlcyBkb2N1bWVudHMgcGV1dmVudCDqdHJlIHBlcnNvbm5hbGlz6XMgZW4gZm91cm5pc3NhbnQgYXV0YW50CiAgICBkJ2luZm9ybWF0aW9ucyB1dGlsZXMgcXVlIHZvdXMgbGUgc291aGFpdGV6IGF1eCB1dGlsaXNhdGV1cnMg4AogICAgcHJvcG9zIGRlIHZvdHJlIHNpdGUsIGV0IGRlIGNlIHF1J2lscyBzb250IHN1c2NlcHRpYmxlcyBkJ3kgdHJvdXZlci48L3A+CgogICAgPHA+UG91ciBwb3V2b2lyIHV0aWxpc2VyIGNldHRlIGZvbmN0aW9ubmFsaXTpLCB2b3VzIGRldmV6IGFjdGl2ZXIKICAgIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4vbW9kL21vZF9pbmNsdWRlLmh0bWwiPm1vZF9pbmNsdWRlPC9hPjwvY29kZT4gZXQgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX25lZ290aWF0aW9uLmh0bWwiPm1vZF9uZWdvdGlhdGlvbjwvYT48L2NvZGU+LjwvcD4KCiA8L2Rpdj48L2Rpdj4KPGRpdiBjbGFzcz0iYm90dG9tbGFuZyI+CjxwPjxzcGFuPkxhbmd1ZXMgRGlzcG9uaWJsZXM6IDwvc3Bhbj48YSBocmVmPSIuL2VuL2N1c3RvbS1lcnJvci5odG1sIiBocmVmbGFuZz0iZW4iIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iRW5nbGlzaCI+Jm5ic3A7ZW4mbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi9lcy9jdXN0b20tZXJyb3IuaHRtbCIgaHJlZmxhbmc9ImVzIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IkVzcGHxb2wiPiZuYnNwO2VzJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4vZnIvY3VzdG9tLWVycm9yLmh0bWwiIHRpdGxlPSJGcmFu52FpcyI+Jm5ic3A7ZnImbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi9qYS9jdXN0b20tZXJyb3IuaHRtbCIgaHJlZmxhbmc9ImphIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IkphcGFuZXNlIj4mbmJzcDtqYSZuYnNwOzwvYT4gfAo8YSBocmVmPSIuL2tvL2N1c3RvbS1lcnJvci5odG1sIiBocmVmbGFuZz0ia28iIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iS29yZWFuIj4mbmJzcDtrbyZuYnNwOzwvYT4gfAo8YSBocmVmPSIuL3RyL2N1c3RvbS1lcnJvci5odG1sIiBocmVmbGFuZz0idHIiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iVPxya+dlIj4mbmJzcDt0ciZuYnNwOzwvYT48L3A+CjwvZGl2PjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIHNyYz0iLi9pbWFnZXMvdXAuZ2lmIiBhbHQ9InRvcCIgLz48L2E+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdGlvbiI+PGgyPjxhIGlkPSJjb21tZW50c19zZWN0aW9uIiBuYW1lPSJjb21tZW50c19zZWN0aW9uIj5Db21tZW50YWlyZXM8L2E+PC9oMj48ZGl2IGNsYXNzPSJ3YXJuaW5nIj48c3Ryb25nPk5vdGljZTo8L3N0cm9uZz48YnIgLz5UaGlzIGlzIG5vdCBhIFEmYW1wO0Egc2VjdGlvbi4gQ29tbWVudHMgcGxhY2VkIGhlcmUgc2hvdWxkIGJlIHBvaW50ZWQgdG93YXJkcyBzdWdnZXN0aW9ucyBvbiBpbXByb3ZpbmcgdGhlIGRvY3VtZW50YXRpb24gb3Igc2VydmVyLCBhbmQgbWF5IGJlIHJlbW92ZWQgYWdhaW4gYnkgb3VyIG1vZGVyYXRvcnMgaWYgdGhleSBhcmUgZWl0aGVyIGltcGxlbWVudGVkIG9yIGNvbnNpZGVyZWQgaW52YWxpZC9vZmYtdG9waWMuIFF1ZXN0aW9ucyBvbiBob3cgdG8gbWFuYWdlIHRoZSBBcGFjaGUgSFRUUCBTZXJ2ZXIgc2hvdWxkIGJlIGRpcmVjdGVkIGF0IGVpdGhlciBvdXIgSVJDIGNoYW5uZWwsICNodHRwZCwgb24gRnJlZW5vZGUsIG9yIHNlbnQgdG8gb3VyIDxhIGhyZWY9Imh0dHA6Ly9odHRwZC5hcGFjaGUub3JnL2xpc3RzLmh0bWwiPm1haWxpbmcgbGlzdHM8L2E+LjwvZGl2Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLS8vLS0+PCFbQ0RBVEFbLy8+PCEtLQp2YXIgY29tbWVudHNfc2hvcnRuYW1lID0gJ2h0dHBkJzsKdmFyIGNvbW1lbnRzX2lkZW50aWZpZXIgPSAnaHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvZG9jcy90cnVuay9jdXN0b20tZXJyb3IuaHRtbCc7CihmdW5jdGlvbih3LCBkKSB7CiAgICBpZiAody5sb2NhdGlvbi5ob3N0bmFtZS50b0xvd2VyQ2FzZSgpID09ICJodHRwZC5hcGFjaGUub3JnIikgewogICAgICAgIGQud3JpdGUoJzxkaXYgaWQ9ImNvbW1lbnRzX3RocmVhZCI+PFwvZGl2PicpOwogICAgICAgIHZhciBzID0gZC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsKICAgICAgICBzLnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0JzsKICAgICAgICBzLmFzeW5jID0gdHJ1ZTsKICAgICAgICBzLnNyYyA9ICdodHRwczovL2NvbW1lbnRzLmFwYWNoZS5vcmcvc2hvd19jb21tZW50cy5sdWE/c2l0ZT0nICsgY29tbWVudHNfc2hvcnRuYW1lICsgJyZwYWdlPScgKyBjb21tZW50c19pZGVudGlmaWVyOwogICAgICAgIChkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0gfHwgZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYm9keScpWzBdKS5hcHBlbmRDaGlsZChzKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgIGQud3JpdGUoJzxkaXYgaWQ9ImNvbW1lbnRzX3RocmVhZCI+Q29tbWVudHMgYXJlIGRpc2FibGVkIGZvciB0aGlzIHBhZ2UgYXQgdGhlIG1vbWVudC48XC9kaXY+Jyk7CiAgICB9Cn0pKHdpbmRvdywgZG9jdW1lbnQpOwovLy0tPjwhXV0+PC9zY3JpcHQ+PC9kaXY+PGRpdiBpZD0iZm9vdGVyIj4KPHAgY2xhc3M9ImFwYWNoZSI+Q29weXJpZ2h0IDIwMTYgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLjxiciAvPkF1dG9yaXPpIHNvdXMgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5BcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjA8L2E+LjwvcD4KPHAgY2xhc3M9Im1lbnUiPjxhIGhyZWY9Ii4vbW9kLyI+TW9kdWxlczwvYT4gfCA8YSBocmVmPSIuL21vZC9xdWlja3JlZmVyZW5jZS5odG1sIj5EaXJlY3RpdmVzPC9hPiB8IDxhIGhyZWY9Imh0dHA6Ly93aWtpLmFwYWNoZS5vcmcvaHR0cGQvRkFRIj5GQVE8L2E+IHwgPGEgaHJlZj0iLi9nbG9zc2FyeS5odG1sIj5HbG9zc2FpcmU8L2E+IHwgPGEgaHJlZj0iLi9zaXRlbWFwLmh0bWwiPlBsYW4gZHUgc2l0ZTwvYT48L3A+PC9kaXY+PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0vLy0tPjwhW0NEQVRBWy8vPjwhLS0KaWYgKHR5cGVvZihwcmV0dHlQcmludCkgIT09ICd1bmRlZmluZWQnKSB7CiAgICBwcmV0dHlQcmludCgpOwp9Ci8vLS0+PCFdXT48L3NjcmlwdD4KPC9ib2R5PjwvaHRtbD4=