www.nasdaqtrader.com Open in urlscan Pro
198.55.218.21  Public Scan

URL: http://www.nasdaqtrader.com/
Submission: On December 01 via api from US — Scanned from DE

Form analysis 2 forms found in the DOM

Name: form2POST ./

<form name="form2" method="post" action="./" id="form2" __bizdiag="287513139" __biza="WJ__">
  <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE"
    value="/wEPDwUKMTA4NDg4NDM1MA9kFgpmDxYCHgRUZXh0BRpOQVNEQVF0cmFkZXIuY29tIEhvbWUgUGFnZWQCAQ8WAh8ABTE8bWV0YSBodHRwLWVxdWl2PSJrZXl3b3JkcyJjb250ZW50PSJUcmFkaW5nIiAvPg0KZAIDDxYCHglpbm5lcmh0bWwFzxA8ZGl2PjxkaXY+PC9kaXY+PC9kaXY+CiAgIAogICAKPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCi5zZWFyY2gtY250ciB7IHdpZHRoOiAyNGVtOyBwb3NpdGlvbjogcmVsYXRpdmU7IHZlcnRpY2FsLWFsaWduOiB0b3A7IH0KCi5zZWFyY2gtY250ciA+IGRpdiB7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgfQoKLnNlYXJjaC1sYmwgeyBmb250LXdlaWdodDogYm9sZDsgbWFyZ2luLWJvdHRvbTogMWVtOyB9CgouZ3NjLWNvbnRyb2wtc2VhcmNoYm94LW9ubHkgeyB3aWR0aDogMThlbTsgfQoKLmdzYy1jb250cm9sLXNlYXJjaGJveC1vbmx5IC5nc2Mtc2VhcmNoLWJ1dHRvbiBzdmcgeyBkaXNwbGF5OiBub25lOyB9CgouZ3NjLWNvbnRyb2wtc2VhcmNoYm94LW9ubHkgYnV0dG9uLmdzYy1zZWFyY2gtYnV0dG9uIHsKCWJhY2tncm91bmQtaW1hZ2U6IHVybCgvaW1hZ2VzL2dvLXNlYXJjaC5wbmcpOwoJYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKCWJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OwoJYm9yZGVyOiAwOwoJd2lkdGg6IDE1cHg7CgloZWlnaHQ6IDE1cHg7Cn0KCi5nc2MtY29udHJvbC1zZWFyY2hib3gtb25seSBidXR0b24uZ3NjLXNlYXJjaC1idXR0b246aG92ZXIgewoJYmFja2dyb3VuZC1pbWFnZTogdXJsKC9pbWFnZXMvZ28tc2VhcmNoLnBuZyk7Cgl0cmFuc2Zvcm06IHNjYWxlKDEuMSk7CgliYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKCWJvcmRlcjogMDsKfQoKI3RhYjZkaXYgdGFibGUgdGQgeyB3aGl0ZS1zcGFjZTogbm93cmFwOyB9Cgo8L3N0eWxlPgoKPGRpdiBjbGFzcz0ic2VhcmNoIj48ZGl2IGNsYXNzPSJzZWFyY2gtY250ciI+PGRpdiBzdHlsZT0idmVydGljYWwtYWxpZ246IHRvcDsgcGFkZGluZy10b3A6IDAuNWVtOyI+PHNwYW4gY2xhc3M9InNlYXJjaC1sYmwiPlNlYXJjaDo8L3NwYW4+PC9kaXY+Jm5ic3A7Jm5ic3A7Jm5ic3A7PGRpdiBjbGFzcz0iZ2NzZS1zZWFyY2hib3gtb25seSIgZGF0YS1yZXN1bHRzVXJsPSIvVHJhZGVyLmFzcHg/aWQ9U2l0ZVNlYXJjaFJlc3VsdHMiPjwvZGl2PjwvZGl2PjwvZGl2PgoKPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoKJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7CiAgICB2YXIgY3ggPSAnMDExMzkyODc2MzE2ODMzODUyMTQ1OnFydno5YW93OThrJzsKICAgIHZhciBnY3NlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7CiAgICBnY3NlLnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0JzsKICAgIGdjc2UuYXN5bmMgPSB0cnVlOwogICAgZ2NzZS5zcmMgPSAnaHR0cHM6Ly9jc2UuZ29vZ2xlLmNvbS9jc2UuanM/Y3g9JyArIGN4OwogICAgdmFyIHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2NyaXB0JylbMF07CiAgICBzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGdjc2UsIHMpOwp9LDApCjwvc2NyaXB0PgoKIAoJCgogICAgICAgICAgICAgICA8IS0tCjxkaXYgY2xhc3M9ImFkNzI4eDkwIiBpZD0ibWFzdGhlYWRCYW5uZXIiIHJ1bmF0PSJzZXJ2ZXIiPgogICAgCgk8aWZyYW1lIG5hbWU9Im1hc3RoZWFkQmFubmVyaUZyYW1lIiBpZD0ibWFzdGhlYWRCYW5uZXJpRnJhbWUiIHdpZHRoPSI3MjgiIGhlaWdodD0iOTAiIHNyYz0iaHR0cDovL3d3dy5uYXNkYXF0cmFkZXIuY29tL2NvbnRlbnQvaW1hZ2VzL2Fkcy9hZHJvdGF0b3IuaHRtbCIgZnJhbWVib3JkZXI9IjAiIHNjcm9sbGluZz0ibm8iID48L2lmcmFtZT4KCTwvZGl2Pi0tPgoKIAkJIDxkaXYgaWQ9ImNvbnRlbnQiIHN0eWxlPSJjbGVhcjogYm90aDsgaGVpZ2h0OiBhdXRvOyBwYWRkaW5nLWJvdHRvbTogMTBweDsgbWFyZ2luLWxlZnQ6IC0xMHB4Ij4KPCEtLSA8ZGl2IGlkPSJuZXdzTWFycXVlZSI+CjxzY3JpcHQgdHlwZT10ZXh0L2phdmFzY3JpcHQgbGFuZ3VhZ2U9amF2YXNjcmlwdD5GbGV4TmV3cygiTmV3c1RpY2tlciIsICJOZXdzVHlwZT10cmFkZXImQmFja2dyb3VuZD0weGZmZmZmZiZGb3JlZ3JvdW5kPTB4MDA2NjllJnRleHRMZW5ndGg9NTAmU2VydmljZVVSTD1odHRwOi8vd3d3Lm5hc2RhcXRyYWRlci5jb20vZGF0YWhhbmRsZXJzL25ld3NtYXJxdWVlLmFzaHg/dHlwZT10cmFkZXIiKTs8L3NjcmlwdD4gCTwvZGl2PiAtLT4JPC9kaXY+CgpkAgQPFgIfAQWG8AI8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoubWlkZGxlY29sIAp7CiAgIHdpZHRoOjcyMHB4ICFpbXBvcnRhbnQ7CiAgIGJvcmRlci1sZWZ0Om5vbmUgIWltcG9ydGFudDsKfSAKCi5zdWJ0YWJfdG9wIHsgIHBhZGRpbmc6MTBweDsgfQoKLnN1YnRhYl90b3AgdGFibGUgeyAgd2lkdGg6NTQwcHggIWltcG9ydGFudDsgfQoKLnN1YnRhYl90b3AgdGFibGUgdGQgeyAgd2lkdGg6MTgwcHg7IH0KCi5nZW5UYWJsZSB0YWJsZSB0ZC5zdWJ0YWJfb24gCnsKICAgZm9udC13ZWlnaHQ6Ym9sZDsKICAgYmFja2dyb3VuZDojZWNmM2Y5IHVybCgvaW1hZ2VzL3N1YnRhYl9vbl9iZy5wbmcpIHRvcCBsZWZ0OwogICBiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7Cn0KCi5nZW5UYWJsZSB0YWJsZSB0ZC5zdWJ0YWJfb24gYSAKewogICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgIGxlZnQ6MjBweDsKICAgdGV4dC1kZWNvcmF0aW9uOm5vbmU7CiAgIGNvbG9yOiMwMDVCN0Y7Cn0KCi5nZW5UYWJsZSB0YWJsZSB0ZC5zdWJ0YWJfb24gYTpob3ZlciB7ICAgY29sb3I6IzAwNUI3RjsgfQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoKI2hvbWV0b3B0YWJzIAp7CiAgICAgIGZsb2F0OmxlZnQ7CiAgICAgIHdpZHRoOjcxNXB4OwogICAgICBwb3NpdGlvbjphYnNvbHV0ZTsKICAgICAgbGVmdDowcHg7CiAgICAgIHRvcDowcHg7CiAgICAgIGZvbnQtc2l6ZTouOWVtOwogICAgICBsaW5lLWhlaWdodDoxMnB4OyAgICAgCn0KCiNob21ldG9wdGFicyB1bCAKewogICAgICBtYXJnaW46MDsKICAgICAgcGFkZGluZzowOwogICAgICBsaXN0LXN0eWxlOm5vbmU7Cn0KCiNob21ldG9wdGFicyBsaSAKewogICAgICBmbG9hdDpsZWZ0OwogICAgICBiYWNrZ3JvdW5kOnVybCgvaW1hZ2VzL2hvbWV0b3B0YWJzX2xlZnQucG5nKSBuby1yZXBlYXQgbGVmdCB0b3A7CiAgICAgIG1hcmdpbjowOwogICAgICBwYWRkaW5nOjBweCAwcHggMHB4IDEwcHg7CiAgICAgIGxpc3Qtc3R5bGUtdHlwZTpub25lOwogICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cn0KCiNob21ldG9wdGFicyBhIAp7CiAgICAgIGZsb2F0OmxlZnQ7CiAgICAgIGRpc3BsYXk6YmxvY2s7CiAgICAgIGJhY2tncm91bmQ6IHVybCgvaW1hZ2VzL3RvcHRhYnNfcmlnaHQucG5nKSBuby1yZXBlYXQgcmlnaHQgdG9wOwogICAgICBwYWRkaW5nOjdweCAxNHB4IDZweCAxcHg7CiAgICAgIHRleHQtZGVjb3JhdGlvbjpub25lOwogICAgICBmb250LXdlaWdodDpib2xkOwogICAgICBjb2xvcjojMWQ0ZDgyOwp9CgojaG9tZXRvcHRhYnMgPiB1bCBhIHt3aWR0aDphdXRvO30KCiAgICAvKiBDb21tZW50ZWQgQmFja3NsYXNoIEhhY2sgaGlkZXMgcnVsZSBmcm9tIElFNS1NYWMgXCovCiAgICAjaG9tZXRvcHRhYnMgYSB7ZmxvYXQ6bm9uZTt9CiAgICAvKiBFbmQgSUU1LU1hYyBoYWNrICovCgojaG9tZXRvcHRhYnMgYTpob3ZlciB7ICBjb2xvcjojMWQ0ZDgyOyAgfQoKI2hvbWV0b3B0YWJzIC5vbiAKewogICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTI4cHg7CiAgICAgIGJvcmRlci13aWR0aDowOwogICAgICBwYWRkaW5nOjAgMCAwIDM2cHg7Cn0KCiAgICAgIAojaG9tZXRvcHRhYnMgLm9uIGEgCnsKICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjoxMDAlIC0yOHB4OwogICAgICBwYWRkaW5nLWJvdHRvbTo2cHg7CiAgICAgIGNvbG9yOiMxZDRkODI7Cn0KCiNob21ldG9wdGFicyBsaTpob3ZlciwgI3RvcHRhYnMgbGk6aG92ZXIgYSAKewogICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOjAlIC0yOHB4OwogICAgICBjb2xvcjojMWQ0ZDgyOwogICAgICBjdXJzb3I6IHBvaW50ZXIKfQoKI2hvbWV0b3B0YWJzIGxpOmhvdmVyIGEgCnsKICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjoxMDAlIC0yOHB4OwogICAgICBjdXJzb3I6IHBvaW50ZXIKfSAgICAgIAo8L3N0eWxlPgoKPGlmcmFtZSBzcmM9Ii9zbmlwcGV0cy9zbGlkZXJfaG9tZS5odG1sIiBzdHlsZT0id2lkdGg6NzQwcHg7aGVpZ2h0OjE4MHB4O21hcmdpbi1sZWZ0Oi0xOHB4O3BhZGRpbmctdG9wOjRweCIgZnJhbWVib3JkZXI9IjAiIHNjcm9sbGluZz0ibm8iPgo8L2lmcmFtZT4KCgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CmZ1bmN0aW9uIHRhYjVTdGFydCgpCnsKICAgIEdldFBITFhUb3AxKCk7CiAgICBHZXRQSExYVG9wMigpOwogICAgR2V0UEhMWFRvcDMoKTsKfQoKZnVuY3Rpb24gdGFiNVN0b3AoKQp7CiAgICBTdG9wUEhMWFRvcDEoKTsKICAgIFN0b3BQSExYVG9wMigpOwogICAgU3RvcFBITFhUb3AzKCk7Cn0KCmZ1bmN0aW9uIHNob3dQSExYKGluc3RhbmNlKQp7CiAgICBzd2l0Y2ggKGluc3RhbmNlKQogICAgewogICAgICAgIGNhc2UgIjEiOgogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnUEhMWDEnKS5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1BITFgyJykuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1BITFgzJykuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N1YnRhYl8xJykuY2xhc3NOYW1lID0gInN1YnRhYl9vbiI7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdWJ0YWJfMicpLmNsYXNzTmFtZSA9ICJzdWJ0YWJfb2ZmIjsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N1YnRhYl8zJykuY2xhc3NOYW1lID0gInN1YnRhYl9vZmYiOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICIyIjoKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1BITFgxJykuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1BITFgyJykuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdQSExYMycpLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdWJ0YWJfMScpLmNsYXNzTmFtZSA9ICJzdWJ0YWJfb2ZmIjsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N1YnRhYl8yJykuY2xhc3NOYW1lID0gInN1YnRhYl9vbiI7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdWJ0YWJfMycpLmNsYXNzTmFtZSA9ICJzdWJ0YWJfb2ZmIjsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiMyI6CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdQSExYMScpLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdQSExYMicpLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdQSExYMycpLnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOwogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3VidGFiXzEnKS5jbGFzc05hbWUgPSAic3VidGFiX29mZiI7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdWJ0YWJfMicpLmNsYXNzTmFtZSA9ICJzdWJ0YWJfb2ZmIjsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N1YnRhYl8zJykuY2xhc3NOYW1lID0gInN1YnRhYl9vbiI7CiAgICAgICAgICAgIGJyZWFrOwogICAgfQp9Cjwvc2NyaXB0PgoKPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ic25pcHBldHMvanMvSG9tZVBhZ2VUYWJzLmpzIj48L3NjcmlwdD4KCjxkaXYgc3R5bGU9Im1hcmdpbi10b3A6MTBweDttYXJnaW4tbGVmdDotNXB4O3Bvc2l0aW9uOnJlbGF0aXZlO2hlaWdodDo3MDBweDsiPgo8ZGl2IGlkPSJob21ldG9wdGFicyIgc3R5bGU9InBvc2l0aW9uOnJlbGF0aXZlIj4KPHVsPgo8bGkgY2xhc3M9Im9uIiBvbmNsaWNrPSJjdXJyZW50KCd0YWI2JykiIGlkPSJ0YWI2Ij48YSBzdHlsZT0iZGlzcGxheTogYWN0aXZlIj5NYXJrZXQgVm9sPC9zcGFuPjwvYT48L2xpPgo8bGkgb25jbGljaz0iY3VycmVudCgndGFiNCcpIiBpZD0idGFiNCI+PGE+VG9wIE1hdGNoZWQ8L2E+IDwvbGk+CjxsaSBvbmNsaWNrPSJjdXJyZW50KCd0YWIyJykiIGlkPSJ0YWIyIj48YT5Ub3AgTWF0Y2hlZCBCWDwvYT4gPC9saT4KPGxpIG9uY2xpY2s9ImN1cnJlbnQoJ3RhYjcnKSIgaWQ9InRhYjciPjxhPlRvcCBNYXRjaGVkIFBTWDwvYT4gPC9saT4KPCEtLTxsaSBvbmNsaWNrPSJjdXJyZW50KCd0YWIzJykiIGlkPSJ0YWIzIj48YT5CWCBPcHRpb25zPC9hPiA8L2xpPgo8bGkgb25jbGljaz0iY3VycmVudCgndGFiMScpIiBpZD0idGFiMSI+PGE+Tk9NPC9hPiA8L2xpPgo8bGkgb25jbGljaz0iY3VycmVudCgndGFiNScpIiBpZD0idGFiNSI+PGE+UEhMWDwvYT4gPC9saT48L3VsPi0tPgo8L2Rpdj4KCjxkaXYgY2xhc3M9ImJsb2NrIiBpZD0idGFiNmRpdiIgc3R5bGU9ImRpc3BsYXk6IGJsb2NrOyB6LWluZGV4OiAxOyBvdmVyZmxvdzogYXV0bzsgaGVpZ2h0OiA2OTBweDsgd2lkdGg6IDcxNXB4OyBib3JkZXItcmlnaHQ6IDFweCAjRTlFOUVBOyBib3JkZXItbGVmdDogMXB4ICNFOUU5RUE7IGJvcmRlci1ib3R0b206IDFweCAjRTlFOUVBOyBib3JkZXItdG9wOiAwcHg7ICovIG1hcmdpbi10b3A6IDVweDsgbWFyZ2luLWxlZnQ6IC0ycHgiPjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InJwY2NsaWVudC5heGQiPjwvc2NyaXB0Pg0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iL2pzL3V0aWxpdGllcy5qcyI+PC9zY3JpcHQ+DQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIvc25pcHBldHMvanMvanF1ZXJ5LXVpLTEuMTIuMS5taW4uanMiPjwvc2NyaXB0Pg0KPGxpbmsgaHJlZj0iL3RlbXBsYXRlX3N0eWxlcy9tZHRfc3R5bGVfdGFicy5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIC8+DQo8bGluayBocmVmPSIvY3NzL2pxdWVyeS11aS10aGVtZXMtMS44LjIvdGhlbWVzL3Ntb290aG5lc3MvanF1ZXJ5LXVpLmNzcyIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KICAgIGRpdi51aS1kYXRlcGlja2VyIHsNCiAgICBmb250LXNpemU6IDY2JTsNCn0NCg0KPC9zdHlsZT4NCg0KPGRpdiBpZD0ibWR0Ij4NCiA8dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBjbGFzcz0idGFibGVTZXR0aW5nc0hlYWRlciI+DQogCSAgPHRyPg0KIAkgICAgPHRkIHN0eWxlPSJwb3NpdGlvbjogcmVsYXRpdmU7IHdpZHRoOiAxNTBweDsiPjxoMT5VLlMuIE1hcmtldCBWb2x1bWU8L2gxPg0KIAkJPC90ZD4NCiAJICAgICA8dGQ+PGEgaHJlZj0iL3RyYWRlci5hc3B4P2lkPUZ1bGxWb2x1bWVTdW1tYXJ5Ij48Yj5GdWxsIE1hcmtldCBWb2x1bWUgUGFnZTwvYj48L2E+PC90ZD4NCiAJICA8L3RyPg0KIAkgIDx0cj48dGQgY2xhc3M9ImJ0bkNob29zZURhdGUiIHN0eWxlPSJwb3NpdGlvbjogcmVsYXRpdmU7IGZsb2F0OiBsZWZ0OyB0ZXh0LWFsaWduOiBsZWZ0Ij48aW5wdXQgaWQ9ImNob29zZURhdGUiIHNpemU9IjEwIiBjbGFzcz0iZHJvcERvd25DdXN0b20iIHRpdGxlPSJDaG9vc2UgYW5vdGhlciBkYXRlIiB0eXBlPSJ0ZXh0Ij48L3RkPjx0ZD4mbmJzcDs8L3RkPjwvdHI+DQogIDwvdGFibGU+DQogIDx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIGNsYXNzPSJ0YWJsZVNldHRpbmdzIj4NCgk8dHI+DQogICAgPHRkPjxicj4NCgkgIDxzcGFuIGlkPSJ0YWJzaGFyZXMiIGNsYXNzPSJ0YWJzSW50ZXJuYWwiIG9uY2xpY2s9InNldFVuaXRzKCdzaGFyZXMnKTsiPjxhIGhyZWY9IiMiPlZvbHVtZTwvYT48L3NwYW4+DQoJICA8c3BhbiBpZD0idGFidHJhZGVzIiBjbGFzcz0idGFic0ludGVybmFsIiBvbmNsaWNrPSJzZXRVbml0cygndHJhZGVzJyk7Ij48YSBocmVmPSIjIj5UcmFkZXM8L2E+PC9zcGFuPg0KCSAgPHNwYW4gaWQ9InRhYmRvbGxhclZvbCIgY2xhc3M9InRhYnNJbnRlcm5hbCIgb25jbGljaz0ic2V0VW5pdHMoJ2RvbGxhclZvbCcpOyI+PGEgaHJlZj0iIyI+RG9sbGFyIFZvbHVtZTwvYT48L3NwYW4+DQoJICA8c3BhbiBjbGFzcz0iYnRuU2V0RGVmYXVsdCIgc3R5bGU9Im1hcmdpbi1sZWZ0OjEwcHgiIG9uY2xpY2s9InNldERlZmF1bHRVbml0cygpOyI+PGEgaHJlZj0iIyI+U2V0IERlZmF1bHQgVGFiPC9hPjwvc3Bhbj4NCiAgICA8L3RkPg0KICAgIDx0ZCBzdHlsZT0id2lkdGg6IDExNXB4OyB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tIj4NCgk8c2VsZWN0IG5hbWU9InNlbGVjdCIgaWQ9InNlbGVjdCIgY2xhc3M9ImRyb3BEb3duQ3VzdG9tIiBzdHlsZT0icG9zaXRpb246IHJlbGF0aXZlOyBtYXJnaW4tdG9wOiAxMHB4OyBib3JkZXI6MXB4IHNvbGlkICNDQ0NDQ0M7IHBhZGRpbmctYm90dG9tOiAwcHgiIG9uY2hhbmdlPSJnZXREb3dubG9hZCgpOyI+DQoJICA8b3B0aW9uIHNlbGVjdGVkIHZhbHVlPSIiPkRvd25sb2FkPC9vcHRpb24+DQogICAgICA8b3B0aW9uIHZhbHVlPSJkYWlseSI+TW9zdCBSZWNlbnQgRGF5PC9vcHRpb24+DQogICAgICA8b3B0aW9uIHZhbHVlPSIzMGRheXMiPlBhc3QgMzAgRGF5czwvb3B0aW9uPg0KICAgICAgPC9zZWxlY3Q+IDwhLS08c3BhbiBjbGFzcz0ibWFya2V0Vm9sdW1lR3JhcGhzQnRuIj48YSBocmVmPSIjIj5NYXJrZXQgVm9sdW1lIEdyYXBoczwvYT48L3NwYW4+LS0+PC90ZD4NCgkgICAgPC90cj4NCjwvdGFibGU+DQo8ZGl2IGlkPSJlcXVpdGllcyI+DQogIDxkaXYgY2xhc3M9InNlY3Rpb25faGVhZGVyIj4NCiAgICA8aDU+RXF1aXRpZXMgTWFya2V0IDxzcGFuIGlkPSJlcXVpdGllc0xhYmVsIj5Wb2x1bWU8L3NwYW4+PC9oNT4NCiAgPC9kaXY+DQogPGRpdiBpZD0iZXF1aXRpZXNUYWIiPg0KIDwvZGl2Pg0KIDx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIGNsYXNzPSJwcmludEJveFNtYWxsIj4NCiAgPHRyPg0KICAgIDx0ZD5EYXRhIGlzIHVwZGF0ZWQgZXZlcnkgMSBtaW51dGUuIDxzcGFuIGNsYXNzPSJzbWFsbEdyZWVuVGV4dCI+TGFzdCBVcGRhdGUgPHNwYW4gaWQ9ImVxdWl0aWVzVHMiPjExLzA0LzIwMTEgMTE6NDQ8L3NwYW4+PC9zcGFuPjwvdGQ+DQogICAgPHRkIGFsaWduPSJyaWdodCI+PHNwYW4gb25jbGljaz0icHJpbnRFcXVpdGllc0dyaWQodW5pdCk7Ij48YSBocmVmPSIjIj48aW1nIHNyYz0iL2ltYWdlcy9wcmludGVyMi5wbmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgLz48L2E+PC9zcGFuPjwvdGQ+DQogIDwvdHI+DQo8L3RhYmxlPg0KPC9kaXY+DQo8dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBjbGFzcz0idGFibGVTZXR0aW5nc0hlYWRlciIgIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+DQogCSAgPHRyPg0KIAkgICAgPHRkIHN0eWxlPSJwb3NpdGlvbjogcmVsYXRpdmU7IHdpZHRoOiAxNTBweDsiPiZuYnNwOzwvdGQ+DQogCSAgICAgPHRkPjxicj48YSBocmVmPSIvVHJhZGVyLmFzcHg/aWQ9T3B0aW9uc1ZvbHVtZVN1bW1hcnkiPjxiPkZ1bGwgT3B0aW9ucyBNYXJrZXQgVm9sdW1lIFBhZ2U8L2I+PC9hPjxicj48L3RkPg0KIAkgIDwvdHI+PC90YWJsZT4NCiA8ZGl2IGNsYXNzPSJzZWN0aW9uX2hlYWRlcl9ibHVlIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPg0KICAgIDxoNT5PcHRpb25zIE1hcmtldCBWb2x1bWU8L2g1Pg0KICA8L2Rpdj4NCiAgPGRpdiBpZD0ib3B0aW9uc1RhYiIgIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+DQogIDwvZGl2Pg0KICA8dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBjbGFzcz0icHJpbnRCb3hTbWFsbCIgIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+DQogIDx0cj4NCiAgICA8dGQ+RGF0YSBpcyB1cGRhdGVkIGV2ZXJ5IDEgbWludXRlIGFuZCBtYXkgYmUgZGVsYXllZCBhdCBsZWFzdCAxMCBtaW51dGVzLiA8c3BhbiBjbGFzcz0ic21hbGxHcmVlblRleHQiPkxhc3QgVXBkYXRlIDxzcGFuIGlkPSJvcHRpb25zVHMiPjExLzA0LzIwMTEgMTE6NDQ8L3NwYW4+PC9zcGFuPjwvdGQ+DQogICAgPHRkIGFsaWduPSJyaWdodCI+PHNwYW4gb25jbGljaz0icHJpbnRPcHRpb25zR3JpZCgpOyI+PGEgaHJlZj0iIyI+PGltZyBzcmM9Ii9pbWFnZXMvcHJpbnRlcjIucG5nIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIC8+PC9hPjwvc3Bhbj48L3RkPg0KICA8L3RyPg0KPC90YWJsZT4NCg0KPC9kaXY+DQo8c2NyaXB0Pg0KDQoJdmFyIHVuaXQgPSAnc2hhcmVzJzsNCg0KCXZhciBkYXRhRGF0ZSA9IG5ldyBEYXRlKCk7DQoNCglmdW5jdGlvbiBnZXREb3dubG9hZCgpIHsNCgkJdmFyIGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2VsZWN0Jyk7DQoJCWlmIChlLnZhbHVlID09ICcnKQ0KCQkJcmV0dXJuOw0KCQl2YXIgZmlsZW5hbWUgPSBlLnZhbHVlOw0KCQlpZiAodW5pdCAhPSAnc2hhcmVzJykNCgkJCWZpbGVuYW1lICs9IHVuaXQ7DQoJCWZpbGVuYW1lICs9ICcuY3N2JzsNCgkJdmFyIHVybCA9ICcvZHluYW1pYy9NYXJrZXRTdGF0cy8nICsgZmlsZW5hbWU7DQoJCXdpbmRvdy5vcGVuKHVybCk7DQogICAgfQ0KDQoJZnVuY3Rpb24gcHJpbnRFcXVpdGllc0dyaWQodmFsKSB7DQoNCiAgICAgICAgdmFyIHBvcHVwID0gd2luZG93Lm9wZW4oIi9zbmlwcGV0cy9tYXJrZXR2b2xwcmludC5odG1sP3R5cGU9IiArIHVuaXQgKyAiJmRhdGFEYXRlPSIgKyBlbmNvZGVVUklDb21wb25lbnQoJC5kYXRlcGlja2VyLmZvcm1hdERhdGUoJ21tL2RkL3l5JyxkYXRhRGF0ZSkpKTsNCiAgICB9DQoNCglmdW5jdGlvbiBwcmludE9wdGlvbnNHcmlkKCkgew0KDQogICAgICAgIHZhciBwb3B1cCA9IHdpbmRvdy5vcGVuKCIvc25pcHBldHMvbWFya2V0dm9sb3B0aW9uc3ByaW50Lmh0bWwiKTsNCiAgICB9DQoJDQoJZnVuY3Rpb24gdGFiNlN0b3AoKQ0KCXsNCgkJU3RvcE1hcmtldFZvbCgpOw0KCX0NCglmdW5jdGlvbiB0YWI2U3RhcnQoKQ0KCXsNCgkJR2V0TWFya2V0Vm9sKCk7DQoJfQ0KCQ0KCWZ1bmN0aW9uIFN0b3BNYXJrZXRWb2woKSB7DQoJCWNsZWFyVGltZW91dCh3aW5kb3cuSG9tZVBhZ2VUaW1lcnNbJ0RhaWx5Vm9sdW1lVGltZXInXSk7DQoJfQ0KDQoJZnVuY3Rpb24gc2V0VW5pdHModmFsKSB7DQoJCXZhciB0YWIxID0gJ3RhYnNoYXJlcyc7DQoJCXZhciB0YWIyID0gJ3RhYnRyYWRlcyc7DQoJCXZhciB0YWIzID0gJ3RhYmRvbGxhclZvbCc7DQoJCXZhciBlcXVpdGllc0xhYmVsID0gJ2VxdWl0aWVzTGFiZWwnOw0KCQl2YXIgZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRhYjEpOw0KCQllLmNsYXNzTmFtZSA9ICd0YWJzSW50ZXJuYWwnOw0KCQllID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGFiMik7DQoJCWUuY2xhc3NOYW1lID0gJ3RhYnNJbnRlcm5hbCc7DQoJCWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0YWIzKTsNCgkJZS5jbGFzc05hbWUgPSAndGFic0ludGVybmFsJzsNCgkJZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YWInICsgdmFsKTsNCgkJZS5jbGFzc05hbWUgPSAndGFic0ludGVybmFsIHRhYnNJbnRlcm5hbENsaWNrZWQnOw0KCQllID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZXF1aXRpZXNMYWJlbCk7DQoJCWlmICh2YWwgPT0gJ3NoYXJlcycpDQoJCQllLmlubmVySFRNTCA9ICdWb2x1bWUnOw0KCQlpZiAodmFsID09ICd0cmFkZXMnKQ0KCQkJZS5pbm5lckhUTUwgPSAnVHJhZGVzJzsNCgkJaWYgKHZhbCA9PSAnZG9sbGFyVm9sJykNCgkJCWUuaW5uZXJIVE1MID0gJ0RvbGxhciBWb2x1bWUnOw0KICAgICAgdW5pdCA9IHZhbDsNCgkJU3RvcE1hcmtldFZvbCgpOw0KCQlHZXRNYXJrZXRWb2woKTsNCiAgICB9DQoNCglmdW5jdGlvbiBzZXREZWZhdWx0VW5pdHMoKSB7DQogICAgICAgIHNldENvb2tpZSgnTWFya2V0U2hhcmVEZWZhdWx0VW5pdHMnLHVuaXQsIDM2NSk7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gR2V0TWFya2V0Vm9sKCkgew0KDQogICAgICAgIHZhciBzOw0KICAgICAgICB2YXIgczI7DQoJCXZhciBtZHkgPSAkLmRhdGVwaWNrZXIuZm9ybWF0RGF0ZSgnbW0vZGQveXknLGRhdGFEYXRlKTsNCg0KICAgICAgICBzMiA9ICdlcXVpdGllc1RhYic7DQogICAgICAgIHZhciBlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoczIpOw0KICAgICAgICBpZiAoZSAhPSAgbnVsbCkgZS5pbm5lckhUTUwgPSAidXBkYXRpbmcuLi4uIjsNCgkJczIgPSAnb3B0aW9uc1RhYic7DQogICAgICAgIGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChzMik7DQogICAgICAgIGlmIChlICE9ICBudWxsKSBlLmlubmVySFRNTCA9ICJ1cGRhdGluZy4uLi4iOw0KICAgICAgICBTZXJ2ZXIuQkxfTWFya2V0U2hhcmUuR2V0VXBkYXRlTWFya3VwKGNiX0dldFVwZGF0ZU1hcmt1cCwgJ0RFU0tUT1AnLCB1bml0LCBtZHkpOw0KCQlTZXJ2ZXIuQkxfTWFya2V0U2hhcmUuR2V0T3B0aW9uc1VwZGF0ZU1hcmt1cChjYl9HZXRPcHRpb25zVXBkYXRlTWFya3VwLCAnREVTS1RPUCcpOw0KDQogICAgICAgIHdpbmRvdy5Ib21lUGFnZVRpbWVyc1snRGFpbHlWb2x1bWVUaW1lciddID0gc2V0VGltZW91dCgnR2V0TWFya2V0Vm9sKCknLCAxMDAwKjYwKTsNCg0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGNiX0dldFVwZGF0ZU1hcmt1cChyLCBlKXsNCiAgICAgICAgaWYgKGUpIHJldHVybiBhbGVydChlLm1lc3NhZ2UpOw0KCQl2YXIgYSA9IHIuc3BsaXQoJ3wnKTsNCiAgICAgICAgdmFyIGQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXF1aXRpZXNUYWInKTsNCiAgICAgICAgaWYgKGQgIT0gbnVsbCkNCiAgICAgICAgICAgIGQuaW5uZXJIVE1MID0gYVsxXTsNCgkJZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlcXVpdGllc1RzJyk7DQogICAgICAgIGlmIChkICE9IG51bGwpDQogICAgICAgICAgICBkLmlubmVySFRNTCA9IGFbMF07DQoNCiAgICB9DQoNCglmdW5jdGlvbiBjYl9HZXRPcHRpb25zVXBkYXRlTWFya3VwKHIsIGUpew0KICAgICAgICBpZiAoZSkgcmV0dXJuIGFsZXJ0KGUubWVzc2FnZSk7DQoJCXZhciBhID0gci5zcGxpdCgnfCcpOw0KICAgICAgICB2YXIgZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdvcHRpb25zVGFiJyk7DQogICAgICAgIGlmIChkICE9IG51bGwpDQogICAgICAgICAgICBkLmlubmVySFRNTCA9IGFbMV07DQoJCWQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnb3B0aW9uc1RzJyk7DQogICAgICAgIGlmIChkICE9IG51bGwpDQogICAgICAgICAgICBkLmlubmVySFRNTCA9IGFbMF07DQoNCiAgICB9DQoNCgl2YXIgYXZhaWxhYmxlRGF0ZXMgPSBbXTsNCg0KZnVuY3Rpb24gaW5pdEF2YWlsYWJsZURhdGVzKCkgew0KCXZhciBkID0gJC5kYXRlcGlja2VyLmZvcm1hdERhdGUoJ21tL2RkL3l5JyxuZXcgRGF0ZSgpKTsNCglhdmFpbGFibGVEYXRlcy5wdXNoKGQpOw0KCXZhciB4ID0gU2VydmVyLkJMX01hcmtldFNoYXJlLkdldE1hcmtldFZvbHVtZURhdGVzKCk7DQoJdmFyIGk7DQoJdmFyIHh4Ow0KCWZvciAoaSA9IDA7IGkgPCB4Lmxlbmd0aDsgaSsrKQ0KCXsNCgkJeHggPSB4W2ldOw0KCQlhdmFpbGFibGVEYXRlcy5wdXNoKHh4LlZhbGlkRGF0ZSk7DQoJfQ0KfQ0KDQpmdW5jdGlvbiBhdmFpbGFibGUoZGF0ZSkgew0KICBtZHkgPSAkLmRhdGVwaWNrZXIuZm9ybWF0RGF0ZSgnbW0vZGQveXknLGRhdGUpOw0KICBpZiAoJC5pbkFycmF5KG1keSwgYXZhaWxhYmxlRGF0ZXMpID49IDApIHsNCiAgICByZXR1cm4gW3RydWUsIiIsIkNob29zZSJdOw0KICB9IGVsc2Ugew0KICAgIHJldHVybiBbZmFsc2UsIiIsIkludmFsaWQgRGF0ZSJdOw0KICB9DQp9DQoNCmZ1bmN0aW9uIG9uRGF0ZVNlbGVjdChkYXRlVGV4dCwgaW5zdCkNCnsNCglkYXRhRGF0ZSA9IG5ldyBEYXRlKGRhdGVUZXh0KTsNCglHZXRNYXJrZXRWb2woKTsNCn0NCmZ1bmN0aW9uIHNldERhdGVQaWNrZXIoKSB7DQogICQoJyNjaG9vc2VEYXRlJykuZGF0ZXBpY2tlcih7DQogIGFtcG06IHRydWUsDQogIHNob3dPbjogImJvdGgiLA0KICBidXR0b25JbWFnZTogIi9pbWFnZXMvY2FsZW5kYXJfMTZ4MTYuZ2lmIiwNCiAgYnV0dG9uSW1hZ2VPbmx5OiB0cnVlLA0KICBidXR0b25UZXh0OiAiQ2hvb3NlIGFub3RoZXIgZGF0ZSIsDQogIGJlZm9yZVNob3dEYXk6IGF2YWlsYWJsZSwNCiAgb25TZWxlY3Q6IG9uRGF0ZVNlbGVjdA0KICB9KTsNCn0NCg0KJChmdW5jdGlvbigpew0KICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjaG9vc2VEYXRlJykudmFsdWUgPSAkLmRhdGVwaWNrZXIuZm9ybWF0RGF0ZSgnbW0vZGQveXknLGRhdGFEYXRlKTsNCiAgICBzZXREYXRlUGlja2VyKCk7DQoJaW5pdEF2YWlsYWJsZURhdGVzKCk7DQoJdmFyIG15VW5pdCA9IGdldENvb2tpZSgnTWFya2V0U2hhcmVEZWZhdWx0VW5pdHMnKTsNCglpZiAobXlVbml0ID09IG51bGwgfHwgbXlVbml0ID09ICcnKQ0KCQlteVVuaXQgPSAnc2hhcmVzJzsNCgl3aW5kb3cuSG9tZVBhZ2VUaW1lcnM9IG5ldyBPYmplY3QoKTsNCgl3aW5kb3cuSG9tZVBhZ2VUaW1lcnMuRGFpbHlWb2x1bWVUaW1lciA9IG51bGw7DQoJc2V0VW5pdHMobXlVbml0KTsNCn0pOw0KDQo8L3NjcmlwdD4NCjwvZGl2Pgo8ZGl2IGNsYXNzPSJibG9jayIgaWQ9InRhYjRkaXYiIHN0eWxlPSJkaXNwbGF5OiBub25lOyB6LWluZGV4OiAxOyBvdmVyZmxvdzogYXV0bzsgaGVpZ2h0OiA0NzVweDsgd2lkdGg6IDcxNXB4OyBib3JkZXI6IDFweCBzb2xpZDsgKi9tYXJnaW4tdG9wOiA1cHg7Ij4gICAgPCEtLSBCZWdpbiBUb3BNYXRjaGVkLmh0bWwgLS0+DQogICAgPGRpdiBpZD0iZGl2VG9wTWF0Y2hlZCI+ICAgIA0KDQogPC9kaXY+DQoNCjxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQogICAgdmFyIGN1cnJlbnRWaWV3Ow0KDQogICAgZnVuY3Rpb24gc3dpdGNoVmlld1RvcE1hdGNoZWQodmFsKQ0KICAgIHsNCgkgICAgdmFyIGZyb207DQoJICAgIHZhciB0bzsNCg0KCSAgICBpZiAodmFsID09ICdhcycpDQoJICAgIHsNCgkJICAgIGZyb20gPSAnYWgnOw0KCQkgICAgdG8gPSAnYXMnOw0KCSAgICB9DQoJICAgIGVsc2UNCgkgICAgew0KCQkgICAgZnJvbSA9ICdhcyc7DQoJCSAgICB0byA9ICdhaCc7DQogICAgICAgIH0NCg0KICAgICAgICBjdXJyZW50VmlldyA9IHRvOw0KDQoJICAgIHZhciBlbG0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChmcm9tICsgJ0dyaWQnKTsNCgkgICAgZWxtLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7DQoNCgkgICAgZWxtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodG8gKyAnR3JpZCcpOw0KCSAgICBlbG0uc3R5bGUuZGlzcGxheSA9ICdibG9jayc7DQoNCgkgICAgZWxtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZnJvbSArICdEb3QnKTsNCgkgICAgZWxtLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7DQoNCgkgICAgZWxtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodG8gKyAnRG90Jyk7DQoJICAgIGVsbS5zdHlsZS5kaXNwbGF5ID0gJyc7DQoNCgkgICAgZWxtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZnJvbSArICdCdXR0b24nKTsNCgkgICAgZWxtLnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICd3aGl0ZSc7DQoNCgkgICAgZWxtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodG8gKyAnQnV0dG9uJyk7DQoJICAgIGVsbS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAnI0VDRjNGOSc7DQogICB9DQoJDQogICAgZnVuY3Rpb24gdGFiNFN0b3AoKQ0KCXsNCgkJVG9wTWF0Y2hlZFN0b3AoKTsNCiAgICB9DQoNCglmdW5jdGlvbiB0YWI0U3RhcnQoKQ0KCXsNCgkJVG9wTWF0Y2hlZEluaXQoKTsNCiAgICB9DQoNCglmdW5jdGlvbiBHZXRUb3BNYXRjaGVkKCkgDQogICAgew0KICAgICAgICB2YXIgczsNCiAgICAgICAgdmFyIHMyOw0KICAgICAgICBzMiA9ICdkaXZUb3BNYXRjaGVkJzsNCg0KICAgICAgICB2YXIgZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHMyKTsNCiAgICAgICAgaWYgKGUgIT0gbnVsbCkgZS5pbm5lckhUTUwgPSAidXBkYXRpbmcuLi4uIjsNCg0KICAgICAgICBTZXJ2ZXIuQkxfTmFzZGFxVG9wTWF0Y2hlZC5HZXRUb3BNYXRjaGVkTWFya3VwKGNiX0dldFRvcE1hdGNoZWQsICdUb3BNYXRjaGVkLmh0bWwnKTsNCiAgICAgICAgVG9wTWF0Y2hlZFN0YXJ0KCk7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gY2JfR2V0VG9wTWF0Y2hlZChyLCBlKQ0KICAgIHsNCiAgICAgICAgaWYgKGUpIHJldHVybiBhbGVydChlLm1lc3NhZ2UpOw0KICAgICAgICB2YXIgZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkaXZUb3BNYXRjaGVkJyk7DQogICAgICAgIGlmIChkICE9IG51bGwpDQogICAgICAgIHsgICBkLmlubmVySFRNTCA9IHI7DQoJCQlzd2l0Y2hWaWV3VG9wTWF0Y2hlZChjdXJyZW50Vmlldyk7DQoJCX0NCiAgICB9DQoNCg0KICAgIHZhciB0b3BNYXRjaGVkSW5pdERvbmUgPSBmYWxzZTsNCg0KCWZ1bmN0aW9uIFRvcE1hdGNoZWRTdGFydCgpDQoJew0KCSAgIHdpbmRvdy5Ib21lUGFnZVRpbWVyc1sndG9wTWF0Y2hlZFRpbWVyJ10gPSBzZXRUaW1lb3V0KCdHZXRUb3BNYXRjaGVkKCknLCAxMDAwKjYwKTsNCgl9DQoJDQoJZnVuY3Rpb24gVG9wTWF0Y2hlZEluaXQoKQ0KCXsJCQ0KCQlpZiAoIXRvcE1hdGNoZWRJbml0RG9uZSkNCgkJeyAgIGN1cnJlbnRWaWV3ID0gJ2FzJzsJCQkNCgkJCXRvcE1hdGNoZWRJbml0RG9uZSA9IHRydWU7DQoJCX0NCgkJR2V0VG9wTWF0Y2hlZCgpOw0KICAgIH0NCg0KCWZ1bmN0aW9uIFRvcE1hdGNoZWRTdG9wKCkNCgl7DQoJCWlmICh3aW5kb3cuSG9tZVBhZ2VUaW1lcnNbJ3RvcE1hdGNoZWRUaW1lciddKQ0KCQkJY2xlYXJUaW1lb3V0KHdpbmRvdy5Ib21lUGFnZVRpbWVyc1sndG9wTWF0Y2hlZFRpbWVyJ10pOw0KCX0NCjwvc2NyaXB0Pg0KDQoNCjx0YWJsZSBzdHlsZT0id2lkdGg6NTQwcHg7cGFkZGluZy10b3A6MTVweDtwYWRkaW5nLWxlZnQ6NXB4OyI+DQogICAgPHRyPjx0ZCBjbGFzcz0iZm9vdG5vdGUiIHN0eWxlPSJ0ZXh0LWFsaWduOmxlZnQ7cGFkZGluZy10b3A6OHB4O2ZvbnQtc2l6ZTo5cHg7Zm9udC13ZWlnaHQ6Ym9sZDsiPg0KICAgICAgICAgICAgRGF0YSBpcyB1cGRhdGVkIGV2ZXJ5IG1pbnV0ZS4NCiAgICAgICAgICAgIDxwIHN0eWxlPSJwYWRkaW5nLXRvcDo3cHg7Ij5SZWZlciB0byA8YSBocmVmPSJodHRwOi8vd3d3Lm5hc2RhcXRyYWRlci5jb20vY29udGVudC9NYXJrZXRTdGF0aXN0aWNzL01hcmtldFNoYXJlL3Rlcm1zLnBkZiI+TkFTREFRIE1hcmtldCBTaGFyZSBUZXJtaW5vbG9neTwvYT4gZm9yIG1vcmUgaW5mb3JtYXRpb24gcmVnYXJkaW5nIE1hdGNoZWQgSGFuZGxlZCB2b2x1bWUuPC9wPg0KICAgICAgICA8L3RkPg0KICAgIDwvdHI+DQo8L3RhYmxlPg0KPCEtLSBFbmQgVG9wTWF0Y2hlZC5odG1sIC0tPg0KPC9kaXY+CjxkaXYgY2xhc3M9ImJsb2NrIiBpZD0idGFiMmRpdiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7IHotaW5kZXg6IDE7IG92ZXJmbG93OiBhdXRvOyBoZWlnaHQ6IDMyNXB4OyB3aWR0aDogNzE1cHg7IGJvcmRlcjogMXB4IHNvbGlkOyAqLyBtYXJnaW4tdG9wOiA1cHg7Ij48IS0tIEJlZ2luIEJYTWFya2V0U2hhcmUuaHRtbCAtLT4NCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii9zbmlwcGV0cy9qcy9CWE1hcmtldFZvbHVtZS5qcyIgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPjwvc2NyaXB0Pg0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iL2pzL3ZhbGlkYXRlLmpzIiBsYW5ndWFnZT0iamF2YXNjcmlwdCI+PC9zY3JpcHQ+DQoNCjxkaXYgc3R5bGU9InBhZGRpbmctbGVmdDo1cHg7cGFkZGluZy1yaWdodDo1cHg7Ij4NCgk8aDIgc3R5bGU9ImZvbnQtc2l6ZToxMnB4OyI+DQogICAgICAgIDx0YWJsZT4NCgkJICAgIDx0cj48dGQgc3R5bGU9IndpZHRoOjMxNXB4O3doaXRlLXNwYWNlOm5vd3JhcDsiPk5BU0RBUSBCWCAtIFRvcCBMaXN0IGJ5IE1hdGNoZWQgVm9sdW1lPC90ZD4NCgkJCSAgICA8dGQgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O3dpZHRoOjM5MHB4O3RleHQtYWxpZ246cmlnaHQiPjxkaXYgaWQ9ImFzb2YiPjwvZGl2PjwvdGQ+DQoJCSAgICA8L3RyPg0KCQk8L3RhYmxlPg0KCTwvaDI+DQoNCiAgICA8ZGl2Pg0KICAgICAgICA8dGFibGU+DQogICAgICAgICAgICA8dHI+PHRkPjxkaXYgY2xhc3M9ImdlblRhYmxlSG9tZSI+DQogICAgICAgICAgICAgICAgICAgICAgICA8dGFibGUgc3R5bGU9IndpZHRoOjE3MHB4O2ZvbnQtc2l6ZToxMXB4OyI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPjx0aCBjb2xzcGFuPSIyIj5UYXBlIEE8L3RoPjwvdHI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPjx0aCBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0O2ZvbnQtd2VpZ2h0OmJvbGQ7Ij5TeW1ib2w8L3RoPiAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodDtmb250LXdlaWdodDpib2xkOyI+TWF0Y2hlZCBTaGFyZXM8L3RoPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPjx0ZD48ZGl2IGlkPSJ0YXBlQXN5bWJvbDEiIHN0eWxlPSJwYWRkaW5nLWxlZnQ6NnB4OyI+PC9kaXY+PC90ZD4NCgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0Ij48ZGl2IGlkPSJ0YXBlQXNoYXJlczEiPjwvZGl2PjwvdGQ+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+PHRkPjxkaXYgaWQ9InRhcGVBc3ltYm9sMiIgc3R5bGU9InBhZGRpbmctbGVmdDo2cHg7Ij48L2Rpdj48L3RkPg0KCSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQiPjxkaXYgaWQ9InRhcGVBc2hhcmVzMiI+PC9kaXY+PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+PHRkPjxkaXYgaWQ9InRhcGVBc3ltYm9sMyIgc3R5bGU9InBhZGRpbmctbGVmdDo2cHg7Ij48L2Rpdj48L3RkPg0KCSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQiPjxkaXYgaWQ9InRhcGVBc2hhcmVzMyI+PC9kaXY+PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+PHRkPjxkaXYgaWQ9InRhcGVBc3ltYm9sNCIgc3R5bGU9InBhZGRpbmctbGVmdDo2cHg7Ij48L2Rpdj48L3RkPg0KCSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQiPjxkaXYgaWQ9InRhcGVBc2hhcmVzNCI+PC9kaXY+PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+PHRkPjxkaXYgaWQ9InRhcGVBc3ltYm9sNSIgc3R5bGU9InBhZGRpbmctbGVmdDo2cHg7Ij48L2Rpdj48L3RkPg0KCSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQiPjxkaXYgaWQ9InRhcGVBc2hhcmVzNSI+PC9kaXY+PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4NCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InBhZGRpbmctbGVmdDoyMHB4OyI+DQogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImdlblRhYmxlSG9tZSI+DQogICAgICAgICAgICAgICAgICAgICAgICA8dGFibGUgc3R5bGU9IndpZHRoOjE3MHB4O2ZvbnQtc2l6ZToxMXB4OyI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPjx0aCBjb2xzcGFuPSIyIj5UYXBlIEI8L3RoPjwvdHI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPjx0aCBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0O2ZvbnQtd2VpZ2h0OmJvbGQ7Ij5TeW1ib2w8L3RoPiAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodDtmb250LXdlaWdodDpib2xkOyI+TWF0Y2hlZCBTaGFyZXM8L3RoPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPjx0ZD48ZGl2IGlkPSJ0YXBlQnN5bWJvbDEiIHN0eWxlPSJwYWRkaW5nLWxlZnQ6NnB4OyI+PC9kaXY+PC90ZD4NCgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0Ij48ZGl2IGlkPSJ0YXBlQnNoYXJlczEiPjwvZGl2PjwvdGQ+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+PHRkPjxkaXYgaWQ9InRhcGVCc3ltYm9sMiIgc3R5bGU9InBhZGRpbmctbGVmdDo2cHg7Ij48L2Rpdj48L3RkPg0KCSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQiPjxkaXYgaWQ9InRhcGVCc2hhcmVzMiI+PC9kaXY+PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+PHRkPjxkaXYgaWQ9InRhcGVCc3ltYm9sMyIgc3R5bGU9InBhZGRpbmctbGVmdDo2cHg7Ij48L2Rpdj48L3RkPg0KCSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQiPjxkaXYgaWQ9InRhcGVCc2hhcmVzMyI+PC9kaXY+PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+PHRkPjxkaXYgaWQ9InRhcGVCc3ltYm9sNCIgc3R5bGU9InBhZGRpbmctbGVmdDo2cHg7Ij48L2Rpdj48L3RkPg0KCSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQiPjxkaXYgaWQ9InRhcGVCc2hhcmVzNCI+PC9kaXY+PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+PHRkPjxkaXYgaWQ9InRhcGVCc3ltYm9sNSIgc3R5bGU9InBhZGRpbmctbGVmdDo2cHg7Ij48L2Rpdj48L3RkPg0KCSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQiPjxkaXYgaWQ9InRhcGVCc2hhcmVzNSI+PC9kaXY+PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4NCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InBhZGRpbmctbGVmdDoyMHB4OyI+DQogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImdlblRhYmxlSG9tZSI+DQogICAgICAgICAgICAgICAgICAgICAgICA8dGFibGUgc3R5bGU9IndpZHRoOjE3MHB4O2ZvbnQtc2l6ZToxMXB4OyI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPjx0aCBjb2xzcGFuPSIyIj5UYXBlIEM8L3RoPjwvdHI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPjx0aCBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0O2ZvbnQtd2VpZ2h0OmJvbGQ7Ij5TeW1ib2w8L3RoPiAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodDtmb250LXdlaWdodDpib2xkOyI+TWF0Y2hlZCBTaGFyZXM8L3RoPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPjx0ZD48ZGl2IGlkPSJ0YXBlQ3N5bWJvbDEiIHN0eWxlPSJwYWRkaW5nLWxlZnQ6NnB4OyI+PC9kaXY+PC90ZD4NCgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0Ij48ZGl2IGlkPSJ0YXBlQ3NoYXJlczEiPjwvZGl2PjwvdGQ+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+PHRkPjxkaXYgaWQ9InRhcGVDc3ltYm9sMiIgc3R5bGU9InBhZGRpbmctbGVmdDo2cHg7Ij48L2Rpdj48L3RkPg0KCSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQiPjxkaXYgaWQ9InRhcGVDc2hhcmVzMiI+PC9kaXY+PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+PHRkPjxkaXYgaWQ9InRhcGVDc3ltYm9sMyIgc3R5bGU9InBhZGRpbmctbGVmdDo2cHg7Ij48L2Rpdj48L3RkPg0KCSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQiPjxkaXYgaWQ9InRhcGVDc2hhcmVzMyI+PC9kaXY+PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+PHRkPjxkaXYgaWQ9InRhcGVDc3ltYm9sNCIgc3R5bGU9InBhZGRpbmctbGVmdDo2cHg7Ij48L2Rpdj48L3RkPg0KCSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQiPjxkaXYgaWQ9InRhcGVDc2hhcmVzNCI+PC9kaXY+PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+PHRkPjxkaXYgaWQ9InRhcGVDc3ltYm9sNSIgc3R5bGU9InBhZGRpbmctbGVmdDo2cHg7Ij48L2Rpdj48L3RkPg0KCSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQiPjxkaXYgaWQ9InRhcGVDc2hhcmVzNSI+PC9kaXY+PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4NCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgIDwvdHI+DQogICAgICAgIDwvdGFibGU+DQogICAgPC9kaXY+DQo8L2Rpdj4NCg0KPGRpdiBjbGFzcz0iZm9vdG5vdGUiIHN0eWxlPSJwYWRkaW5nLXRvcDoyMHB4O3BhZGRpbmctbGVmdDoxMHB4O2ZvbnQtc2l6ZTo5cHg7Zm9udC13ZWlnaHQ6Ym9sZDsiPlNvdXJjZTombmJzcDtUaGUgTkFTREFRIEJYIE1hcmtldDwvZGl2Pg0KPHA+Jm5ic3A7PC9wPg0KPCEtLSBFbmQgQlhNYXJrZXRTaGFyZS5odG1sIC0tPjwvZGl2Pgo8ZGl2IGNsYXNzPSJibG9jayIgaWQ9InRhYjdkaXYiIHN0eWxlPSJkaXNwbGF5OiBub25lOyB6LWluZGV4OiAxOyBvdmVyZmxvdzogYXV0bzsgaGVpZ2h0OiAzMjVweDsgd2lkdGg6IDcxNXB4OyBib3JkZXI6IDFweCBzb2xpZDsgKi8gbWFyZ2luLXRvcDogNXB4OyI+PCEtLSBCZWdpbiBQU1hNYXJrZXRTaGFyZS5odG1sIC0tPg0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4NCiAgICB2YXIgdG9wTWF0Y2hlZE1hcmtldCA9ICdQU1gnOw0KPC9zY3JpcHQ+DQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIvc25pcHBldHMvanMvUFNYTWFya2V0Vm9sdW1lLmpzIiBsYW5ndWFnZT0iamF2YXNjcmlwdCI+PC9zY3JpcHQ+DQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIvanMvdmFsaWRhdGUuanMiIGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij48L3NjcmlwdD4NCg0KPGRpdiBzdHlsZT0icGFkZGluZy1sZWZ0OjVweDtwYWRkaW5nLXJpZ2h0OjVweDsiPg0KCTxoMiBzdHlsZT0iZm9udC1zaXplOjEycHg7Ij4NCiAgICAgICAgPHRhYmxlPg0KCQkgICAgPHRyPjx0ZCBzdHlsZT0id2lkdGg6MzE1cHg7d2hpdGUtc3BhY2U6bm93cmFwOyI+TkFTREFRIFBTWCAtIFRvcCBMaXN0IGJ5IE1hdGNoZWQgVm9sdW1lPC90ZD4NCgkJCSAgICA8dGQgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O3dpZHRoOjM5MHB4O3RleHQtYWxpZ246cmlnaHQiPjxkaXYgaWQ9IlBTWGFzb2YiPjwvZGl2PjwvdGQ+DQoJCSAgICA8L3RyPg0KCQk8L3RhYmxlPg0KCTwvaDI+DQo8ZGl2Pg0KPHRhYmxlPg0KICA8dHI+PHRkPg0KICAgICAgICA8ZGl2IGNsYXNzPSJnZW5UYWJsZUhvbWUiPg0KICAgICAgICAgICAgPHRhYmxlIHN0eWxlPSJ3aWR0aDoxNzBweDtmb250LXNpemU6MTFweDsiPg0KICAgICAgICAgICAgICAgICAgICA8dHI+PHRoIGNvbHNwYW49IjIiPlRhcGUgQTwvdGg+PC90cj4NCiAgICAgICAgICAgICAgICAgICAgPHRyPjx0aCBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0O2ZvbnQtd2VpZ2h0OmJvbGQ7Ij5TeW1ib2w8L3RoPiAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7Zm9udC13ZWlnaHQ6Ym9sZDsiPk1hdGNoZWQgU2hhcmVzPC90aD4NCiAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgPHRyPgkNCgkgICAgICAgICAgICAgICAgICAgIDx0ZD48ZGl2IGlkPSJQU1h0YXBlQXN5bWJvbDEiIHN0eWxlPSJwYWRkaW5nLWxlZnQ6NnB4OyI+PC9kaXY+PC90ZD4NCgkgICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodDsiPjxkaXYgaWQ9IlBTWHRhcGVBc2hhcmVzMSI+PC9kaXY+PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgPHRyPgkNCgkgICAgICAgICAgICAgICAgICAgIDx0ZD48ZGl2IGlkPSJQU1h0YXBlQXN5bWJvbDIiIHN0eWxlPSJwYWRkaW5nLWxlZnQ6NnB4OyI+PC9kaXY+PC90ZD4NCgkgICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodDsiPjxkaXYgaWQ9IlBTWHRhcGVBc2hhcmVzMiI+PC9kaXY+PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgPC90cj4JDQogICAgICAgICAgICAgICAgICAgIDx0cj4JDQoJICAgICAgICAgICAgICAgICAgICA8dGQ+PGRpdiBpZD0iUFNYdGFwZUFzeW1ib2wzIiBzdHlsZT0icGFkZGluZy1sZWZ0OjZweDsiPjwvZGl2PjwvdGQ+DQoJICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7Ij48ZGl2IGlkPSJQU1h0YXBlQXNoYXJlczMiPjwvZGl2PjwvdGQ+DQogICAgICAgICAgICAgICAgICAgIDwvdHI+CQ0KICAgICAgICAgICAgICAgICAgICA8dHI+CQ0KCSAgICAgICAgICAgICAgICAgICAgPHRkPjxkaXYgaWQ9IlBTWHRhcGVBc3ltYm9sNCIgc3R5bGU9InBhZGRpbmctbGVmdDo2cHg7Ij48L2Rpdj48L3RkPg0KCSAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0OyI+PGRpdiBpZD0iUFNYdGFwZUFzaGFyZXM0IiA+PC9kaXY+PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgPC90cj4JDQogICAgICAgICAgICAgICAgICAgIDx0cj4JDQoJICAgICAgICAgICAgICAgICAgICA8dGQ+PGRpdiBpZD0iUFNYdGFwZUFzeW1ib2w1IiBzdHlsZT0icGFkZGluZy1sZWZ0OjZweDsiPjwvZGl2PjwvdGQ+DQoJICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7Ij48ZGl2IGlkPSJQU1h0YXBlQXNoYXJlczUiPjwvZGl2PjwvdGQ+DQogICAgICAgICAgICAgICAgICAgIDwvdHI+DQogICAgICAgICAgICA8L3RhYmxlPg0KICAgICAgICA8L2Rpdj4NCiAgICAgICA8L3RkPg0KICAgICAgIDx0ZCBzdHlsZT0icGFkZGluZy1sZWZ0OjIwcHg7Ij4NCiAgICAgICAgPGRpdiBjbGFzcz0iZ2VuVGFibGVIb21lIj4NCiAgICAgICAgICAgIDx0YWJsZSBzdHlsZT0id2lkdGg6MTcwcHg7Zm9udC1zaXplOjExcHg7Ij4NCiAgICAgICAgICAgICAgICAgICAgPHRyPjx0aCBjb2xzcGFuPSIyIj5UYXBlIEI8L3RoPjwvdHI+DQogICAgICAgICAgICAgICAgICAgIDx0cj48dGggc3R5bGU9InRleHQtYWxpZ246bGVmdDtmb250LXdlaWdodDpib2xkOyI+U3ltYm9sPC90aD4gICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0O2ZvbnQtd2VpZ2h0OmJvbGQ7Ij5NYXRjaGVkIFNoYXJlczwvdGg+DQogICAgICAgICAgICAgICAgICAgIDwvdHI+DQogICAgICAgICAgICAgICAgICAgIDx0cj4JDQoJICAgICAgICAgICAgICAgICAgICA8dGQ+PGRpdiBpZD0iUFNYdGFwZUJzeW1ib2wxIiBzdHlsZT0icGFkZGluZy1sZWZ0OjZweDsiPjwvZGl2PjwvdGQ+DQoJICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7Ij48ZGl2IGlkPSJQU1h0YXBlQnNoYXJlczEiPjwvZGl2PjwvdGQ+DQogICAgICAgICAgICAgICAgICAgIDwvdHI+DQogICAgICAgICAgICAgICAgICAgIDx0cj4JDQoJICAgICAgICAgICAgICAgICAgICA8dGQ+PGRpdiBpZD0iUFNYdGFwZUJzeW1ib2wyIiBzdHlsZT0icGFkZGluZy1sZWZ0OjZweDsiPjwvZGl2PjwvdGQ+DQoJICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7Ij48ZGl2IGlkPSJQU1h0YXBlQnNoYXJlczIiPjwvZGl2PjwvdGQ+DQogICAgICAgICAgICAgICAgICAgIDwvdHI+CQ0KICAgICAgICAgICAgICAgICAgICA8dHI+CQ0KCSAgICAgICAgICAgICAgICAgICAgPHRkPjxkaXYgaWQ9IlBTWHRhcGVCc3ltYm9sMyIgc3R5bGU9InBhZGRpbmctbGVmdDo2cHg7Ij48L2Rpdj48L3RkPg0KCSAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0OyI+PGRpdiBpZD0iUFNYdGFwZUJzaGFyZXMzIj48L2Rpdj48L3RkPg0KICAgICAgICAgICAgICAgICAgICA8L3RyPgkNCiAgICAgICAgICAgICAgICAgICAgPHRyPgkNCgkgICAgICAgICAgICAgICAgICAgIDx0ZD48ZGl2IGlkPSJQU1h0YXBlQnN5bWJvbDQiIHN0eWxlPSJwYWRkaW5nLWxlZnQ6NnB4OyI+PC9kaXY+PC90ZD4NCgkgICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodDsiPjxkaXYgaWQ9IlBTWHRhcGVCc2hhcmVzNCI+PC9kaXY+PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgPC90cj4JDQogICAgICAgICAgICAgICAgICAgIDx0cj4JDQoJICAgICAgICAgICAgICAgICAgICA8dGQ+PGRpdiBpZD0iUFNYdGFwZUJzeW1ib2w1IiBzdHlsZT0icGFkZGluZy1sZWZ0OjZweDsiPjwvZGl2PjwvdGQ+DQoJICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7Ij48ZGl2IGlkPSJQU1h0YXBlQnNoYXJlczUiPjwvZGl2PjwvdGQ+DQogICAgICAgICAgICAgICAgICAgIDwvdHI+DQogICAgICAgICAgICA8L3RhYmxlPg0KICAgICAgICA8L2Rpdj4NCiAgICAgICA8L3RkPg0KICAgICAgIDx0ZCBzdHlsZT0icGFkZGluZy1sZWZ0OjIwcHg7Ij4NCiAgICAgICAgPGRpdiBjbGFzcz0iZ2VuVGFibGVIb21lIj4NCiAgICAgICAgICAgIDx0YWJsZSBzdHlsZT0id2lkdGg6MTcwcHg7Zm9udC1zaXplOjExcHg7Ij4NCiAgICAgICAgICAgICAgICAgICAgPHRyPjx0aCBjb2xzcGFuPSIyIj5UYXBlIEM8L3RoPjwvdHI+DQogICAgICAgICAgICAgICAgICAgIDx0cj48dGggc3R5bGU9InRleHQtYWxpZ246bGVmdDtmb250LXdlaWdodDpib2xkOyI+U3ltYm9sPC90aD4gICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0O2ZvbnQtd2VpZ2h0OmJvbGQ7Ij5NYXRjaGVkIFNoYXJlczwvdGg+DQogICAgICAgICAgICAgICAgICAgIDwvdHI+DQogICAgICAgICAgICAgICAgICAgIDx0cj4JDQoJICAgICAgICAgICAgICAgICAgICA8dGQ+PGRpdiBpZD0iUFNYdGFwZUNzeW1ib2wxIiBzdHlsZT0icGFkZGluZy1sZWZ0OjZweDsiPjwvZGl2PjwvdGQ+DQoJICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7Ij48ZGl2IGlkPSJQU1h0YXBlQ3NoYXJlczEiPjwvZGl2PjwvdGQ+DQogICAgICAgICAgICAgICAgICAgIDwvdHI+DQogICAgICAgICAgICAgICAgICAgIDx0cj4JDQoJICAgICAgICAgICAgICAgICAgICA8dGQ+PGRpdiBpZD0iUFNYdGFwZUNzeW1ib2wyIiBzdHlsZT0icGFkZGluZy1sZWZ0OjZweDsiPjwvZGl2PjwvdGQ+DQoJICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7Ij48ZGl2IGlkPSJQU1h0YXBlQ3NoYXJlczIiPjwvZGl2PjwvdGQ+DQogICAgICAgICAgICAgICAgICAgIDwvdHI+CQ0KICAgICAgICAgICAgICAgICAgICA8dHI+CQ0KCSAgICAgICAgICAgICAgICAgICAgPHRkPjxkaXYgaWQ9IlBTWHRhcGVDc3ltYm9sMyIgc3R5bGU9InBhZGRpbmctbGVmdDo2cHg7Ij48L2Rpdj48L3RkPg0KCSAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0OyI+PGRpdiBpZD0iUFNYdGFwZUNzaGFyZXMzIj48L2Rpdj48L3RkPg0KICAgICAgICAgICAgICAgICAgICA8L3RyPgkNCiAgICAgICAgICAgICAgICAgICAgPHRyPgkNCgkgICAgICAgICAgICAgICAgICAgIDx0ZD48ZGl2IGlkPSJQU1h0YXBlQ3N5bWJvbDQiIHN0eWxlPSJwYWRkaW5nLWxlZnQ6NnB4OyI+PC9kaXY+PC90ZD4NCgkgICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodDsiPjxkaXYgaWQ9IlBTWHRhcGVDc2hhcmVzNCI+PC9kaXY+PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgPC90cj4JDQogICAgICAgICAgICAgICAgICAgIDx0cj4JDQoJICAgICAgICAgICAgICAgICAgICA8dGQ+PGRpdiBpZD0iUFNYdGFwZUNzeW1ib2w1IiBzdHlsZT0icGFkZGluZy1sZWZ0OjZweDsiPjwvZGl2PjwvdGQ+DQoJICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7Ij48ZGl2IGlkPSJQU1h0YXBlQ3NoYXJlczUiPjwvZGl2PjwvdGQ+DQogICAgICAgICAgICAgICAgICAgIDwvdHI+DQogICAgICAgICAgICA8L3RhYmxlPg0KICAgICAgICA8L2Rpdj4NCiAgICA8L3RkPg0KICAgIDwvdHI+DQo8L3RhYmxlPg0KPC9kaXY+DQo8L2Rpdj4NCg0KPGRpdiBjbGFzcz0iZm9vdG5vdGUiIHN0eWxlPSJwYWRkaW5nLXRvcDoyMHB4O3BhZGRpbmctbGVmdDoxMHB4O2ZvbnQtc2l6ZTo5cHg7Zm9udC13ZWlnaHQ6Ym9sZDsiPlNvdXJjZTombmJzcDtUaGUgTkFTREFRIFBTWCBNYXJrZXQ8L2Rpdj4NCjxwPiZuYnNwOzwvcD4NCjwhLS0gRW5kIFBTWE1hcmtldFNoYXJlLmh0bWwgLS0+PC9kaXY+CjxkaXYgY2xhc3M9ImJsb2NrIiBpZD0idGFiM2RpdiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7IHotaW5kZXg6IDE7IG92ZXJmbG93OiBhdXRvOyBoZWlnaHQ6IDQ1MHB4OyB3aWR0aDogNzE1cHg7IGJvcmRlcjogMXB4IHNvbGlkOyAqLyBtYXJnaW4tdG9wOiA1cHg7Ij48IS0tIEJlZ2luIFRvcE5PQk9FcXVpdHlPcHRpb25zLmh0bWwgLS0+DQo8ZGl2IHN0eWxlPSJwYWRkaW5nLWxlZnQ6NXB4O3BhZGRpbmctcmlnaHQ6NXB4OyI+DQo8ZGl2IGlkPSdkaXZCWFRvcDEnPg0KICAgIDxoMiBzdHlsZT0iZm9udC1zaXplOjEycHg7Ij4NCiAgICAgICAgPHRhYmxlPg0KCQkgICAgPHRyPjx0ZCBzdHlsZT0id2lkdGg6MzE1cHg7d2hpdGUtc3BhY2U6bm93cmFwOyI+DQogICAgICAgICAgICAgICAgICBUb3RhbCBCWCBPcHRpb25zIFZvbHVtZTombmJzcDs8c3BhbiBzdHlsZT0iZm9udC1zaXplOjEycHg7Ij42MiwwNTI8L3NwYW4+DQogICAgICAgICAgICAgICAgPC90ZD4NCgkJCSAgICA8dGQgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O3dpZHRoOjM5MHB4O3RleHQtYWxpZ246cmlnaHQiPg0KICAgICAgICAgICAgICAgICAgIExhc3QgdXBkYXRlZCAwOC8wMS8yMDE5IDE4OjAyDQogICAgICAgICAgICAgICAgPC90ZD4NCgkJICAgIDwvdHI+DQoJCTwvdGFibGU+DQoJPC9oMj4NCiAgICA8cD4mbmJzcDs8L3A+DQo8L3RyPg0KPGRpdiBjbGFzcz0iZ2VuVGFibGVIb21lIj4NCiAgICA8dGFibGUgc3R5bGU9IndpZHRoOjU0MHB4O2ZvbnQtc2l6ZToxMXB4OyI+DQogICAgICAgIDx0cj48dGggY29sc3Bhbj0iNCI+VG9wIDEwIEVxdWl0aWVzIE9wdGlvbnM8L3RoPjwvdHI+DQogICAgICAgIDx0cj48dGg+UmFuazwvdGg+DQoJICAgICAgICA8dGg+U3ltYm9sPC90aD4NCgkgICAgICAgIDx0aD5OYW1lPC90aD4NCgkgICAgICAgIDx0aCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodDsiPlZvbHVtZTwvdGg+DQogICAgICAgIDwvdHI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciA+DQoJICAgICAgICA8dGQ+MTwvdGQ+DQoJICAgICAgICA8dGQ+TURSPC90ZD4NCgkgICAgICAgIDx0ZD5NQ0RFUk1PVFQgSU5UIFBBTkFNQTwvdGQ+DQoJICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7Ij40LDkxOTwvdGQ+DQogICAgICAgIDwvdHI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0nZ2VuVGFibGVhbHQnID4NCgkgICAgICAgIDx0ZD4yPC90ZD4NCgkgICAgICAgIDx0ZD5GWEk8L3RkPg0KCSAgICAgICAgPHRkPklTSEFSRVMgQ0hJTkE8L3RkPg0KCSAgICAgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0OyI+MiwyOTE8L3RkPg0KICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgPg0KCSAgICAgICAgPHRkPjM8L3RkPg0KCSAgICAgICAgPHRkPkJZTkQ8L3RkPg0KCSAgICAgICAgPHRkPkJFWU9ORCBNRUFULCBJTkMuPC90ZD4NCgkgICAgICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodDsiPjEsNzI5PC90ZD4NCiAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPSdnZW5UYWJsZWFsdCcgPg0KCSAgICAgICAgPHRkPjQ8L3RkPg0KCSAgICAgICAgPHRkPlNQWTwvdGQ+DQoJICAgICAgICA8dGQ+U1BEUiBTJlAgNTAwIEVURiBUUlVTVDwvdGQ+DQoJICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7Ij4xLDU4MDwvdGQ+DQogICAgICAgIDwvdHI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciA+DQoJICAgICAgICA8dGQ+NTwvdGQ+DQoJICAgICAgICA8dGQ+QVNIUjwvdGQ+DQoJICAgICAgICA8dGQ+WFRSQUNLRVJTIEhBUlZFU1QgQ1M8L3RkPg0KCSAgICAgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0OyI+MSw1MDM8L3RkPg0KICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9J2dlblRhYmxlYWx0JyA+DQoJICAgICAgICA8dGQ+NjwvdGQ+DQoJICAgICAgICA8dGQ+WExJPC90ZD4NCgkgICAgICAgIDx0ZD5JTkRVU1RSSUFMIFNQRFI8L3RkPg0KCSAgICAgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0OyI+MSwyOTA8L3RkPg0KICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgPg0KCSAgICAgICAgPHRkPjc8L3RkPg0KCSAgICAgICAgPHRkPkVFTTwvdGQ+DQoJICAgICAgICA8dGQ+SVNIQVJFUyBNU0NJIEVNRVJHSU5HIE1BUktFVFMgRVRGPC90ZD4NCgkgICAgICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodDsiPjEsMTYzPC90ZD4NCiAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPSdnZW5UYWJsZWFsdCcgPg0KCSAgICAgICAgPHRkPjg8L3RkPg0KCSAgICAgICAgPHRkPkdFPC90ZD4NCgkgICAgICAgIDx0ZD5HRU4gRUxFQ1RSSUMgQ088L3RkPg0KCSAgICAgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0OyI+MSwxMjE8L3RkPg0KICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgPg0KCSAgICAgICAgPHRkPjk8L3RkPg0KCSAgICAgICAgPHRkPlNOQVA8L3RkPg0KCSAgICAgICAgPHRkPlNOQVAgSW5jLjwvdGQ+DQoJICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7Ij4xLDAxNjwvdGQ+DQogICAgICAgIDwvdHI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0nZ2VuVGFibGVhbHQnID4NCgkgICAgICAgIDx0ZD4xMDwvdGQ+DQoJICAgICAgICA8dGQ+QkFCQTwvdGQ+DQoJICAgICAgICA8dGQ+QUxJQkFCQSBHUk9VUCBITCBMVEQ8L3RkPg0KCSAgICAgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0OyI+OTczPC90ZD4NCiAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICA8L3RhYmxlPg0KPC9kaXY+DQoNCjwvZGl2Pg0KDQo8dGFibGUgc3R5bGU9IndpZHRoOjU0MHB4OyI+DQogICAgPHRyPjx0ZCBjbGFzcz0iZm9vdG5vdGUiIHN0eWxlPSJ0ZXh0LWFsaWduOmxlZnQ7cGFkZGluZy10b3A6OHB4O2ZvbnQtc2l6ZTo5cHg7Zm9udC13ZWlnaHQ6Ym9sZDsiPg0KICAgICAgICAgICAgU291cmNlOiZuYnNwO05BU0RBUSBCWCBPcHRpb25zIE1hcmtldC4gDQogICAgICAgIDwvdGQ+DQogICAgICAgIDx0ZCBjbGFzcz0iZm9vdG5vdGUiIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0O3BhZGRpbmctdG9wOjhweDtmb250LXNpemU6OXB4O2ZvbnQtd2VpZ2h0OmJvbGQ7Ij4NCiAgICAgICAgICAgRGF0YSBpcyB1cGRhdGVkIGV2ZXJ5IDE1IHRvIDIwIG1pbnV0ZXMuDQogICAgICAgIDwvdGQ+DQogICAgPC90cj4NCjwvdGFibGU+DQo8L2Rpdj4NCg0KPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCiAgICBmdW5jdGlvbiB0YWI4U3RhcnQoKQ0KICAgIHsNCgkgICAgR2V0QlhUb3AxKCk7DQoJfQkNCg0KICAgIGZ1bmN0aW9uIHRhYjhTdG9wKCkNCiAgICB7DQoJICAgIGNsZWFyVGltZW91dCh3aW5kb3cuSG9tZVBhZ2VUaW1lcnNbJ0JYVG9wMSddKTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBHZXRCWFRvcDEoKSANCiAgICB7DQogICAgICAgIHZhciBzOw0KICAgICAgICB2YXIgczI7DQogICAgICAgIHMyID0gJ2RpdkJYVG9wMSc7DQoNCiAgICAgICAgdmFyIGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChzMik7DQogICAgICAgIGlmIChlICE9IG51bGwpIGUuaW5uZXJIVE1MID0gInVwZGF0aW5nLi4uLiI7DQoNCiAgICAgICAgU2VydmVyLkJMX1BITFhUb3AxMC5HZXRVcGRhdGVEYXRhKGNiX0dldEJYVG9wMSwgJ1RvcE5PQk9FcXVpdHlPcHRpb25zLmh0bWwnLCAnVG9wTk9CT0VxdWl0eU9wdGlvbnMudHh0Jyk7DQogICAgICAgIHdpbmRvdy5Ib21lUGFnZVRpbWVyc1snQlhUb3AxJ10gPSBzZXRUaW1lb3V0KCdHZXRCWFRvcDEoKScsIDEwMDAqNjApOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGNiX0dldEJYVG9wMShyLCBlKQ0KICAgIHsNCiAgICAgICAgaWYgKGUpIHJldHVybiBhbGVydChlLm1lc3NhZ2UpOw0KICAgICAgICB2YXIgZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkaXZCWFRvcDEnKTsNCiAgICAgICAgaWYgKGQgIT0gbnVsbCkNCiAgICAgICAgICAgIGQuaW5uZXJIVE1MID0gcjsNCiAgICB9DQo8L3NjcmlwdD4NCjwhLS0gRW5kIFRvcEJYT3B0aW9ucy5odG1sIC0tPg0KPC9kaXY+CjxkaXYgY2xhc3M9ImJsb2NrIiBpZD0idGFiMWRpdiIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7IHotaW5kZXg6IDE7IG92ZXJmbG93OiBhdXRvOyBoZWlnaHQ6IDQyNXB4OyB3aWR0aDogNzE1cHg7Ym9yZGVyOiAxcHggc29saWQ7ICovIG1hcmdpbi10b3A6IDVweDsiPiA8IS0tIEJlZ2luIFRvcE5PTUVxdWl0eU9wdGlvbnMuaHRtbCAtLT4NCjxkaXYgc3R5bGU9InBhZGRpbmctbGVmdDo1cHg7cGFkZGluZy1yaWdodDo1cHg7Ij4NCjxkaXYgaWQ9J2RpdkJYVG9wMyc+DQogICAgPGgyIHN0eWxlPSJmb250LXNpemU6MTJweDsiPg0KICAgICAgICA8dGFibGU+DQoJCSAgICA8dHI+PHRkIHN0eWxlPSJ3aWR0aDozMTVweDt3aGl0ZS1zcGFjZTpub3dyYXA7Ij4NCiAgICAgICAgICAgICAgICAgIFRvdGFsIE5PTSBPcHRpb25zIFZvbHVtZTombmJzcDs8c3BhbiBzdHlsZT0iZm9udC1zaXplOjEycHg7Ij4yLDY3OCw4OTA8L3NwYW4+DQogICAgICAgICAgICAgICAgPC90ZD4NCgkJCSAgICA8dGQgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O3dpZHRoOjM5MHB4O3RleHQtYWxpZ246cmlnaHQiPg0KICAgICAgICAgICAgICAgICAgIExhc3QgdXBkYXRlZCAwOC8wMS8yMDE5IDE4OjAyDQogICAgICAgICAgICAgICAgPC90ZD4NCgkJICAgIDwvdHI+DQoJCTwvdGFibGU+DQoJPC9oMj4NCiAgICA8cD4mbmJzcDs8L3A+DQo8L3RyPg0KPGRpdiBjbGFzcz0iZ2VuVGFibGVIb21lIj4NCjx0YWJsZSBzdHlsZT0id2lkdGg6NTQwcHg7Zm9udC1zaXplOjExcHg7Ij4NCiAgICA8dHI+PHRoIGNvbHNwYW49IjQiPlRvcCAxMCBFcXVpdGllcyBPcHRpb25zPC90aD48L3RyPg0KICAgIDx0cj48dGg+UmFuazwvdGg+DQoJCTx0aD5TeW1ib2w8L3RoPg0KCQk8dGg+TmFtZTwvdGg+DQoJCTx0aCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodDsiPlZvbHVtZTwvdGg+DQoJPC90cj4NCiAgICAgICAgICAgICAgICA8dHIgPg0KCSAgICA8dGQ+MTwvdGQ+DQoJICAgIDx0ZD5TUFk8L3RkPg0KCSAgICA8dGQ+U1BEUiBTJlAgNTAwIEVURiBUUlVTVDwvdGQ+DQoJICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodDsiPjM5Miw2MDU8L3RkPg0KICAgIDwvdHI+DQogICAgICAgICAgICAgICAgPHRyIGNsYXNzPSdnZW5UYWJsZWFsdCcgPg0KCSAgICA8dGQ+MjwvdGQ+DQoJICAgIDx0ZD5BQVBMPC90ZD4NCgkgICAgPHRkPkFQUExFIElOQy48L3RkPg0KCSAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7Ij4xMzIsNzc4PC90ZD4NCiAgICA8L3RyPg0KICAgICAgICAgICAgICAgIDx0ciA+DQoJICAgIDx0ZD4zPC90ZD4NCgkgICAgPHRkPlFRUTwvdGQ+DQoJICAgIDx0ZD5QT1dFUlNIQVJFUyBRUVEgVFIgMTwvdGQ+DQoJICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodDsiPjkwLDY2MzwvdGQ+DQogICAgPC90cj4NCiAgICAgICAgICAgICAgICA8dHIgY2xhc3M9J2dlblRhYmxlYWx0JyA+DQoJICAgIDx0ZD40PC90ZD4NCgkgICAgPHRkPkVXWjwvdGQ+DQoJICAgIDx0ZD5JU0hBUkUgTVNDSSBCUkFaSUw8L3RkPg0KCSAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7Ij42OSwwNDc8L3RkPg0KICAgIDwvdHI+DQogICAgICAgICAgICAgICAgPHRyID4NCgkgICAgPHRkPjU8L3RkPg0KCSAgICA8dGQ+QU1EPC90ZD4NCgkgICAgPHRkPkFEViBNSUNSTyBERVZJQ0VTPC90ZD4NCgkgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0OyI+NTgsNTk0PC90ZD4NCiAgICA8L3RyPg0KICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0nZ2VuVGFibGVhbHQnID4NCgkgICAgPHRkPjY8L3RkPg0KCSAgICA8dGQ+VlhYPC90ZD4NCgkgICAgPHRkPklwYXRoIFNlcmllcyBCIFMmUCA1MDAgVml4PC90ZD4NCgkgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0OyI+NTUsMDQ4PC90ZD4NCiAgICA8L3RyPg0KICAgICAgICAgICAgICAgIDx0ciA+DQoJICAgIDx0ZD43PC90ZD4NCgkgICAgPHRkPkJBQkE8L3RkPg0KCSAgICA8dGQ+QUxJQkFCQSBHUk9VUCBITCBMVEQ8L3RkPg0KCSAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7Ij40OSw0NjU8L3RkPg0KICAgIDwvdHI+DQogICAgICAgICAgICAgICAgPHRyIGNsYXNzPSdnZW5UYWJsZWFsdCcgPg0KCSAgICA8dGQ+ODwvdGQ+DQoJICAgIDx0ZD5NU0ZUPC90ZD4NCgkgICAgPHRkPk1JQ1JPU09GVCBDT1JQPC90ZD4NCgkgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0OyI+NDIsNzc0PC90ZD4NCiAgICA8L3RyPg0KICAgICAgICAgICAgICAgIDx0ciA+DQoJICAgIDx0ZD45PC90ZD4NCgkgICAgPHRkPkZCPC90ZD4NCgkgICAgPHRkPkZBQ0VCT09LIElOQzwvdGQ+DQoJICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodDsiPjQwLDI5MjwvdGQ+DQogICAgPC90cj4NCiAgICAgICAgICAgICAgICA8dHIgY2xhc3M9J2dlblRhYmxlYWx0JyA+DQoJICAgIDx0ZD4xMDwvdGQ+DQoJICAgIDx0ZD5GWEk8L3RkPg0KCSAgICA8dGQ+SVNIQVJFUyBDSElOQTwvdGQ+DQoJICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodDsiPjM1LDI3NDwvdGQ+DQogICAgPC90cj4NCiAgICA8L3RhYmxlPg0KPC9kaXY+DQoNCjwvZGl2Pg0KDQo8dGFibGUgc3R5bGU9IndpZHRoOjU0MHB4OyI+DQogICAgPHRyPjx0ZCBjbGFzcz0iZm9vdG5vdGUiIHN0eWxlPSJ0ZXh0LWFsaWduOmxlZnQ7cGFkZGluZy10b3A6OHB4O2ZvbnQtc2l6ZTo5cHg7Zm9udC13ZWlnaHQ6Ym9sZDsiPg0KICAgICAgICBTb3VyY2U6Jm5ic3A7TkFTREFRIE9wdGlvbnMgTWFya2V0LiANCiAgICAgICAgPC90ZD4NCiAgICAgICAgPHRkIGNsYXNzPSJmb290bm90ZSIgc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7cGFkZGluZy10b3A6OHB4O2ZvbnQtc2l6ZTo5cHg7Zm9udC13ZWlnaHQ6Ym9sZDsiPg0KICAgICAgICAgICBEYXRhIGlzIHVwZGF0ZWQgZXZlcnkgMTUgdG8gMjAgbWludXRlcy4NCiAgICAgICAgPC90ZD4NCiAgICA8L3RyPg0KPC90YWJsZT4NCjwvZGl2Pg0KDQo8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgkNCiAgICBmdW5jdGlvbiB0YWIxU3RhcnQoKQ0KICAgIHsNCgkgICAgR2V0QlhUb3AzKCk7DQoJfQkNCg0KICAgIGZ1bmN0aW9uIHRhYjFTdG9wKCkNCiAgICB7DQoJICAgIGNsZWFyVGltZW91dCh3aW5kb3cuSG9tZVBhZ2VUaW1lcnNbJ0JYVG9wMyddKTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBHZXRCWFRvcDMoKSANCiAgICB7DQogICAgICAgIHZhciBzOw0KICAgICAgICB2YXIgczI7DQogICAgICAgIHMyID0gJ2RpdkJYVG9wMyc7DQoNCiAgICAgICAgdmFyIGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChzMik7DQogICAgICAgIGlmIChlICE9IG51bGwpIGUuaW5uZXJIVE1MID0gInVwZGF0aW5nLi4uLiI7DQoNCiAgICAgICAgU2VydmVyLkJMX1BITFhUb3AxMC5HZXRVcGRhdGVEYXRhKGNiX0dldEJYVG9wMywgJ1RvcE5PTUVxdWl0eU9wdGlvbnMuaHRtbCcsICdUb3BOT01FcXVpdHlPcHRpb25zLnR4dCcpOw0KICAgICAgICB3aW5kb3cuSG9tZVBhZ2VUaW1lcnNbJ0JYVG9wMyddID0gc2V0VGltZW91dCgnR2V0QlhUb3AzKCknLCAxMDAwKjYwKTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBjYl9HZXRCWFRvcDMociwgZSkNCiAgICB7DQogICAgICAgIGlmIChlKSByZXR1cm4gYWxlcnQoZS5tZXNzYWdlKTsNCiAgICAgICAgdmFyIGQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGl2QlhUb3AzJyk7DQogICAgICAgIGlmIChkICE9IG51bGwpDQogICAgICAgICAgICBkLmlubmVySFRNTCA9IHI7DQogICAgfQ0KPC9zY3JpcHQ+DQo8IS0tIEVuZCBUb3BCWE9wdGlvbnMuaHRtbCAtLT4NCjwvZGl2Pgo8ZGl2IGNsYXNzPSJibG9jayIgaWQ9InRhYjVkaXYiIHN0eWxlPSJkaXNwbGF5OiBub25lOyB6LWluZGV4OiAxOyBvdmVyZmxvdzogYXV0bzsgaGVpZ2h0OiA0NTBweDsgd2lkdGg6IDcxNXB4OyBib3JkZXI6IDFweCBzb2xpZDsgICovIG1hcmdpbi10b3A6IDVweDsiPgo8ZGl2IGNsYXNzPSJnZW5UYWJsZSBzdWJ0YWJfdG9wIj4KPHRhYmxlPgogICAgIDx0cj4KICAgICAgICAgPHRkIGNsYXNzPSJzdWJ0YWJfb24iIGlkPSJzdWJ0YWJfMSI+PGEgaWQ9IkVxdWl0eSIgaHJlZj0iamF2YXNjcmlwdDpzaG93UEhMWCgnMScpOyI+RXF1aXRpZXMgT3B0aW9ucyBWb2x1bWU8L2E+PC90ZD4KICAgICAgICAgPHRkIGlkPSJzdWJ0YWJfMiI+PGEgaWQ9IkluZGV4ZXMiIGhyZWY9ImphdmFzY3JpcHQ6c2hvd1BITFgoJzInKTsiPkluZGV4IE9wdGlvbnMgVm9sdW1lPC9hPjwvdGQ+CiAgICAgICAgIDwhLS08dGQgaWQ9InN1YnRhYl8zIj48YSBpZD0iQ3VycmVuY3kiIGhyZWY9ImphdmFzY3JpcHQ6c2hvd1BITFgoJzMnKTsiPldvcmxkIEN1cnJlbmN5IE9wdGlvbnM8L2E+PC90ZD4tLT4KICAgICA8L3RyPgo8L3RhYmxlPgo8L2Rpdj4KPGRpdiBpZD0iUEhMWDEiIHN0eWxlPSJkaXNwbGF5OiBibG9jayI+PCEtLSBCZWdpbiBUb3BQSExYRXF1aXRpZXNPcHRpb25zLmh0bWwgLS0+DQo8ZGl2IHN0eWxlPSJwYWRkaW5nLWxlZnQ6NXB4O3BhZGRpbmctcmlnaHQ6NXB4OyI+DQo8ZGl2IGlkPSJkaXZQSExYVG9wMSI+DQogICAgPGgyIHN0eWxlPSJmb250LXNpemU6MTJweDsiPg0KICAgICAgICAgICAgPHRhYmxlIHN0eWxlPSJib3JkZXItc3R5bGU6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50OyI+DQoJCSAgICAgICAgPHRyPjx0ZCBzdHlsZT0id2lkdGg6MzE1cHg7d2hpdGUtc3BhY2U6bm93cmFwO2JvcmRlci1zdHlsZTpub25lO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ij4NCiAgICAgICAgICAgICAgICAgICAgICBUb3RhbCBQSExYIEVxdWl0eSBPcHRpb25zIFZvbHVtZTombmJzcDsNCiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC1zaXplOjEycHg7Ij4xLDIyNiwxMTE8L3NwYW4+DQogICAgICAgICAgICAgICAgICAgIDwvdGQ+DQoJCQkgICAgICAgIDx0ZCBzdHlsZT0iZm9udC1zaXplOjExcHg7d2lkdGg6MzkwcHg7dGV4dC1hbGlnbjpyaWdodDtib3JkZXItc3R5bGU6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50OyI+DQogICAgICAgICAgICAgICAgICAgICAgIExhc3QgdXBkYXRlZCAxMS8wNC8yMDE5IDE3OjM1DQogICAgICAgICAgICAgICAgICAgIDwvdGQ+DQoJCSAgICAgICAgPC90cj4NCgkJICAgIDwvdGFibGU+DQoJICAgIDwvaDI+DQogICAgICAgIDxwPiZuYnNwOzwvcD4NCjwvdHI+CQ0KCQ0KPGRpdiBjbGFzcz0iZ2VuVGFibGVIb21lIj4NCiAgICA8dGFibGUgc3R5bGU9IndpZHRoOjU0MHB4O2ZvbnQtc2l6ZToxMXB4OyI+DQoJCTx0cj48dGggIGNvbHNwYW49IjQiPlRvcCAxMCBFcXVpdGllcyBPcHRpb25zPC90aD48L3RyPg0KCQk8dHI+PHRoPlJhbms8L3RoPg0KCQkJPHRoPlN5bWJvbDwvdGg+DQoJCQk8dGg+TmFtZTwvdGg+DQoJCQk8dGggc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7Ij5Wb2x1bWU8L3RoPg0KCQk8L3RyPg0KCQkJCQkJCQk8dHIgPg0KCQkJPHRkIHN0eWxlPSJwYWRkaW5nLWxlZnQ6MTBweDsiPjE8L3RkPg0KCQkJPHRkIHN0eWxlPSJwYWRkaW5nLWxlZnQ6MTBweDsiPkZYSTwvdGQ+DQoJCQk8dGQgc3R5bGU9InBhZGRpbmctbGVmdDoxMHB4OyI+SVNIQVJFUyBDSElOQTwvdGQ+DQoJCQk8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7Ij4xMzksMjY0PC90ZD4NCgkJPC90cj4NCgkJCQkJCQkJPHRyIGNsYXNzPSdnZW5UYWJsZWFsdCcgPg0KCQkJPHRkIHN0eWxlPSJwYWRkaW5nLWxlZnQ6MTBweDsiPjI8L3RkPg0KCQkJPHRkIHN0eWxlPSJwYWRkaW5nLWxlZnQ6MTBweDsiPkVFTTwvdGQ+DQoJCQk8dGQgc3R5bGU9InBhZGRpbmctbGVmdDoxMHB4OyI+SVNIQVJFUyBNU0NJIEVNRVJHSU5HIE1BUktFVFMgRVRGPC90ZD4NCgkJCTx0ZCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodDsiPjExNCw5ODg8L3RkPg0KCQk8L3RyPg0KCQkJCQkJCQk8dHIgPg0KCQkJPHRkIHN0eWxlPSJwYWRkaW5nLWxlZnQ6MTBweDsiPjM8L3RkPg0KCQkJPHRkIHN0eWxlPSJwYWRkaW5nLWxlZnQ6MTBweDsiPlNQWTwvdGQ+DQoJCQk8dGQgc3R5bGU9InBhZGRpbmctbGVmdDoxMHB4OyI+U1BEUiBTJlAgNTAwIEVURiBUUlVTVDwvdGQ+DQoJCQk8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7Ij44NCwzNjc8L3RkPg0KCQk8L3RyPg0KCQkJCQkJCQk8dHIgY2xhc3M9J2dlblRhYmxlYWx0JyA+DQoJCQk8dGQgc3R5bGU9InBhZGRpbmctbGVmdDoxMHB4OyI+NDwvdGQ+DQoJCQk8dGQgc3R5bGU9InBhZGRpbmctbGVmdDoxMHB4OyI+VDwvdGQ+DQoJCQk8dGQgc3R5bGU9InBhZGRpbmctbGVmdDoxMHB4OyI+QVQmVCBJTkNDT008L3RkPg0KCQkJPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0OyI+NzUsNzI1PC90ZD4NCgkJPC90cj4NCgkJCQkJCQkJPHRyID4NCgkJCTx0ZCBzdHlsZT0icGFkZGluZy1sZWZ0OjEwcHg7Ij41PC90ZD4NCgkJCTx0ZCBzdHlsZT0icGFkZGluZy1sZWZ0OjEwcHg7Ij5FV1o8L3RkPg0KCQkJPHRkIHN0eWxlPSJwYWRkaW5nLWxlZnQ6MTBweDsiPklTSEFSRSBNU0NJIEJSQVpJTDwvdGQ+DQoJCQk8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7Ij43MSw3NTI8L3RkPg0KCQk8L3RyPg0KCQkJCQkJCQk8dHIgY2xhc3M9J2dlblRhYmxlYWx0JyA+DQoJCQk8dGQgc3R5bGU9InBhZGRpbmctbGVmdDoxMHB4OyI+NjwvdGQ+DQoJCQk8dGQgc3R5bGU9InBhZGRpbmctbGVmdDoxMHB4OyI+VlhYPC90ZD4NCgkJCTx0ZCBzdHlsZT0icGFkZGluZy1sZWZ0OjEwcHg7Ij5JcGF0aCBTZXJpZXMgQiBTJlAgNTAwIFZpeDwvdGQ+DQoJCQk8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7Ij41Niw0Mjk8L3RkPg0KCQk8L3RyPg0KCQkJCQkJCQk8dHIgPg0KCQkJPHRkIHN0eWxlPSJwYWRkaW5nLWxlZnQ6MTBweDsiPjc8L3RkPg0KCQkJPHRkIHN0eWxlPSJwYWRkaW5nLWxlZnQ6MTBweDsiPkFBUEw8L3RkPg0KCQkJPHRkIHN0eWxlPSJwYWRkaW5nLWxlZnQ6MTBweDsiPkFQUExFIElOQy48L3RkPg0KCQkJPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0OyI+NDgsNjEzPC90ZD4NCgkJPC90cj4NCgkJCQkJCQkJPHRyIGNsYXNzPSdnZW5UYWJsZWFsdCcgPg0KCQkJPHRkIHN0eWxlPSJwYWRkaW5nLWxlZnQ6MTBweDsiPjg8L3RkPg0KCQkJPHRkIHN0eWxlPSJwYWRkaW5nLWxlZnQ6MTBweDsiPkdFPC90ZD4NCgkJCTx0ZCBzdHlsZT0icGFkZGluZy1sZWZ0OjEwcHg7Ij5HRU4gRUxFQ1RSSUMgQ088L3RkPg0KCQkJPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0OyI+MzgsMzc5PC90ZD4NCgkJPC90cj4NCgkJCQkJCQkJPHRyID4NCgkJCTx0ZCBzdHlsZT0icGFkZGluZy1sZWZ0OjEwcHg7Ij45PC90ZD4NCgkJCTx0ZCBzdHlsZT0icGFkZGluZy1sZWZ0OjEwcHg7Ij5BTUQ8L3RkPg0KCQkJPHRkIHN0eWxlPSJwYWRkaW5nLWxlZnQ6MTBweDsiPkFEViBNSUNSTyBERVZJQ0VTPC90ZD4NCgkJCTx0ZCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodDsiPjM1LDEyMzwvdGQ+DQoJCTwvdHI+DQoJCQkJCQkJCTx0ciBjbGFzcz0nZ2VuVGFibGVhbHQnID4NCgkJCTx0ZCBzdHlsZT0icGFkZGluZy1sZWZ0OjEwcHg7Ij4xMDwvdGQ+DQoJCQk8dGQgc3R5bGU9InBhZGRpbmctbGVmdDoxMHB4OyI+QkFCQTwvdGQ+DQoJCQk8dGQgc3R5bGU9InBhZGRpbmctbGVmdDoxMHB4OyI+QUxJQkFCQSBHUk9VUCBITCBMVEQ8L3RkPg0KCQkJPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0OyI+MzMsOTkyPC90ZD4NCgkJPC90cj4NCgkJICAgIDwvdGFibGU+DQo8L2Rpdj4NCjwvZGl2Pg0KDQo8ZGl2IGNsYXNzPSJmb290bm90ZSIgc3R5bGU9InBhZGRpbmctdG9wOjIwcHg7cGFkZGluZy1ib3R0b206bm9uZTtjb2xvcjpibGFjaztmb250LXNpemU6OXB4O2ZvbnQtd2VpZ2h0OmJvbGQ7Ij4NCiAgPHNwYW4gc3R5bGU9ImZsb2F0OmxlZnQ7Ij5Tb3VyY2U6IE5BU0RBUSBQSExYLjwvc3Bhbj4NCiAgPHNwYW4gc3R5bGU9ImZsb2F0OnJpZ2h0O3RleHQtYWxpZ246cmlnaHQ7Ij5EYXRhIGlzIHVwZGF0ZWQgZXZlcnkgMTUgdG8gMjAgbWludXRlcy48L3NwYW4+DQo8L2Rpdj4NCg0KPC9kaXY+DQoNCjxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQoJZnVuY3Rpb24gU3RvcFBITFhUb3AxKCkNCgl7DQoJCWNsZWFyVGltZW91dCh3aW5kb3cuSG9tZVBhZ2VUaW1lcnNbJ1BITFhUb3AxJ10pOw0KCX0NCg0KCWZ1bmN0aW9uIEdldFBITFhUb3AxKCkgDQogICAgew0KICAgICAgICB2YXIgczsNCiAgICAgICAgdmFyIHMyOw0KICAgICAgICBzMiA9ICdkaXZQSExYVG9wMSc7DQoNCiAgICAgICAgdmFyIGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChzMik7DQogICAgICAgIGlmIChlICE9IG51bGwpIGUuaW5uZXJIVE1MID0gInVwZGF0aW5nLi4uLiI7DQoNCiAgICAgICAgU2VydmVyLkJMX1BITFhUb3AxMC5HZXRVcGRhdGVEYXRhKGNiX0dldFBITFhUb3AxLCAnVG9wUEhMWEVxdWl0eU9wdGlvbnMuaHRtbCcsICdUb3BQSExYRXF1aXR5T3B0aW9ucy50eHQnKTsgICAgICAgICAgICAgICAgDQogICAgICAgIHdpbmRvdy5Ib21lUGFnZVRpbWVyc1snUEhMWFRvcDEnXSA9IHNldFRpbWVvdXQoJ0dldFBITFhUb3AxKCknLCAxMDAwKjYwKTsgIA0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGNiX0dldFBITFhUb3AxKHIsIGUpDQogICAgew0KICAgICAgICBpZiAoZSkgcmV0dXJuIGFsZXJ0KGUubWVzc2FnZSk7DQogICAgICAgIHZhciBkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RpdlBITFhUb3AxJyk7DQogICAgICAgIGlmIChkICE9IG51bGwpDQogICAgICAgICAgICBkLmlubmVySFRNTCA9IHI7ICAgICAgICANCiAgICB9DQo8L3NjcmlwdD4NCjwhLS0gRW5kIFRvcFBITFhFcXVpdGllc09wdGlvbnMuaHRtbCAtLT4NCjwvZGl2Pgo8ZGl2IGlkPSJQSExYMiIgc3R5bGU9ImRpc3BsYXk6IG5vbmUiPjwhLS0gQmVnaW4gVG9wUEhMWEluZGV4T3B0aW9ucy5odG1sIC0tPg0KPGRpdiBzdHlsZT0icGFkZGluZy1sZWZ0OjVweDtwYWRkaW5nLXJpZ2h0OjVweDt2ZXJ0aWNhbC1hbGlnbjp0b3A7Ij4NCjxkaXYgaWQ9J2RpdlBITFhUb3AyJyBzdHlsZT0idmVydGljYWwtYWxpZ246dG9wOyI+DQogICAgPGgyIHN0eWxlPSJmb250LXNpemU6MTJweDsiPg0KICAgICAgICA8dGFibGUgc3R5bGU9ImJvcmRlci1zdHlsZTpub25lO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ij4NCgkJICAgIDx0cj48dGQgc3R5bGU9IndpZHRoOjMxNXB4O3doaXRlLXNwYWNlOm5vd3JhcDtib3JkZXItc3R5bGU6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50OyI+DQogICAgICAgICAgICAgICAgICAgIFRvdGFsIFBITFggSW5kZXggT3B0aW9ucyBWb2x1bWU6Jm5ic3A7PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMnB4OyI+Miw2Nzk8L3NwYW4+DQogICAgICAgICAgICAgICAgPC90ZD4NCgkJCSAgICA8dGQgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O3dpZHRoOjM5MHB4O3RleHQtYWxpZ246cmlnaHQ7Ym9yZGVyLXN0eWxlOm5vbmU7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDsiPg0KICAgICAgICAgICAgICAgICAgICBMYXN0IHVwZGF0ZWQgMTEvMDQvMjAxOSAxNzozNg0KICAgICAgICAgICAgICAgIDwvdGQ+DQoJCSAgICA8L3RyPg0KCQk8L3RhYmxlPg0KCTwvaDI+DQogICAgPHA+Jm5ic3A7PC9wPg0KICAgIDxkaXYgY2xhc3M9ImdlblRhYmxlSG9tZSIgc3R5bGU9InZlcnRpY2FsLWFsaWduOnRvcDsiPg0KICAgICAgICA8dGFibGUgc3R5bGU9IndpZHRoOjU0MHB4O2ZvbnQtc2l6ZToxMXB4O3ZlcnRpY2FsLWFsaWduOnRvcDsiPg0KICAgICAgICAgICAgPHRyPjx0aCBjb2xzcGFuPSI0Ij5Ub3AgMTAgSW5kZXggT3B0aW9uczwvdGg+PC90cj4NCgkgICAgICAgICAgICA8dHI+PHRoPlJhbms8L3RoPg0KCQkgICAgICAgICAgICA8dGg+SW5kZXggU3ltYm9sPC90aD4NCgkJICAgICAgICAgICAgPHRoPkluZGV4IE5hbWU8L3RoPg0KCQkgICAgICAgICAgICA8dGggc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7Ij5Wb2x1bWU8L3RoPg0KCSAgICAgICAgICAgIDwvdHI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgPg0KCSAgICAgICAgICAgIDx0ZCBzdHlsZT0icGFkZGluZy1sZWZ0OjEwcHg7Ij4xPC90ZD4NCgkgICAgICAgICAgICA8dGQgc3R5bGU9InBhZGRpbmctbGVmdDoxMHB4OyI+TkRYPC90ZD4NCgkgICAgICAgICAgICA8dGQgc3R5bGU9InBhZGRpbmctbGVmdDoxMHB4OyI+TkFTREFRIDEwMCBJTkRFWCBORVcgQ0FMQzwvdGQ+DQoJICAgICAgICAgICAgPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0OyI+Miw2NTU8L3RkPg0KICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0nZ2VuVGFibGVhbHQnID4NCgkgICAgICAgICAgICA8dGQgc3R5bGU9InBhZGRpbmctbGVmdDoxMHB4OyI+MjwvdGQ+DQoJICAgICAgICAgICAgPHRkIHN0eWxlPSJwYWRkaW5nLWxlZnQ6MTBweDsiPlNPWDwvdGQ+DQoJICAgICAgICAgICAgPHRkIHN0eWxlPSJwYWRkaW5nLWxlZnQ6MTBweDsiPlNFTUlDT05EVUNUT1IgSU5ERVg8L3RkPg0KCSAgICAgICAgICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodDsiPjIwPC90ZD4NCiAgICAgICAgICAgIDwvdHI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgPg0KCSAgICAgICAgICAgIDx0ZCBzdHlsZT0icGFkZGluZy1sZWZ0OjEwcHg7Ij4zPC90ZD4NCgkgICAgICAgICAgICA8dGQgc3R5bGU9InBhZGRpbmctbGVmdDoxMHB4OyI+QktYPC90ZD4NCgkgICAgICAgICAgICA8dGQgc3R5bGU9InBhZGRpbmctbGVmdDoxMHB4OyI+S0JXIEJBTksgSU5ERVg8L3RkPg0KCSAgICAgICAgICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodDsiPjQ8L3RkPg0KICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4NCiAgICA8L2Rpdj4NCiAgICAgICAgICAgPC9kaXY+DQo8L2Rpdj4NCg0KPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCglmdW5jdGlvbiBTdG9wUEhMWFRvcDIoKQ0KCXsNCgkJY2xlYXJUaW1lb3V0KHdpbmRvdy5Ib21lUGFnZVRpbWVyc1snUEhMWFRvcDInXSk7DQoJfQ0KDQoJZnVuY3Rpb24gR2V0UEhMWFRvcDIoKSANCiAgICB7DQogICAgICAgIHZhciBzOw0KICAgICAgICB2YXIgczI7DQogICAgICAgIHMyID0gJ2RpdlBITFhUb3AyJzsNCg0KICAgICAgICB2YXIgZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHMyKTsNCiAgICAgICAgaWYgKGUgIT0gbnVsbCkgZS5pbm5lckhUTUwgPSAidXBkYXRpbmcuLi4uIjsNCg0KICAgICAgICBTZXJ2ZXIuQkxfUEhMWFRvcDEwLkdldFVwZGF0ZURhdGEoY2JfR2V0UEhMWFRvcDIsICdUb3BQSExYSW5kZXhPcHRpb25zLmh0bWwnLCAnVG9wUEhMWEluZGV4T3B0aW9ucy50eHQnKTsgICAgICAgICAgICAgICAgIA0KICAgICAgICB3aW5kb3cuSG9tZVBhZ2VUaW1lcnNbJ1BITFhUb3AyJ10gPSBzZXRUaW1lb3V0KCdHZXRQSExYVG9wMigpJywgMTAwMCo2MCk7ICANCiAgICB9DQoNCiAgICBmdW5jdGlvbiBjYl9HZXRQSExYVG9wMihyLCBlKQ0KICAgIHsNCiAgICAgICAgaWYgKGUpIHJldHVybiBhbGVydChlLm1lc3NhZ2UpOw0KICAgICAgICB2YXIgZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkaXZQSExYVG9wMicpOw0KICAgICAgICBpZiAoZCAhPSBudWxsKQ0KICAgICAgICAgICAgZC5pbm5lckhUTUwgPSByOw0KDQovLyAgICAgICAgdmFyIGRPbmUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGl2UEhMWFRvcDEnKTsgIA0KLy8gICAgICAgIGlmIChkT25lICE9IG51bGwpDQovLyAgICAgICAgICAgIGRPbmUuc2V0QXR0cmlidXRlKCJzdHlsZSIsICJoZWlnaHQ6MHB4Iik7DQogICAgfQ0KPC9zY3JpcHQ+DQo8IS0tIEVuZCBUb3BQSExYSW5kZXhPcHRpb25zLmh0bWwgLS0+PC9kaXY+CjxkaXYgaWQ9IlBITFgzIiBzdHlsZT0iZGlzcGxheTogbm9uZSI+PCEtLSBCZWdpbiBUb3BXb3JsZEN1cnJlbmN5T3B0aW9ucy5odG1sIC0tPg0KPGRpdiBzdHlsZT0icGFkZGluZy1sZWZ0OjVweDtwYWRkaW5nLXJpZ2h0OjVweDt2ZXJ0aWNhbC1hbGlnbjp0b3A7Ij4NCjxkaXYgaWQ9J2RpdlBITFhUb3AzJz4NCgk8aDIgc3R5bGU9ImZvbnQtc2l6ZToxMnB4OyI+DQogICAgICAgIDx0YWJsZSBzdHlsZT0iYm9yZGVyLXN0eWxlOm5vbmU7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDsiPg0KCQkgICAgPHRyPjx0ZCBzdHlsZT0id2lkdGg6MzE1cHg7d2hpdGUtc3BhY2U6bm93cmFwO2JvcmRlci1zdHlsZTpub25lO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ij4NCiAgICAgICAgICAgICAgICAgICAgVG90YWwgUEhMWCBXb3JsZCBDdXJyZW5jeSBPcHRpb25zIFZvbHVtZTombmJzcDsNCiAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMnB4OyI+MTAzPC9zcGFuPg0KICAgICAgICAgICAgICAgIDwvdGQ+DQoJCQkgICAgPHRkIHN0eWxlPSJmb250LXNpemU6MTFweDt3aWR0aDozOTBweDt0ZXh0LWFsaWduOnJpZ2h0O2JvcmRlci1zdHlsZTpub25lO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ij4NCiAgICAgICAgICAgICAgICAgICAgTGFzdCB1cGRhdGVkIDAyLzA1LzIwMTQgMTc6NDENCiAgICAgICAgICAgICAgICA8L3RkPg0KCQkgICAgPC90cj4NCgkJPC90YWJsZT4NCgk8L2gyPg0KICAgIDxwPiZuYnNwOzwvcD4NCiAgICA8ZGl2IGNsYXNzPSJnZW5UYWJsZUhvbWUiIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjp0b3A7Ij4NCiAgICAgICAgPHRhYmxlIHN0eWxlPSJ3aWR0aDo1NDBweDtmb250LXNpemU6MTFweDsiPg0KCSAgICAgICAgPHRyPjx0aD5SYW5rPC90aD4NCgkJICAgICAgICA8dGg+U3ltYm9sPC90aD4NCgkJICAgICAgICA8dGg+Q3VycmVuY3k8L3RoPg0KCQkgICAgICAgIDx0aCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodDsiPlZvbHVtZTwvdGg+DQoJICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyID4NCgkgICAgICAgICAgICA8dGQgc3R5bGU9InBhZGRpbmctbGVmdDoxMHB4OyI+MTwvdGQ+DQoJICAgICAgICAgICAgPHRkIHN0eWxlPSJwYWRkaW5nLWxlZnQ6MTBweDsiPlhEQzwvdGQ+DQoJICAgICAgICAgICAgPHRkIHN0eWxlPSJwYWRkaW5nLWxlZnQ6MTBweDsiPlBITFggQ0FOQURJQU4gRE9MTEFSPC90ZD4NCgkgICAgICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7Ij42NTwvdGQ+DQogICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPSdnZW5UYWJsZWFsdCcgPg0KCSAgICAgICAgICAgIDx0ZCBzdHlsZT0icGFkZGluZy1sZWZ0OjEwcHg7Ij4yPC90ZD4NCgkgICAgICAgICAgICA8dGQgc3R5bGU9InBhZGRpbmctbGVmdDoxMHB4OyI+WERFPC90ZD4NCgkgICAgICAgICAgICA8dGQgc3R5bGU9InBhZGRpbmctbGVmdDoxMHB4OyI+UEhMWCBFVVJPPC90ZD4NCgkgICAgICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7Ij4zMDwvdGQ+DQogICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyID4NCgkgICAgICAgICAgICA8dGQgc3R5bGU9InBhZGRpbmctbGVmdDoxMHB4OyI+MzwvdGQ+DQoJICAgICAgICAgICAgPHRkIHN0eWxlPSJwYWRkaW5nLWxlZnQ6MTBweDsiPlhETjwvdGQ+DQoJICAgICAgICAgICAgPHRkIHN0eWxlPSJwYWRkaW5nLWxlZnQ6MTBweDsiPlBITFggSkFQQU5FU0UgWUVOPC90ZD4NCgkgICAgICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7Ij42PC90ZD4NCiAgICAgICAgICAgIDwvdHI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9J2dlblRhYmxlYWx0JyA+DQoJICAgICAgICAgICAgPHRkIHN0eWxlPSJwYWRkaW5nLWxlZnQ6MTBweDsiPjQ8L3RkPg0KCSAgICAgICAgICAgIDx0ZCBzdHlsZT0icGFkZGluZy1sZWZ0OjEwcHg7Ij5YREE8L3RkPg0KCSAgICAgICAgICAgIDx0ZCBzdHlsZT0icGFkZGluZy1sZWZ0OjEwcHg7Ij5QSExYIEFVU1RSQUxJQU4gRE9MTEFSPC90ZD4NCgkgICAgICAgICAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7Ij4yPC90ZD4NCiAgICAgICAgICAgIDwvdHI+DQogICAgICAgICAgICAgICAgICAgIDwvdGFibGU+DQogICAgPC9kaXY+DQo8L2Rpdj4NCjwvZGl2Pg0KDQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPg0KCWZ1bmN0aW9uIFN0b3BQSExYVG9wMygpDQoJew0KCQljbGVhclRpbWVvdXQod2luZG93LkhvbWVQYWdlVGltZXJzWydQSExYVG9wMyddKTsNCgl9DQoNCglmdW5jdGlvbiBHZXRQSExYVG9wMygpIA0KICAgIHsNCiAgICAgICAgdmFyIHM7DQogICAgICAgIHZhciBzMjsNCiAgICAgICAgczIgPSAnZGl2UEhMWFRvcDMnOw0KDQogICAgICAgIHZhciBlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoczIpOw0KICAgICAgICBpZiAoZSAhPSBudWxsKSBlLmlubmVySFRNTCA9ICJ1cGRhdGluZy4uLi4iOw0KDQogICAgICAgIFNlcnZlci5CTF9QSExYVG9wMTAuR2V0VXBkYXRlRGF0YShjYl9HZXRQSExYVG9wMywgJ1RvcFdvcmxkQ3VycmVuY3lPcHRpb25zLmh0bWwnLCAnVG9wV29ybGRDdXJyZW5jeU9wdGlvbnMudHh0Jyk7ICAgICAgICAgICAgICAgICANCiAgICAgICAgd2luZG93LkhvbWVQYWdlVGltZXJzWydQSExYVG9wMyddID0gc2V0VGltZW91dCgnR2V0UEhMWFRvcDMoKScsIDEwMDAqNjApOyAgDQogICAgfQ0KDQogICAgZnVuY3Rpb24gY2JfR2V0UEhMWFRvcDMociwgZSkNCiAgICB7DQogICAgICAgIGlmIChlKSByZXR1cm4gYWxlcnQoZS5tZXNzYWdlKTsNCiAgICAgICAgdmFyIGQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGl2UEhMWFRvcDMnKTsNCiAgICAgICAgaWYgKGQgIT0gbnVsbCkNCiAgICAgICAgICAgIGQuaW5uZXJIVE1MID0gcjsgICAgICAgIA0KICAgIH0NCjwvc2NyaXB0Pg0KPCEtLSBFbmQgVG9wV29ybGRDdXJyZW5jeU9wdGlvbnMuaHRtbCAtLT48L2Rpdj4KPC9kaXY+Cgo8L2Rpdj4KCgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CiAgIFRpbWVyX2R1cmF0aW9uID0gMTU7IC8vbnVtYmVyIG9mIHNlY29uZHMgZm9yIGFkIHN3aXRjaAogICBpc19kYXJ0Wm9uZSA9ICJvcHRpb25zIjsKPC9zY3JpcHQ+ZAIFDxYCHwEF0js8IVtpZiBJRSA3XT4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3RlbXBsYXRlX3N0eWxlcy9jYWxsb3V0YWNjb3JkaW9uSUVfaG9tZXBhZ2UuY3NzIi8+CjwhW2VuZGlmXT4KCjwhW2lmIElFIDhdPgo8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVtcGxhdGVfc3R5bGVzL2NhbGxvdXRhY2NvcmRpb25JRThfaG9tZXBhZ2UuY3NzIi8+CjwhW2VuZGlmXT4KCjwhW2lmIElFIDldPgo8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIvdGVtcGxhdGVfc3R5bGVzL2NhbGxvdXRhY2NvcmRpb25JRThfaG9tZXBhZ2UuY3NzIi8+CjwhW2VuZGlmXT4KCjwhW2lmIElFIDEwXT4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3RlbXBsYXRlX3N0eWxlcy9jYWxsb3V0YWNjb3JkaW9uSUU4X2hvbWVwYWdlLmNzcyIvPgo8IVtlbmRpZl0+Cgo8IVtpZiBJRSAxMV0+CjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii90ZW1wbGF0ZV9zdHlsZXMvY2FsbG91dGFjY29yZGlvbklFOF9ob21lcGFnZS5jc3MiLz4KPCFbZW5kaWZdPgoKPCFbaWYgIUlFXT4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iL3RlbXBsYXRlX3N0eWxlcy9jYWxsb3V0YWNjb3JkaW9uRkZfaG9tZXBhZ2UuY3NzIi8+CjwhW2VuZGlmXT4KPGJyPgo8IS0tPGRpdiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDVweDsgbWFyZ2luLXRvcDogMTBweCI+PEgxPlVwY29taW5nIEV2ZW50czwvaDE+CjxUQUJMRSBzdHlsZT0nd2lkdGg6MTgwcHgnPjwvVEFCTEU+PC9kaXY+PGRpdiBzdHlsZT0ndGV4dC1hbGlnbjpyaWdodDtwYWRkaW5nLXRvcDozcHg7d2lkdGg6MTgwcHgnPjxhIGhyZWY9J2h0dHA6Ly93d3cubmFzZGFxdHJhZGVyLmNvbS9UcmFkZXIuYXNweD9pZD1ldmVudHMnIHN0eWxlPSdjb2xvcjpuYXZ5O3RleHQtZGVjb3JhdGlvbjpub25lO2ZvbnQtZmFtaWx5OlNlZ29lIFVJO2ZvbnQtc2l6ZToxMnB4O2NvbG9yOm5hdnk7Jz5WaWV3IEFsbCBFdmVudHM8L2E+PC9kaXY+PGJyPi0tPgoKPGRpdiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDVweDsgbWFyZ2luLXRvcDogMTBweCI+DQoNCjxkaXYgaWQ9ImFjY29yZGlvbiI+DQoNCjxoMiBjbGFzcz0iYWx0Ij48aW1nIGltZyBzcmM9Ii9pbWFnZXMvbWludXMucG5nIiAgaWQ9InN5bWJvbExvb2t1cFNpZ24iIG9uY2xpY2s9IkNvbnRyYWN0RXhwYW5kKCdzeW1ib2xMb29rdXAnLCdzeW1ib2xMb29rdXBTaWduJyk7IHJldHVybiBmYWxzZTsiKTsgcmV0dXJuIGZhbHNlOyI+U3ltYm9sIExvb2t1cCZuYnNwOzwvaDI+PC9kaXY+DQoNCg0KDQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQpmdW5jdGlvbiBzZXRTdHlsZSh4KQ0Kew0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoeCkudmFsdWU9IiI7DQp9DQo8L3NjcmlwdD4NCg0KDQo8ZGl2IGlkPSJzeW1ib2xMb29rdXAiIHN0eWxlPSJ3aWR0aDogMjEwcHg7IG1hcmdpbi1sZWZ0OiA1cHgiPg0KPCEtLSBzcGFuIHN0eWxlPSJtYXJnaW4tcmlnaHQ6IDNweDtmb250LXdlaWdodDogYm9sZDttYXJnaW4tYm90dG9tOiAycHg7Y29sb3I6ICMwMDY2OUU7Zm9udC1zaXplOiAxMXB4OyI+TmFtZSBcIFN5bWJvbDo8L3NwYW4gLS0+DQoNCjxpbnB1dCBpZD0iY29tYmluZWRsb29rdXB0eHQiIHR5cGU9InRleHQiIHN0eWxlPSJ3aWR0aDogMTAwJTsgYm9yZGVyOiAxcHggc29saWQ7IGJvcmRlci1jb2xvcjogI0U5RTlFQTsgbWFyZ2luLWxlZnQ6IDVweDsgKi8gbWFyZ2luLWxlZnQ6IC01cHg7ICIgIGNsYXNzPSJpbnB1dGJveF9zeW1ib2xfaG9tZSIgb25mb2N1cz0ic2V0U3R5bGUodGhpcy5pZCkiICAgdmFsdWU9IkVudGVyIE5hbWUsIFN5bWJvbCBvciBNUElEIiBvbmtleXByZXNzPSJjaGVja0VudGVyKCdzZWN1cml0eVBvcENvbWJpbmVkKCknLCBldmVudCk7IiAvPg0KDQoJCTxzZWxlY3QgY2xhc3M9InN5bWJvbExvb2t1cF9kcm9wYm94IiBpZD0ic3ltbG9va3Vwc2VsZWN0IiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDVweDsgYm9yZGVyOiAxcHggc29saWQ7IGJvcmRlci1jb2xvcjogI0U5RTlFQTsgd2lkdGg6IDEyM3B4OyIgbmFtZT0iVVJMIj4NCgkJPG9wdGlvbiB2YWx1ZT0iQWxsX0lzc3VlcyI+U3RvY2s8L29wdGlvbj4NCgkJPG9wdGlvbiB2YWx1ZT0ib3B0aW9ucyI+T3B0aW9uczwvb3B0aW9uPg0KCQkJCTxvcHRpb24gdmFsdWU9ImJvbmRzIj5Cb25kczwvb3B0aW9uPg0KCQk8b3B0aW9uIHZhbHVlPSJtYXJrZXQiPk1rdC4gUGFydGljaXBhbnQ8L29wdGlvbj4NCgkJPC9zZWxlY3Q+IDxzcGFuIGNsYXNzPSJidG5fZ28iIHN0eWxlPSJwb3NpdGlvbjogYWJzb2x1dGU7ICBwYWRkaW5nLWxlZnQ6IDVweDsgdmVydGljYWwtYWxpZ246IHJpZ2h0Ij4NCiAgICA8YSBpZD0ic3ltTG9va3VwQnV0dG9uIiBvbmNsaWNrPSJzZWN1cml0eVBvcENvbWJpbmVkKCk7Ij5HTzwvYT4NCjwvc3Bhbj4NCg0KDQoNCjwvZGl2Pg0KDQoNCjwhLS0gYWN0aXZhdGUgdGFicyB3aXRoIEphdmFTY3JpcHQgLS0+DQo8c2NyaXB0Pg0KdmFyIHBsdXNJbWcgPSBuZXcgSW1hZ2UoKTsNCnBsdXNJbWcgPSAiL2ltYWdlcy9wbHVzLnBuZyI7DQp2YXIgbWludXNJbWcgPSBuZXcgSW1hZ2UoKTsNCnBsdXNJbWcgPSAiL2ltYWdlcy9taW51cy5wbmciOw0KDQpmdW5jdGlvbiBDb250cmFjdEV4cGFuZChkaXZJZCxpbWdJZCkNCnsNCgl2YXIgYiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGRpdklkKTsNCgl2YXIgaSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGltZ0lkKTsNCglpZiAoYi5zdHlsZS5kaXNwbGF5ID09ICJub25lIikNCgl7DQoJCWIuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7DQoJCWkuc3JjID0gIi9pbWFnZXMvbWludXMucG5nIjsNCgl9DQoJZWxzZQ0KCXsNCgkJYi5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOw0KCQlpLnNyYyA9ICIvaW1hZ2VzL3BsdXMucG5nIjsNCgl9DQoNCn0NCg0KDQoNCjwvc2NyaXB0Pg0KPC9kaXY+Cgo8ZGl2IHN0eWxlPSJtYXJnaW4tbGVmdDogNXB4Ij4NCjxkaXYgaWQ9ImFjY29yZGlvbiI+DQoNCjxoMiBjbGFzcz0iYWx0Ij48aW1nIGltZyBzcmM9Ii9pbWFnZXMvbWludXMucG5nIiAgaWQ9InN5c3N0YXRTaWduIiBvbmNsaWNrPSJDb250cmFjdEV4cGFuZCgnc3lzc3RhdCcsJ3N5c3N0YXRTaWduJyk7IHJldHVybiBmYWxzZTsiPlN5c3RlbSBTdGF0dXM8L2gyPg0KDQoNCgk8ZGl2IGlkPSJzeXNzdGF0IiBzdHlsZT0iZGlzcGxheTpibG9jayI+DQoNCgkJCTxwIHN0eWxlPSJwYWRkaW5nLXRvcDogMTBweDsgbWFyZ2luLWxlZnQ6IDEwcHgiPkRlYyAwMSwgMjAyMyAwOTowOTowOCBFVDwvcD4NCgkJCTx0YWJsZSBjbGFzcz0ic3lzdGVtc3RhdHVzIiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDVweCI+DQoJCQk8dHI+DQoJCQk8dGQgdmFsaWduPSJ0b3AiPg0KCQkJPGEgaHJlZj0iVHJhZGVyLmFzcHg/aWQ9TWFya2V0U3lzdGVtU3RhdHVzIj48aW1nIHNyYz0iaW1hZ2VzL3N5c3RzdGF0X21lc3NhZ2VzX3llcy5naWYiIGFsdD0iU3RhdHVzIG1lc3NhZ2UocykgYXZhaWxhYmxlIi8+PC9hPjwvdGQ+DQoJCQk8L3RkPg0KCQkJPC90cj4NCgkJCTx0cj4NCg0KCQkJPC90YWJsZT4NCgkJPC9kaXY+DQoJPC9kaXY+DQoNCjwhLS0gYWN0aXZhdGUgdGFicyB3aXRoIEphdmFTY3JpcHQgLS0+DQo8c2NyaXB0Pg0KdmFyIHBsdXNJbWcgPSBuZXcgSW1hZ2UoKTsNCnBsdXNJbWcgPSAiL2ltYWdlcy9wbHVzLnBuZyI7DQp2YXIgbWludXNJbWcgPSBuZXcgSW1hZ2UoKTsNCnBsdXNJbWcgPSAiL2ltYWdlcy9taW51cy5wbmciOw0KDQpmdW5jdGlvbiBDb250cmFjdEV4cGFuZChkaXZJZCxpbWdJZCkNCnsNCgl2YXIgYiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGRpdklkKTsNCgl2YXIgaSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGltZ0lkKTsNCglpZiAoYi5zdHlsZS5kaXNwbGF5ID09ICJub25lIikNCgl7DQoJCWIuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7DQoJCWkuc3JjID0gIi9pbWFnZXMvbWludXMucG5nIjsNCgl9DQoJZWxzZQ0KCXsNCgkJYi5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOw0KCQlpLnNyYyA9ICIvaW1hZ2VzL3BsdXMucG5nIjsNCgl9DQoNCn0NCg0KDQoNCjwvc2NyaXB0Pg0KPC9kaXY+Cgo8ZGl2IHN0eWxlPSJwb3NpdGlvbjogcmVsYXRpdmU7IG1hcmdpbi1sZWZ0OiA1cHg7IG1hcmdpbi10b3A6IDEwcHgiPjwhLS0gPHNjcmlwdCBzcmM9Ii9zbmlwcGV0cy9qcy9qcXVlcnkudG9vbHMubWluLmpzIj48L3NjcmlwdD4gLS0+DQoNCg0KDQo8ZGl2IGlkPSJhY2NvcmRpb24iPg0KDQo8aDIgY2xhc3M9ImFsdCI+PGltZyBpbWcgc3JjPSIvaW1hZ2VzL21pbnVzLnBuZyIgIGlkPSJwYW5lMVNpZ24iIG9uY2xpY2s9IkNvbnRyYWN0RXhwYW5kKCdwYW5lMScsJ3BhbmUxU2lnbicpOyByZXR1cm4gZmFsc2U7Ij5SZXNvdXJjZXM8L2gyPg0KDQo8ZGl2IGlkPSJwYW5lMSIgc3R5bGU9ImRpc3BsYXk6YmxvY2siPg0KDQo8dWw+DQo8bGk+PGEgaHJlZj0iaHR0cHM6Ly93d3cubmFzZGFxdHJhZGVyLmNvbS9FQVNQL1RyYWRlckVBU1AuYXNweD9pZD1OZXdzU2lnbnVwIj5HZXQgRS1NYWlsIE5vdGlmaWNhdGlvbnM8L2E+PGEgaHJlZj0iaHR0cHM6Ly93d3cubmFzZGFxdHJhZGVyLmNvbS9FQVNQL1RyYWRlckVBU1AuYXNweD9pZD1OZXdzU2lnbnVwIj48aW1nIHN0eWxlPSJwYWRkaW5nLWxlZnQ6M3B4OyB3aWR0aDogOSU7IGhlaWdodDogOSUiIHNyYz0iL2ltYWdlcy9lbWFpbC5wbmciPjwvYT48L2xpPg0KPGxpPjxhIGhyZWY9Ii9UcmFkZXIuYXNweD9pZD1UcmFkZUhhbHRzIj5UcmFkaW5nIEhhbHRzPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iL1RyYWRlci5hc3B4P2lkPVByaWNlTGlzdFRyYWRpbmcyIj5QcmljaW5nPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iaHR0cHM6Ly93d3cubmFzZGFxdHJhZGVyLmNvbS9FQVNQL1RyYWRlckVBU1AuYXNweD9pZD1DRUZvcm0iPkNsZWFybHkgRXJyb25lb3VzIEZpbGluZzwvYT48L2xpPg0KPGxpPjxhIGhyZWY9Ii9UcmFkZXIuYXNweD9pZD1DYWxlbmRhciI+VHJhZGluZyBDYWxlbmRhcjwvYT48L2xpPg0KPGxpPjxhIGhyZWY9Ii9jb250ZW50L1RlY2huaWNhbFN1cHBvcnQvbmFzZGFxX3N5c19ob3Vycy5wZGYiPk1hcmtldCBTeXN0ZW0gSG91cnM8L2E+PC9saT4NCg0KDQoNCg0KPC9kaXY+PC9kaXY+DQoNCg0KDQoNCg0KPCEtLSBhY3RpdmF0ZSB0YWJzIHdpdGggSmF2YVNjcmlwdCAtLT4NCjxzY3JpcHQ+DQp2YXIgcGx1c0ltZyA9IG5ldyBJbWFnZSgpOw0KcGx1c0ltZyA9ICIvaW1hZ2VzL3BsdXMucG5nIjsNCnZhciBtaW51c0ltZyA9IG5ldyBJbWFnZSgpOw0KcGx1c0ltZyA9ICIvaW1hZ2VzL21pbnVzLnBuZyI7DQoNCmZ1bmN0aW9uIENvbnRyYWN0RXhwYW5kKGRpdklkLGltZ0lkKQ0Kew0KCXZhciBiID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZGl2SWQpOw0KCXZhciBpID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaW1nSWQpOw0KCWlmIChiLnN0eWxlLmRpc3BsYXkgPT0gIm5vbmUiKQ0KCXsNCgkJYi5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsNCgkJaS5zcmMgPSAiL2ltYWdlcy9taW51cy5wbmciOw0KCX0NCgllbHNlDQoJew0KCQliLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7DQoJCWkuc3JjID0gIi9pbWFnZXMvcGx1cy5wbmciOw0KCX0NCg0KfQ0KDQoNCg0KPC9zY3JpcHQ+DQoNCg0KDQoNCg0KDQoNCg0KPC9kaXY+Cgo8ZGl2IHN0eWxlPSJwb3NpdGlvbjogcmVsYXRpdmU7IG1hcmdpbi1sZWZ0OiA1cHg7Ij4NCjxkaXYgaWQ9ImFjY29yZGlvbiI+DQoNCjxoMiBjbGFzcz0iYWx0Ij48aW1nIGltZyBzcmM9Ii9pbWFnZXMvbWludXMucG5nIiAgaWQ9Im5ld3NDYWxsb3V0U2lnbiIgb25jbGljaz0iQ29udHJhY3RFeHBhbmQoJ25ld3NDYWxsb3V0JywnbmV3c0NhbGxvdXRTaWduJyk7IHJldHVybiBmYWxzZTsiPk5ld3M8L2gyPg0KDQo8ZGl2IGlkPSJuZXdzQ2FsbG91dCIgc3R5bGU9ImRpc3BsYXk6YmxvY2siPg0KDQo8dWwgc3R5bGU9InBhZGRpbmctbGVmdDogMjBweCI+DQo8cD48YSB0YXJnZXQ9ICJfbmV3IiBocmVmPSJUcmFkZXJOZXdzLmFzcHg/aWQ9RUNBMjAyMy02OTYiPkNvcnBBY3QgLSAJSW5mb3JtYXRpb24gUmVnYXJkaW5nIHRoZSBCdXNpbmVzcyBDb21iaW5hdGlvbiBvZiBIdXQgLi4uPC9hPjwvcD4NCjxwPjxhIHRhcmdldD0gIl9uZXciIGhyZWY9IlRyYWRlck5ld3MuYXNweD9pZD1FQ0EyMDIzLTY5NSI+Q29ycEFjdCAtIEluZm9ybWF0aW9uIFJlZ2FyZGluZyB0aGUgUmVkZW1wdGlvbiBvZiBDRiBBY3F1aXNpdGlvbiAuLi48L2E+PC9wPg0KPHA+PGEgdGFyZ2V0PSAiX25ldyIgaHJlZj0iVHJhZGVyTmV3cy5hc3B4P2lkPUVDQTIwMjMtNjk0Ij5Db3JwQWN0IC0gSW5mb3JtYXRpb24gUmVnYXJkaW5nIHRoZSBUZW5kZXIgT2ZmZXIgb2YgQnNxdWFyZSBDb3Jwby4uLjwvYT48L3A+DQo8cD48YSB0YXJnZXQ9ICJfbmV3IiBocmVmPSJUcmFkZXJOZXdzLmFzcHg/aWQ9RUNBMjAyMy02OTMiPkNvcnBBY3QgLSBJbmZvcm1hdGlvbiBSZWdhcmRpbmcgdGhlIFJldmVyc2UgU3RvY2sgU3BsaXQgYW5kIENVU0lQLi4uPC9hPjwvcD4NCjxwPjxhIHRhcmdldD0gIl9uZXciIGhyZWY9IlRyYWRlck5ld3MuYXNweD9pZD1FQ0EyMDIzLTY5MiI+Q29ycEFjdCAtIEluZm9ybWF0aW9uIFJlZ2FyZGluZyB0aGUgUmV2ZXJzZSBTdG9jayBTcGxpdCwgUGFyIFZhbHUuLi48L2E+PC9wPg0KPHA+PGEgdGFyZ2V0PSAiX25ldyIgaHJlZj0iVHJhZGVyTmV3cy5hc3B4P2lkPUVDQTIwMjMtNjkxIj5Db3JwQWN0IC0gSW5mb3JtYXRpb24gUmVnYXJkaW5nIHRoZSBSZWRlbXB0aW9uIG9mIEZpblNlcnYgQWNxdWlzaS4uLjwvYT48L3A+DQo8cD48YSB0YXJnZXQ9ICJfbmV3IiBocmVmPSJUcmFkZXJOZXdzLmFzcHg/aWQ9RUNBMjAyMy02OTAiPkNvcnBBY3QgLSBJbmZvcm1hdGlvbiBSZWdhcmRpbmcgdGhlIFJldmVyc2UgU3RvY2sgU3BsaXQgYW5kIENVU0lQLi4uPC9hPjwvcD4NCjxwPjxhIGhyZWY9IlRyYWRlci5hc3B4P2lkPWN1cnJlbnRoZWFkbGluZXMiPm1vcmU8L2E+PC9wPjxicj4NCjwvdWw+DQoNCjwvZGl2PjwvZGl2Pg0KDQoNCg0KDQo8IS0tIGFjdGl2YXRlIHRhYnMgd2l0aCBKYXZhU2NyaXB0IC0tPg0KPHNjcmlwdD4NCnZhciBwbHVzSW1nID0gbmV3IEltYWdlKCk7DQpwbHVzSW1nID0gIi9pbWFnZXMvcGx1cy5wbmciOw0KdmFyIG1pbnVzSW1nID0gbmV3IEltYWdlKCk7DQpwbHVzSW1nID0gIi9pbWFnZXMvbWludXMucG5nIjsNCg0KZnVuY3Rpb24gQ29udHJhY3RFeHBhbmQoZGl2SWQsaW1nSWQpDQp7DQoJdmFyIGIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChkaXZJZCk7DQoJdmFyIGkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpbWdJZCk7DQoJaWYgKGIuc3R5bGUuZGlzcGxheSA9PSAibm9uZSIpDQoJew0KCQliLnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOw0KCQlpLnNyYyA9ICIvaW1hZ2VzL21pbnVzLnBuZyI7DQoJfQ0KCWVsc2UNCgl7DQoJCWIuc3R5bGUuZGlzcGxheSA9ICJub25lIjsNCgkJaS5zcmMgPSAiL2ltYWdlcy9wbHVzLnBuZyI7DQoJfQ0KDQp9DQoNCg0KDQo8L3NjcmlwdD4NCg0KDQoNCg0KDQoNCg0KDQo8L2Rpdj4KCmRkO/g73obDSJDU3N7rsQPRQlAJFas=">
  <input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="7E21AFCE">
  <div id="brandinghp_pub_e">
    <a class="logohp" href="/">
  <img class="logo_web" src="/images/trader-logo-trans.png" alt="Return to the NASDAQTrader.com homepage">
  <img class="logo_print" src="/images/trader_logo_print.png" alt="Return to the NASDAQTrader.com homepage">
