xiaomianao666

插件名:global_海角社区

Nov 2nd, 2023
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:网页插件¥js_url¥global_海角社区@base64://Ly8gPT1Vc2VyU2NyaXB0PT0NCi8vIEBuYW1lICAgICAgICAgICAgICDmtbfop5LnpL7ljLoNCi8vIEBob21lcGFnZSAgICAgICAgICBodHRwOi8vanN4bC5wcm8NCi8vIEB2ZXJzaW9uICAgICAgICAgICAxLjcuNQ0KLy8gQHVwZGF0ZURlc2MgICAgICAgIOS/ruWkjeWPr+iDveaXoOazleiEmuacrOaSreaUvibkv67lpI3kuI3og73lpI3liLbpk77mjqUm5LyY5YyW572R6aG15qCH6aKY44CB5Y6G5Y+y6K6w5b2V5qCH6aKYJuS9juiwg+S9v+eUqOaPkOmGkg0KLy8gQGRlc2NyaXB0aW9uICAgICAgIPCflKXlhY3otLnnnIvku5jotLnop4bpopHvvIzmn6XnnIvlsIHnpoHotKblj7fkuLvpobXluJblrZDvvIzkuIvovb3op4bpopHvvIzlpI3liLbmkq3mlL7pk77mjqUo5Y2h6aG/5Y+v5Lul5Y676L+F6Zu35pKt5pS+Ke+8jOW4luWtkOaYr+WQpuacieinhumikeWbvueJh+aPkOekuijmoIfpopjliY3nvIAp77yM5oyB5LmF5YyW55m75b2V54q25oCB77yM56C06Kejdmlw5pKt5pS+6Lev57q/77yM6Ieq5Yqo5bGV5byA5biW5a2Q77yM5Y675bm/5ZGK77yMdmlw5qCH6K+GDQovLyBAaWNvbiAgICAgICAgICAgICAgaHR0cHM6Ly9tcC1hZjMwNzI2OC0xYjhhLTQ4MmEtYjc1YS1iNmU5OGIxMjU3NDIuY2RuLmJzcGFwcC5jb20vc3lzdGVtL2xvZ28vaGFpamlhby5wbmcNCi8vIEBuYW1lc3BhY2UgICAgICAgICDmtbfop5LnpL7ljLoNCi8vIEBhdXRob3IgICAgICAgICAgICB3dA0KLy8gQGluY2x1ZGUgICAgICAgICAgICo6Ly8qLmhhaSouKi8qDQovLyBAaW5jbHVkZSAgICAgICAgICAgKjovL2hhaSouKi8qDQovLyBAaW5jbHVkZSAgICAgICAgICAgKjovL2hqKi4qLyoNCi8vIEBpbmNsdWRlICAgICAgICAgICAvcG9zdC9kZXRhaWxzLw0KLy8gQG1hdGNoICAgICAgICAgICAgICo6Ly8qL3Bvc3QvZGV0YWlscyoNCi8vIEByZXF1aXJlICAgICAgICAgICBodHRwczovL2Nkbi5ib290Y2RuLm5ldC9hamF4L2xpYnMvanF1ZXJ5LzMuMi4xL2pxdWVyeS5taW4uanM/aWQ9MQ0KLy8gQHJlcXVpcmUJCQkgIGh0dHBzOi8vbGliLmJhb21pdHUuY29tL2hscy5qcy8wLjE1LjAtYWxwaGEuMi9obHMubWluLmpzP2lkPTENCi8vIEByZXF1aXJlCQkJICBodHRwczovL2hhaWppYW8uc3RvcmUvc2l0ZS9jb25maWcvRFBsYXllci5taW4uanMNCi8vIEByZXF1aXJlCQkJICBodHRwczovL3Jlc2V0LXpmZi5vc3MtY24tY2hlbmdkdS5hbGl5dW5jcy5jb20vanMvbWQ1L2NvZGUuanMNCi8vIEBjb25uZWN0CQkJICByZXNldC16ZmYub3NzLWNuLWNoZW5nZHUuYWxpeXVuY3MuY29tDQovLyBAY29ubmVjdAkJCSAgZmMtbXAtYWYzMDcyNjgtMWI4YS00ODJhLWI3NWEtYjZlOThiMTI1NzQyLm5leHQuYnNwYXBwLmNvbQ0KLy8gQHJ1bi1hdCAJCQkgIGRvY3VtZW50LXN0YXJ0DQovLyBAZ3JhbnQgICAgICAgICAgICAgdW5zYWZlV2luZG93DQovLyBAZ3JhbnQgICAgICAgICAgICAgR01fYWRkU3R5bGUNCi8vIEBncmFudCAgICAgICAgICAgICBHTV9vcGVuSW5UYWINCi8vIEBncmFudCAgICAgICAgICAgICBHTV9nZXRWYWx1ZQ0KLy8gQGdyYW50ICAgICAgICAgICAgIEdNX3NldFZhbHVlDQovLyBAZ3JhbnQgICAgICAgICAgICAgR01feG1saHR0cFJlcXVlc3QNCi8vIEB1cGRhdGVVUkwJCSAgaHR0cHM6Ly9yZXNldC16ZmYub3NzLWNuLWNoZW5nZHUuYWxpeXVuY3MuY29tL2pzL3JlbGVhc2UvaGFpamlhby51c2VyLmpzDQovLyBAZG93bmxvYWRVUkwJCSAgaHR0cHM6Ly9yZXNldC16ZmYub3NzLWNuLWNoZW5nZHUuYWxpeXVuY3MuY29tL2pzL3JlbGVhc2UvaGFpamlhby51c2VyLmpzDQovLyBAY2hhcnNldAkJICAgICAgVVRGLTgNCi8vIEBsaWNlbnNlICAgICAgICAgICBNSVQNCi8vID09L1VzZXJTY3JpcHQ9PQ0KDQpjb25zdCB1dGlsID0gew0KCWplbmNvZGU6IChzLCBwbHVzKSA9PiB7DQoJCXJldHVybiBlbmNvZGUoSlNPTi5zdHJpbmdpZnkocywgYHV0Zi04YCksIHBsdXMpOw0KCX0sDQoNCglzaG93VGlwczogKGl0ZW0gPSB7fSkgPT4gew0KCQkkKCcjd3QtbWF4aW5kZXgtbWFzaycpLmNzcygnZGlzcGxheScsICdibG9jaycpOw0KCQkkKCIjd3QtdGlwcy1ib3giKS5yZW1vdmVDbGFzcygnaGlkLXNldC1ib3gnKTsNCgkJJCgiI3d0LXRpcHMtYm94IikuYWRkQ2xhc3MoJ3Nob3ctc2V0LWJveCcpOw0KCQkkKCcjd3QtdGlwcy1ib3ggLmJ0bi1ib3gnKS5lbXB0eSgpDQoJCSQoJyN3dC10aXBzLWJveCAuYnRuLWJveCcpLmFwcGVuZChgDQoJCQk8YnV0dG9uIGNsYXNzPSdjYW5jZWwnPuWPlua2iDwvYnV0dG9uPg0KCQkJPGJ1dHRvbiBjbGFzcz0nc3VibWl0Jz7noa7lrpo8L2J1dHRvbj4NCgkJYCkNCgkJaWYgKGl0ZW0udGl0bGUpICQoJyN3dC10aXBzLWJveCAuY29udGVudCcpLmh0bWwoaXRlbS50aXRsZSk7DQoJCWlmIChpdGVtLmRvdWJ0KSAkKCcjd3QtdGlwcy1ib3ggLmJ0bi1ib3ggLmNhbmNlbCcpLmNzcygnZGlzcGxheScsICdibG9jaycpOw0KCQlpZiAoaXRlbS5jb25maXJtKSAkKCcjd3QtdGlwcy1ib3ggLmJ0bi1ib3ggLnN1Ym1pdCcpLmh0bWwoaXRlbS5jb25maXJtKTsNCgkJJCgnI3d0LXRpcHMtYm94IC5idG4tYm94IC5zdWJtaXQnKS5vbignY2xpY2snLCAoKSA9PiB7DQoJCQkkKCcjd3QtbWF4aW5kZXgtbWFzaycpLmNzcygnZGlzcGxheScsICdub25lJyk7DQoJCQkkKCIjd3QtdGlwcy1ib3giKS5yZW1vdmVDbGFzcygnc2hvdy1zZXQtYm94Jyk7DQoJCQkkKCIjd3QtdGlwcy1ib3giKS5hZGRDbGFzcygnaGlkLXNldC1ib3gnKTsNCgkJCWlmIChpdGVtLnN1Y2Nlc3MpIGl0ZW0uc3VjY2Vzcyh0cnVlKTsNCgkJfSkNCgkJJCgnI3d0LXRpcHMtYm94IC5idG4tYm94IC5jYW5jZWwnKS5vbignY2xpY2snLCAoKSA9PiB7DQoJCQkkKCcjd3QtbWF4aW5kZXgtbWFzaycpLmNzcygnZGlzcGxheScsICdub25lJyk7DQoJCQkkKCIjd3QtdGlwcy1ib3giKS5yZW1vdmVDbGFzcygnc2hvdy1zZXQtYm94Jyk7DQoJCQkkKCIjd3QtdGlwcy1ib3giKS5hZGRDbGFzcygnaGlkLXNldC1ib3gnKTsNCgkJCWlmIChpdGVtLnN1Y2Nlc3MpIGl0ZW0uc3VjY2VzcyhmYWxzZSk7DQoJCX0pDQoJfSwNCgkNCgljb3B5VGV4dDogKHRleHQpID0+IHsNCgkJaWYgKG5hdmlnYXRvci5jbGlwYm9hcmQgJiYgd2luZG93LmlzU2VjdXJlQ29udGV4dCkgew0KCQkJcmV0dXJuIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRleHQpDQoJCX0gZWxzZSB7DQoJCQlpZiAoIWRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5JykpIHJldHVybiBQcm9taXNlLnJlamVjdCgpDQoJCQljb25zdCB0ZXh0QXJlYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJykNCgkJCXRleHRBcmVhLnN0eWxlLnBvc2l0aW9uID0gJ2ZpeGVkJw0KCQkJdGV4dEFyZWEuc3R5bGUudG9wID0gdGV4dEFyZWEuc3R5bGUubGVmdCA9ICctMTAwdmgnDQoJCQl0ZXh0QXJlYS5zdHlsZS5vcGFjaXR5ID0gJzAnDQoJCQl0ZXh0QXJlYS52YWx1ZSA9IHRleHQNCgkJCWRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGV4dEFyZWEpDQoJCQl0ZXh0QXJlYS5mb2N1cygpDQoJCQl0ZXh0QXJlYS5zZWxlY3QoKQ0KCQkJcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsNCgkJCQlkb2N1bWVudC5leGVjQ29tbWFuZCgnY29weScpID8gcmVzb2x2ZSgpIDogcmVqZWN0KCkNCgkJCQl0ZXh0QXJlYS5yZW1vdmUoKQ0KCQkJfSkNCgkJfQ0KCX0sDQoNCglzaG93QW5kSGlkVGlwczogKG5hbWUsIG9wID0gJ3NldCcsIHZhbCA9IHRydWUpID0+IHsNCgkJbGV0IHRpcHMgPSBHTV9nZXRWYWx1ZSgnd3RfdGlwcycsIHt9KQ0KCQlpZiAoIXRpcHMpIHRpcHMgPSB7fQ0KCQlpZiAob3AgPT0gJ3NldCcpIHsNCgkJCXRpcHNbbmFtZV0gPSB2YWwNCgkJCUdNX3NldFZhbHVlKCd3dF90aXBzJywgdGlwcykNCgkJCWlmICh2YWwpICQoJy4nICsgbmFtZSkuYWRkQ2xhc3MoJ3RpcHMteXVhbicpDQoJCQllbHNlICQoJy4nICsgbmFtZSkucmVtb3ZlQ2xhc3MoJ3RpcHMteXVhbicpDQoJCQlyZXR1cm4gdHJ1ZQ0KCQl9IGVsc2Ugew0KCQkJcmV0dXJuIHRpcHNbbmFtZV0gPyB0cnVlIDogZmFsc2UNCgkJfQ0KCX0sDQoNCglhZGRMb2dpbjogKCkgPT4gew0KCQlpZiAoJCgnI3d0LWxvZ2luLWJveCcpLmxlbmd0aCA+IDApIHJldHVybjsNCgkJJCgnYm9keScpLmFwcGVuZChgDQoJCQk8ZGl2IGlkPSJ3dC1sb2dpbi1tYXNrIj48L2Rpdj4NCgkJCTxkaXYgaWQ9Ind0LWxvZ2luLWJveCI+DQoJCQkJPGRpdiBjbGFzcz0iY2xvc2UiPjwvZGl2Pg0KCQkJCTxkaXYgY2xhc3M9InRpdGxlIj7nmbvlvZXnoIE8L2Rpdj4NCgkJCQk8ZGl2IGNsYXNzPSJpbnB1dC1ib3giPg0KCQkJCQk8aW5wdXQgcGxhY2Vob2xkZXI9Iuivt+WcqOWPiuaXtuihjOS5kOS4reWFjei0ueiOt+WPliIvPg0KCQkJCQk8ZGl2IGNsYXNzPSJsb2dpbi1idG4iPg0KCQkJCQkJPGJ1dHRvbj7nmbvlvZU8L2J1dHRvbj4NCgkJCQkJPC9kaXY+DQoJCQkJPC9kaXY+DQoJCQkJPGRpdiBjbGFzcz0idG8taW5kZXgiIHN0eWxlPSJjb2xvcjogIzM2YjVjNTt0ZXh0LWFsaWduOiByaWdodDttYXJnaW4tcmlnaHQ6IDEwcHg7IGhlaWdodDogNTBweDtsaW5lLWhlaWdodDogNTBweDtmb250LXNpemU6IDEwcHg7Ij7ljrvojrflj5Yg77yfPC9kaXY+DQoJCQk8L2Rpdj4NCgkJYCkNCgkJR01fYWRkU3R5bGUoYA0KCQkJI3d0LWxvZ2luLW1hc2t7DQoJCQkJZGlzcGxheTogbm9uZTsNCgkJCQlwb3NpdGlvbjogZml4ZWQ7DQoJCQkJdG9wOiAwOw0KCQkJCWxlZnQ6IDA7DQoJCQkJcmlnaHQ6IDA7DQoJCQkJYm90dG9tOiAwOw0KCQkJCXotaW5kZXg6IDExMDAwOw0KCQkJCWJhY2tncm91bmQtY29sb3I6ICMwMDAwMDA0ZDsNCgkJCX0NCgkJCSN3dC1sb2dpbi1ib3ggew0KCQkJCXBvc2l0aW9uOiBmaXhlZDsNCgkJCQltYXJnaW4tdG9wOiAzJTsNCgkJCQl0b3A6IDUwJTsNCgkJCQlsZWZ0OiA1MCU7DQoJCQkJdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwtNTAlKSBzY2FsZSgwKTsNCgkJCQliYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsNCgkJCQlwYWRkaW5nOiAzMHB4IDEwcHg7DQoJCQkJcGFkZGluZy1ib3R0b206IDA7DQoJCQkJYm9yZGVyLXJhZGl1czogMTBweDsNCgkJCQl6LWluZGV4OiAxMTAxMDsNCgkJCX0NCgkJCSN3dC1sb2dpbi1ib3ggLmNsb3Nlew0KCQkJCXBvc2l0aW9uOiBhYnNvbHV0ZTsNCgkJCQlyaWdodDogMHB4Ow0KCQkJCXRvcDogMHB4Ow0KCQkJCXdpZHRoOiA0MHB4Ow0KCQkJCWhlaWdodDogNDBweDsNCgkJCX0NCgkJCSN3dC1sb2dpbi1ib3ggLmNsb3NlOjpiZWZvcmUsI3d0LWxvZ2luLWJveCAuY2xvc2U6OmFmdGVyew0KCQkJCXBvc2l0aW9uOiBhYnNvbHV0ZTsNCgkJCQlsZWZ0OiA1MCU7DQoJCQkJdG9wOiA1MCU7DQoJCQkJY29udGVudDogJyc7DQoJCQkJd2lkdGg6IDE2cHg7DQoJCQkJaGVpZ2h0OiAycHg7DQoJCQkJYm9yZGVyLXJhZGl1czogMXB4Ow0KCQkJCWJhY2tncm91bmQtY29sb3I6ICMyMjI7DQoJCQkJdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwtNTAlKSByb3RhdGUoNDVkZWcpOw0KCQkJfQ0KCQkJI3d0LWxvZ2luLWJveCAuY2xvc2U6OmFmdGVyLCN3dC1zZXQtYm94IC5jbG9zZTo6YWZ0ZXJ7DQoJCQkJdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwtNTAlKSByb3RhdGUoLTQ1ZGVnKTsNCgkJCX0NCgkJCSN3dC1sb2dpbi1ib3ggLnRpdGxlew0KCQkJCWZvbnQtd2VpZ2h0OiA2MDA7DQoJCQkJZm9udC1zaXplOiAxNnB4Ow0KCQkJCWNvbG9yOiAjM2EzYTNhOw0KCQkJCXRleHQtYWxpZ246IGNlbnRlcjsNCgkJCQltYXJnaW4tYm90dG9tOiAyMHB4Ow0KCQkJfQ0KCQkJI3d0LWxvZ2luLWJveCAuaW5wdXQtYm94ew0KCQkJCWRpc3BsYXk6IGZsZXg7DQoJCQkJYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTsNCgkJCQl3aWR0aDogMjMwcHg7DQoJCQkJaGVpZ2h0OiAzNXB4Ow0KCQkJCWJvcmRlci1yYWRpdXM6IDMwcHg7DQoJCQkJb3ZlcmZsb3c6IGhpZGRlbjsNCgkJCQlmb250LXNpemU6IDEycHg7DQoJCQl9DQoJCQkjd3QtbG9naW4tYm94IC5pbnB1dC1ib3ggaW5wdXR7DQoJCQkJd2lkdGg6IDEwMCU7DQoJCQkJaGVpZ2h0OiAxMDAlOw0KCQkJCXBhZGRpbmctbGVmdDogMTVweDsNCgkJCQlib3gtc2l6aW5nOiBib3JkZXItYm94Ow0KCQkJCW91dGxpbmU6IG5vbmU7DQoJCQkJYm9yZGVyOiBub25lOw0KCQkJCWJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7DQoJCQkJZm9udC1zaXplOiAxMHB4Ow0KCQkJCWNvbG9yOiBibGFjazsNCgkJCX0NCgkJCSN3dC1sb2dpbi1ib3ggLmxvZ2luLWJ0bnsNCgkJCQl3aWR0aDogMTAwcHg7DQoJCQkJcGFkZGluZzogMnB4Ow0KCQkJfQ0KCQkJI3d0LWxvZ2luLWJveCAubG9naW4tYnRuIGJ1dHRvbnsNCgkJCQl3aWR0aDogMTAwJTsNCgkJCQloZWlnaHQ6IDEwMCU7DQoJCQkJYm9yZGVyLXJhZGl1czogMzBweDsNCgkJCQlib3JkZXI6IG5vbmU7DQoJCQkJY29sb3I6IHdoaXRlOw0KCQkJCXRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7DQoJCQkJYmFja2dyb3VuZC1jb2xvcjogI2VjNDA3YTsNCgkJCX0NCgkJYCkNCgkJJCgiI3d0LWxvZ2luLW1hc2siKS5vbigiY2xpY2siLCAoKSA9PiB7DQoJCQkkKCcjd3QtbG9naW4tbWFzaycpLmNzcygnZGlzcGxheScsICdub25lJykNCgkJCSQoIiN3dC1sb2dpbi1ib3giKS5yZW1vdmVDbGFzcygnc2hvdy1zZXQtYm94JykNCgkJCSQoIiN3dC1sb2dpbi1ib3giKS5hZGRDbGFzcygnaGlkLXNldC1ib3gnKQ0KCQl9KQ0KCQkkKCIjd3QtbG9naW4tYm94IC5jbG9zZSIpLm9uKCJjbGljayIsICgpID0+IHsNCgkJCSQoJyN3dC1sb2dpbi1tYXNrJykuY3NzKCdkaXNwbGF5JywgJ25vbmUnKQ0KCQkJJCgiI3d0LWxvZ2luLWJveCIpLnJlbW92ZUNsYXNzKCdzaG93LXNldC1ib3gnKQ0KCQkJJCgiI3d0LWxvZ2luLWJveCIpLmFkZENsYXNzKCdoaWQtc2V0LWJveCcpDQoJCX0pDQoJCSQoIiN3dC1sb2dpbi1ib3ggLnRvLWluZGV4Iikub24oImNsaWNrIiwgKCkgPT4gew0KCQkJd2luZG93Lm9wZW4oc3VwZXJWaXAuX0NPTkZJR18uaG9tZVBhZ2UpDQoJCX0pDQoJCSQoIiN3dC1sb2dpbi1ib3ggLmxvZ2luLWJ0biBidXR0b24iKS5vbigiY2xpY2siLCAoKSA9PiB7DQoJCQlpZiAoIXd0X2luaXRfY29kZSkgew0KCQkJCXV0aWwuc2hvd1RpcHMoew0KCQkJCQl0aXRsZTogX0NPTkZJR18uaW5pdEZhaWxNc2cNCgkJCQl9KTsNCgkJCQlyZXR1cm4NCgkJCX0NCgkJCSQoJyN3dC1sb2FkaW5nLWJveCcpLmNzcygnZGlzcGxheScsICdibG9jaycpDQoJCQkkKCIjd3QtbG9naW4tYm94IC5sb2dpbi1idG4gYnV0dG9uIikuYWRkQ2xhc3MoJ2J0bi1hbmltYScpDQoJCQlzZXRUaW1lb3V0KCgpID0+IHsNCgkJCQkkKCIjd3QtbG9naW4tYm94IC5sb2dpbi1idG4gYnV0dG9uIikucmVtb3ZlQ2xhc3MoJ2J0bi1hbmltYScpDQoJCQl9LCA1MDApDQoJCQljb25zdCBwd2QgPSAkKCIjd3QtbG9naW4tYm94IGlucHV0IikudmFsKCkNCgkJCWNvbnN0IG1kNWMgPSBtZDV4KCkNCgkJCWNvbnN0IGRtZDUgPSBtZDV4KG1kNWMsICdkZScpDQoJCQlpZiAoIXB3ZCB8fCBwd2QgIT0gZG1kNS5jb2RlKSB7DQoJCQkJc2V0VGltZW91dCgoKSA9PiB7DQoJCQkJCSQoJyN3dC1sb2FkaW5nLWJveCcpLmNzcygnZGlzcGxheScsICdub25lJykNCgkJCQkJdXRpbC5zaG93VGlwcyh7DQoJCQkJCQl0aXRsZTogJ+eZu+W9leeggemUmeivrycNCgkJCQkJfSkNCgkJCQl9LCAyNTAwKQ0KCQkJCXJldHVybg0KCQkJfQ0KCQkJJCgnI3d0LWxvYWRpbmctYm94JykuY3NzKCdkaXNwbGF5JywgJ2Jsb2NrJykNCgkJCXNldFRpbWVvdXQoKCkgPT4gew0KCQkJCSQoJyN3dC1sb2FkaW5nLWJveCcpLmNzcygnZGlzcGxheScsICdub25lJykNCgkJCQl1dGlsLnNob3dUaXBzKHsgdGl0bGU6ICfor7fli7/lnKjmtbfop5LlubPlj7Dlj5Hooagg6ISa5pys44CB56C06Kej562J6KiA6K6677yM5piT5a+86Ie05Y2a5Li75LiN5pu05paw77yM5bmz5Y+w5L+u5aSN5ryP5rSe562J5b2x5ZONJyxzdWNjZXNzOiAoZSk9PnsNCgkJCQkJaWYoZSl7DQoJCQkJCQljb25zdCByZXMgPSB7DQoJCQkJCQkJYXZhdGFyOiAnaHR0cHM6Ly9tcC1hZjMwNzI2OC0xYjhhLTQ4MmEtYjc1YS1iNmU5OGIxMjU3NDIuY2RuLmJzcGFwcC5jb20vc3lzdGVtL2xvZ28vbG9nb193aGl0ZTEucG5nJywNCgkJCQkJCQlsb2dpbl9kYXRlOiBuZXcgRGF0ZSgpLnNldEhvdXJzKDAsIDAsIDAsIDApLA0KCQkJCQkJCXRva2VuOiBtZDVjDQoJCQkJCQl9DQoJCQkJCQkkKCIjd3QtbXkgaW1nIikuYWRkQ2xhc3MoJ21hcmdpbi1sZWZ0JykNCgkJCQkJCSQoJyN3dC1teSBpbWcnKS5hdHRyKCdzcmMnLCByZXMuYXZhdGFyKQ0KCQkJCQkJJCgnI3d0LWxvZ2luLW1hc2snKS5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpDQoJCQkJCQkkKCIjd3QtbG9naW4tYm94IikucmVtb3ZlQ2xhc3MoJ3Nob3ctc2V0LWJveCcpDQoJCQkJCQkkKCIjd3QtbG9naW4tYm94IikuYWRkQ2xhc3MoJ2hpZC1zZXQtYm94JykNCgkJCQkJCXN1cGVyVmlwLl9DT05GSUdfLnVzZXIgPSByZXMNCgkJCQkJCUdNX3NldFZhbHVlKCdqc3hsX3VzZXInLCByZXMpDQoJCQkJCQl3aW5kb3cubG9jYXRpb24ucmVsb2FkKCkNCgkJCQkJfQ0KCQkJCX19KQ0KCQkJfSwgMjUwMCkNCgkJfSkNCgl9LA0KDQoJZmluZFRhcmdldEVsZW1lbnQ6ICh0YXJnZXRDb250YWluZXIpID0+IHsNCgkJY29uc3QgYm9keSA9IHdpbmRvdy5kb2N1bWVudDsNCgkJbGV0IHRhYkNvbnRhaW5lcjsNCgkJbGV0IHRyeVRpbWUgPSAwOw0KCQljb25zdCBtYXhUcnlUaW1lID0gMzA7DQoJCWxldCBzdGFydFRpbWVzdGFtcDsNCgkJcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsNCgkJCWZ1bmN0aW9uIHRyeUZpbmRFbGVtZW50KHRpbWVzdGFtcCkgew0KCQkJCWlmICghc3RhcnRUaW1lc3RhbXApIHsNCgkJCQkJc3RhcnRUaW1lc3RhbXAgPSB0aW1lc3RhbXA7DQoJCQkJfQ0KCQkJCWNvbnN0IGVsYXBzZWRUaW1lID0gdGltZXN0YW1wIC0gc3RhcnRUaW1lc3RhbXA7DQoJCQkJaWYgKGVsYXBzZWRUaW1lID49IDUwMCkgew0KCQkJCQljb25zb2xlLmxvZygi5p+l5om+5YWD57Sg77yaIiArIHRhcmdldENvbnRhaW5lciArICLvvIznrKwiICsgdHJ5VGltZSArICLmrKEiKQ0KCQkJCQl0YWJDb250YWluZXIgPSBib2R5LnF1ZXJ5U2VsZWN0b3IodGFyZ2V0Q29udGFpbmVyKQ0KCQkJCQlpZiAodGFiQ29udGFpbmVyKSB7DQoJCQkJCQlyZXNvbHZlKHRhYkNvbnRhaW5lcikNCgkJCQkJfSBlbHNlIGlmICgrK3RyeVRpbWUgPT09IG1heFRyeVRpbWUpIHsNCgkJCQkJCXJlamVjdCgpDQoJCQkJCX0gZWxzZSB7DQoJCQkJCQlzdGFydFRpbWVzdGFtcCA9IHRpbWVzdGFtcA0KCQkJCQl9DQoJCQkJfQ0KCQkJCWlmICghdGFiQ29udGFpbmVyICYmIHRyeVRpbWUgPCBtYXhUcnlUaW1lKSB7DQoJCQkJCXJlcXVlc3RBbmltYXRpb25GcmFtZSh0cnlGaW5kRWxlbWVudCk7DQoJCQkJfQ0KCQkJfQ0KCQkJcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRyeUZpbmRFbGVtZW50KTsNCgkJfSk7DQoJfSwNCg0KCXJlcGxhY2VFeGlzdFJlc291cmNlczogKGJvZHkpID0+IHsNCgkJbGV0IGF0dGFjaG1lbnRzID0gYm9keS5hdHRhY2htZW50czsNCgkJbGV0IGFsbF9pbWcgPSB7fTsNCgkJbGV0IGhhc192aWRlbyA9IC0xOw0KCQlsZXQgaGFzX2F1ZGlvID0gLTE7DQoJCWZvciAodmFyIGkgPSAwOyBpIDwgYXR0YWNobWVudHMubGVuZ3RoOyBpKyspIHsNCgkJCXZhciBhdHRhID0gYXR0YWNobWVudHNbaV07DQoJCQlpZiAoYXR0YS5jYXRlZ29yeSA9PT0gJ2ltYWdlcycpIHsNCgkJCQlhbGxfaW1nW2F0dGEuaWRdID0gYXR0YS5yZW1vdGVVcmw7DQoJCQl9DQoJCQlpZiAoYXR0YS5jYXRlZ29yeSA9PT0gJ2F1ZGlvJykgew0KCQkJCWhhc19hdWRpbyA9IGk7DQoJCQkJcmV0dXJuIFtib2R5LCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgaGFzX2F1ZGlvXTsNCgkJCX0NCgkJCWlmIChhdHRhLmNhdGVnb3J5ID09PSAndmlkZW8nKSB7DQoJCQkJaGFzX3ZpZGVvID0gaTsNCgkJCQlyZXR1cm4gW2JvZHksIHVuZGVmaW5lZCwgaGFzX3ZpZGVvLCB1bmRlZmluZWRdOw0KCQkJfQ0KCQl9DQoJCXJldHVybiBbYm9keSwgYWxsX2ltZywgaGFzX3ZpZGVvXTsNCgl9LA0KDQoJc2xlZXA6ICh0aW1lKSA9PiB7DQoJCXJldHVybiBuZXcgUHJvbWlzZSgocmVzLCByZWopID0+IHsNCgkJCXNldFRpbWVvdXQoKCkgPT4gew0KCQkJCXJlcygpDQoJCQl9LCB0aW1lKQ0KCQl9KQ0KCX0sDQoNCglnZXRNM3U4UGF0aDogKHVybCkgPT4gew0KCQlpZihsb2NhdGlvbi5ob3N0bmFtZSA9PSAnaGpkZjM5LmNvbScgJiYgIXVybC5zdGFydHNXaXRoKCdodHRwJykpIHVybCA9ICdodHRwczovL2hqYTQ1MC50b3AnICsgdXJsDQoJCXZhciByZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7DQoJCXJlcXVlc3Qub3BlbignR0VUJywgdXJsLCBmYWxzZSk7DQoJCXJlcXVlc3Quc2VuZChudWxsKTsNCgkJaWYgKHJlcXVlc3Quc3RhdHVzICE9PSAyMDApIHsNCgkJCWNvbnNvbGUubG9nKGDop6PmnpDlpLHotKUhYCk7DQoJCQlyZXR1cm4gdXJsOw0KCQl9DQoJCWxldCB0c19wYXRoID0gcmVxdWVzdC5yZXNwb25zZVRleHQuc3BsaXQoJ1xuJylbNl07DQoJCWxldCByZWcgPSB0c19wYXRoLm1hdGNoKC8oW1x3X10rXz8pW1xkXSsudHMvKTsNCgkJcmV0dXJuIHRzX3BhdGgucmVwbGFjZShyZWdbMF0sIHJlZ1sxXSArICcubTN1OCcpDQoJfSwNCg0KCWdldFVzZXJEaWN0OiAoaWQpID0+IHsNCgkJdmFyIHVybCA9IGBodHRwczovLyR7d2luZG93LmxvY2F0aW9uLmhvc3RuYW1lfS9hcGkvdG9waWMvbm9kZS90b3BpY3M/cGFnZT0xJnVzZXJJZD0ke2lkfSZ0eXBlPTBgOw0KCQl2YXIgcmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOw0KCQlyZXF1ZXN0Lm9wZW4oJ0dFVCcsIHVybCwgZmFsc2UpOw0KCQlyZXF1ZXN0LnNlbmQobnVsbCk7DQoJCWlmIChyZXF1ZXN0LnN0YXR1cyAhPT0gMjAwKSB7DQoJCQljb25zb2xlLmxvZyhg55So5oi35L+h5oGv6Kej5p6Q5aSx6LSlIWApOw0KCQkJcmV0dXJuIHt9Ow0KCQl9DQoJCWxldCBwID0gSlNPTi5wYXJzZShyZXF1ZXN0LnJlc3BvbnNlVGV4dCwgYHV0Zi04YCkuZGF0YTsNCgkJcCA9IEpTT04ucGFyc2UoZGVjb2RlKHAsIHN1cGVyVmlwKSwgYHV0Zi04YCk7DQoJCWxldCB0b3RhbCA9IHAucGFnZS50b3RhbDsNCgkJbGV0IHVpZCA9ICcnOw0KCQlpZiAoYHJlc3VsdHNgIGluIHApIHsNCgkJCXVpZCA9IHAucmVzdWx0c1swXS51c2VyLm5pY2tuYW1lOw0KCQl9DQoJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2hlYWQgdGl0bGUnKS5pbm5lckhUTUwgPSAnKHUp6KKr5bCB56aB6LSm5Y+3Jw0KCQlyZXR1cm4gew0KCQkJJ2lzRmF2b3JpdGUnOiBmYWxzZSwNCgkJCSdsaWtlQ291bnQnOiAxMiwNCgkJCSd1c2VyJzogew0KCQkJCSdpZCc6IHBhcnNlSW50KGlkKSwNCgkJCQknbmlja25hbWUnOiAn6KKr5bCB56aB6LSm5Y+3JywNCgkJCQknYXZhdGFyJzogJzAnLA0KCQkJCSdkZXNjcmlwdGlvbic6IGDor6XotKblj7flt7LooqvlsIHnpoFgLA0KCQkJCSd0b3BpY0NvdW50JzogdG90YWwsDQoJCQkJJ3ZpZGVvQ291bnQnOiAwLA0KCQkJCSdjb21tZW50Q291bnQnOiAzMDMsDQoJCQkJJ2ZhbnNDb3VudCc6IDU3LA0KCQkJCSdmYXZvcml0ZUNvdW50JzogMzksDQoJCQkJJ3N0YXR1cyc6IDAsDQoJCQkJJ3NleCc6IDEsDQoJCQkJJ3ZpcCc6IDAsDQoJCQkJJ3ZpcEV4cGlyZXNUaW1lJzogJzAwMDEtMDEtMDEgMDA6MDA6MDAnLA0KCQkJCSdjZXJ0aWZpZWQnOiBmYWxzZSwNCgkJCQknY2VydFZpZGVvJzogZmFsc2UsDQoJCQkJJ2NlcnRQcm9mZXNzb3InOiBmYWxzZSwNCgkJCQknZmFtb3VzJzogZmFsc2UsDQoJCQkJJ2ZvcmJpZGRlbic6IGZhbHNlLA0KCQkJCSd0YWdzJzogbnVsbCwNCgkJCQkncm9sZSc6IDAsDQoJCQkJJ3BvcHVsYXJpdHknOiAxMCwNCgkJCQknZGlhbW9uZENvbnN1bWUnOiAwLA0KCQkJCSd0aXRsZSc6IHsNCgkJCQkJJ2lkJzogMCwNCgkJCQkJJ25hbWUnOiAnJywNCgkJCQkJJ2NvbnN1bWUnOiAwLA0KCQkJCQknY29uc3VtZUVuZCc6IDAsDQoJCQkJCSdpY29uJzogcC5yZXN1bHRzWzBdLnVzZXIudGl0bGUuaWNvbg0KCQkJCX0sDQoJCQkJJ2ZyaWVuZFN0YXR1cyc6IGZhbHNlLA0KCQkJCSd2b2ljZVN0YXR1cyc6IGZhbHNlLA0KCQkJCSd2aWRlb1N0YXR1cyc6IGZhbHNlLA0KCQkJCSd2b2ljZU1vbmV5VHlwZSc6IDAsDQoJCQkJJ3ZvaWNlQW1vdW50JzogMCwNCgkJCQkndmlkZW9Nb25leVR5cGUnOiAwLA0KCQkJCSd2aWRlb0Ftb3VudCc6IDAsDQoJCQkJJ2RlcG9zaXRNb25leSc6IDANCgkJCX0NCgkJfQ0KCX0sDQoNCgltb2RpZnlVc2VyOiAoZGF0YSwgaWQpID0+IHsNCgkJaWYgKGRhdGEuZXJyb3JDb2RlID09PSAwKSB7DQoJCQlpZiAoc3VwZXJWaXAuX0NPTkZJR18uaGplZGQgfHwgdHlwZW9mKGRhdGEuZGF0YSkgPT0gJ29iamVjdCcpIHsNCgkJCQlzdXBlclZpcC5fQ09ORklHXy5oamVkZCA9IHRydWUNCgkJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdoZWFkIHRpdGxlJykuaW5uZXJIVE1MID0gJyh1KScgKyBkYXRhLmRhdGEudXNlci5uaWNrbmFtZQ0KCQkJfSBlbHNlIHsNCgkJCQlsZXQgYm9keSA9ICcnDQoJCQkJdHJ5IHsNCgkJCQkJYm9keSA9IEpTT04ucGFyc2UoZGVjb2RlKGRhdGEuZGF0YSwgc3VwZXJWaXApKTsNCgkJCQl9IGNhdGNoIChlKSB7DQoJCQkJCWJvZHkgPSBKU09OLnBhcnNlKGRlY29kZShkYXRhLmRhdGEsIHN1cGVyVmlwLCB0cnVlKSk7DQoJCQkJfQ0KCQkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2hlYWQgdGl0bGUnKS5pbm5lckhUTUwgPSAnKHUpJyArIGJvZHkudXNlci5uaWNrbmFtZQ0KCQkJfQ0KCQkJcmV0dXJuIGRhdGE7DQoJCX0NCgkJZGF0YS5pc0VuY3J5cHRlZCA9IHRydWU7DQoJCWRhdGEuZXJyb3JDb2RlID0gMDsNCgkJZGF0YS5zdWNjZXNzID0gdHJ1ZTsNCgkJZGF0YS5tZXNzYWdlID0gIiI7DQoJCWxldCB1ZGljdCA9IHV0aWwuZ2V0VXNlckRpY3QoaWQpOw0KCQlkYXRhLmRhdGEgPSB1dGlsLmplbmNvZGUodWRpY3QsICdwbHVzJykNCgkJcmV0dXJuIGRhdGENCgl9LA0KDQoJbW9kaWZ5RGF0YTogKGRhdGEpID0+IHsNCgkJbGV0IGJvZHkgPSAnJw0KCQlsZXQgaXNQbHVzID0gZmFsc2UNCgkJaWYgKHN1cGVyVmlwLl9DT05GSUdfLmhqZWRkIHx8IHR5cGVvZihkYXRhKSA9PSAnb2JqZWN0Jykgew0KCQkJc3VwZXJWaXAuX0NPTkZJR18uaGplZGQgPSB0cnVlDQoJCQlib2R5ID0gZGF0YQ0KCQl9IGVsc2Ugew0KCQkJdHJ5IHsNCgkJCQlib2R5ID0gSlNPTi5wYXJzZShkZWNvZGUoZGF0YSwgc3VwZXJWaXApKTsNCgkJCX0gY2F0Y2ggKGUpIHsNCgkJCQlib2R5ID0gSlNPTi5wYXJzZShkZWNvZGUoZGF0YSwgc3VwZXJWaXAsIHRydWUpKTsNCgkJCQlpc1BsdXMgPSB0cnVlDQoJCQl9DQoJCX0NCgkJaWYgKCFib2R5KSByZXR1cm4gc3VwZXJWaXAuX0NPTkZJR18uaGplZGQgPyAnbnVsbCcgOiAnV1cwMVYyTXlTa0pRVkRBOScNCgkJaWYgKCQuaXNFbXB0eU9iamVjdChib2R5KSkgcmV0dXJuIHN1cGVyVmlwLl9DT05GSUdfLmhqZWRkID8gJ3t9JyA6ICdXbFJOZDFCUlBUMD0nDQoJCWlmIChib2R5LmF0dGFjaG1lbnRzICYmIGJvZHkuYXR0YWNobWVudHMubGVuZ3RoID4gMCkgew0KCQkJbGV0IHR5cGVzID0gW10NCgkJCWJvZHkuYXR0YWNobWVudHMuZm9yRWFjaChpdGVtID0+IHsNCgkJCQlpZiAoaXRlbS5jYXRlZ29yeSA9PSAndmlkZW8nICYmICghdHlwZXMuaW5jbHVkZXMoJ3ZpZGVvJykpKSB7DQoJCQkJCXR5cGVzLnB1c2goJ3ZpZGVvJykNCgkJCQl9DQoJCQkJaWYoaXRlbS5jYXRlZ29yeSA9PSAndmlkZW8nICYmICFpdGVtLnJlbW90ZVVybCl7DQoJCQkJCWxldCB1aWQgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCd1aWQnKQ0KCQkJCQlsZXQgdG9rZW4gPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCd0b2tlbicpDQoJCQkJCWlmKCF1aWQgfHwgIXRva2VuKXsNCgkJCQkJCXVpZCA9IDE2OTcwMzA5NTgwMQ0KCQkJCQkJdG9rZW4gPSAnMjBlMzA0ZDlkM2IxNDBiZmFmMGYxMDU0OTcxN2JiZGQnDQoJCQkJCX0NCgkJCQkJJC5wb3N0KHsNCgkJCQkJCXVybDogbG9jYXRpb24ub3JpZ2luICsgJy9hcGkvYXR0YWNobWVudCcsDQoJCQkJCQloZWFkZXJzOiB7DQoJCQkJCQkJJ1gtVXNlci1JZCc6IHVpZCwNCgkJCQkJCQknWC1Vc2VyLVRva2VuJzogdG9rZW4NCgkJCQkJCX0sDQoJCQkJCQlkYXRhOiBKU09OLnN0cmluZ2lmeSh7DQoJCQkJCQkJaWQ6IGl0ZW0uaWQsDQoJCQkJCQkJcmVzb3VyY2VfdHlwZTogJ3RvcGljJywNCgkJCQkJCQlyZXNvdXJjZV9pZDogYm9keS50b3BpY0lkLA0KCQkJCQkJCWxpbmU6ICcnDQoJCQkJCQl9KQ0KCQkJCQl9KQ0KCQkJCX0NCgkJCQlpZiAoaXRlbS5jYXRlZ29yeSA9PSAnYXVkaW8nICYmICghdHlwZXMuaW5jbHVkZXMoJ2F1ZGlvJykpKSB0eXBlcy5wdXNoKCdhdWRpbycpDQoJCQkJaWYgKGl0ZW0uY2F0ZWdvcnkgPT0gJ2ltYWdlcycgJiYgKCF0eXBlcy5pbmNsdWRlcygnaW1nJykpKSB0eXBlcy5wdXNoKCdpbWcnKQ0KCQkJfSkNCgkJCXR5cGVzID0gJ1snICsgdHlwZXMuam9pbignICsgJykgKyAnXScNCgkJCWJvZHkudGl0bGUgPSAodHlwZXMgKyBib2R5LnRpdGxlKQ0KCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaGVhZCB0aXRsZScpLmlubmVySFRNTCA9IHN1cGVyVmlwLl9DT05GSUdfLmhqZWRkID8gYm9keS50aXRsZSA6IGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUoYm9keS50aXRsZSkpDQoJCX0NCgkJLy8gaWYgKChib2R5LnNhbGUgPT09IG51bGwgfHwgKGJvZHkuc2FsZSAmJiBib2R5LnNhbGUNCgkJLy8gCQkubW9uZXlfdHlwZSA9PSAwKSkpIHsNCgkJLy8gCWJvZHkuYXR0YWNobWVudHMuZm9yRWFjaChpdGVtID0+IHsNCgkJLy8gCQlpZihpdGVtLmNhdGVnb3J5ID09ICd2aWRlbycgJiYgaXRlbS5yZW1vdGVVcmwuc3RhcnRzV2l0aCgnaHR0cCcpKXsNCgkJLy8gCQkJc3VwZXJWaXAuX0NPTkZJR18udmlkZW9VcmwgPSBpdGVtLnJlbW90ZVVybA0KCQkvLyAJCX0NCgkJLy8gCX0pDQoJCS8vIAlyZXR1cm4gc3VwZXJWaXAuX0NPTkZJR18uaGplZGQgPyBib2R5IDogdXRpbC5qZW5jb2RlKGJvZHksIGlzUGx1cyk7DQoJCS8vIH0NCgkJbGV0IFtuYm9keSwgcmVzdF9pbWcsIGhhc192aWRlbywgaGFzX2F1ZGlvXSA9IHV0aWwucmVwbGFjZUV4aXN0UmVzb3VyY2VzKGJvZHkpOw0KCQlib2R5ID0gbmJvZHk7DQoJCWlmICgnc2FsZScgaW4gYm9keSAmJiBib2R5LnNhbGUgIT09IG51bGwpIHsNCgkJCWJvZHkuc2FsZS5pc19idXkgPSB0cnVlOw0KCQkJYm9keS5zYWxlLmJ1eV9pbmRleCA9IHBhcnNlSW50KE1hdGgucmFuZG9tKCkgKiAoNTAwMCAtIDEwMDAgKyAxKSArIDEwMDAsIDEwKTsNCgkJfQ0KCQlpZiAoaGFzX3ZpZGVvID49IDAgfHwgaGFzX2F1ZGlvID49IDApIHsNCgkJCWxldCBpbnNlcnREb20gPSAnJw0KCQkJaWYgKGhhc192aWRlbyA+PSAwKSB7DQoJCQkJaWYoYm9keS5hdHRhY2htZW50c1toYXNfdmlkZW9dLnJlbW90ZVVybCl7DQoJCQkJCWJvZHkuYXR0YWNobWVudHNbaGFzX3ZpZGVvXS5yZW1vdGVVcmwgPSB1dGlsLmdldE0zdThQYXRoKGJvZHkuYXR0YWNobWVudHNbaGFzX3ZpZGVvXS5yZW1vdGVVcmwpOw0KCQkJCX0NCgkJCQlzdXBlclZpcC5fQ09ORklHXy52aWRlb1VybCA9IGJvZHkuYXR0YWNobWVudHNbaGFzX3ZpZGVvXS5yZW1vdGVVcmwNCgkJCQlpbnNlcnREb20gPQ0KCQkJCQlgPGRpdj48dmlkZW8gc3R5bGU9ImRpc3BsYXk6bm9uZSIgc3JjPSIke2JvZHkuYXR0YWNobWVudHNbaGFzX3ZpZGVvXS5yZW1vdGVVcmx9IiBkYXRhLWlkPSIke2JvZHkuYXR0YWNobWVudHNbaGFzX3ZpZGVvXS5pZH0iPjwvdmlkZW8+PC9kaXY+YA0KCQkJfSBlbHNlIHsNCgkJCQlpbnNlcnREb20gPQ0KCQkJCQlgPGRpdiBzdHlsZT0ibWFyZ2luOiAyMHB4OyI+PGF1ZGlvIGlkPSJzaG93YXVkaW8iIHNyYz0iJHtib2R5LmF0dGFjaG1lbnRzW2hhc19hdWRpb10ucmVtb3RlVXJsfSIgY29udHJvbHMgY29udHJvbHNsaXN0PSJub2Rvd25sb2FkIj48L2F1ZGlvPjwvZGl2PmANCgkJCX0NCgkJCXRyeSB7DQoJCQkJY29uc3QgcmVnUmVwID0gL2NsYXNzPSJzZWxsX2xpbmUyIlw+W15cPF0rPFwvc3Bhbj4vLmV4ZWMoYm9keS5jb250ZW50KVswXQ0KCQkJCWJvZHkuY29udGVudCA9IGJvZHkuY29udGVudC5yZXBsYWNlKCc8c3BhbiBjbGFzcz0ic2VsbC1idG4iJywNCgkJCQkJJzxkaXYgaWQ9Ind0LXJlc291cmNlcy1ib3giPjxkaXYgY2xhc3M9InNlbGwtYnRuIicpLnJlcGxhY2UocmVnUmVwLCByZWdSZXAgKyBpbnNlcnREb20gKw0KCQkJCQknPC9kaXY+PC9kaXY+Jyk7DQoJCQl9IGNhdGNoIChlKSB7DQoJCQkJYm9keS5jb250ZW50ICs9IGluc2VydERvbQ0KCQkJfQ0KCQkJcmV0dXJuIHN1cGVyVmlwLl9DT05GSUdfLmhqZWRkID8gYm9keSA6IHV0aWwuamVuY29kZShib2R5LCBpc1BsdXMpOw0KCQl9DQoJCWxldCBkb21fZWxlbWVudHMgPSBbXQ0KCQlmb3IgKGNvbnN0IFtpZCwgc3JjXSBvZiBPYmplY3QuZW50cmllcyhyZXN0X2ltZykpIHsNCgkJCWRvbV9lbGVtZW50cy5wdXNoKGA8aW1nIHNyYz0iJHtzcmN9IiBkYXRhLWlkPSIke2lkfSIvPmApOw0KCQl9DQoJCWxldCBzZWxsZWRfaW1nID0gYFtzZWxsXWAgKyAnPHA+JyArIGRvbV9lbGVtZW50cy5qb2luKCc8L3A+PHA+JykgKyAnPC9wPicgKyBgWy9zZWxsXWA7DQoJCWxldCBuY29udGVudCA9IGJvZHkuY29udGVudC5yZXBsYWNlKC88c3BhbiBjbGFzcz1cInNlbGwtYnRuXCIuKjxcL3NwYW4+Lywgc2VsbGVkX2ltZyk7DQoJCWJvZHkuY29udGVudCA9IG5jb250ZW50Ow0KCQlyZXR1cm4gc3VwZXJWaXAuX0NPTkZJR18uaGplZGQgPyBib2R5IDogdXRpbC5qZW5jb2RlKGJvZHksIGlzUGx1cyk7DQoJfSwNCg0KCWZvcm1hdFRpdGxlOiAoZGF0YSkgPT4gew0KCQlpZiAoIWRhdGEpIHJldHVybiBkYXRhDQoJCWlmIChzdXBlclZpcC5fQ09ORklHXy5oamVkZCB8fCB0eXBlb2YoZGF0YSkgPT0gJ29iamVjdCcpIHsNCgkJCXN1cGVyVmlwLl9DT05GSUdfLmhqZWRkID0gdHJ1ZQ0KCQl9IGVsc2Ugew0KCQkJZGF0YSA9IEpTT04ucGFyc2UoZGVjb2RlKGRhdGEsIHN1cGVyVmlwKSkNCgkJfQ0KCQlpZiAoIWRhdGEgfHwgZGF0YSA9PSAnbnVsbCcpIHJldHVybiBzdXBlclZpcC5fQ09ORklHXy5oamVkZCA/ICdudWxsJyA6ICdXVzAxVjJNeVNrSlFWREE5Jw0KCQlpZiAoIWRhdGEucmVzdWx0cykgew0KCQkJZGF0YS5yZXN1bHRzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkYXRhKSkNCgkJCWRhdGEuaXNMaXN0ID0gdHJ1ZQ0KCQl9DQoJCWRhdGEucmVzdWx0cy5mb3JFYWNoKGl0ZW0gPT4gew0KCQkJaWYgKGl0ZW0uYXR0YWNobWVudHMgJiYgaXRlbS5hdHRhY2htZW50cy5sZW5ndGggPiAwKSB7DQoJCQkJbGV0IHR5cGVzID0gW10NCgkJCQlpZiAoaXRlbS5oYXNWaWRlbyAmJiAhc3VwZXJWaXAuX0NPTkZJR18uaGplZGQpIHR5cGVzLnB1c2goJ3ZpZGVvJykNCgkJCQlpZiAoaXRlbS5oYXNBdWRpbyAmJiAhc3VwZXJWaXAuX0NPTkZJR18uaGplZGQpIHR5cGVzLnB1c2goJ2F1ZGlvJykNCgkJCQlpZiAoaXRlbS5oYXNQaWMgJiYgIXN1cGVyVmlwLl9DT05GSUdfLmhqZWRkKSB0eXBlcy5wdXNoKCdpbWcnKQ0KCQkJCWlmICh0eXBlcy5sZW5ndGggPiAwKSB7DQoJCQkJCXR5cGVzID0gJ1snICsgdHlwZXMuam9pbignICsgJykgKyAnXScNCgkJCQkJaXRlbS50aXRsZSA9ICh0eXBlcyArIGl0ZW0udGl0bGUpDQoJCQkJfSBlbHNlIHsNCgkJCQkJbGV0IGltZ0NvdW50ID0gMA0KCQkJCQlpdGVtLmF0dGFjaG1lbnRzLmZvckVhY2goaXRlbSA9PiB7DQoJCQkJCQlpZiAoaXRlbS5jYXRlZ29yeSA9PSAndmlkZW8nICYmICghdHlwZXMuaW5jbHVkZXMoJ3ZpZGVvJykpKSB0eXBlcy5wdXNoKA0KCQkJCQkJCSd2aWRlbycpDQoJCQkJCQlpZiAoaXRlbS5jYXRlZ29yeSA9PSAnYXVkaW8nICYmICghdHlwZXMuaW5jbHVkZXMoJ2F1ZGlvJykpKSB0eXBlcy5wdXNoKA0KCQkJCQkJCSdhdWRpbycpDQoJCQkJCQlpZiAoaXRlbS5jYXRlZ29yeSA9PSAnaW1hZ2VzJykgew0KCQkJCQkJCWlmICghdHlwZXMuaW5jbHVkZXMoJ2ltZycpKSB0eXBlcy5wdXNoKCdpbWcnKQ0KCQkJCQkJCWltZ0NvdW50KysNCgkJCQkJCX0NCgkJCQkJfSkNCgkJCQkJaWYgKHN1cGVyVmlwLl9DT05GSUdfLmhqZWRkICYmIChpbWdDb3VudCA+IDIpICYmICF0eXBlcy5pbmNsdWRlcygndmlkZW8nKSkgdHlwZXMNCgkJCQkJCS5wdXNoKCc/JykNCgkJCQkJaWYgKHR5cGVzLmxlbmd0aCA+IDApIHsNCgkJCQkJCXR5cGVzID0gJ1snICsgdHlwZXMuam9pbignICsgJykgKyAnXScNCgkJCQkJCWl0ZW0udGl0bGUgPSAodHlwZXMgKyBpdGVtLnRpdGxlKQ0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQl9KQ0KCQlpZiAoc3VwZXJWaXAuX0NPTkZJR18uaGplZGQpIHsNCgkJCXJldHVybiBkYXRhLmlzTGlzdCA/IGRhdGEuaXNMaXN0IDogZGF0YQ0KCQl9IGVsc2Ugew0KCQkJcmV0dXJuIGRhdGEuaXNMaXN0ID8gdXRpbC5qZW5jb2RlKGRhdGEucmVzdWx0cykgOiB1dGlsLmplbmNvZGUoZGF0YSkNCgkJfQ0KCX0sDQoNCglsYXN0aW5nVG9rZW46IChkYXRhKSA9PiB7DQoJCWlmICghZGF0YSkgcmV0dXJuIGRhdGE7DQoJCWxldCBpbmZvID0gJycNCgkJaWYgKHN1cGVyVmlwLl9DT05GSUdfLmhqZWRkIHx8IHR5cGVvZihkYXRhKSA9PSAnb2JqZWN0Jykgew0KCQkJc3VwZXJWaXAuX0NPTkZJR18uaGplZGQgPSB0cnVlDQoJCQlpbmZvID0gZGF0YQ0KCQl9IGVsc2Ugew0KCQkJaW5mbyA9IEpTT04ucGFyc2UoZGVjb2RlKGRhdGEsIHN1cGVyVmlwKSkNCgkJfQ0KCQljb25zdCB1c2VyID0gaW5mby51c2VyID8gaW5mby51c2VyIDogaW5mbw0KCQl1c2VyLnRpdGxlID0gew0KCQkJaWQ6IDYsDQoJCQluYW1lOiB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoJ+elnuixqicpKSwNCgkJCWNvbnN1bWU6IDEwMDAwMDAwLA0KCQkJY29uc3VtZUVuZDogMCwNCgkJCWljb246ICJodHRwczovL2hqcGljLmhqcGZlMS5jb20vaGpzdG9yZS9zeXN0ZW0vbm9kZS91c2VydGl0bGU2LnBuZz92ZXI9MTY1NDU5MDIzNSINCgkJfQ0KCQl1c2VyLnZpcCA9IDQNCgkJdXNlci5mYW1vdXMgPSB0cnVlDQoJCS8vIAlkb2N1bWVudC5jb29raWUgPSAidWlkPSIgKyBpbmZvLnVpZA0KCQkvLyAJZG9jdW1lbnQuY29va2llID0gInRva2VuPSIgKyBpbmZvLnRva2VuDQoJCQ0KCQkvLyBpZiAoaW5mby50b2tlbikgR01fc2V0VmFsdWUoJ2xhc3RpbmdfaGFpamlhb190b2tlbicsIHsNCgkJLy8gCXVpZDogdXNlci5pZCwNCgkJLy8gCXRva2VuOiBpbmZvLnRva2VuDQoJCS8vIH0pDQoJCS8vIGlmIChpbmZvLnRva2VuKXsNCgkJLy8gCWRvY3VtZW50LmNvb2tpZSA9ICJ1aWQ9IiArIHVzZXIuaWQgKyc7ZG9tYWluPScgKyBsb2NhdGlvbi5ob3N0bmFtZSArICd4O2V4cGlyZXM9JyArIG5ldyBEYXRlKERhdGUubm93KCkgKyAxMjk2MDAwMDAwKS50b0lTT1N0cmluZygpDQoJCS8vIAlkb2N1bWVudC5jb29raWUgPSAidG9rZW49IiArIGluZm8udG9rZW4gKyc7ZG9tYWluPScgKyBsb2NhdGlvbi5ob3N0bmFtZSArICd4O2V4cGlyZXM9JyArIG5ldyBEYXRlKERhdGUubm93KCkgKyAxMjk2MDAwMDAwKS50b0lTT1N0cmluZygpDQoJCS8vIH0NCgkJcmV0dXJuIHN1cGVyVmlwLl9DT05GSUdfLmhqZWRkID8gaW5mbyA6IHV0aWwuamVuY29kZShpbmZvKQ0KCX0sDQoNCglmb3JtYXRWaWRlbzogKGRhdGEpID0+IHsNCgkJaWYgKCFkYXRhKSByZXR1cm4gZGF0YQ0KCQlsZXQgdmlkZW8gPSAnJw0KCQlpZiAoc3VwZXJWaXAuX0NPTkZJR18uaGplZGQgfHwgdHlwZW9mKGRhdGEpID09ICdvYmplY3QnKSB7DQoJCQlzdXBlclZpcC5fQ09ORklHXy5oamVkZCA9IHRydWUNCgkJCXZpZGVvID0gZGF0YQ0KCQl9IGVsc2Ugew0KCQkJdmlkZW8gPSBKU09OLnBhcnNlKGRlY29kZShkYXRhLCBzdXBlclZpcCkpDQoJCX0NCgkJdmlkZW8udHlwZSA9IDENCgkJdmlkZW8uYW1vdW50ID0gMA0KCQl2aWRlby5tb25leV90eXBlID0gMA0KCQl2aWRlby52aXAgPSAwDQoJCWlmICh2aWRlby5yZW1vdGVVcmwgJiYgIXZpZGVvLnJlbW90ZVVybC5zdGFydHNXaXRoKCdodHRwJykpIHsNCgkJCWlmICh3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygndmlkZW9wbGF5JykpIHsNCgkJCQl2aWRlby5yZW1vdGVVcmwgPSBnZXRNM3U4UGF0aCh2aWRlby5yZW1vdGVVcmwpDQoJCQkJc3VwZXJWaXAuX0NPTkZJR18udmlkZW9VcmwgPSB2aWRlby5yZW1vdGVVcmwNCgkJCX0gZWxzZSB7DQoJCQkJaWYgKHN1cGVyVmlwLl9DT05GSUdfLnZpZGVvVXJsKSB2aWRlby5yZW1vdGVVcmwgPSBzdXBlclZpcC5fQ09ORklHXy52aWRlb1VybA0KCQkJCWVsc2Ugew0KCQkJCQlzdXBlclZpcC5fQ09ORklHXy52aWRlb1VybCA9IGdldE0zdThQYXRoKHZpZGVvLnJlbW90ZVVybCkNCgkJCQkJR01fYWRkU3R5bGUoYA0KCQkJCQkJCQkudmlkZW8tdXJsLWxpc3R7cG9zaXRpb246IHJlbGF0aXZlO30NCgkJCQkJCQkJLnZpZGVvLXVybC1saXN0OmFmdGVye2NvbnRlbnQ6Jyc7cG9zaXRpb246IGFic29sdXRlO3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3otaW5kZXg6MTA7fQ0KCQkJCQkJCWApDQoJCQkJCXV0aWwuZmluZFRhcmdldEVsZW1lbnQoJy52aWRlby11cmwtbGlzdCwudmlkZW8tZGl2LWJ0bicpLnRoZW4ocmVzID0+IHsNCgkJCQkJCSQocmVzKS5vbignY2xpY2snLCBmdW5jdGlvbigpIHsNCgkJCQkJCQl1dGlsLmZpbmRUYXJnZXRFbGVtZW50KCcjd3QtbXktc2V0JykudGhlbihidG4gPT4gew0KCQkJCQkJCQkkKGJ0bikuY2xpY2soKQ0KCQkJCQkJCX0pDQoJCQkJCQl9KQ0KCQkJCQl9KQ0KCQkJCX0NCgkJCX0NCgkJfQ0KCQlyZXR1cm4gc3VwZXJWaXAuX0NPTkZJR18uaGplZGQgPyB2aWRlIDogdXRpbC5qZW5jb2RlKHZpZGVvKQ0KCX0sDQoNCgljaGVja1VwZGF0ZTogKGNoZWNrKSA9PiB7DQoJCWNvbnN0IGF1dG9VcGRhdGVkVmVyc2lvbkRhdGUgPSBHTV9nZXRWYWx1ZSgnaGFpamlhb19hdXRvX3VwZGF0ZWRfZGF0ZScsIDApDQoJCWlmIChhdXRvVXBkYXRlZFZlcnNpb25EYXRlID4gRGF0ZS5ub3coKSAmJiAhY2hlY2spIHJldHVybiB7DQoJCQljb2RlOiAtMTAwLA0KCQkJbXNnOiAn5qOA5rWL5pu05paw6aKR546H6ZmQ5Yi2Jw0KCQl9DQoJCWlmIChjaGVjayAmJiBHTV9nZXRWYWx1ZSgnaGFpamlhb191cGRhdGVkX25leHRfZGF0ZScsIDApID4gRGF0ZS5ub3coKSkgcmV0dXJuIHsNCgkJCWNvZGU6IC0yMDAsDQoJCQltc2c6ICfor7flnKggJyArIG5ldyBEYXRlKEdNX2dldFZhbHVlKCdoYWlqaWFvX3VwZGF0ZWRfbmV4dF9kYXRlJywgMCkpLnRvTG9jYWxlU3RyaW5nKCkgKyAnIOWQjuWGjeajgOafpeabtOaWsCcNCgkJfQ0KCQlHTV9zZXRWYWx1ZSgnaGFpamlhb191cGRhdGVkX25leHRfZGF0ZScsIERhdGUubm93KCkgKyA2MDAwMDApDQoJCWNvbnN0IHNjcmlwdCA9IEdNX2luZm8NCgkJaWYgKCFzY3JpcHQpIHJldHVybiB7DQoJCQljb2RlOiAtMzAwLA0KCQkJbXNnOiAn6I635Y+W54mI5pys5Y+35aSx6LSlJw0KCQl9DQoJCWxldCByZXN1bHQgPSB7DQoJCQljb2RlOiAxLA0KCQkJbXNnOiAnb2snDQoJCX0NCgkJdHJ5IHsNCgkJCWNvbnN0IHd0X2hhaWppYW9fZmlyc3RfdXNlID0gR01fZ2V0VmFsdWUoJ3d0X2hhaWppYW9fZmlyc3RfdXNlJywgJycpDQoJCQkkLmFqYXhTZXR1cCh7DQoJCQkJYXN5bmM6IGZhbHNlDQoJCQl9KTsNCgkJCSQuZ2V0KCdodHRwczovL2ZjLW1wLWFmMzA3MjY4LTFiOGEtNDgyYS1iNzVhLWI2ZTk4YjEyNTc0Mi5uZXh0LmJzcGFwcC5jb20vY29tbW9uL3VwZGF0ZUNoZWNrJywgew0KCQkJCW5hbWU6ICdoYWlqaWFvJywNCgkJCQl2ZXJzaW9uOiBzY3JpcHQuc2NyaXB0LnZlcnNpb24sDQoJCQkJdXNlX2RhdGU6ICh3dF9oYWlqaWFvX2ZpcnN0X3VzZSA/IHd0X2hhaWppYW9fZmlyc3RfdXNlIDogRGF0ZS5ub3coKSArIChNYXRoLnJvdW5kKE1hdGgNCgkJCQkJLnJhbmRvbSgpICogODk5OTk5ICsgMTAwMDAwKSArICcnKSkNCgkJCX0sIGZ1bmN0aW9uKHJlcykgew0KCQkJCUdNX3NldFZhbHVlKCdoYWlqaWFvX2F1dG9fdXBkYXRlZF9kYXRlJywgRGF0ZS5ub3coKSArIDE4MDAwMDAwKQ0KCQkJCWlmIChyZXMuY29kZSAhPSAwKSByZXN1bHQgPSB7DQoJCQkJCWNvZGU6IC00MDAsDQoJCQkJCW1zZzogJ+iOt+WPlueJiOacrOS/oeaBr+Wksei0pScNCgkJCQl9DQoJCQkJaWYgKChyZXMudXBkYXRlX21zZyAmJiByZXMuaXNfdXBkYXRlKSB8fCByZXMubXNnIHx8IHJlcy5ub3RpZnlfYWxsKSB7DQoJCQkJCWxldCBtc2cgPSAnJw0KCQkJCQlpZiAocmVzLm5vdGlmeV9hbGwpIG1zZyArPSAnPHA+4oCiICcgKyByZXMubm90aWZ5X2FsbCArICc8cC8+Jw0KCQkJCQlpZiAocmVzLm1zZykgbXNnICs9ICc8cD7igKIgJyArIHJlcy5tc2cgKyAnPHAvPicNCgkJCQkJaWYgKHJlcy5pc191cGRhdGUgJiYgcmVzLnVwZGF0ZV9tc2cpIG1zZyArPSByZXMudXBkYXRlX21zZw0KCQkJCQljb25zdCBoaXN0b3J5Tm90aWZ5ID0gR01fZ2V0VmFsdWUoJ2hhaWppYW9fbm90aWZ5JykNCgkJCQkJaWYoY2hlY2sgfHwgIWhpc3RvcnlOb3RpZnkgfHwgaGlzdG9yeU5vdGlmeS5tc2cucmVwbGFjZSgvaWRcPVxkKy8sJycpICE9IG1zZy5yZXBsYWNlKC9pZFw9XGQrLywnJykpew0KCQkJCQkJdXRpbC5zaG93Tm90aWZ5KHsNCgkJCQkJCQl0aXRsZTogbXNnLA0KCQkJCQkJCXN1Y2Nlc3M6ICgpID0+IHsNCgkJCQkJCQkJaWYgKHJlcykgew0KCQkJCQkJCQkJc3VwZXJWaXAuX0NPTkZJR18uc2hvd05vdGlmeSA9IGZhbHNlDQoJCQkJCQkJCX0NCgkJCQkJCQl9DQoJCQkJCQl9KQ0KCQkJCQl9DQoJCQkJCWlmIChtc2cgJiYgbXNnLnJlcGxhY2UoL1xzKi9nLCAiIikubGVuZ3RoID4gMCkgR01fc2V0VmFsdWUoJ2hhaWppYW9fbm90aWZ5Jywgew0KCQkJCQkJZGF0ZTogbmV3IERhdGUoKS5zZXRIb3VycygwLCAwLCAwLCAwKSwNCgkJCQkJCW1zZw0KCQkJCQl9KQ0KCQkJCQl1dGlsLnNob3dBbmRIaWRUaXBzKCd3dF9teV9ub3RpZnlfaGFpamlhbycpDQoJCQkJfQ0KCQkJCWlmICghcmVzLmlzX3VwZGF0ZSkgcmVzdWx0ID0gew0KCQkJCQljb2RlOiAtNTAwLA0KCQkJCQltc2c6ICflvZPliY3niYjmnKwgJyArIHNjcmlwdC5zY3JpcHQudmVyc2lvbiArICcg5bey57uP5piv5pyA5paw54mI5pysJw0KCQkJCX0NCgkJCX0pDQoJCQkkLmFqYXhTZXR1cCh7DQoJCQkJYXN5bmM6IHRydWUNCgkJCX0pOw0KCQl9IGNhdGNoIChlKSB7fQ0KCQlyZXR1cm4gcmVzdWx0DQoJfSwNCg0KCXNob3dOb3RpZnk6IChpdGVtID0ge30pID0+IHsNCgkJJCgiI3d0LW5vdGlmeS1ib3giKS5yZW1vdmVDbGFzcygnaGlkLW5vdGlmeS1ib3gnKQ0KCQkkKCIjd3Qtbm90aWZ5LWJveCIpLmFkZENsYXNzKCdzaG93LW5vdGlmeS1ib3gnKQ0KCQlsZXQgdmVyc2lvbiA9IEdNX2luZm8NCgkJdmVyc2lvbiA9IHZlcnNpb24gPyB2ZXJzaW9uLnNjcmlwdC52ZXJzaW9uIDogJycNCgkJY29uc3QgdiA9IC/lvZPliY3ohJrmnKzniYjmnKwgKFxkXC5cZFwuXGRcLnswLDF9XGR7MCwyfSkvLmV4ZWMoaXRlbS50aXRsZSkNCgkJaWYgKHYpIGl0ZW0udGl0bGUgPSBpdGVtLnRpdGxlLnJlcGxhY2VBbGwodlsxXSwgdmVyc2lvbikNCgkJaWYgKGl0ZW0udGl0bGUpICQoJyN3dC1ub3RpZnktYm94IC5jb250ZW50JykuaHRtbChpdGVtLnRpdGxlICsgKHZlcnNpb24gPw0KCQkJJzxkaXYgc3R5bGU9InRleHQtYWxpZ246IHJpZ2h0O2NvbG9yOiAjY2NjO2ZvbnQtc2l6ZTogMTBweDttYXJnaW4tdG9wOiAxMHB4OyI+diAnICsNCgkJCXZlcnNpb24gKyAnPC9kaXY+JyA6ICcnKSkNCgkJc3VwZXJWaXAuX0NPTkZJR18uc2hvd05vdGlmeSA9IHRydWUNCgkJJCgnI3d0LW5vdGlmeS1ib3ggYScpLm9uKCdjbGljaycsIChlKSA9PiB7DQoJCQllLnN0b3BQcm9wYWdhdGlvbigpDQoJCX0pDQoJCSQoJyN3dC1ub3RpZnktYm94Jykub24oJ2NsaWNrJywgKCkgPT4gew0KCQkJJCgiI3d0LW5vdGlmeS1ib3giKS5yZW1vdmVDbGFzcygnc2hvdy1ub3RpZnktYm94JykNCgkJCSQoIiN3dC1ub3RpZnktYm94IikuYWRkQ2xhc3MoJ2hpZC1ub3RpZnktYm94JykNCgkJCXN1cGVyVmlwLl9DT05GSUdfLnNob3dOb3RpZnkgPSBmYWxzZQ0KCQkJaWYgKGl0ZW0uc3VjY2VzcykgaXRlbS5zdWNjZXNzKHRydWUpDQoJCX0pDQoJfQ0KfQ0KDQoNCmNvbnN0IHN1cGVyVmlwID0gKGZ1bmN0aW9uKCkgew0KCWNvbnN0IF9DT05GSUdfID0gew0KCQlpc01vYmlsZTogbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgNCgkJCS8oQW5kcm9pZHx3ZWJPU3xpUGhvbmV8aVBhZHxpUG9kfEJsYWNrQmVycnl8SUVNb2JpbGV8T3BlcmEgTWluaSkvaSksDQoJCXZpcEJveElkOiAnd3QtdmlwLWp4LWJveCcgKyBNYXRoLmNlaWwoTWF0aC5yYW5kb20oKSAqIDEwMDAwMDAwMCksDQoJCWVuZE5hbWU6ICdhbk09JywNCgkJaW5pdEZhaWxNc2c6ICfmirHmrYnvvIzliJ3lp4vljJblpLHotKXvvIzor7flsJ3or5XliLfmlrDpobXpnaLmiJbmo4Dmn6XniYjmnKzmmK/lkKbmmK/mnIDmlrDniYjmnKzvvIzngrnlh7vmjqfliLbmnaHlloflj63mn6XnnIvlvZPliY3niYjmnKzlj7cnLA0KCQlob21lUGFnZTogJ2h0dHA6Ly9qc3hsLnBybycsDQoJCXNjcmlwdHM6IFsNCgkJCS8vIAl7DQoJCQkvLyAJaWNvbjogJ2h0dHBzOi8vbXAtYWYzMDcyNjgtMWI4YS00ODJhLWI3NWEtYjZlOThiMTI1NzQyLmNkbi5ic3BhcHAuY29tL3N5c3RlbS9sb2dvL3dhdGVybWFya19sb2dvLnBuZycsDQoJCQkvLyAJZGVzYzogJ+WQhOWkp+efreinhumikeW5s+WPsOinhumikS/lm77pm4blhY3otLnljrvmsLTljbDkuIvovb3vvIznpoHmraLkuIvovb3nmoTkuZ/og73kuIvovb0nDQoJCQkvLyB9LA0KCQkJew0KCQkJCWljb246ICdodHRwczovL21wLWFmMzA3MjY4LTFiOGEtNDgyYS1iNzVhLWI2ZTk4YjEyNTc0Mi5jZG4uYnNwYXBwLmNvbS9zeXN0ZW0vbG9nby92aWRlb19sb2dvLnBuZycsDQoJCQkJZGVzYzogJ+WQhOWkp+inhumikeW5s+WPsFZJUOinhumikeWFjei0ueeciycsDQoJCQkJdXJsOiAnaHR0cHM6Ly9yZXNldC16ZmYub3NzLWNuLWNoZW5nZHUuYWxpeXVuY3MuY29tL2pzL3JlbGVhc2UvdmlkZW8udXNlcicNCgkJCX0sDQoJCQl7DQoJCQkJaWNvbjogJ2h0dHBzOi8vYmUudXhka2VsLmNvbS9zdGF0aWMvaW1hZ2VzL2luZGV4L2RtZGxvZzIucG5nJywNCgkJCQlkZXNjOiAn5YWN6LS555yL5LuY6LS555+t6KeG6aKR77yM572R56uZ5YaF5a655Y+v6IO95byV6LW35LiN6YCC77yM6K+36LCo5oWO5L2/55So44CCJywNCgkJCQl1cmw6ICdodHRwczovL3Jlc2V0LXpmZi5vc3MtY24tY2hlbmdkdS5hbGl5dW5jcy5jb20vanMvcmVsZWFzZS85MXZpZGVvLnVzZXInDQoJCQl9LA0KCQkJew0KCQkJCWljb246ICdodHRwczovL21wLWFmMzA3MjY4LTFiOGEtNDgyYS1iNzVhLWI2ZTk4YjEyNTc0Mi5jZG4uYnNwYXBwLmNvbS9zeXN0ZW0vbG9nby9oYWlqaWFvLnBuZycsDQoJCQkJZGVzYzogJ+WFjei0ueeci+S7mOi0ueinhumikeWPiuWbvumbhu+8jOe9keermeWGheWuueWPr+iDveW8lei1t+S4jemAgu+8jOivt+iwqOaFjuS9v+eUqOOAgicsDQoJCQkJdXJsOiAnaHR0cHM6Ly9yZXNldC16ZmYub3NzLWNuLWNoZW5nZHUuYWxpeXVuY3MuY29tL2pzL3JlbGVhc2UvaGFpamlhby51c2VyJw0KCQkJfSwNCgkJCXsNCgkJCQlpY29uOiAnaHR0cHM6Ly9tcC1hZjMwNzI2OC0xYjhhLTQ4MmEtYjc1YS1iNmU5OGIxMjU3NDIuY2RuLmJzcGFwcC5jb20vc3lzdGVtL2xvZ29fdHJhbnNwYXJlbnQucG5nJywNCgkJCQlkZXNjOiAn5YmN5b6A572R5Z2A6I635Y+W6ISa5pys5Zyw5Z2AJywNCgkJCQl1cmw6ICdqc3hsLnBybycsDQoJCQkJbXNnOiAn5oqx5q2J77yM572R56uZ5q2j5Zyo5bu66K6+5LitJw0KCQkJfQ0KCQldDQoJfQ0KCWNsYXNzIEJhc2VDb25zdW1lciB7DQoJCWNvbnN0cnVjdG9yKGJvZHkpIHsNCgkJCXRoaXMucGFyc2UgPSAoKSA9PiB7DQoJCQkJc2V0VGltZW91dCgoKSA9PiB7DQoJCQkJCXV0aWwuY2hlY2tVcGRhdGUoKQ0KCQkJCX0sIDEwMDApDQoJCQkJaWYgKF9DT05GSUdfLnVzZXIpIHRoaXMuaW50ZXJjZXB0SHR0cCgpDQoJCQkJdXRpbC5maW5kVGFyZ2V0RWxlbWVudCgnYm9keScpLnRoZW4oY29udGFpbmVyID0+IHRoaXMuZ2VuZXJhdGVFbGVtZW50KGNvbnRhaW5lcikudGhlbigNCgkJCQkJY29udGFpbmVyID0+IHRoaXMuYmluZEV2ZW50KGNvbnRhaW5lcikpKQ0KCQkJfQ0KCQl9DQoNCgkJaW50ZXJjZXB0SHR0cCgpIHsNCgkJCWNvbnN0IG9yaWdpbk9wZW4gPSBYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUub3BlbjsNCgkJCVhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZS5vcGVuID0gZnVuY3Rpb24oXywgdXJsKSB7DQoJCQkJdGhpcy5vbnRpbWVvdXQgPSBmdW5jdGlvbigpIHsNCgkJCQkJd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpDQoJCQkJfQ0KCQkJCWlmICgvXC9hcGlcL2Jhbm5lclwvYmFubmVyX2xpc3QvLnRlc3QodXJsKSkgew0KCQkJCQl0aGlzLmFib3J0KCkNCgkJCQkJcmV0dXJuIHt9DQoJCQkJfQ0KCQkJCWlmICgvXC9hcGlcL3RvcGljXC9ob3RcL3RvcGljc1w/Ly50ZXN0KHVybCkpIHsNCgkJCQkJY29uc3QgeGhyID0gdGhpczs7DQoJCQkJCWNvbnN0IGdldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoDQoJCQkJCQlYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUsDQoJCQkJCQkicmVzcG9uc2UiDQoJCQkJCSkuZ2V0Ow0KCQkJCQlPYmplY3QuZGVmaW5lUHJvcGVydHkoeGhyLCAicmVzcG9uc2VUZXh0Iiwgew0KCQkJCQkJZ2V0OiAoKSA9PiB7DQoJCQkJCQkJbGV0IHJlc3VsdCA9IGdldHRlci5jYWxsKHhocik7DQoJCQkJCQkJdHJ5IHsNCgkJCQkJCQkJbGV0IHJlcyA9IEpTT04ucGFyc2UocmVzdWx0LCBgdXRmLThgKTsNCgkJCQkJCQkJcmVzLmRhdGEgPSB1dGlsLmZvcm1hdFRpdGxlKHJlcy5kYXRhKTsNCgkJCQkJCQkJcmV0dXJuIEpTT04uc3RyaW5naWZ5KHJlcywgYHV0Zi04YCk7DQoJCQkJCQkJfSBjYXRjaCAoZSkgew0KCQkJCQkJCQljb25zb2xlLmxvZygn5Y+R55Sf5byC5bi4ISDop6PmnpDlpLHotKUhJyk7DQoJCQkJCQkJCWNvbnNvbGUubG9nKGUpOw0KCQkJCQkJCQlyZXR1cm4gcmVzdWx0Ow0KCQkJCQkJCX0NCgkJCQkJCX0sDQoJCQkJCX0pOw0KCQkJCX0NCg0KCQkJCWlmICgvXC9hcGlcL3RvcGljXC9zZWFyY2gvLnRlc3QodXJsKSkgew0KCQkJCQk7DQoJCQkJCWNvbnN0IHhociA9IHRoaXM7DQoJCQkJCWNvbnN0IGdldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoDQoJCQkJCQlYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUsDQoJCQkJCQkicmVzcG9uc2UiDQoJCQkJCSkuZ2V0Ow0KCQkJCQlPYmplY3QuZGVmaW5lUHJvcGVydHkoeGhyLCAicmVzcG9uc2VUZXh0Iiwgew0KCQkJCQkJZ2V0OiAoKSA9PiB7DQoJCQkJCQkJbGV0IHJlc3VsdCA9IGdldHRlci5jYWxsKHhocik7DQoJCQkJCQkJdHJ5IHsNCgkJCQkJCQkJbGV0IHJlcyA9IEpTT04ucGFyc2UocmVzdWx0LCBgdXRmLThgKTsNCgkJCQkJCQkJcmVzLmRhdGEgPSB1dGlsLmZvcm1hdFRpdGxlKHJlcy5kYXRhKTsNCgkJCQkJCQkJcmV0dXJuIEpTT04uc3RyaW5naWZ5KHJlcywgYHV0Zi04YCk7DQoJCQkJCQkJfSBjYXRjaCAoZSkgew0KCQkJCQkJCQljb25zb2xlLmxvZygn5Y+R55Sf5byC5bi4ISDop6PmnpDlpLHotKUhJyk7Ow0KCQkJCQkJCQljb25zb2xlLmxvZyhlKTsNCgkJCQkJCQkJcmV0dXJuIHJlc3VsdDsNCgkJCQkJCQl9DQoJCQkJCQl9LA0KCQkJCQl9KTsNCgkJCQl9DQoNCgkJCQlpZiAoL1wvYXBpXC90b3BpY1wvXGQrLy50ZXN0KHVybCkpIHsNCgkJCQkJY29uc3QgeGhyID0gdGhpczsNCgkJCQkJY29uc3QgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcigNCgkJCQkJCVhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZSwNCgkJCQkJCSJyZXNwb25zZSINCgkJCQkJKS5nZXQ7DQoJCQkJCU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh4aHIsICJyZXNwb25zZVRleHQiLCB7DQoJCQkJCQlnZXQ6ICgpID0+IHsNCgkJCQkJCQlsZXQgcmVzdWx0ID0gZ2V0dGVyLmNhbGwoeGhyKTsNCgkJCQkJCQl0cnkgew0KCQkJCQkJCQlsZXQgcmVzID0gSlNPTi5wYXJzZShyZXN1bHQsIGB1dGYtOGApOw0KCQkJCQkJCQlyZXMuZGF0YSA9IHV0aWwubW9kaWZ5RGF0YShyZXMuZGF0YSkNCgkJCQkJCQkJcmV0dXJuIEpTT04uc3RyaW5naWZ5KHJlcywgYHV0Zi04YCk7DQoJCQkJCQkJfSBjYXRjaCAoZSkgew0KCQkJCQkJCQljb25zb2xlLmxvZygn5Y+R55Sf5byC5bi4ISDop6PmnpDlpLHotKUhJyk7Ow0KCQkJCQkJCQljb25zb2xlLmxvZyhlKTsNCgkJCQkJCQkJcmV0dXJuIHJlc3VsdDsNCgkJCQkJCQl9DQoJCQkJCQl9LA0KCQkJCQl9KTsNCgkJCQl9DQoNCgkJCQlpZiAoL1wvYXBpXC9hdHRhY2htZW50Ly50ZXN0KHVybCkpIHsNCgkJCQkJY29uc3QgeGhyID0gdGhpczsNCgkJCQkJY29uc3QgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcigNCgkJCQkJCVhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZSwNCgkJCQkJCSJyZXNwb25zZSINCgkJCQkJKS5nZXQ7DQoJCQkJCU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh4aHIsICJyZXNwb25zZVRleHQiLCB7DQoJCQkJCQlnZXQ6ICgpID0+IHsNCgkJCQkJCQlsZXQgcmVzdWx0ID0gZ2V0dGVyLmNhbGwoeGhyKTsNCgkJCQkJCQl0cnkgew0KCQkJCQkJCQlsZXQgcmVzID0gSlNPTi5wYXJzZShyZXN1bHQsIGB1dGYtOGApOw0KCQkJCQkJCQljb25zdCBib2R5ID0gSlNPTi5wYXJzZShkZWNvZGUocmVzLmRhdGEsIHN1cGVyVmlwKSkNCgkJCQkJCQkJcmVzLmRhdGEgPSB1dGlsLmZvcm1hdFZpZGVvKHJlcy5kYXRhKTsNCgkJCQkJCQkJcmV0dXJuIEpTT04uc3RyaW5naWZ5KHJlcywgYHV0Zi04YCk7DQoJCQkJCQkJfSBjYXRjaCAoZSkgew0KCQkJCQkJCQljb25zb2xlLmxvZygn5Y+R55Sf5byC5bi4ISDop6PmnpDlpLHotKUhJyk7Ow0KCQkJCQkJCQljb25zb2xlLmxvZyhlKTsNCgkJCQkJCQkJcmV0dXJuIHJlc3VsdDsNCgkJCQkJCQl9DQoJCQkJCQl9LA0KCQkJCQl9KTsNCgkJCQl9DQoNCgkJCQlpZiAoL1wvYXBpXC90b3BpY1wvYXR0XC9cZCsvLnRlc3QodXJsKSkgew0KCQkJCQljb25zdCB4aHIgPSB0aGlzOw0KCQkJCQljb25zdCBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKA0KCQkJCQkJWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLA0KCQkJCQkJInJlc3BvbnNlIg0KCQkJCQkpLmdldDsNCgkJCQkJT2JqZWN0LmRlZmluZVByb3BlcnR5KHhociwgInJlc3BvbnNlVGV4dCIsIHsNCgkJCQkJCWdldDogKCkgPT4gew0KCQkJCQkJCWxldCByZXN1bHQgPSBnZXR0ZXIuY2FsbCh4aHIpOw0KCQkJCQkJCXRyeSB7DQoJCQkJCQkJCWxldCByZXMgPSBKU09OLnBhcnNlKHJlc3VsdCwgYHV0Zi04YCk7DQoJCQkJCQkJCXRyeSB7DQoJCQkJCQkJCQljb25zdCBvYmogPSBKU09OLnBhcnNlKGRlY29kZShyZXMuZGF0YSwgc3VwZXJWaXApKQ0KCQkJCQkJCQkJY29uc29sZS5sb2cob2JqKQ0KCQkJCQkJCQkJaWYgKG9iaiAmJiBvYmoubGVuZ3RoID4gMCAmJiAndXJsJyBpbiBvYmpbMF0pIHsNCgkJCQkJCQkJCQlsZXQgdXJsID0gb2JqWzBdLnVybC5yZXBsYWNlKCcvYXBpL2FkZHJlc3MnLA0KCQkJCQkJCQkJCQknaHR0cHM6Ly90czIuaGpmNWUuY29tL2hqc3RvcmUnKQ0KCQkJCQkJCQkJCWlmKHVybCkJX0NPTkZJR18udmlkZW9VcmwgPSB1cmwNCgkJCQkJCQkJCQkJZWxzZSB1cmwgPSBfQ09ORklHXy52aWRlb1VybA0KCQkJCQkJCQkJCWZvcihsZXQgaSA9IDA7IGkgPCBvYmoubGVuZ3RoOyBpKyspew0KCQkJCQkJCQkJCQlvYmpbaV0udXJsID0gdXJsDQoJCQkJCQkJCQkJfQ0KCQkJCQkJCQkJfQ0KCQkJCQkJCQkJcmVzLmRhdGEgPSB1dGlsLmplbmNvZGUob2JqKQ0KCQkJCQkJCQl9IGNhdGNoIChlKSB7DQoJCQkJCQkJCQljb25zb2xlLmxvZyhlKQ0KCQkJCQkJCQl9DQoJCQkJCQkJCXJldHVybiBKU09OLnN0cmluZ2lmeShyZXMsIGB1dGYtOGApOw0KCQkJCQkJCX0gY2F0Y2ggKGUpIHsNCgkJCQkJCQkJY29uc29sZS5sb2coJ+WPkeeUn+W8guW4uCEg6Kej5p6Q5aSx6LSlIScpOw0KCQkJCQkJCQljb25zb2xlLmxvZyhlKTsNCgkJCQkJCQkJcmV0dXJuIHJlc3VsdDsNCgkJCQkJCQl9DQoJCQkJCQl9LA0KCQkJCQl9KTsNCgkJCQl9DQoNCgkJCQlpZiAoL1wvYXBpXC90b3BpY1wvKG5vZGVcLyh0b3BpY3N8bmV3cyl8aWRvbF9saXN0KS8udGVzdCh1cmwpKSB7DQoJCQkJCWNvbnN0IHhociA9IHRoaXM7DQoJCQkJCWNvbnN0IGdldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoDQoJCQkJCQlYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUsDQoJCQkJCQkicmVzcG9uc2UiDQoJCQkJCSkuZ2V0Ow0KCQkJCQlPYmplY3QuZGVmaW5lUHJvcGVydHkoeGhyLCAicmVzcG9uc2VUZXh0Iiwgew0KCQkJCQkJZ2V0OiAoKSA9PiB7DQoJCQkJCQkJbGV0IHJlc3VsdCA9IGdldHRlci5jYWxsKHhocik7DQoJCQkJCQkJdHJ5IHsNCgkJCQkJCQkJbGV0IHJlcyA9IEpTT04ucGFyc2UocmVzdWx0LCBgdXRmLThgKTsNCgkJCQkJCQkJcmVzLmRhdGEgPSB1dGlsLmZvcm1hdFRpdGxlKHJlcy5kYXRhKQ0KCQkJCQkJCQlyZXR1cm4gSlNPTi5zdHJpbmdpZnkocmVzLCBgdXRmLThgKTsNCgkJCQkJCQl9IGNhdGNoIChlKSB7DQoJCQkJCQkJCWNvbnNvbGUubG9nKCflj5HnlJ/lvILluLghIOino+aekOWksei0pSEnKTsNCgkJCQkJCQkJY29uc29sZS5sb2coZSk7DQoJCQkJCQkJCXJldHVybiByZXN1bHQ7DQoJCQkJCQkJfQ0KCQkJCQkJfSwNCgkJCQkJfSk7DQoJCQkJfQ0KDQoJCQkJaWYgKC9cL2FwaVwvdXNlclwvKGluZm9cLyhcZCspKXxjdXJyZW50Ly5leGVjKHVybCkpIHsNCgkJCQkJY29uc3QgeGhyID0gdGhpczsNCgkJCQkJY29uc3QgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcigNCgkJCQkJCVhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZSwNCgkJCQkJCSJyZXNwb25zZSINCgkJCQkJKS5nZXQ7DQoJCQkJCU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh4aHIsICJyZXNwb25zZVRleHQiLCB7DQoJCQkJCQlnZXQ6ICgpID0+IHsNCgkJCQkJCQlsZXQgcmVzdWx0ID0gZ2V0dGVyLmNhbGwoeGhyKTsNCgkJCQkJCQl0cnkgew0KCQkJCQkJCQlsZXQgcmVzID0gSlNPTi5wYXJzZShyZXN1bHQsIGB1dGYtOGApOw0KCQkJCQkJCQljb25zdCByZWdSZXMgPSAvXC9hcGlcL3VzZXJcLyhpbmZvXC8oXGQrKSl8Y3VycmVudC8uZXhlYygNCgkJCQkJCQkJCXVybCk7DQoJCQkJCQkJCWNvbnN0IHVpZCA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3VpZCcpOw0KCQkJCQkJCQlsZXQgZGF0YQ0KCQkJCQkJCQlpZiAocmVnUmVzLmxlbmd0aCA+IDIgJiYgKHJlZ1Jlc1syXSAmJiByZWdSZXNbMl0gIT0gdWlkKSkgew0KCQkJCQkJCQkJbGV0IGZ1cmwgPSB4aHIucmVzcG9uc2VVUkw7DQoJCQkJCQkJCQlsZXQgciA9IGZ1cmwubWF0Y2goDQoJCQkJCQkJCQkJL1xXKihcdyspXC4odG9wfGNvbXxwcm8pXC9hcGlcL3VzZXJcL2luZm9cLyhcZCspLyk7DQoJCQkJCQkJCQlkYXRhID0gdXRpbC5tb2RpZnlVc2VyKHJlcywgclsyXSk7DQoJCQkJCQkJCX0gZWxzZSB7DQoJCQkJCQkJCQlkYXRhID0gcmVzOw0KCQkJCQkJCQkJZGF0YS5kYXRhID0gdXRpbC5sYXN0aW5nVG9rZW4ocmVzLmRhdGEpOw0KCQkJCQkJCQl9DQoJCQkJCQkJCXJldHVybiBKU09OLnN0cmluZ2lmeShkYXRhKTsNCgkJCQkJCQl9IGNhdGNoIChlKSB7DQoJCQkJCQkJCWNvbnNvbGUubG9nKCflj5HnlJ/lvILluLghIOino+aekOWksei0pSEnKTsNCgkJCQkJCQkJY29uc29sZS5sb2coZSk7DQoJCQkJCQkJCXJldHVybiByZXN1bHQ7DQoJCQkJCQkJfQ0KCQkJCQkJfSwNCgkJCQkJfSk7DQoJCQkJfQ0KDQoJCQkJaWYgKC9cL2FwaVwvdXNlclwvbmV3cy8udGVzdCh1cmwpKSB7DQoJCQkJCWNvbnN0IHhociA9IHRoaXM7DQoJCQkJCWNvbnN0IGdldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoDQoJCQkJCQlYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUsDQoJCQkJCQkicmVzcG9uc2UiDQoJCQkJCSkuZ2V0Ow0KCQkJCQlPYmplY3QuZGVmaW5lUHJvcGVydHkoeGhyLCAicmVzcG9uc2VUZXh0Iiwgew0KCQkJCQkJZ2V0OiAoKSA9PiB7DQoJCQkJCQkJbGV0IHJlc3VsdCA9IGdldHRlci5jYWxsKHhocik7DQoJCQkJCQkJdHJ5IHsNCgkJCQkJCQkJcmV0dXJuIEpTT04uc3RyaW5naWZ5KHsNCgkJCQkJCQkJCSJpc0VuY3J5cHRlZCI6IHRydWUsDQoJCQkJCQkJCQkiZXJyb3JDb2RlIjogMCwNCgkJCQkJCQkJCSJtZXNzYWdlIjogIiIsDQoJCQkJCQkJCQkic3VjY2VzcyI6IHRydWUsDQoJCQkJCQkJCQkiZGF0YSI6ICJXbGhzUzJReGJGaGFSM2hLWVc1Qk0xTlhOVU5oUm05NVZsZHNVR0ZyVm5wVFZ6RTBZMGRLV0dKRVFrcGhiVGsxVkZWT00yRlhVa2hQVkVKYVZqTmtjRlF5Y0VOUFZYaEVVMjVzWVZkRk5IaFphMmhUWld0c2NXTkVaRXBoTTJoM1dYcE9VbUZWT1hST1ZFWnBVak5uTlZwc1JUbFFVVDA5Ig0KCQkJCQkJCQl9KTsNCgkJCQkJCQl9IGNhdGNoIChlKSB7DQoJCQkJCQkJCWNvbnNvbGUubG9nKCflj5HnlJ/lvILluLghIOino+aekOWksei0pSEnKTsNCgkJCQkJCQkJY29uc29sZS5sb2coZSk7DQoJCQkJCQkJCXJldHVybiByZXN1bHQ7DQoJCQkJCQkJfQ0KCQkJCQkJfSwNCgkJCQkJfSk7DQoJCQkJfQ0KDQoJCQkJLy8gaWYoL2FwaVwvdmlkZW9cL3VzZXJfbGlzdFw/Ly50ZXN0KHVybCkpew0KCQkJCS8vIAk7Y29uc3QgeGhyID0gdGhpczsNCgkJCQkvLyAJY29uc3QgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcigNCgkJCQkvLyAJCVhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZSwNCgkJCQkvLyAJCSJyZXNwb25zZSINCgkJCQkvLyAJKS5nZXQ7DQoJCQkJLy8gCU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh4aHIsICJyZXNwb25zZVRleHQiLCB7DQoJCQkJLy8gCQlnZXQ6ICgpID0+IHsJCQ0KCQkJCS8vIAkJCWxldCByZXN1bHQgPSBnZXR0ZXIuY2FsbCh4aHIpOw0KCQkJCS8vIAkJCXRyeSB7DQoJCQkJLy8gCQkJCXJldHVybiBKU09OLnN0cmluZ2lmeSh7DQoJCQkJLy8gCQkJCQkiaXNFbmNyeXB0ZWQiOiB0cnVlLA0KCQkJCS8vIAkJCQkJImVycm9yQ29kZSI6IDAsDQoJCQkJLy8gCQkJCQkibWVzc2FnZSI6ICIiLA0KCQkJCS8vIAkJCQkJInN1Y2Nlc3MiOiB0cnVlLA0KCQkJCS8vIAkJCQkJImRhdGEiOiAiV1cwMVYyTXlTa0pRVkRBOSINCgkJCQkvLyAJCQkJfSk7DQoJCQkJLy8gCQkJfSBjYXRjaCAoZSkgew0KCQkJCS8vIAkJCQljb25zb2xlLmxvZygn5Y+R55Sf5byC5bi4ISDop6PmnpDlpLHotKUhJyk7DQoJCQkJLy8gCQkJCTtjb25zb2xlLmxvZyhlKTsNCgkJCQkvLyAJCQkJO3JldHVybiByZXN1bHQ7DQoJCQkJLy8gCQkJfQ0KCQkJCS8vIAkJfSwNCgkJCQkvLyAJfSk7DQoJCQkJLy8gfQ0KDQoJCQkJaWYgKC9hcGlcL2xvZ2luXC9zaWduaW4vLnRlc3QodXJsKSkgew0KCQkJCQljb25zdCB4aHIgPSB0aGlzOw0KCQkJCQljb25zdCBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKA0KCQkJCQkJWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLA0KCQkJCQkJInJlc3BvbnNlIg0KCQkJCQkpLmdldDsNCgkJCQkJT2JqZWN0LmRlZmluZVByb3BlcnR5KHhociwgInJlc3BvbnNlVGV4dCIsIHsNCgkJCQkJCWdldDogKCkgPT4gew0KCQkJCQkJCWxldCByZXN1bHQgPSBnZXR0ZXIuY2FsbCh4aHIpOw0KCQkJCQkJCXRyeSB7DQoJCQkJCQkJCWxldCByZXMgPSBKU09OLnBhcnNlKHJlc3VsdCwgYHV0Zi04YCk7DQoJCQkJCQkJCXJlcy5kYXRhID0gdXRpbC5sYXN0aW5nVG9rZW4ocmVzLmRhdGEpOw0KCQkJCQkJCQlyZXR1cm4gSlNPTi5zdHJpbmdpZnkocmVzLCBgdXRmLThgKTsNCgkJCQkJCQl9IGNhdGNoIChlKSB7DQoJCQkJCQkJCWNvbnNvbGUubG9nKCflj5HnlJ/lvILluLghIOino+aekOWksei0pSEnKTsNCgkJCQkJCQkJY29uc29sZS5sb2coZSk7DQoJCQkJCQkJCXJldHVybiByZXN1bHQ7DQoJCQkJCQkJfQ0KCQkJCQkJfSwNCgkJCQkJfSk7DQoJCQkJfQ0KDQoJCQkJaWYgKC9hcGlcL3ZpZGVvXC9jaGVja1ZpZGVvQ2FuUGxheS8udGVzdCh1cmwpKSB7DQoJCQkJCWNvbnN0IHhociA9IHRoaXM7DQoJCQkJCWNvbnN0IGdldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoDQoJCQkJCQlYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUsDQoJCQkJCQkicmVzcG9uc2UiDQoJCQkJCSkuZ2V0Ow0KCQkJCQlPYmplY3QuZGVmaW5lUHJvcGVydHkoeGhyLCAicmVzcG9uc2VUZXh0Iiwgew0KCQkJCQkJZ2V0OiAoKSA9PiB7DQoJCQkJCQkJbGV0IHJlc3VsdCA9IGdldHRlci5jYWxsKHhocik7DQoJCQkJCQkJdHJ5IHsNCgkJCQkJCQkJbGV0IHJlcyA9IEpTT04ucGFyc2UocmVzdWx0LCBgdXRmLThgKTsNCgkJCQkJCQkJcmVzLmRhdGEgPSB1dGlsLmZvcm1hdFZpZGVvKHJlcy5kYXRhKTsNCgkJCQkJCQkJcmV0dXJuIEpTT04uc3RyaW5naWZ5KHJlcywgYHV0Zi04YCk7DQoJCQkJCQkJfSBjYXRjaCAoZSkgew0KCQkJCQkJCQljb25zb2xlLmxvZygn5Y+R55Sf5byC5bi4ISDop6PmnpDlpLHotKUhJyk7DQoJCQkJCQkJCWNvbnNvbGUubG9nKGUpOw0KCQkJCQkJCQlyZXR1cm4gcmVzdWx0Ow0KCQkJCQkJCX0NCgkJCQkJCX0sDQoJCQkJCX0pOw0KCQkJCX07DQoJCQkJDQoJCQkJLy8gaWYoL2FwaVwvbG9naW5cL3NpZ25vdXQvLnRlc3QodXJsKSl7DQoJCQkJLy8gCUdNX3NldFZhbHVlKCdsYXN0aW5nX2hhaWppYW9fdG9rZW4nLCcnKQ0KCQkJCS8vIAl1bnNhZmVXaW5kb3cuJGNvb2tpZXMucmVtb3ZlKCd1aWQnLHtkb21haW46J2hqYmZiYzY0LnRvcCcscGF0aDonLyd9KQ0KCQkJCS8vIAl1bnNhZmVXaW5kb3cuJGNvb2tpZXMucmVtb3ZlKCd0b2tlbicse2RvbWFpbjonaGpiZmJjNjQudG9wJyxwYXRoOicvJ30pDQoJCQkJLy8gfQ0KCQkJCQ0KCQkJCW9yaWdpbk9wZW4uYXBwbHkodGhpcywgYXJndW1lbnRzKTsNCgkJCX07DQoJCX0NCg0KCQlnZW5lcmF0ZUVsZW1lbnQoY29udGFpbmVyKSB7DQoJCQlHTV9hZGRTdHlsZShgDQoJCQkJQGZvbnQtZmFjZSB7DQoJCQkJICBmb250LWZhbWlseTogJ2ljb25mb250JzsgIC8qIFByb2plY3QgaWQgMzkxMzU2MSAqLw0KCQkJCSAgc3JjOiB1cmwoJy8vYXQuYWxpY2RuLmNvbS90L2MvZm9udF8zOTEzNTYxX2NwZTEzZndjYTgud29mZjI/dD0xNjk2MjEwNDkzNjcyJykgZm9ybWF0KCd3b2ZmMicpLA0KCQkJCSAgICAgICB1cmwoJy8vYXQuYWxpY2RuLmNvbS90L2MvZm9udF8zOTEzNTYxX2NwZTEzZndjYTgud29mZj90PTE2OTYyMTA0OTM2NzInKSBmb3JtYXQoJ3dvZmYnKSwNCgkJCQkgICAgICAgdXJsKCcvL2F0LmFsaWNkbi5jb20vdC9jL2ZvbnRfMzkxMzU2MV9jcGUxM2Z3Y2E4LnR0Zj90PTE2OTYyMTA0OTM2NzInKSBmb3JtYXQoJ3RydWV0eXBlJyk7DQoJCQkJfQ0KCQkJCS5pY29uZm9udCB7DQoJCQkJICAgIGZvbnQtZmFtaWx5OiAiaWNvbmZvbnQiICFpbXBvcnRhbnQ7DQoJCQkJICAgIGZvbnQtc2l6ZTogMTZweDsNCgkJCQkgICAgZm9udC1zdHlsZTogbm9ybWFsOw0KCQkgICAgICAgICAgICBmb250LXdlaWdodDogNDAwICFpbXBvcnRhbnQ7DQoJCQkJICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOw0KCQkJCSAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlOw0KCQkJCX0NCgkJCQlAa2V5ZnJhbWVzIHNob3dTZXRCb3ggew0KCQkJCQkwJSB7DQoJCQkJCQl0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLC01MCUpIHNjYWxlKDApOw0KCQkJCQl9DQoJCQkJCTgwJSB7DQoJCQkJCQl0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLC01MCUpIHNjYWxlKDEuMSk7DQoJCQkJCX0NCgkJCQkJMTAwJSB7DQoJCQkJCQl0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLC01MCUpIHNjYWxlKDEpOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCUBrZXlmcmFtZXMgaGlkU2V0Qm94IHsNCgkJCQkJMCUgew0KCQkJCQkJdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwtNTAlKSBzY2FsZSgxKTsNCgkJCQkJfQ0KCQkJCQk4MCUgew0KCQkJCQkJdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwtNTAlKSBzY2FsZSgxLjEpOw0KCQkJCQl9DQoJCQkJCTEwMCUgew0KCQkJCQkJdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwtNTAlKSBzY2FsZSgwKTsNCgkJCQkJfQ0KCQkJCX0NCgkJCQlAa2V5ZnJhbWVzIGNvbG9yQW5pbWEgew0KCQkJCQkwJXsNCgkJCQkJCWJhY2tncm91bmQtY29sb3I6ICNmMGYwZjA7DQoJCQkJCQljb2xvcjogIzVkNWQ1ZDsNCgkJCQkJCXRyYW5zZm9ybTogc2NhbGUoMSk7DQoJCQkJCX0NCgkJCQkJNTAlew0KCQkJCQkJdHJhbnNmb3JtOiBzY2FsZSgxLjEpOw0KCQkJCQl9DQoJCQkJCTEwMCV7DQoJCQkJCQliYWNrZ3JvdW5kLWNvbG9yOiAjZmY2MDIyOzsNCgkJCQkJCWNvbG9yOiB3aGl0ZTsNCgkJCQkJCXRyYW5zZm9ybTogc2NhbGUoMSk7DQoJCQkJCX0NCgkJCQl9DQoJCQkJQGtleWZyYW1lcyBzaG93Tm90aWZ5Qm94IHsNCgkJCQkJMCUgew0KCQkJCQkJdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwtMTAwJSkgc2NhbGUoMCk7DQoJCQkJCX0NCgkJCQkJODAlIHsNCgkJCQkJCXRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsMzVweCkgc2NhbGUoMS4xKTsNCgkJCQkJfQ0KCQkJCQkxMDAlIHsNCgkJCQkJCXRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsMzVweCkgc2NhbGUoMSk7DQoJCQkJCX0NCgkJCQl9DQoJCQkJQGtleWZyYW1lcyBoaWROb3RpZnlCb3ggew0KCQkJCQkwJSB7DQoJCQkJCQl0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLDM1cHgpIHNjYWxlKDEuMSk7DQoJCQkJCX0NCgkJCQkJODAlIHsNCgkJCQkJCXRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsMzVweCkgc2NhbGUoMSk7DQoJCQkJCX0NCgkJCQkJMTAwJSB7DQoJCQkJCQl0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLC0xMDAlKSBzY2FsZSgwKTsNCgkJCQkJfQ0KCQkJCX0NCgkJCQlAa2V5ZnJhbWVzIHNjYWxlIHsNCgkJCQkJMCV7DQoJCQkJCQl0cmFuc2Zvcm06IHNjYWxlKDEpOw0KCQkJCQl9DQoJCQkJCTUwJXsNCgkJCQkJCXRyYW5zZm9ybTogc2NhbGUoMS4xKTsNCgkJCQkJfQ0KCQkJCQkxMDAlew0KCQkJCQkJdHJhbnNmb3JtOiBzY2FsZSgxKTsNCgkJCQkJfQ0KCQkJCX0NCgkJCQlAa2V5ZnJhbWVzIGNpcmNsZXRva0xlZnQgew0KCQkJCSAgICAwJSwxMDAlIHsNCgkJCQkgICAgICAgIGxlZnQ6IDBweDsNCgkJCQkgICAgICAgIHdpZHRoOiAxMnB4Ow0KCQkJCSAgICAgICAgaGVpZ2h0OiAxMnB4Ow0KCQkJCSAgICAgICAgei1pbmRleDogMDsNCgkJCQkgICAgfQ0KCQkJCSAgICAyNSUgew0KCQkJCSAgICAgICAgaGVpZ2h0OiAxNXB4Ow0KCQkJCSAgICAgICAgd2lkdGg6IDE1cHg7DQoJCQkJICAgICAgICB6LWluZGV4OiAxOw0KCQkJCSAgICAgICAgbGVmdDogOHB4Ow0KCQkJCSAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKQ0KCQkJCSAgICB9DQoJCQkJICAgIDUwJSB7DQoJCQkJICAgICAgICB3aWR0aDogMTJweDsNCgkJCQkgICAgICAgIGhlaWdodDogMTJweDsNCgkJCQkgICAgICAgIGxlZnQ6IDIycHg7DQoJCQkJICAgIH0NCgkJCQkgICAgNzUlIHsNCgkJCQkgICAgICAgIHdpZHRoOiAxMHB4Ow0KCQkJCSAgICAgICAgaGVpZ2h0OiAxMHB4Ow0KCQkJCSAgICAgICAgbGVmdDogOHB4Ow0KCQkJCSAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKQ0KCQkJCSAgICB9DQoJCQkJfQ0KCQkJCUBrZXlmcmFtZXMgY2lyY2xldG9rUmlnaHQgew0KCQkJCSAgICAwJSwxMDAlIHsNCgkJCQkgICAgICAgIHRvcDogM3B4Ow0KCQkJCSAgICAgICAgbGVmdDogMjJweDsNCgkJCQkgICAgICAgIHdpZHRoOiAxMnB4Ow0KCQkJCSAgICAgICAgaGVpZ2h0OiAxMnB4Ow0KCQkJCSAgICAgICAgei1pbmRleDogMA0KCQkJCSAgICB9DQoJCQkJICAgIDI1JSB7DQoJCQkJICAgICAgICBoZWlnaHQ6IDE1cHg7DQoJCQkJICAgICAgICB3aWR0aDogMTVweDsNCgkJCQkgICAgICAgIHotaW5kZXg6IDE7DQoJCQkJICAgICAgICBsZWZ0OiAyNHB4Ow0KCQkJCSAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKQ0KCQkJCSAgICB9DQoJCQkJICAgIDUwJSB7DQoJCQkJICAgICAgICB3aWR0aDogMTJweDsNCgkJCQkgICAgICAgIGhlaWdodDogMTJweDsNCgkJCQkgICAgICAgIGxlZnQ6IDBweA0KCQkJCSAgICB9DQoJCQkJICAgIDc1JSB7DQoJCQkJICAgICAgICB3aWR0aDogMTBweDsNCgkJCQkgICAgICAgIGhlaWdodDogMTBweDsNCgkJCQkgICAgICAgIGxlZnQ6IDI0cHg7DQoJCQkJICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpDQoJCQkJICAgIH0NCgkJCQl9DQoJCQkJLmNvbG9yLWFuaW1hew0KCQkJCQlhbmltYXRpb246IGNvbG9yQW5pbWEgLjNzIGVhc2UgMSBmb3J3YXJkczsNCgkJCQl9DQoJCQkJLmJ0bi1hbmltYXsNCgkJCQkJYW5pbWF0aW9uOiBzY2FsZSAuM3MgZWFzZSAxIGZvcndhcmRzOw0KCQkJCX0NCgkJCQkucHVibGljQ29udGFpbmVyLC52YW4tdG9hc3QsLmVsLW1lc3NhZ2UsLmNvbnRhaW5lcmFkdmVydGlzaW5nLC52YW4tb3ZlcmxheSwjaG9tZSAuYnRuYm94LCNob21lIC5hZGRib3gsLnRvcGJhbm1lciwuYmFubmVybGlzdHN0eWxlLC5pc2hpZGV7ZGlzcGxheTpub25lICFpbXBvcnRhbnQ7ei1pbmRleDotOTk5OTkgIWltcG9ydGFudDtvcGFjaXR5OiAwIWltcG9ydGFudDt3aWR0aCA6MCAhaW1wb3J0YW50O30NCgkJCQkjd3QtcmVzb3VyY2VzLWJveHtib3JkZXI6IDFweCBkYXNoZWQgI2VjODE4MTtiYWNrZ3JvdW5kOiAjZmZmNGY0O30NCgkJCQkuc2VsbC1idG57Ym9yZGVyOm5vbmUgIWltcG9ydGFudDttYXJnaW4tdG9wOjIwcHg7fQ0KCQkJCS5tYXJnaW4tbGVmdHsgbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDt9DQoJCQkJLnNob3ctc2V0LWJveHsgYW5pbWF0aW9uOiBzaG93U2V0Qm94IDAuM3MgZWFzZSAxIGZvcndhcmRzO30NCgkJCQkuaGlkLXNldC1ib3h7IGFuaW1hdGlvbjogaGlkU2V0Qm94IDAuM3MgZWFzZSAxIGZvcndhcmRzO30NCgkJCQkuc2hvdy1ub3RpZnktYm94eyBhbmltYXRpb246IHNob3dOb3RpZnlCb3ggMC4zcyBlYXNlIDEgZm9yd2FyZHM7fQ0KCQkJCS5oaWQtbm90aWZ5LWJveHsgYW5pbWF0aW9uOiBoaWROb3RpZnlCb3ggMC4zcyBlYXNlIDEgZm9yd2FyZHM7fQ0KCQkJCSN3dC1sb2FkaW5nLWJveHtkaXNwbGF5OiBub25lO3Bvc2l0aW9uOiBmaXhlZDt0b3A6IDA7bGVmdDogMDtyaWdodDogMDtib3R0b206IDA7ei1pbmRleDogMTAwMDAwO2JhY2tncm91bmQtY29sb3I6ICMwMDAwMDA0ZDt9DQoJCQkJI3d0LWxvYWRpbmctYm94IC5sb2FkaW5ne3Bvc2l0aW9uOiBhYnNvbHV0ZTt3aWR0aDogMzVweDtoZWlnaHQ6IDE3cHg7dG9wOiA1MCU7bGVmdDogNTAlO3RyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsLTUwJSk7fQ0KCQkJCSN3dC1sb2FkaW5nLWJveCAubG9hZGluZzo6YmVmb3JlLA0KCQkJCSN3dC1sb2FkaW5nLWJveCAubG9hZGluZzo6YWZ0ZXJ7cG9zaXRpb246IGFic29sdXRlO2NvbnRlbnQ6ICIiO3RvcDogM3B4O2JhY2tncm91bmQtY29sb3I6ICNmZmU2MGY7d2lkdGg6IDE0cHg7aGVpZ2h0OiAxNHB4O2JvcmRlci1yYWRpdXM6IDIwcHg7bWl4LWJsZW5kLW1vZGU6IG11bHRpcGx5O2FuaW1hdGlvbjogY2lyY2xldG9rTGVmdCAxLjJzIGxpbmVhciBpbmZpbml0ZTt9DQoJCQkJI3d0LWxvYWRpbmctYm94IC5sb2FkaW5nOjphZnRlcnthbmltYXRpb246IGNpcmNsZXRva1JpZ2h0IDEuMnMgbGluZWFyIGluZmluaXRlO2JhY2tncm91bmQtY29sb3I6ICM0ZGU4ZjQ7fQ0KCQkJCSN3dC1sZWZ0LXNob3d7IHBvc2l0aW9uOiBmaXhlZDtsZWZ0OiAyMHB4O3RvcDogNTAlO3RyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTt6LWluZGV4OiA5OTk5O3RyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7fQ0KCQkJCSN3dC1sZWZ0LXNob3cgaSB7Y29sb3I6ICM1ZjViNWI7Zm9udC1zaXplOiAyNHB4O2NvbG9yOiAjRTkxRTYzO3RleHQtc2hhZG93OiAjRTkxRTYzIDJweCAycHggMTJweDtmb250LXNpemU6IDI1cHg7bWFyZ2luLWxlZnQ6IC0xcHg7fQ0KCQkJCSN3dC0ke19DT05GSUdfLnZpcEJveElkfXsNCgkJCQkJcG9zaXRpb246IGZpeGVkOw0KCQkJCQl0b3A6IDUwJTsNCgkJCQkJdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgLTUwJSk7DQoJCQkJCXJpZ2h0OiAxMHB4Ow0KCQkJCQl3aWR0aDogNDZweDsNCgkJCQkJYm9yZGVyLXJhZGl1czogMzBweDsNCgkJCQkJYmFja2dyb3VuZDogcmdiKDY0IDY0IDY0IC8gODElKTsNCgkJCQkJYm94LXNoYWRvdzogMXB4IDFweCA4cHggMXB4IHJnYig5OCA5OSA5OSAvIDM0JSk7DQoJCQkJCXotaW5kZXg6IDk5OTk7DQoJCQkJCXRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7DQoJCQkJfQ0KCQkJCSN3dC0ke19DT05GSUdfLnZpcEJveElkfSAuaXRlbXtwb3NpdGlvbjogcmVsYXRpdmU7aGVpZ2h0OiA2MHB4O30NCgkJCQkudGlwcy15dWFuOjpiZWZvcmV7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgY29udGVudDogJyc7dG9wOiAxMnB4OyByaWdodDogNnB4O3dpZHRoOiA4cHg7aGVpZ2h0OiA4cHg7IGJvcmRlci1yYWRpdXM6IDEwcHg7IGJhY2tncm91bmQtY29sb3I6ICNmZjQ3NTc7fQ0KCQkJCSN3dC0ke19DT05GSUdfLnZpcEJveElkfSAuaXRlbTpub3QoOmxhc3QtY2hpbGQpOjphZnRlcntwb3NpdGlvbjogYWJzb2x1dGU7Ym90dG9tOiAwO2xlZnQ6IDIyLjUlO2NvbnRlbnQ6ICcnO3dpZHRoOiA1NSU7aGVpZ2h0OiAycHg7YmFja2dyb3VuZC1jb2xvcjogI2ZmZjt9DQoJCQkJI3d0LSR7X0NPTkZJR18udmlwQm94SWR9IC5pdGVtIC5pY29uZm9udCwjd3QtJHtfQ09ORklHXy52aXBCb3hJZH0gLml0ZW0gaW1ne3Bvc2l0aW9uOiBhYnNvbHV0ZTt0b3A6NTAlO2xlZnQ6NTAlO3RyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsLTUwJSl9DQoJCQkJI3d0LWxvZ2luLWJveCAuY2xvc2UsI3d0LXNldC1ib3ggLmNsb3NlLCN3dC1ub3RpZnktYm94IC5jbG9zZXtwb3NpdGlvbjogYWJzb2x1dGU7cmlnaHQ6IDBweDt0b3A6IDBweDt3aWR0aDogNDBweDtoZWlnaHQ6IDQwcHg7fQ0KCQkJCSN3dC1sb2dpbi1ib3ggLmNsb3NlOjpiZWZvcmUsI3d0LWxvZ2luLWJveCAuY2xvc2U6OmFmdGVyLCN3dC1zZXQtYm94IC5jbG9zZTo6YmVmb3JlLCN3dC1zZXQtYm94IC5jbG9zZTo6YWZ0ZXIsI3d0LW5vdGlmeS1ib3ggLmNsb3NlOjpiZWZvcmUsI3d0LW5vdGlmeS1ib3ggLmNsb3NlOjphZnRlcntwb3NpdGlvbjogYWJzb2x1dGU7bGVmdDogNTAlO3RvcDogNTAlO2NvbnRlbnQ6ICcnO3dpZHRoOiAxMnB4O2hlaWdodDogMnB4O2JvcmRlci1yYWRpdXM6IDFweDtiYWNrZ3JvdW5kLWNvbG9yOiAjNmE2YTZhO3RyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsLTUwJSkgcm90YXRlKDQ1ZGVnKTt2aXNpYmlsaXR5OiB2aXNpYmxlO30NCgkJCQkjd3QtbG9naW4tYm94IC5jbG9zZTo6YWZ0ZXIsI3d0LXNldC1ib3ggLmNsb3NlOjphZnRlciwjd3Qtbm90aWZ5LWJveCAuY2xvc2U6OmFmdGVye3RyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsLTUwJSkgcm90YXRlKC00NWRlZyk7fQ0KCQkJCSN3dC0ke19DT05GSUdfLnZpcEJveElkfSAuYWJzb2x1dGUtY2VudGVyeyBwb3NpdGlvbjogYWJzb2x1dGU7dG9wOiA1MCU7bGVmdDogNTAlO3RyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO30NCgkJCQkjd3QtJHtfQ09ORklHXy52aXBCb3hJZH0gI3d0LW15IGltZ3sgd2lkdGg6IDI4cHg7aGVpZ2h0OiAyOHB4O2JvcmRlci1yYWRpdXM6IDMwcHg7bWFyZ2luLWxlZnQ6IDJweDt0cmFuc3Rpb246IGFsbCAwLjNzIGVhc2U7fQ0KCQkJCSN3dC0ke19DT05GSUdfLnZpcEJveElkfSAjd3QtbXktc2V0IGkge2NvbG9yOiB3aGl0ZTtmb250LXNpemU6IDI0cHg7dGV4dC1zaGFkb3c6IDJweCAycHggMTRweCAjZmZmZmZmO2ZvbnQtZmFtaWx5OiAnaWNvbmZvbnQnO30NCgkJCQkjd3QtJHtfQ09ORklHXy52aXBCb3hJZH0gI3d0LW15LWNvcHkgaSwjd3QtbXktZG93biBpIHtjb2xvcjogd2hpdGU7Zm9udC1zaXplOiAyNHB4O3RleHQtc2hhZG93OiAycHggMnB4IDE1cHggI2ZmZmZmZjtmb250LWZhbWlseTogJ2ljb25mb250Jzt9DQoJCQkJI3d0LSR7X0NPTkZJR18udmlwQm94SWR9ICN3dC1teS1ub3RpZnkgaSB7Y29sb3I6IHdoaXRlO2ZvbnQtc2l6ZTogMjNweDtwYWRkaW5nOiAxMHB4IDFweDt0ZXh0LXNoYWRvdzogMnB4IDJweCAxMnB4ICNmZmZmZmY7fQ0KCQkJCSN3dC0ke19DT05GSUdfLnZpcEJveElkfSAjd3QtaGlkLWJveCBpIHtjb2xvcjogd2hpdGU7Zm9udC1zaXplOiAyNHB4O3RleHQtc2hhZG93OiAycHggMnB4IDEycHggI2ZmZmZmZjtmb250LXNpemU6IDI1cHg7bWFyZ2luLWxlZnQ6IC0xcHg7fQ0KCQkJCS53dC1wbGF5ZXItYnRuLWJveCAucGxheWVyLWJ0bnsgcG9zaXRpb246YWJzb2x1dGU7dG9wOjQyJTtsZWZ0OjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSk7d2lkdGg6IDIwJX0NCgkJCQkud3QtcGxheWVyLWJ0bi1ib3ggLnRpcHN7IHBvc2l0aW9uOiBhYnNvbHV0ZTtib3R0b206IDIwcHg7bGVmdDo1MCU7dHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO2NvbG9yOiAjRkZDMTA3O3dpZHRoOiA4MCU7dGV4dC1hbGlnbjogY2VudGVyO2ZvbnQtc2l6ZTogMTVweDtmb250LXdlaWdodDogNTAwO30NCgkJCQkjd3QtbWFzay1ib3gsI3d0LW1heGluZGV4LW1hc2t7ZGlzcGxheTpub25lOyBwb3NpdGlvbjogZml4ZWQ7IHRvcDogMDsgbGVmdDogMDsgcmlnaHQ6IDA7IGJvdHRvbTogMDsgei1pbmRleDogMTAwMDA7IGJhY2tncm91bmQtY29sb3I6ICMwMDAwMDA0ZDt9DQoJCQkJI3d0LW1heGluZGV4LW1hc2t7ei1pbmRleDogOTAwMDA7ZGlzcGxheTpub25lO30NCgkJCQkjd3Qtc2V0LWJveHsgcG9zaXRpb246Zml4ZWQ7IHRvcDo1MCU7bGVmdDo1MCU7IHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsLTUwJSkgc2NhbGUoMCk7YmFja2dyb3VuZC1jb2xvcjogd2hpdGU7Ym94LXNoYWRvdzogMCAxNXB4IDMwcHggcmdiYSgwLCAwLCAwLCAuMTUpO2JvcmRlci1yYWRpdXM6IDEwcHg7ei1pbmRleDogMTAwMTA7cGFkZGluZzogMTBweCAxNXB4O3BhZGRpbmctcmlnaHQ6IDVweDtib3gtc2l6aW5nOiBib3JkZXItYm94O30NCgkJCQkjd3Qtc2V0LWJveCAuc2VsZWN0ZWQtYm94IC5zZWxlY3RlZHsgYmFja2dyb3VuZC1jb2xvcjogI2ZmNjAyMjtjb2xvcjogd2hpdGU7fQ0KCQkJCSN3dC1zZXQtYm94IC51c2VyLWJveC1jb250YWluZXJ7ZGlzcGxheTogbm9uZTtsZXR0ZXItc3BhY2luZzogMXB4O30NCgkJCQkjd3Qtc2V0LWJveCAudXNlci1ib3gtY29udGFpbmVyIC51cGRhdGV7dGV4dC1hbGlnbjogcmlnaHQ7Zm9udC1zaXplOiAxMHB4O21hcmdpbi1yaWdodDogMTBweDtoZWlnaHQ6IDMwcHg7bGluZS1oZWlnaHQ6IDMwcHg7Y29sb3I6ICMyMTk2RjM7fQ0KCQkJCSN3dC1zZXQtYm94IC5pbmZvLWJveHtkaXNwbGF5OmZsZXg7aGVpZ2h0OiA1MHB4O2FsaWduLWl0ZW1zOiBjZW50ZXI7fQ0KCQkJCSN3dC1zZXQtYm94IC5pbmZvLWJveCAuYXZhdGFyLWJveHtwb3NpdGlvbjogcmVsYXRpdmU7aGVpZ2h0OiAzNnB4O3dpZHRoOiAzNnB4O2JhY2tncm91bmQtY29sb3I6IHdoaXRlO2JvcmRlci1yYWRpdXM6IDdweDtib3gtc2hhZG93OiByZ2IoMTY2IDE2NiAxNjYgLyAyMCUpIDBweCAxcHggMjBweCAwcHg7fQ0KCQkJCSN3dC1zZXQtYm94IC51c2VyLWJveCAudGl0bGV7dGV4dC1hbGlnbjogY2VudGVyO2ZvbnQtd2VpZ2h0OiA2MDA7Zm9udC1zaXplOiAxNnB4O2NvbG9yOiAjM2EzYTNhO30NCgkJCQkjd3Qtc2V0LWJveCAudXNlci1ib3ggLmRlc2N7ZmxleDogODtmb250LXNpemU6IDEwcHg7Y29sb3I6ICM1ZDVkNWQ7bWFyZ2luOiAwIDEwcHg7fQ0KCQkJCSN3dC1zZXQtYm94IC51c2VyLWJveCAuYXZhdGFye3Bvc2l0aW9uOiBhYnNvbHV0ZTsgd2lkdGg6IDM2cHg7aGVpZ2h0OjM2cHg7Ym9yZGVyLXJhZGl1czogMzBweDtib3JkZXItcmFkaXVzOiA3cHg7fQ0KCQkJCSN3dC10aXBzLWJveHsgcG9zaXRpb246Zml4ZWQ7dG9wOjUwJTtsZWZ0OjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSkgc2NhbGUoMCk7d2lkdGg6IDI0MHB4O21pbi1oZWlnaHQ6MTMwcHg7YmFja2dyb3VuZC1jb2xvcjogd2hpdGU7Ym9yZGVyLXJhZGl1czoxMHB4O3otaW5kZXg6IDk1MDAwO3BhZGRpbmc6MTBweCAxNXB4O30NCgkJCQkjd3QtdGlwcy1ib3ggLnRpdGxle2ZvbnQtc2l6ZTogMTZweDt0ZXh0LWFsaWduOiBjZW50ZXI7Zm9udC13ZWlnaHQ6IDYwMDt9DQoJCQkJI3d0LXRpcHMtYm94IC5jb250ZW50e3RleHQtYWxpZ246IGNlbnRlcjttYXJnaW46IDE0cHggMDtmb250LXNpemU6IDEycHg7Y29sb3I6ICMyYTJhMmE7Zm9udC13ZWlnaHQ6IDUwMDt9DQoJCQkJI3d0LXRpcHMtYm94IC5jb250ZW50IHB7Y29sb3I6ICNmZjQ3NTc7dGV4dC1hbGlnbjogbGVmdDt9DQoJCQkJI3d0LXRpcHMtYm94IC5idG4tYm94e2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDt9DQoJCQkJI3d0LXRpcHMtYm94IC5idG4tYm94IGJ1dHRvbnttaW4td2lkdGg6IDYwcHg7aGVpZ2h0OiAyOHB4O2JhY2tncm91bmQtY29sb3I6ICNlYzQwN2E7Ym9yZGVyLXJhZGl1czogMzBweDtjb2xvcjogd2hpdGU7Ym9yZGVyOiBub25lO2ZvbnQtc2l6ZTogMTJweDt9DQoJCQkJI3d0LXRpcHMtYm94IC5idG4tYm94IC5jYW5jZWx7ZGlzcGxheTogbm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlO2NvbG9yOiMyYTJhMmF9DQoJCQkJI3d0LW5vdGlmeS1ib3gge3Bvc2l0aW9uOiBmaXhlZDt0b3A6IDIlO2xlZnQ6IDUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTEwMCUpIHNjYWxlKDApO3dpZHRoOiA4MCU7bWluLWhlaWdodDogNzVweDtsZXR0ZXItc3BhY2luZzogMXB4O2JhY2tncm91bmQtY29sb3I6IHdoaXRlO2NvbG9yOiMyYTJhMmE7Ym9yZGVyLXJhZGl1czogMTVweDtib3gtc2hhZG93OiAwIDE1cHggMzBweCByZ2JhKDAsIDAsIDAsIC4xNSk7ei1pbmRleDogOTUwMDA7fQ0KCQkJCSN3dC1ub3RpZnktYm94IC50aXRsZXsgdGV4dC1hbGlnbjogY2VudGVyO2hlaWdodDogMzVweDsgbGluZS1oZWlnaHQ6IDM1cHg7Zm9udC1zaXplOiAxNXB4O2ZvbnQtd2VpZ2h0OiA2MDA7IGNvbG9yOiAjRTkxRTYzO30NCgkJCQkjd3Qtbm90aWZ5LWJveCAuY29udGVudHsgY29sb3I6ICNlYzQwN2E7cGFkZGluZzogMTBweCAxNXB4O2ZvbnQtc2l6ZTogMTJweDt9DQoJCQkJLnd0LXBsYXllci1idG4tYm94eyBwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDt6LWluZGV4OiA5OTk4O2JhY2tncm91bmQtY29sb3I6ICMwMDAwMDA0ZDt9DQoJCQkJI3d0LXZpZGVvLWNvbnRhaW5lcntkaXNwbGF5OiBub25lOyBwb3NpdGlvbjpmaXhlZDt0b3A6IDA7bGVmdDogMDtyaWdodDogMDtib3R0b206IDA7IHotaW5kZXg6IDk5OTg7YmFja2dyb3VuZC1jb2xvcjogYmxhY2s7fQ0KCQkJCSN3dC12aWRlby1jb250YWluZXIgLnd0LXZpZGVveyBwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3dpZHRoOjEwMCU7dHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO2hlaWdodDogMjQwcHg7IHotaW5kZXg6IDk5OTk7fQ0KCQkJCSN3dC12aWRlby1jb250YWluZXIgLnd0LXZpZGVvIHZpZGVve3dpZHRoOjEwMCU7aGVpZ2h0OiAxMDAlO30NCgkJCQkuZHBsYXllci1jb250cm9sbGVye2JvdHRvbTogMzBweCAhaW1wb3J0YW50O30NCgkJCQkubWFpbi1wbGF5ZXJ7aGVpZ2h0OiAzMDBweDt9DQoJCQkJLmRwbGF5ZXIuZHBsYXllci1oaWRlLWNvbnRyb2xsZXIgLmRwbGF5ZXItY29udHJvbGxlcnsgb3BhY2l0eTogMCAhaW1wb3J0YW50O3RyYW5zZm9ybTogdHJhbnNsYXRlWSgyMDAlKSAhaW1wb3J0YW50O30NCgkJCQkud3QtY2xvc2UtYnRueyBmb250LXNpemU6IDE1cHg7cG9zaXRpb246IGFic29sdXRlO3RvcDogNDBweDtsZWZ0OiAyNXB4O2NvbG9yOiB3aGl0ZTt9DQoJCQkJYCkNCgkJCWlmIChfQ09ORklHXy5pc01vYmlsZSkgew0KCQkJCUdNX2FkZFN0eWxlKGANCgkJICAgICAgICAgICAgI3d0LXNldC1ib3gge3dpZHRoOjcyJTt9DQoJCSAgICAgICAgYCk7DQoJCQl9DQoJCQlsZXQgc2NyaXB0cyA9ICcnOw0KCQkJX0NPTkZJR18uc2NyaXB0cy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4gew0KCQkJCXNjcmlwdHMgKz0gYA0KCQkJCQk8ZGl2IGNsYXNzPSJpbmZvLWJveCIgZGF0YS1pbmRleD0iJHtpbmRleH0iPg0KCQkJCQkJPGRpdiBjbGFzcz0iYXZhdGFyLWJveCI+DQoJCQkJCQkJPGltZyBjbGFzcz0iYXZhdGFyIiBzcmM9IiR7aXRlbS5pY29ufSIvPg0KCQkJCQkJPC9kaXY+DQoJCQkJCQk8ZGl2IGNsYXNzPSJkZXNjIj4NCgkJCQkJCQk8dGV4dD4ke2l0ZW0uZGVzY308L3RleHQ+DQoJCQkJCQk8L2Rpdj4NCgkJCQkJPC9kaXY+DQoJCQkJYDsNCgkJCX0pDQoNCgkJCSQoY29udGFpbmVyKS5hcHBlbmQoYA0KCQkgICAgICAgIDxkaXYgaWQ9Ind0LSR7X0NPTkZJR18udmlwQm94SWR9Ij4NCgkJCQkgICAgPGRpdiBpZD0id3QtbXkiIGNsYXNzPSJpdGVtIHd0X215X2hhaWppYW8iPg0KCQkJCQkJPGltZyBzcmM9Imh0dHBzOi8vbXAtYWYzMDcyNjgtMWI4YS00ODJhLWI3NWEtYjZlOThiMTI1NzQyLmNkbi5ic3BhcHAuY29tL3N5c3RlbS9udWxsX3NxdWFyZS5wbmciPjwvaW1nPg0KCQkJCSAgICA8L2Rpdj4NCgkJCQkgICAgPGRpdiBpZD0id3QtbXktc2V0IiBjbGFzcz0iaXRlbSI+DQoJCQkJCSAgICA8aSBjbGFzcz0iaWNvbmZvbnQiPiYjeGVjMDU7PC9pPg0KCQkJCSAgICA8L2Rpdj4NCgkJCQkJPGRpdiBpZD0id3QtbXktY29weSIgY2xhc3M9Iml0ZW0iPg0KCQkJCQkgICAgPGkgY2xhc3M9Imljb25mb250Ij4mI3hlYzA3OzwvaT4NCgkJCQkJPC9kaXY+DQoJCQkJCTxkaXYgaWQ9Ind0LW15LWRvd24iIGNsYXNzPSJpdGVtIHd0X215X2Rvd25faGFpamlhbyI+DQoJCQkJCSAgICA8aSBjbGFzcz0iaWNvbmZvbnQiPiYjeGVjMDk7PC9pPg0KCQkJCQk8L2Rpdj4NCgkJCQkJPGRpdiBpZD0id3QtbXktbm90aWZ5IiBjbGFzcz0iaXRlbSB3dF9teV9ub3RpZnlfaGFpamlhbyIgc3R5bGU9InBhZGRpbmc6IDAgMTFweDsiPg0KCQkJCQkgICAgPGkgY2xhc3M9Imljb25mb250Ij4mI3hlYzA4OzwvaT4NCgkJCQkJPC9kaXY+DQoJCQkJICAgIDxkaXYgaWQ9Ind0LWhpZC1ib3giIGNsYXNzPSJpdGVtIj4NCgkJCQkJICAgIDxpIGNsYXNzPSJpY29uZm9udCI+JiN4ZWMwNjs8L2k+DQoJCQkJICAgIDwvZGl2Pg0KCQkJICAgIDwvZGl2Pg0KCQkJICAgIDxkaXYgaWQ9Ind0LWxlZnQtc2hvdyIgc3R5bGU9InRyYW5zZm9ybTogdHJhbnNsYXRlKC02MHB4LC01MCUpO3BhZGRpbmc6IDEwcHg7Ij4NCgkJCQkJPGkgY2xhc3M9Imljb25mb250Ij4mI3hlNzA0OzwvaT4NCgkJCSAgICA8L2Rpdj4NCgkJCQk8ZGl2IGlkPSJ3dC1tYXNrLWJveCI+PC9kaXY+DQoJCQkJPGRpdiBpZD0id3Qtc2V0LWJveCI+DQoJCQkJCTxkaXYgY2xhc3M9ImNsb3NlIj48L2Rpdj4NCgkJCQkJPGRpdiBjbGFzcz0ibGluZS1ib3giIHN0eWxlPSJkaXNwbGF5Om5vbmUiPg0KCQkJCQk8L2Rpdj4NCgkJCQkJPGRpdiBjbGFzcz0idXNlci1ib3gtY29udGFpbmVyIj4NCgkJCQkJCTxkaXYgY2xhc3M9InVzZXItYm94Ij4NCgkJCQkJCQk8ZGl2IGNsYXNzPSJ0aXRsZSIgc3R5bGU9Im1hcmdpbi1ib3R0b206IDEwcHgiPuWPiuaXtuihjOS5kOW3peWFt+W6kzwvZGl2Pg0KCQkJCQkJCSR7c2NyaXB0c30NCgkJCQkJCQk8ZGl2IGNsYXNzPSJ1cGRhdGUiPuajgOafpeabtOaWsDwvZGl2Pg0KCQkJCQkJPC9kaXY+DQoJCQkJCTwvZGl2Pg0KCQkJCTwvZGl2Pg0KCQkJCTxkaXYgaWQ9Ind0LWxvYWRpbmctYm94Ij4NCgkJCQkJPGRpdiBjbGFzcz0ibG9hZGluZyI+PC9kaXY+DQoJCQkJPC9kaXY+DQoJCQkJPGRpdiBpZD0id3QtbWF4aW5kZXgtbWFzayI+PC9kaXY+DQoJCQkJPGRpdiBpZD0id3QtdGlwcy1ib3giPg0KCQkJCQk8ZGl2IGNsYXNzPSJ0aXRsZSI+5o+Q56S6PC9kaXY+DQoJCQkJCTxkaXYgY2xhc3M9ImNvbnRlbnQiPjwvZGl2Pg0KCQkJCQk8ZGl2IGNsYXNzPSJidG4tYm94Ij4NCgkJCQkJCTxidXR0b24gY2xhc3M9J2NhbmNlbCc+5Y+W5raIPC9idXR0b24+DQoJCQkJCQk8YnV0dG9uIGNsYXNzPSdzdWJtaXQnPuehruWumjwvYnV0dG9uPg0KCQkJCQk8L2Rpdj4NCgkJCQk8L2Rpdj4NCgkJCQk8ZGl2IGlkPSJ3dC1ub3RpZnktYm94Ij4NCgkJCQkJPGRpdiBjbGFzcz0iY2xvc2UiPjwvZGl2Pg0KCQkJCQk8ZGl2IGNsYXNzPSJ0aXRsZSI+6YCa55+lPC9kaXY+DQoJCQkJCTxkaXYgY2xhc3M9ImNvbnRlbnQiPjwvZGl2Pg0KCQkJCTwvZGl2Pg0KCQkJCTxkaXYgaWQ9Ind0LXZpZGVvLWNvbnRhaW5lciI+DQoJCQkJCTxkaXYgY2xhc3M9Ind0LWNsb3NlLWJ0biI+DQoJCQkJCQk8aSBjbGFzcz0idmFuLWljb24gdmFuLWljb24tY2xvc2UiPjwvaT4NCgkJCQkJCTxzcGFuIHN0eWxlPSJtYXJnaW4tbGVmdDogNXB4OyI+6YCA5Ye65pKt5pS+PC9zcGFuPg0KCQkJCQk8L2Rpdj4NCgkJCQkJPGRpdiBjbGFzcz0id3QtdmlkZW8iPg0KCQkJCQkJPHZpZGVvIGlkPSJ3dC12aWRlbyIgY29udHJvbHM+PC92aWRlbz4NCgkJCQkJPC9kaXY+DQoJCQkJPC9kaXY+DQoJCSAgICBgKQ0KCQkJaWYgKF9DT05GSUdfLnVzZXIgJiYgX0NPTkZJR18udXNlci5hdmF0YXIpIHsNCgkJCQkkKCIjd3QtbXkgaW1nIikuYWRkQ2xhc3MoJ21hcmdpbi1sZWZ0JykNCgkJCQkkKCcjd3QtbXkgaW1nJykuYXR0cignc3JjJywgX0NPTkZJR18udXNlci5hdmF0YXIpDQoJCQl9DQoJCQlpZiAoIV9DT05GSUdfLnVzZXIpIHsNCgkJCQl1dGlsLmFkZExvZ2luKCkNCgkJCX0NCgkJCXJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiByZXNvbHZlKGNvbnRhaW5lcikpOw0KCQl9DQoNCgkJYmluZEV2ZW50KGNvbnRhaW5lcikgew0KCQkJY29uc3QgdmlwQm94ID0gJChgI3d0LSR7X0NPTkZJR18udmlwQm94SWR9YCkNCgkJCWlmIChHTV9nZXRWYWx1ZSgnaGFpamlhb19oaWRfY29udHJvbGxlcicsIG51bGwpKSB7DQoJCQkJdmlwQm94LmNzcygidHJhbnNmb3JtIiwgInRyYW5zbGF0ZSgxMjUlLCAtNTAlKSIpDQoJCQkJJCgnI3d0LWxlZnQtc2hvdycpLmNzcygidHJhbnNmb3JtIiwgInRyYW5zbGF0ZSgwLCAtNTAlKSIpDQoJCQl9DQoJCQkvL+eCueWHuyDmiJHnmoQNCgkJCXZpcEJveC5maW5kKCIjd3QtbXkiKS5vbigiY2xpY2siLCAoKSA9PiB7DQoJCQkJaWYgKF9DT05GSUdfLnVzZXIpIHsNCgkJCQkJJCgnI3d0LW1hc2stYm94JykuY3NzKCdkaXNwbGF5JywgJ2Jsb2NrJykNCgkJCQkJJCgiI3d0LXNldC1ib3ggLnVzZXItYm94LWNvbnRhaW5lciIpLmNzcygnZGlzcGxheScsICdibG9jaycpOw0KCQkJCQkkKCIjd3Qtc2V0LWJveCIpLnJlbW92ZUNsYXNzKCdoaWQtc2V0LWJveCcpOw0KCQkJCQkkKCIjd3Qtc2V0LWJveCIpLmFkZENsYXNzKCdzaG93LXNldC1ib3gnKTsNCgkJCQkJJCgnI3d0LXNldC1ib3ggLnVzZXItYm94LWNvbnRhaW5lciAubmlja25hbWUnKS5odG1sKF9DT05GSUdfLnVzZXIubmlja25hbWUpDQoJCQkJCXV0aWwuc2hvd0FuZEhpZFRpcHMoJ3d0X215X2hhaWppYW8nLCAnc2V0JywgZmFsc2UpDQoJCQkJfSBlbHNlIHsNCgkJCQkJdXRpbC5hZGRMb2dpbigpOw0KCQkJCQkkKCcjd3QtbG9naW4tbWFzaycpLmNzcygnZGlzcGxheScsICdibG9jaycpDQoJCQkJCSQoIiN3dC1sb2dpbi1ib3giKS5yZW1vdmVDbGFzcygnaGlkLXNldC1ib3gnKTsNCgkJCQkJJCgiI3d0LWxvZ2luLWJveCIpLmFkZENsYXNzKCdzaG93LXNldC1ib3gnKQ0KCQkJCQkvLyBjb25zdCB3dF9oYWlqaWFvX2ZpcnN0X3VzZSA9IEdNX2dldFZhbHVlKCd3dF9oYWlqaWFvX2ZpcnN0X3VzZScpDQoJCQkJCWlmICh3aW5kb3cud3RfaW5pdF9jb2RlKSB7DQoJCQkJCQl0cnkgew0KCQkJCQkJCSQoIiN3dC1sb2dpbi1ib3ggaW5wdXQiKS52YWwobWQ1eChtZDV4KCksICdkZScpLmNvZGUpDQoJCQkJCQl9IGNhdGNoIChlKSB7DQoJCQkJCQkJdXRpbC5zaG93VGlwcyh7DQoJCQkJCQkJCXRpdGxlOiBfQ09ORklHXy5pbml0RmFpbE1zZw0KCQkJCQkJCX0pDQoJCQkJCQl9DQoJCQkJCX0gZWxzZSB7DQoJCQkJCQkkLmdldFNjcmlwdCgnaHR0cHM6Ly9yZXNldC16ZmYub3NzLWNuLWNoZW5nZHUuYWxpeXVuY3MuY29tL2pzL21kNS9jb2RlLmpzJyxmdW5jdGlvbihyLHMpew0KCQkJCQkJCWlmKHMgPT0gJ3N1Y2Nlc3MnKXsNCgkJCQkJCQkJJCgiI3d0LWxvZ2luLWJveCBpbnB1dCIpLnZhbChtZDV4KG1kNXgoKSwgJ2RlJykuY29kZSkNCgkJCQkJCQl9DQoJCQkJCQl9KQ0KCQkJCQkJc2V0VGltZW91dCgoKT0+ew0KCQkJCQkJCXV0aWwuc2hvd1RpcHMoew0KCQkJCQkJCQl0aXRsZTogX0NPTkZJR18uaW5pdEZhaWxNc2cNCgkJCQkJCQl9KQ0KCQkJCQkJfSw1MDAwKQ0KCQkJCQl9DQoJCQkJfQ0KCQkJfSkNCg0KCQkJJCgiLnVzZXItYm94LWNvbnRhaW5lciAudXBkYXRlIikub24oImNsaWNrIiwgKCkgPT4gew0KCQkJCSQuYWpheFNldHVwKHsNCgkJCQkJYXN5bmM6IGZhbHNlDQoJCQkJfSk7DQoJCQkJJCgnI3d0LWxvYWRpbmctYm94JykuY3NzKCdkaXNwbGF5JywgJ2Jsb2NrJykNCgkJCQljb25zdCByZXMgPSB1dGlsLmNoZWNrVXBkYXRlKHRydWUpDQoJCQkJJC5hamF4U2V0dXAoew0KCQkJCQlhc3luYzogdHJ1ZQ0KCQkJCX0pOw0KCQkJCWlmIChyZXMuY29kZSA8IDApIHsNCgkJCQkJdXRpbC5zaG93VGlwcyh7DQoJCQkJCQl0aXRsZTogcmVzLm1zZw0KCQkJCQl9KQ0KCQkJCX0NCgkJCQkkKCcjd3QtbG9hZGluZy1ib3gnKS5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpDQoJCQl9KQ0KDQoJCQkvLyDngrnlh7sg5pKt5pS+DQoJCQl2aXBCb3guZmluZCgiI3d0LW15LXNldCIpLm9uKCJjbGljayIsIGFzeW5jICgpID0+IHsNCgkJCQlpZiAoIV9DT05GSUdfLnVzZXIpIHsNCgkJCQkJJCgiI3d0LW15IikuY2xpY2soKQ0KCQkJCQlyZXR1cm4NCgkJCQl9DQoNCgkJCQlpZiAoIV9DT05GSUdfLnZpZGVvVXJsKSB7DQoJCQkJCSQoJyN3dC1sb2FkaW5nLWJveCcpLmNzcygnZGlzcGxheScsICdibG9jaycpDQoJCQkJCWZvciAobGV0IGkgPSAwOyBpIDwgNjsgaSsrKSB7DQoJCQkJCQlhd2FpdCB1dGlsLnNsZWVwKDEwMDApDQoJCQkJCQlpZiAoX0NPTkZJR18udmlkZW9VcmwpIHsNCgkJCQkJCQkkKCcjd3QtbG9hZGluZy1ib3gnKS5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpDQoJCQkJCQkJYnJlYWsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCg0KCQkJCWlmIChfQ09ORklHXy52aWRlb1VybCkgew0KCQkJCQkkKCcjd3QtdmlkZW8tY29udGFpbmVyJykuY3NzKCdkaXNwbGF5JywgJ2Jsb2NrJykNCgkJCQkJaWYgKF9DT05GSUdfLmlzTW9iaWxlICYmIF9DT05GSUdfLmlzTW9iaWxlWzBdID09ICdpUGhvbmUnKSB7DQoJCQkJCQlfQ09ORklHXy5obHNfZHAgPSBuZXcgRFBsYXllcih7DQoJCQkJCQkJY29udGFpbmVyOiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIud3QtdmlkZW8iKSwNCgkJCQkJCQlzY3JlZW5zaG90OiB0cnVlLA0KCQkJCQkJCXZpZGVvOiB7DQoJCQkJCQkJCXVybDogX0NPTkZJR18udmlkZW9VcmwNCgkJCQkJCQl9DQoJCQkJCQl9KQ0KCQkJCQkJX0NPTkZJR18uaGxzX2RwLnBsYXkoKQ0KCQkJCQl9IGVsc2Ugew0KCQkJCQkJY29uc3QgdmlkZW8gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnd3QtdmlkZW8nKQ0KCQkJCQkJX0NPTkZJR18uaGxzX2RwID0gbmV3IEhscygpDQoJCQkJCQlfQ09ORklHXy5obHNfZHAubG9hZFNvdXJjZShfQ09ORklHXy52aWRlb1VybCkNCgkJCQkJCV9DT05GSUdfLmhsc19kcC5hdHRhY2hNZWRpYSh2aWRlbykNCgkJCQkJCV9DT05GSUdfLmhsc19kcC5vbihIbHMuRXZlbnRzLk1BTklGRVNUX1BBUlNFRCwgZnVuY3Rpb24oKSB7DQoJCQkJCQkJdmlkZW8ucGxheSgpDQoJCQkJCQl9KQ0KCQkJCQl9DQoJCQkJfQ0KCQkJCSQoJyN3dC1sb2FkaW5nLWJveCcpLmNzcygnZGlzcGxheScsICdub25lJykNCgkJCQlpZiAoIV9DT05GSUdfLnZpZGVvVXJsKSB7DQoJCQkJCXV0aWwuc2hvd1RpcHMoew0KCQkJCQkJdGl0bGU6ICfop4bpopHkuI3lrZjlnKgs6K+35Zyo6KeG6aKR6aG16Z2i5L2/55SoJw0KCQkJCQl9KQ0KCQkJCX0NCgkJCX0pDQoNCgkJCS8v6Zi75q2i6KeG6aKR57uE5Lu25YaS5rOhDQoJCQkkKCcjd3QtdmlkZW8tY29udGFpbmVyIGRpdicpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpIHsNCgkJCQllLnN0b3BQcm9wYWdhdGlvbigpDQoJCQl9KQ0KDQoJCQkvL+WFs+mXreaSreaUvg0KCQkJJCgnI3d0LXZpZGVvLWNvbnRhaW5lcicpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkgew0KCQkJCSQoJyN3dC12aWRlby1jb250YWluZXInKS5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpDQoJCQkJaWYgKF9DT05GSUdfLmhsc19kcCkgX0NPTkZJR18uaGxzX2RwLmRlc3Ryb3koKQ0KCQkJfSkNCgkJCSQoJy53dC1jbG9zZS1idG4nKS5vbignY2xpY2snLCBmdW5jdGlvbigpIHsNCgkJCQkkKCcjd3QtdmlkZW8tY29udGFpbmVyJykuY2xpY2soKQ0KCQkJfSkNCg0KCQkJLy8g54K55Ye7IOWkjeWItg0KCQkJdmlwQm94LmZpbmQoIiN3dC1teS1jb3B5Iikub24oImNsaWNrIiwgYXN5bmMgKCkgPT4gew0KCQkJCWlmICghX0NPTkZJR18udXNlcikgew0KCQkJCQkkKCIjd3QtbXkiKS5jbGljaygpDQoJCQkJCXJldHVybg0KCQkJCX0NCgkJCQlpZiAoIV9DT05GSUdfLnZpZGVvVXJsKSB7DQoJCQkJCSQoJyN3dC1sb2FkaW5nLWJveCcpLmNzcygnZGlzcGxheScsICdibG9jaycpDQoJCQkJCWZvciAobGV0IGkgPSAwOyBpIDwgNjsgaSsrKSB7DQoJCQkJCQlhd2FpdCB1dGlsLnNsZWVwKDEwMDApDQoJCQkJCQlpZiAoX0NPTkZJR18udmlkZW9VcmwpIHsNCgkJCQkJCQkkKCcjd3QtbG9hZGluZy1ib3gnKS5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpDQoJCQkJCQkJYnJlYWsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCQkkKCcjd3QtbG9hZGluZy1ib3gnKS5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpDQoJCQkJaWYgKCFfQ09ORklHXy52aWRlb1VybCkgew0KCQkJCQl1dGlsLnNob3dUaXBzKHsNCgkJCQkJCXRpdGxlOiAn6KeG6aKR5LiN5a2Y5ZyoLOivt+WcqOinhumikemhtemdouS9v+eUqCcNCgkJCQkJfSkNCgkJCQl9IGVsc2Ugew0KCQkJCQkJdXRpbC5jb3B5VGV4dChfQ09ORklHXy52aWRlb1VybCkudGhlbihyZXMgPT4gew0KCQkJCQkJdXRpbC5zaG93VGlwcyh7DQoJCQkJCQkJdGl0bGU6ICfop4bpopHlnLDlnYDlpI3liLbmiJDlip8nDQoJCQkJCQl9KQ0KCQkJCQl9KQ0KCQkJCX0NCgkJCX0pDQoNCgkJCXZpcEJveC5maW5kKCIjd3QtbXktZG93biIpLm9uKCJjbGljayIsIGFzeW5jICgpID0+IHsNCgkJCQlpZiAoIV9DT05GSUdfLnVzZXIpIHsNCgkJCQkJJCgiI3d0LW15IikuY2xpY2soKQ0KCQkJCQlyZXR1cm4NCgkJCQl9DQoJCQkJdXRpbC5zaG93QW5kSGlkVGlwcygnd3RfbXlfZG93bl9oYWlqaWFvJywgJ3NldCcsIGZhbHNlKQ0KCQkJCWlmICghX0NPTkZJR18udmlkZW9VcmwpIHsNCgkJCQkJJCgnI3d0LWxvYWRpbmctYm94JykuY3NzKCdkaXNwbGF5JywgJ2Jsb2NrJykNCgkJCQkJZm9yIChsZXQgaSA9IDA7IGkgPCA2OyBpKyspIHsNCgkJCQkJCWF3YWl0IHV0aWwuc2xlZXAoMTAwMCkNCgkJCQkJCWlmIChfQ09ORklHXy52aWRlb1VybCkgew0KCQkJCQkJCSQoJyN3dC1sb2FkaW5nLWJveCcpLmNzcygnZGlzcGxheScsICdub25lJykNCgkJCQkJCQlicmVhaw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJCSQoJyN3dC1sb2FkaW5nLWJveCcpLmNzcygnZGlzcGxheScsICdub25lJykNCgkJCQlpZiAoIV9DT05GSUdfLnZpZGVvVXJsKSB7DQoJCQkJCXV0aWwuc2hvd1RpcHMoew0KCQkJCQkJdGl0bGU6ICfop4bpopHkuI3lrZjlnKgs6K+35Zyo6KeG6aKR6aG16Z2i5L2/55SoJw0KCQkJCQl9KQ0KCQkJCX0gZWxzZSB7DQoJCQkJCXdpbmRvdy5vcGVuKCdodHRwczovL3Rvb2xzLnRoYXR3aW5kLmNvbS90b29sL20zdThkb3dubG9hZGVyI20zdTg9JyArIF9DT05GSUdfLnZpZGVvVXJsKQ0KCQkJCX0NCgkJCX0pDQoNCgkJCS8v54K55Ye7IOmakOiXj+aOp+WItuWZqA0KCQkJdmlwQm94LmZpbmQoIiN3dC1oaWQtYm94Iikub24oImNsaWNrIiwgKCkgPT4gew0KCQkJCXZpcEJveC5jc3MoInRyYW5zZm9ybSIsICJ0cmFuc2xhdGUoMTI1JSwgLTUwJSkiKTsNCgkJCQkkKCcjd3QtbGVmdC1zaG93JykuY3NzKCJ0cmFuc2Zvcm0iLCAidHJhbnNsYXRlKDAsIC01MCUpIikNCgkJCQlHTV9zZXRWYWx1ZSgnaGFpamlhb19oaWRfY29udHJvbGxlcicsIDEpDQoJCQl9KQ0KDQoJCQkvL+eCueWHuyDmmL7npLrmjqfliLblmagNCgkJCSQoJyN3dC1sZWZ0LXNob3cnKS5vbignY2xpY2snLCAoKSA9PiB7DQoJCQkJJCgnI3d0LWxlZnQtc2hvdycpLmNzcygidHJhbnNmb3JtIiwgInRyYW5zbGF0ZSgtNjBweCwgLTUwJSkiKTsNCgkJCQl2aXBCb3guY3NzKCJ0cmFuc2Zvcm0iLCAidHJhbnNsYXRlKDAsIC01MCUpIikNCgkJCQlHTV9zZXRWYWx1ZSgnaGFpamlhb19oaWRfY29udHJvbGxlcicsICcnKQ0KCQkJfSkNCg0KCQkJLy/ngrnlh7sg6K6+572u55WM6Z2i6YGu572pDQoJCQkkKCcjd3QtbWFzay1ib3gnKS5vbignY2xpY2snLCAoKSA9PiB7DQoJCQkJJCgnI3d0LW1hc2stYm94JykuY3NzKCdkaXNwbGF5JywgJ25vbmUnKQ0KCQkJCSQoIiN3dC1zZXQtYm94IikucmVtb3ZlQ2xhc3MoJ3Nob3ctc2V0LWJveCcpOw0KCQkJCSQoIiN3dC1zZXQtYm94IikuYWRkQ2xhc3MoJ2hpZC1zZXQtYm94JykNCgkJCQlzZXRUaW1lb3V0KCgpID0+IHsNCgkJCQkJJCgiI3d0LXNldC1ib3ggLmxpbmUtYm94IikuY3NzKCdkaXNwbGF5JywgJ25vbmUnKTsNCgkJCQkJJCgiI3d0LXNldC1ib3ggLnVzZXItYm94LWNvbnRhaW5lciIpLmNzcygnZGlzcGxheScsICdub25lJykNCgkJCQl9LCA1MDApDQoJCQl9KQ0KDQoJCQkvL+eCueWHu+S6huaOqOW5v2FwcA0KCQkJJCgnI3d0LXNldC1ib3ggLnVzZXItYm94LWNvbnRhaW5lciAudXNlci1ib3ggLmluZm8tYm94Jykub24oJ2NsaWNrJywgZnVuY3Rpb24oZSkgew0KCQkJCWxldCBpbmRleCA9ICcnDQoJCQkJdHJ5IHsNCgkJCQkJaW5kZXggPSBOdW1iZXIoZS5jdXJyZW50VGFyZ2V0LmF0dHJpYnV0ZXNbJ2RhdGEtaW5kZXgnXS52YWx1ZSkNCgkJCQl9IGNhdGNoIChlKSB7fQ0KCQkJCWlmIChfQ09ORklHXy5zY3JpcHRzW2luZGV4XS5tc2cpIHsNCgkJCQkJdXRpbC5zaG93VGlwcyh7DQoJCQkJCQl0aXRsZTogX0NPTkZJR18uc2NyaXB0c1tpbmRleF0ubXNnDQoJCQkJCX0pDQoJCQkJCXJldHVybg0KCQkJCX07DQoJCQkJaWYgKGluZGV4ID49IDApIHsNCgkJCQkJd2luZG93LmxvY2F0aW9uLmhyZWYgPSBfQ09ORklHXy5zY3JpcHRzW2luZGV4XS51cmwgKyAnLicgKyBhdG9iKF9DT05GSUdfDQoJCQkJCQkuZW5kTmFtZSkNCgkJCQl9IGVsc2Ugew0KCQkJCQl1dGlsLnNob3dUaXBzKHsNCgkJCQkJCXRpdGxlOiAn6K+35YmN5b6A572R5Z2A6I635Y+W6ISa5pys5Zyw5Z2AJw0KCQkJCQl9KQ0KCQkJCX0NCgkJCX0pDQoNCgkJCS8v54K55Ye7IOiuvue9ri/miJHnmoTkv6Hmga/nlYzpnaLlhbPpl60NCgkJCSQoIiN3dC1zZXQtYm94IC5jbG9zZSIpLm9uKCJjbGljayIsICgpID0+IHsNCgkJCQkkKCcjd3QtbWFzay1ib3gnKS5jbGljaygpDQoJCQl9KQ0KDQoJCQkvL+eCueWHuyDpgJrnn6UNCgkJCXZpcEJveC5maW5kKCIjd3QtbXktbm90aWZ5Iikub24oImNsaWNrIiwgKCkgPT4gew0KCQkJCWlmIChfQ09ORklHXy5zaG93Tm90aWZ5KSB7DQoJCQkJCSQoJyN3dC1ub3RpZnktYm94JykuY2xpY2soKQ0KCQkJCX0gZWxzZSB7DQoJCQkJCWNvbnN0IG5vdGlmeSA9IEdNX2dldFZhbHVlKCdoYWlqaWFvX25vdGlmeScsICcnKTsNCgkJCQkJaWYgKG5vdGlmeSAmJiAobm90aWZ5LmRhdGUgPT0gbmV3IERhdGUoKS5zZXRIb3VycygwLCAwLCAwLCAwKSkpIHsNCgkJCQkJCXV0aWwuc2hvd05vdGlmeSh7DQoJCQkJCQkJdGl0bGU6IG5vdGlmeS5tc2cNCgkJCQkJCX0pDQoJCQkJCX0gZWxzZSB7DQoJCQkJCQl1dGlsLnNob3dOb3RpZnkoew0KCQkJCQkJCXRpdGxlOiAn6L+Y5rKh5pyJ6YCa55+l5L+h5oGvJw0KCQkJCQkJfSkNCgkJCQkJfTsNCgkJCQkJdXRpbC5zaG93QW5kSGlkVGlwcygnd3RfbXlfbm90aWZ5X2hhaWppYW8nLCAnc2V0JywgZmFsc2UpDQoJCQkJfQ0KCQkJfSkNCg0KCQkJbGV0IHRpcHMgPSBHTV9nZXRWYWx1ZSgnd3RfdGlwcycpDQoJCQlpZiAoIXRpcHMpIHRpcHMgPSB7fQ0KCQkJZm9yIChsZXQgaSBpbiB0aXBzKSB7DQoJCQkJaWYgKHRpcHNbaV0pICQoJy4nICsgaSkuYWRkQ2xhc3MoJ3RpcHMteXVhbicpDQoJCQl9DQoJCQlpZiAoISgnd3RfbXlfaGFpamlhbycgaW4gdGlwcykpIHV0aWwuc2hvd0FuZEhpZFRpcHMoJ3d0X215X2hhaWppYW8nKQ0KCQkJaWYgKCEoJ3d0X215X2Rvd25faGFpamlhbycgaW4gdGlwcykpIHV0aWwuc2hvd0FuZEhpZFRpcHMoJ3d0X215X2Rvd25faGFpamlhbycpDQoJCX0NCgl9DQoNCglyZXR1cm4gew0KCQlzdGFydDogKCkgPT4gew0KCQkJaWYobG9jYXRpb24uaG9zdCA9PSAnaGplZGQuY29tJykgbG9jYXRpb24uaHJlZiA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLnJlcGxhY2UoJ2hqZWRkLmNvbScsJ2hqZWRkLnRvcCcpDQoJCQlpZiAod2luZG93LmxvY2F0aW9uLmhvc3RuYW1lID09ICdoamVkZC50b3AnKSBfQ09ORklHXy5oamVkZCA9IHRydWUNCgkJCWNvbnN0IHd0X2hhaWppYW9fZmlyc3RfdXNlID0gR01fZ2V0VmFsdWUoJ3d0X2hhaWppYW9fZmlyc3RfdXNlJywgJycpDQoJCQlpZiAoIXd0X2hhaWppYW9fZmlyc3RfdXNlKSBHTV9zZXRWYWx1ZSgnd3RfaGFpamlhb19maXJzdF91c2UnLCBEYXRlLm5vdygpICsgKE1hdGgucm91bmQoTWF0aA0KCQkJCS5yYW5kb20oKSAqIDg5OTk5OSArIDEwMDAwMCkgKyAnJykpDQoJCQlfQ09ORklHXy51c2VyID0gR01fZ2V0VmFsdWUoJ2pzeGxfdXNlcicsICcnKQ0KCQkJaWYgKF9DT05GSUdfLnVzZXIpIHsNCgkJCQlpZiAoX0NPTkZJR18udXNlci5sb2dpbl9kYXRlICYmIChfQ09ORklHXy51c2VyLmxvZ2luX2RhdGUgIT0gbmV3IERhdGUoKS5zZXRIb3VycygwLCAwLCAwLA0KCQkJCQkJMCkpKSB7DQoJCQkJCV9DT05GSUdfLnVzZXIgPSAnJw0KCQkJCQlHTV9zZXRWYWx1ZSgnanN4bF91c2VyJywgJycpDQoJCQkJfQ0KCQkJfQ0KCQkJZG9jdW1lbnQuY29va2llID0gJ3VpZD0wO3BhdGg9L3Bvc3Q7ZXhwaXJlcz0nICsgbmV3IERhdGUoRGF0ZS5ub3coKSAtIDEyOTYwMDAwMDApLnRvR01UU3RyaW5nKCkNCgkJCWRvY3VtZW50LmNvb2tpZSA9ICd0b2tlbj0wO3BhdGg9L3Bvc3Q7ZXhwaXJlcz0nICsgbmV3IERhdGUoRGF0ZS5ub3coKSAtIDEyOTYwMDAwMDApLnRvR01UU3RyaW5nKCkNCgkJCWNvbnN0IHRva2VucyA9IGRvY3VtZW50LmNvb2tpZQ0KCQkJaWYodG9rZW5zKXsNCgkJCQl0b2tlbnMuc3BsaXQoJzsnKS5mb3JFYWNoKGl0ZW0gPT57DQoJCQkJCWNvbnN0IGFyciA9IGl0ZW0uc3BsaXQoJz0nKQ0KCQkJCQlpZihhcnIubGVuZ3RoID4gMSAmJiAoYXJyWzBdLnJlcGxhY2UoL1xzKi9nLCIiKSA9PSAndWlkJyB8fCBhcnJbMF0ucmVwbGFjZSgvXHMqL2csIiIpID09ICd0b2tlbicpKXsNCgkJCQkJCWRvY3VtZW50LmNvb2tpZSA9IGFyclswXS5yZXBsYWNlKC9ccyovZywiIikgKyAnPScgKyBhcnJbMV0ucmVwbGFjZSgvXHMqL2csIiIpICsnO3BhdGg9LztleHBpcmVzPScgKyBuZXcgRGF0ZShEYXRlLm5vdygpICsgMTI5NjAwMDAwMCkudG9HTVRTdHJpbmcoKQ0KCQkJCQkJc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShhcnJbMF0ucmVwbGFjZSgvXHMqL2csIiIpLGFyclsxXS5yZXBsYWNlKC9ccyovZywiIikpDQoJCQkJCX0NCgkJCQl9KQ0KCQkJfQ0KCQkJLy8gY29uc3QgaW5mbyA9IEdNX2dldFZhbHVlKCdsYXN0aW5nX2hhaWppYW9fdG9rZW4nLCAnJykNCgkJCS8vIGlmIChpbmZvKSB7DQoJCQkvLyAJZG9jdW1lbnQuY29va2llID0gInVpZD0iICsgaW5mby51aWQNCgkJCS8vIAlkb2N1bWVudC5jb29raWUgPSAidG9rZW49IiArIGluZm8udG9rZW4NCgkJCS8vIAlzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCd1aWQnLGluZm8udWlkKQ0KCQkJLy8gCXNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ3Rva2VuJyxpbmZvLnRva2VuKQ0KCQkJLy8gfQ0KCQkJY29uc3QgdGFyZ2V0Q29uc3VtZXIgPSBuZXcgQmFzZUNvbnN1bWVyDQoJCQl0YXJnZXRDb25zdW1lci5wYXJzZSgpDQoJCX0sDQoJCV9DT05GSUdfDQoJfQ0KfSkoKTsNCg0KKGZ1bmN0aW9uKCkgew0KCWlmICh1bnNhZmVXaW5kb3cud3RfaGFpamlhb19zY3JpcHQpIHsNCgkJYWxlcnQoJ+WtmOWcqOWkmuS4queJiOacrOiEmuacrO+8jOivt+ajgOafpeWQjuWIoOmZpOS9jueJiOacrOiEmuacrOWGjeWIt+aWsOmhtemdoicpDQoJCXJldHVybg0KCX0NCgl1bnNhZmVXaW5kb3cud3RfaGFpamlhb19zY3JpcHQgPSB0cnVlDQoJc3VwZXJWaXAuc3RhcnQoKTsNCn0pKCk7
Add Comment
Please, Sign In to add comment