X0RIXwAAA2YAAHxmHOk4TYqtq+K3NNNhs2ZrUazGMX9kT0U9q0rC+Cd+O5iu5jrBJrGkCVQ1dl9RXtvqPFQxFoSha8Is+sVl4qR9BIbiVpgFJOSJbXvf8fHSV6LNO4T1vWWZ/obbDkiRp48qZZXTR4Uxjmydeyjg0H2bNWyvo89deMX60aVcCggg6o/7QrSl8o0SGQ5S3rdNFuCpGYWi+yM4eHVVhGlZvd4xrOJuxljDR5eIw+tbzNdlayVaadKfyVDK/b2v5SVsYjaBnxNJEDIuO1NlfwayGBBr5u0VGdq0rd0mUdU48m2AHwqNzPVipIGRayjsI3/TQ7KYsT8RwJmf2fTPvYAawlWGfFTlx1huUpI2XeSJi7sVBcozVnfY/BpI+r2jkUbs5Fz8RNP0eB7nuG3OXHrxudcaK+56Im4BjBVLtiZrqTpxXoEVu7waKT3VPkISHDsNT36v6ASbTm1Io+RreT4CFjPOtsZItP333hAoDCYGWiqWccyJjkJLyer6c+9Sn8bhHPtzo+vPYPPhRvZZUhD7KPCxw+Df1+A0TM9/WbtJsLeXmex553uDVjI7fIIjjQJIBqLIcRuqBFcYfbPJ4WDMiQJdLNXvfp2vwidiKFN1wFywEHdnWHagWVlXqcdnPJuWnfKRQ9EoWZdmbWrIaUYmEyPIBGbBz6qR7XFelP3QHB80P2IxiPKm/IVFOUuIp5rcpVdKb8yaRRXJwbm8S96sBT/4pNyOhCLygjYclTGiYgN4+W16KPyFEZ/Z/sRn9tRqyYkNNw+FJkghdoprvsjah37F15Rqavaak5Vzcqlcvev1nHj517Hkt4rnap1VYiYnIYx2sVjT6JmUOri/2P2l0c733zNy/NXYDJrrqq+jUYOB0fGWnL1zK/SIwsLvu7HFekGzR222bQojavFUSXRukPdDmKV8xv6ACzV6fYEKIA/wb/34ZDHSqB1mIZzmUCjh8pVfTHc6zQdwwgK1OjyV+PTXS4YGK0iQyPZMDz6Nuw5gX4kvhpB6YYaycQEe8M8I3EX5tk7cTFdeIN+9KRJrlSt8dov7mfkV3XmdBltUH6egJe81jO8lYrNuGQsT9LaJPxC1vUIjFZadczPQUl8ivCYMfRzepiEU8nfxzyk5rVks7aQST3vB1rmKUo/4YnHAF9dBWMk47Qo8IWRvY3R5cGUgaHRtbD4KPGh0bWw+Cgo8aGVhZCBkZXNpZ24td2lkdGg9Ijc1MCI+CiAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLG1pbmltdW0tc2NhbGU9MS4wLG1heGltdW0tc2NhbGU9MS4wLHVzZXItc2NhbGFibGU9bm8iIC8+CiAgICA8bWV0YSBuYW1lPSJhcHBsZS1tb2JpbGUtd2ViLWFwcC1jYXBhYmxlIiBjb250ZW50PSJ5ZXMiPgogICAgPG1ldGEgbmFtZT0iYXBwbGUtbW9iaWxlLXdlYi1hcHAtc3RhdHVzLWJhci1zdHlsZSIgY29udGVudD0iYmxhY2siPgogICAgPG1ldGEgbmFtZT0iZm9ybWF0LWRldGVjdGlvbiIgY29udGVudD0idGVsZXBob25lPW5vIj4KICAgIDx0aXRsZT48L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJ0ZW1wbGF0ZV8xL2Nzcy9zdHlsZS5taW4uY3NzIiAvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJ0ZW1wbGF0ZV8xL2Nzcy9Td2lwZXIuY3NzIiAvPgogICAgPCEtLemhtemdouagt+W8jy0tPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJ0ZW1wbGF0ZV8xL2Nzcy9hbmltYXRlLm1pbi5jc3MiIC8+CiAgICA8IS0tQ1NTM+WKqOeUu+W6ky0tPgogICAgPHNjcmlwdCBzcmM9InRlbXBsYXRlXzEvanMvcmVtLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJ0ZW1wbGF0ZV8xL2pzL2pxdWVyeS0yLjIuNC5taW4uanMiPjwvc2NyaXB0PgogICAgPCEtLWpR5bqTLS0+CiAgICA8c2NyaXB0IHNyYz0idGVtcGxhdGVfMS9qcy9zd2lwZXItNC4yLjAubWluLmpzIj48L3NjcmlwdD4KICAgIDwhLS3ova7mkq3lupMtLT4KICAgIDwhLS08c2NyaXB0IHNyYz0idGVtcGxhdGVfMS9qcy9Nb2JFcHAtMS4xLjEuanMiPjwvc2NyaXB0Pi0tPgogICAgPCEtLTxzY3JpcHQgc3JjPSJ0ZW1wbGF0ZV8xL2pzL3NoYXJldHJhY2UubWluLmpzIj48L3NjcmlwdD4tLT4KIDxsaW5rIGhyZWY9Ii9jc3MvY29tbW9uLmNzcyIgcmVsPSJzdHlsZXNoZWV0Ij4KPGxpbmsgaHJlZj0iL2Nzcy9yZWdpcy5jc3MiIHJlbD0ic3R5bGVzaGVldCI+CjxsaW5rIGhyZWY9Ii9jc3MvZGlhbG9nLmNzcyIgcmVsPSJzdHlsZXNoZWV0Ij4KPHNjcmlwdCBzcmM9Ii9qcy9tRGlhbG9nTWluLmpzIj48L3NjcmlwdD4KCiAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vd3d3LmRzeWwud3UzNnUuY2Mvc3RhdGljL2pzL2RzeWwuc2RrLnYuMS4wLjAuanMiPjwvc2NyaXB0PgogICA8c2NyaXB0IHNyYz0iL2pzL2RldmljZS5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIvanMvcmVnaXMuanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+CiAgIDxzY3JpcHQgc3JjPSIvanMvbGF5ZXJfdjMuMS4xL21vYmlsZS9sYXllci5qcyI+PC9zY3JpcHQ+CiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJhbGwiPgogICAgICAgIC5jZW50ZXJ7CiAgICAgICAgICAgIHdpZHRoOjEwMCU7CiAgICAgICAgfQogICAgICAgIGJvZHkgewogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBibGFjazsKICAgICAgICB9CiAgICAgICAgI2tlZnUgewogICAgICAgICAgICBoZWlnaHQ6IDEuOTVyZW0gIWltcG9ydGFudDsKICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgfQogICAgPC9zdHlsZT4KPC9oZWFkPgoKPGJvZHk+CiAgICAKICAgIDxkaXYgY2xhc3M9Im5vdF9kb3duX2JvZHkiPgoJICAgIDxkaXYgY2xhc3M9Im5vdF9kb3duIj48L2Rpdj4KCSAgICA8ZGl2IGNsYXNzPSJub3RfZG93bl9pbWciPgoJICAgIAk8aW1nIHNyYz0iL2ltZ3Mvbm9fZG93bl9jb3B5LnBuZyI+CgkgICAgPC9kaXY+Cgk8L2Rpdj4KICAgIAogICAgPGRpdiBpZD0icG9zdGVyX2lvc19ndWlkZSIgc3R5bGU9ImRpc3BsYXk6IG5vbmUiPgoJICAgIDxkaXY+CiAgICAJICAgIDxpbWcgc3R5bGU9ImRpc3BsYXk6YmxvY2s7IHdpZHRoOiAxMDAlIiBzcmM9Ii9pbWdzLzJfMDEuanBnIj4KCSAgICA8L2Rpdj4KCSAgICA8ZGl2IGlkPSJkb253bG9hZF90ZiI+CiAgICAJICAgIDxpbWcgc3R5bGU9ImRpc3BsYXk6YmxvY2s7IHdpZHRoOiAxMDAlIiBzcmM9Ii9pbWdzLzJfMDIuanBnIj4KCSAgICA8L2Rpdj4KCSAgICA8ZGl2IGlkPSJkb253bG9hZF9jb21wIj4KCSAgICAgICAgPGltZyBzdHlsZT0iZGlzcGxheTpibG9jazsgd2lkdGg6IDEwMCUiIHNyYz0iL2ltZ3MvMl8wMy5qcGciPgoJICAgIDwvZGl2PgoJICAgIDxkaXY+CgkgICAgICAgIDxpbWcgc3R5bGU9ImRpc3BsYXk6YmxvY2s7IHdpZHRoOiAxMDAlIiBzcmM9Ii9pbWdzLzJfMDQuanBnIj4KCSAgICA8L2Rpdj4KCTwvZGl2PgogICAgCiAgICA8ZGl2IGNsYXNzPSJmb290ZXIiIHN0eWxlPSJkaXNwbGF5OiBub25lIiBpZD0iZG93bmxvYWRfYnV0dG9uIj4KICAgICAgIAogICAgPC9kaXY+CiAgICAKICAgICAgICAKICAgIDxkaXYgY2xhc3M9ImtmIj4KICAgICAgICA8YSBpZD0ia2VmdSIgaHJlZj0iIiB0YXJnZXQ9Il9ibGFuayI+CiAgICAgICAgICAgIDxpbWcgc3JjPSIuL3RlbXBsYXRlXzEvaW1nL2tmLnBuZyIgYWx0PSIiPgogICAgICAgIDwvYT4KICAgIDwvZGl2PgogICAgCiA8ZGl2IGNsYXNzPSJzaGFkb3ctYm94Ij4KCTxpbWcgc3JjPSIvaW1ncy9ndWlkZV93ZWl4aW4ucG5nIj4KPC9kaXY+CjxkaXYgaWQ9Imluc3RhbGxJbmZvIj4KICAgIDxpbWcgc3JjPSIiIGFsdD0iIiBpZD0iaW1nSW5mbyI+CiAgICA8ZGl2IGlkPSJjbG9zZUJ0biI+54K55Ye75YWz6ZetPC9kaXY+CjwvZGl2PgoKCjxkaXYgc3R5bGU9ImRpc3BsYXk6bm9uZTsiIGNsYXNzPSJzb3JjZSI+5pWw5o2u5bqTPC9kaXY+Cgo8aWZyYW1lIGlkPSJpZnJhbWUxIiBzdHlsZT0iZGlzcGxheTpub25lOyI+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIiPjwvc2NyaXB0Pgo8L2lmcmFtZT4KCiAgICA8ZGl2IGlkPSdjb3B5X2RpdicgY2xhc3M9Im9wYWNpdHkiPgogICAgICAgIDxwPuWmguaenOWPs+S4iuinki4uLuaXoOazleeCueWHuzwvcD4KICAgICAgICA8dWw+CiAgICAgICAgICAgIDxsaSBzdHlsZT0ibWFyZ2luOiAwIDE1cHggNDVweCAxNXB4OyI+CiAgICAgICAgICAgICAgICA8aW1nIGlkPSdpZV9pY29uJyBzcmM9Ii9pbWdzL2llLnBuZyIgLz4KICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgPGxpIHN0eWxlPSJtYXJnaW46IDE2cHggMDsiPgogICAgICAgICAgICAgICAg6K+35aSN5Yi26ZO+5o6l5Yiw5rWP6KeI5Zmo5omT5byACiAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgIDxsaSBzdHlsZT0ibWFyZ2luOiAxM3B4IDIzcHggMCAwO2Zsb2F0OnJpZ2h0Ij4KICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBvbmNsaWNrPSJjb3B5VGV4dChsb2NhdGlvbi5ocmVmKTsiPuWkjeWItjwvYnV0dG9uPgogICAgICAgICAgICA8L2xpPgogICAgICAgIDwvdWw+CiAgICA8L2Rpdj4KCiAgICAJCgk8ZGl2IGlkPSJwcm9tb3Rlcl9pZCIgc3R5bGU9ImhlaWdodDo1MHB4O2xpbmUtaGVpZ2h0OjUwcHg7IHdpZHRoOiAxMjBweDsgei1pbmRleDogOTk7IHRleHQtYWxpZ246IGNlbnRlcjsgYmFja2dyb3VuZC1jb2xvcjogI2ZlZTYwNjsgb3BhY2l0eTogMC45OyBjb2xvcjogcmdiKDAsIDAsIDApOyBib3JkZXItcmFkaXVzOiAxMnB4OyBkaXNwbGF5OiBub25lO2ZvbnQtd2VpZ2h0OiA5MDA7cG9zaXRpb246Zml4ZWQ7Ym90dG9tOjEwMHB4O2xlZnQ6MzUlOyI+CiAgICAgICAgICAgICAgICA8c3Bhbj4KICAgICAgICAgICAgICAgICAgICDpgoDor7fnoIHvvJo8c3Bhbj48L3NwYW4+CiAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAKICAgIDwvZGl2PgoKICAgIAo8ZGl2IGNsYXNzPSJtb2JpbGUtd3JhcCBjZW50ZXIiICBpZD0iYW5kcm9pZF9kb3dubG9hZCIgZGF0YS1jbGlwYm9hcmQtdGV4dD0iIj4KICAgICAgICA8ZGl2IGNsYXNzPSJmb290ZXIiIGlkPSJmb290ZXItYW5kcm9pZCI+CiAgICAgICAgICAgICA8IS0t5o6o5bm/5ZGYaWQtLT4KICAgICAgICAgICAgPCEtLTxkaXYgaWQ9InByb21vdGVyX2lkIiBzdHlsZT0ibWFyZ2luOiAxMHB4IGF1dG87IHdpZHRoOiAxMjBweDsgei1pbmRleDogOTk7IHBhZGRpbmc6IDEwcHg7IHRleHQtYWxpZ246IGNlbnRlcjsgYmFja2dyb3VuZC1jb2xvcjogI2ZlZTYwNjsgb3BhY2l0eTogMC45OyBjb2xvcjogcmdiKDAsIDAsIDApOyBib3JkZXItcmFkaXVzOiAxMnB4OyBkaXNwbGF5OiBub25lO2ZvbnQtd2VpZ2h0OiA5MDA7Ij4tLT4KICAgICAgICAgICAgPCEtLSAgICA8c3Bhbj4tLT4KICAgICAgICAgICAgPCEtLSAgICAgICAg6YKA6K+356CB77yaPHNwYW4+PC9zcGFuPi0tPgogICAgICAgICAgICA8IS0tICAgIDwvc3Bhbj4tLT4KICAgICAgICAgICAgICAgIAogICAgICAgICAgICA8IS0tPC9kaXY+LS0+CgkgICAgICAgIDxpbWcgaWQ9ImZvb3RlciIgc3JjPSIvaW1ncy9zdHlsZV8wL2Zvb3Rlci5wbmciPgoJICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImltZ2R3UCI+CiAgICAgICAgICAgIDxhIGNsYXNzPSJkb253bG9hZCIgaHJlZj0iamF2YXNjcmlwdDoiPgogICAgICAgICAgICAgICAgPGltZyBzcmM9IiI+CiAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgPGltZyBpZD0iYmcxIiBzcmM9Ii9pbWdzL3N0eWxlXzAvYmcxLmpwZyI+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iaW1nZHdQIj4KICAgICAgICAgICAgPGltZyBpZD0iYmcyIiBzcmM9Ii9pbWdzL3N0eWxlXzAvYmcyLmpwZyI+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iaW1nZHdQIj4KICAgICAgICAgICAgPGltZyBpZD0iYmczIiBzcmM9Ii9pbWdzL3N0eWxlXzAvYmczLmpwZyI+CiAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIAogICAgPCEtLTxkaXYgY2xhc3M9ImJhbm5lciIgb25DbGljaz0iRG93blNvZnQoKTsiPi0tPgogICAgPCEtLSAgICA8aW1nIHNyYz0iLi90ZW1wbGF0ZV8xL2ltZy9jOTU2NjVfNzUweDM4Ni5wbmciIGFsdD0iIj4tLT4KICAgIDwhLS08L2Rpdj4tLT4KICAgIDwhLS08ZGl2IGNsYXNzPSJpbmZvcm0iPi0tPgogICAgPCEtLSAgICA8ZGl2IGNsYXNzPSJpbnRycyIgb25DbGljaz0iRG93blNvZnQoKTsiPi0tPgogICAgPCEtLSAgICAgICAgPGltZyBzcmM9Ii4vdGVtcGxhdGVfMS9pbWcvNzhjOTRjXzY5MHgxNzQucG5nIiBhbHQ9IiI+LS0+CiAgICA8IS0tICAgIDwvZGl2Pi0tPgogICAgPCEtLSAgICA8ZGl2IGNsYXNzPSJidXR0b24iPi0tPgogICAgPCEtLSAgICAgICAgPGJ1dHRvbiBvbkNsaWNrPSJEb3duU29mdCgpOyI+PC9idXR0b24+LS0+CiAgICA8IS0tICAgIDwvZGl2Pi0tPgogICAgPCEtLSAgICA8ZGl2IGNsYXNzPSJsaW5lcyI+LS0+CiAgICAgICAgICAgIDwhLS08ZGl2IGNsYXNzPSJ0aXRzIj4tLT4KICAgICAgICAgICAgPCEtLSAgICA8aW1nIHNyYz0iLi90ZW1wbGF0ZV8xL2ltZy9lMzc4MTlfNzUweDE1NC5wbmciIGFsdD0iIj4tLT4KICAgICAgICAgICAgPCEtLTwvZGl2Pi0tPgogICAgICAgICAgICA8IS0tPGRpdiBjbGFzcz0iY29udHMiPi0tPgogICAgICAgICAgICA8IS0tICAgIDxkaXYgY2xhc3M9Iml0ZW0iPi0tPgogICAgICAgICAgICA8IS0tICAgICAgICA8YSBkYXRhLXVybD0iaHR0cHM6Ly93d3cuNTk1MDA0LmNjIiBjbGFzcz0iZW50ZXIiPi0tPgogICAgICAgICAgICA8IS0tICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGluZSI+LS0+CiAgICAgICAgICAgIDwhLS0gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibXMiPi0tPgogICAgICAgICAgICA8IS0tICAgICAgICAgICAgICAgICAgICAxMm1zLS0+CiAgICAgICAgICAgIDwhLS0gICAgICAgICAgICAgICAgPC9kaXY+LS0+CiAgICAgICAgICAgIDwhLS0gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idHh0Ij4tLT4KICAgICAgICAgICAgPCEtLSAgICAgICAgICAgICAgICAgICAgd3d3LjU5NTAwNC5jYy0tPgogICAgICAgICAgICA8IS0tICAgICAgICAgICAgICAgIDwvZGl2Pi0tPgogICAgICAgICAgICA8IS0tICAgICAgICAgICAgPC9kaXY+LS0+CiAgICAgICAgICAgIDwhLS0gICAgICAgICAgICA8ZGl2IGNsYXNzPSJidXR0b25zIj4tLT4KICAgICAgICAgICAgPCEtLSAgICAgICAgICAgICAgICA8YnV0dG9uPjwvYnV0dG9uPi0tPgogICAgICAgICAgICA8IS0tICAgICAgICAgICAgPC9kaXY+LS0+CiAgICAgICAgICAgIDwhLS0gICAgICAgIDwvYT4tLT4KICAgICAgICAgICAgPCEtLSAgICA8L2Rpdj4tLT4KICAgICAgICAgICAgPCEtLTwvZGl2Pi0tPgogICAgPCEtLSAgICA8L2Rpdj4tLT4KICAgIDwhLS0gICAgPGRpdiBjbGFzcz0iZG93bmxvYWQiIG9uQ2xpY2s9IkRvd25Tb2Z0KCk7Ij4tLT4KICAgIDwhLS0gICAgICAgIDxkaXYgY2xhc3M9InRpdHMiPi0tPgogICAgPCEtLSAgICAgICAgICAgIDxpbWcgc3JjPSIuL3RlbXBsYXRlXzEvaW1nL2I5NDVkMF83NTB4MTU2LnBuZyIgYWx0PSIiPi0tPgogICAgPCEtLSAgICAgICAgPC9kaXY+LS0+CiAgICA8IS0tICAgICAgICA8ZGl2IGNsYXNzPSJjb250cyI+LS0+CiAgICA8IS0tICAgICAgICAgICAgPGltZyBzcmM9Ii4vdGVtcGxhdGVfMS9pbWcvOGQxMjJiXzY4MHg1NzIucG5nIiBhbHQ9IiI+LS0+CiAgICA8IS0tICAgICAgICA8L2Rpdj4tLT4KICAgIDwhLS0gICAgPC9kaXY+LS0+CiAgICA8IS0tICAgIDxkaXYgY2xhc3M9ImRvd25sb2FkIiBvbkNsaWNrPSJEb3duU29mdCgpOyI+LS0+CiAgICA8IS0tICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRzIj4tLT4KICAgIDwhLS0gICAgICAgICAgICA8aW1nIHNyYz0iLi90ZW1wbGF0ZV8xL2ltZy95emZ3LnBuZyIgYWx0PSIiPi0tPgogICAgPCEtLSAgICAgICAgPC9kaXY+LS0+CiAgICA8IS0tICAgICAgICA8ZGl2IGNsYXNzPSJjb250cyI+LS0+CiAgICA8IS0tICAgICAgICAgICAgPGltZyBzcmM9Ii4vdGVtcGxhdGVfMS9pbWcveXoucG5nIiBhbHQ9IiI+LS0+CiAgICA8IS0tICAgICAgICA8L2Rpdj4tLT4KICAgIDwhLS0gICAgPC9kaXY+LS0+CiAgICA8IS0tICAgIDxkaXYgY2xhc3M9InBob3RvIiBvbkNsaWNrPSJEb3duU29mdCgpOyI+LS0+CiAgICA8IS0tICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRzIj4tLT4KICAgIDwhLS0gICAgICAgICAgICA8aW1nIHNyYz0iLi90ZW1wbGF0ZV8xL2ltZy9mOGMzMWNfNzUweDE1Ni5wbmciIGFsdD0iIj4tLT4KICAgIDwhLS0gICAgICAgIDwvZGl2Pi0tPgogICAgPCEtLSAgICAgICAgPGRpdiBjbGFzcz0iY29udHMiPi0tPgogICAgPCEtLSAgICAgICAgICAgIDxkaXYgY2xhc3M9InN3aXBlci1jb250YWluZXIgbGlzdCI+LS0+CiAgICA8IS0tICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0ic3dpcGVyLXdyYXBwZXIiPi0tPgogICAgPCEtLSAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJzd2lwZXItc2xpZGUiPi0tPgogICAgPCEtLSAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL3RlbXBsYXRlXzEvaW1nL3QxLnBuZyIgYWx0PSIiPi0tPgogICAgPCEtLSAgICAgICAgICAgICAgICAgICAgPC9saT4tLT4KICAgIDwhLS0gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0ic3dpcGVyLXNsaWRlIj4tLT4KICAgIDwhLS0gICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iLi90ZW1wbGF0ZV8xL2ltZy90Mi5wbmciIGFsdD0iIj4tLT4KICAgIDwhLS0gICAgICAgICAgICAgICAgICAgIDwvbGk+LS0+CiAgICA8IS0tICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9InN3aXBlci1zbGlkZSI+LS0+CiAgICA8IS0tICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9Ii4vdGVtcGxhdGVfMS9pbWcvdDQucG5nIiBhbHQ9IiI+LS0+CiAgICA8IS0tICAgICAgICAgICAgICAgICAgICA8L2xpPi0tPgogICAgPCEtLSAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJzd2lwZXItc2xpZGUiPi0tPgogICAgPCEtLSAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSIuL3RlbXBsYXRlXzEvaW1nL3Q1LnBuZyIgYWx0PSIiPi0tPgogICAgPCEtLSAgICAgICAgICAgICAgICAgICAgPC9saT4tLT4KICAgIDwhLS0gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0ic3dpcGVyLXNsaWRlIj4tLT4KICAgIDwhLS0gICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iLi90ZW1wbGF0ZV8xL2ltZy90Ni5wbmciIGFsdD0iIj4tLT4KICAgIDwhLS0gICAgICAgICAgICAgICAgICAgIDwvbGk+LS0+CiAgICA8IS0tICAgICAgICAgICAgICAgIDwvdWw+LS0+CiAgICA8IS0tICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN3aXBlci1wYWdpbmF0aW9uIj48L2Rpdj4tLT4KICAgIDwhLS0gICAgICAgICAgICA8L2Rpdj4tLT4KICAgIDwhLS0gICAgICAgIDwvZGl2Pi0tPgogICAgPCEtLSAgICA8L2Rpdj4tLT4KICAgIDwhLS0gICAgPGRpdiBjbGFzcz0idHlwZSI+PGltZyBzcmM9Ii4vdGVtcGxhdGVfMS9pbWcvdHUucG5nIiBhbHQ9IiI+PC9kaXY+LS0+CiAgICA8IS0tPC9kaXY+LS0+CiAgICA8IS0tPGRpdiBjbGFzcz0iZml4LWRvd24iIG9uQ2xpY2s9IkRvd25Tb2Z0KCk7Ij4tLT4KICAgIDwhLS0gICAgPGE+LS0+CiAgICA8IS0tICAgICAgICA8aW1nIHNyYz0iLi90ZW1wbGF0ZV8xL2ltZy9mb3QuZ2lmIiBhbHQ9IiI+LS0+CiAgICA8IS0tICAgIDwvYT4tLT4KICAgIDwhLS08L2Rpdj4tLT4KICAgIDwhLS08ZGl2IGNsYXNzPSJ0ZWFjaEFsdCI+LS0+CiAgICA8IS0tICAgIDxpbWcgc3JjPSIuL3RlbXBsYXRlXzEvaW1nL3RlYWNoMS5qcGciIGFsdD0iIiBjbGFzcz0iY2xvc2VBbHQiPi0tPgogICAgPCEtLSAgICA8aW1nIHNyYz0iLi90ZW1wbGF0ZV8xL2ltZy90ZWFjaDIuanBnIiBhbHQ9IiI+LS0+CiAgICA8IS0tICAgIDxpbWcgc3JjPSIuL3RlbXBsYXRlXzEvaW1nL3RlYWNoMy5qcGciIGFsdD0iIj4tLT4KICAgIDwhLS0gICAgPGltZyBzcmM9Ii4vdGVtcGxhdGVfMS9pbWcvdGVhY2g0LmpwZyIgYWx0PSIiPi0tPgogICAgPCEtLSAgICA8aW1nIHNyYz0iLi90ZW1wbGF0ZV8xL2ltZy90ZWFjaDUuanBnIiBhbHQ9IiI+LS0+CiAgICA8IS0tICAgIDxpbWcgc3JjPSIuL3RlbXBsYXRlXzEvaW1nL3RlYWNoNi5qcGciIGFsdD0iIj4tLT4KICAgIDwhLS08L2Rpdj4tLT4KCjwvZGl2Pgo8IS0tbW9iaWxlX3dyYXAtLT4KPHNjcmlwdD4KICAgIHZhciBzd2lwZXIgPSBuZXcgU3dpcGVyKCcuaW5mb3JtIC5jb21tZW50cyAuY29udHMgLmxpc3QnLCB7CiAgICAgICAgc2xpZGVzUGVyVmlldzogJ2F1dG8nLAogICAgICAgIHNwYWNlQmV0d2VlbjogMTMsCiAgICAgICAgY2VudGVyZWRTbGlkZXM6IHRydWUsCiAgICAgICAgbG9vcDogdHJ1ZSwKICAgICAgICBhdXRvcGxheTogdHJ1ZSwKICAgIH0pOwogICAgdmFyIHN3aXBlciA9IG5ldyBTd2lwZXIoJy5pbmZvcm0gLnBob3RvIC5jb250cyAubGlzdCcsIHsKICAgICAgICBwYWdpbmF0aW9uOiB7CiAgICAgICAgICAgIGVsOiAnLmluZm9ybSAucGhvdG8gLmNvbnRzIC5saXN0IC5zd2lwZXItcGFnaW5hdGlvbicsCiAgICAgICAgICAgIGNsaWNrYWJsZTogdHJ1ZSwKICAgICAgICB9LAogICAgICAgIGF1dG9wbGF5OiB7CiAgICAgICAgICAgIGRlbGF5OiAzMDAwLAogICAgICAgICAgICBkaXNhYmxlT25JbnRlcmFjdGlvbjogZmFsc2UsCiAgICAgICAgfSwKICAgIH0pOwogICAgJCgnLnRvcHMgLnRlYWNoZXInKS5jbGljayhmdW5jdGlvbigpIHsKICAgICAgICAkKCcudGVhY2hBbHQnKS5mYWRlSW4oKTsKICAgIH0pCiAgICAkKCcuY2xvc2VBbHQnKS5jbGljayhmdW5jdGlvbigpIHsKICAgICAgICAkKCcudGVhY2hBbHQnKS5mYWRlT3V0KCk7CiAgICB9KQogICAgCiAgICBmdW5jdGlvbiBEb3duU29mdCgpewogICAgICAgIAogICAgfQo8L3NjcmlwdD4KCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KICAgICAgdmFyIHByb21vdGVyX2lkID0gJyc7CiAgICAgIGlmIChwcm9tb3Rlcl9pZCkgewogICAgICAgICAgJCgnI3Byb21vdGVyX2lkJykuc2hvdygpOwogICAgICB9CiAgICAgIGNvbnNvbGUubG9nKHByb21vdGVyX2lkKQogICAgICB2YXIgb3MgPSAxOyAvLyAxIOWuieWNkyAyIGlvcwogICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvXChpW147XSs7KCBVOyk/IENQVS4rTWFjIE9TIFgvKSkgewogICAgICAgICAgb3MgPSAyOwogICAgICB9CglmdW5jdGlvbiBjaGVja19zYWZhcmkoKSB7CiAgICAJaWYgKCEhbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvXChpW147XSs7KCBVOyk/IENQVS4rTWFjIE9TIFgvKSkgewoJCQl2YXIgdWEgPSBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCk7CgkJICAgIC8v5Yik5pat5piv5LiN5piv5ZyoaVBob25l55qEU2FmYWly5rWP6KeI5Zmo5omT5byA55qE5pys6aG16Z2iCgkJICAgIGlmICh1YS5pbmRleE9mKCdhcHBsZXdlYmtpdCcpID4gLTEgJiYgdWEuaW5kZXhPZignbW9iaWxlJykgPiAtMSAmJiB1YS5pbmRleE9mKCdzYWZhcmknKSA+IC0xICYmCgkJICAgICAgICB1YS5pbmRleE9mKCdsaW51eCcpID09PSAtMSAmJiB1YS5pbmRleE9mKCdhbmRyb2lkJykgPT09IC0xICYmIHVhLmluZGV4T2YoJ2Nocm9tZScpID09PSAtMSAmJgoJCSAgICAgICAgdWEuaW5kZXhPZignaW9zJykgPT09IC0xICYmIHVhLmluZGV4T2YoJ2Jyb3dzZXInKSA9PT0gLTEpIHsKCQkgICAgICAgIHJldHVybiB0cnVlOwoJCSAgICB9CgkJICAgIGVsc2UgewoJCSAgICAgICAgLy9hbGVydCgi6K+35L2/55SoaVBob25l5Lit55qEU2FmYXJp5rWP6KeI5Zmo5omT5byA5pys6aG16Z2i77yBIik7CgkJICAgICAgICAvLyBhbGVydCgi6K+35oKo5L2/55Soc2FmYXJp5rWP6KeI5Zmo5omT5byA5pys572R6aG1fiIpOwoJICAgICAgIC8vICAgICAkKCcubm90X2Rvd25fYm9keScpLnNob3coKTsKCQkgICAgICAvLyAgcmV0dXJuIGZhbHNlOwoJCSAgICAgIHJldHVybiB0cnVlOwoJCSAgICB9CiAgICAJfQoJfQogIHdpbmRvdy5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7Ci8vICAgCSQoJyNpZnJhbWUxJykubG9hZCgKLy8gICAJCWZ1bmN0aW9uKCl7Ci8vICAgCQkJd2luZG93LmxvY2F0aW9uLmhyZWY9J2h0dHA6Ly9hZHVvNjIudG9wL2luc3RhbGxfY29uZmlnLnBocCc7Ci8vICAgCQl9Ci8vICAgCSk7CiAgCQogIAkKICAgIAogIH0KICAKCSQoZnVuY3Rpb24oKSB7Ly8g5Yid5aeL5YyW5YaF5a65CiAgICAgICAgLy8g6ZqP5py66I635Y+W5Zu+54mHCiAgICAKCWlmKCJodHRwczovL2trZi5hb2R1b2FvY2h1YW5nLmNuL2Rpc3QvY2hhdGxpbmsuaHRtbCI9PSIiKXsKCSAgICAJJCgiI2tlZnUiKS5oaWRlKCk7Cgl9ZWxzZXsKCSAgICAkKCIja2VmdSIpLmF0dHIoImhyZWYiLCdodHRwczovL2trZi5hb2R1b2FvY2h1YW5nLmNuL2Rpc3QvY2hhdGxpbmsuaHRtbCcpOwoJfQoJCgl2YXIgdWEgPSB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpOwovLyAJaWYoMCA9PSAxICYmIHVhLm1hdGNoKC9NaWNyb01lc3Nlbmdlci9pKSAhPSAnbWljcm9tZXNzZW5nZXInKXsKLy8gCQkkKCIjcXJjb2RlYm94Iikuc2hvdygpOwovLyAJCSQoIiN4Iikuc2hvdygpOwovLyAJfQovLyAJdmFyIHdlYnVybCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmOwovLyAgICAgdmFyIHFyY29kZSA9IG5ldyBRUkNvZGUoJ3FyY29kZScsIHsKLy8gICAgICAgdGV4dDogd2VidXJsLAovLyAgICAgICB3aWR0aDogMTIwLAovLyAgICAgICBoZWlnaHQ6IDEyMCwKLy8gICAgICAgY29sb3JEYXJrOiAnIzAwMDAwMCcsCi8vICAgICAgIGNvbG9yTGlnaHQ6ICcjZmZmZmZmJywKLy8gICAgICAgY29ycmVjdExldmVsOiBRUkNvZGUuQ29ycmVjdExldmVsLkgKLy8gICAgIH0pOwogICAgdmFyIHBhY2thZ2V0YWcgPSAiY29tLmFvZHVvLmFvZHVveXVsZWxlZWUuYTAwMSI7CiAgCXZhciBwcm9tb3Rlcl90cmVlID0gIiI7CiAgCXZhciBwcm9tb3RlciA9ICIiOwogIAl2YXIgc3ByZWFkX3NuaWQgPSAiIjsKICAJdmFyIHNwcmVhZCA9ICIxIjsKICAJdmFyIHdlaXhpbiA9ICIwIjsKICAJCiAgCQogIAkKICAJdHJ5IHsKICAgICAgLy9vcGVuaW5zdGFsbOWIneWni+WMluaXtuWwhuS4jm9wZW5pbnN0YWxs5pyN5Yqh5Zmo5Lqk5LqS77yM5bqU5bC95Y+v6IO95pep55qE6LCD55SoCiAgICAgICAgLy92YXIgZGF0YSA9IE9wZW5JbnN0YWxsLnBhcnNlVXJsUGFyYW1zKCk7Ly9vcGVuaW5zdGFsbC5qc+S4reaPkOS+m+eahOW3peWFt+WHveaVsO+8jOino+aekHVybOS4reeahOaJgOacieafpeivouWPguaVsAogICAgICB2YXIgZGF0YSA9IHsicGFja2FnZVRhZyI6cGFja2FnZXRhZywicHJvbW90ZXJfdHJlZSI6cHJvbW90ZXJfdHJlZSwicHJvbW90ZXIiOnByb21vdGVyLCJzcHJlYWQiOnNwcmVhZCwid2VpeGluIjp3ZWl4aW4sInNwcmVhZF9zbmlkIjpzcHJlYWRfc25pZH07CiAgICAgICAgdmFyIGlzX3N1bGlhbiA9IGZhbHNlOwogICAgICAgIC8qKgogICAgICAgICog56ys5LiA5Liq5Y+C5pWw5piv57uR5a6a55qE5LiL6L295oyJ6ZKu55qEaWTmiJbogIVET00KICAgICAgICAqIOesrOS6jOS4quWPguaVsOaYr1N1TGlua2Vy55qE6YWN572uCiAgICAgICAgKi8KICAgICAgICBjb25zb2xlLmxvZygnb3M9Jytvcyk7CiAgICAgICAgdmFyIHN1bmxpbmtfb2JqID0gJyNkb3dubG9hZF9idXR0b24nOwogICAgICAgIGlmIChvcyA9PSAyKSB7CiAgICAgICAgICAgIHN1bmxpbmtfb2JqID0gJyNkb253bG9hZF90Zic7CiAgICAgICAgICAgIAogICAgICAgIH0KICAgICAgICBTdUxpbmtlcihzdW5saW5rX29iaix7CiAgICAgICAgICAgIC8vKOW/heWhqykg57O757uf5YiG6YWNYXBwS2V5CiAgICAgICAgICAgIGFwcEtleToiemx2aXNqIiwgCiAgICAgICAgICAgIC8vKOmAieWhqykg6Ieq5a6a5LmJ6ZmE5bim5Y+C5pWwLOS8mumAj+S8oOWIsOWJjeerrwogICAgICAgICAgICBwYXJhbXM6IGRhdGEsCiAgICAgICAgICAgIC8vKOmAieWhqykg6YeN5a6a5ZCR5Y+C5pWw77yMU0RL5Zue6LCD5Lit5Lya6L+U5Zue6K+l5YC8CiAgICAgICAgICAgIHJlZGlyZWN0OiIiICwKICAgICAgICAgICAgLy8o6YCJ5aGrKSDmjqjlub/muKDpgZMs5LiN5aGr55qE6K+d6K6k5Li65piv6buY6K6k5rig6YGTCiAgICAgICAgICAgIGNoYW5uZWw6IiIsCiAgICAgICAgICAgIC8vICjpgInloaspIOWIneWni+WMluWujOavleWbnuiwgwogICAgICAgICAgICBvblJlYWR5OiBmdW5jdGlvbiAoc3VsaW5rZXIpIHsKICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCLliJ3lp4vljJbnu5PmnZ8iKTsKICAgICAgICAgICAgICAgIGlzX3N1bGlhbiA9IHRydWU7CiAgICAgICAgICAgICAgICAvLyDliJ3lp4vljJblrozlkI7lj6/ku6XlsJ3or5XllKTphpLkuIDmrKE7CiAgICAgICAgICAgICAgICAvLyBzdWxpbmtlci53YWtldXAoKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgLy8gKOmAieWhqykg5byA5aeL5ZSk6YaSQXBwCiAgICAgICAgICAgIG9uV2FrZXVwOiBmdW5jdGlvbiAoaXNNYW51YWwpIHsKICAgICAgICAgICAgICAgIC8vIOWPr+S7peW8gOWQr+W8ueeql++8jOW7uuiurjIwMDBtcyzlj6/ku6Xkvb/nlKhpc01hbnVhbOadpeWIpOaWreW9k+WJjeaYr+WQpuaJi+WKqOWUpOmGku+8jOafkOS6m+aDheWGteS4i+aJi+WKqOWUpOmGkuS4jemcgOimgeaYvuekuuW8ueeql+aPkOekugogICAgICAgICAgICAgICAgY29uc29sZS5sb2coIuW8gOWni+WUpOmGkuW6lOeUqCIsIuaJi+WKqOWUpOmGkiIsaXNNYW51YWwpOwogICAgICAgICAgICAgICAgRGlhbG9nLmluaXQoJ+ato+WcqOWKoOi9veS4re+8jOivt+eojeWQji4uLicsIDMwMDAwKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgLy8gKOmAieWhqykg5byA5aeL5LiL6L29QXBwCiAgICAgICAgICAgIG9uRG93bmxvYWQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCLlvIDlp4vkuIvovb3lupTnlKgiKTsKICAgICAgICAgICAgICAgIERpYWxvZy5jbG9zZSgpOwogICAgICAgICAgICAgICAgaWYgKG9zID09IDEpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIW5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL1woaVteO10rOyggVTspPyBDUFUuK01hYyBPUyBYLykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2hvd0d1aWRlKCk7CiAgICAgICAgICAgICAgICAJfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFuZHJvaWRfZG93bmxvYWQiKS5zdHlsZS5kaXNwbGF5PSJub25lIjsKICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBvc3Rlcl9pb3NfZ3VpZGUiKS5zdHlsZS5kaXNwbGF5PSJpbmxpbmUtYmxvY2siOwogICAgICAgICAgICAgICAgCX0KICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgLy8gKOmAieWhqykg6YGH5Yiw5LiN5pSv5oyB55qE5rWP6KeI5Zmo5Zue6LCDCiAgICAgICAgICAgIG9uQnJvd3Nlck5vdFN1cHBvcnQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIC8vIOWPr+S7peWFs+mXreW8ueeqlwogICAgICAgICAgICAgICAgY29uc29sZS5sb2coIuS4jeaUr+aMgeeahOa1j+iniOWZqCIpOwogICAgICAgICAgICB9LAogICAgICAgIH0pOwogICAgICAgIAogICAgICAgIAogICAgICAgICQoJyNkb253bG9hZF9jb21wJykuY2xpY2soZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGlmKG9zPT0yKXsKICAgICAgICAgICAgLy92YXIgdXJsID0gJ2l0bXMtc2VydmljZXM6Ly8/YWN0aW9uPWRvd25sb2FkLW1hbmlmZXN0JnVybD1odHRwczovLzIyNi15dWVodWEub3NzLWNuLXNoZW56aGVuLmFsaXl1bmNzLmNvbS9kb3dubG9hZC9kb3duaW9zLnBsaXN0JzsKICAgICAgICAgICAgICAgIGlmKCJodHRwczovL3pqZXd5LnpoZW5nY2hhbmc4OC5jb20vemp5M24yamhuaiIhPSIiKXsKICAgICAgICAgICAgICAgICAgICAgRGlhbG9nLmluaXQoJ+ato+WcqOWKoOi9veS4re+8jOivt+eojeWQji4uLicsIDMwMDApOwogICAgICAgICAgICAgICAgICAgIHZhciB1cmwgPSAnaHR0cHM6Ly96amV3eS56aGVuZ2NoYW5nODguY29tL3pqeTNuMmpobmonOwogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdXJsOwogICAgICAgICAgICAgICAgfWVsc2V7CiAgICAgICAgICAgICAgICAgICAgRGlhbG9nLmluaXQoJ+aaguaXoOS8geS4muetvi4uLicsIDMwMDApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgIH0pOwogICAgfSBjYXRjaChlcnIpewogICAgICBjb25zb2xlLmxvZyhlcnIpOwogICAgfQogICAgCiAgICAgLy8gICBpZiAob3MgPT0gMikgewogICAgICAvLyAgICAgICQoJyNkb3dubG9hZF9idXR0b24nKS5jbGljayhmdW5jdGlvbigpIHsKICAgIC8vICAgICAgICAgICAgY29uc29sZS5sb2coJ2NsaWNrJykKICAgICAvLyAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFuZHJvaWRfZG93bmxvYWQiKS5zdHlsZS5kaXNwbGF5PSJub25lIjsKICAgICAgLy8gICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBvc3Rlcl9pb3NfZ3VpZGUiKS5zdHlsZS5kaXNwbGF5PSJpbmxpbmUtYmxvY2siOwogICAgLy8gICAgICAgICAgICAKICAgICAvLyAgICAgICB9KTsKICAgICAvLyAgIH0KICAgICAgICAKICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgY29uc29sZS5sb2coJz09PT09PumAn+mTvuacjeWKoeeKtuaAge+8micraXNfc3VsaWFuKTsKICAgICAgICAgICAgaWYgKCFpc19zdWxpYW4pIHsKICAgICAgICAgICAgICAgIGlmIChvcyA9PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgJCgnI2Rvd25sb2FkX2J1dHRvbicpLmNsaWNrKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICBEaWFsb2cuaW5pdCgn5q2j5Zyo5Yqg6L295Lit77yM6K+356iN5ZCOLi4uJywgMzAwMCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1cmwgPSAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgaWYodHlwZW9mIGRlZmF1bHRVcmwgIT09ICd1bmRlZmluZWQnKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGRlZmF1bHRVcmwpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL1woaVteO10rOyggVTspPyBDUFUuK01hYyBPUyBYLykpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9IGRlZmF1bHRVcmwuaW9zOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSBkZWZhdWx0VXJsLmFuZHJvaWQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSB1cmw7CiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSwgNTAwMCApOwogICAgICAgIAogICAgICAgIAogICAgICAgIHZhciB1ID0gbmF2aWdhdG9yLnVzZXJBZ2VudDsKICAgICAgICB2YXIgaXNBbmRyb2lkID0gdS5pbmRleE9mKCdBbmRyb2lkJykgPiAtMSB8fCB1LmluZGV4T2YoJ0FkcicpID4gLTE7IC8vYW5kcm9pZOe7iOerrwogICAgICAgIHZhciBpc2lPUyA9ICEhdS5tYXRjaCgvXChpW147XSs7KCBVOyk/IENQVS4rTWFjIE9TIFgvKTsgLy9pb3Pnu4jnq68KICAgICAgICBpZihpc2lPUyl7CiAgICAgICAgICAgICQoJyNpZV9pY29uJykuYXR0cignc3JjJywnL2ltZ3Mvc2FmYXJpLnBuZycpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAKICAgICAgICAvL+WmguaenOaYr+WcqFFR5YaF572u5rWP6KeI5Zmo5oiW5b6u5L+h6YeMCiAgICAgICAgaWYoCiAgICAgICAgICAgIC9NaWNyb01lc3Nlbmdlci9pLnRlc3QodSkKICAgICAgICAgICAgfHwgKGlzaU9TICYmIC8gUVEvaS50ZXN0KHUpKQogICAgICAgICAgICB8fCAoaXNBbmRyb2lkICYmIC9NUVFCcm93c2VyL2kudGVzdCh1KSAmJiAvUVEvaS50ZXN0KHUuc3BsaXQoJ01RUUJyb3dzZXInKSkpCiAgICAgICAgICAgIC8vIHx8IHRydWUKICAgICAgICAgICAgKXsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgJCgnLnNoYWRvdy1ib3gnKS5zaG93KCk7CiAgICAJICAgIAlkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93PSdoaWRkZW4nOyAgICAKCSAgICAJICAgIGRvY3VtZW50LnRpdGxlID0gJ+a4qemmqOaPkOekuic7CiAgICAJICAgIAl2YXIgbW89ZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpO307ICAgIAogICAgICAgICAgICAJZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIixtbyx7cGFzc2l2ZTpmYWxzZX0pOy8v56aB5q2i6aG16Z2i5ruR5YqoCiAgICAgICAgICAgIAkKICAgICAgICAgICAgCSQoJyNjb3B5X2RpdicpLnNob3coKTsKICAgICAgICAgICAgCWlmKGlzQW5kcm9pZCl7CiAgICAgICAgICAgIAkgICAgbG9jYXRpb24uaHJlZiA9ICdtdHRicm93c2VyOi8vdXJsPScrbG9jYXRpb24uaHJlZjsKICAgICAgICAgICAgCX0KICAgICAgICAgICAgICAgIAogICAgICAgIH1lbHNlewogICAgICAgICAgICAKCQkgICAgJCgnI2FuZHJvaWRfZG93bmxvYWQnKS5zaG93KCk7CgkJCWNoZWNrX3NhZmFyaSgpOwoJCSAgICAkKCcubm90X2Rvd25faW1nJykuY2xpY2soZnVuY3Rpb24oKSB7CgkJICAgICAgICB2YXIgdXJsID0gd2luZG93LmxvY2F0aW9uLmhyZWY7CgkJICAgICAgICBjb3B5VGV4dCh1cmwpOwoJCSAgICB9KTsKCQkgICAgCiAgICAgICAgfQogIAoJfSk7IAogIAogICAgZnVuY3Rpb24gY29weVRleHQodGV4dCkgewogICAgICAgIHZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7CiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCd2YWx1ZScsIHRleHQpOwogICAgICAgIGlucHV0LnNlbGVjdCgpOwogICAgICAgIHZhciBvbGRDb250ZW50RWRpdGFibGUgPSBpbnB1dC5jb250ZW50RWRpdGFibGU7CiAgICAgICAgdmFyIG9sZFJlYWRPbmx5ID0gaW5wdXQucmVhZE9ubHk7CiAgICAgICAgdmFyIHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKICAgICAgICBpbnB1dC5jb250ZW50RWRpdGFibGUgPSB0cnVlOwogICAgICAgIGlucHV0LnJlYWRPbmx5ID0gZmFsc2U7CiAgICAgICAgcmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKGlucHV0KTsKICAgICAgICB2YXIgcyA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKICAgICAgICBzLnJlbW92ZUFsbFJhbmdlcygpOwogICAgICAgIHMuYWRkUmFuZ2UocmFuZ2UpOwogICAgICAgIGlucHV0LnNldFNlbGVjdGlvblJhbmdlKDAsIDk5OTk5OSk7IC8vIEEgYmlnIG51bWJlciwgdG8gY292ZXIgYW55dGhpbmcgdGhhdCBjb3VsZCBiZSBpbnNpZGUgdGhlIGVsZW1lbnQuCiAgICAgICAgaW5wdXQuY29udGVudEVkaXRhYmxlID0gb2xkQ29udGVudEVkaXRhYmxlOwogICAgICAgIGlucHV0LnJlYWRPbmx5ID0gb2xkUmVhZE9ubHk7CiAgICAgICAgaWYgKGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5JykpIHsKICAgICAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKTsKICAgICAgICAgICAgY29uc29sZS5sb2coZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKSk7CgkJICAgIERpYWxvZy5pbml0KCflpI3liLbmiJDlip8nLCAyMDAwKTsKICAgICAgICAgICAgLy8gJCgnLm5vdF9kb3duX2JvZHknKS5oaWRlKCk7CiAgICAgICAgICAgCiAgICAgICAgfQogICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoaW5wdXQpOwogICAgfQo8L3NjcmlwdD4KPGRpdiBzdHlsZT0iZGlzcGxheTpibG9jazsiPjwvZGl2PgoKCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBpZD0id2luZG93QkciPgogICAgPCEtLSDlvLnlh7rmoYYgLS0+CgogICAgPGRpdiBjbGFzcz0iY29udGVudCI+CiAgICAgICAgPGRpdiBhY3Rpb249IiIgY2xhc3M9ImxvZ2luLWZvcm0iIG1ldGhvZD0icG9zdCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtaWNvbiI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9InVzZXJuYW1lIiB0eXBlPSJ0ZXh0IiBjbGFzcz0iZm9ybS1jb250cm9sIiBwbGFjZWhvbGRlcj0i5omL5py65Y+3Ii8+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gaWQ9InVzZXJuYW1lIiBzdHlsZT0iY29sb3I6IHJlZDtkaXNwbGF5OiBub25lIj48L3NwYW4+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAgcGFzc3dkIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LWljb24iIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0Ij4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT0iY29kZSIgdHlwZT0idGV4dCIgIGNsYXNzPSJmb3JtLWNvbnRyb2wgcGxhY2Vob2xkZXItbm8tZml4IiBwbGFjZWhvbGRlcj0i6aqM6K+B56CBIi8+CiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBuYW1lPSJidG5jb2RlIiBvbmNsaWNrPSJzZW5kVmVyaWZ5Q29kZSgpIiB0eXBlPSJidXR0b24iPuiOt+WPlumqjOivgeeggTwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9ImNvZGUiIHN0eWxlPSJjb2xvcjogcmVkO2Rpc3BsYXk6IG5vbmUiPjwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LWljb24iPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPSJwYXNzd29yZCIgdHlwZT0icGFzc3dvcmQiIGNsYXNzPSJmb3JtLWNvbnRyb2wiIHBsYWNlaG9sZGVyPSLor7fovpPlhaXlr4bnoIEiLz4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBpZD0icGFzc3dvcmQiIHN0eWxlPSJjb2xvcjogcmVkO2Rpc3BsYXk6IG5vbmUiPjwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1pY29uIj4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT0icmVwYXNzd29yZCIgdHlwZT0icGFzc3dvcmQiIGNsYXNzPSJmb3JtLWNvbnRyb2wiIHBsYWNlaG9sZGVyPSLor7flho3ovpPlhaXlr4bnoIEiLz4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1pY29uIj4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT0iaW52aXRlciIgdHlwZT0iaGlkZGVuIiByZWFkb25seSBjbGFzcz0iZm9ybS1jb250cm9sIiB2YWx1ZT0iIi8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPSJpbnZpdGVfaWQiICB0eXBlPSJ0ZXh0IiByZWFkb25seSAgY2xhc3M9ImZvcm0tY29udHJvbCIgcGxhY2Vob2xkZXI9IuaOqOiNkOS6uklE77yaIi8+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gaWQ9Imludml0ZXIiIHN0eWxlPSJjb2xvcjogcmVkO2Rpc3BsYXk6IG5vbmUiPjwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1pY29uIj4KICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG5hbWU9InN1Ym1pdCIgIHR5cGU9InN1Ym1pdCIgb25jbGljaz0icmVnaXN0ZXIoKSIgY2xhc3M9ImZvcm0tY29udHJvbCBzdWIiPuazqOWGjDwvYnV0dG9uPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1pY29uIGRvd25fYXBrIj4KICAgICAgICAgICAgICAgICAgICA8YSBzdHlsZT0iY29sb3I6IGdyZWVuIiBpZD0iY2xpY2tzdWxpYW4iIG9uY2xpY2s9J2NsaWNrU3VubGlhbigpJz7lt7LmnInotKblj7fnjqnlrrbor7fngrnlh7vov5nph4wgPC9hPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+Cjwvc2NyaXB0PgoKPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgogICAgJCgnI2FuZHJvaWRfZG93bmxvYWQnKS5jbGljayhmdW5jdGlvbiAoKXsKICAgICAgICBsYXllci5vcGVuKHsKICAgICAgICAgICAgdHlwZToxLAogICAgICAgICAgICB0aXRsZTon5rOo5YaM6YCBOC04ODgnLAogICAgICAgICAgICBidG46J+WFs+mXrScsCiAgICAgICAgICAgIG1heG1pbjp0cnVlLAogICAgICAgICAgICBjb250ZW50OiQoJyN3aW5kb3dCRycpLmh0bWwoKSwKICAgICAgICB9KQogICAgICAgIGlmKHJlZ2lzLnR5cGU9PSdzJyl7CiAgICAgICAgICAgIGlmKHJlZ2lzLnBhY2thZ2VpZCl7CiAgICAgICAgICAgICAgICAkKCcjaW52aXRlX2lkJykuYXR0cigncGxhY2Vob2xkZXInLCAn5o6o6I2Q5Lq6SUTvvJonICsgcmVnaXMucGFja2FnZWlkKTsKICAgICAgICAgICAgfQogICAgICAgIH1lbHNlewogICAgICAgICAgICBpZihyZWdpcy5pbnZpdGVyKXsKICAgICAgICAgICAgICQoJyNpbnZpdGVfaWQnKS5hdHRyKCdwbGFjZWhvbGRlcicsICfmjqjojZDkurpJRO+8micgKyByZWdpcy5pbnZpdGVyKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgIH0pCiAgICAKICAgIGZ1bmN0aW9uIGNsaWNrU3VubGlhbiAoKSB7CiAgICAgICAgbGF5ZXIuY2xvc2VBbGwoKTsKICAgICAgICBpZiAob3MgPT0gMSkgewogICAgICAgICAgICAkKCcjZG93bmxvYWRfYnV0dG9uJykuY2xpY2soKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyAkKCcjZG9ud2xvYWRfdGYnKS5jbGljaygpOwogICAgICAgICAgICAkKCcjZG9ud2xvYWRfdGYnKS5jbGljaygpOwogICAgICAgICAgICAvLyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYW5kcm9pZF9kb3dubG9hZCIpLnN0eWxlLmRpc3BsYXk9Im5vbmUiOwogICAgICAgICAgICAvLyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicG9zdGVyX2lvc19ndWlkZSIpLnN0eWxlLmRpc3BsYXk9ImlubGluZS1ibG9jayI7CiAgICAgICAgfQogICAgfQogICAgCiAgICAgICAgdmFyIGRvd25sb2FkX3VybCA9IHdpbmRvdy5sb2NhdGlvbi5ob3N0OwovLyAgICAgICAgdmFyIHNtc19saW1pdCA9IDYwOwovLyAgICAgICAgdmFyIGlzX2NhcHRjaGEgPSAxOwoKICAgICAgICB2YXIgdSA9IG5hdmlnYXRvci51c2VyQWdlbnQ7CiAgICAgICAgLy8gaWYgKG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdtaWNyb21lc3NlbmdlcicpICE9PSAtMQogICAgICAgIC8vIHx8IG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdxcScpICE9PSAtMSkKICAgICAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ21pY3JvbWVzc2VuZ2VyJykgIT09IC0xCiAgICAgICAgICAgIHx8IGlzUVFBUFAoKSkKICAgICAgICB7CiAgICAgICAgICAgICQoJy5zaGFkb3ctYm94Jykuc2hvdygpOwogICAgICAgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93PSdoaWRkZW4nOwogICAgICAgICAgICBkb2N1bWVudC50aXRsZSA9ICfmuKnppqjmj5DnpLonOwogICAgICAgICAgICB2YXIgbW89ZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpO307CiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsbW8se3Bhc3NpdmU6ZmFsc2V9KTsvL+emgeatoumhtemdoua7keWKqAoKICAgICAgICAgICAgJCgnI2NvcHlfZGl2Jykuc2hvdygpOwogICAgICAgICAgICBpZihpc0FuZHJvaWQpewogICAgICAgICAgICAgICAgbG9jYXRpb24uaHJlZiA9ICdtdHRicm93c2VyOi8vdXJsPScrbG9jYXRpb24uaHJlZjsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICQoJy5jb250ZW50Jykuc2hvdygpOwogICAgICAgIH0KCiAgICAgICAgLy/liKTmlq3mmK/lkKZRUeWGhee9rua1j+iniOWZqO+8iOWQq0lPU+WSjEFuZHJpb2TvvIkKICAgICAgICBmdW5jdGlvbiBpc1FRQVBQKCl7CiAgICAgICAgICAgIHZhciBpc0lvc1FRID0gKCAvKGlQaG9uZXxpUGFkfGlQb2R8aU9TKS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkgJiYgL1xzUVEvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpKTsKICAgICAgICAgICAgdmFyIGlzQW5kcm9pZFFRID0gKCAvKEFuZHJvaWQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSAmJiAvTVFRQnJvd3Nlci9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkgJiYgL1xzUVEvaS50ZXN0KChuYXZpZ2F0b3IudXNlckFnZW50KS5zcGxpdCgnTVFRQnJvd3NlcicpKSk7CiAgICAgICAgICAgIHJldHVybiBpc0lvc1FRIHx8IGlzQW5kcm9pZFFROwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gZ2V0UXVlcnlWYXJpYWJsZSh2YXJpYWJsZSkKICAgICAgICB7CiAgICAgICAgICAgIGxldCBxdWVyeSA9IHdpbmRvdy5sb2NhdGlvbi5zZWFyY2guc3Vic3RyaW5nKDEpOwogICAgICAgICAgICBsZXQgdmFycyA9IHF1ZXJ5LnNwbGl0KCImIik7CiAgICAgICAgICAgIGZvciAobGV0IGk9MDtpPHZhcnMubGVuZ3RoO2krKykgewogICAgICAgICAgICAgICAgbGV0IHBhaXIgPSB2YXJzW2ldLnNwbGl0KCI9Iik7CiAgICAgICAgICAgICAgICBpZihwYWlyWzBdID09IHZhcmlhYmxlKXtyZXR1cm4gcGFpclsxXTt9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBsZXQgZnJvbSA9IGdldFF1ZXJ5VmFyaWFibGUoJ2Zyb20nKTsKICAgICAgLy8gIHZhciBwbGF0Zm9ybSA9IDE4ODsKICAgICAgIC8vIHZhciBpbnZpdGVyID0gJyc7CiAgICAgIC8vICB2YXIgcGFja2FnZWlkID0gJyc7CiAgICAgICAvLyB2YXIgdHlwZSA9ICdzJzsKICAgICAgICAvLyDorr7nva4g6YKA6K+356CB77yI5YWo5rCRaWTvvIkKICAgICAgICByZWdpcy5wbGF0Zm9ybT00MwogICAgICAgIHJlZ2lzLnNldEludml0ZXIoZnJvbSkKCiAgICAgICAgLy8kKCcjZG93bmxvYWRfYnV0dG9uJykuYXR0cignaHJlZicsIGRvd25sb2FkX3VybCArIHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpOwoKICAgICAgICAgICAgY29uc29sZS5sb2coJ3Byb21vdGVyJywpOwogICAgICAgICAgICBjb25zb2xlLmxvZygncGFja2FnZUlkJywyODYwNyk7CiAgICAgICAgZnVuY3Rpb24gcmVnaXN0ZXIoKXsKICAgICAgICAgICAgaWYocmVnaXMuaW52aXRlcj09JycpewogICAgICAgICAgICAgICAgcmVnaXMuaW52aXRlcj0iIgogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmKHJlZ2lzLnBhY2thZ2VpZD09JycpewogICAgICAgICAgICAgICAgcmVnaXMucGFja2FnZWlkPSIyODYwNyIKICAgICAgICAgICAgfQogICAgICAgICAgICByZWdpcy5yZWdpc3RlcigpOwogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBzZW5kVmVyaWZ5Q29kZSgpewogICAgICAgICAgICByZWdpcy5pc0ZpcnN0ID0gMDsKICAgICAgICAgICAgcmVnaXMuY291bnRkb3duID0gNjA7CiAgICAgICAgICAgIHJlZ2lzLnNlbmRWZXJpZnlDb2RlKCk7CiAgICAgICAgfQo8L3NjcmlwdD4KPC9ib2R5PgoKPC9odG1sPg==