</a>
    <div id="toptabs">
      <ul>
        <li id="current"><a href="/"><span>U.S. Markets</span></a></li>
        <!--<li><a href="http://www.nasdaqtrader.com/Micro.aspx?id=OptionsMarket"><span>U.S. Options/Futures</span></a></li>-->
        <li><a href="http://www.nasdaqomxnordic.com"><span>Nordic Market</span></a></li>
        <li><a href="http://www.nasdaqbaltic.com/market/?lang=en"><span>Baltic Market</span></a></li>
        <li><a href="http://www.nasdaqomxnordic.com"><span>First North</span></a></li>
        <li><a href="http://www.nasdaqomx.com/commodities"><span>NASDAQ Commodities Europe</span></a></li>
        <!--<li><a href="http://www.nasdaqomx.com/transactions/markets/nlx"><span>NLX</span></a></li>-->
      </ul>
    </div> <!-- navigation -->
    <!--snippets/toplinks.inc start here-->
    <div id="toplinks_e" style="">
      <p class="tl_1"><img src="/images/go-link_orange.png" alt="Symbol Directory"><a href="/Trader.aspx?id=symbollookup">Symbol Directory</a></p>
      <p class="tl_2"><img src="/images/go-link.png" alt="Feedback"><a href="mailto:subscriber@nasdaq.com?subject=NASDAQtrader.com Web Site Feedback">Feedback</a></p>
    </div>
    <!--snippets/toplinks.inc end here-->
    <!-- <object width="728" height="90">
                <param name="movie" value="https://www.nasdaqtrader.com/trader/dotnet_images/N_market_shareBanner.swf"/>
                <embed src="https://www.nasdaqtrader.com/trader/dotnet_images/N_market_shareBanner.swf" width="728" height="90"></embed>
              </object> -->
  </div>
</form>

<form class="gsc-search-box gsc-search-box-tools" accept-charset="utf-8" __bizdiag="-906336856" __biza="WJ__">
  <table cellspacing="0" cellpadding="0" role="presentation" class="gsc-search-box">
    <tbody>
      <tr>
        <td class="gsc-input">
          <div class="gsc-input-box" id="gsc-iw-id1">
            <table cellspacing="0" cellpadding="0" role="presentation" id="gs_id50" class="gstl_50 gsc-input" style="width: 100%; padding: 0px;">
              <tbody>
                <tr>
                  <td id="gs_tti50" class="gsib_a"><input autocomplete="off" type="text" size="10" class="gsc-input" name="search" title="search" aria-label="search" id="gsc-i-id1" dir="ltr" spellcheck="false"
                      style="width: 100%; padding: 0px; border: none; margin: 0px; height: auto; outline: none;"></td>
                  <td class="gsib_b">
                    <div class="gsst_b" id="gs_st50" dir="ltr"><a class="gsst_a" href="javascript:void(0)" title="Clear search box" role="button" style="display: none;"><span class="gscb_a" id="gs_cb50" aria-hidden="true">×</span></a></div>
                  </td>
                </tr>
              </tbody>
            </table>
          </div>
        </td>
        <td class="gsc-search-button"><button class="gsc-search-button gsc-search-button-v2"><svg width="13" height="13" viewBox="0 0 13 13">
              <title>search</title>
              <path
                d="m4.8495 7.8226c0.82666 0 1.5262-0.29146 2.0985-0.87438 0.57232-0.58292 0.86378-1.2877 0.87438-2.1144 0.010599-0.82666-0.28086-1.5262-0.87438-2.0985-0.59352-0.57232-1.293-0.86378-2.0985-0.87438-0.8055-0.010599-1.5103 0.28086-2.1144 0.87438-0.60414 0.59352-0.8956 1.293-0.87438 2.0985 0.021197 0.8055 0.31266 1.5103 0.87438 2.1144 0.56172 0.60414 1.2665 0.8956 2.1144 0.87438zm4.4695 0.2115 3.681 3.6819-1.259 1.284-3.6817-3.7 0.0019784-0.69479-0.090043-0.098846c-0.87973 0.76087-1.92 1.1413-3.1207 1.1413-1.3553 0-2.5025-0.46363-3.4417-1.3909s-1.4088-2.0686-1.4088-3.4239c0-1.3553 0.4696-2.4966 1.4088-3.4239 0.9392-0.92727 2.0864-1.3969 3.4417-1.4088 1.3553-0.011889 2.4906 0.45771 3.406 1.4088 0.9154 0.95107 1.379 2.0924 1.3909 3.4239 0 1.2126-0.38043 2.2588-1.1413 3.1385l0.098834 0.090049z">
              </path>
            </svg></button></td>
        <td class="gsc-clear-button">
          <div class="gsc-clear-button" title="clear results">&nbsp;</div>
        </td>
      </tr>
    </tbody>
  </table>
</form>

Text Content

 * U.S. Markets
   
 * Nordic Market
 * Baltic Market
 * First North
 * NASDAQ Commodities Europe
   

Symbol Directory

Feedback

 * U.S. Market
   
   
   EQUITIES
   
    * Nasdaq
    * BX
    * PSX
    * Exchange Traded Funds
    * NextShares
   
   
   OPTIONS
   
    * BX Options
    * NOM
    * PHLX
    * ISE
    * GEMX
    * MRX
   
   
   MEMBERSHIP

   
 * Trading Products
   
   
   ORDER/EX MANAGEMENT
   
    * IPO Indicator
    * Nasdaq Workstation
    * TradeInfo
    * TradeInfo for Options
   
   
   NASDAQ CROSSES
   
    * Opening/Closing
    * Net Order Imbalance Information
   
   
   EXCHANGE TRADED FUNDS
   
    * ETF Home
    * Nasdaq Listed ETPs and their DLPs
    * MQP SEC Approval Order
    * Nasdaq Indexes and ETFs
    * Nasdaq-Listed Exchange Traded Funds Data
    * Information Circulars
    * ETP Tier 1 List
    * Listing ETPs on Nasdaq
   
   
   OPTIONS AND FUTURES
   
      
      
      
    * FX Options
    * MSCI Index Options
   
   
   TRADE REPORTING
   
    * FINRA/Nasdaq TRF
    * ACT Workstation
    * InterACT
    * Options Maintenance Tool
   
   
   NASDAQ TRADING INSIGHTS
   
   
   RISK MANAGEMENT
   
    * Nasdaq Risk Platform
   
   
   COMPLIANCE
   
    * Compliance Dashboard
    * Background Check Service
    * InterACT
      
   
   
   TRADING SUPPORT
   
    * Contact
    * Price List
    * Agreements and Forms
    * Specifications
    * Nasdaq System Settings
    * BX System Settings
    * PSX System Settings
   
   
   FACT SHEETS AND GUIDES

   
 * Market Data
   
   
   FEATURED PRODUCTS
   
    * Nasdaq Basic Canada
    * Nasdaq TotalView
    * Nasdaq Fixed Income Market Data
    * Global Index Watch
    * Nasdaq Data-On-Demand
   
   
      CURATED DATA
   
       * Nasdaq Smart Options
   
   
   MARKET DATA PRODUCT MATRIX
   
   
   EQUITIES
   
    * The Nasdaq Stock Market
    * Nasdaq BX
    * Nasdaq PSX
   
   
   OPTIONS AND FUTURES
   
    * Nasdaq PHLX
    * The Nasdaq Options Market
    * Nasdaq BX Options
    * Nasdaq ISE
    * Nasdaq GEMX
    * Nasdaq MRX
   
   
   GLOBAL INDEXES AND ETFS
   
    * Global Index Data Service (GIDS)
    * Global Index Watch (GIW)
    * Index Data Policy
   
   
   EQUITY ANALYTICAL DATA
   
   
   NASDAQ FUND NETWORK
   
   
   DATA POLICIES AND ADMINISTRATION
   
   
   TECHNICAL DOCUMENTATION
   
    * Specifications
    * UDP Address List-US Data Feeds
    * Bandwidth Report
   
   
   PRICE LIST - U.S.
   
   
   PRICE LIST - EUROPEAN
   
   
   MARKET DATA VENDOR LIST

   
 * Connectivity
   
   
   TRADING ACCESS
   
    * Co-Location &
      Wireless Connectivity
    * Points of Presence
    * Extranets
    * Direct Connect
    * Direct Connect Providers
    * Disaster Recovery
   
   
      HOSTING SERVICES
   
       * Space & Power
       * Low Latency Connectivity
       * Connecting to other
         Liquidity Providers
   
   
   EQUITY PROTOCOLS
   
    * Dedicated OUCH
    * OUCH
    * RASHPort
    * FIX
    * CTCI
    * QIX
   
   
   TESTING
   
    * Testing Facility
   
   
   OPTIONS PROTOCOLS
   
    * OTTO
    * FIX
    * SQF
   
   
   MARKET DATA PROTOCOLS
   
   
    * Specifications
    * UDP/IP Addresses
   
   
   CONNECTIVITY MATRIX
   
   
   MARKET DATA VENDORS

   
 * Regulation
   
   
   REGULATORY INITIATIVES
   
   
   TRADING HALTS
   
   
   CIRCUIT BREAKERS
   
   
   REGULATION NMS
   
   
   BACKGROUND CHECK SERVICE
   
   
   REGULATION SHO
   
    * Regulation SHO
    * Threshold List
    * Short Sale Circuit Breakers
   
   
      REGULATORY DATA
   
    * SEC Rule 605 Report
    * Short Interest
    * Daily MP Position Report
    * Information Circulars
    * Options LU/LD Reports
   
   
   TRANSACTIONS POLICIES
   
    * Clearly Erroneous
    * Obvious Error
    * Obvious Error Form
   
   
   DISCIPLINARY ACTIONS
   
    * Nasdaq
    * Nasdaq Options
    * Nasdaq PHLX
    * Nasdaq BX
    * Nasdaq ISE
   
   
   RULE MANUALS
   
    * Nasdaq/NOM
    * BX
    * PHLX/PSX
      
    * SCCP
    * BSECC
   
   
   MARKET REGULATION
   
    * FAQs
   
   
   MARKETWATCH
   
   
   REGULATORY CONTACTS
   
   
   INDUSTRY REGULATORS
   
    * FINRA
    * SEC
    * CFTC

   
 * Market Statistics
   
   
   EQUITIES STATISTICS
   
    * Monthly Market Share
    * Intraday Market Volume
    * Market Share Stats by Symbol
    * M-ELO Transparency Statistics
   
   
   OPTIONS STATISTICS
   
    * Monthly Market Share
    * Intraday Market Volume
    * PHLX Volume & Settlement
   
   
   NASDAQ INDEXES
   
   
   REPORTS
   
    * Daily MP Position Report
    * Daily Market Summary
    * Daily Market Files
      
    * Monthly MP Volume

   
 * News
   
   
   EQUITY NEWS
   
    * Trader Alerts
    * Technical Alerts
    * Regulatory Alerts
    * ETP New Listings Trader Alerts
    * Corporate Action Alerts
   
   
   OTHER NEWS
   
    * UPC Notices
   
   
   OPTIONS NEWS
   
    * Trader Alerts
    * Technical Alerts
    * Regulatory Alerts
   
   
   
   HISTORICAL OPTIONS NEWS
   ISE/GEMX/MRX
   
   
    * MICS
    * RICs
    * Reg SCI
   
   
   MARKET DATA NEWS
   
    * Data News
    * Data Technical
    * Financial Products
    * Nasdaq Fund Network
    * European News
   
   
   NASDAQ FIXED INCOME
   
    * Nasdaq Fixed Income News
   
   
   UTP NEWS
   
    * UTP Vendor News
   
   
   SYSTEM STATUS
   
   
   SUBSCRIBE TO ALERTS
   
   
   RSS FEEDS
   
    * News
    * Trade Halts

   
 * Support
   
   
   PRICE LIST
   
    * Trading Services
    * Market Data
   
   
      AGREEMENTS AND FORMS
   
    * Trading Services
    * Market Data
    * NTS Policies
   
   
   TESTING
   
    * Nasdaq Testing Facility
    * Saturday Testing Policy
   
   
   TECHNICAL SPECIFICATIONS
   
    * Trading Services
    * Market Data
   
   
   TECHNICAL DOCUMENTATION
   
    * Specifications
    * UDP Address List-US Data Feeds
    * Bandwidth Report
   
   
   FACT SHEETS AND GUIDES
   
   
   DIGITAL CERTIFICATE HELP
   
   
   CONTACT INFORMATION
   
   
   SYSTEM HOURS
   
   
   TRADING CALENDAR
   
   
   SUBSCRIBE TO ALERTS
   
   
   SYSTEM SETTINGS
   
    * Nasdaq
    * BX
    * PSX

   
 * Product Login
   
   
   TRADING SERVICES
   
    * IPO Workstation
    * Co-Lo Console
    * Nasdaq Fixed Income
    * Nasdaq Workstation
    * QView
      
      
    * Nasdaq Act Workstation
    * InfoCenter
    * MY Nasdaq
    * Nasdaq Billing
   
   
   MARKET DATA
   
    * Daily List
    * Data Feed Status
    * Nasdaq Fixed Income
    * Fundamental Data
    * Historical ITCH
    * Nasdaq Fund Network
    * Net Order Imbalance
    * Online Vendor Rtg
   
   
   REPORTS
   
      
    * Report HQ

   

Search:
   
×

search
 


 * Market Vol
 * Top Matched
 * Top Matched BX
 * Top Matched PSX
   


U.S. MARKET VOLUME

Full Market Volume Page  


Volume Trades Dollar Volume Set Default Tab Download Most Recent Day Past 30
Days

EQUITIES MARKET VOLUME

Equities Tape A Tape B Tape C US Equity Total Nasdaq 3,454,251 3,806,270
40,318,801 47,579,322 Nasdaq % 17.9% 13.9% 17.6% 17.3% BX 23,309 161,159 529,449
713,917 BX % 0.1% 0.6% 0.2% 0.3% PSX 8,517 124,850 95,561 228,928 PSX % 0.0%
0.5% 0.0% 0.1%

FINRA/TRF Tape A Tape B Tape C FINRA/TRF Total FINRA/Nasdaq TRF™ Carteret
6,005,837 3,663,177 24,985,688 34,654,702 FINRA/Nasdaq TRF™ Carteret % 31.1%
13.4% 10.9% 12.6% FINRA/Nasdaq TRF™ Chicago 1,381 3,503 237,544 242,428
FINRA/Nasdaq TRF™ Chicago % 0.0% 0.0% 0.1% 0.1% Total 19,301,841 27,322,470
228,988,938 275,613,249

Data is updated every 1 minute. Last Update as of 12/01/2023 09:08

 
Full Options Market Volume Page


OPTIONS MARKET VOLUME

Options Volume Market Share The Nasdaq Options Market 1,941,324 5.00% BX Options
Market 912,436 2.00% PHLX 4,302,594 11.00% Market Volume 38,212,749

Data is updated every 1 minute and may be delayed at least 10 minutes. Last
Update 11/30/2023 16:40

Data is updated every minute.

Refer to NASDAQ Market Share Terminology for more information regarding Matched
Handled volume.

NASDAQ BX - TOP LIST BY MATCHED VOLUME


Tape A Symbol Matched Shares











Tape B Symbol Matched Shares











Tape C Symbol Matched Shares











Source: The NASDAQ BX Market

 

NASDAQ PSX - TOP LIST BY MATCHED VOLUME


Tape A Symbol Matched Shares











Tape B Symbol Matched Shares











Tape C Symbol Matched Shares











Source: The NASDAQ PSX Market

 

TOTAL BX OPTIONS VOLUME: 62,052 LAST UPDATED 08/01/2019 18:02

 

Top 10 Equities Options Rank Symbol Name Volume 1 MDR MCDERMOTT INT PANAMA 4,919
2 FXI ISHARES CHINA 2,291 3 BYND BEYOND MEAT, INC. 1,729 4 SPY SPDR S&P 500 ETF
TRUST 1,580 5 ASHR XTRACKERS HARVEST CS 1,503 6 XLI INDUSTRIAL SPDR 1,290 7 EEM
ISHARES MSCI EMERGING MARKETS ETF 1,163 8 GE GEN ELECTRIC CO 1,121 9 SNAP SNAP
Inc. 1,016 10 BABA ALIBABA GROUP HL LTD 973

Source: NASDAQ BX Options Market. Data is updated every 15 to 20 minutes.

TOTAL NOM OPTIONS VOLUME: 2,678,890 LAST UPDATED 08/01/2019 18:02

 

Top 10 Equities Options Rank Symbol Name Volume 1 SPY SPDR S&P 500 ETF TRUST
392,605 2 AAPL APPLE INC. 132,778 3 QQQ POWERSHARES QQQ TR 1 90,663 4 EWZ ISHARE
MSCI BRAZIL 69,047 5 AMD ADV MICRO DEVICES 58,594 6 VXX Ipath Series B S&P 500
Vix 55,048 7 BABA ALIBABA GROUP HL LTD 49,465 8 MSFT MICROSOFT CORP 42,774 9 FB
FACEBOOK INC 40,292 10 FXI ISHARES CHINA 35,274

Source: NASDAQ Options Market. Data is updated every 15 to 20 minutes.

Equities Options Volume Index Options Volume

TOTAL PHLX EQUITY OPTIONS VOLUME:  1,226,111 LAST UPDATED 11/04/2019 17:35

 

Top 10 Equities Options Rank Symbol Name Volume 1 FXI ISHARES CHINA 139,264 2
EEM ISHARES MSCI EMERGING MARKETS ETF 114,988 3 SPY SPDR S&P 500 ETF TRUST
84,367 4 T AT&T INCCOM 75,725 5 EWZ ISHARE MSCI BRAZIL 71,752 6 VXX Ipath Series
B S&P 500 Vix 56,429 7 AAPL APPLE INC. 48,613 8 GE GEN ELECTRIC CO 38,379 9 AMD
ADV MICRO DEVICES 35,123 10 BABA ALIBABA GROUP HL LTD 33,992

Source: NASDAQ PHLX. Data is updated every 15 to 20 minutes.

TOTAL PHLX INDEX OPTIONS VOLUME: 2,679 LAST UPDATED 11/04/2019 17:36

 

Top 10 Index Options Rank Index Symbol Index Name Volume 1 NDX NASDAQ 100 INDEX
NEW CALC 2,655 2 SOX SEMICONDUCTOR INDEX 20 3 BKX KBW BANK INDEX 4

TOTAL PHLX WORLD CURRENCY OPTIONS VOLUME:  103 LAST UPDATED 02/05/2014 17:41

 

Rank Symbol Currency Volume 1 XDC PHLX CANADIAN DOLLAR 65 2 XDE PHLX EURO 30 3
XDN PHLX JAPANESE YEN 6 4 XDA PHLX AUSTRALIAN DOLLAR 2





SYMBOL LOOKUP 

Stock Options Bonds Mkt. Participant GO


SYSTEM STATUS

Dec 01, 2023 09:09:08 ET




RESOURCES

 * Get E-Mail Notifications
 * Trading Halts
 * Pricing
 * Clearly Erroneous Filing
 * Trading Calendar
 * Market System Hours


NEWS

CorpAct - Information Regarding the Business Combination of Hut ...

CorpAct - Information Regarding the Redemption of CF Acquisition ...

CorpAct - Information Regarding the Tender Offer of Bsquare Corpo...

CorpAct - Information Regarding the Reverse Stock Split and CUSIP...

CorpAct - Information Regarding the Reverse Stock Split, Par Valu...

CorpAct - Information Regarding the Redemption of FinServ Acquisi...

CorpAct - Information Regarding the Reverse Stock Split and CUSIP...

more




 * Nasdaq Trader Popular Sections:
 * Performance Statistics
 * Email Sign-Up                                          

 * 
 * © Copyright
 * Disclaimer
 * Trademarks
 * Privacy Statement
 * Contact Us
 * Help
 * Feedback
 * Share                                          











Site Uses Cookies

This website utilizes cookies and similar technologies for functionality and
other purposes. Your use of this website constitutes your acceptance of cookies.
To learn more about our cookies and the choices we offer, please see the link to
our Cookie Policy.

Ok, got itPrivacy Policy