xiaomianao666

插件名:global_【屏蔽广告】屏蔽谷歌广告、百度广告、知乎广告、隐藏谷歌和百度搜索

Feb 28th, 2024
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:网页插件¥js_url¥global_【屏蔽广告】屏蔽谷歌广告、百度广告、知乎广告、隐藏谷歌和百度搜索@base64://Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgICAgICAgIOOAkOWxj+iUveW5v+WRiuOAkeWxj+iUveiwt+atjOW5v+WRiuOAgeeZvuW6puW5v+WRiuOAgeefpeS5juW5v+WRiuOAgemakOiXj+iwt+atjOWSjOeZvuW6puaQnOe0ouWinuW8uueZvuW6puaQnOe0oue7k+aenOeahOWQhOenjeW5v+WRiuetieetie+8iOi/h+a7pOaJgOaciemHh+eUqOiwt+atjOiBlOebn+WSjOeZvuW6puiBlOebn+etieW5v+WRiuiBlOebn+eahOW5v+WRiu+8iQovLyBAbmFtZXNwYWNlIGh0dHA6Ly9nb25nanUuZGFkaXlvdWh1aTAzLmNuL2FwcC90b29sL3lvdWhvdS9pbmRleC5odG1sCi8vIEB2ZXJzaW9uICAgICAgICAgICA0LjgwMgovLyBAZGVzY3JpcHRpb24gICAgICDlvLrlipvmqKHlvI/lj6/pmpDol4/lpKfpg6jliIbmgqzmta7lub/lkYrvvIzmlrDlop50d2l0dGVy5ZKMWW91dHViZeW+ruWNmuinhumikeS4i+i9veS7peWPiuW5v+WRiui/h+a7pO+8jOWPr+aMiee9keWdgOWSjOWFs+mUruivjeWxj+iUvei/h+a7pOeZvuW6puiwt+atjOW/heW6lGJpbmczNjDlvq7kv6Hlvq7ljZrnn6XkuY7osYbnk6NC56uZ55qE5pCc57Si57uT5p6c44CB5bGP6JS96LC35q2M5o6o5bm/55qE5bm/5ZGK5ZKM5Y6755+l5LmO5bm/5ZGK44CBY3NkbuW5v+WRiuOAgeWOu+eZvuW6puaQnOe0ouW5v+WRiuOAgeWOu+eZvuW6puefpemBk+W5v+WRiuOAgeWOu+eZvuW6puaWh+W6k+W5v+WRiuOAgeWOuzM2MOaQnOe0ouW5v+WRiuOAgeWOu+W/heW6lEJpbmfmkJzntKLlub/lkYrjgIHnmb7luqbmloflupPljrvlub/lkYrjgIHljrvnmb7luqblnKjliKvnmoTnvZHnq5nnmoTmjqjlub/lub/lkYrvvIznp7vpmaTnn6XkuY7nmoTlvLrliLbnmbvpmYblvLnnqpfjgILljrvosYbnk6Plub/lkYrjgIHljrtC56uZ5bm/5ZGKCi8vIEBpY29uICAgIGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBSUFBQUFDQUNBTUFBQUQwNEpINUFBQUFCR2RCVFVFQUFMR1BDL3hoQlFBQUFBRnpVa2RDQUs3T0hPa0FBQU1BVUV4VVJVeHBjUUNJLy8vLy93S0ovMENtL3htVS94YVMvKzMzLzlmcy8wU28vd1NLL3cyTy93Q0kvd0dJLzkvdy93Q0kvKy80LzFDdC93Q0kvd2lNL3hXUy8rcjEvL0g0L3dhTC8rMzMveEdRL3dDSS81L1MvNFhHLy9mNy82L2EvLzMrL3gyVy8vYjcveG1VL3hDUC95Q1gvN1hjL3d1Ti8xT3YvM2EvLzdIYi95NmUvdzZQLzUvVC8yKzgvLzMrLy83Ly8vcjgvM2ZBL3dlTC96T2cveEtRLzkvdy8vbjgveHlWLytqMC85bnQveW1iLy9YNi8vdjkvM3pDLzl2dS80UEYvL0w1LytIeC96ZWkvNkxVL3dtTi93R0ovL0Q0L3dLSi85SHAvMEtuL3lTWi93Q0kvd0NJLzUvUy8xQ3QvMUN0LzQvTC93Q0kvMkMxLzcvaC95S1kvMnk2LzBhcC95ZWEvOGJsLzF1ei94T1IveGVULytUei80ZkgvK3oyL3hDUS8xcXkvM0c5LzMvRC81alAvOHJtLytiei8vNy8vMCt0LzdyZi8xaXgvNm5YLzVITS94V1MvM3ZCLzdMYi84M28vMk8yLytYei82N2EvMXl6LzJpNS95T1kvMHlzLzlEcC8vUDUvMWV3Lzc3aC8wMnMvM08rLzRERS83YmQvNXZRLzhIaS96MmsvMSsxL3lDWC95eWQvL3o5LzFDdC81WE4vK24xLzNuQS96bWkvMzNDL3p1ay8yTzIvMlczLzZqVy8xNjAvOWJzLzdqZS8zQzgvOVRyLzhMaS80L0wvNXJRLzVUTi80ckovMkcyLzk3dy95K2UvOWJzLzd6Zy96YWgvMmk1LytmMC8yRzIvd0NJLzlYci85enYvOUxxLzJ5Ny80ekovMlc0L3hDUC8rZjAvMGlxL3llYi83bmUvNi9hLzBTby8rbjEvOExqL3hlVC82ZlcvOVByLzBDbS84amwvMnE2LzQzSy8ybTUvK3YyLytMeC8rYnovenFqLzlydS84ZmwveGFTLzFhdy82VFYvNTNTLzQ3Sy93Q0kvd0NJLzcvaC93Q0kveUNYLzcvaC93Q0kvNS9TLzhQai84bm0vN1BjLzR2Si80L0wvejJsLzA2cy82clgvODdvLytEdy82blgveHlWL3pDZS8rMzIvejJrLzkvdy8rLzMveUNYLzVQTi8vUDUvNVBNLytQeS8vUDYvNnJZL3lxYy8wdXIvNmJWLzJXMy8wK3QveHFWLys3My85anMvd0tKLzVmUC8rcjEvM0s5LzRySS8rbjEvNzdoLzZ6WS8yYTQvOTN2Ly8vLy84WGsvMGFwLzVUTi83emcvMUN0L3dDSS8vLy8vMWlEdnVRQUFBRCtkRkpPVXdEKy92dno3dTd5N3U3NytQMzhCL1VFaU9qNTl2ajUrZmo0OEQ3ditpYjk5UHIxMEx6eCtPL3Y4UEw0NysvOC9mdnYrZkgzOWZ2MDkvVHkrZnZ2OU8vNTl2SHYrUHo1K3ZQdzgvYjNRbnlIUmVHR0Z2VHY3dkx3OFBmMjl1NzQrUER2Ny9EeTkvN3Y4UER3OGZmdjhmUHc5L0R3OFBQdjgvbnc4ZkR2Ny9IdzhmSHY5UEw4Z08vNDcvSHY4ZS91N3ZEMDhPLzA4Tzd3Ny9EdjlmRHU4Zkh1OS9IeDlQVDA3L0R3MC9IdjgvRXA4UGZ4OS9EMDhQSHU3dkQ0OXZidzlQTHM4Tzd3OFBMekdkKzdHdUJEOHZIdjd2RHY3dTd5OWU3dThQanY5dkx3OGZUdjlmbnc5UER1Ni9EMCtmVDU4UGZ0N3ZYdTd1UHc4L0x3OGVpQjl5WnpMUUFBQmlWSlJFRlVlTnJ0bTNsWVZGVVV3T2RCYVF6N0pvamdzSytDc3NTV2hMS0tnQXVDRVNBZ1dBbG1rSWlJSmdpSVpacUtWbHFZbWVXdXFaWG1rbEpLN3JabisyYTAyNzV2ZDN6enpjQ2NPK3Q5eTh6dDY1dnpEeC96N2ozbk4vUHV1L2U4czBna2FuSEtMemgzOWhTRFRDak1xYlBuQ3ZLZEpMcmtqTE1MTXBPNE9KL1JNdTh3d1JHWlVSd25PT0QyaHdjZ00wdkFjR2gvbUJjeXUzZ05BL1p6RVFYSnl4LzQvYjBRRlhsY2RSY2NBaEFsQ1ZDdXhLV0ltaXhWMkovaVNBL0FjUW9MTUJGUmxJbnMvdXRDRThERlNUSUpVWlZKRW1lNkFNNlNRTG9BZ1pMSmRBRW1TM0xwQXVSS0dMb0FqRVRRZEx2ZFFidUNwZ3I2RGtJQU1rTXV5UlV5NHpaN0dnRFNoaTU1djR3N2tXbHVnSmlWM1hJb1hUZGJteE1nZU8wdGNrM1o4ckRVWEFCRGx4MlY2NUxuTnJtYUE4RE5Pd3NZSGZQbURlQy94OVlHbXhvZzRUVm8wSE5SQ1hLYk5nUjg0aDVxYTBxQXh1cFI4UHVxak1VdDhvUlFLWEdtQWtoT2p3S0d4aGFwNzNqRU1uZHdaWWkzbXlrQVl1ZFlBU05KbS9FMUh6ejlHTGphdDkxZmJJRDNXNkQ1cGhydHB6Nm1hQ3dZNFRQTFYwUUFadXBpK0xnVkw3VFR2VGZ1dUJHTUdsMWRLQktBZlVnZE5EOHpSLy9oazczNkNUQXlhc1JOSWdCWVYwS2RWbUZwaHM4KysrWW1NRnoyekJLQkFCN1lsaS83TXB6Z2lQNzZaVWc4SjFZQVFIRGtuZkNtdG80bmRESjJQd0FSZ283ekJJaUloZyszMzNwZjhvZWJPVGdUSW13OHlBUEFMZlVLMEpFMXJaU2pxM1h2SzNEbFBxWFhiZElEOE0yTGNNcy91andPY1pmWVgrSFdNZU1OT3c0QU8zekExR04zMlNKK3N1U2tET2g1S1k0WVlCOUE3ejRTSThCdEhOL2JxVlpWU3d6UU1qRG5qL1pzZ1g1M3h6OER5bllSQXp5aXBoN1hiQzNJUGx4TW54QURYQWNYY0UrN2xQL1gveHN1cHNIOEFGaGY3NUFydndYUU9oclR3eHRBTHQvUDQwRklUcGRwYU9FSzhFczhkTFNxU2ppWjMvRFpyV0Qyejd3QWJQd1B6d2RLNWo5RTdPV2d0RHZnSG5UcFJCcy9BSVJLTUhmVDUrTU9Jdk92UHduTlA4dTZMOWZ3QlZDY1NJbEFXV2V2VVJlRHNjRzhwOFYvS1E0QkFRQUl1VzZEdnA2czlsMkR6c0M4NTZINU5XM0tNMGdRQU92cjFTZVJuZStaSVUyNDk5Ui9RU0FBNjVmVlFNM3lCVGFNVHVldEM0d1orVGJ3bmdRRHNML3R3bUtJb0IyVGtMWkRsemdxUFJsZUZBR0FYVjA1ME11Ukg2aUVoMFRNSnJoUVJyVTI0bk5GQVdBUjBzS3NzSUNBaCtwQ1JpUU1GL2pjcmVXOGlRVEFTdmhKK0hwWXRpMkQvY3cyRlBxT2ZZZDE3RmZpQVNoT0dMaER1MGQvbEFMM3FpenYyM1ZORWhNQW9ZVEwwRitFTjZWOGVZWHVLZUlDYUFaSitpVlJmMnhDYkFDRUttYTdhNWovTkRKRC8zRHhBUlNCc2pKZ3ZudXVoNkhCcGdCZzN4dm5ibEdaLzNhekVkZlZOQUFJdmFPMC81VlJ2OVZVQU5jcUFRWWhDNEFGd0FKZ0FiQUFXQUFzQUJZQUM0QUY0SDhLVUdlME1JSVV3UDVIamdEOXdlcXR6WmtpQUZqWDNLOGM5eUV4Z0RybmxOUWdGUWdnWGQzRFBWVGJBTi82N3ZNUUFCQ3o4Z08xcWpCaUFIUUlKcXpLaWpKNEF1Q2hteDgrSndkQVR6OElneENKZW9MbGhnRnNRKy9CUWpjNll5Y0cwblpZWVVUNTdBaU9BSEVwN3hrUDNTQ0RpY3VoVlRENmN5WFZqUU1BSGtNcHI5S2Y5ak9ZdXJXTnhuNUVyWGk5UGdELzdYM3dCa1lieW5ZWVNWNW5UQy9EcWhJU0NBQjhaOEZFVVptaDBBMGlTTjk3SEhrTEpyQy9MelFDMExnT0pvcXVOeHk2UVVRRkROTDZIajFWQ2RvQWVKMUxVcjN4aEJ0UkNZZDF3d0dzS2lGY0Q4Q0cycEZnM05aS2twUWpZUkdMdmFweUQ2OUt3QUVleFNMSmRTRmtOWDdFWlR4MjgyQzgzcXJsdUFaQUc1WW9LdjdDamxBdmgwSW1adDhDTEd1Und3d0FhQ1NLTnVhUUYxbHlLdVZpVnJSQU8zLytwdno3QXA0b0NsckJwY2FUYXpFYmZxT1Y4anVYb2hXaEFBaUZyNUxKOVlsc1ZUaFhkWHdLR3ZlTTZOUnB2ck4zRDNkbC9FbzZDOWZGYTVtUHIrN2dvNHB2VWF2dmVqL012Ti9sQkg2SytKZjFscjZxVG0yUCthbVVyeG9oaGMwbHFsSWp6OVFTL2txRWxYWlhwT3lYdSt0MGxzZ0JCQmEzWncvNlR0Qjhoblo1Zng3OUJnZnFMUjdVbTF5b3QvbFFiM1NpM3VwRnY5bU5acnZmdjhxR3g1MjA3TzlVdGQ3dXBkWHl1WGVnNlRXUHlpNmMvOTlwKzZYZitFeS85WnVWOCtac2ZqK3ZzLy9lNldKQjRJWFRwclY5K2tKZ3dVWFkvbjhWY1Q3UkY1QW1RQWdBQUFBQVNVVk9SSzVDWUlJPQovLyBAbWF0Y2ggICAgICAgICo6Ly8qLmJhaWR1LmNvbS8qCi8vIEBtYXRjaCAgICAgICAgKjovLyouZ29vZ2xlLmNvbS8qCi8vIEBtYXRjaCAgICAgICAgKjovLyouYmluZy5jb20vKgovLyBAbWF0Y2ggICAgICAgICo6Ly8qLnNvLmNvbS8qCi8vIEBtYXRjaCAgICAgICAgKjovLyouemhpaHUuY29tLyoKLy8gQG1hdGNoICAgICAgICAqOi8vKi5kb3ViYW4uY29tLyoKLy8gQG1hdGNoICAgICAgICAqOi8vKi53ZWliby5jb20vKgovLyBAbWF0Y2ggICAgICAgICo6Ly90d2l0dGVyLmNvbS8qCi8vIEBtYXRjaCAgICAgICAgKjovLyoueW91dHViZS5jb20vKgovLyBAbWF0Y2ggICAgICAgICo6Ly8qLmJpbGliaWxpLmNvbS8qCi8vIEBtYXRjaCAgICAgICAgKjovLyouY3Nkbi5uZXQvKgovLyBAbWF0Y2ggICAgICAgICo6Ly8qLyoKLy8gQGluamVjdC1pbnRvIGNvbnRlbnQKLy8gQHJlcXVpcmUgaHR0cHM6Ly9jZG4uc3RhdGljZmlsZS5vcmcvanF1ZXJ5LzIuMS40L2pxdWVyeS5taW4uanMKLy8gQHJlcXVpcmUgaHR0cHM6Ly9jZG4uc3RhdGljZmlsZS5vcmcvc3dlZXRhbGVydC8yLjEuMi9zd2VldGFsZXJ0Lm1pbi5qcwovLyBAcmVxdWlyZSBodHRwczovL2Nkbi5zdGF0aWNmaWxlLm9yZy9qcXVlcnkucXJjb2RlLzEuMC9qcXVlcnkucXJjb2RlLm1pbi5qcwovLyBAcmVxdWlyZSBodHRwczovL2Nkbi5zdGF0aWNmaWxlLm9yZy9odG1sMmNhbnZhcy8wLjUuMC1iZXRhNC9odG1sMmNhbnZhcy5qcwovLyBAcmVxdWlyZSBodHRwczovL2Nkbi5zdGF0aWNmaWxlLm9yZy9lY2hhcnRzLzUuMC4xL2VjaGFydHMubWluLmpzCi8vIEBncmFudCAgICAgICAgR01fYWRkU3R5bGUKLy8gQGdyYW50ICAgICAgICBHTV9kb3dubG9hZAovLyBAZ3JhbnQgICAgICAgIEdNX3htbGh0dHBSZXF1ZXN0Ci8vIEBncmFudCAgICAgICAgR01fZ2V0UmVzb3VyY2VUZXh0Ci8vIEBydW4tYXQgZG9jdW1lbnQtc3RhcnQKLy8gQGdyYW50ICAgICAgICAgICAgIHVuc2FmZVdpbmRvdwovLyBAZ3JhbnQgICAgICAgICAgICAgR01fc2V0Q2xpcGJvYXJkCi8vIEBncmFudCAgICAgICAgICAgICBHTV9zZXRWYWx1ZQovLyBAZ3JhbnQgICAgICAgICAgICAgR01fZ2V0VmFsdWUKLy8gQGdyYW50ICAgICAgICAgICAgIEdNX2RlbGV0ZVZhbHVlCi8vIEBncmFudCAgICAgICAgICAgICBHTV9vcGVuSW5UYWIKLy8gQGdyYW50ICAgICAgICAgICAgIEdNX3JlZ2lzdGVyTWVudUNvbW1hbmQKLy8gQGdyYW50ICAgICAgICAgICAgIEdNX3VucmVnaXN0ZXJNZW51Q29tbWFuZAovLyBAZ3JhbnQgICAgICAgICAgICAgR00uZ2V0VmFsdWUKLy8gQGdyYW50ICAgICAgICAgICAgIEdNLnNldFZhbHVlCi8vIEBncmFudCAgICAgICAgICAgICBHTV9pbmZvCi8vIEBncmFudCAgICAgICAgICAgICBHTV9ub3RpZmljYXRpb24KLy8gQGdyYW50ICAgICAgICAgICAgIEdNX2dldFJlc291cmNlVGV4dAovLyBAZ3JhbnQgICAgICAgICAgICAgR01fb3BlbkluVGFiCi8vIEBncmFudCAgICAgICAgICAgICBHTV9kb3dubG9hZAovLyBAbGljZW5zZSAgICAgICAgICAgICBFbmQtVXNlciBMaWNlbnNlIEFncmVlbWVudAovLyBAbm9mcmFtZXMKLy8gQGNvbm5lY3QgICAgIHpoaWh1LmNvbQovLyBAY29ubmVjdCAgICAgYmFpZHUuY29tCi8vIEBjb25uZWN0ICAgICBiYWlkdWNvbnRlbnQuY29tCi8vIEBjb25uZWN0ICAgICBkYWRpeW91aHVpMDIuY24KLy8gQGNvbm5lY3QgKgovLyBAZG93bmxvYWRVUkwgaHR0cHM6Ly91cGRhdGUuZ3JlYXN5Zm9yay5vcmcvc2NyaXB0cy80NjA3NDMvJUUzJTgwJTkwJUU1JUIxJThGJUU4JTk0JUJEJUU1JUI5JUJGJUU1JTkxJThBJUUzJTgwJTkxJUU1JUIxJThGJUU4JTk0JUJEJUU4JUIwJUI3JUU2JUFEJThDJUU1JUI5JUJGJUU1JTkxJThBJUUzJTgwJTgxJUU3JTk5JUJFJUU1JUJBJUE2JUU1JUI5JUJGJUU1JTkxJThBJUUzJTgwJTgxJUU3JTlGJUE1JUU0JUI5JThFJUU1JUI5JUJGJUU1JTkxJThBJUUzJTgwJTgxJUU5JTlBJTkwJUU4JTk3JThGJUU4JUIwJUI3JUU2JUFEJThDJUU1JTkyJThDJUU3JTk5JUJFJUU1JUJBJUE2JUU2JTkwJTlDJUU3JUI0JUEyJUU1JUEyJTlFJUU1JUJDJUJBJUU3JTk5JUJFJUU1JUJBJUE2JUU2JTkwJTlDJUU3JUI0JUEyJUU3JUJCJTkzJUU2JTlFJTlDJUU3JTlBJTg0JUU1JTkwJTg0JUU3JUE3JThEJUU1JUI5JUJGJUU1JTkxJThBJUU3JUFEJTg5JUU3JUFEJTg5JUVGJUJDJTg4JUU4JUJGJTg3JUU2JUJCJUE0JUU2JTg5JTgwJUU2JTlDJTg5JUU5JTg3JTg3JUU3JTk0JUE4JUU4JUIwJUI3JUU2JUFEJThDJUU4JTgxJTk0JUU3JTlCJTlGJUU1JTkyJThDJUU3JTk5JUJFJUU1JUJBJUE2JUU4JTgxJTk0JUU3JTlCJTlGJUU3JUFEJTg5JUU1JUI5JUJGJUU1JTkxJThBJUU4JTgxJTk0JUU3JTlCJTlGJUU3JTlBJTg0JUU1JUI5JUJGJUU1JTkxJThBJUVGJUJDJTg5LnVzZXIuanMKLy8gQHVwZGF0ZVVSTCBodHRwczovL3VwZGF0ZS5ncmVhc3lmb3JrLm9yZy9zY3JpcHRzLzQ2MDc0My8lRTMlODAlOTAlRTUlQjElOEYlRTglOTQlQkQlRTUlQjklQkYlRTUlOTElOEElRTMlODAlOTElRTUlQjElOEYlRTglOTQlQkQlRTglQjAlQjclRTYlQUQlOEMlRTUlQjklQkYlRTUlOTElOEElRTMlODAlODElRTclOTklQkUlRTUlQkElQTYlRTUlQjklQkYlRTUlOTElOEElRTMlODAlODElRTclOUYlQTUlRTQlQjklOEUlRTUlQjklQkYlRTUlOTElOEElRTMlODAlODElRTklOUElOTAlRTglOTclOEYlRTglQjAlQjclRTYlQUQlOEMlRTUlOTIlOEMlRTclOTklQkUlRTUlQkElQTYlRTYlOTAlOUMlRTclQjQlQTIlRTUlQTIlOUUlRTUlQkMlQkElRTclOTklQkUlRTUlQkElQTYlRTYlOTAlOUMlRTclQjQlQTIlRTclQkIlOTMlRTYlOUUlOUMlRTclOUElODQlRTUlOTAlODQlRTclQTclOEQlRTUlQjklQkYlRTUlOTElOEElRTclQUQlODklRTclQUQlODklRUYlQkMlODglRTglQkYlODclRTYlQkIlQTQlRTYlODklODAlRTYlOUMlODklRTklODclODclRTclOTQlQTglRTglQjAlQjclRTYlQUQlOEMlRTglODElOTQlRTclOUIlOUYlRTUlOTIlOEMlRTclOTklQkUlRTUlQkElQTYlRTglODElOTQlRTclOUIlOUYlRTclQUQlODklRTUlQjklQkYlRTUlOTElOEElRTglODElOTQlRTclOUIlOUYlRTclOUElODQlRTUlQjklQkYlRTUlOTElOEElRUYlQkMlODkubWV0YS5qcwovLyA9PS9Vc2VyU2NyaXB0PT0KLyoK6ZyA6KaB5pu05aSa5Yqf6IO95ZKM5bu66K6u55qE6K+d77yMCuasoui/jui3n+W4luWPjemmiArjgJDnvZHnq5nlub/lkYrkvJjljJbjgJHnmb7luqbotLTlkKfjgIHnmb7luqbnn6XpgZPjgIHnmb7luqbmkJzntKLnrYnnmb7luqbns7vljrvlub/lkYrkvJjljJYK5aSn5aSa5pWw572R56uZ6Iul5L2/55So5LqG6LC35q2M5bm/5ZGK44CB55m+5bqm5bm/5ZGK55qE6aG16Z2i6YO95bCG5Lya6KKr5YeA5YyW5bm26ZqQ6JeP55u45YWz5bm/5ZGKCumSiOWvueWkp+mDqOWIhue9keermemAmueUqOeahOW5v+WRiuagt+W8j+i/m+ihjOWxj+iUvee+juWMlgrlj6/mjInnvZHlnYDlkozlhbPplK7or43ov4fmu6TmkJzntKLnu5PmnpwK5oKo5Y+v6Ieq55Sx5L+u5pS5572R5Z2A5ZKM5YWz6ZSu6K+N6K+N5bqT5LiU5Y+v6ZqP5oSP5a+85YWl5a+85Ye65aSH5Lu9Cui/h+a7pOWkp+WkmuaVsOe9keermeS4reiwt+atjOiBlOebn+eZvuW6puiBlOebn+eahOW5v+WRigrljrvnn6XkuY7lub/lkYos56e76Zmk55+l5LmO5a6Y5pa55LiN55m75b2V5LiN6K6p5rWP6KeI55qE55m76ZmG5by556qXCnR3aXR0ZXLlkoxZb3V0dWJl5b6u5Y2a6KeG6aKR5LiL6L295Lul5Y+K5bm/5ZGK6L+H5rukCuW8uuWMluefpeS5jkLnq5nosYbnk6PmsrnnrqHnmoTov4fmu6TvvIzov4fmu6Tlip/og73lr7nmkJzntKLnu5PmnpzjgIHor4TorrrjgIHmmLXnp7DnrYnlj6/ku6XlkIzml7bnlJ/mlYgKCuOAkOaooeWdl+WMluiuvuiuoeWPr+iHqueUseeahOiHquWumuS5ieW8gOWFs+WKn+iDveOAkQroi6Xlm6DkuLrkvb/nlKjnmoTnvZHnq5nmm7TmlrDogIzmiJHku6zmnKrlj4rml7bmm7TmlrDlr7zoh7Tpg6jliIblip/og73lvILluLjnmoTkvaDpg73lj6/ku6Xoh6rnlLHpgInmi6nlhbPpl63lkozlvIDlkK/jgIIKCuOAkOaQnOe0oue7k+aenOS8mOWMluOAkeiHquWKqOmakOiXj+aQnOe0oue7k+aenOS4reeahOWQhOenjeW5v+WRiu+8jArlj6/mjInnvZHlnYDlkozlhbPplK7or43lsY/olL3ov4fmu6TmkJzntKLnu5PmnpzvvIzlt7LmlK/mjIHnmoTmkJzntKLvvJrnmb7luqbjgIHosLfmrYzjgIHnmb7luqbjgIHlv4XlupRiaW5n44CBMzYw562JCuS+i+WmguS9oOWPr+S7peiHquihjOa3u+WKoOmcgOimgeWxj+iUveeahOe9keWdgOaIluWImeWFs+mUruivje+8jOWmgu+8mueZvuWutuWPt+OAgWJhaWppYWhhby5iYWlkdS5jb23kuYvnsbvnmoQKCuOAkOaWsOWinuOAkXR3aXR0ZXLlkoxZb3V0dWJl5b6u5Y2a6KeG6aKR5LiL6L295Lul5Y+K5bm/5ZGK6L+H5ruk44CC5pKt5pS+6YGH5Yiw5bm/5ZGK5Y+v6Ieq5Yqo6Lez6L+H5ZKM5bGP6JS95L2/55So6KeG6aKR5LiL6L295Yqf6IO96ZyA6Ieq5bim5qKv5a2Q77yM5LiN54S25peg5rOV5LiL6L2944CCCuinhumikeino+aekOWKn+iDveWfuuS6juinhumikeino+aekOermeWunueOsOOAguaEn+iwouebuOWFs+e9keermeeahOacjeWKoQoK55m95ZCN5Y2V6Kej5Yaz5pyJ5Lqb572R6aG16KKr6ZSZ6K+v6L+H5ruk55qE5oOF5Ya177yM6K6+572u55m95ZCN5Y2V5ZCO5o+S5Lu25bCG5Zyo5ZCN5Y2V55qE6aG16Z2i5YGc5q2i6L+Q6KGMCgoyMDIzLjA2LjE5ICDooqvliqjljrvlub/lkYrlop7liqDlr7npobXpnaLmgqzmta7lub/lkYrnmoTliKDpmaTog73lipvjgILog73lsY/olL3lpKfpg6jliIbniZvnmq7nmaPlub/lkYrkuobjgIIKLeWmguaenOivr+adgOivt+iHquihjOWFs+mXreiiq+WKqOWOu+W5v+WRigot5aaC5p6c6aG16Z2i5pi+56S66ZSZ6K+v5Y+v6Ieq6KGM5YWz6Zet6KKr5Yqo5Y675bm/5ZGKCi3lpoLmnpznvZHpobXlvILluLjlj6/lnKjmj5Lku7bnrqHnkIblmajph4zmjpLpmaTlnKjor6XnvZHnq5nnvZHlnYDlhoXov5DooYwKCuWinuWKoOWvueeugOS5pueahOW5v+WRiui/h+a7pOWSjOafkE1QNOS4i+i9veermeeahOW5v+WRiui/h+a7pAoKCuivtOaYju+8mgrlo7DmmI7vvJror7fmgqjnn6XmmZPmnKzmj5Lku7bmnKzmmK/kuKrkurrmtYvor5Xoh6rnlKjvvIzmnKzkuI3lroznvo7kuZ/kuI3kv53or4Hlj6/nlKjmgKfjgIIK55u45YWz5Yqf6IO95Y+K5Luj56CB5Z2H5p2l6Ieq5LqS6IGU572R5Y+K572R5Y+L5YiG5Lqr77yM5oiR5Lus5LuF5YGa5LqG55u45YWz5Yqf6IO955qE5pW05ZCI44CCCuWmguaXoOaEj+S4reS+teeKr+S6huWTquS4quS8geS4muaIluS4quS6uuetieeahOefpeivhuS6p+adg++8jOivt+iBlOezu+aIkeS7rOWwhuWPiuaXtuWIoOmZpOetieebuOWFs+WkhOeQhgoKMjAyMy4wNi4xOSAg6KKr5Yqo5Y675bm/5ZGK5aKe5Yqg5a+56aG16Z2i5oKs5rWu5bm/5ZGK55qE5Yig6Zmk6IO95Yqb44CC6IO95bGP6JS95aSn6YOo5YiG54mb55qu55mj5bm/5ZGK5LqG44CCCuWmguaenOivr+adgOivt+iHquihjOWFs+mXreiiq+WKqOWOu+W5v+WRigoKICAgKi8KCgp2YXIgbW1tamh5PTA7CnZhciBiaWxpMjJnaXJsPXRydWU7CgpmdW5jdGlvbiBpc01vYmlsZSgpIHsKbGV0IGZsYWc9IGZhbHNlOwppZiAoKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goLyhwaG9uZXxwYWR8cG9kfGlQaG9uZXxpUG9kfGlvc3xpUGFkfEFuZHJvaWR8TW9iaWxlfEJsYWNrQmVycnl8SUVNb2JpbGV8TVFRQnJvd3NlcnxKVUN8RmVubmVjfHdPU0Jyb3dzZXJ8QnJvd3Nlck5HfFdlYk9TfFN5bWJpYW58V2luZG93cyBQaG9uZSkvaSkpKSB7CiBmbGFnPSB0cnVlOwp9CnJldHVybiBmbGFnCn0KCkdNX3NldFZhbHVlKCd6a2R6X25hbWUnLCAnYmFpZHVnYScpOwoKZnVuY3Rpb24ga2dwaW5nYmlzaW5mbygpIHsKCiAgaWYgKEdNX2dldFZhbHVlKCdhbGxjb25maWcnKSkgewogICAgcmV0dXJuOwogIH0KICBpZiAoR01fZ2V0VmFsdWUoJ2hhc1J1bmtncGluZ2Jpc0JlZm9yZScpKSB7CiAgcmV0dXJuOwogIH0KICBHTV9zZXRWYWx1ZSgnaGFzUnVua2dwaW5nYmlzQmVmb3JlJywgdHJ1ZSk7CiAgc3dhbCh7CiAgIHRpdGxlOiAi5qyi6L+O5oKo44CB5o+S5Lu25bey6ZKI5a+55aSn6YOo5YiG572R56uZ6YCa55So55qE5bm/5ZGK5qC35byP6L+b6KGM5bGP6JS9576O5YyWIiwKICAgIHRleHQ6ICLmnKzmj5Lku7bmj5DkvpvkuoblvojlpJroh6rlrprkuYnlip/og73vvIzlj6/ku6Xoh6rnlLHlvIDlkK8v5YWz6Zet55u45bqU5Yqf6IO977yM5pys5qyh5pu05paw5paw5aKe5LqG6KKr5Yqo5Y675bm/5ZGK44CC6KKr5Yqo5Y675bm/5ZGK5bm25LiU5Lya6L+H5ruk5aSn6YOo5YiG572R56uZ55qE5Zu+54mH5oKs5rWu5bm/5ZGK44CC5bu66K6u5byA5ZCv5aKe5Yqg5bm/5ZGK6L+H5ruk5pWI5p6cIiwKICAgIGljb246ICJzdWNjZXNzIiwKICAgIGJ1dHRvbnM6IFsn5pqC5pe25LiN55SoJywgJ+W8gOWQr+iiq+WKqOWOu+W5v+WRiuaooeW8jyddLAogIH0pLnRoZW4oKHZhbHVlKSA9PiB7CiAgICBpZiAodmFsdWUpIHsKICAgbGV0IGFsbGNvbmZpZyA9IEdNX2dldFZhbHVlKCdhbGxjb25maWcnKSB8fCB7fTsKICAgICAgYWxsY29uZmlnLmJhaWR1ID0gYWxsY29uZmlnLmJhaWR1IHx8IHt9OwogICAgICBhbGxjb25maWcuYmFpZHUua2dwaW5nYmlzID0gdHJ1ZTsKICAgICAgR01fc2V0VmFsdWUoJ2FsbGNvbmZpZycsIGFsbGNvbmZpZyk7CiAgICAgICBzd2FsKHsKICAgICAgdGl0bGU6ICLlt7LkuLrmgqjlvIDlkK/ooqvliqjljrvlub/lkYrmqKHlvI/jgILov4fmu6Top4TliJnlkI7nu63kvJrnu6fnu63mm7TmlrDvvIzov4fmu6Top4TliJnlj6/og73kuI3lhbzlrrnmiYDmnInnmoTpobXpnaLjgILlpoLmnpzpobXpnaLmmL7npLrkuI3mraPluLjlj6/lsIblvZPliY3pobXpnaLliqDlhaXnmb3lkI3ljZXjgIHmiJbogIXlnKjmjqfliLbpnaLmnb8t6auY57qn5Yqf6IO9LS3nibnoibLlip/og73lhbPpl60iLAogICAgICBpY29uOiAiaW5mbyIsCiAgICB9KTsKICAgIH0gZWxzZSB7CiAgICBzd2FsKHsKICAgICAgdGl0bGU6ICLmgqjlt7Llj5bmtojooqvliqjljrvlub/lkYrmqKHlvI8s5aaC5p6c5oOz5L2T6aqM6KKr5Yqo5Y675bm/5ZGK5qih5byP5Y+v5Zyo5o6n5Yi26Z2i5p2/LemrmOe6p+WKn+iDvS3nibnoibLlip/og73kuK3lvIDlkK8iLAogICAgICBpY29uOiAiaW5mbyIsCiAgICB9KTsKICB9CiAgfSk7CiAgICAgfQoKKGZ1bmN0aW9uKCkgewoJbGV0IHdpbmRvZHdob3N0PXdpbmRvdy5sb2NhdGlvbi5ob3N0OwpsZXQgaXBkY2hjZWs9L14oXGQrKVwuKFxkKylcLihcZCspXC4oXGQrKSQvOwppZiAod2luZG9kd2hvc3QuaW5kZXhPZignOicpID4wIHx8IGlwZGNoY2VrLnRlc3Qod2luZG9kd2hvc3QpPT10cnVlICl7CnJldHVybiBmYWxzZTsKCX0KCWtncGluZ2Jpc2luZm8oKTsKCXZhciBjb25maWdtPSdhSFIwY0hNNkx5OTNkM2N1WkdGa2FYbHZkV2gxYVRBeExtTnVMMkZ3Y0M5MGIyOXNMM1kwTFdKa2RHOXZiQzVvZEcxcyc7Cgljb25maWdtPXdpbmRvdy5hdG9iKGNvbmZpZ20pOwoJICAgR01fcmVnaXN0ZXJNZW51Q29tbWFuZCgi44CQ4pmQICDmjqfliLbpnaLmnb8t54K55Ye76K6+572u44CRIiwgZnVuY3Rpb24oKXsKR01fb3BlbkluVGFiKGNvbmZpZ20sIHthY3RpdmU6ICEwfSk7CiAgICB9KTsKdmFyIGFsbGNvbmZpZz1uZXcgQXJyYXkoKTsKYWxsY29uZmlnPQp7CiJiYWlkdSI6ICAgICAgIHsnYmFpZHVtZW51Jzp0cnVlLCdiYWlkdWxvZ28nOnRydWUsJ2JhaWR1bGlhbmppZSc6dHJ1ZSwnYmFpZHVob3QnOnRydWUsJ2JhaWR1ZXllJzpmYWxzZSwnYmFpZHVjc3MnOmZhbHNlLCdiYWlkdXRicSc6dHJ1ZSwnYmFpZHVqZHEnOnRydWUsJ2tnYmFpZHVlZCc6dHJ1ZSwna2diYWlkdWFkJzp0cnVlLCdrZ2dvb2dsZWVkJzp0cnVlLCdrZ2dvb2dsZWFkJzp0cnVlLCdrZzM2MGVkJzp0cnVlLCdrZzM2MGFkJzp0cnVlLCdrZ2JpbmdlZCc6dHJ1ZSwna2diaW5nYWQnOnRydWUsJ2tndHdpZWQnOnRydWUsJ2tndHdpbXYnOnRydWUsJ2tndHdpYWQnOnRydWUsJ2tneW91ZWQnOnRydWUsJ2tneW91bXYnOnRydWUsJ2tneW91YWQnOnRydWUsJ2tnd2VpeGluZWQnOnRydWUsJ2tnd2VpeGluYWQnOnRydWUsJ2tnZG91YmFuZWQnOnRydWUsJ2tnZG91YmFuYWQnOnRydWUsJ2tnemhpaHVlZCc6dHJ1ZSwna2d6aGlodWFkJzp0cnVlLCdrZ2JpbGllZCc6dHJ1ZSwna2diaWxpYWQnOnRydWUsJ2tnd2VpYm9lZCc6dHJ1ZSwna2d3ZWlib2FkJzp0cnVlLCdrZ3dlaWJvbXYnOnRydWUsJ2tncGluZ2Jpcyc6ZmFsc2UsJ1Byb2FjdGl2ZWx5YWRzJzpmYWxzZSwna2dwaW5nYmlpZnJhbWUnOmZhbHNlLCdhZGRrd3NzYnV0dG9uJzp0cnVlLCdhZGRzc2J1dHRvbic6dHJ1ZSwnYmFpZHVleWVjb2xvcic6J3JnYmEoMjA0LDIzMiwyMDcsMSknfSwKImdvb2dsZSI6ICAgICAgICB7fSwKInNvMzYwIjogICAgICAgIHt9LAoicGluZ2JpdXJsIjogICAgIFtdLAoid2hpdGV1cmwiOiAgICAgW10sCiJwaW5nYmlrdyI6ICAgICBbXSwKICAgIH07CiAgICBpZiAoR01fZ2V0VmFsdWUoJ2FsbGNvbmZpZycpKXsKCSAgIH1lbHNlewoJICAgR01fc2V0VmFsdWUoJ2FsbGNvbmZpZycsIGFsbGNvbmZpZyk7CgkgICB9CnZhciBjb25maWd1cmw9d2luZG93LmxvY2F0aW9uLmhyZWY7CnZhciBjb25maWdtYWluID0gZG9jdW1lbnQuZG9tYWluOwp2YXIgZmF2aWNvbnVybCA9ICJodHRwczovL2Zhdmljb24ueWFuZGV4Lm5ldC9mYXZpY29uL3YyLyI7CnZhciBmYXZpY29udXJsYiA9ICJodHRwczovL3QzLmdzdGF0aWMuY24vZmF2aWNvblYyP2NsaWVudD1TT0NJQUwmdHlwZT1GQVZJQ09OJmZhbGxiYWNrX29wdHM9VFlQRSxTSVpFLFVSTCZ1cmw9IjsKdmFyIGZhdmljbW51cmxiID0gImh0dHBzOi8vdDMuZ3N0YXRpYy5jbi9mYXZpY29uVjI/Y2xpZW50PVNPQ0lBTCZ0eXBlPUZBVklDT04mZmFsbGJhY2tfb3B0cz1UWVBFLFNJWkUsVVJMJnVybD0iOwp2YXIgYWxsY29uZmlndGltZT0xNjYxNzYwMjEwOwp2YXIgYWxsY29uZmlnY3o9MDsKICAgaWYgKEdNX2dldFZhbHVlKCdhbGxjb25maWd0aW1lJykpewogICAJICAgaWYgKHBhcnNlSW50KEdNX2dldFZhbHVlKCdhbGxjb25maWd0aW1lJykpPGFsbGNvbmZpZ3RpbWUpewogICAJICAgCSAgIGFsbGNvbmZpZ2N6PTE7CiAgIAkgICAJICAgIEdNX3NldFZhbHVlKCdhbGxjb25maWd0aW1lJywgYWxsY29uZmlndGltZSk7CiAgIAkgICB9CgkgICB9ZWxzZXsKCSAgIEdNX3NldFZhbHVlKCdhbGxjb25maWd0aW1lJywgYWxsY29uZmlndGltZSk7CgkgICBhbGxjb25maWdjej0xOwoJICAgfQoJICAgaWYgKGFsbGNvbmZpZ2N6PT0xKXsKCSAgIAkgICB2YXIgc2FhbGxjb25maWc9bmV3IEFycmF5KCk7CnNhYWxsY29uZmlnPQp7CiJiYWlkdSI6ICAgICAgeydiYWlkdW1lbnUnOnRydWUsJ2JhaWR1bG9nbyc6dHJ1ZSwnYmFpZHVsaWFuamllJzp0cnVlLCdiYWlkdWhvdCc6dHJ1ZSwnYmFpZHVleWUnOmZhbHNlLCdiYWlkdWNzcyc6ZmFsc2UsJ2JhaWR1dGJxJzp0cnVlLCdiYWlkdWpkcSc6dHJ1ZSwna2diYWlkdWVkJzp0cnVlLCdrZ2JhaWR1YWQnOnRydWUsJ2tnZ29vZ2xlZWQnOnRydWUsJ2tnZ29vZ2xlYWQnOnRydWUsJ2tnMzYwZWQnOnRydWUsJ2tnMzYwYWQnOnRydWUsJ2tnYmluZ2VkJzp0cnVlLCdrZ2JpbmdhZCc6dHJ1ZSwna2d0d2llZCc6dHJ1ZSwna2d0d2ltdic6dHJ1ZSwna2d0d2lhZCc6dHJ1ZSwna2d5b3VlZCc6dHJ1ZSwna2d5b3Vtdic6dHJ1ZSwna2d5b3VhZCc6dHJ1ZSwna2d3ZWl4aW5lZCc6dHJ1ZSwna2d3ZWl4aW5hZCc6dHJ1ZSwna2dkb3ViYW5lZCc6dHJ1ZSwna2dkb3ViYW5hZCc6dHJ1ZSwna2d6aGlodWVkJzp0cnVlLCdrZ3poaWh1YWQnOnRydWUsJ2tnYmlsaWVkJzp0cnVlLCdrZ2JpbGlhZCc6dHJ1ZSwna2d3ZWlib2VkJzp0cnVlLCdrZ3dlaWJvYWQnOnRydWUsJ2tnd2VpYm9tdic6dHJ1ZSwna2dwaW5nYmlzJzpmYWxzZSwnUHJvYWN0aXZlbHlhZHMnOmZhbHNlLCdrZ3BpbmdiaWlmcmFtZSc6ZmFsc2UsJ2FkZGt3c3NidXR0b24nOnRydWUsJ2FkZHNzYnV0dG9uJzp0cnVlLCdiYWlkdWV5ZWNvbG9yJzoncmdiYSgyMDQsMjMyLDIwNywxKSd9LAoiZ29vZ2xlIjogICAgICAgIHt9LAoic28zNjAiOiAgICAgICAge30sCiJwaW5nYml1cmwiOiAgICAgR01fZ2V0VmFsdWUoJ2FsbGNvbmZpZycpLnBpbmdiaXVybCwKIndoaXRldXJsIjogICAgIEdNX2dldFZhbHVlKCdhbGxjb25maWcnKS53aGl0ZXVybCwKInBpbmdiaWt3IjogICAgR01fZ2V0VmFsdWUoJ2FsbGNvbmZpZycpLnBpbmdiaWt3LAogICAgfTsKR01fc2V0VmFsdWUoJ2FsbGNvbmZpZycsIHNhYWxsY29uZmlnKTsKIGNvbnNvbGUubG9nKCflt7Lph43nva4nKTsKCSAgIH0KCiAgICBpZihjb25maWdtYWluLmluZGV4T2YoImJhaWR1LmNvbSIpID4gMCApIHsKJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oZSkgewogJCh0aGlzKS5rZXlkb3duKGZ1bmN0aW9uIChlKXsKICBpZihlLndoaWNoID09ICIxMyIpewogYmRnb2t3KCk7CiAgICB9CiB9KQp9KTsKJCgnYm9keScpLm9uKCdjbGljaycsImlucHV0W2lkPSdzdSddIixmdW5jdGlvbigpewogIGJkZ29rdygpCiAgfSkKICAgICAgZnVuY3Rpb24gYmRnb2t3KCkgewogICAgICBpZiAoZG9jdW1lbnQuZG9tYWluLmluZGV4T2YoImJhaWR1LmNvbSIpID4gMCApIHsKICAgaWYgICgkKCJpbnB1dFtpZD0nc3UnXSIpLmxlbmd0aCA+IDAgJiYgJCgiaW5wdXRbaWQ9J2t3J10iKS5sZW5ndGggPiAwICYmICQoImlucHV0W2NsYXNzPSdzZWFyY2gtaW5wdXQnXSIpLmxlbmd0aCA9PTApewogICAgICAgIGxldCBrd3R4dD0kKCJpbnB1dFtpZD0na3cnXSIpLnZhbCgpOwogICBsZXQga3d1cmw9J2h0dHBzOi8vd3d3LmJhaWR1LmNvbS9zP2llPXV0Zi04JndkPScrZW5jb2RlVVJJQ29tcG9uZW50KGt3dHh0KTsKCiAgICAgd2luZG93LmxvY2F0aW9uLmhyZWY9a3d1cmw7CiAgICAgICAgICB9CiAgIH0KfQoKIHNldFRpbWVvdXQoZnVuY3Rpb24oKXsKICAgaWYoJCgic3BhbltuYW1lPSd0al9zZXR0aW5naWNvbiddIikubGVuZ3RoID4gMCl7CiAkKCJzcGFuW25hbWU9J3RqX3NldHRpbmdpY29uJ10iKS5hZnRlcignPGEgY2xhc3M9InMtdG9wLXJpZ2h0LXRleHQgYy1mb250LW5vcm1hbCBjLWNvbG9yLXQgcy10b3AtcmlnaHQtbmV3ICJzdHlsZT0icG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6IHZpc2libGU7ICIgaWQ9InprLXRvcC1nb2J0biIgID7mjqfliLbpnaLmnb88LyBhPicpOwogJCgnYm9keScpLm9uKCdjbGljaycsJyN6ay10b3AtZ29idG4nLGZ1bmN0aW9uKCl7CiAgR01fb3BlbkluVGFiKGNvbmZpZ20sIHthY3RpdmU6ICEwfSk7CiAgfSkKICAgICB9Cn0sIDEwMDApOwoKICAgfQogZnVuY3Rpb24gY29uZmlnamMoKSB7CmlmIChjb25maWdtYWluLmluZGV4T2Yod2luZG93LmF0b2IoJ1pHRmthWGx2ZFdoMWFRPT0nKSkgPjAgJiYgY29uZmlndXJsLmluZGV4T2Yod2luZG93LmF0b2IoJ1ltUjBiMjlzTG1oMGJXdz0nKSkgPjAgKXsKICAgICAgICBpZiAoJCgnI2NvbmZpZ2xvYWQnKS5sZW5ndGggPT0gMCApIHsKICQoJ2JvZHknKS5hdHRyKCdpZCcsJ2NvbmZpZ2xvYWQnKTsKJCgnI2RhdGF2ZXJzaW9uJykuYXR0cigndmVyc2lvbicsR01faW5mby5zY3JpcHQudmVyc2lvbik7CiQoJyNkYXRhdmVyc2lvbicpLmh0bWwoR01faW5mby5zY3JpcHQudXBkYXRlVVJMKTsKICAgICAgICB9CiAgfWVsc2V7CiAgCSAgcmV0dXJuOwogIH0KICAgfQogICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpewokKCdib2R5Jykub24oJ2NsaWNrJywnLmxheXVpLWJ0bi53aGl0ZXVybCcsZnVuY3Rpb24oKXsKCWNvbmZpZ2pjKCk7CiAgICBpZiAoJCh0aGlzKS5zaWJsaW5ncygnaW5wdXQnKS5hdHRyKCJkYXRhX3p0Iik9PSIwIil7CiQodGhpcykuc2libGluZ3MoJ2lucHV0JykuYXR0cigiZGF0YV96dCIsIjEiKTsKJCh0aGlzKS50ZXh0KCLlh4blpIfliKDpmaTkuK3vvIzmiYvliqjngrnlh7vkv53lrZjlkI7mlrnlj6/nlJ/mlYgiKTsKLy8g5omL5Yqo54K55Ye75L+d5a2Y5ZCO5pa55Y+v55Sf5pWI77yM5LiN54K55Ye75L+d5a2Y5oyJ6ZKu5LiN5Lya55Sf5pWICiAvL+aZrumAmueahOiHquW4puW5v+WRiuS8muiHquWKqOi/h+a7pAoKLy/oi6XpnIDmjInnvZHlnYDlkozlhbPplK7or43lsY/olL3ov4fmu6TjgILor7flnKjmjqfliLbpnaLmnb/kuK3mt7vliqDvvIzlubbkuJTmiYvliqjngrnlh7vkv53lrZjlkI7mlrnlj6/nlJ/mlYjvvIzkuI3ngrnlh7vkv53lrZjmjInpkq7kuI3kvJrnlJ/mlYgKJCh0aGlzKS5jc3MoImJhY2tncm91bmQtY29sb3IiLCIjOTA4ZDhkIik7CiAgICAgICAgfWVsc2V7CiQodGhpcykuc2libGluZ3MoJ2lucHV0JykuYXR0cigiZGF0YV96dCIsIjAiKTsKJCh0aGlzKS50ZXh0KCLliKDpmaQiKTsKJCh0aGlzKS5jc3MoImJhY2tncm91bmQtY29sb3IiLCIjMDA5Njg4Iik7CiAgICAgICAgfQoKCn0pCgokKCdib2R5Jykub24oJ2NsaWNrJywnLmxheXVpLWJ0bi5waW5nYml1cmwnLGZ1bmN0aW9uKCl7Cgljb25maWdqYygpOwogICAgaWYgKCQodGhpcykuc2libGluZ3MoJ2lucHV0JykuYXR0cigiZGF0YV96dCIpPT0iMCIpewokKHRoaXMpLnNpYmxpbmdzKCdpbnB1dCcpLmF0dHIoImRhdGFfenQiLCIxIik7CiQodGhpcykudGV4dCgi5YeG5aSH5Yig6Zmk5Lit77yM5omL5Yqo54K55Ye75L+d5a2Y5ZCO5pa55Y+v55Sf5pWIIik7Ci8vIOaJi+WKqOeCueWHu+S/neWtmOWQjuaWueWPr+eUn+aViO+8jOS4jeeCueWHu+S/neWtmOaMiemSruS4jeS8mueUn+aViAoKLy/oi6XpnIDmjInnvZHlnYDlkozlhbPplK7or43lsY/olL3ov4fmu6TjgILor7flnKjmjqfliLbpnaLmnb/kuK3mt7vliqDvvIzlubbkuJTmiYvliqjngrnlh7vkv53lrZjlkI7mlrnlj6/nlJ/mlYjvvIzkuI3ngrnlh7vkv53lrZjmjInpkq7kuI3kvJrnlJ/mlYgKJCh0aGlzKS5jc3MoImJhY2tncm91bmQtY29sb3IiLCIjOTA4ZDhkIik7CiAgICAgICAgfWVsc2V7CiQodGhpcykuc2libGluZ3MoJ2lucHV0JykuYXR0cigiZGF0YV96dCIsIjAiKTsKJCh0aGlzKS50ZXh0KCLliKDpmaQiKTsKJCh0aGlzKS5jc3MoImJhY2tncm91bmQtY29sb3IiLCIjMDA5Njg4Iik7CiAgICAgICAgfQoKCn0pCiQoJ2JvZHknKS5vbignY2xpY2snLCcubGF5dWktYnRuLnBpbmdiaWt3JyxmdW5jdGlvbigpewoJY29uZmlnamMoKTsKICAgIGlmICgkKHRoaXMpLnNpYmxpbmdzKCdpbnB1dCcpLmF0dHIoImRhdGFfenQiKT09IjAiKXsKJCh0aGlzKS5zaWJsaW5ncygnaW5wdXQnKS5hdHRyKCJkYXRhX3p0IiwiMSIpOwoKJCh0aGlzKS50ZXh0KCLlh4blpIfliKDpmaTkuK3vvIzmiYvliqjkv53lrZjlkI7mlrnlj6/nlJ/mlYgiKTsKJCh0aGlzKS5jc3MoImJhY2tncm91bmQtY29sb3IiLCIjOTA4ZDhkIik7CiAgICAgICAgfWVsc2V7CiQodGhpcykuc2libGluZ3MoJ2lucHV0JykuYXR0cigiZGF0YV96dCIsIjAiKTsKJCh0aGlzKS50ZXh0KCLliKDpmaQiKTsKJCh0aGlzKS5jc3MoImJhY2tncm91bmQtY29sb3IiLCIjMDA5Njg4Iik7CiAgICAgICAgfQoKCn0pCiQoJ2JvZHknKS5vbignY2xpY2snLCcubGF5dWktYnRuLndoaXRldXJsYWRkJyxmdW5jdGlvbigpewoJY29uZmlnamMoKTsKbGV0IGFkZHVybD0kKHRoaXMpLnNpYmxpbmdzKCdpbnB1dCcpLnZhbCgpOwoKCiAgaWYgKGFkZHVybC5sZW5ndGggPDUpewogICAgICAgICAgICBhbGVydCgi6L6T5YWl55qE572R5Z2A5aSq55+tIik7CiByZXR1cm47CiAgIH0KIGlmIChhZGR1cmwuaW5kZXhPZigiaHR0cCIpID49MCl7CiBsZXQgYWRkdXJsZG9tYWluID0gYWRkdXJsLnNwbGl0KCIvIik7CiAgICAgaWYoIGFkZHVybGRvbWFpblsyXSApIHsKICAgIGFkZHVybD1hZGR1cmxkb21haW5bMl07Cn1lbHNlewogICAgIGFsZXJ0KCLovpPlhaXnmoTnvZHlnYDplJnor68iKTsKIHJldHVybjsKICAgfQogICAgIH1lbHNlewogICAgaWYgKGFkZHVybC5pbmRleE9mKCIuIikgPjApewogICB9ZWxzZXsKICAgICBhbGVydCgi6L6T5YWl55qE572R5Z2A5LiN5ZCI5rOVIik7CiByZXR1cm47CiAgIH0KICAgICB9CgoKCiQoIiN3aGl0ZXVybCIpLnByZXBlbmQoJzxsYWJlbCBjbGFzcz0ibGF5dWktZm9ybS1sYWJlbCIgc3R5bGU9IiB3aWR0aDogMTUwcHg7Ij7mlrDlop7nvZHlnYA8L2xhYmVsPiAgPGRpdiBjbGFzcz0ibGF5dWktaW5wdXQtYmxvY2siID4gPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InRpdGxlIiBkYXRhX3p0PSIwIiBsYXktdmVyaWZ5PSJ0aXRsZSIgIHZhbHVlID0iJythZGR1cmwrJyIgYXV0b2NvbXBsZXRlPSJvZmYiICAgY2xhc3M9ImxheXVpLWlucHV0IiAgIHJlYWRvbmx5PSJyZWFkb25seSIgc3R5bGU9IndpZHRoOiAzMDBweDtkaXNwbGF5OiBpbmxpbmUtYmxvY2s7bWFyZ2luLWxlZnQ6IDUwcHg7Y29sb3I6ICM4OTg5ODk7Ij4gICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImxheXVpLWJ0biB3aGl0ZXVybCIgc3R5bGU9ImRpc3BsYXk6IGlubGluZS1ibG9jazttYXJnaW4tbGVmdDogNTBweDsiPuWIoOmZpDwvYnV0dG9uPjwvZGl2PicgICk7CiQodGhpcykuc2libGluZ3MoJ2lucHV0JykudmFsKCcnKTsKCn0pCgokKCdib2R5Jykub24oJ2NsaWNrJywnLmxheXVpLWJ0bi5waW5nYml1cmxhZGQnLGZ1bmN0aW9uKCl7Cgljb25maWdqYygpOwpsZXQgYWRkdXJsPSQodGhpcykuc2libGluZ3MoJ2lucHV0JykudmFsKCk7CgoKICBpZiAoYWRkdXJsLmxlbmd0aCA8NSl7CiAgICAgICAgICAgIGFsZXJ0KCLovpPlhaXnmoTnvZHlnYDlpKrnn60iKTsKIHJldHVybjsKICAgfQoKIGlmIChhZGR1cmwuaW5kZXhPZigid3d3LmJhaWR1LmNvbS9saW5rPyIpID49MCl7CiAgICAgICAgICAgICBhbGVydCgi5q2k572R5Z2A5piv55m+5bqm55qE572R5Z2A77yM5bGP6JS95ZCO5Y+v6IO95Ye6546w6Zeu6aKY44CC6K+35L2/55So5YW25LuW55qE572R56uZ55qE6ZO+5o6lIik7CgogcmV0dXJuOwogICB9CiBpZiAoYWRkdXJsLmluZGV4T2YoImh0dHAiKSA+PTApewogbGV0IGFkZHVybGRvbWFpbiA9IGFkZHVybC5zcGxpdCgiLyIpOwogICAgIGlmKCBhZGR1cmxkb21haW5bMl0gKSB7CiAgICBhZGR1cmw9YWRkdXJsZG9tYWluWzJdOwp9ZWxzZXsKICAgICBhbGVydCgi6L6T5YWl55qE572R5Z2A5LiN5ZCI5rOVIik7CiByZXR1cm47CiAgIH0KICAgICB9ZWxzZXsKICAgIGlmIChhZGR1cmwuaW5kZXhPZigiLiIpID4wKXsKICAgfWVsc2V7CiAgICAgYWxlcnQoIui+k+WFpeeahOe9keWdgOS4jeWQiOazlSIpOwogcmV0dXJuOwogICB9CiAgICAgfQoKCgokKCIjcGluZ2JpdXJsIikucHJlcGVuZCgnPGxhYmVsIGNsYXNzPSJsYXl1aS1mb3JtLWxhYmVsIiBzdHlsZT0iIHdpZHRoOiAxNTBweDsiPuaWsOWinue9keWdgDwvbGFiZWw+ICA8ZGl2IGNsYXNzPSJsYXl1aS1pbnB1dC1ibG9jayIgPiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0idGl0bGUiIGRhdGFfenQ9IjAiIGxheS12ZXJpZnk9InRpdGxlIiAgdmFsdWUgPSInK2FkZHVybCsnIiBhdXRvY29tcGxldGU9Im9mZiIgICBjbGFzcz0ibGF5dWktaW5wdXQiICAgcmVhZG9ubHk9InJlYWRvbmx5IiBzdHlsZT0id2lkdGg6IDMwMHB4O2Rpc3BsYXk6IGlubGluZS1ibG9jazttYXJnaW4tbGVmdDogNTBweDtjb2xvcjogIzg5ODk4OTsiPiAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0ibGF5dWktYnRuIHBpbmdiaXVybCIgc3R5bGU9ImRpc3BsYXk6IGlubGluZS1ibG9jazttYXJnaW4tbGVmdDogNTBweDsiPuWIoOmZpDwvYnV0dG9uPjwvZGl2PicgICk7CiQodGhpcykuc2libGluZ3MoJ2lucHV0JykudmFsKCcnKTsKCn0pCgokKCdib2R5Jykub24oJ2NsaWNrJywnLmxheXVpLWJ0bi5waW5nYmlrd2FkZCcsZnVuY3Rpb24oKXsKCWNvbmZpZ2pjKCk7CmxldCBhZGRrdz0kKHRoaXMpLnNpYmxpbmdzKCdpbnB1dCcpLnZhbCgpOwoKCiAgaWYgKGFkZGt3Lmxlbmd0aCA8Mil7CiAgICAgICAgICAgIGFsZXJ0KCLovpPlhaXnmoTlhbPplK7or43lv4XpobvlpKfkuo7nrYnkuo4y5Liq5a2XICIpOwogcmV0dXJuOwogICB9CgoKJCgiI3BpbmdiaWt3IikucHJlcGVuZCgnPGxhYmVsIGNsYXNzPSJsYXl1aS1mb3JtLWxhYmVsIiBzdHlsZT0iIHdpZHRoOiAxNTBweDsiPuaWsOWinuWFs+mUruivjTwvbGFiZWw+ICA8ZGl2IGNsYXNzPSJsYXl1aS1pbnB1dC1ibG9jayIgPiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0idGl0bGUiIGRhdGFfenQ9IjAiIGxheS12ZXJpZnk9InRpdGxlIiAgdmFsdWUgPSInK2FkZGt3KyciIGF1dG9jb21wbGV0ZT0ib2ZmIiAgIGNsYXNzPSJsYXl1aS1pbnB1dCIgICByZWFkb25seT0icmVhZG9ubHkiIHN0eWxlPSJ3aWR0aDogMzAwcHg7ZGlzcGxheTogaW5saW5lLWJsb2NrO21hcmdpbi1sZWZ0OiA1MHB4O2NvbG9yOiAjODk4OTg5OyI+ICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJsYXl1aS1idG4gcGluZ2Jpa3ciIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7bWFyZ2luLWxlZnQ6IDUwcHg7Ij7liKDpmaQ8L2J1dHRvbj48L2Rpdj4nICApOwokKHRoaXMpLnNpYmxpbmdzKCdpbnB1dCcpLnZhbCgnJyk7Cgp9KQogfSkKZnVuY3Rpb24gc29zYXZlKCkgewoJY29uZmlnamMoKTsKCnZhciB3aGl0ZXVybGVuPW5ldyBBcnJheSgpOwoKICQoIi5sYXl1aS1idG4ud2hpdGV1cmwiKS5zaWJsaW5ncygnaW5wdXQnKS5lYWNoKGZ1bmN0aW9uKGluZGV4LGVsZW1lbnQpIHsKIGlmICgkKHRoaXMpLmF0dHIoImRhdGFfenQiKT09IjAiICYmICQodGhpcykudmFsKCkubGVuZ3RoID4xKXsKICB3aGl0ZXVybGVuLnB1c2goJCh0aGlzKS52YWwoKSk7Cn0KfSkKd2hpdGV1cmxlbj1BcnJheS5mcm9tKG5ldyBTZXQod2hpdGV1cmxlbikpOwp3aGl0ZXVybGVuPXdoaXRldXJsZW4uc2xpY2UoMCw5OTkpOwoKdmFyIHBpbmdiaXVybGVuPW5ldyBBcnJheSgpOwoKICQoIi5sYXl1aS1idG4ucGluZ2JpdXJsIikuc2libGluZ3MoJ2lucHV0JykuZWFjaChmdW5jdGlvbihpbmRleCxlbGVtZW50KSB7CiBpZiAoJCh0aGlzKS5hdHRyKCJkYXRhX3p0Iik9PSIwIiAmJiAkKHRoaXMpLnZhbCgpLmxlbmd0aCA+MSl7CiAgcGluZ2JpdXJsZW4ucHVzaCgkKHRoaXMpLnZhbCgpKTsKfQp9KQpwaW5nYml1cmxlbj1BcnJheS5mcm9tKG5ldyBTZXQocGluZ2JpdXJsZW4pKTsKcGluZ2JpdXJsZW49cGluZ2JpdXJsZW4uc2xpY2UoMCw5OTkpOwp2YXIgcGluZ2JpdWt3ZW49bmV3IEFycmF5KCk7CgogJCgiLmxheXVpLWJ0bi5waW5nYmlrdyIpLnNpYmxpbmdzKCdpbnB1dCcpLmVhY2goZnVuY3Rpb24oaW5kZXgsZWxlbWVudCkgewogaWYgKCQodGhpcykuYXR0cigiZGF0YV96dCIpPT0iMCIgJiYgJCh0aGlzKS52YWwoKS5sZW5ndGggPjEpewogIHBpbmdiaXVrd2VuLnB1c2goJCh0aGlzKS52YWwoKSk7Cn0KfSkKcGluZ2JpdWt3ZW49QXJyYXkuZnJvbShuZXcgU2V0KHBpbmdiaXVrd2VuKSk7CnBpbmdiaXVrd2VuPXBpbmdiaXVrd2VuLnNsaWNlKDAsOTk5KTsKdmFyIHNhYWxsY29uZmlnPW5ldyBBcnJheSgpOwpzYWFsbGNvbmZpZz0KewoiYmFpZHUiOiAgICAgIHsnYmFpZHVtZW51JzokKCIjYmFpZHVtZW51IikuZmluZCgiaW5wdXQiKS5wcm9wKCJjaGVja2VkIiksJ2JhaWR1bG9nbyc6JCgiI2JhaWR1bG9nbyIpLmZpbmQoImlucHV0IikucHJvcCgiY2hlY2tlZCIpLCdiYWlkdWxpYW5qaWUnOiQoIiNiYWlkdWxpYW5qaWUiKS5maW5kKCJpbnB1dCIpLnByb3AoImNoZWNrZWQiKSwnYmFpZHVob3QnOiQoIiNiYWlkdWhvdCIpLmZpbmQoImlucHV0IikucHJvcCgiY2hlY2tlZCIpLCdiYWlkdXRicSc6JCgiI2JhaWR1dGJxIikuZmluZCgiaW5wdXQiKS5wcm9wKCJjaGVja2VkIiksJ2JhaWR1amRxJzokKCIjYmFpZHVqZHEiKS5maW5kKCJpbnB1dCIpLnByb3AoImNoZWNrZWQiKSwna2diYWlkdWVkJzokKCIja2diYWlkdWVkIikuZmluZCgiaW5wdXQiKS5wcm9wKCJjaGVja2VkIiksJ2tnYmFpZHVhZCc6JCgiI2tnYmFpZHVhZCIpLmZpbmQoImlucHV0IikucHJvcCgiY2hlY2tlZCIpLCdrZ2dvb2dsZWVkJzokKCIja2dnb29nbGVlZCIpLmZpbmQoImlucHV0IikucHJvcCgiY2hlY2tlZCIpLCdrZ2dvb2dsZWFkJzokKCIja2dnb29nbGVhZCIpLmZpbmQoImlucHV0IikucHJvcCgiY2hlY2tlZCIpLCdrZzM2MGVkJzokKCIja2czNjBlZCIpLmZpbmQoImlucHV0IikucHJvcCgiY2hlY2tlZCIpLCdrZzM2MGFkJzokKCIja2czNjBhZCIpLmZpbmQoImlucHV0IikucHJvcCgiY2hlY2tlZCIpLCdrZ2JpbmdlZCc6JCgiI2tnYmluZ2VkIikuZmluZCgiaW5wdXQiKS5wcm9wKCJjaGVja2VkIiksJ2tnYmluZ2FkJzokKCIja2diaW5nYWQiKS5maW5kKCJpbnB1dCIpLnByb3AoImNoZWNrZWQiKSwna2d0d2llZCc6JCgiI2tndHdpZWQiKS5maW5kKCJpbnB1dCIpLnByb3AoImNoZWNrZWQiKSwna2d0d2ltdic6JCgiI2tndHdpbXYiKS5maW5kKCJpbnB1dCIpLnByb3AoImNoZWNrZWQiKSwna2d0d2lhZCc6JCgiI2tndHdpYWQiKS5maW5kKCJpbnB1dCIpLnByb3AoImNoZWNrZWQiKSwna2d5b3VlZCc6JCgiI2tneW91ZWQiKS5maW5kKCJpbnB1dCIpLnByb3AoImNoZWNrZWQiKSwna2d5b3Vtdic6JCgiI2tneW91bXYiKS5maW5kKCJpbnB1dCIpLnByb3AoImNoZWNrZWQiKSwna2d5b3VhZCc6JCgiI2tneW91YWQiKS5maW5kKCJpbnB1dCIpLnByb3AoImNoZWNrZWQiKSwna2d3ZWl4aW5lZCc6JCgiI2tnd2VpeGluZWQiKS5maW5kKCJpbnB1dCIpLnByb3AoImNoZWNrZWQiKSwna2d3ZWl4aW5hZCc6JCgiI2tnd2VpeGluYWQiKS5maW5kKCJpbnB1dCIpLnByb3AoImNoZWNrZWQiKSwna2dkb3ViYW5lZCc6JCgiI2tnZG91YmFuZWQiKS5maW5kKCJpbnB1dCIpLnByb3AoImNoZWNrZWQiKSwna2dkb3ViYW5hZCc6JCgiI2tnZG91YmFuYWQiKS5maW5kKCJpbnB1dCIpLnByb3AoImNoZWNrZWQiKSwna2d6aGlodWVkJzokKCIja2d6aGlodWVkIikuZmluZCgiaW5wdXQiKS5wcm9wKCJjaGVja2VkIiksJ2tnemhpaHVhZCc6JCgiI2tnemhpaHVhZCIpLmZpbmQoImlucHV0IikucHJvcCgiY2hlY2tlZCIpLCdrZ2JpbGllZCc6JCgiI2tnYmlsaWVkIikuZmluZCgiaW5wdXQiKS5wcm9wKCJjaGVja2VkIiksJ2tnYmlsaWFkJzokKCIja2diaWxpYWQiKS5maW5kKCJpbnB1dCIpLnByb3AoImNoZWNrZWQiKSwna2d3ZWlib2VkJzokKCIja2d3ZWlib2VkIikuZmluZCgiaW5wdXQiKS5wcm9wKCJjaGVja2VkIiksJ2tnd2VpYm9hZCc6JCgiI2tnd2VpYm9hZCIpLmZpbmQoImlucHV0IikucHJvcCgiY2hlY2tlZCIpLCdrZ3dlaWJvbXYnOiQoIiNrZ3dlaWJvbXYiKS5maW5kKCJpbnB1dCIpLnByb3AoImNoZWNrZWQiKSwna2dwaW5nYmlzJzokKCIja2dwaW5nYmlzIikuZmluZCgiaW5wdXQiKS5wcm9wKCJjaGVja2VkIiksJ1Byb2FjdGl2ZWx5YWRzJzokKCIjUHJvYWN0aXZlbHlhZHMiKS5maW5kKCJpbnB1dCIpLnByb3AoImNoZWNrZWQiKSwna2dwaW5nYmlpZnJhbWUnOiQoIiNrZ3BpbmdiaWlmcmFtZSIpLmZpbmQoImlucHV0IikucHJvcCgiY2hlY2tlZCIpLCdhZGRrd3NzYnV0dG9uJzokKCIjYWRka3dzc2J1dHRvbiIpLmZpbmQoImlucHV0IikucHJvcCgiY2hlY2tlZCIpLCdhZGRzc2J1dHRvbic6JCgiI2FkZHNzYnV0dG9uIikuZmluZCgiaW5wdXQiKS5wcm9wKCJjaGVja2VkIiksJ2JhaWR1Y3NzJzokKCIjYmFpZHVjc3MiKS5maW5kKCJpbnB1dCIpLnByb3AoImNoZWNrZWQiKSwnYmFpZHVleWUnOiQoIiNiYWlkdWV5ZSIpLmZpbmQoImlucHV0IikucHJvcCgiY2hlY2tlZCIpLCdiYWlkdWV5ZWNvbG9yJzokKCIjYmFpZHVleWVjb2xvciIpLnZhbCgpfSwKImdvb2dsZSI6ICAgICAgICB7fSwKInNvMzYwIjogICAgICAgIHt9LAoicGluZ2JpdXJsIjogICAgIHBpbmdiaXVybGVuLAoid2hpdGV1cmwiOiAgICAgd2hpdGV1cmxlbiwKInBpbmdiaWt3IjogICAgcGluZ2JpdWt3ZW4sCiAgICB9OwpHTV9zZXRWYWx1ZSgnYWxsY29uZmlnJywgc2FhbGxjb25maWcpOwoKYWxlcnQoIuW3suS/neWtmOiuvue9riIpOwp9CgpmdW5jdGlvbiBzb3NvcmVzZXQoKSB7CglpZiAoY29uZmlnbWFpbi5pbmRleE9mKHdpbmRvdy5hdG9iKCdaR0ZrYVhsdmRXaDFhUT09JykpID4wICYmIGNvbmZpZ3VybC5pbmRleE9mKHdpbmRvdy5hdG9iKCdZbVIwYjI5c0xtaDBiV3c9JykpID4wICl7CgogICAgICAgICBpZiAoR01fZ2V0VmFsdWUoJ2FsbGNvbmZpZycpKXsKCSAgIH1lbHNlewoJICAgR01fc2V0VmFsdWUoJ2FsbGNvbmZpZycsIGFsbGNvbmZpZyk7CgkgICB9CiAgICBsZXQgYWxsd2NvbmZpZz1HTV9nZXRWYWx1ZSgnYWxsY29uZmlnJyk7CmZvcihsZXQgaSBpbiBhbGx3Y29uZmlnKXsKCiAgICBpZiAoIE9iamVjdC5rZXlzKGFsbHdjb25maWdbaV0pLmxlbmd0aCA+IDApewogICBpZiAoaT09InBpbmdiaXVybCIpewokKCIjcGluZ2JpdXJsIikuaHRtbCgiIik7CiAgICAgICAgZm9yKGxldCBiIGluIGFsbHdjb25maWdbaV0pewogICAgICQoIiNwaW5nYml1cmwiKS5hcHBlbmQoJzxsYWJlbCBjbGFzcz0ibGF5dWktZm9ybS1sYWJlbCIgc3R5bGU9IiB3aWR0aDogMTUwcHg7Ij7lt7Lnu4/lsY/olL3nmoTnvZHlnYAnKyhOdW1iZXIoYikrMSkrJzwvbGFiZWw+ICA8ZGl2IGNsYXNzPSJsYXl1aS1pbnB1dC1ibG9jayIgPiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0idGl0bGUiIGRhdGFfenQ9IjAiIGxheS12ZXJpZnk9InRpdGxlIiAgdmFsdWUgPSInK2FsbHdjb25maWdbaV1bYl0rJyIgYXV0b2NvbXBsZXRlPSJvZmYiICAgY2xhc3M9ImxheXVpLWlucHV0IiAgIHJlYWRvbmx5PSJyZWFkb25seSIgc3R5bGU9IndpZHRoOiAzMDBweDtkaXNwbGF5OiBpbmxpbmUtYmxvY2s7bWFyZ2luLWxlZnQ6IDUwcHg7Y29sb3I6ICM4OTg5ODk7Ij4gICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImxheXVpLWJ0biBwaW5nYml1cmwiIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7bWFyZ2luLWxlZnQ6IDUwcHg7Ij7liKDpmaQ8L2J1dHRvbj48L2Rpdj4nICApOwogICAgICAgICAgIH0KICAgICAgICB9CiAgIGlmIChpPT0id2hpdGV1cmwiKXsKJCgiI3doaXRldXJsIikuaHRtbCgiIik7CiAgICAgICAgZm9yKGxldCBiIGluIGFsbHdjb25maWdbaV0pewogICAgICQoIiN3aGl0ZXVybCIpLmFwcGVuZCgnPGxhYmVsIGNsYXNzPSJsYXl1aS1mb3JtLWxhYmVsIiBzdHlsZT0iIHdpZHRoOiAxNTBweDsiPueZveWQjeWNlee9keWdgCcrKE51bWJlcihiKSsxKSsnPC9sYWJlbD4gIDxkaXYgY2xhc3M9ImxheXVpLWlucHV0LWJsb2NrIiA+IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ0aXRsZSIgZGF0YV96dD0iMCIgbGF5LXZlcmlmeT0idGl0bGUiICB2YWx1ZSA9IicrYWxsd2NvbmZpZ1tpXVtiXSsnIiBhdXRvY29tcGxldGU9Im9mZiIgICBjbGFzcz0ibGF5dWktaW5wdXQiICAgcmVhZG9ubHk9InJlYWRvbmx5IiBzdHlsZT0id2lkdGg6IDMwMHB4O2Rpc3BsYXk6IGlubGluZS1ibG9jazttYXJnaW4tbGVmdDogNTBweDtjb2xvcjogIzg5ODk4OTsiPiAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0ibGF5dWktYnRuIHdoaXRldXJsIiBzdHlsZT0iZGlzcGxheTogaW5saW5lLWJsb2NrO21hcmdpbi1sZWZ0OiA1MHB4OyI+5Yig6ZmkPC9idXR0b24+PC9kaXY+JyAgKTsKICAgICAgICAgICB9CiAgICAgICAgfQogaWYgKGk9PSJwaW5nYmlrdyIpewokKCIjcGluZ2Jpa3ciKS5odG1sKCIiKTsKICAgICAgICBmb3IobGV0IGIgaW4gYWxsd2NvbmZpZ1tpXSl7CiAgICAgJCgiI3BpbmdiaWt3IikuYXBwZW5kKCc8bGFiZWwgY2xhc3M9ImxheXVpLWZvcm0tbGFiZWwiIHN0eWxlPSIgd2lkdGg6IDE1MHB4OyI+5bey57uP5bGP6JS955qE5YWz6ZSu6K+NJysoTnVtYmVyKGIpKzEpKyc8L2xhYmVsPiAgPGRpdiBjbGFzcz0ibGF5dWktaW5wdXQtYmxvY2siID4gPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InRpdGxlIiBkYXRhX3p0PSIwIiBsYXktdmVyaWZ5PSJ0aXRsZSIgIHZhbHVlID0iJythbGx3Y29uZmlnW2ldW2JdKyciIGF1dG9jb21wbGV0ZT0ib2ZmIiAgIGNsYXNzPSJsYXl1aS1pbnB1dCIgICByZWFkb25seT0icmVhZG9ubHkiIHN0eWxlPSJ3aWR0aDogMzAwcHg7ZGlzcGxheTogaW5saW5lLWJsb2NrO21hcmdpbi1sZWZ0OiA1MHB4O2NvbG9yOiAjODk4OTg5OyI+ICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJsYXl1aS1idG4gcGluZ2Jpa3ciIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7bWFyZ2luLWxlZnQ6IDUwcHg7Ij7liKDpmaQ8L2J1dHRvbj48L2Rpdj4nICApOwogICAgICAgICAgIH0KICAgICAgICB9CgogICAgZm9yKGxldCBrIGluIGFsbHdjb25maWdbaV0pewogICAgICAgLy/mtYvor5UKICAgICAgICAgICBpZiAoaz09ImJhaWR1ZXllY29sb3IiKXsKICAgICAgICQoIiMiK2spLnZhbChhbGx3Y29uZmlnW2ldW2tdKTsKICAgICAgICB9CiAgICAgICAgaWYgKGshPSJiYWlkdWV5ZWNvbG9yIil7CiAgICAgICAgaWYgKGFsbHdjb25maWdbaV1ba109PXRydWUpewokKCIjIitrKS5jaGlsZHJlbigiaW5wdXQ6ZXEoMCkiKS5wcm9wKCAiY2hlY2tlZCIsIHRydWUgKTsKJCgiIyIraykuY2hpbGRyZW4oImRpdjplcSgwKSIpLmF0dHIoImNsYXNzIiwibGF5dWktdW5zZWxlY3QgbGF5dWktZm9ybS1zd2l0Y2ggbGF5dWktZm9ybS1vbnN3aXRjaCIpOwokKCIjIitrKS5maW5kKCJlbSIpLmh0bWwoIk9OIik7CiAgICAgICAgICAgIH1lbHNlewokKCIjIitrKS5jaGlsZHJlbigiaW5wdXQ6ZXEoMCkiKS5wcm9wKCAiY2hlY2tlZCIsIGZhbHNlICk7CiQoIiMiK2spLmNoaWxkcmVuKCJkaXY6ZXEoMCkiKS5hdHRyKCJjbGFzcyIsImxheXVpLXVuc2VsZWN0IGxheXVpLWZvcm0tc3dpdGNoIik7CiQoIiMiK2spLmZpbmQoImVtIikuaHRtbCgiT0ZGIik7CiAgICAgICAgICAgIH0KIH0KICAgIH0KICAgIH0KfQoKfQp9CiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7CgogICAgY29uZmlnamMoKTsKICAgIHNvc29yZXNldCgpOwoKJCgnYm9keScpLm9uKCdjbGljaycsJy5sYXl1aS1idG4uc29zb3NhdmUnLGZ1bmN0aW9uKCl7CmNvbmZpZ2pjKCk7CiAgLy/kv53lrZgKICAgR01fc2V0VmFsdWUoJ2FsbGNvbmZpZycsIGFsbGNvbmZpZyk7CiAgICAgc29zYXZlKCk7CgkgICAgICAgICAgIH0pOwoKJCgnYm9keScpLm9uKCdjbGljaycsJy5sYXl1aS1idG4ubGF5dWktYnRuLXByaW1hcnkuc29zb3Jlc2V0JyxmdW5jdGlvbigpewogIC8v6YeN572uCiAgY29uZmlnamMoKTsKICAgR01fc2V0VmFsdWUoJ2FsbGNvbmZpZycsIGFsbGNvbmZpZyk7CiAgICAgc29zb3Jlc2V0KCk7CiAgICAgYWxlcnQoIuW3sui/mOWOn+m7mOiupOiuvue9riIpOwoJICAgICAgICAgICB9KTsKIH0pCgkJdmFyIHprZGRvbWFpbiA9IGRvY3VtZW50LmRvbWFpbjsKCQl2YXIgemtkdXJsZG9tYWluID0gbG9jYXRpb24uaHJlZjsKCQkgdmFyIHpoaWh1ZGw9MDsKIAkJIHZhciBrZ21tbT0wOwppZiAoR01fZ2V0VmFsdWUoJ2FsbGNvbmZpZycpLndoaXRldXJsKXsKIGlmIChHTV9nZXRWYWx1ZSgnYWxsY29uZmlnJykud2hpdGV1cmwubGVuZ3RoPjAgKXsKICAgIGZvcihsZXQgYiBpbiBHTV9nZXRWYWx1ZSgnYWxsY29uZmlnJykud2hpdGV1cmwpewogICAgICAgICBpZiAoemtkZG9tYWluLmluZGV4T2YoR01fZ2V0VmFsdWUoJ2FsbGNvbmZpZycpLndoaXRldXJsW2JdKSA+PTApewogICAgICAgICAga2dtbW09MTsKICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGtnbW1tPT0xKXsKICAgICAgICAgICAgIAkgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgIH0KCgoKaWYoemtkZG9tYWluLmluZGV4T2YoIi5vcC5nZyIpID4gMCApIHsKICQoIi52bS1wbGFjZW1lbnQiKS5yZW1vdmUoKTsKfQoKaWYoemtkZG9tYWluLmluZGV4T2YoIi5jdHl1bi5jbiIpID49IDAgfHwgemtkZG9tYWluLmluZGV4T2YoImNsb3VkLjE4OS5jbiIpID49IDApIHsKcmV0dXJuOwp9CgoKCgoKCnZhciBnb2luZ251bWE9MTsKdmFyIGdvaW5nbnVtYj0xMDsKICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgewogdmFyIHJlZiA9IHNldEludGVydmFsKGZ1bmN0aW9uKCkgewprZ3BpbmdiaXNnbygpOwp9LCAxMDAwKTsKCnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgY2xlYXJJbnRlcnZhbChyZWYpOwp9LCAyMDAwKTsKCnZhciB0MSA9IHNldEludGVydmFsKGZ1bmN0aW9uKCl7CnprZHVybGRvbWFpbiA9IGxvY2F0aW9uLmhyZWY7CmRlbGdvb2dsZSgpOwpkZWx6aGlodSgpOwpkZWxiaWxpKCk7CmRlbGRvdWJhbigpOwpiaW5nKCk7CmRlbGJhaWR1KCk7CmRlbG90aGVyKCk7CmRlbDM2MCgpOwoKZ29pbmdudW1hKys7CmlmIChnb2luZ251bWE+PWdvaW5nbnVtYiApewoJY2xlYXJJbnRlcnZhbCh0MSk7Cn0KCn0sMTAwMCk7Cn0pOwoKCgoKICAgICAgaWYgKHdpbmRvdy50b3AgPT0gd2luZG93LnNlbGYpewogICAgIGlmKHprZHVybGRvbWFpbi5pbmRleE9mKCJ0d2l0dGVyLmNvbSIpID49IDAgIHx8IGxvY2F0aW9uLmhyZWYuaW5kZXhPZigieW91dHViZS5jb20vd2F0Y2g/IikgPj0gMCApIHsKICAgICAgICQoJ2JvZHknKS5vbignY2xpY2snLCcjZ29nb3h2aWRlb2EnLGZ1bmN0aW9uKCl7CiAgICAJIEdNX3NldFZhbHVlKCdnb2dveHZpZGVvZG93bicsICQodGhpcykuYXR0cignZGF0YS11cmwnKSk7CiAgICAJd2luZG93Lm9wZW4oImh0dHBzOi8vd3d3LmdldGZ2aWQuY29tL3poL3R3aXR0ZXIiKTsKICAgIH0pCiAgICAkKCdib2R5Jykub24oJ2NsaWNrJywnI2dvZ294dmlkZW9iJyxmdW5jdGlvbigpewogICAgCSBHTV9zZXRWYWx1ZSgnZ29nb3h2aWRlb2Rvd24nLCAkKHRoaXMpLmF0dHIoJ2RhdGEtdXJsJykpOwogICAgCXdpbmRvdy5vcGVuKCJodHRwczovLzljb252ZXJ0LmNvbSIpOwogICAgfSkKICAgICQoJ2JvZHknKS5vbignY2xpY2snLCcjZ29nb3h2aWRlb2MnLGZ1bmN0aW9uKCl7CiAgICAJIEdNX3NldFZhbHVlKCdnb2dveHZpZGVvZG93bicsICQodGhpcykuYXR0cignZGF0YS11cmwnKSk7CiAgICAJd2luZG93Lm9wZW4oImh0dHBzOi8vd3d3LnkybWF0ZS5jb20vZG93bmxvYWQteW91dHViZSIpOwogICAgfSkKICAgICQoJ2JvZHknKS5vbignY2xpY2snLCcjZ29nb3h2aWRlb2QnLGZ1bmN0aW9uKCl7CiAgICAJIEdNX3NldFZhbHVlKCdnb2dveHZpZGVvZG93bicsICQodGhpcykuYXR0cignZGF0YS11cmwnKSk7CiAgICAJd2luZG93Lm9wZW4oImh0dHBzOi8vemguc2F2ZWZyb20ubmV0Iik7CiAgICB9KQoKICAgIH0KICAgICAgfQoKICBsZXQgdGFiX2JkX3RhYmNzcyA9IGAjd3JhcHBlciAjY29udGVudF9sZWZ0ID4gZGl2IGF7cG9zaXRpb246cmVsYXRpdmU7dGV4dC1kZWNvcmF0aW9uOm5vbmU7fSN3cmFwcGVyICNjb250ZW50X2xlZnQgPiBkaXYgYTpiZWZvcmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDowO2xlZnQ6MDtib3R0b206LTJweDtib3JkZXItYm90dG9tOnNvbGlkIDJweDstd2Via2l0LXRyYW5zaXRpb246d2lkdGggLjM4cyBlYXNlLWluLW91dDt0cmFuc2l0aW9uOndpZHRoIC4zOHMgZWFzZS1pbi1vdXQ7fSN3cmFwcGVyICNjb250ZW50X2xlZnQgPiBkaXYgYTpob3Zlcntjb2xvcjojMzQ3NmQyO30jd3JhcHBlciAjY29udGVudF9sZWZ0ID4gZGl2IGE6aG92ZXI6YmVmb3Jle3dpZHRoOjEwMCU7fSN3cmFwcGVyICNjb250ZW50X2xlZnQgPi5jLWNvbnRhaW5lcntwYWRkaW5nOjVweCAyMHB4IDVweCAyMHB4O30jd3JhcHBlciAjY29udGVudF9sZWZ0ID4uYy1jb250YWluZXI6aG92ZXJ7Ym9yZGVyLXJhZGl1czoxMHB4O2JveC1zaGFkb3c6MCA2cHggMjBweCAwIHJnYigwIDAgMCAvIDMwJSk7fWA7CiAgbGV0IHRhYl9iaW5nX3RhYmNzcyA9IGAjYl9yZXN1bHRzPi5iX2FsZ297cGFkZGluZzogMTJweCAzMHB4IDA7fS5iX2FsZ28gYXtwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWRlY29yYXRpb246bm9uZTt9LmJfYWxnbyAgYTpiZWZvcmV7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDowO2xlZnQ6MDtib3R0b206LTJweDtib3JkZXItYm90dG9tOnNvbGlkIDJweDstd2Via2l0LXRyYW5zaXRpb246d2lkdGggLjM4cyBlYXNlLWluLW91dDt0cmFuc2l0aW9uOndpZHRoIC4zOHMgZWFzZS1pbi1vdXQ7fS5iX2FsZ28gIGE6aG92ZXJ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y29sb3I6IzM0NzZkMjt9LmJfYWxnbyAgYTpob3ZlcjpiZWZvcmV7d2lkdGg6MTAwJTt9bGkuYl9hbGdve3BhZGRpbmc6NXB4IDIwcHggNXB4IDIwcHg7fWxpLmJfYWxnbzpob3Zlcntib3JkZXItcmFkaXVzOjEwcHg7Ym94LXNoYWRvdzowIDZweCAyMHB4IDAgcmdiKDAgMCAwIC8gMzAlKTt9YDsKCiAgbGV0IHRhYl9nb29nbGVfdGFiY3NzID0gYGRpdi5ne3BhZGRpbmc6NXB4IDIwcHggNXB4IDIwcHg7fWRpdi5nOmhvdmVye2JvcmRlci1yYWRpdXM6MTBweDtib3gtc2hhZG93OjAgNnB4IDIwcHggMCByZ2IoMCAwIDAgLyAzMCUpO31gOwoJICBpZiAoR01fZ2V0VmFsdWUoJ2FsbGNvbmZpZycpLmJhaWR1LmJhaWR1Y3NzPT10cnVlKXsKICBpZih6a2R1cmxkb21haW4uaW5kZXhPZignZ29vZ2xlLmNvbScpID4gMCAgJiYgemtkdXJsZG9tYWluLmluZGV4T2YoJy9zZWFyY2g/JykgPiAwICYmICFpc01vYmlsZSgpKXsKICAJICBHTV9hZGRTdHlsZSh0YWJfZ29vZ2xlX3RhYmNzcyk7CiAgfQogIGlmICgoemtkdXJsZG9tYWluLmluZGV4T2YoJy9zP3dvcmQnKSA+IDAgfHwgemtkdXJsZG9tYWluLmluZGV4T2YoJyZ3ZD0nKSA+IDAgfHwgemtkdXJsZG9tYWluLmluZGV4T2YoJz93ZD0nKSA+IDAgfHwgemtkdXJsZG9tYWluLmluZGV4T2YoJyZ3b3JkPScpID4gMCkgICAmJiB6a2R1cmxkb21haW4uaW5kZXhPZignYmFpZHUuY29tJykgPiAwICYmIHprZHVybGRvbWFpbi5pbmRleE9mKCcmcnR0PScpIDwgMCAmJiAhaXNNb2JpbGUoKSl7CiAgCSAgR01fYWRkU3R5bGUodGFiX2JkX3RhYmNzcyk7CiAgfQogICAgaWYoemtkdXJsZG9tYWluLmluZGV4T2YoJ2JpbmcuY29tL3NlYXJjaD8nKSA+IDAgJiYgemtkdXJsZG9tYWluLmluZGV4T2YoJ3E9JykgPiAwICYmICFpc01vYmlsZSgpKXsKR01fYWRkU3R5bGUodGFiX2JpbmdfdGFiY3NzKTsKICB9CiAgfQpmdW5jdGlvbiBrZ3BpbmdiaXNnbygpIHsKIHZhciBrZ3BpbmdiaXN3aGl0ZXp0PXRydWU7CiB2YXIga2dwaW5nYmlzd2hpdGV1cmwgPSBbCiJyZWNhcHRjaGEuZ29vZ2xlIiwKImNhcHRjaGEucXEuY29tIiwKImFsaWNkbi5jb20iLAoiYWxpeXVuLmNvbSIsCiJ0YW9iYW8uY29tIiwKIm1hbGwuY29tIiwKIndlaWJvLmNvbSIsCiIubGUuY29tIiwKImlxaXlpLmNvbSIsCiJ0dWRvdS5jb20iLAoicXEuY29tIiwKImRvdXlpbi5jb20iLAoiamF2YXNjcmlwdDoiLAoieW91a3UuY29tIiwKInNvaHUuY29tIiwKInBwdHYuY29tIiwKInR3aXR0ZXIuY29tIiwKImZhY2Vib29rLmNvbSIsCiJpbnN0YWdyYW0uY29tIiwKInRpa3Rvay5jb20iLAoiaW1kYi5jb20iLAoidmsuY29tIiwKIm10di5jb20iLAoiNTYuY29tIiwKImt1Ni5jb20iLAoiY250di5jbiIsCiJjY3R2LmNuIiwKIm1ndHYuY29tIiwKInlpbnl1ZXRhaS5jb20iLAoid2FzdS5jbiIsCiIxNjMuY29tIiwKIjE5MDUuY29tIiwKInh1bmxlaS5jb20iLAoiZnVuc2hpb24uY29tIiwKInlvdWh1aSIsCiJwb3JuaHViLmNvbSIsCiJ5b3V0dWJlLmNvbSIsCiJiaWxpYmlsaS5jb20iLAoibWFtYS5jb20iLAoiemhpaHUuY29tIiwKImJhaWR1LmNvbSJdOwoKdmFyIHdoaXRlSG9zdHMgPSBbCiAgJ3N1bmluZy5jb20nLAogICd2aXAuY29tJywKICAnamQuY29tJywKICAndGFvYmFvLmNvbScsCiAgJ21hbGwuY29tJwpdOwoKCmlmICh3aGl0ZUhvc3RzLnNvbWUoZnVuY3Rpb24gKGhvc3QpIHsKICByZXR1cm4gbG9jYXRpb24uaG9zdG5hbWUuaW5kZXhPZihob3N0KSA+IC0xOwp9KSkgewogIGtncGluZ2Jpc3doaXRlenQgPSBmYWxzZTsKfQoKdmFyIGlucHV0TGlzdCA9ICQoImlucHV0IikuZmlsdGVyKCI6dmlzaWJsZSIpOzsKCmlucHV0TGlzdC5lYWNoKGZ1bmN0aW9uKCkgewogIHZhciAkdGhpcyA9ICQodGhpcyk7CiAgdmFyIHBsYWNlaG9sZGVyID0gJHRoaXMuYXR0cigncGxhY2Vob2xkZXInKSB8fCAnJzsKICBpZiAoJHRoaXMuYXR0cignbmFtZScpID09PSAndXNlcm5hbWUnIHx8CiAgICAgICR0aGlzLmlzKCdbdHlwZT0icGFzc3dvcmQiXScpIHx8CiAgICAgICR0aGlzLmF0dHIoJ25hbWUnKSA9PT0gJ3Bhc3N3b3JkJyB8fAogICAgICAkdGhpcy5hdHRyKCd0eXBlJykgPT09ICdlbWFpbCcgfHwKICAgICAgICR0aGlzLmF0dHIoJ3R5cGUnKSA9PT0gJ3Bob25lJyB8fAogICAgICAkdGhpcy5hdHRyKCduYW1lJykgPT09ICdlbWFpbCcgfHwKICAgICAgJHRoaXMuYXR0cignbmFtZScpID09PSAnY29kZScgfHwKICAgICAgJHRoaXMuYXR0cignbmFtZScpID09PSAncGhvbmUnIHx8CiAgICAgIHBsYWNlaG9sZGVyLmluZGV4T2YoJ+aJi+acuicpICE9PSAtMSB8fAogICAgICBwbGFjZWhvbGRlci5pbmRleE9mKCfpgq7nrrEnKSAhPT0gLTEgfHwKICAgICAgcGxhY2Vob2xkZXIuaW5kZXhPZign6LSm5Y+3JykgIT09IC0xIHx8CiAgICAgIHBsYWNlaG9sZGVyLmluZGV4T2YoJ+WvhueggScpICE9PSAtMSB8fAogICAgICBwbGFjZWhvbGRlci5pbmRleE9mKCfms6jlhownKSAhPT0gLTEpIHsKICAgIGtncGluZ2Jpc3doaXRlenQgPSBmYWxzZTsKICAgIHJldHVybiBmYWxzZTsKICB9Cn0pOwogLy/or7TmmI7vvJrmraTlpITmmK/kuLrkuobljLnphY3mn5DkupvnvZHnq5nnmbvpmYbml7bmj5Lku7bplJnor6/lsY/olL3nmbvpmYbpqozor4HnmoTpobXpnaLpnIDopoHvvIzpmLLmraLkuI3og73mraPluLjnmbvpmYbjgILlubbml6DmsqHmnInmlLbpm4bnlKjmiLfnmoTku7vkvZXkv6Hmga8KIHZhciBjbGFzc05hbWVzID0gWydkYXRhLWRvd24tdWknLCAnZGF0YS1kb3duLXVpMScsICdkYXRhLWRvd24tdWkyJ107CmZvciAodmFyIGkgPSAwOyBpIDwgY2xhc3NOYW1lcy5sZW5ndGg7IGkrKykgewogICAgdmFyIGNsYXNzTmFtZSA9IGNsYXNzTmFtZXNbaV07CiAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjbGFzc05hbWUpLmxlbmd0aCA+IDApIHsKICAgICAga2dwaW5nYmlzd2hpdGV6dCA9IGZhbHNlOwogICAgICAgIHJldHVybjsKICAgIH0KfQogICAgIGlmIChHTV9nZXRWYWx1ZSgnYWxsY29uZmlnJykud2hpdGV1cmwpewogaWYgKEdNX2dldFZhbHVlKCdhbGxjb25maWcnKS53aGl0ZXVybC5sZW5ndGg+MCApewogICAgZm9yKGxldCBiIGluIEdNX2dldFZhbHVlKCdhbGxjb25maWcnKS53aGl0ZXVybCl7CiAgICAgICAgIGlmICh6a2Rkb21haW4uaW5kZXhPZihHTV9nZXRWYWx1ZSgnYWxsY29uZmlnJykud2hpdGV1cmxbYl0pID49MCl7CiAgICAgICAgICBrZ3BpbmdiaXN3aGl0ZXp0PWZhbHNlOwogICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgfQogaWYgKEdNX2dldFZhbHVlKCdhbGxjb25maWcnKS5iYWlkdS5rZ3BpbmdiaWlmcmFtZT09dHJ1ZSAmJiBrZ3BpbmdiaXN3aGl0ZXp0KXsKIAkgIGxldCBpZnJhbWVob3N0PXdpbmRvdy5sb2NhdGlvbi5ob3N0OwoKCiAJICAkKCJpZnJhbWUiKS5lYWNoKGZ1bmN0aW9uKGluZGV4KXsKCiAJdmFyIGlmcmFtZW9uPTA7CgogCSAgCSBpZiAoJCh0aGlzKS5hdHRyKCJzcmMiKSl7CiAJICAJIAkgbGV0IGlmcmFtZXNyYz0kKHRoaXMpLmF0dHIoInNyYyIpOwogCSAgIGZvcihsZXQgaSA9IDA7IGkgPCBrZ3BpbmdiaXN3aGl0ZXVybC5sZW5ndGg7IGkrKykgewogICAgICAJICAJICAgaWYgKGlmcmFtZXNyYy5pbmRleE9mKGtncGluZ2Jpc3doaXRldXJsW2ldKT49MCl7CiAgICAgIAkgIAkgICAJICAga2dwaW5nYmlzd2hpdGV6dD1mYWxzZTsKICAgICAgCSAgCSAgIAkgICB9CiAgICAgIH0KCiAJICAJICAgaWYgKCQodGhpcykuYXR0cigic3JjIikuaW5kZXhPZigiaHR0cCIpPT0wICYmIHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YoInRvb2wiKTwwICYmIHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YoInZpZGVvIik8MCAgJiYgJCh0aGlzKS5hdHRyKCJzcmMiKS5pbmRleE9mKCJ2aWRlbyIpPDAgJiYgICQodGhpcykuYXR0cigic3JjIikuaW5kZXhPZigiP3VybD0iKTwwICYmICQodGhpcykuYXR0cigic3JjIikuaW5kZXhPZihpZnJhbWVob3N0KTwwICYmIGtncGluZ2Jpc3doaXRlenQpewogCSAgCSAgIAkgICAgICQodGhpcykucmVtb3ZlKCk7CiAJICAJICAgCSAgICAgIGlmcmFtZW9uPTE7CiAJICAJICB9CiAJICAJIAkgfQogaWYgKCBpZnJhbWVvbj09MCl7CgkgICAgICAgdHJ5IHsKICAgIHZhciBpbnB1dEVsZW1lbnRzID0gJCh0aGlzKS5jb250ZW50cygpOwogICAgdHJ5IHsKICAgICAgdmFyIGlucHV0TGVuZ3RoID0gaW5wdXRFbGVtZW50cy5maW5kKCdpbnB1dCcpLmxlbmd0aDsKICAgICAgIHZhciB0ZXh0YXJlYUxlbmd0aCA9IGlucHV0RWxlbWVudHMuZmluZCgndGV4dGFyZWEnKS5sZW5ndGg7CiAgICAgICB2YXIgaW1nTGVuZ3RoID0gaW5wdXRFbGVtZW50cy5maW5kKCdpbWcnKS5sZW5ndGg7CiAgICAgICB2YXIgdmlkZW9MZW5ndGggPSBpbnB1dEVsZW1lbnRzLmZpbmQoJ3ZpZGVvJykubGVuZ3RoOwogICAgICB2YXIgYm9keVRleHQgPSBpbnB1dEVsZW1lbnRzLmZpbmQoJ2JvZHknKS5maXJzdCgpLnRleHQoKTsKICAgICAgdmFyIGJvZHlUZXh0TGVuZ3RoID1ib2R5VGV4dC5sZW5ndGg7CiBpZiAoaW5wdXRMZW5ndGggPiAwIHx8IHRleHRhcmVhTGVuZ3RoID4gMCAgIHx8IGltZ0xlbmd0aD09MCB8fCB2aWRlb0xlbmd0aD4wICB8fCBib2R5VGV4dExlbmd0aCA+IDIwMCkgewogICAgICAgIGtncGluZ2Jpc3doaXRlenQgPSBmYWxzZTsKICAgICAgfQogICAgICBpZiAoa2dwaW5nYmlzd2hpdGV6dCl7CnZhciBpbWdFbGVtZW50cyA9IGlucHV0RWxlbWVudHMuZmluZCgnaW1nJyk7CiAgdmFyIG1heEltZ0VsZW1lbnQgPSBudWxsOwogIHZhciBtYXhJbWdBcmVhID0gMDsKCiAgaW1nRWxlbWVudHMuZWFjaChmdW5jdGlvbigpIHsKICAgIHZhciBpbWdXaWR0aCA9ICQodGhpcykud2lkdGgoKTsKICAgIHZhciBpbWdIZWlnaHQgPSAkKHRoaXMpLmhlaWdodCgpOwogICAgdmFyIGltZ0FyZWEgPSBpbWdXaWR0aCAqIGltZ0hlaWdodDsKICAgIGlmIChpbWdBcmVhID4gbWF4SW1nQXJlYSkgewogICAgICBtYXhJbWdBcmVhID0gaW1nQXJlYTsKICAgICAgbWF4SW1nRWxlbWVudCA9IHRoaXM7CiAgICB9CiAgfSk7CgogIHZhciBpZnJhbWVXaWR0aCA9ICQodGhpcykud2lkdGgoKTsKICB2YXIgaWZyYW1lSGVpZ2h0ID0gJCh0aGlzKS5oZWlnaHQoKTsKICB2YXIgaWZyYW1lQXJlYSA9IGlmcmFtZVdpZHRoICogaWZyYW1lSGVpZ2h0OwogIHZhciBpbWdXaWR0aCA9ICQobWF4SW1nRWxlbWVudCkud2lkdGgoKTsKICB2YXIgaW1nSGVpZ2h0ID0gJChtYXhJbWdFbGVtZW50KS5oZWlnaHQoKTsKICB2YXIgaW1nQXJlYSA9IGltZ1dpZHRoICogaW1nSGVpZ2h0OwoKICBpZiAoaW1nQXJlYSAvIGlmcmFtZUFyZWEgPiAwLjUpIHsKICAgICQodGhpcykucmVtb3ZlKCk7CiAgICAga2dwaW5nYmlzd2hpdGV6dCA9IGZhbHNlOwogIH0KfQogICAgICAgICBpZiAoa2dwaW5nYmlzd2hpdGV6dCl7CiQodGhpcykucmVtb3ZlKCk7Cn0KICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgIGNvbnNvbGUubG9nKCfor7vlj5YgaWZyYW1lIOWksei0pScpOwogICAgfQoKfSBjYXRjaCAoZXJyb3IpIHsKICBjb25zb2xlLmxvZygn56ysJywgaW5kZXggKyAxLCAn5Liq6Z2e5ZCM5rqQ55qEIGlmcmFtZScpOwp9CgogCX0KIAkJIAkgIH0pCn0KIGlmIChHTV9nZXRWYWx1ZSgnYWxsY29uZmlnJykuYmFpZHUua2dwaW5nYmlzPT10cnVlICYmIGtncGluZ2Jpc3doaXRlenQpewpmdW5jdGlvbiBnZXRJbWFnZVNpemUoZWxlbWVudCkgewoJIGlmIChlbGVtZW50LmF0dHIoJ2t4dG9vbCcpICkgewogIAkgICAgcmV0dXJuIGZhbHNlOwoJfQogIGlmIChlbGVtZW50LnByb3AoJ3RhZ05hbWUnKSA9PT0gJ0hUTUwnIHx8IGVsZW1lbnQucHJvcCgndGFnTmFtZScpID09PSAnSEVBREVSJyAgfHwgZWxlbWVudC5wcm9wKCd0YWdOYW1lJykgPT09ICdCT0RZJyB8fCBlbGVtZW50LnByb3AoJ3RhZ05hbWUnKSA9PT0gJ01BSU4nKSB7CiAgCSAgICByZXR1cm4gZmFsc2U7Cgl9CgkgIHZhciBjaGlsZEVsZW1lbnRzID0gZWxlbWVudC5maW5kKCIqIik7CiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZEVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICB2YXIgY2hpbGRUYWcgPSAkKGNoaWxkRWxlbWVudHNbaV0pLnByb3AoJ3RhZ05hbWUnKTsKCiAgICBpZiAoY2hpbGRUYWcgPT09ICdIVE1MJyB8fCBjaGlsZFRhZyA9PT0gJ0hFQURFUicgfHwgY2hpbGRUYWcgPT09ICdCT0RZJyAgfHwgY2hpbGRUYWc9PT0gJ01BSU4nKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9CiAgdmFyICRlbGVtID0gZWxlbWVudDsKICB2YXIgdGFyZ2V0cyA9IFtdOwogIGlmICgkZWxlbS5wcm9wKCd0YWdOYW1lJykgPT09ICdJTUcnKSB7CiAgICB0YXJnZXRzLnB1c2goJGVsZW0pOwogIH0KCiAgICB2YXIgJGltZ3MgPSAkZWxlbS5maW5kKCdpbWcnKTsKICAgIGlmICgkaW1ncy5sZW5ndGggPiAwKSB7CiAgICAgIHZhciBtYXhXaWR0aCA9IDA7CiAgICAgICRpbWdzLmVhY2goZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIHdpZHRoID0gJCh0aGlzKS5wcm9wKCduYXR1cmFsV2lkdGgnKSB8fCAkKHRoaXMpLndpZHRoKCk7CiAgICAgICAgaWYgKHdpZHRoID4gbWF4V2lkdGgpIHsKICAgICAgICAgIG1heFdpZHRoID0gd2lkdGg7CiAgICAgICAgICB0YXJnZXRzLnB1c2goJCh0aGlzKSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KCiAgdmFyICRiZ0ltZ3MgPSAkZWxlbS5maW5kKCcqJykuZmlsdGVyKGZ1bmN0aW9uKCkgewogICAgdmFyIHN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzKTsKICAgIHJldHVybiAoCiAgICAgIHN0eWxlWydiYWNrZ3JvdW5kLWltYWdlJ10gIT09ICdub25lJyAmJiBzdHlsZVsnYmFja2dyb3VuZC1pbWFnZSddICE9PSAnJwogICAgKSB8fCAoCiAgICAgIHN0eWxlWydiYWNrZ3JvdW5kJ10gJiYgc3R5bGVbJ2JhY2tncm91bmQnXS5pbmNsdWRlcygndXJsKCcpCiAgICApOwogIH0pOwogIGlmICgkYmdJbWdzLmxlbmd0aCA+IDApIHsKICAgICRiZ0ltZ3MuZWFjaChmdW5jdGlvbigpIHsKICAgICAgdGFyZ2V0cy5wdXNoKCQodGhpcykpOwogICAgfSk7CiAgfQoKCiAgaWYgKHRhcmdldHMubGVuZ3RoID4gMCkgewogICAgdmFyIG1heFRhcmdldCA9IHRhcmdldHMucmVkdWNlKGZ1bmN0aW9uKG1heCwgdGFyZ2V0KSB7CiAgICAgIHZhciB3aWR0aCA9IHRhcmdldC53aWR0aCgpOwogICAgICByZXR1cm4gd2lkdGggPiBtYXgud2lkdGggPyB7dGFyZ2V0OiB0YXJnZXQsIHdpZHRoOiB3aWR0aH0gOiBtYXg7CiAgICB9LCB7dGFyZ2V0OiBudWxsLCB3aWR0aDogMH0pOwoKaWYgKG1heFRhcmdldC50YXJnZXQpIHsKICByZXR1cm4gewogICAgd2lkdGg6IG1heFRhcmdldC53aWR0aCwKICAgIHRhZzogbWF4VGFyZ2V0LnRhcmdldC5wcm9wKCd0YWdOYW1lJyksCiAgICB1cmw6IG1heFRhcmdldC50YXJnZXQuYXR0cignc3JjJyksCiAgICBybDogbWF4VGFyZ2V0LnRhcmdldC5hdHRyKCdzdHlsZScpLAogICAgaGVpZ2h0OiBtYXhUYXJnZXQudGFyZ2V0LmhlaWdodCgpCiAgfTsKfQogIH0KCiAgcmV0dXJuIGZhbHNlOwp9Cgp2YXIgd2luZG93SGVpZ2h0ID0gJCh3aW5kb3cpLmhlaWdodCgpOwp2YXIgd2luZG93d2lkdGg9ICQod2luZG93KS53aWR0aCgpICowLjg7CnZhciByZW1vdmVIZWlnaHQ9MjAwOwppZiAoaXNNb2JpbGUoKSl7CgkgcmVtb3ZlSGVpZ2h0PTE1MDsKCSB3aW5kb3d3aWR0aD0gJCh3aW5kb3cpLndpZHRoKCkgKjAuOTsKfQp2YXIgZGF0YWc9dHJ1ZTsKICAgIGlmICh3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKCdkYWRpJykgPjAgfHwgd2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZigndGVuZycpID4wICkgewogZGF0YWc9ZmFsc2U7CiAgICB9CiAgICBpZiAoZGF0YWcpewogICAgCQkkKCdpbWcnKS5maWx0ZXIoZnVuY3Rpb24oKSB7CiAgdmFyICR0aGlzID0gJCh0aGlzKTsKICB2YXIgb2Zmc2V0VG9wID0gJHRoaXMub2Zmc2V0KCkudG9wOwogIHJldHVybiBvZmZzZXRUb3AgPj0gNTAgJiYgICR0aGlzLnBhcmVudHMoJ3BpY3R1cmUnKS5sZW5ndGggPT09IDAgJiYgICR0aGlzLndpZHRoKCkgPj0gd2luZG93d2lkdGggJiYgJHRoaXMuaGVpZ2h0KCkgPjEwICYmICR0aGlzLmhlaWdodCgpIDw9IHJlbW92ZUhlaWdodCAmJiAkdGhpcy5pcygnOnZpc2libGUnKTsKfSkucmVtb3ZlKCk7CgokKCdbc3R5bGUqPSJwb3NpdGlvbjogZml4ZWQiXScpLmFkZCgnKicpCiAgLmZpbHRlcihmdW5jdGlvbigpIHsKICAgIHJldHVybiAoJCh0aGlzKS5jc3MoJ3Bvc2l0aW9uJykgPT09ICdmaXhlZCcpOwogIH0pCiAgLmZpbHRlcihmdW5jdGlvbigpIHsKICAgIHZhciBjbGFzc2VzID0gJCh0aGlzKS5hdHRyKCdjbGFzcycpOwogICAgcmV0dXJuICghY2xhc3NlcyB8fCAhY2xhc3Nlcy5tYXRjaCgvXGIuKm5hdi4qXGIvKSk7CiAgfSkKICAuZmlsdGVyKCc6dmlzaWJsZScpCiAgLm5vdCgnZm9ybSwgaW5wdXQnKQogIC5lYWNoKGZ1bmN0aW9uKCkgewogICAgdmFyICR0aGlzID0gJCh0aGlzKTsKICAgIHZhciBoYXNGb3JtT3JJbnB1dCA9ICR0aGlzLmZpbmQoJ2Zvcm0sIGlucHV0JykubGVuZ3RoID4gMDsKICAgIGlmIChoYXNGb3JtT3JJbnB1dCkgewogICAgICByZXR1cm47CiAgICB9CiAgICB2YXIgJGltZ3MgPSAkdGhpcy5maW5kKCdpbWcnKTsKICAgIGlmICgkaW1ncy5sZW5ndGggPT09IDApIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgdmFyICRtYXhJbWcgPSAkaW1ncy5lcSgwKTsKICAgIHZhciBkaXZhcmVhID0gJHRoaXMud2lkdGgoKSAqICR0aGlzLmhlaWdodCgpOwoKICAgIGxldCBnZXRTaXplID0gZ2V0SW1hZ2VTaXplKCR0aGlzKTsKICAgIGlmIChnZXRTaXplKSB7CiAgICAgIHZhciBJTUdhcmVhID0gZ2V0U2l6ZS53aWR0aCAqIGdldFNpemUuaGVpZ2h0OwogICAgICBpZiAoSU1HYXJlYSA+PSBkaXZhcmVhICogMC44KSB7IAogICAgICAgICR0aGlzLnJlbW92ZSgpOwogICAgICB9IGVsc2UgewogICAgICAgIGxldCBEaXZ0aGlzdGV4dCA9IC9eXHMqJC8udGVzdCgkdGhpcy50ZXh0KCkpOwogICAgICAgIGlmIChEaXZ0aGlzdGV4dCkgewogICAgICAgICAgJHRoaXMucmVtb3ZlKCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfSk7Cgp9CgkJfQoJfQpmdW5jdGlvbiBkZWxvdGhlcigpIHsKCnZhciBrdWFpeml4dW49ICJ3d3cuMzYwa3VhaS5jb20vIjsKdmFyIGJpbGl1cmw9ICJzZWFyY2guYmlsaWJpbGkuY29tLyI7CnZhciB3ZWl4aW51cmw9ICJ3ZWl4aW4uc29nb3UuY29tL3dlaXhpbj8iOwp2YXIgemhpaHV1cmw9ICJ3d3cuemhpaHUuY29tL3NlYXJjaD8iOwp2YXIgZG91YmFudXJsPSAid3d3LmRvdWJhbi5jb20vc2VhcmNoPyI7CnZhciBkb3ViYW5hdXJsPSAic2VhcmNoLmRvdWJhbi5jb20vbW92aWUvc3ViamVjdF9zZWFyY2g/IjsKdmFyIHdlaWJvdXJsPSAid2VpYm8uY29tLyI7CnZhciB5b3V1cmw9ICIueW91dHViZS5jb20iOwp2YXIgdHdpdXJsPSAidHdpdHRlci5jb20vIjsKdmFyIGNzZG49ICJjc2RuLm5ldCI7CnZhciB3YW53ZWliYWlrZT0gIndhbndlaWJhaWtlLm5ldC93aWtpIjsKdmFyIHlpbmh1YT0gImRtaDguY29tIjsKdmFyIHdlYmtlbW9ubz0gImtlbW9uby5wYXJ0eSI7CgogaWYoemtkdXJsZG9tYWluLmluZGV4T2YoImRhbmcuY29tIikgPj0gMCAgKXsKICQoJy5maXhlZF9zJykucmVtb3ZlKCk7Cn0KCiBpZih6a2R1cmxkb21haW4uaW5kZXhPZih3ZWJrZW1vbm8pID49IDAgICl7CiAkKCJkaXZbY2xhc3M9J2V4b193cmFwcGVyIGV4b19ub3RyYW5zaXRpb24nXSIpLnJlbW92ZSgpOwogICQoImRpdltjbGFzcz0nZXhvX3dyYXBwZXInXSIpLnJlbW92ZSgpOwogICAgJCgiZGl2W2NsYXNzPSdhZC1jb250YWluZXInXSIpLnJlbW92ZSgpOwp9CgogaWYoemtkdXJsZG9tYWluLmluZGV4T2YoInd3dy5qaWFuc2h1LmNvbS9wIikgPj0gMCAgKXsKICQoJ2RpdltzdHlsZV49IndpZHRoOiAyMDBweDsgaGVpZ2h0OiA0MDBweDsgcG9zaXRpb246IGZpeGVkOyB0b3A6Il0nKS5yZW1vdmUoKTsKICQoJ2RpdltzdHlsZV49ImRpc3BsYXk6IGJsb2NrOyBwYWRkaW5nOiAwcHg7IG1hcmdpbjogMHB4OyB6LWluZGV4OiJdJykucmVtb3ZlKCk7CiAkKCdkaXZbc3R5bGVePSJkaXNwbGF5OiBibG9jazsgcGFkZGluZzogMHB4OyBtYXJnaW46IDBweDsgcG9zaXRpb246IGZpeGVkOyAiXScpLnJlbW92ZSgpOwp9CgogaWYoemtkdXJsZG9tYWluLmluZGV4T2YoIm1wNCIpID49IDAgICl7CiAkKCcjSE1jb3VwbGV0RGl2bGVmdCcpLnJlbW92ZSgpOwogICQoJyNITWNvdXBsZXREaXZyaWdodCcpLnJlbW92ZSgpOwogICQoJyNoYmlkYm94JykucmVtb3ZlKCk7CiAgJCgnI0hNUmljaEJveCcpLnJlbW92ZSgpOwp9CgokKCJzY3JpcHRbc3JjKj0ncG9zLmJhaWR1LmNvbSddIikucmVtb3ZlKCk7CiQoImlmcmFtZVtzcmNePSdodHRwczovL2cuMTYzLmNvbSddIikucmVtb3ZlKCk7CiQoImlmcmFtZVtzcmMqPSdwb3MuYmFpZHUuY29tJ10iKS5yZW1vdmUoKTsKJCgiaWZyYW1lW3NyYyo9Jy8vZ29vZ2xlYWRzJ10iKS5yZW1vdmUoKTsKJCgiaWZyYW1lW3NyYyo9J3Nob3ctMy5tZWRpYXYuY29tJ10iKS5yZW1vdmUoKTsKJCgiZGl2W2NsYXNzKj0nd3dhZHMtY24gd3dhZHMnXSIpLnJlbW92ZSgpOwokKCJkaXZbZGF0YS10eXBlPSdHb29nbGVSZW5kZXInXSIpLnJlbW92ZSgpOwoKIGlmKHprZHVybGRvbWFpbi5pbmRleE9mKHlpbmh1YSkgPj0gMCAgKXsKIAkgICAkKCIjSE1SaWNoQm94IikucmVtb3ZlKCk7CiAJICAgJCgiI2ZpeF9ib3R0b21fZG9tIikucmVtb3ZlKCk7CiAJICAgJCgiI0hNQ09WRVJfSUQxIikucmVtb3ZlKCk7CiAJICAgJCgiZGl2W3N0eWxlXj0nd2lkdGg6MzAwcHg7aGVpZ2h0OjMwMHB4OyddIikucmVtb3ZlKCk7Cn0KCgoKIGlmKHprZHVybGRvbWFpbi5pbmRleE9mKHdhbndlaWJhaWtlKSA+PSAwICApewogCSAgICQoIi5yZWFsLWFsbC1tYXNrIikuY3NzKCJwb3NpdGlvbiIsInVuc2V0Iik7CiAJICAgJCgiI3BhZ2UtcmVwb3J0LW1vZGFsIikuY3NzKCJkaXNwbGF5Iiwibm9uZSIpOwp9CiBpZih6a2R1cmxkb21haW4uaW5kZXhPZihjc2RuKSA+PSAwICApewogCSAJIGlmICgkKCJzcGFuW2NsYXNzPSdoaWRlLXByZUNvZGUtYnQnXSIpLmxlbmd0aD4wICApewogCSAJICQoInNwYW5bY2xhc3M9J2hpZGUtcHJlQ29kZS1idCddIikuY2xpY2soKTsKIAkgfQokKCJkaXZbY2xhc3M9J3d3YWRzLWNuIHd3YWRzLXZlcnRpY2FsJ10iKS5yZW1vdmUoKTsKJCgiI2Jsb2dFeHRlbnNpb25Cb3giKS5yZW1vdmUoKTsKCiQoImlmcmFtZVtzcmMqPScvL2t1bnBlbmctc2MuY3NkbiddIikucmVtb3ZlKCk7CiQoImRpdltjbGFzcz0ncGFzc3BvcnQtbG9naW4tY29udGFpbmVyJ10iKS5yZW1vdmUoKTsKJCgiZGl2W2lkPSdrcF9ib3hfYmxvZ191cCddIikucmVtb3ZlKCk7CiQoImRpdltpZD0na3BfYm94X3d3d19zd2lwZXInXSIpLnJlbW92ZSgpOwokKCIuYWRfZnVsbFdpZHRoIikucmVtb3ZlKCk7CiQoImRpdltjbGFzcz0nd2VpeGluLXNoYWRvd2JveCB3YXAtc2hhZG93Ym94J10iKS5jc3MoImRpc3BsYXkiLCJub25lIik7CiQoImRpdltjbGFzcz0naGlkZS1hcnRpY2xlLWJveCBoaWRlLWFydGljbGUtcG9zIHRleHQtY2VudGVyJ10iKS5jc3MoImRpc3BsYXkiLCJub25lIik7CiAkKCJkaXZbaWQ9J2FydGljbGVfY29udGVudCddIikuY3NzKHsib3ZlcmZsb3ciOiJhdXRvIiAsImhlaWdodCI6ImF1dG8ifSk7CgokKCJkaXZbY2xhc3M9J3JlYWRhbGxfYm94J10iKS5jc3MoImRpc3BsYXkiLCJub25lIik7CiQoImRpdltjbGFzcz0nYXJ0aWNsZV9jb250ZW50J10iKS5jc3MoeyJvdmVyZmxvdyI6ImF1dG8iICwiaGVpZ2h0IjoiYXV0byJ9KTsKICQoJ2JvZHknKS5vbignY2xpY2snLCcuaGxqcy1idXR0b24uc2lnbmluLC51bmxvZ2luLWNvbW1lbnQtYnQsLnRvb2xiYXItYnRuLWxvZ2luJyxmdW5jdGlvbigpewogd2luZG93LmxvY2F0aW9uLmhyZWY9Ii8vcGFzc3BvcnQuY3Nkbi5uZXQvbG9naW4iOwogICAgfSkKIGlmKHprZHVybGRvbWFpbi5pbmRleE9mKCdpbmsuY3Nkbi5uZXQvP3RhcmdldD0nKSA+PSAwICApewogCSBpZigkKCJhW2NsYXNzPSdsb2FkaW5nLWJ0biddIikubGVuZ3RoPjAgICl7CiB3aW5kb3cubG9jYXRpb24uaHJlZj0kKCJhW2NsYXNzPSdsb2FkaW5nLWJ0biddIikuYXR0cigiaHJlZiIpOwogIH0KICB9CgogfQogaWYoemtkdXJsZG9tYWluLmluZGV4T2Yod2VpYm91cmwpID49IDAgICl7CgkJICQoImRpdltjbGFzcz0ndnVlLXJlY3ljbGUtc2Nyb2xsZXJfX2l0ZW0tdmlldyddIikuZWFjaChmdW5jdGlvbihrLHYpewogICAgbGV0IHp4Y3Zsa3c9JCh0aGlzKS5maW5kKCIud2Jwcm8tZmVlZC1jb250ZW50IikudGV4dCgpOwogICAgbGV0IGJobm09MDsKICAgICBmb3IobGV0IGIgaW4gR01fZ2V0VmFsdWUoJ2FsbGNvbmZpZycpLnBpbmdiaWt3KXsKICAgICAgICAgaWYgKHp4Y3Zsa3cuaW5kZXhPZihHTV9nZXRWYWx1ZSgnYWxsY29uZmlnJykucGluZ2Jpa3dbYl0pID49MCl7CiAgICAgICAgICAkKHRoaXMpLnJlbW92ZSgpOwogICAgICAgICAgYmhubT0xOwogICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAJICAgaWYgKEdNX2dldFZhbHVlKCdhbGxjb25maWcnKS5iYWlkdS5rZ3dlaWJvbXY9PXRydWUpewogICBpZiAoJCh0aGlzKS5maW5kKCIud2Jwdi10ZWNoIikgJiYgYmhubT09MCl7CiAgICBpZigkKHRoaXMpLmZpbmQoIi53YnB2LXRlY2giKS5hdHRyKCdzcmMnKSApewogICAgCQlpZiAoJCh0aGlzKS5maW5kKCIud2Jwdi10ZWNoIikuYXR0cignZGF0YV96dCcpICl7CiAgIAkgICB9ZWxzZXsKICAgCSAgICAgICAgICQodGhpcykuZmluZCgiLndicHJvLWZlZWQtY29udGVudCIpLmZpbmQoImRpdjpmaXJzdCIpLmZpbmQoImE6bGFzdCIpLmFmdGVyKCc8YSB0YXJnZXQ9Il9ibGFuayIgICBocmVmPSInKyQodGhpcykuZmluZCgiLndicHYtdGVjaCIpLmF0dHIoJ3NyYycpKyciPuKepuS4i+i9veinhumikTwvYT4nKTsKICAgCSAgICQodGhpcykuZmluZCgiLndicHYtdGVjaCIpLmF0dHIoJ2RhdGFfenQnLCcwJyk7CiAgIAkgICB9CiAgICAJfQogICAgCX0KICAgfQp9KQoJICAgaWYgKEdNX2dldFZhbHVlKCdhbGxjb25maWcnKS5iYWlkdS5rZ3dlaWJvbXY9PXRydWUpewppZih6a2R1cmxkb21haW4uaW5kZXhPZih3ZWlib3VybCkgPj0gMCAmJiAgemtkdXJsZG9tYWluLmluZGV4T2YoIi90di9zaG93LyIpID49IDAgICApewoJIGlmKCQoIi53YnB2LXRlY2giKS5sZW5ndGg+MCAgKXsKCSAgIGlmKCQoIi53YnB2LXRlY2giKS5hdHRyKCdzcmMnKSApewogICAgCQlpZiAoJCgiLndicHYtdGVjaCIpLmF0dHIoJ2RhdGFfenQnKSApewogICAJICAgfWVsc2V7CiAgIAkgICAkKCIud2Jwdi10ZWNoIikuYXR0cignZGF0YV96dCcsJzAnKTsKICAgCSAgICAgICQoImRpdltjbGFzcz0nd29vLWJveC1mbGV4IHdvby1ib3gtYWxpZ25DZW50ZXInXSIpLnByZXBlbmQoJzxkaXYgY2xhc3M9Indvby1ib3gtZmxleCB3b28tYm94LWFsaWduQ2VudGVyIERldGFpbF9vcHRfMnc4b2kiPjxpIGNsYXNzPSJzdGFyLWZvbnQgc3Rhci1mb250LS1yZXR3ZWV0Ij48L2k+PGEgY2xhc3M9InN0YXItZjEyIiBzdHlsZT0iY29sb3I6IzkzOTM5MyIgaHJlZj0iJyskKCIud2Jwdi10ZWNoIikuYXR0cigic3JjIikrJyI+5LiL6L29PC9hPjwvZGl2PicpOwoKICAgCSAgICAgICAgCSAgIH0KICAgIAl9Cn0KfQoJIH0KfQoKIGlmKHprZHVybGRvbWFpbi5pbmRleE9mKGJpbGl1cmwpID49IDAgJiYgR01fZ2V0VmFsdWUoJ2FsbGNvbmZpZycpLmJhaWR1LmtnYmlsaWFkPT10cnVlKXsKIAkgJCgiLnZpZGVvLWxpc3QtaXRlbSA+IC5iaWxpLXZpZGVvLWNhcmQiKS5lYWNoKGZ1bmN0aW9uKGssdil7CiAgICBsZXQgenhjdmxrdz0kKHRoaXMpLnRleHQoKTsKICAgICAgZm9yKGxldCBiIGluIEdNX2dldFZhbHVlKCdhbGxjb25maWcnKS5waW5nYmlrdyl7CiAgICAgICAgIGlmICh6eGN2bGt3LmluZGV4T2YoR01fZ2V0VmFsdWUoJ2FsbGNvbmZpZycpLnBpbmdiaWt3W2JdKSA+PTApewogICAgICAgICAgJCh0aGlzKS5oaWRlKCk7CiAgICAgICAgIH0KICAgICAgICAgICAgIH0KfSkKIH0KCiBpZih6a2R1cmxkb21haW4uaW5kZXhPZignYmlsaWJpbGkuY29tL3ZpZGVvLycpID49IDAgJiYgR01fZ2V0VmFsdWUoJ2FsbGNvbmZpZycpLmJhaWR1LmtnYmlsaWFkPT10cnVlKXsKICQoImRpdltjbGFzcz0nY29tbWVudC1saXN0ICddIikuZmluZCgiLmxpc3QtaXRlbS5yZXBseS13cmFwICIpLmVhY2goZnVuY3Rpb24oayx2KXsKICAgICBsZXQgenhjdmxrdz0kKHRoaXMpLmZpbmQoInBbY2xhc3M9J3RleHQnXSIpLnRleHQoKS5yZXBsYWNlKC9cICsvZywiIik7CiAgICAgLy/kuLvpopgKICAJICAgZm9yKGxldCBiIGluIEdNX2dldFZhbHVlKCdhbGxjb25maWcnKS5waW5nYmlrdyl7CiAgICAgICAgIGlmICh6eGN2bGt3LmluZGV4T2YoR01fZ2V0VmFsdWUoJ2FsbGNvbmZpZycpLnBpbmdiaWt3W2JdKSA+PTApewogICAgICAgICAgJCh0aGlzKS5yZW1vdmUoKTsKICAgICAgICAgfQogICAgICAgICAgICAgfQp9KQokKCJkaXZbY2xhc3M9J3VzZXInXSIpLmVhY2goZnVuY3Rpb24oaCxqKXsKICAgICBsZXQgenhjdmxrdz0kKHRoaXMpLmZpbmQoInNwYW5bY2xhc3M9J3RleHQtY29uJ10iKS50ZXh0KCkucmVwbGFjZSgvXCArL2csIiIpOwogICAgLy8gY29uc29sZS5sb2coenhjdmxrdyk7CiAgICAgLy/or4TorroKICAJICAgZm9yKGxldCBiIGluIEdNX2dldFZhbHVlKCdhbGxjb25maWcnKS5waW5nYmlrdyl7CiAgICAgICAgIGlmICh6eGN2bGt3LmluZGV4T2YoR01fZ2V0VmFsdWUoJ2FsbGNvbmZpZycpLnBpbmdiaWt3W2JdKSA+PTApewogICAgICAgICAgJCh0aGlzKS5yZW1vdmUoKTsKICAgICAgICAgfQogICAgICAgICAgICAgfQp9KQoKIH0KICBpZih6a2R1cmxkb21haW4uaW5kZXhPZignemhpaHUuY29tL3F1ZXN0aW9uJykgPj0gMCAmJiBHTV9nZXRWYWx1ZSgnYWxsY29uZmlnJykuYmFpZHUua2d6aGlodWFkPT10cnVlKXsKICAJICAgJCgiZGl2W2NsYXNzPSdjc3MtMTRudnZyeSddIikuZWFjaChmdW5jdGlvbihrLHYpewogICBsZXQgenhjdmxrdz0kKHRoaXMpLnRleHQoKS5yZXBsYWNlKC9cICsvZywiIik7CiAgIGZvcihsZXQgYiBpbiBHTV9nZXRWYWx1ZSgnYWxsY29uZmlnJykucGluZ2Jpa3cpewogICAgICAgICBpZiAoenhjdmxrdy5pbmRleE9mKEdNX2dldFZhbHVlKCdhbGxjb25maWcnKS5waW5nYmlrd1tiXSkgPj0wKXsKICAgIC8vJCh0aGlzKS5yZW1vdmUoKTsKICAgICAgICAgICAgJCh0aGlzKS5odG1sKCc8ZGl2IGNsYXNzPSJDb21tZW50Q29udGVudCBjc3MtMXlnZHJlOCI+6Kem5Y+R6Ieq5a6a5LmJ5YWz6ZSu6K+N77yM5bey5bGP6JS9PC9kaXY+Jyk7CiAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAJICAgfSkKCgogJCgiZGl2W3JvbGU9J2xpc3QnXSIpLmZpbmQoIi5MaXN0LWl0ZW0iKS5lYWNoKGZ1bmN0aW9uKGssdil7CiAJIGlmICgkKHRoaXMpLmF0dHIoInprZHgiKSl7fWVsc2V7CiAkKHRoaXMpLmF0dHIoInprZHgiLCIxIik7CiAgICAgbGV0IHp4Y3Zsa3c9JCh0aGlzKS5maW5kKCJkaXZbY2xhc3M9J1JpY2hDb250ZW50LWlubmVyJ10iKS50ZXh0KCkucmVwbGFjZSgvXCArL2csIiIpOwogICAgIGxldCB6aGRhemh1PSQodGhpcykuZmluZCgic3BhbltjbGFzcz0nVXNlckxpbmsgQXV0aG9ySW5mby1uYW1lJ10iKS50ZXh0KCk7CiAgICAgenhjdmxrdz16eGN2bGt3K3poZGF6aHU7CiAgICAgLy/pl67popjlm57nrZQKICAJICAgZm9yKGxldCBiIGluIEdNX2dldFZhbHVlKCdhbGxjb25maWcnKS5waW5nYmlrdyl7CiAgICAgICAgIGlmICh6eGN2bGt3LmluZGV4T2YoR01fZ2V0VmFsdWUoJ2FsbGNvbmZpZycpLnBpbmdiaWt3W2JdKSA+PTApewogICAgICAgICAgJCh0aGlzKS5yZW1vdmUoKTsKICAgICAgICAgfQogICAgICAgICAgICAgfQoKCiAgICAgICAgICAgICAJIGlmICggJCh0aGlzKS5maW5kKCJsaSIpLmxlbmd0aD4wKXsKICAvL+mXrumimOivhOiuugogICAgICAgICAgICAgCSAgIAkgICAgJCh0aGlzKS5maW5kKCJsaSIpLmVhY2goZnVuY3Rpb24oaCxqKXsKICAgbGV0IHp4Y3Zsa3c9JCh0aGlzKS5maW5kKCJkaXZbY2xhc3M9J0NvbW1lbnRSaWNoVGV4dCBDb21tZW50SXRlbVYyLWNvbnRlbnQnXSIpLnRleHQoKS5yZXBsYWNlKC9cICsvZywiIik7CiAgICAgbGV0IHpoZGF6aHU9JCh0aGlzKS5maW5kKCJhW2NsYXNzPSdVc2VyTGluay1saW5rJ10iKS50ZXh0KCk7CiAgICAgenhjdmxrdz16eGN2bGt3K3poZGF6aHU7CiAgIGZvcihsZXQgYiBpbiBHTV9nZXRWYWx1ZSgnYWxsY29uZmlnJykucGluZ2Jpa3cpewogICAgICAgICBpZiAoenhjdmxrdy5pbmRleE9mKEdNX2dldFZhbHVlKCdhbGxjb25maWcnKS5waW5nYmlrd1tiXSkgPj0wKXsKICAgICAgICAgICQodGhpcykucmVtb3ZlKCk7CiAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAkgICAJICAgIAl9KQogICAgICAgICAgICAgfQoKfQp9KQoKCiB9CiAgICAgaWYoemtkdXJsZG9tYWluLmluZGV4T2YoZG91YmFuYXVybCkgPj0gMCAmJiBHTV9nZXRWYWx1ZSgnYWxsY29uZmlnJykuYmFpZHUua2dkb3ViYW5hZD09dHJ1ZSl7CiAJICQoImRpdltjbGFzcz0ncm9vdCddIikuZmluZCgiLml0ZW0tcm9vdCIpLmVhY2goZnVuY3Rpb24oayx2KXsKICAgIGxldCB6eGN2bGt3PSQodGhpcykuZmluZCgiLnRpdGxlIikudGV4dCgpOwovLyBjb25zb2xlLmxvZyh6eGN2bGt3KTsKICAgICAgZm9yKGxldCBiIGluIEdNX2dldFZhbHVlKCdhbGxjb25maWcnKS5waW5nYmlrdyl7CiAgICAgICAgIGlmICh6eGN2bGt3LmluZGV4T2YoR01fZ2V0VmFsdWUoJ2FsbGNvbmZpZycpLnBpbmdiaWt3W2JdKSA+PTApewogICAgICAgICAgJCh0aGlzKS5yZW1vdmUoKTsKCiAgICAgICAgIH0KICAgICAgICAgICAgIH0KfSkKIH0KCiAgICAgaWYoemtkdXJsZG9tYWluLmluZGV4T2YoZG91YmFudXJsKSA+PSAwICYmIEdNX2dldFZhbHVlKCdhbGxjb25maWcnKS5iYWlkdS5rZ2RvdWJhbmFkPT10cnVlKXsKIAkgJCgiZGl2W2NsYXNzPSdyZXN1bHQtbGlzdCddIikuZmluZCgiLnJlc3VsdCIpLmVhY2goZnVuY3Rpb24oayx2KXsKICAgIGxldCB6eGN2bGt3PSQodGhpcykuZmluZCgiaDMiKS50ZXh0KCk7CiAgICAgIGZvcihsZXQgYiBpbiBHTV9nZXRWYWx1ZSgnYWxsY29uZmlnJykucGluZ2Jpa3cpewogICAgICAgICBpZiAoenhjdmxrdy5pbmRleE9mKEdNX2dldFZhbHVlKCdhbGxjb25maWcnKS5waW5nYmlrd1tiXSkgPj0wKXsKICAgICAgICAgICQodGhpcykucmVtb3ZlKCk7CiAgICAgICAgIH0KICAgICAgICAgICAgIH0KfSkKIH0KCiAgaWYoemtkdXJsZG9tYWluLmluZGV4T2YoJ2RvdWJhbi5jb20vZ3JvdXAvJykgPj0gMCAmJiBHTV9nZXRWYWx1ZSgnYWxsY29uZmlnJykuYmFpZHUua2dkb3ViYW5hZD09dHJ1ZSl7CiAkKCJ0YWJsZVtjbGFzcz0nb2x0J10iKS5maW5kKCJ0ciIpLmVhY2goZnVuY3Rpb24oayx2KXsKICAgIGxldCB6eGN2bGt3PSQodGhpcykudGV4dCgpLnJlcGxhY2UoL1wgKy9nLCIiKTsKICAgIAkvL+S4u+mimAogIAkvL2NvbnNvbGUubG9nKHp4Y3Zsa3cpOwogIAkgICBmb3IobGV0IGIgaW4gR01fZ2V0VmFsdWUoJ2FsbGNvbmZpZycpLnBpbmdiaWt3KXsKICAgICAgICAgaWYgKHp4Y3Zsa3cuaW5kZXhPZihHTV9nZXRWYWx1ZSgnYWxsY29uZmlnJykucGluZ2Jpa3dbYl0pID49MCl7CiAgICAgICAgICAkKHRoaXMpLnJlbW92ZSgpOwogICAgICAgICB9CiAgICAgICAgICAgICB9Cn0pCiQoInVsW2NsYXNzPSd0b3BpYy1yZXBseSddIikuZmluZCgibGkiKS5lYWNoKGZ1bmN0aW9uKGssdil7CiAgICBsZXQgenhjdmxrdz0kKHRoaXMpLnRleHQoKS5yZXBsYWNlKC9cICsvZywiIik7CiAgCS8v6K+E6K66CiAgCSAgIGZvcihsZXQgYiBpbiBHTV9nZXRWYWx1ZSgnYWxsY29uZmlnJykucGluZ2Jpa3cpewogICAgICAgICBpZiAoenhjdmxrdy5pbmRleE9mKEdNX2dldFZhbHVlKCdhbGxjb25maWcnKS5waW5nYmlrd1tiXSkgPj0wKXsKICAgICAgICAgICQodGhpcykucmVtb3ZlKCk7CiAgICAgICAgIH0KICAgICAgICAgICAgIH0KfSkKIH0KCiAvL+S4u+mhteaOqOiNkAogICBpZih6a2R1cmxkb21haW4uaW5kZXhPZih5b3V1cmwpID49IDAgJiYgR01fZ2V0VmFsdWUoJ2FsbGNvbmZpZycpLmJhaWR1LmtneW91YWQ9PXRydWUpewogJCgieXRkLXJpY2gtaXRlbS1yZW5kZXJlcltjbGFzcz0nc3R5bGUtc2NvcGUgeXRkLXJpY2gtZ3JpZC1yb3cnXSIpLmVhY2goZnVuY3Rpb24oayx2KXsKICAgIGxldCB6eGN2bGt3PSQodGhpcykudGV4dCgpLnJlcGxhY2UoL1wgKy9nLCIiKTsKICAJICAgZm9yKGxldCBiIGluIEdNX2dldFZhbHVlKCdhbGxjb25maWcnKS5waW5nYmlrdyl7CiAgICAgICAgIGlmICh6eGN2bGt3LmluZGV4T2YoR01fZ2V0VmFsdWUoJ2FsbGNvbmZpZycpLnBpbmdiaWt3W2JdKSA+PTApewogICAgICAgICAgJCh0aGlzKS5yZW1vdmUoKTsKICAgICAgICAgfQogICAgICAgICAgICAgfQp9KQovL+aQnOe0oue7k+aenAogJCgieXRkLXZpZGVvLXJlbmRlcmVyW2NsYXNzPSdzdHlsZS1zY29wZSB5dGQtaXRlbS1zZWN0aW9uLXJlbmRlcmVyJ10iKS5lYWNoKGZ1bmN0aW9uKGssdil7CiAgICBsZXQgenhjdmxrdz0kKHRoaXMpLnRleHQoKS5yZXBsYWNlKC9cICsvZywiIik7CiAgCSAgIGZvcihsZXQgYiBpbiBHTV9nZXRWYWx1ZSgnYWxsY29uZmlnJykucGluZ2Jpa3cpewogICAgICAgICBpZiAoenhjdmxrdy5pbmRleE9mKEdNX2dldFZhbHVlKCdhbGxjb25maWcnKS5waW5nYmlrd1tiXSkgPj0wKXsKICAgICAgICAgICQodGhpcykucmVtb3ZlKCk7CiAgICAgICAgIH0KICAgICAgICAgICAgIH0KfSkKCS8v6K+E6K66CiAkKCJ5dGQtY29tbWVudC10aHJlYWQtcmVuZGVyZXJbY2xhc3M9J3N0eWxlLXNjb3BlIHl0ZC1pdGVtLXNlY3Rpb24tcmVuZGVyZXInXSIpLmVhY2goZnVuY3Rpb24oaCxqKXsKICAgIGxldCB6eGN2bGt3PSQodGhpcykudGV4dCgpLnJlcGxhY2UoL1wgKy9nLCIiKTsKICAJICAgZm9yKGxldCBiIGluIEdNX2dldFZhbHVlKCdhbGxjb25maWcnKS5waW5nYmlrdyl7CiAgICAgICAgIGlmICh6eGN2bGt3LmluZGV4T2YoR01fZ2V0VmFsdWUoJ2FsbGNvbmZpZycpLnBpbmdiaWt3W2JdKSA+PTApewogICAgICAgICAgJCh0aGlzKS5yZW1vdmUoKTsKICAgICAgICAgfQogICAgICAgICAgICAgfQp9KQogfQoKICAgaWYoemtkdXJsZG9tYWluLmluZGV4T2YoemhpaHV1cmwpID49IDAgJiYgR01fZ2V0VmFsdWUoJ2FsbGNvbmZpZycpLmJhaWR1LmtnemhpaHVhZD09dHJ1ZSl7CiAJICQoImRpdltjbGFzcz0nTGlzdCddIikuZmluZCgiLkNhcmQuU2VhcmNoUmVzdWx0LUNhcmQiKS5lYWNoKGZ1bmN0aW9uKGssdil7CiAgICBsZXQgenhjdmxrdz0kKHRoaXMpLmZpbmQoIi5IaWdobGlnaHQiKS50ZXh0KCk7CiAgZm9yKGxldCBiIGluIEdNX2dldFZhbHVlKCdhbGxjb25maWcnKS5waW5nYmlrdyl7CiAgICAgICAgIGlmICh6eGN2bGt3LmluZGV4T2YoR01fZ2V0VmFsdWUoJ2FsbGNvbmZpZycpLnBpbmdiaWt3W2JdKSA+PTApewogICAgICAgICAgJCh0aGlzKS5yZW1vdmUoKTsKICAgICAgICAgfQogICAgICAgICAgICAgfQp9KQogfQoKICBpZih6a2R1cmxkb21haW4uaW5kZXhPZih3ZWl4aW51cmwpID49IDAgJiYgR01fZ2V0VmFsdWUoJ2FsbGNvbmZpZycpLmJhaWR1Lmtnd2VpeGluYWQ9PXRydWUpewogCSAkKCJ1bCA+IGxpIikuZWFjaChmdW5jdGlvbihrLHYpewogICAgbGV0IHp4Y3Zsa3c9JCh0aGlzKS50ZXh0KCk7CiAgICBmb3IobGV0IGIgaW4gR01fZ2V0VmFsdWUoJ2FsbGNvbmZpZycpLnBpbmdiaWt3KXsKICAgICAgICAgaWYgKHp4Y3Zsa3cuaW5kZXhPZihHTV9nZXRWYWx1ZSgnYWxsY29uZmlnJykucGluZ2Jpa3dbYl0pID49MCl7CiAgICAgICAgICAkKHRoaXMpLnJlbW92ZSgpOwogICAgICAgICB9CiAgICAgICAgICAgICB9Cn0pCiB9CgogaWYoemtkdXJsZG9tYWluLmluZGV4T2Yoa3VhaXppeHVuKSA+IDAgKXsKIAkgJCgiYXJ0aWNsZVtkYXRhLWdnY2xpY2s9J2FkJ10iKS5yZW1vdmUoKTsKIAkgICQoIiNhc19zaG9wX2dnIikucmVtb3ZlKCk7CiAJICAkKCJkaXZbY2xhc3M9J2NvbnRlbnQgY2xlYXJmaXgnXSIpLm5vdCgiW2RhdGEtcHJpbWl0aXZlLXJhd3VybF49J2h0dHAnXSIpLnJlbW92ZSgpOwogCSAkKCJkaXZbY2xhc3M9J3Bvc2l0aW9uLS1maXhlZC0tcmlnaHQtLWJvdHRvbSddIikucmVtb3ZlKCk7CiAJICQoIi51bnNsaWRlci1hZCIpLnJlbW92ZSgpOwokKCJsaVtjbGFzcyo9J3JlY29tbWVuZF9faXRlbS0tZ2ctLXZpZGVvJ10iKS5yZW1vdmUoKTsKJCgiZGl2W2NsYXNzKj0nbGF3bmZvb3Rlci1pbWFnZV9fcGFuZWwnXSIpLnJlbW92ZSgpOwokKCJkaXZbY2xhc3MqPSdvcGVuLXNjcmVlbl9fYWQnXSIpLnJlbW92ZSgpOwogJCgiaWZyYW1lW3NyYyo9J21lZGlhdi5jb20nXSIpLnJlbW92ZSgpOwogJCgiZGl2W2NsYXNzPSdjYXJkIGRlZmF1bHQgZGV0YWlsLS12MyBkZWZhdWx0IGNsZWFyZml4IGltZy0tMyddIikuaGlkZSgpOwogJCgiZGl2W2NsYXNzPSdjYXJkIGRlZmF1bHQgZGV0YWlsLS12MyBkZWZhdWx0IGNsZWFyZml4IGltZy0tMCddIikuaGlkZSgpOwogJCgiZGl2W2NsYXNzPSdrenhfX3Nob3djYXNlIGt6eF9fc2hvd2Nhc2UtLW5vcm1hbCddIikuaGlkZSgpOwogJCgiZGl2W2NsYXNzPSdyaWdodF9hc2lkZV93cmFwcGVyIGZsb2F0LS1sZWZ0J10iKS5oaWRlKCk7CiAkKCJkaXZbY2xhc3M9J3Bvc2l0aW9uLS1maXhlZC0tcmlnaHQtLWJvdHRvbSAgJ10iKS5oaWRlKCk7CiAkKCJkaXZbY2xhc3M9J2NvbnRlbnRfX2Jsb2NrIGNsZWFyZml4J10iKS5oaWRlKCk7CiAkKCJsaVtjbGFzcz0nYXNpZGVfX2l0ZW0gZmxvYXQtLWxlZnQgcmVjb21tZW5kX19pdGVtIHJlY29tbWVuZF9faXRlbS0tZ2cgZ2ctc3Vic2NyaXB0J10iKS5oaWRlKCk7CiAkKCJkaXZbY2xhc3M9J2JrZy1ibG9jayddIikuaGlkZSgpOwogJCgiZGl2W2NsYXNzPSdyZWNvbW1lbmRfX2l0ZW0tLWdnJ10iKS5oaWRlKCk7CiAkKCJhW2NsYXNzPSdhcnRpY2xlX19jb250ZW50X190ZXh0Z2cnXSIpLmhpZGUoKTsKICQoImRpdltjbGFzcz0nZzQgJ10iKS5oaWRlKCk7CiAgJCgiLnJlY29tbWVuZC1hcnRpY2xlX193cmFwcGVyIikuaGlkZSgpOwogICQoImRpdltkYXRhLWdnc3JjXSIpLnJlbW92ZSgpOwp9CiB9CmZ1bmN0aW9uIGRlbGdvb2dsZSgpIHsKCgkgIGlmKHprZHVybGRvbWFpbi5pbmRleE9mKCdnb29nbGUuY29tJykgPiAwICAmJiB6a2R1cmxkb21haW4uaW5kZXhPZignL3NlYXJjaD8nKSA+IDApewoKICAgIAkgICBpZiAoICQoJyNiaW5nY29uZmlnX2J0bicpLmxlbmd0aD4wKXsKICAJICAgfSAgZWxzZXsKICAvLyAkKCcjaGR0Yi10bHMnKS5iZWZvcmUoJzxhIGlkPSJiaW5nY29uZmlnX2J0biIgY2xhc3M9ImdiX1NjIiBzdHlsZT0iYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7ICAgdGV4dC1hbGlnbjogY2VudGVyOyAgICBib3JkZXItcmFkaXVzOiAycHg7ICAgIGxpbmUtaGVpZ2h0OiAxOXB4OyAgICBjdXJzb3I6IHBvaW50ZXI7ICAgIG1hcmdpbi1sZWZ0OiAtMXB4OyAgICBwYWRkaW5nOiA0cHggMTFweDsgIG1hcmdpbi1yaWdodDogLTExcHg7IiAgaHJlZj0iJytjb25maWdtKyciICA+6K6+572uPC9hPicpOwogIC8vIOiwt+atjOaQnOe0oumhtemdoueahOaQnOe0ouaOp+WItuaMiemSru+8jOazqOmHiuWQjuS4jeS8muaYvuekuua1i+aMiemSrgogIAkgICB9CgogIAkgICAgJCgkKCJkaXZbaWQ9J3JzbyddIikpLmZpbmQoImRpdltsYW5nKj0nemgtJ10iKS5lYWNoKGZ1bmN0aW9uKHp4YixoZmQpewogIAkgICAgCSBsZXQgdXJseHp2PSIiOwogIAkgICAgCSAgIGxldCB1cmx4enQ9IiI7CiAgCSAgICAJIHVybHh6dj0kKGhmZCkuZmluZCgiYSIpLmF0dHIoImhyZWYiKTsKIAkgIHVybHh6dD0kKGhmZCkudGV4dCgpOwoKICAgIGxldCBwaW5nYmlqYz0wOwogICAgIGlmICh1cmx4enYpewogICAgIAkgICAgICAgIGlmICh1cmx4enYuaW5kZXhPZignL3VybD8nKT09MCAmJiB1cmx4enYuaW5kZXhPZignJnVybD0nKT4wICApewogICAgbGV0IHNkY3VybCA9IHVybHh6di5tYXRjaCgvXCZ1cmxcPShcUyopXCYvKTsKICAgICAJICAgICAgICAJaWYgKHNkY3VybCl7CiAgICAJdXJseHp2ID0gc2RjdXJsWzFdOwogICAgCXVybHh6dj1kZWNvZGVVUklDb21wb25lbnQodXJseHp2KTsKICAgIAkkKGhmZCkuZmluZCgiYSIpLmF0dHIoImhyZWYiLHVybHh6dik7CiAgICAgCSAgICAgICAgCX0KICAgICAgICAgCSAJIH0KICAgIGlmIChHTV9nZXRWYWx1ZSgnYWxsY29uZmlnJykuYmFpZHUua2dnb29nbGVhZD09dHJ1ZSl7CiAgICAJICAgJCgiYVtocmVmKj0naHR0cCddIikuZWFjaChmdW5jdGlvbigpIHsKICAgIAkgICAJICAgaWYgKCAkKHRoaXMpLmF0dHIoInpsb2dvIikpe31lbHNlewogICAgCSAgIAkgICAJIGlmICggJCh0aGlzKS5maW5kKCJoMyIpLmxlbmd0aD4wKXsKICAgIAkgICAJICAgCSAJIGxldCBsb2d1cmw9JCh0aGlzKS5hdHRyKCJocmVmIik7CiAgICAJICAgIGxldCB1cmxkb21haW4gPSBsb2d1cmwuc3BsaXQoIi8iKTsKbGV0IHVybGRvZmF2aWNvbiA9ICIiOwppZiggdXJsZG9tYWluWzJdICkgewogdXJsZG9mYXZpY29uPWZhdmljb251cmwrdXJsZG9tYWluWzJdKyI/c2l6ZT0zMiI7CgoJfQokKHRoaXMpLmF0dHIoInpsb2dvIiwiMSIpOwokKHRoaXMpLmZpbmQoImgzIikucHJlcGVuZCgnPGRpdiBzdHlsZT0iYm9yZGVyLXJhZGl1czogMSU7ZGlzcGxheTogaW5saW5lLWJsb2NrOyBtYXgtd2lkdGg6MjRweDsgcG9zaXRpb246IHJlbGF0aXZlOyB0b3A6IDNweDtiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDApO21hcmdpbi1yaWdodDogOHB4OyI+PGltZyAgc3R5bGU9Im1heC13aWR0aDoyNHB4OyIgc3JjPSInK3VybGRvZmF2aWNvbisnIiAgPjwvZGl2PicpOwoKICAgIAkgICAJICAgCSB9CiAgICAJICAgCSAgIAkgfQogICAgICAgIH0pCgogICAgCSAgICBpZiAoR01fZ2V0VmFsdWUoJ2FsbGNvbmZpZycpLmJhaWR1LmJhaWR1bGlhbmppZT09dHJ1ZSl7CiAgICAgICAgIGZvcihsZXQgYiBpbiBHTV9nZXRWYWx1ZSgnYWxsY29uZmlnJykucGluZ2JpdXJsKXsKICAgICAgICAgaWYgKHVybHh6di5pbmRleE9mKEdNX2dldFZhbHVlKCdhbGxjb25maWcnKS5waW5nYml1cmxbYl0pID49MCl7CiAgICAgICAgICAgJChoZmQpLnJlbW92ZSgpOwogICAgICAgICAgICAgcGluZ2JpamM9MTsKICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgfQoKICBpZiAoIHBpbmdiaWpjPT0wICApewogICAgICAgICBmb3IobGV0IGIgaW4gR01fZ2V0VmFsdWUoJ2FsbGNvbmZpZycpLnBpbmdiaWt3KXsKICAgICAgICAgaWYgKHVybHh6dC5pbmRleE9mKEdNX2dldFZhbHVlKCdhbGxjb25maWcnKS5waW5nYmlrd1tiXSkgPj0wKXsKICAgICAgICAgICQoaGZkKS5yZW1vdmUoKTsKCiAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgIH0KICAgICB9CiB9CgogIAkgICAgIH0pOwoJfQoKICAgICBpZiAoR01fZ2V0VmFsdWUoJ2FsbGNvbmZpZycpLmJhaWR1LmtnZ29vZ2xlZWQ9PXRydWUpewokKCIuYWRzYnlnb29nbGUiKS5yZW1vdmUoKTsKLy8kKCIjdGF3IikucmVtb3ZlKCk7CiQoIiNib3R0b21hZHMiKS5yZW1vdmUoKTsKJCgic2NyaXB0W3NyYyo9J2Fkc2J5Z29vZ2xlLmpzJ10iKS5yZW1vdmUoKTsKJCgic2NyaXB0W3NyYyo9J2cuZG91YmxlY2xpY2submV0J10iKS5yZW1vdmUoKTsKJCgiZGl2W2lkKj0nZ29vZ2xlX2FkcyddIikucmVtb3ZlKCk7CiQoImRpdltkYXRhLWdvb2dsZS1xdWVyeS1pZF0iKS5yZW1vdmUoKTsKCiB9Cgp9CgpmdW5jdGlvbiBiaW5nKCkgewoKCiAgaWYoemtkdXJsZG9tYWluLmluZGV4T2YoJ2JpbmcuY29tL3NlYXJjaD8nKSA+IDAgJiYgemtkdXJsZG9tYWluLmluZGV4T2YoJ3E9JykgPiAwICl7CiAgIGlmIChHTV9nZXRWYWx1ZSgnYWxsY29uZmlnJykuYmFpZHUua2diaW5nZWQ9PXRydWUpewogIAkgICAkKCIuYl9hZCIpLnJlbW92ZSgpOwokKCIuYl9iaW5nb2FkIikucmVtb3ZlKCk7CiAgICQoIi5iX2FsZ28iKS5lYWNoKGZ1bmN0aW9uKCkgewogICAJICAgbGV0IGJfYWxnb2tnPTA7CiAgIAkgICAJIGlmICgkKHRoaXMpLmZpbmQoInAiKSl7CgkJIAkgIGlmICgkKHRoaXMpLmZpbmQoInAiKS5hdHRyKCJjbGFzcyIpKXsKCQkgCSAgCSAgYl9hbGdva2c9MTsKCQkgCSAgfQoJCSB9CgkJIAkgICBpZiAoJCh0aGlzKS50ZXh0KCkuaW5kZXhPZign5bm/5ZGKJykgPjApewoJCSAJICAgCSAgIGJfYWxnb2tnPTE7CgkJIAkgICB9CmxldCBhbnVtPSQodGhpcykuZmluZCgiLmJfYXR0cmlidXRpb24iKS5jaGlsZHJlbigpLmxlbmd0aDsKaWYgKGFudW09PTEgJiYgYl9hbGdva2c9PTEpewovLyQodGhpcykuaGlkZSgpOwp9Cn0pCn0KICAgIAkgICBpZiAoICQoJyNiaW5nY29uZmlnX2J0bicpLmxlbmd0aD4wKXsKICAJICAgfSAgZWxzZXsKICAJICAgCSAgICAkKCcjaWRfc2MnKS5iZWZvcmUoJzxzcGFuIGlkPSJiaW5nY29uZmlnX2J0biIgY2xhc3M9ImNidG4iIHN0eWxlPSJsaW5lLWhlaWdodDogNDVweDsgIG1hcmdpbi1sZWZ0OjIwcHg7bWFyZ2luLXJpZ2h0OjIwcHg7IiAgb25jbGljaz0id2luZG93LmxvY2F0aW9uLmhyZWY9XCcnK2NvbmZpZ20rJ1wnOyIgID48aW5wdXQgdHlwZT0iYnV0dG9uIiAgIHZhbHVlPSLmjqfliLbpnaLmnb8iPjwvc3Bhbj4nKTsKICAJICAgfQogICAgIGlmIChHTV9nZXRWYWx1ZSgnYWxsY29uZmlnJykuYmFpZHUua2diaW5nYWQ9PXRydWUpewogIAkgICAgJCgkKCJsaVtjbGFzcz0nYl9hbGdvJ10iKSkuZWFjaChmdW5jdGlvbih6eGIsaGZkKXsKCiAgCSAgICAJIGxldCB1cmx4enY9IiI7CiAgCSAgICAJICAgbGV0IHVybHh6dD0iIjsKICAJICAgIAkgdXJseHp2PSQoaGZkKS5maW5kKCJoMiIpLmZpbmQoImEiKS5hdHRyKCJocmVmIik7CiAJICB1cmx4enQ9JChoZmQpLnRleHQoKTsKLy9jb25zb2xlLmxvZyh1cmx4enYpCiAgICAgbGV0IHBpbmdiaWpjPTA7CiAgICAgaWYgKHVybHh6dil7CiAgICBpZiAoR01fZ2V0VmFsdWUoJ2FsbGNvbmZpZycpLmJhaWR1LmJhaWR1bGlhbmppZT09dHJ1ZSl7CiAgICAgICAgIGZvcihsZXQgYiBpbiBHTV9nZXRWYWx1ZSgnYWxsY29uZmlnJykucGluZ2JpdXJsKXsKICAgICAgICAgaWYgKHVybHh6di5pbmRleE9mKEdNX2dldFZhbHVlKCdhbGxjb25maWcnKS5waW5nYml1cmxbYl0pID49MCl7CiAgICAgICAgICAgJChoZmQpLnJlbW92ZSgpOwogICAgICAgICAgICAgcGluZ2JpamM9MTsKICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgfQogICAgfQogIGlmICggcGluZ2JpamM9PTAgJiYgdXJseHp0ICl7CiAgICAgICAgIGZvcihsZXQgYiBpbiBHTV9nZXRWYWx1ZSgnYWxsY29uZmlnJykucGluZ2Jpa3cpewogICAgICAgICBpZiAodXJseHp0LmluZGV4T2YoR01fZ2V0VmFsdWUoJ2FsbGNvbmZpZycpLnBpbmdiaWt3W2JdKSA+PTApewogICAgICAgICAgJChoZmQpLnJlbW92ZSgpOwoKICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgfQoKCiAgCSAgICAgfSk7CiAgCSAgICAgCX0KCX0KCX0KZnVuY3Rpb24gZGVsMzYwKCkgewogaWYgKCB6a2R1cmxkb21haW49PSdodHRwczovL3d3dy5zby5jb20vJyB8fCAgemtkdXJsZG9tYWluPT0naHR0cHM6Ly93d3cuc28uY29tJyB8fHprZHVybGRvbWFpbi5pbmRleE9mKCd3d3cuc28uY29tLz8nKSA+IDApewogaWYgKEdNX2dldFZhbHVlKCdhbGxjb25maWcnKS5iYWlkdS5rZzM2MGVkPT10cnVlKXsKIAkgJCgidWxbY2xhc3MqPSdtaC1saXN0IGctbGlzdCBtaC1zZGstc2FkIGdjbGVhcmZpeCddIikucmVtb3ZlKCk7CiAJICQoImRpdltjbGFzcyo9J29wZW4tc2NyZWVuX19hZCddIikucmVtb3ZlKCk7CiAJICQoIiNfX2xhd25JbWFnZUNvbnRhaW5lciIpLnJlbW92ZSgpOwogCSAgaWYoJCgiZGl2W2lkPSdsYXduRm9vdGVyQ2xvc2VCdG4nXSIpLmxlbmd0aD4wICApewogCSAgCSAgJCgiZGl2W2lkPSdsYXduRm9vdGVyQ2xvc2VCdG4nXSIpLmNsaWNrKCk7CiAJICB9CiAJICAgaWYoJCgiZGl2W2lkPSdsYXduRm9vdGVyQ2xvc2VCdG4nXSIpLmxlbmd0aD4wICApewogCSAgCSAgJCgiZGl2W2lkPSdsYXduRm9vdGVyQ2xvc2VCdG4nXSIpLmNsaWNrKCk7CiAJICB9CgkgICQoIiNyZXNfbmV3c19mbG93ICIpLmZpbmQoImxpIikuZWFjaChmdW5jdGlvbigpIHsKIGlmICgkKHRoaXMpLmZpbmQoInNwYW5bY2xhc3M9J3R4dCddIikubGVuZ3RoID4gMCl7CiAgICAgIGlmICgkKHRoaXMpLmZpbmQoInNwYW5bY2xhc3M9J3R4dCddIikudGV4dCgpPT0n5bm/5ZGKJyl7CiQodGhpcykucmVtb3ZlKCk7CiAgIH0KICAgICAgICB9CiAgICAgICAgfSkKICAgICAgICAJfQogICAgICAJIH0KICAgICAgCSAgICAgICAgCSAgaWYgKHprZHVybGRvbWFpbi5pbmRleE9mKCdtLnNvLmNvbS9zJykgPiAwICl7CiAgICAgIAkgIG9wZW54Y2QoKTsKICAgICAgCSAgJCgiZGl2W2NsYXNzXj0nZy1jYXJkIHJlcy1saXN0J10iKS5lYWNoKGZ1bmN0aW9uKG1pbmRleCxtbWVudCkgewogICAgICAJICAJICAgICBpZiAoICQodGhpcykuYXR0cigiZGF0YS1rd2t3ZWQiKT09dW5kZWZpbmVkICl7CmlmICgkKHRoaXMpLnRleHQoKSl7CgkgJCh0aGlzKS5hdHRyKCJkYXRhLWt3a3dlZCIsIjEiKTsKCSAgICAgICAgICAgIGxldCBwaW5nYmljaT0kKHRoaXMpLnRleHQoKTsKIGlmIChHTV9nZXRWYWx1ZSgnYWxsY29uZmlnJykuYmFpZHUua2czNjBhZD09dHJ1ZSl7CiAgICAgICAgIGZvcihsZXQgYiBpbiBHTV9nZXRWYWx1ZSgnYWxsY29uZmlnJykucGluZ2Jpa3cpewogICAgICAgICBpZiAocGluZ2JpY2kuaW5kZXhPZihHTV9nZXRWYWx1ZSgnYWxsY29uZmlnJykucGluZ2Jpa3dbYl0pID49MCl7CiAkKG1tZW50KS5yZW1vdmUoKTsKCiAgICAgICAgIH0KICAgICAgICAgICAgIH0KICB9Cn0KfQogaWYgKCAkKHRoaXMpLmF0dHIoImRhdGEta3d1cmxlZCIpPT11bmRlZmluZWQgKXsKCSAkKHRoaXMpLmF0dHIoImRhdGEta3d1cmxlZCIsIjEiKTsKICAgCWlmICgkKHRoaXMpLmZpbmQoImEiKS5hdHRyKCdocmVmJykpewogICAJCWxldCB6b2dvdXJsPWRlY29kZVVSSUNvbXBvbmVudCgkKHRoaXMpLmZpbmQoImEiKS5hdHRyKCdocmVmJykucmVwbGFjZSgvaHR0cHM6XC9cL20uc28uY29tXC9qdW1wXD91PS9nLCcnKSk7CiAgIAlmb3IobGV0IGIgaW4gR01fZ2V0VmFsdWUoJ2FsbGNvbmZpZycpLnBpbmdiaXVybCl7CiAgICAgICAgIGlmICh6b2dvdXJsLmluZGV4T2YoR01fZ2V0VmFsdWUoJ2FsbGNvbmZpZycpLnBpbmdiaXVybFtiXSkgPj0wKXsKICAgICAgICAgICAgJChtbWVudCkucmVtb3ZlKCk7CiAgICAgICAgIH0KICAgICAgICAgICAgIH0KJCh0aGlzKS5maW5kKCJhIikuYXR0cigiaHJlZiIsem9nb3VybCk7CiAgICAgICAgCX0KICAgICAgICAJfQogICAgICAgIH0pCgogICAgICAJICB9CiAgICAgIAkgIGlmIChHTV9nZXRWYWx1ZSgnYWxsY29uZmlnJykuYmFpZHUua2czNjBlZD09dHJ1ZSl7CiAJICAgaWYgKHprZHVybGRvbWFpbi5pbmRleE9mKCduZXdzLnNvLmNvbScpID4gMCApewogCSAgIAkgICAkKCJsaVtkYXRhLWZyb209J2FkJ10iKS5yZW1vdmUoKTsKIAkgICB9CiAJICAgICAgaWYgKHprZHVybGRvbWFpbi5pbmRleE9mKCd0di4zNjBrYW4uY29tJykgPiAwICl7CiAJICAgCSAgICQoImxpID4gZGl2W2RhdGEtc28tbW9kPSdsaXN0LWFkJ10iKS5yZW1vdmUoKTsKIAkgICAJICAgJCgibGkgPiBkaXZbZGF0YS1zby1jPSdsaXN0LWFkJ10iKS5yZW1vdmUoKTsKIAkgICB9CiAJICAgICBpZiAoemtkdXJsZG9tYWluLmluZGV4T2YoJ2ltYWdlLnNvLmNvbScpID4gMCApewogCSAgICQoImxpW2NsYXNzPSdjZWxsJ10iKS5lYWNoKGZ1bmN0aW9uKCkgewogaWYgKCQodGhpcykuZmluZCgicyIpLmxlbmd0aCA+IDApewogICAgICBpZiAoJCh0aGlzKS5maW5kKCJzIikudGV4dCgpPT0n5bm/5ZGKJyl7CiQodGhpcykucmVtb3ZlKCk7CiAgIH0KICAgICAgICB9CiAgICAgICAgfSkKIAkgICB9CiAJICAgaWYgKHprZHVybGRvbWFpbi5pbmRleE9mKCdseS5zby5jb20nKSA+IDAgKXsKIAkgICAkKCIuZi1saXN0LXdyYXAiKS5maW5kKCJsaSIpLmVhY2goZnVuY3Rpb24oKSB7CiBpZiAoJCh0aGlzKS5maW5kKCJpIikubGVuZ3RoID4gMCl7CiAJICQodGhpcykucmVtb3ZlKCk7CiAgICAgICAgfQogICAgICAgIH0pCiAJICAgfQogCSAgICAgaWYgKHprZHVybGRvbWFpbi5pbmRleE9mKCdiYWlrZS5zby5jb20nKSA+IDAgKXsKICAJICAgICAkKCIucmlnaHQtYWQtY29uY2VybiIpLnJlbW92ZSgpOwogIAkgICAgICQoIiNKLW1vZC1yaWdodC1hZC1pbnRlcmVzdCIpLnJlbW92ZSgpOwogIAkgICAgICQoIiNKLW1vZC1yaWdodC1yZWNvbW1lbmQiKS5yZW1vdmUoKTsKICAJICAgICAkKCIuZG9jLXdpZGdldC1yaWdodGJhbm5lciIpLnJlbW92ZSgpOwogICAJJCgiZGl2W2NsYXNzPSdib3gtYmQgY2wganMtcGx1cy1ib2R5J10iKS5yZW1vdmUoKTsKICAgCSQoImRpdltjbGFzcz0nYm94d3JhcCIpLnJlbW92ZSgpOwoKIAkgICB9CiAJICAgICAgaWYgKHprZHVybGRvbWFpbi5pbmRleE9mKCd3ZW5rdS5zby5jb20nKSA+IDAgKXsKICAJICAgICAkKCIucnQtc2lkZSIpLnJlbW92ZSgpOwogIAkgICAgICQoIi5zaWRlLW1vZCIpLnJlbW92ZSgpOwogCSAgIH0KIAkgICBpZiAoemtkdXJsZG9tYWluLmluZGV4T2YoJ2ZhbnlpLnNvLmNvbScpID4gMCApewogIAkgICAgICQoIiNjYXJkX2NvbnRhaW5lciIpLnJlbW92ZSgpOwogCSAgIH0KIAkgICBpZiAoemtkdXJsZG9tYWluLmluZGV4T2YoJ20uc28uY29tJykgPiAwICl7CgogCSAgIAkgICQoImRpdltjbGFzc149J2ctYWQtY2FyZCddIikucmVtb3ZlKCk7CiAgJCgiZGl2W2NsYXNzPSd0Zy13cmFwIikucmVtb3ZlKCk7CiAgJCgiZGl2W2RhdGEtc28tYml6LXR5cGVdIikucmVtb3ZlKCk7CiAJICAgfQoKIAkgICAgaWYgKHprZHVybGRvbWFpbi5pbmRleE9mKCdtLm5ld3Muc28uY29tJykgPiAwICl7CiAJICAgCSAgJCgiLmctY2FyZC5yZXMtbGlzdC5oYXMtc3VtbWFyeSIpLnJlbW92ZSgpOwogCSAgIH0KIAkgICBpZiAoemtkdXJsZG9tYWluLmluZGV4T2YoJ20uaW1hZ2Uuc28uY29tJykgPiAwICl7CiAJICAgICAgJCgibGkiKS5lYWNoKGZ1bmN0aW9uKCkgewogaWYgKCQodGhpcykuZmluZCgiZGl2W2NsYXNzPSdsaS10eHQgbGktY20gbGktY20tLWRlZmF1bHQnXSIpLmxlbmd0aCA+IDApewokKHRoaXMpLnJlbW92ZSgpOwogICAgICAgIH0KICAgICAgICB9KQogCSAgIH0KIAkgICBpZiAoemtkdXJsZG9tYWluLmluZGV4T2YoJ20udmlkZW8uMzYwa2FuLmNvbS8nKSA+IDAgKXsKIAkgICAgJCgibGlbZGF0YS1zby1tb2Q9J2FkJ10iKS5yZW1vdmUoKTsKIAkgICAgICQoImxpW2NsYXNzPSdyZWNvbW1lbmQtaXRlbSByZWNvbW1lbmQtaXRlbV9fY20gcmVjb21tZW5kLWl0ZW1fX25vLWltZyddIikucmVtb3ZlKCk7CgkgICB9CgkgICBpZiAoemtkdXJsZG9tYWluLmluZGV4T2YoJzM2MGthbi5jb20nKSA+IDAgKXsKCSAgICQoImxpW2NsYXNzPSd2LWxpc3QtaXRlbSddOmVtcHR5IikucmVtb3ZlKCk7CgkgICAgJCgibGlbZGF0YS1zby1tb2Q9J2FkJ10iKS5yZW1vdmUoKTsKIAkgICAgJCgiYVtjbGFzcz0nbGluayBqcy1hZC1jdXJsJ10iKS5yZW1vdmUoKTsKIAkgICAgJCgiZGl2W2NsYXNzKj0naW5mby1mbG93X19hZCddIikucmVtb3ZlKCk7CiAJICAgICAkKCJkaXZbY2xhc3MqPSdvcGVuLXNjcmVlbl9fYWQnXSIpLnJlbW92ZSgpOwogIAkgICB9CiAJICAgIGlmICh6a2R1cmxkb21haW4uaW5kZXhPZignd2VuZGEuc28uY29tJykgPiAwICl7CiAJICAgICQoImxpW2NsYXNzPSdsZWZ0LXJlYy1saXN0IGpzLWxlZnQtZmxvdy1idXNpJ10iKS5yZW1vdmUoKTsKIAkgICAgJCgiI2F0dGVudGlvbiIpLnJlbW92ZSgpOwogCSAgICAkKCJkaXZbY2xhc3M9J21vZC1kZXRhaWwtbm9ybWFsIHB0MjUgaGlkZSBqcy1tb2QtZmxvdyAnXSIpLnJlbW92ZSgpOwogCSAgICAkKCJhcnRpY2xlW2NsYXNzPSdjYXJkJ10iKS5yZW1vdmUoKTsKIAkgICAgJCgiYXJ0aWNsZVtjbGFzcz0nY2FyZC1ib3InXSIpLnJlbW92ZSgpOwogCSAgICAkKCJkaXZbY2xhc3M9J2J1c2ktYXJ0aWNsZSBqcy1idXNpLWFydGljbGUnXSIpLnJlbW92ZSgpOwogCSAgICAkKCJkaXZbY2xhc3M9J2pzLXJlbGF0ZS1saXN0J10iKS5yZW1vdmUoKTsKIAkgICAgICQoInVsW2NsYXNzPSdyZWxhdGUtbGlzdCddIikucmVtb3ZlKCk7CiAJICAgICAkKCJzZWN0aW9uW2NsYXNzPSdnLWNhcmQgcmVjZmxvdy1saXN0IGpzLXJlY2Zsb3ctbGlzdCddIikucmVtb3ZlKCk7CiAJICAgICQoIiNqcy1zZC1saXN0IikucmVtb3ZlKCk7CgogCSAgIH0KIAkgICAgIH0KCSAgIGlmICh6a2Rkb21haW4uaW5kZXhPZignc28uY29tJykgPiAwICYmIHprZHVybGRvbWFpbi5pbmRleE9mKCdzby5jb20vcycpID4gMCl7CiAgaWYgKCAkKCJkaXZbY2xhc3M9J2Nsb3NlIikubGVuZ3RoID4gMCl7CiQoImRpdltjbGFzcz0nY2xvc2UiKS5jbGljaygpOwogICAgICB9CiAgICAgICQoInVsW2NsYXNzPSdtaC1saXN0IGctbGlzdCBtaC1zZGstc2FkIGdjbGVhcmZpeCddIikucmVtb3ZlKCk7CgkgICAgJCgnLnRpdGxlLmhvbWUtbmF2JykuYXR0cignaHJlZicsY29uZmlnbSk7CiAgIAkgICAkKCcudGl0bGUuaG9tZS1uYXYnKS50ZXh0KCfmjqfliLbpnaLmnb8nKTsKICAgCSAgICQoImxpW2NsYXNzPSdtLXNwcmVhZC1taWRkbGUgZS1idXNzIikucmVtb3ZlKCk7CiAgIAkgICAkKCIjbW9oZS0zNjBwaWNfZXh0LS1ub3JtYWwiKS5yZW1vdmUoKTsKCSAgICQoJCgibGlbY2xhc3M9J3Jlcy1saXN0J10iKSkuZWFjaChmdW5jdGlvbih6eCxoZmQpewogbGV0IHVybHh6dj0iIjsKICBsZXQgdXJseHp0PSIiOwogaWYgKCQoaGZkKS5jaGlsZHJlbigiaDMiKS5jaGlsZHJlbigiYSIpLmF0dHIoImRhdGEtbWR1cmwiKSl7CgogIHVybHh6dj0kKGhmZCkuY2hpbGRyZW4oImgzIikuY2hpbGRyZW4oImEiKS5hdHRyKCJkYXRhLW1kdXJsIik7CiB9ZWxzZXsKIHVybHh6dj0kKGhmZCkuY2hpbGRyZW4oImgzIikuY2hpbGRyZW4oImEiKS5hdHRyKCJocmVmIik7CiB9CiB1cmx4enQ9JChoZmQpLnRleHQoKTsKLy9jb25zb2xlLmxvZyh1cmx4enYpCiAgICAgbGV0IHBpbmdiaWpjPTA7CiAgICAgaWYgKHVybHh6dil7CiAgICAgCSAgICBpZiAoR01fZ2V0VmFsdWUoJ2FsbGNvbmZpZycpLmJhaWR1LmtnMzYwYWQ9PXRydWUpewogICAgaWYgKEdNX2dldFZhbHVlKCdhbGxjb25maWcnKS5iYWlkdS5iYWlkdWxpYW5qaWU9PXRydWUpewogICAgICAgICBmb3IobGV0IGIgaW4gR01fZ2V0VmFsdWUoJ2FsbGNvbmZpZycpLnBpbmdiaXVybCl7CiAgICAgICAgIGlmICh1cmx4enYuaW5kZXhPZihHTV9nZXRWYWx1ZSgnYWxsY29uZmlnJykucGluZ2JpdXJsW2JdKSA+PTApewogICAgICAgICAgICQoaGZkKS5yZW1vdmUoKTsKICAgICAgICAgICAgIHBpbmdiaWpjPTE7CiAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgIH0KCiAgaWYgKCBwaW5nYmlqYz09MCl7CiAgICAgICAgIGZvcihsZXQgYiBpbiBHTV9nZXRWYWx1ZSgnYWxsY29uZmlnJykucGluZ2Jpa3cpewogICAgICAgICBpZiAodXJseHp0LmluZGV4T2YoR01fZ2V0VmFsdWUoJ2FsbGNvbmZpZycpLnBpbmdiaWt3W2JdKSA+PTApewogICAgICAgICAgJChoZmQpLnJlbW92ZSgpOwoKICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgfQogICAgfQogfQp9KTsKCgogICAgIGlmIChHTV9nZXRWYWx1ZSgnYWxsY29uZmlnJykuYmFpZHUua2czNjBlZD09dHJ1ZSl7CgkgICAJICAgJCgiI2VfaWRlYV9wcCIpLnJlbW92ZSgpOwoJICAgCSAgICAgIC8vICAkKCIjc2lkZSIpLnJlbW92ZSgpOwoJICAgJCgiI3JpZ2h0X3Nob3dfdG9wIikucmVtb3ZlKCk7CgkgICAkKCIjcmlnaHRfc2hvdyIpLnJlbW92ZSgpOwoJICAgJCgiI3NvX2t3LWFkIikucmVtb3ZlKCk7CgkgICAkKCIjbG0tcmlnaHRib3R0b20iKS5yZW1vdmUoKTsKCSAgICQoIiNyZXMtbWVkaWF2LXJpZ2h0IikucmVtb3ZlKCk7CgkgICAkKCIucmVzLW1lZGlhdi1yaWdodCIpLnJlbW92ZSgpOwoJICAgCSAgICAkKCIjbW9oZS0zNjBwaWNfc2FkLS1ub3JtYWwiKS5yZW1vdmUoKTsKCSAgIAkgICAgICQoIiNlX21hcF9pZGVhIikucmVtb3ZlKCk7CgkgICAJICAgICAgJCgiI2VfaWRlYV9wcF92aXBfYm90dG9tIikucmVtb3ZlKCk7CiAgfQoKCgkgICB9CgkgICAgICAgIGlmIChHTV9nZXRWYWx1ZSgnYWxsY29uZmlnJykuYmFpZHUua2czNjBlZD09dHJ1ZSl7CgkgICAJICAgaWYoemtkZG9tYWluLmluZGV4T2YoJ3NvLmNvbScpID4gMCApewoKCSAgIAkgICAkKCIuYXNpZGUiKS5yZW1vdmUoKTsKCgkgICAJICAgCSAgICAkKCIjanMtYnVzc2luZXNzLWJvdC1saXN0IikucmVtb3ZlKCk7CgkgICAJICAgICAgJCgiI2pzLW1vZC1maXhlZC1pbm4iKS5yZW1vdmUoKTsKCSAgIAkgICAgICAgICQoIiNlX2lkZWFfd2VuZGFfbGVmdEJveCIpLnJlbW92ZSgpOwoKCX0KCSAgaWYoemtkZG9tYWluLmluZGV4T2YoJzM2MGthbi5jb20nKSA+IDAgKXsKCiAgIAkgJCgibGlbZGF0YS1jbGlja2xvZ10iKS5yZW1vdmUoKTsKICAgIH0KICAgIH0KfQoKZnVuY3Rpb24gb3BlbnhjZCgpIHsKCWlmIChHTV9nZXRWYWx1ZSgnYWxsY29uZmlnJykuYmFpZHUuYmFpZHVtZW51PT10cnVlICAgICYmIGlzTW9iaWxlKCkgKXsKIGlmKCQoIi56eGJjb3BlbnhjZCIpLmxlbmd0aD09MCAgKXsKCSQoJ2JvZHknKS5hcHBlbmQoJzxkaXYgICBjbGFzcz0ienhiY29wZW54Y2QiIHN0eWxlPSJwb3NpdGlvbjogZml4ZWQ7dG9wOiA4NSU7ICAgcmlnaHQ6IDEwJTsgd2lkdGg6IDMwcHg7IHotaW5kZXg6IDk5OTk5OTsiPjxpbWcgc3JjPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVBBQUFBRHdDQVlBQUFBK1ZlbVNBQUFBQ1hCSVdYTUFBQTdFQUFBT3hBR1ZLdzRiQUFBUmdrbEVRVlI0MnUzZGJZd2QxWDNIOFM5WHE5WEtzaEJhWEdTc0ZkcTZoamdPVHhLVzR5NUdwYXJxVU5zQllvZ2dMNW82YmVpRG1rQUNHQUxFcjF3Z1FFaENrNm9QcEMxTlhtUlJ3QUZpWE9LcUxSV09peHdqVVNBT0FkZGRJUXVzeXF3aWEyV3RWbHVyTC81emQrK3U3OTQ3YysvTS9NK1orWDJra1Iva3ZmTy9NK2ZuZVRybnpEbmo0K05JOEZZQ284bXlFamdmV05HeURBUExnY0dXWlNqNUZXQUdtRTUrYlM1VHdDUndzbVg1RURnQlRDVExDZTh2THAwTmVCY2djNVlEbHliTEZjQWE1a003MU9kbkQvWDRHZFBNaC9rbzhGL0FXOGt5NWIzQlJBSDJzZ3pZQUd3Q3JnSXVCMVo3RjlYR0VMQTJXUlk3QnJ3QnZBWWNBQTRCcDcwTHJoc0Z1QndyZ0d1QmE0QXg0RXJpMy9hcmsrWEc1TSt6d092QVFlQVY0R1hzdEZ3S0ZIc2pDbFVETzhKdUJhNEQxbnNYVklLQjVIdXVCMjVQL3U0dzhCTHdJbmFFUHVOZFpOVW93UGtaQXJZQk53R2JzUnRMZGRjTTlGZXhHMmI3Z1dlQnZkajF0ZlJKQWU3UElMQUZ1QVVMNzNMdmdnSTJETnlhTEZOWWlKOEc5bUYzeGFVSENuQnZ4b0RiZ08zQXVkN0ZSR2c1ODJFK0Jld0Juc1N1bnlXRGhuY0JFUmtHdmdUOEhQZ3BzQU9GTncvbll0dnlwOWkyL1JLNi9FaE5BZTV1UGZBRDRBUGdtOEE2NzRJcWJCMjJqVC9BdG5rZGJ2NzFSUUZlMnZYWTQ1Q2ZZYWQ2Zy8xOW5HUXdpRzN6bjJINzRIcnZna0tsQUM4MENQd3g4RXZnZWF5amhmamFoTzJMWDJMN1J2K1J0bENBelFEd3A4RC9BSDhMWE9KZGtKemxFbXpmL0RlMnIzUURGZ1Y0QVBoRDRGM2dyNEZWM2dWSlZ5UFl2bm9YMjNlMURuS2RBM3d6OEF2Zzc3RUJBeEtYVVd6Zi9RTGJsN1ZVeHdDdkFYNEMvREQ1dmNSdERiWXZmMElOOTJlZEFqd0U3TWFlTlc3MkxrWnl0eG5idDd2cGYvaGxOT29TNEMzWXp2MHF1b3RaWllQWVB2NDV0czhycitvQnZnajRFVFlhSnNUeHRsS00xZGcrL3hIV0JpcXJxZ0VlQUw2QzNlQzRzYy9Qa25qZGlMV0JyMURSdTlWVkRQQkc0RTNnWVd6bUM2bTNaVmhiZUJOckc1VlN0UURmaVhXOVc5dnZCMG5sck1YYXhwM2VoZVNwS2dFZUJuNE1QRTVGVDVVa0Z3TllHL2t4RlJueFZJVUFiOFJtUzl6bVhZaEVZeHZXWnFJL3BZNDl3SGRqcDBVajNvVklkRWF3dG5PM2R5SDlpRFhBdzloamdzZlFLYlAwYmdCclF5OFM2U2wxakFFZXcwNS9hdkdnWGtxeEJXdFRZOTZGWkJWYmdHOEgvZ09kTWt2K1JyQzJkWHUvSDFTbW1BTDhDUEFFT21XVzRneGdiZXdSNzBMU2lpSEFBOEEvQXZkNEZ5SzFjUS9XNW9JL1dJUWU0Q0dzUCtzTzcwS2tkblpnYlMvb2tVMGhCL2c4NEYvUjgxM3hzdzFyZytkNUY3S1VVQU84Q3Bzbk9McTdnbEk1WTFoYkRISzZwUkFEdkJiNFR6VC9zb1JqSGRZbWcrdGpIMXFBTjJELzIxVjZES2RFNlNLc2JXN3dMcVJWU0FIZUFQdzdrZmFJa1ZvWXh0cG9NQ0VPSmNCcmdYOUc0M2NsZk11d3RockU2WFFJQVY2RnpTaW9JNi9FWWhocnMrNDN0cndEZkI3d0wraWFWK0p6RWRaMlhSOHhlUVo0Q0JzRm9ydk5FcXQxV0J0MjYremhGZUFCYkRKdVBlZVYySTFoYmRtbDI2VlhnSjlFUGF5a09yWmhiYnAwSGdGK0JQVnRsdXJaZ2NNb3BySURmRHNhVlNUVmRROGxqeWN1TThCajJJeUFJbFgyT0NYZTJ5a3J3TVBBMDBRd3ZsS2tUd05ZV3krbFgwTlpBZjQrbWdaSDZtTUVhL09GS3lQQWQ2TUo2S1IrdGxEQ2xMVkZCM2dqOWw0YWtUcDZtSUluank4eXdNTTRQdUFXQ1VDencxSmgxOE5GQnZpZjBIV3Z5QWlXaFVJVUZlQTdVVThya2FadEZQUld4Q0lDdkpHSTV0VVZLY2tqRkhBOW5IZUFtM000NjdwWFpLRkNzcEYzZ084bWtKa0tSQUswbHB3ZkxlVVo0SXVBWGFWdURwSDQ3Q0xIQ1N6eURQQzMwWnhXSXQwc3c5Ni9sSXU4QXJ3RnVONWxjNGpFNTBaeTZwMllSNENIc0tPdmlLVDNiWEtZaWllUEFEOEFyUGJlR2lLUldZMWxweS85Qm5nTkdxQXYwcXQ3c0F6MXJOOEEveFV3NkwwVlJDSTFpR1dvWi8wRStHWmdzL2NXRUluY1ppeExQZWsxd0FOb21LQklYaDZteHg1YXZRYjRzL1I1N2k0aWM5WmdtY3FzbHdBUG9CNVhJbm5iUlE5SDRWNEMvSGxnMVB2YmlsVE1LSmF0VExJR2VCQWRmVVdLc291TVQzV3lCbmdIQWJ4U1VhU2lWcEh4clNWWkEzeVg5emNVcWJoTUdjc1M0T3VCUzd5L25VakZYVUtHZ1VGWkFyelQrNXVKMUVUcXJLVU44QVpnay9lM0VxbUpUVmptdWtvYjRDOTdmeU9SbWttVnVUUUJIZ2EyZTM4YmtaclpUb29KNGRNRStMTm94SkZJMlFaSjBiMHlUWUJ2OC80bUlqWFZOWHZkQWp3R3JQUCtGaUkxdFk0dUx3dnZGbUFkZlVWOGRjeGdwd0FQb3B0WEl0NjIwK0VlVktjQWJ3SE85YTVlcE9iT3BjTVV0SjBDZkl0MzVTSUNkTWppVWdFZVFxOEhGUW5GTnBhWVE3clI0UWVXZTFjdElvQmxzZTBCZGFrQTMrUmRzWWdzMERhVGpTWCtUdFBGaW9SbE0yM3kyaTdBRzBqUkIxTkVTalZNbXhGSzdRSzgxYnRTRVducnJHeTJDL0IxM2xXS1NGdG5aWE54Z0ZjQTY3MnJGSkcyMW1NWm5iTTR3TmQ2VnlnaUhWM2Irb2ZGQWI3R3V6b1I2V2hCUmhjSGVDekRCNGxJK1Jaa3REWEF5NEFydmFzVGtZNnV4TElLTEF6d1JucDh4YUdJbEdZQXl5cXdNTUE2ZlJhSncxeFdXd044bFhkVklwTEtYRlpiQTN5NWQxVWlrc3BjVnBzQlhnNnM5cTVLUkZKWlRUTGN0eG5nUzcwckVwRk1Mb1g1QU92MFdTUXVDd0o4bVhjMUlwTEpGVEFmNERYZTFZaElKbXRnUHNDajN0V0lTQ2Fqb0FDTHhHb1VMTUFyV1dMS1NoRUoxaEN3c29HT3ZpS3hHbFdBUmVJMTJqeUZGcEg0ckd3QTUzdFhJU0k5T1grQVJaTmtDUUJuZ0lQQTg4Qmg0UDFrQVZpVkxPdUJHN0NoWGQzZXM2eWFxMU56U0ZhY016NCsva1BnWnU5S0FqRU5mQWQ0RFBqZmxEOXpBYkFUK0FJK2QvTlZjMzA5MDBCSDRLWTl3TVZZSTBuYnFFais3YzdrWi9lbzVrcldIS29WRGZRYUZZQUhzSmRISGUvak00NG5uL0dBYXE1VXpTRWJicURYaUg0R2VDakh6M3NvK1V6VkhIL05vVnZlQUFhOXEzRDBBREJld09lT1U5d1JRaldYVTNNTUJ1c2M0RDNrZTBSWTdDSHl2MVpUemVYVUhJdmFCbmdhdUtPRTlkeVJyRXMxeDFOelRBWWIxUE9XL0hmbzcwWktXc2VUZGFubWVHcU95ZEE1NCtQai8wZTlIcENmQVM0azJ5T01mbHdBZkVCLzIxZzFsMU56Yk03VTZjczJIYVM4UmtXeXJvT3FPWXFhbzlNQVpyeUxLTm56RWE1VE5ZZTdUazh6RGVwMzhYODR3bldxNW5EWDZXbTZqa2ZnOS92L2lOTFhxWnJEWGFlbkdRVTRqbldxNW5EWDZhbVdBUmFwaXBrR01PVmRSY2xXUmJoTzFSenVPajFOTllCSjd5cEtGbVBEVXMzaHJ0UFRaQU00NlYxRnlkWkh1RTdWSE80NlBaMnNZNEJ2aUhDZHFqbmNkWHFxWllESHNHNTNaYmtnV2FkcURyL20ySnhzQUI5NlYxR3lCalkxUzFsMjBuLy9YTlZjVHMyeCtiQUJuUEN1d3NFWGdKRVMxak9TckVzMXgxTnpURTQwZ0Fudktod01BVStVc0o0bnlHKzRwbW91cCthWVROUTF3QURiZ2ZzTC9QejdrM1dvNXZocWpzVkU4eFM2YmdNYW1oNEViaTNnYzI5TlBsczF4MXR6NktaSlRxR2h2a2RoZ0IrUTd4SGkvdVF6VlhQOE5ZZHNBdWJ2MmsxNFYrUHNRZUJaK3J2aE1wSjhSbGxIQk5WY2J4TXdIK0NqM3RVRVlEdndMdmE2anl6UEx5OUlmdVpkeXI4V1U4MzFkUlRnblBIeGNZRFBBMDk2VnhTUUdGKzZwWnJyNVRiZ3V3UEpIOTd5cmlZd0RXQlRzc1JDTmRmTFd6RC9QNW9DTEJLWEJRR2VBbzU1VnlRaXFSd2pHY2ZmZWszeGhuZFZJcExLWEZaYkEveWFkMVVpa3NwY1Zsc0RmTUM3S2hGSlpTNnJyUUUrQk14NlZ5WWlIYzFpV1FVV0J2ZzA4THAzZFNMUzBldFlWb0d6SDR6WDd0MHlJcEZaa05IRkFYN0Z1em9SNldoQlJoY0grR1h2NmtTa281ZGIvN0E0d0NlcDN3dWlSR0p4bUVXVFVMYnJIUDZTZDVVaTB0WloyV3dYNEJlOXF4U1J0czdLWnJzQUg2SityMXNSQ2Qwa0xjOS9tOW9GK0F5dzM3dGFFVmxnUDViTkJaWWFJUDJzZDdVaXNrRGJUQzRWNEwzVTc3V2pJcUdhd2pKNWxxVUNQTDNVRDRoSTZmYXl4TlRQbmVZWWV0cTdhaEVCT21TeFU0RDNBYWU4S3hlcHVWTllGdHZxRk9BWllJOTM5U0kxdHdmTFlsdmRwdW5VVkxNaXZqcG1zRnVBRHdKSHZMK0JTRTBkb2NzUTN6UVRaZXNvTE9LamEvYlNCUGg3ZERnSEY1RkN6R0RaNnloTmdDZlJ6U3lSc2oxRGlqRUphZDgxODdqM3R4R3BtVyttK1VkcEEzd1lUVHNyVXBZRHBKeFlJOHZiM2g3ei9sWWlOWkU2YTFrQy9BTHdqdmMzRTZtNGQ3Q3NwWkwxZmF1NkZoWXBWcWFNWlEzd1U4eS9nRmxFOHZVK2xySFVzZ1o0QnRqdC9TMUZLbW8zR2Z0Y1pBMHd3SGVCQ2U5dktsSXhFMWkyTXVrbHdMUG9LQ3lTdDkzMDhITEJYZ0lNMXNYcnFQYzNGcW1JbzZUb050bE9yd0dlQmU3ei90WWlGWEVmUGI3YXQ5Y0FnL1hWMVBTekl2M1pqMldwSi8wRUdPRFAwVWdsa1Y3TllCbnFXYjhCUGdvODZyMFZSQ0wxS0gzZVMrbzN3QUFQQXNlOHQ0UklaSTVoMmVsTEhnR2VCcjdvdlRWRUl2TkZscGpyT1lzOEFndzI3ZVZ6cnB0REpCN1AwV0dxMkN6eUNqREFIY0JwbDgwaEVvL1RXRlp5a1dlQTMwTTl0RVM2MlkxbEpSZDVCaGpnNjhEYnBXNE9rWGk4aldVa04za0hlQmI0SEQzMktoR3BzRUt5a1hlQUFWNEY3aTFqaTRoRTVGNHNHN2txSXNBQTMwQ3ZKeFZwMm90bEluZEZCUmpnRDREakJYNitTQXlPWTFrb1JKRUJuZ1EramE2SHBiNW1zUXgwbmFDOVYwVUdHT3ljWDhNT3BhN3VvNERyM2xaRkJ4anN0bmt1dlU1RUlyS1BuQjhadFZOR2dBRitIMTBQUzMwY3g5cDg0Y29LOENSd0M3b2VsdXFieGRwNllkZTlyY29LTU5pTGl1OHFjWDBpSHU2aXkwdTU4MVJtZ0FIK0VrMEFJTlgxS05iR1MxTjJnTUY2cER6bHNGNlJJajJGUXc5RWp3QUQzSVo2YWtsMTdNWGFkT204QXR4OHdGM2F0WUpJUVE3aTJHSEpLOEJnMDRsc0JZNDQxaURTanlOWUcrNTdhcHhlZVFZWTRGZkE3NUxqQUdlUmtyeUh0ZDFmZVJiaEhXQ3dWeXArZ3BLZW00bmtZQkpycys2djJnMGh3R0F6RmZ3ZW1sTkx3bmNhYTZ0QnpEd1RTb0FCRGdHL2pZN0VFcTVKckkwZThpNmtLYVFBZzIyWXE5RTFzWVRuUGF4dEJoTmVDQy9BWUtjbXY0bnVUa3M0am1CdE1valQ1bFloQmhqczVzRFY2RG14K0R1SXRVWDNHMWJ0aEJwZ3NOdnp2NE42YkltZnZWZ2JkSDFVMUVuSUFRWjdRUDRwMUhkYXl2Y1UxdmJjT21ta0VYcUFZWDQrWFkxaWtySThTaVR6bThjUTRLWjdzWGZLQkw5UkpWcXpXQnVMWmw3em1BSU1OdGJ5dDlEMFBKSy80MWpiS25VOGI3OWlDekRZWGNFcjBFUjVrcDk5V0p1SzdxbEhqQUVHNnhHekZkaUpUcW1sZDdOWUc5cEtwRDBBWXcxdzA5ZUJhOUFwdFdSM0hHczdoVS85V3FUWUF3dzJjZllWNkhteHBMY1hhek9GVHJwZWhpb0VHT3owNTVQWWpJQTZwWmFsekdKdDVKTkVlc3E4V0ZVQzNQUU43TFFvdUQ2cjR1NXRyRzBVOHBaQUwxVUxNTmhwMFdYWWUyazB2bGhPWTIzaE1pcHd5cnhZRlFNTWRxcjBOZUNqd0F2ZXhZaWJGN0EyOERVcWVtbFYxUUEzdlFmY2dEMG1PT1pkakpUbUdMYlBiNkRpWTh1ckh1Q21mY0RIZ0w4QVpyeUxrY0xNWVB2NFk5U2tvMDlkQWd3MnFtUVh0blAzZXhjanVkdVA3ZHRkQkQ2Q0tFOTFDbkRUVVd4R3dVOG52NWU0SGNYMjVTZW80ZjZzWTRDYm5zRnVjUHdSTU9GZGpHUTJnZTI3ajJMN3NwYnFIR0N3TzVQL0FGd00vQm1CVHBzaUM3eVA3YXVMc1gxWHlidkxhZFU5d0UyendOOEF2d0g4Q2ZDT2QwRnlsbmV3ZmZQcjJMNnFkWENiRk9DRnBvRy9BejZDUFlJNDRGMlFjQURiRngvQjlvMmVJclJRZ0pmMkF0YjE3dVBBT0dvNFpackJ0dm5Ic1gyZ3pqaExVSUM3T3dSOEJyZ1ErREthcjdwSVI3QnRmQ0cyellPYVJEMUVDbkI2azhDM3NHZU5WMk96RnA3eUxxb0NUbUhiOG1wczIzNkxpb3dVS29NQzNKdUQyS3lGdjRaTlBUb09USGtYRlpFcGJKdDlDdHVHbnlQQzZXeENNT0JkUU9SbWdPZVNaUWpZQnR3RWJBYUd2WXNMekNUV1crcFpiRUI5YlhwTEZVa0J6czgwMXFIZ0dlek1aZ1BXb2Y0NllMMTNjVTRPQXk4QkwyTFhzMmU4QzZvYUJiZ1laN0N4cDY5aWZYTlhBTmRpZDFUSGdDdXAzcmFmQlY3SFRvVmZBVjRHVG5vWFZYVlZhMFNoT3NuODBSbGdHYkFSQy9OVndPWEFhdThpTXpvR3ZBRzhob1gyVlRTQlF1a1VZQituZ1g5TGxxYmx3S1ZZbUM4RDFnQ2p5VExrVk9jMDF1ZDRBaHNvOENZVzJyZlFUYnNnS01EaG1HTCt0SHV4bGN5SGVTVndQblphM2x5R3NmOEFCbHVXb2VSWHNKdHQwOG12eldVS3U3RjBzbVg1RURqQmZHaFBlRzhVNmV6L0FVRVJQNHN6Mk80ZkFBQUFBRWxGVGtTdVFtQ0MiICAgc3R5bGU9IndpZHRoOiAzMHB4OyIgPgk8L2Rpdj4nKTsKCX0KCXNldFRpbWVvdXQoZnVuY3Rpb24oKXsKICAgICAgICAgICAgJCgiLnp4YmNvcGVueGNkIikuaGlkZSgpOwogICAgICAgIH0sIDI1MDApOwoKfQogIGlmIChHTV9nZXRWYWx1ZSgnYWxsY29uZmlnJykuYmFpZHUuYmFpZHVleWU9PXRydWUpewokKCJodG1sIGJvZHkgI3BhZ2UtYmQgYXJ0aWNsZSIpLmNzcygiYmFja2dyb3VuZC1jb2xvciIsR01fZ2V0VmFsdWUoJ2FsbGNvbmZpZycpLmJhaWR1LmJhaWR1ZXllY29sb3IpOwokKCIjaGVhZCwjZm9vdCwuc2UtaGVhZC10YWJsaW5rLCNyZWxhdGl2ZXdvcmRzLCNwYWdlLWhkLCNwYWdlLCNycywjaGVscCwuZm9vdC1pbm5lciIpLmNzcygiYmFja2dyb3VuZC1jb2xvciIsR01fZ2V0VmFsdWUoJ2FsbGNvbmZpZycpLmJhaWR1LmJhaWR1ZXllY29sb3IpOwokKCJkaXZbY2xhc3M9J3Jlcy1saXN0IGctbW9oZSBnLWNhcmQgZy1ibG9jayddIikuY3NzKCJiYWNrZ3JvdW5kLWNvbG9yIixHTV9nZXRWYWx1ZSgnYWxsY29uZmlnJykuYmFpZHUuYmFpZHVleWVjb2xvcik7CiAgIH0KICB9CiQoJ2JvZHknKS5vbignY2xpY2snLCcuenhiY29wZW54Y2QnLGZ1bmN0aW9uKCl7CiAgR01fb3BlbkluVGFiKGNvbmZpZ20sIHthY3RpdmU6ICEwfSk7CiAgfSkKCmZ1bmN0aW9uIGRlbGJhaWR1KCkgewoKICAgaWYoemtkdXJsZG9tYWluLmluZGV4T2YoImJhaWR1LmNvbS8iKSA+IDAgKSB7CiBpZiAoICQoInNwYW5bY2xhc3M9J3MtbWVudS1pdGVtIHMtbWVudS1taW5lJ10iKS5sZW5ndGggPiAwICYmICQoInNwYW5bY2xhc3M9J3MtbWVudS1pdGVtIGN1cnJlbnQnXSIpLmxlbmd0aCA+IDAgJiYgICQoInNwYW5bY2xhc3M9J3MtbWVudS1pdGVtIHMtbWVudS1taW5lJ10iKS5hdHRyKCdjdXJyZW50JykgPT11bmRlZmluZWQgKXsKIAkgJCgic3BhbltjbGFzcz0ncy1tZW51LWl0ZW0gcy1tZW51LW1pbmUnXSIpLmF0dHIoJ2N1cnJlbnQnLDEpOwogIAkgJCgic3BhbltjbGFzcz0ncy1tZW51LWl0ZW0gcy1tZW51LW1pbmUnXSIpLmNsaWNrKCk7Cgp9CiAgIAkgLy/np7vliqjnq68KICAgCSAJIGlmIChHTV9nZXRWYWx1ZSgnYWxsY29uZmlnJykuYmFpZHUua2diYWlkdWVkPT10cnVlKXsKICAJIAkgdmFyIHhjYmRqYz0wOwogICAJIAkgICBpZiAoKHprZHVybGRvbWFpbi5pbmRleE9mKCcvcz93b3JkJykgPiAwIHx8IHprZHVybGRvbWFpbi5pbmRleE9mKCcmd2Q9JykgPiAwIHx8IHprZHVybGRvbWFpbi5pbmRleE9mKCc/d2Q9JykgPiAwIHx8IHprZHVybGRvbWFpbi5pbmRleE9mKCcmd29yZD0nKSA+IDApICAmJiB6a2R1cmxkb21haW4uaW5kZXhPZignJnJ0dD0nKSA8IDApewogICAJIAkgICAJICAgeGNiZGpjPTE7CiAgIAkgCSAgIAkgICBnb2luZ251bWI9NjAwOwp9CgoKICBpZiAoeGNiZGpjPT0xKXsKIGlmICggJCgiZGl2W2NsYXNzPSdyZXN1bHQgYy1jb250YWluZXIgbmV3LXBtZCddIikubGVuZ3RoID4gMCl7CiAgCSAgIAkgICAkKCJkaXZbY2xhc3M9J2MtcmVzdWx0LWNvbnRlbnQnXSIpLmVhY2goZnVuY3Rpb24obWluZGV4LG1tZW50KSB7CiAgIGlmICggJCh0aGlzKS5maW5kKCJhW2RhdGEtY2xpY2sqPSc6J10iKS5sZW5ndGggPiAwKXsKICAgCSAgICAgICAgICAgIGlmICggJCh0aGlzKS5maW5kKCJhW2RhdGEtY2xpY2sqPSc6J10iKS50ZXh0KCkuaW5kZXhPZigi5bm/5ZGKIikgPj0wKXsKJCh0aGlzKS5yZW1vdmUoKTsKIH0KIH0KICB9KQogICAgICAgIH0KCiAgICAgICQoImRpdltjbGFzcz0ncmVzdWx0LW9wIGMtY29udGFpbmVyIHhwYXRoLWxvZyBuZXctcG1kJ11bdHBsPSdzcF9ob3Rfc2FsZSddIikucmVtb3ZlKCk7CiAgICAgICQoImRpdltjbGFzcz0ncmVzdWx0LW9wIGMtY29udGFpbmVyIHhwYXRoLWxvZyBuZXctcG1kJ11bdHBsPSdiMmJfcHJvZCddIikucmVtb3ZlKCk7CiAgICAgICQoImJbY2xhc3NePSdjdXItdGFiIGMtY29sb3ItdCBjdXItdGFiJ10iKS5jc3MoJ2NvbG9yJywnIzYyNjY3NTsnKTsKICAgICAgICAkKCIjY29udGVudF9yaWdodCIpLmZpbmQoIi5jLXJvdyIpLnJlbW92ZSgpOwogICAgIGlmICggJCgiYVtjbGFzcz0ndG9pbmRleCddIikuYXR0cignaHJlZicpIT1jb25maWdtKXsKICAgICAgICAkKCJhW2NsYXNzPSd0b2luZGV4J10iKS5hdHRyKCdocmVmJyxjb25maWdtKTsKICAgCSAkKCJhW2NsYXNzPSd0b2luZGV4J10iKS50ZXh0KCfmjqfliLbpnaLmnb8nKTsKICAgICAgICB9CiAgCSAgICAkKCIjdG9wLWFkIikucmVtb3ZlKCk7CiAgIGlmIChpc01vYmlsZSgpKXsKICAgICAgCSAgIG9wZW54Y2QoKTsKICAgICAgCSAgICQoJ2JvZHknKS5vbignY2xpY2snLCdhJyxmdW5jdGlvbigpewoJaWYgKCQodGhpcykuYXR0cigiaHJlZiIpKXsKCXdpbmRvdy5sb2NhdGlvbi5ocmVmPSQodGhpcykuYXR0cigiaHJlZiIpOwoJfQogIH0pCiAgIAkgICAkKCJzcGFuW3JlZj0nb3BlbiddIikucGFyZW50KCkucGFyZW50KCkucmVtb3ZlKCk7CiAgICAgIAkgICQoIi5lY193aXNlX2FkIikucmVtb3ZlKCk7CiAgICAgICAkKCIuZWMtcmVzdWx0LWlubmVyIikucmVtb3ZlKCk7CiAgICAgICAgJCgiLmMtcmVzdWx0LnJlc3VsdFtzcmNpZD0neGN4X211bHRpJ10iKS5yZW1vdmUoKTsKICAgICAgICAkKCJkaXZbZGF0YS1tb2R1bGU9J2InXSIpLnJlbW92ZSgpOwogICAgICAgICBpZiAoR01fZ2V0VmFsdWUoJ2FsbGNvbmZpZycpLmJhaWR1LmtnYmFpZHVhZD09dHJ1ZSl7CiQoImRpdltjbGFzcz0nYy1yZXN1bHQtY29udGVudCddIikuZWFjaChmdW5jdGlvbihtaW5kZXgsbW1lbnQpIHsKaWYgKCQobW1lbnQpLnRleHQoKSl7CgkgICAgICAgICAgICBsZXQgcGluZ2JpY2k9JCh0aGlzKS50ZXh0KCk7CiAgICAgICAgIGlmICggJChtbWVudCkuYXR0cigiZGF0YS1rd2t3ZWQiKT09dW5kZWZpbmVkICl7CiAgICAgICAgIGZvcihsZXQgYiBpbiBHTV9nZXRWYWx1ZSgnYWxsY29uZmlnJykucGluZ2Jpa3cpewogJChtbWVudCkuYXR0cigiZGF0YS1rd2VkIiwiMSIpOwogICAgICAgICBpZiAocGluZ2JpY2kuaW5kZXhPZihHTV9nZXRWYWx1ZSgnYWxsY29uZmlnJykucGluZ2Jpa3dbYl0pID49MCl7CiAkKG1tZW50KS5yZW1vdmUoKTsKICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgfQoKfQogICAgaWYgKCAkKG1tZW50KS5hdHRyKCJkYXRhLWt3dXJsZWQiKT09dW5kZWZpbmVkICl7CmlmICgkKG1tZW50KS5maW5kKCJhcnRpY2xlIikpewoJaWYgKCQobW1lbnQpLmZpbmQoImFydGljbGUiKS5hdHRyKCJybC1saW5rLWhyZWYiKSl7CmxldCBiZHp4bXVybD0kKG1tZW50KS5maW5kKCJhcnRpY2xlIikuYXR0cigicmwtbGluay1ocmVmIik7CiAgR01feG1saHR0cFJlcXVlc3QoewogICAgICAgICAgICAgICAgICBtZXRob2QgOiAiR0VUIiwKICAgICAgICAgICAgICAgICBkYXRhVHlwZTogImpzb24iLAogICAgICAgICAgICAgICAgIHRpbWVvdXQ6IDEwMDAsCiAgICAgICAgICAgICAgICB1cmwgOiBiZHp4bXVybCwKICBvbnJlYWR5c3RhdGVjaGFuZ2UgOiBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAJICBpZiAocmVzcG9uc2UucmVzcG9uc2VUZXh0KXsKYmR6eG11cmw9cmVzcG9uc2UucmVzcG9uc2VUZXh0Lm1hdGNoKC91cmw9KFxTKikiLylbMV07CiQobW1lbnQpLmZpbmQoImFydGljbGUiKS5hdHRyKCJybC1saW5rLWhyZWYiLGJkenhtdXJsKQokKG1tZW50KS5maW5kKCJhIikuYXR0cigiaHJlZiIsYmR6eG11cmwpCiAkKG1tZW50KS5hdHRyKCJkYXRhLWt3dXJsZWQiLCIxIik7CiAgZm9yKGxldCBiIGluIEdNX2dldFZhbHVlKCdhbGxjb25maWcnKS5waW5nYml1cmwpewogICAgICAgICBpZiAoYmR6eG11cmwuaW5kZXhPZihHTV9nZXRWYWx1ZSgnYWxsY29uZmlnJykucGluZ2JpdXJsW2JdKSA+PTApewoJICQobW1lbnQpLnJlbW92ZSgpOwogICAgICAgICB9CiAgICAgICAgICAgICB9CiAgCSAgfQoKfQp9KQp9Cn0KfQoKICAgICAgICB9KQogICAgICAgfQogICAgfQogICAgfQogICAgIH0KICAgLy8KICAgICAgICAgaWYoemtkdXJsZG9tYWluPT0iaHR0cHM6Ly93d3cuYmFpZHUuY29tLyIgIHx8IHprZHVybGRvbWFpbj09Imh0dHBzOi8vd3d3LmJhaWR1LmNvbSIgfHwgemtkdXJsZG9tYWluLmluZGV4T2YoJ3d3dy5iYWlkdS5jb20vPycpID4gMCAgICkgewogICAgICAgICAJICAgJCgiZGl2W2NsYXNzPSdzYW4tY2FyZCddW3RwbD0nZmVlZC1hZCddIikucmVtb3ZlKCk7CiAgICAgIAkgICAgaWYgKEdNX2dldFZhbHVlKCdhbGxjb25maWcnKS5iYWlkdS5iYWlkdWhvdD09dHJ1ZSl7CiAgICQoImRpdltjbGFzcz0naG90LW5ld3Mtd3JhcHBlciddIikucmVtb3ZlKCk7CiAgJCgiI3MtaG90c2VhcmNoLXdyYXBwZXIiKS5yZW1vdmUoKTsKCn0KICAgICAgCSAgIH0KICAgICAgCSAgICAgaWYoemtkdXJsZG9tYWluLmluZGV4T2YoJ2JhaWppYWhhby5iYWlkdS5jb20vcycpID4gMCAgICkgewogICAgICAgaWYgKEdNX2dldFZhbHVlKCdhbGxjb25maWcnKS5iYWlkdS5iYWlkdWhvdD09dHJ1ZSl7CiAgICAgJCgiZGl2W2NsYXNzXj0naW5kZXgtbW9kdWxlX3RvcExpc3QnXSIpLnJlbW92ZSgpOwp9CiAgICAgIAkgICAgfQogICAgICAJICAgICAgICAgIAkgICAgICAgaWYgKChsb2NhdGlvbi5ocmVmLmluZGV4T2YoJy5iYWlkdS5jb20vcycpID4gMCB8fCBsb2NhdGlvbi5ocmVmLmluZGV4T2YoJ3dvcmQ9JykgPiAwKSAgICYmIGxvY2F0aW9uLmhyZWYuaW5kZXhPZignJnJ0dD0nKSA8IDAgJiYgaXNNb2JpbGUoKSl7CiAkKCJkaXZbY2xhc3M9J2MtcmVzdWx0IHJlc3VsdCddIikuZWFjaChmdW5jdGlvbihpbmRleCxlbGVtZW50KSB7CiAJICAgICBpZiAoJChlbGVtZW50KS5hdHRyKCJkLWxnIikgKXsKIH1lbHNlewogCSBsZXQgZHVybD0iIjsKIAkgbGV0IGR1cmxkYXRhPSIiOwogCSBpZiAoJChlbGVtZW50KS5hdHRyKCJkYXRhLWxvZyIpKXsKIAkgZHVybGRhdGE9JChlbGVtZW50KS5hdHRyKCJkYXRhLWxvZyIpOwogCSBkdXJsZGF0YSA9SlNPTi5wYXJzZShkdXJsZGF0YSk7CmR1cmw9ZHVybGRhdGEubXU7CiAJIH0KICAgICAgCSQoZWxlbWVudCkuYXR0cigiZC1sZyIsIjEiKTsKICBpZiAoICBkdXJsLmluZGV4T2YoIi8vIik+PSAwICApIHsKICAgICAgCSBsZXQgdXJsZG9tYWluID0gZHVybC5zcGxpdCgiLyIpOwpsZXQgdXJsZG9mYXZpY29uID0gIiI7CmlmKCB1cmxkb21haW5bMl0gKSB7CiAgICB1cmxkb2Zhdmljb249ZmF2aWNvbnVybCt1cmxkb21haW5bMF0rIi8vIit1cmxkb21haW5bMl0rIj9zaXplPTMyIjsKCX0KCglpZiAoR01fZ2V0VmFsdWUoJ2FsbGNvbmZpZycpLmJhaWR1LmJhaWR1bG9nbz09dHJ1ZSl7CgkJaWYgKCQoZWxlbWVudCkuZmluZCgiLmJkLWljb24tcyIpLmxlbmd0aD09MCl7CgkkKGVsZW1lbnQpLmZpbmQoIi5zaW5nbGUtdGV4dCIpLmJlZm9yZSgnPGRpdiBjbGFzcz0iYy1pbWcgYy1pbWctY2lyY2xlIGMtZ2FwLXJpZ2h0LXhzbWFsbCIgc3R5bGU9ImJvcmRlci1yYWRpdXM6IDElO2Rpc3BsYXk6IGlubGluZS1ibG9jaztwb3NpdGlvbjogcmVsYXRpdmU7IHRvcDogM3B4O2JhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMCk7bWF4LXdpZHRoOjI0cHg7Ij48c3BhbiBjbGFzcz0iYy1pbWctYm9yZGVyIGMtaW1nLXNvdXJjZS1ib3JkZXIgYy1pbWctcmFkaXVzLWxhcmdlIiBzdHlsZT0iYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwKTtib3JkZXI6IDBweCBzb2xpZCByZ2JhKDAsMCwwLDApOyI+PC9zcGFuPjxpbWcgc3R5bGU9Im1heC13aWR0aDoxOHB4O2JvcmRlci1yYWRpdXM6IDNweDsiIHNyYz0iJyt1cmxkb2Zhdmljb24rJyIgICAgb25lcnJvcj0iamF2YXNjcmlwdDp0aGlzLnBhcmVudE5vZGUuc3R5bGUuZGlzcGxheSA9IFwnbm9uZVwnOyIgPjwvZGl2PicpOwoJJCgiLnNpbmdsZS10ZXh0IikuY3NzKCJvdmVyZmxvdyIsImluaXRpYWwiKTsKfQp9Cgp9Cn0KIH0pCiAgICAgICAgICB9CiAgIGlmKHprZHVybGRvbWFpbi5pbmRleE9mKCd3d3cuYmFpZHUuY29tL3MnKSA+IDAgJiYgemtkdXJsZG9tYWluLmluZGV4T2YoJyZydHQ9JykgPCAwKXsKICAgCSAgIAkgaWYgKEdNX2dldFZhbHVlKCdhbGxjb25maWcnKS5iYWlkdS5rZ2JhaWR1ZWQ9PXRydWUpewogICAgICAgICQoIltjbWF0Y2hpZF0iKS5yZW1vdmUoKTsKLy8kKCIjY29udGVudF9yaWdodCIpLnJlbW92ZSgpOwoKICAkKCIjdG9wLWFkIikucmVtb3ZlKCk7CiAkKCIuZWMtcGNfbWF0X2NfYmFubmVyX19jY19iYW5uZXJfYmFja2dyb3VuZF9iIikucmVtb3ZlKCk7Ly/lk4HniYzlub/lkYrmqKHlnZcKfQovL+WPs+i+ueagjwogIGlmIChHTV9nZXRWYWx1ZSgnYWxsY29uZmlnJykuYmFpZHUuYmFpZHVob3Q9PXRydWUpewogIAkgICQoIiNjb24tYXIiKS5yZW1vdmUoKTsvL+eDreaQnAp9CiQoIi5sYXlvdXQiKS5yZW1vdmUoKTsKJCgiLmhpbnRfcmlnaHRfbWlkZGxlIikucmVtb3ZlKCk7Ci8vJCgiI2NvbnRlbnRfbGVmdCIpLmNzcygid2lkdGgiLCIxMDAlIik7Ci8vJCgiLmMtY29udGFpbmVyIikuY3NzKCJ3aWR0aCIsIjEwMCUiKS5jc3MoInBhZGRpbmctYm90dG9tIiwiMjBweCIpOwogICAgICAgaWYgKEdNX2dldFZhbHVlKCdhbGxjb25maWcnKS5iYWlkdS5iYWlkdWV5ZT09dHJ1ZSl7CiQoImh0bWwgYm9keSIpLmNzcygiYmFja2dyb3VuZC1jb2xvciIsR01fZ2V0VmFsdWUoJ2FsbGNvbmZpZycpLmJhaWR1LmJhaWR1ZXllY29sb3IpOwokKCIjaGVhZCwjZm9vdCwjcGFnZSwjcnMsI2hlbHAsLmZvb3QtaW5uZXIiKS5jc3MoImJhY2tncm91bmQtY29sb3IiLEdNX2dldFZhbHVlKCdhbGxjb25maWcnKS5iYWlkdS5iYWlkdWV5ZWNvbG9yKTsKICAgfQovLwoKCgogJCgiZGl2W2lkPSdjb250ZW50X2xlZnQnXSA+ZGl2IikuZWFjaChmdW5jdGlvbihpbmRleCxlbGVtZW50KSB7CiAJIGxldCB0ID0gJChlbGVtZW50KS5jaGlsZHJlbignOmxhc3QtY2hpbGQnKS5jaGlsZHJlbignOmxhc3QtY2hpbGQnKS50ZXh0KCk7CgppZiAodD09IuW5v+WRiiIpewoJCSBpZiAoR01fZ2V0VmFsdWUoJ2FsbGNvbmZpZycpLmJhaWR1LmtnYmFpZHVlZD09dHJ1ZSl7CiAkKGVsZW1lbnQpLnJlbW92ZSgpOwogfQp9CiAgIGxldCB4emdnYnQgPSQoZWxlbWVudCkuZmluZCgic3BhbiIpOwogaWYgKHh6Z2didCl7CiAJIAkgaWYgKEdNX2dldFZhbHVlKCdhbGxjb25maWcnKS5iYWlkdS5rZ2JhaWR1ZWQ9PXRydWUpewogCSB4emdnYnQuZWFjaChmdW5jdGlvbihpbmRleCxlbG50KSB7CiAJIGlmICAoICQoZWxudCkudGV4dCgpPT0i5bm/5ZGKIil7CiAJIAkgICQoZWxlbWVudCkucmVtb3ZlKCk7CiAJIH0KIAkgfSkKIAkgCSB9CiB9CgogICBsZXQgeHpidCA9JChlbGVtZW50KS5maW5kKCJoMyIpLmZpbmQoImEiKTsKICAJICAgIGxldCBkdXJsPXh6YnQuYXR0cigiaHJlZiIpOwoKICAgICAgaWYgKCQoZWxlbWVudCkuYXR0cigiZC1uZXciKSApewogICAgICAgICAgIH1lbHNlewoKCiAgCSAgICAJICAgIGlmIChkdXJsKXsKCiAgICAgICAgICAgaWYgKCBkdXJsLmluZGV4T2YoImJhaWR1LmNvbS9saW5rPyIpID4wICApewogICAgICAgICAgIAkgICAgIGlmICAoZHVybC5pbmRleE9mKCJlcWlkIikgPCAwICApewogICAgICAgICAgICAgICAgICAgIGR1cmwgPSBkdXJsICsgIiZ3ZD0mZXFpZD0iOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZXQgZHVybHR4dD14emJ0LnRleHQoKTsKICAgICAgICAgICBsZXQgZHVybGh0bWw9ZHVybHR4dDsKICAgICAgICAgICAgbGV0IHd1cmw9IiI7CiAgICAgICAgICAgICAgICAgIEdNX3htbGh0dHBSZXF1ZXN0KHsKICAgICAgICAgICAgICAgICAgbWV0aG9kIDogIkdFVCIsCiAgICAgICAgICAgICAgICAgZGF0YVR5cGU6ICJqc29uIiwKICAgICAgICAgICAgICAgICB0aW1lb3V0OiAyMDAwLAogICAgICAgICAgICAgICAgdXJsIDogZHVybCwKICBvbnJlYWR5c3RhdGVjaGFuZ2UgOiBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICBpZiAocmVzcG9uc2UucmVzcG9uc2UpewogICB2YXIgdXJsenhhMj1yZXNwb25zZS5yZXNwb25zZS5tYXRjaCgvVVJMPVwnKFxTKilcJy8pOwogICB4emJ0LmF0dHIoImhyZWYiLHVybHp4YTJbMV0pOwogICBkdXJsPXVybHp4YTJbMV07CiAgICAkKGVsZW1lbnQpLmF0dHIoImQtbmV3IiwiMSIpOwoKICAgIAkgaWYgKGR1cmwpewogICAgCSBsZXQgYmR2YnQgPSAkKGVsZW1lbnQpLmNoaWxkcmVuKCc6bGFzdC1jaGlsZCcpLmZpbmQoJy5jLXNob3d1cmwuYy1jb2xvci1ncmF5Jyk7CgogIGlmIChiZHZidCl7CiAgCSAgICBsZXQgZHVybHZ0eHQ9YmR2YnQudGV4dCgpOwogIAkgICAgIGxldCBhZGR1cmw9dXJsenhhMlsxXTsKICAvLwkgICAgY29uc29sZS5sb2coYmR2YnQuaHRtbCgpKQogICBsZXQgYWRkeHVybGRvbWFpbiA9IHVybHp4YTJbMV0uc3BsaXQoIi8iKTsKICAgICBpZiggYWRkeHVybGRvbWFpblsyXSApIHsKICAgIGFkZHh1cmw9YWRkeHVybGRvbWFpblsyXTsKfQogICAgCSAJICAgIGlmIChkdXJsdnR4dC5pbmRleE9mKCcuJykgPCAwKXsKICAgIAlkdXJsdnR4dD1kdXJsdnR4dCsn77yaJythZGR4dXJsOwp9ZWxzZXsKCWR1cmx2dHh0PWFkZHh1cmw7Cn0KCmJkdmJ0LnRleHQoZHVybHZ0eHQpOwpiZHZidC5hdHRyKCdocmVmJyxkdXJsKTsKfQppZiAoR01fZ2V0VmFsdWUoJ2FsbGNvbmZpZycpLmJhaWR1LmtnYmFpZHVhZD09dHJ1ZSl7CiAgICAgCSAJICAgaWYgKEdNX2dldFZhbHVlKCdhbGxjb25maWcnKS5iYWlkdS5iYWlkdWxpYW5qaWU9PXRydWUpewoKICAgICAgICAgZm9yKGxldCBiIGluIEdNX2dldFZhbHVlKCdhbGxjb25maWcnKS5waW5nYml1cmwpewogICAgICAgICBpZiAoZHVybC5pbmRleE9mKEdNX2dldFZhbHVlKCdhbGxjb25maWcnKS5waW5nYml1cmxbYl0pID49MCl7CgkgJChlbGVtZW50KS5yZW1vdmUoKTsKICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgfQogICAgICB9CiAgICAgIAkgICAgICAgaWYgKCQoZWxlbWVudCkuYXR0cigiZC1sZyIpICl7CgogICAgICAgICAgIH1lbHNlewogICAgICAgICAgIAkgICAgIAkkKGVsZW1lbnQpLmF0dHIoImQtbGciLCIxIik7CiAgICAgCSBsZXQgdXJsZG9tYWluID0gZHVybC5zcGxpdCgiLyIpOwpsZXQgdXJsZG9mYXZpY29uID0gIiI7CmlmKCB1cmxkb21haW5bMl0gKSB7CiAgICB1cmxkb2Zhdmljb249ZmF2aWNvbnVybCt1cmxkb21haW5bMF0rIi8vIit1cmxkb21haW5bMl0rIj9zaXplPTMyIjsKCX0KCmlmKCQoZWxlbWVudCkuZmluZCgiaDMiKS5maW5kKCJpbWciKS5hdHRyKCdzcmMnKSApIHsKCiAgdXJsZG9mYXZpY29uPSQoZWxlbWVudCkuZmluZCgiaDMiKS5maW5kKCJpbWciKS5hdHRyKCdzcmMnKTsKfQoKaWYgKEdNX2dldFZhbHVlKCdhbGxjb25maWcnKS5iYWlkdS5iYWlkdWxvZ289PXRydWUpewppZigkKGVsZW1lbnQpLmZpbmQoImgzIikuZmluZCgiaW1nIikuYXR0cignc3JjJykgKSB7Cn1lbHNlewoJaWYgKCQoZWxlbWVudCkuZmluZCgiaDMiKS5sZW5ndGg9PTEpewoJJChlbGVtZW50KS5maW5kKCJoMyIpLmZpbmQoImEiKS5wcmVwZW5kKCc8ZGl2IGNsYXNzPSJjLWltZyBjLWltZy1jaXJjbGUgYy1nYXAtcmlnaHQteHNtYWxsIiBzdHlsZT0iYm9yZGVyLXJhZGl1czogMSU7ZGlzcGxheTogaW5saW5lLWJsb2NrO3Bvc2l0aW9uOiByZWxhdGl2ZTsgdG9wOiAzcHg7YmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwKTttYXgtd2lkdGg6MjRweDsiPjxzcGFuIGNsYXNzPSJjLWltZy1ib3JkZXIgYy1pbWctc291cmNlLWJvcmRlciBjLWltZy1yYWRpdXMtbGFyZ2UiIHN0eWxlPSJiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDApO2JvcmRlcjogMHB4IHNvbGlkIHJnYmEoMCwwLDAsMCk7Ij48L3NwYW4+PGltZyBzdHlsZT0ibWF4LXdpZHRoOjI0cHg7IiBzcmM9IicrdXJsZG9mYXZpY29uKyciICAgIG9uZXJyb3I9ImphdmFzY3JpcHQ6dGhpcy5wYXJlbnROb2RlLnN0eWxlLmRpc3BsYXkgPSBcJ25vbmVcJzsiID48L2Rpdj4nKTsKfQp9Cgp9CgogICAgfQogfQp9Cgp9Cn0pCiAgICAgICAgICAgfQogICAgfQoKfQogICAgICBpZiAoJChlbGVtZW50KS5hdHRyKCJkLW9sZCIpICl7CgogICAgICAgICAgIH1lbHNlewogICAgICAgICAgIAkgICAgCSQoZWxlbWVudCkuYXR0cigiZC1vbGQiLCIxIik7CiAgICBsZXQgcGluZ2JpamM9MDsKIGlmIChHTV9nZXRWYWx1ZSgnYWxsY29uZmlnJykuYmFpZHUua2diYWlkdWFkPT10cnVlKXsKICAgICAgICAgaWYgKCBwaW5nYmlqYz09MCApewogICAgICAgICBmb3IobGV0IGIgaW4gR01fZ2V0VmFsdWUoJ2FsbGNvbmZpZycpLnBpbmdiaWt3KXsKICAgICAgICAgbGV0IHBpbmdiaWNpPQkgJChlbGVtZW50KS5maW5kKCJoMyIpLmZpbmQoImEiKS50ZXh0KCkrICQoZWxlbWVudCkuZmluZCgiLmMtYWJzdHJhY3QiKS50ZXh0KCk7CiAgICAgICAgIGlmIChwaW5nYmljaS5pbmRleE9mKEdNX2dldFZhbHVlKCdhbGxjb25maWcnKS5waW5nYmlrd1tiXSkgPj0wKXsKICQoZWxlbWVudCkucmVtb3ZlKCk7CgkgcGluZ2JpamM9MTsKCiAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgIH0KICB9CiAgICAgCSB9CgoKCn0pCgogaWYgKEdNX2dldFZhbHVlKCdhbGxjb25maWcnKS5iYWlkdS5rZ2JhaWR1ZWQ9PXRydWUpewogICBpZih6a2R1cmxkb21haW4uaW5kZXhPZigic2YvdnNlYXJjaCIpIDwgMCApIHsKICAgICAgJCgiI2NvbnRlbnRfbGVmdCIpLmZpbmQoImRpdjplcSgwKSIpLmVhY2goZnVuY3Rpb24oKSB7CiAgICAgICAgICBsZXQgYmlkID0gU3RyaW5nKCQodGhpcykuYXR0cigiaWQiKSk7CiAgICAgICAgICBsZXQgYmNsYXNzID0gU3RyaW5nKCQodGhpcykuYXR0cigiY2xhc3MiKSk7CiAgICAgICAgICAgIGlmIChiaWQgPT0gInVuZGVmaW5lZCIgJiYgYmNsYXNzID09ICJ1bmRlZmluZWQiICkgewogICAgICAkKHRoaXMpLnJlbW92ZSgpOwogICAgICAgICAgICB9CiAgICAgICAgfSkKfQogfQoKfQogIGlmIChHTV9nZXRWYWx1ZSgnYWxsY29uZmlnJykuYmFpZHUua2diYWlkdWVkPT10cnVlKXsKICAgIGlmKHprZHVybGRvbWFpbi5pbmRleE9mKCd6aGlkYW8uYmFpZHUuY29tJykgPiAwKXsKICAgICAgICAkKCIuc2hvcC1lbnRyYW5jZSIpLnJlbW92ZSgpOwogICAgICAgICQoIi5hY3Rpdml0eS1lbnRyeSIpLnJlbW92ZSgpOwogICAgICAgICQoIi50YXNrLWxpc3QtYnV0dG9uIikucmVtb3ZlKCk7CiAgICB9CiAgICAgaWYoemtkdXJsZG9tYWluLmluZGV4T2YoJ3poaWRhby5iYWlkdS5jb20vaW5kZXgvJykgPiAwKXsKICAgICAJICAgIGlmIChpc01vYmlsZSgpKXsKICAgIAkgICAJICAgICQoImRpdltjbGFzcz0nZWNzLXdyYXBlciddIikucmVtb3ZlKCk7CiAgICAJICAgfQogICAgIH0KICAgIGlmKHprZHVybGRvbWFpbi5pbmRleE9mKCd6aGlkYW8uYmFpZHUuY29tL3NlYXJjaCcpID4gMCl7CiAgICAJICAgIAkgaWYgKCQoImlbY2xhc3M9J2FyaWFpY29uIGFyaWFpY29uLWV4aXQgYXJpYWV4aXQgZml4ZWRTZWxlY3QgYXJpYXNraXB0aGVtZSddIikubGVuZ3RoPjApewogICAgCSAJICAkKCJpW2NsYXNzPSdhcmlhaWNvbiBhcmlhaWNvbi1leGl0IGFyaWFleGl0IGZpeGVkU2VsZWN0IGFyaWFza2lwdGhlbWUnXSIpLmNsaWNrKCk7CiAgICAJIH0KICAgIAkgICBpZiAoaXNNb2JpbGUoKSl7CiAgICAJICAgCSAgICAkKCJkaXZbY2xhc3M9J2Vjcy13cmFwZXInXSIpLnJlbW92ZSgpOwogICAgCSAgIH0KCiAgICAgICAgJCgiLmJhbm5lcmRvd24iKS5yZW1vdmUoKTsKICAgICAgICAkKCIuYXNpZGUuZml4aGVpZ2h0IikucmVtb3ZlKCk7CiAgICAgICAgJCgiLndndC1ib3R0b20tYXNrIikucmVtb3ZlKCk7CiAgICAgICAgJCgiLmxlZnR1cCIpLnJlbW92ZSgpOwogICAgICAgICQoIi53Z3QtaWtub3ctc3BlY2lhbC1idXNpbmVzcyIpLnJlbW92ZSgpOwogICAgfQogICAgaWYoemtkdXJsZG9tYWluLmluZGV4T2YoJ3poaWRhby5iYWlkdS5jb20vcXVlc3Rpb24nKSA+IDApewoKICAgIAkgaWYgKCQoImlbY2xhc3M9J2FyaWFpY29uIGFyaWFpY29uLWV4aXQgYXJpYWV4aXQgZml4ZWRTZWxlY3QgYXJpYXNraXB0aGVtZSddIikubGVuZ3RoPjApewogICAgCSAJICAkKCJpW2NsYXNzPSdhcmlhaWNvbiBhcmlhaWNvbi1leGl0IGFyaWFleGl0IGZpeGVkU2VsZWN0IGFyaWFza2lwdGhlbWUnXSIpLmNsaWNrKCk7CiAgICAJIH0KICAgICAgICAgJCgiZGl2W2NsYXNzXj0nd2d0LXZ2YSddIikucmVtb3ZlKCk7CiAgICAgICAgJCgiLmZlZWQtcmVjb21tZW5kLWxpc3QiKS5yZW1vdmUoKTsKICAgIAkgICAJICAgaWYgKGlzTW9iaWxlKCkpewogICAgCSAgICAkKCJkaXZbY2xhc3M9J3dhcC15b3V4LWNoYW5nZS1hc3AnXSIpLnJlbW92ZSgpOwogICAgCSAgICAkKCIjZmVlZC1yZWNvbW1lbmQiKS5yZW1vdmUoKTsKICAgICAgICAgJCgiZGl2W2NsYXNzKj0nZWNvbS1hZHMnXSIpLnJlbW92ZSgpOwoKCiAgICAgICAgICBpZigkKCIuY2lyY3VzZWUtYmciKS5sZW5ndGg+MCAgKXsKICAgICAgICAgIAkkKCIuY2lyY3VzZWUtYmciKS5oaWRlKCk7CgogICAgICAgICAgCSAkKCJkaXZbY2xhc3M9J2NoYXQtY29uc3VsdCBzaG9ydGVuJ10iKS5jc3MoJ2hlaWdodCcsJ2F1dG8nKTsKICAgICAgICAgIH0KICAgIH0KICAgICAgICAgICBpZigkKCIuY2lyY3VzZWUtYmciKS5sZW5ndGg+MCAgKXsKICAgICAgICAgIAkkKCIuY2lyY3VzZWUtYmciKS5oaWRlKCk7CiAgICAgICAgICAJICQoIi5jaGF0LWNvbnN1bHQtYm94IikuY3NzKCdoZWlnaHQnLCdhdXRvJyk7CiAgICAgICAgICB9CiAgICAJJCgiI2tub3dsZWRnZS1hbnN3ZXIiKS5yZW1vdmUoKTsKICAgIAkkKCIuZ3JpZC1yLnFiLXNpZGUiKS5yZW1vdmUoKTsKICAgICAgICAkKCIud2d0LWFkcyIpLnJlbW92ZSgpOwogICAgICAgICQoIi53Z3QtYm90dG9tLXVuaW9uIikucmVtb3ZlKCk7CiAgICAgICAgJCgiLmFkVG9wSW1nIikucmVtb3ZlKCk7CiAgICAgICAgJCgiLmV4cC10b3B3bGQtdGlwIikucmVtb3ZlKCk7CiAgICAgICAgJCgiI3dndC1lY29tLWJhbm5lciIpLnJlbW92ZSgpOwogICAgICAgICQoIiN3Z3QtZWNvbS1yaWdodCIpLnJlbW92ZSgpOwogICAgICAgICQoIi5xdWVzdGlvbi1udW1iZXItdGV4dC1jaGFpbiIpLnJlbW92ZSgpOwoKICAgICAgICAgICAgJCgiLmVjLXBjX21hdF9jb2V1c19fcmVsYXRlZF9saW5rX3RleHQtY29udGVudCIpLnJlbW92ZSgpOwoKICAgIH0KCiAgICAgaWYoemtkdXJsZG9tYWluLmluZGV4T2YoJ3dhcGJhaWtlLmJhaWR1LmNvbS9pdGVtJykgPj0gMCl7CgkkKCJkaXZbY2xhc3M9J3lpdGlhby1jb250ZW50IEoteWl0aWFvLWNvbnRlbnQnXSIpLnJlbW92ZSgpOwp9CiAgICBpZih6a2R1cmxkb21haW4uaW5kZXhPZignYmFpa2UuYmFpZHUuY29tJykgPiAwKXsKCiAgICAgICAgICAgICQoIiNuYXZiYXJBZE5ldyIpLnJlbW92ZSgpOwogICAgICAgICAgICAkKCIudXNlcmJhcl9tYWxsIikucmVtb3ZlKCk7CgogICAgfQogICAgaWYoemtkdXJsZG9tYWluLmluZGV4T2YoJ2JhaWtlLmJhaWR1LmNvbS9pdGVtJykgPiAwKXsKICQoImFbb25jbGlja149J3BhZ2UuTWl4ZWRvci5taXhlZE9wZW4odGhpcyIpLnJlbW92ZSgpOwoJJCgiLnlpdGlhby1jb250YWluZXIiKS5yZW1vdmUoKTsKICAgICAgICAvLyQoIi5iZWZvcmUtY29udGVudCIpLnJlbW92ZSgpOyDnmb7luqbnmb7np5HlpJrkuYnor43lkoznp5Lmh4Lnmb7np5Hop4bpopHnm7jlhbMKICAgICAgICAkKCIuY29uZmlnTW9kdWxlQmFubmVyIikucmVtb3ZlKCk7CgogICAgICAgICAgICAkKCIudG9wQSIpLnJlbW92ZSgpOwogICAgICAgICAgICAkKCIucmlnaHQtYWQiKS5yZW1vdmUoKTsKICAgICAgICAgICAgJCgiLmJvdHRvbS1yZWNvbW1lbmQtd3JhcHBlciIpLnJlbW92ZSgpOwogICAgICAgICAgICAkKCIubGVtbWFXZ3QtcHJvbW90aW9uLXZiYWlrZSIpLnJlbW92ZSgpOwogICAgICAgICAgICAkKCIubGVtbWFXZ3QtcHJvbW90aW9uLXNsaWRlIikucmVtb3ZlKCk7CiAgICAgICAgICAgICQoIiNzaWRlX2JveF91bmlvbkFkIikucmVtb3ZlKCk7CgogICAgfQoKICAgIGlmKHprZHVybGRvbWFpbi5pbmRleE9mKCd3ZW5rdS5iYWlkdS5jb20nKSA+IDApewogICAgICAgICQoIi5iYW5uZXItYWQiKS5yZW1vdmUoKTsKICAgICAgICAkKCIuYWQtYm94IikucmVtb3ZlKCk7CiAgICAgICAgJCgiI2JhbnVybCIpLnJlbW92ZSgpOwogICAgICAgICQoIiNteS13a0hvbWUtdmlwLXRpcHMiKS5wYXJlbnQoKS5yZW1vdmUoKTsKICAgICAgICAkKCIudmlwLWNhcmQiKS5yZW1vdmUoKTsKCiAgICAgICAgICAgICQoIi56c2otdG9wYmFyIikucmVtb3ZlKCk7CiAgICAgICAgICAgICQoIi5sYXN0Y2VsbC1kaWFsb2ciKS5yZW1vdmUoKTsKICAgICAgICAgICAgJCgiLnpzai10b3Bwb3MiKS5yZW1vdmUoKTsKICAgICAgICAgICAgJCgiLmZjLXJlc3VsdC1jb250YWluZXIiKS5yZW1vdmUoKTsKCiAgICB9CiAgICBpZih6a2R1cmxkb21haW4uaW5kZXhPZignd2Vua3UuYmFpZHUuY29tL3NlYXJjaCcpID4gMCl7CiAgICAgICAgJCgiI2ZlbmdjaGFvYWQiKS5yZW1vdmUoKTsKICAgICAgICAgJCgiZGl2W2NsYXNzPSdhZGxpc3Qtd3JhcCddIikucmVtb3ZlKCk7CiAgICAgICAgJCgiLnl1ZWR1LXJlY29tbWVuZC13cmFwIikucmVtb3ZlKCk7CiAgICAgICAgJCgiLnNlYXJjaC1hc2lkZS1hZFdyYXAiKS5yZW1vdmUoKTsKICAkKCIuZmMtZmlyc3QtcmVzdWx0LXdyYXAiKS5yZW1vdmUoKTsKICAgIH0KICAgICBpZih6a2R1cmxkb21haW4uaW5kZXhPZignd2suYmFpZHUuY29tLycpID4gMCl7CiAgICAgICAgICAgIAkkKCIuZmMtcmVzdWx0IikucmVtb3ZlKCk7CiAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmKHprZHVybGRvbWFpbi5pbmRleE9mKCdoYW9rYW4uYmFpZHUuY29tLycpID4gMCl7CiAgICAgICAgIAkkKCIubGFuZHJpZ2h0YmFubmVyLWNvbnRlbnQiKS5yZW1vdmUoKTsKICAgICAgIH0KICAgICAgICBpZih6a2R1cmxkb21haW4uaW5kZXhPZignd2suYmFpZHUuY29tL3ZpZXcnKSA+IDApewogICAgICAgIAlpZiAoaXNNb2JpbGUoKSl7CgkkKCIubWlkZGxlLWJveC1yb290IikucmVtb3ZlKCk7CgkkKCIuZmMtYWQtY29udGFpbiIpLnJlbW92ZSgpOwoJJCgiLnNob3BzLWhvdCIpLnJlbW92ZSgpOwoJJCgiLmItYmlncGljLXJvb3QiKS5yZW1vdmUoKTsKCSQoIi52aWRlby1yZWMtd3JhcCIpLnJlbW92ZSgpOwoJJCgiLnNob3BzLWhvdCIpLnJlbW92ZSgpOwoJICQoImRpdltjbGFzcz0nbmV3LWd1aWRlYXBwLWNhcmQtYnRuIG5ldy1ndWlkZWFwcC1jYXJkLWFuaW1hdGlvbiddIikucmVtb3ZlKCk7CiQoImRpdltjbGFzcz0ncmVhZGVyLXdyYXAgcmVhZGVyLWNvcHknXSIpLmNzcygnaGVpZ2h0JywnYXV0bycpOwokKCIjdmlldy1hcHAiKS5jc3MoJ21heC1oZWlnaHQnLCcnKTsKCn0KICAgICAgICB9CiAgICBpZih6a2R1cmxkb21haW4uaW5kZXhPZignd2Vua3UuYmFpZHUuY29tL3ZpZXcnKSA+IDApewppZiAoaXNNb2JpbGUoKSl7CgkkKCIubWlkZGxlLWJveC1yb290IikucmVtb3ZlKCk7CgkkKCIuZmMtYWQtY29udGFpbiIpLnJlbW92ZSgpOwoJJCgiLnNob3BzLWhvdCIpLnJlbW92ZSgpOwoJJCgiLmItYmlncGljLXJvb3QiKS5yZW1vdmUoKTsKCSQoIi52aWRlby1yZWMtd3JhcCIpLnJlbW92ZSgpOwoJJCgiLnNob3BzLWhvdCIpLnJlbW92ZSgpOwoJICQoImRpdltjbGFzcz0nZm9sZC1wYWdlciB3aXRoLW1hcmdpbiddIikucmVtb3ZlKCk7CiQoImRpdltjbGFzcz0ncmVhZGVyLXdyYXAgcmVhZGVyLWNvcHknXSIpLmNzcygnaGVpZ2h0JywnYXV0bycpOwokKCIjdmlldy1hcHAiKS5jc3MoJ21heC1oZWlnaHQnLCdhdXRvJyk7Cn0KICAgIAkgJCgiLmh4LWJvdHRvbS13cmFwcGVyIikucmVtb3ZlKCk7CiQoIi5oeC13YXJwIikucmVtb3ZlKCk7CiQoIi5mYy1mb2xkLXBhZ2UiKS5yZW1vdmUoKTsKJCgiLmh4LXJlY29tLXdyYXBwZXIiKS5yZW1vdmUoKTsKICAgIAkgJCgiLmh4LWJvdHRvbS13cmFwcGVyIikucmVtb3ZlKCk7CiAgICAgICAgJCgiLnJlbGF0aXZlLXJlY29tbWVuZC13cmFwcGVyIikucmVtb3ZlKCk7CiAgICAgICAgJCgiLmZjLWNvbnRhaW5lciIpLnJlbW92ZSgpOwogICAgICAgICQoIiNnZ2J0bSIpLnBhcmVudCgpLnJlbW92ZSgpOwogICAgICAgICQoIi51bmlvbi1hZC1ib3R0b20iKS5yZW1vdmUoKTsKICAgICAgICAkKCIuYWQtdmlwLWNsb3NlLWJvdHRvbSIpLnJlbW92ZSgpOwogICAgCSAgICQoIi5vcGVyYXRpb24td3JhcHBlciIpLnJlbW92ZSgpOwogICAgICAgICQoIi5yZWxhdGl2ZS1jb3Vyc2Utd3JhcHBlciIpLnJlbW92ZSgpOwogICAgICAgICQoIi5ob3Qtc2VhcmNoLXdyYXBwZXIiKS5yZW1vdmUoKTsKICAgICAgICAkKCIuaHgtcmlnaHQtd3JhcHBlciIpLnJlbW92ZSgpOwogICAgICAgICQoIiNyZWxhdGl2ZS12aWRlb3Mtd3JhcCIpLnJlbW92ZSgpOwogICAgICAgICQoIi5hZGQtaGFzLW1vbmV5LXBheSIpLnJlbW92ZSgpOwogICAgICAgICQoIi53ay1jb2xvci12aXAtcmVkIikucGFyZW50KCkucGFyZW50KCkucmVtb3ZlKCk7CiAgICAgICAgJCgiLnZpcC10aXBzLXdyYXAiKS5wYXJlbnQoKS5yZW1vdmUoKTsKICAgICAgICAkKCIudG9wLWFkcy1iYW5uZXItd3JhcCIpLnJlbW92ZSgpOwoKICAgICAgICAgICAgJCgiLndhbmdwYW4tdGlwIikucmVtb3ZlKCk7CiAgICAgICAgICAgICQoIi5uZXctdXNlci1kaXNjb3VudC10aXAiKS5yZW1vdmUoKTsKICAgICAgICAgICAgJCgiLnBheS12aXAtYnRuLXdyYXAiKS5yZW1vdmUoKTsKICAgICAgICAgICAgJCgiLnJlbGF0aXZlLWRvYy1hZC13cmFwcGVyIikucmVtb3ZlKCk7CgoKICAgICAgICAgICAgJCgiLnZpZXctbGlrZS1yZWNvbS1mYyIpLnJlbW92ZSgpOwoKICAgIH0KCiBpZih6a2R1cmxkb21haW4uaW5kZXhPZignYmFpZHUuY29tL3ZpZGVvL3BhZ2UnKSA+IDApewogCSQoImRpdltjbGFzcz0nbmEtZWMtaXRlbSddIikuZWFjaChmdW5jdGlvbigpIHsKIGlmICgkKHRoaXMpLmZpbmQoImFbZGF0YS10eXBlPSduYXRpdmVfYWQnXSIpLmxlbmd0aCA+IDApewokKHRoaXMpLnJlbW92ZSgpOwogICAgICAgIH0KICAgICAgICB9KQogfQogaWYoemtkdXJsZG9tYWluLmluZGV4T2YoJ2JhaWR1LmNvbS9zPycpID4gMCl7CiAJIAkkKCJkaXZbY2xhc3MqPSdjLWNvbnRhaW5lciBlY19yZXNpdGVtJ10iKS5yZW1vdmUoKTsKIAkgCSQoInNwYW5bcmVmPSdvcGVuJ10iKS5wYXJlbnQoKS5wYXJlbnQoKS5yZW1vdmUoKTsKIH0KIGlmKHprZHVybGRvbWFpbi5pbmRleE9mKCdtLmJhaWR1LmNvbScpID4gMCB8fCB6a2R1cmxkb21haW4uaW5kZXhPZignd3d3LmJhaWR1LmNvbScpID4gMCl7CiAJIAkkKCJkaXZbc3R5bGU9J292ZXJmbG93OiBoaWRkZW47YmFja2dyb3VuZDogI2ZmZjtwb3NpdGlvbjogcmVsYXRpdmU7J10iKS5yZW1vdmUoKTsKIH0KIGlmKHprZHVybGRvbWFpbi5pbmRleE9mKCdiYWlkdS5jb20vc2YvdnNlYXJjaD9wZD1pbWFnZV9jb250ZW50JykgPiAwKXsKCiAJIAkgJCgiYm9keSIpLm9uKCJjbGljayIsImRpdltjbGFzc149J2MtaW1hZ2Utdmlld2VyLWltZyddIixmdW5jdGlvbigpewogIGlmKCQodGhpcykuZmluZCgiaW1nIikubGVuZ3RoPjAgICl7CiAJd2luZG93LmxvY2F0aW9uLmhyZWY9JCh0aGlzKS5maW5kKCJpbWciKS5hdHRyKCJzcmMiKTsKCSB9CgogCQkJCSB9KQogICQoImJvZHkiKS5vbigiY2xpY2siLCIuaWNvbi5pY29uLWRvd25sb2FkIixmdW5jdGlvbigpewogIGlmKCQoIi5jLWltYWdlLXZpZXdlci1pdGVtLWN1cnJlbnQiKS5maW5kKCJpbWciKS5sZW5ndGg+MCAgKXsKIAl3aW5kb3cubG9jYXRpb24uaHJlZj0kKHRoaXMpLmZpbmQoImltZyIpLmF0dHIoInNyYyIpOwoJIH0KIAkJCQkgfSkKCiAJICAgICAgICQoImRpdltjbGFzc149J3NmYy1pbWFnZS1jb250ZW50LXdhdGVyZmFsbC1pdGVtJ10iKS5lYWNoKGZ1bmN0aW9uKCkgewogaWYgKCQodGhpcykuZmluZCgiZGl2W2NsYXNzPSdzZmMtaW1hZ2UtY29udGVudC1pbWctdG9vbGJhci1hZC10ZXh0J10iKS5sZW5ndGggPiAwKXsKJCh0aGlzKS5yZW1vdmUoKTsKICAgICAgICB9CiAgICAgICAgIGlmICgkKHRoaXMpLmZpbmQoImRpdltjbGFzcz0nY29tbW9kaXR5LXJvdy1pdGVtJ10iKS5sZW5ndGggPiAwKXsKJCh0aGlzKS5yZW1vdmUoKTsKICAgICAgICB9CiAgICAgICAgfSkKIH0KICBpZih6a2R1cmxkb21haW4uaW5kZXhPZignYmFpZHUuY29tL3NmL3ZzZWFyY2g/cGQ9dmlkZW8nKSA+IDApewokKCJkaXZbZGF0YS10eXBlPSdhZCddIikucmVtb3ZlKCk7CiB9CiAgIGlmKHprZHVybGRvbWFpbi5pbmRleE9mKCdiYWlkdS5jb20vc2YvdnNlYXJjaD9wZD13ZW5rdScpID4gMCl7CiAgICAgJCgiZGl2W2RhdGEtdHBsPSdhZHZfd2Vua3VfZmMnXSIpLnJlbW92ZSgpOwogfQogICBpZih6a2R1cmxkb21haW4uaW5kZXhPZignYmFpZHUuY29tL3NmL3ZzZWFyY2g/cGQ9dGllYmEnKSA+IDAgfHwgemtkdXJsZG9tYWluLmluZGV4T2YoJ2JhaWR1LmNvbS9zZi92c2VhcmNoP3BkPXdlbmRhX3RhYicpID4gMCl7CiQoImRpdltjbGFzcyo9J2MtY29udGFpbmVyIGVjLWNvbnRhaW5lciddIikucmVtb3ZlKCk7CiB9CiAgICBpZih6a2R1cmxkb21haW4uaW5kZXhPZignaW1hZ2UuYmFpZHUuY29tL3NlYXJjaC9pbmRleCcpID4gMCl7CiQoImxpW2NsYXNzPSduZXdmY0ltZ2xpJ10iKS5yZW1vdmUoKTsKICAgICAgICAkKCIjcG5sQmVmb3JlQ29udGVudCIpLnJlbW92ZSgpOwoKICAgICAgICAgICAgJCgiLmZjSW1nbGkiKS5yZW1vdmUoKTsKCiAgICB9CiAgICBpZih6a2R1cmxkb21haW4uaW5kZXhPZignaW1hZ2UuYmFpZHUuY29tL3NlYXJjaC9kZXRhaWwnKSA+IDApewogICAgICAgICQoIi50ZXh0LWxpbmstYWRzIikucmVtb3ZlKCk7CiAgICAgICAgJCgiLnJzcmVzdWx0LWNhcmQiKS5yZW1vdmUoKTsKICAgICAgICAkKCIjYWRDYXJkIikucmVtb3ZlKCk7CiAgICB9CgppZih6a2R1cmxkb21haW4uaW5kZXhPZigndGllYmEuYmFpZHUuY29tL3NmL3ZzZWFyY2gnKSA+IDApewogICAgICAgICQoImRpdltjbGFzcyo9J2MtY29udGFpbmVyIGVjLWNvbnRhaW5lciddIikucmVtb3ZlKCk7CiAgICB9CiAgICBpZih6a2R1cmxkb21haW4uaW5kZXhPZigndGllYmEuYmFpZHUuY29tL2Yvc2VhcmNoJykgPiAwKXsKICAgICAgICAkKCIuc19hc2lkZSIpLnJlbW92ZSgpOwogICAgfQogICAgICAgICAgIGlmKHprZHVybGRvbWFpbi5pbmRleE9mKCd0aWViYS5iYWlkdS5jb20vcC8nKSA+IDApewogICAgICAgIAkgICAJICAgaWYgKGlzTW9iaWxlKCkpewokKCJkaXZbY2xhc3M9J2Jhbm5lci13cmFwcGVyLWRlZmVuc2l2ZSddIikucmVtb3ZlKCk7CiQoImRpdltjbGFzcz0nZmVuZ2NoYW8tYmFubmVyLWRlZmVuc2l2ZSddIikucmVtb3ZlKCk7CiQoImRpdltjbGFzcz0nbGlzdC1jb250ZW50J10iKS5maW5kKCJkaXZbY2xhc3M9J2xpc3QtY29udGVudCddIikucmVtb3ZlKCk7Cn0KICAgICAgICAJfQogICAgaWYoemtkdXJsZG9tYWluLmluZGV4T2YoJ3RpZWJhLmJhaWR1LmNvbS9mPycpID4gMCl7CiAgICAJCSQoIi5idXMtdG9wLWFjdGl2aXR5LXdyYXAiKS5yZW1vdmUoKTsKICAgIAkkKCIucGxhdF9yZWNvbV9jYXJvdXNlbCIpLmhpZGUoKTsKICAgIAkgJCgiLmFjdGl2aXR5X2hlYWQgIikuaGlkZSgpOwogICAgCSAkKCIjYnJhbmRpbmdfYWRzIikuaGlkZSgpOwoKICAgIAkgaWYgKCQoIi5hY3Rpdml0eV9oZWFkIikubGVuZ3RoPjApewogICAgCSAJICQoIi5oZWFkX21haW4iKS5jc3MoIm1hcmdpbi10b3AiLCIxMDBweCIpOwogICAgCSB9CiAgICAJICBpZiAoaXNNb2JpbGUoKSl7CiQoImRpdltjbGFzcz0ndGItYmFubmVyLXdyYXBwZXItZGVmZW5zaXZlIHRiLWJhbm5lciB0Yi10aHJlYWRsaXN0X19pdGVtJ10iKS5yZW1vdmUoKTsKfQogICAgCQkgJCgiaW1nW2NsYXNzPSdjbG9zZV9idG4gal9jbGlja19jbG9zZSddIikuY2xpY2soKTsKICAgIAkJICQoImRpdltjbGFzcz0nY2xlYXJmaXggdGhyZWFkX2l0ZW1fYm94J10iKS5yZW1vdmUoKTsKICAgIAkJICQoImRpdltpZD0nZmMtd3JhcCddIikucmVtb3ZlKCk7CiAgICAJCSAkKCIjbWVkaWFnby1mcnMtYXNpZGUiKS5yZW1vdmUoKTsKICAgIAkJICQoIiNtZWRpYWdvLXRiLXBiLWxpc3QtYXNpZGUiKS5yZW1vdmUoKTsKICAgIAkJICQoImRpdltjbGFzcz0nZmVuZ2NoYW8td3JhcCddIikuaGlkZSgpOwoKCiAgICAgICAgICAgJCgiLmZlbmdjaGFvLXdyYXAtYm94IikucmVtb3ZlKCk7CiAkKCJkaXZbY2xhc3M9J2ZlbmdjaGFvLXdyYXAnXSIpLnJlbW92ZSgpOwogJCgiZGl2W2lkKj0nbWVkaWFnby10Yi0nXSIpLnJlbW92ZSgpOwokKCJkaXZbY2xhc3MqPSdsX3Bvc3QnXVtkYXRhLWZpZWxkPSd7fSddIikucmVtb3ZlKCk7CiQoImRpdlthZC1kb20taW1nXSIpLnJlbW92ZSgpOwoKCgoKICAgIH0KICAgIGlmKHprZHVybGRvbWFpbi5pbmRleE9mKCd0aWViYS5iYWlkdS5jb20vcCcpID4gMCl7CiAgICAgICAgLy9zZXRJbnRlcnZhbChmdW5jdGlvbigpeyB9LCAxMDAwKTsKICAgICAgICAvLyQoInNwYW46Y29udGFpbnMoJ+W5v+WRiicpIikucGFyZW50KCkucGFyZW50KCkucGFyZW50KCkucGFyZW50KCkucGFyZW50KCkucGFyZW50KCkucmVtb3ZlKCk7CiAgICAgICAgJCgiI2JyYW5kaW5nX2FkcyIpLmhpZGUoKTsKICAgICAgICAgJCgiZGl2W2lkPSdhc2lkZS1hZC13cmFwcGVyJ10iKS5oaWRlKCk7CiAgICAgICQoIiNtZWRpYWdvLWZycy1hc2lkZSIpLnJlbW92ZSgpOwogICAgICAgJCgiZGl2W2lkPSdhc2lkZS1hZC13cmFwcGVyJ10iKS5oaWRlKCk7CiAgICAgICQoImRpdltjbGFzcz0nZmVuZ2NoYW8td3JhcC1mZWVkJ10iKS5oaWRlKCk7CiAgICAJJCgiI21lZGlhZ28tdGItcGItbGlzdC1hc2lkZSIpLnJlbW92ZSgpOwogICAgCSQoImRpdltjbGFzcz0nZmVuZ2NoYW8td3JhcCddIikuaGlkZSgpOwoKJCgiZGl2W2lkKj0nbWVkaWFnby10Yi0nXSIpLnJlbW92ZSgpOwokKCJkaXZbY2xhc3MqPSdsX3Bvc3QnXVtkYXRhLWZpZWxkPSd7fSddIikucmVtb3ZlKCk7CiQoImRpdlthZC1kb20taW1nXSIpLnJlbW92ZSgpOwogICAgfQoKCiAgICBpZih6a2R1cmxkb21haW4uaW5kZXhPZignbWFwLmJhaWR1LmNvbS9zZWFyY2gnKSA+IDApewoKCiAgICAgICAgICAgICQoIi5kYW1vY2Utc2VhcmNoLWl0ZW0uZGFtb2NlLXNlYXJjaC1pdGVtLW5vcG9pIikucmVtb3ZlKCk7CgogICAgfQoKCiAgICBpZih6a2R1cmxkb21haW4uaW5kZXhPZignamluZ3lhbi5iYWlkdS5jb20vc2VhcmNoJykgPiAwKXsKICAgICAgICAkKCIuZWNfYWQiKS5wYXJlbnQoKS5yZW1vdmUoKTsKICAgIH0KICAgIGlmKHprZHVybGRvbWFpbi5pbmRleE9mKCdqaW5neWFuLmJhaWR1LmNvbS9hcnRpY2xlJykgPiAwKXsKICAgICAgICAkKCIjZnJlc2gtc2hhcmUtZXhwLWUiKS5yZW1vdmUoKTsKICAgICAgICAkKCIud2d0LWluY29tZS1tb25leSIpLnJlbW92ZSgpOwogICAgICAgICQoIi5hc2lkZS1wcm8tY29udGFpbmVyIikucmVtb3ZlKCk7CiAgICAgICAgJCgiI2JvdHRvbS1hZHMtY29udGFpbmVyIikucmVtb3ZlKCk7CiAgICAgICAgJCgiLm1hZ3ppbmUtbGlzdCIpLnJlbW92ZSgpOwogICAgICAgICAgICAgICAgJCgiZGl2W2NsYXNzPSdhc2lkZS13cmFwIHdndC1jbXMtYmFubmVyJ10iKS5oaWRlKCk7CiAgICAgICAkKCJkaXZbY2xhc3M9J3JpZ2h0LWZpeGVkLXJlbGF0ZWQtd3JhcCddIikuaGlkZSgpOwogICAgICAgICQoImRpdltjbGFzcz0nYWQtY2FyZCddIikuaGlkZSgpOwogICAgICAgJCgiYXNpZGVbY2xhc3M9J3JlbC1leHAtZmVlZC1hZC1pdGVtJ10iKS5oaWRlKCk7CiAgICB9CgoKCiAgICBpZih6a2R1cmxkb21haW4uaW5kZXhPZigndmlkZW8uYmFpZHUuY29tJykgPiAwIHx8IHprZHVybGRvbWFpbi5pbmRleE9mKCd2LmJhaWR1LmNvbScpID4gMCl7CgogICAgICAgIAkgJCgiI1BDYWxscGFnZXNpZGViYXIxIikucmVtb3ZlKCk7CiAgICAgICAgICAgICQoIiNQQ2FsbHBhZ2VzaWRlYmFyMiIpLnJlbW92ZSgpOwogICAgICAgICAgICAkKCIuYmR2aWRlby1hZHZlci1jYXJvdXNlbCIpLnBhcmVudCgpLnJlbW92ZSgpOwogICAgICAgICAgICAkKCJkaXZbaWQqPSdhZG9uZSddIikucmVtb3ZlKCk7CiAgICAgICAgICAgICQoImRpdltpZCo9J2FkdHdvJ10iKS5yZW1vdmUoKTsKICAgICAgICAgICAgJCgiI3BhbGxjb21tb25jb2x1bW5hZCIpLnJlbW92ZSgpOwogICAgICAgICAgICAkKCIjaW5kZXhfcmlnaHRfdG9wIikucmVtb3ZlKCk7CiAgICAgICAgICAgICQoIiNxemZjYWRpZCIpLnJlbW92ZSgpOwogICAgICAgICAgICAkKCIjcGNzaG9ydGNoYW5uZWxUb3BSaWdodCIpLnJlbW92ZSgpOwogICAgICAgICAgICAkKCIjX19sYXduSW1hZ2VDb250YWluZXIiKS5wYXJlbnQoKS5wYXJlbnQoKS5yZW1vdmUoKTsKCiAgICAgICAgICAgICQoIiNkZXRhaWxfYWRtX3JpZ2h0IikucmVtb3ZlKCk7CiAgICAgICAgICAgICQoIi5jdHQtYWR2ZXIxLWJhbm5lciIpLnJlbW92ZSgpOwogICAgICAgICAgICAkKCJkaXZbaWQqPSdQQ0RldGFpbFBhZ2VUb3BSaWdodExpc3QnXSIpLnJlbW92ZSgpOwoKCgoKICAgICAgICAJICAgJCgiZGl2W2lkKj0nY2hhbm5lbEJhbm5lckFkdmVyJ10iKS5yZW1vdmUoKTsKICAgICAgICAgICAgJCgiZGl2W2lkKj0nY2hhbm5lbENvbHVtbiddIikucGFyZW50KCkucmVtb3ZlKCk7CiAgICAgICAgICAgICQoImRpdltpZCo9J0NoYW5uZWxDb2x1bW4nXSIpLnBhcmVudCgpLnJlbW92ZSgpOwogICAgICAgICAgICAkKCJkaXZbaWQqPSdwYyddIikucmVtb3ZlKCk7CiAgICAgICAgICAgICQoImRpdltpZCo9J1BDJ10iKS5yZW1vdmUoKTsKICAgICAgICAgICAgJCgiZGl2W2lkKj0nYWR2LWNhcm91c2VsLWl0ZW0nXSIpLnBhcmVudCgpLnJlbW92ZSgpOwogICAgICAgICAgICAkKCJbaWQqPSdGZWVkQWRTeXMnXSIpLnJlbW92ZSgpOwogICAgICAgICAgICAkKCJkaXZbaWQqPSdUYWJBZCddIikucmVtb3ZlKCk7CiAgICAgICAgICAgICQoIi5zZWN0aW9uLWFkIikucmVtb3ZlKCk7CiAgICAgICAgICAgICQoIi5mdWxsLWNvbGx1bm0tYWQiKS5yZW1vdmUoKTsKCiAgICB9CiAgICBpZih6a2R1cmxkb21haW4uaW5kZXhPZigndmlkZW8uYmFpZHUuY29tL3YnKSA+IDAgfHwgemtkdXJsZG9tYWluLmluZGV4T2YoJ3YuYmFpZHUuY29tL3YnKSA+IDApewoKICAgICAgICAkKCIudG9wLWFkLWNvbnQiKS5yZW1vdmUoKTsKCgogICAgICAgICAgICAkKCJkaXZbaWQqPSdzZWFyY2hNb3JlTG9uZyddIikucmVtb3ZlKCk7CiAgICAgICAgICAgICQoIiNzZWFyY2hQYWdlZmVlZEJhbm5lciIpLnJlbW92ZSgpOwogICAgICAgICAgICAkKCIuc2lkZS1jb250ZW50IikucmVtb3ZlKCk7CiAgICAgICAgICAgICQoIiNwc0JvdHRvbUNvbHVtbiIpLnBhcmVudCgpLnJlbW92ZSgpOwoKCgogICAgICAgICAgICAkKCIjc2VhcmNoUmVzdWx0QWRPbmUiKS5yZW1vdmUoKTsKICAgICAgICAgICAgJCgiI3NlYXJjaEhvdFNob3J0U2V2ZW4iKS5yZW1vdmUoKTsKICAgICAgICAgICAgJCgiI3NlYXJjaEhvdFNob3J0U2V2ZW5Ud28iKS5yZW1vdmUoKTsKCiAgICB9CiAgICBpZih6a2R1cmxkb21haW4uaW5kZXhPZignd3d3LmJhaWR1LmNvbS9zZi92c2VhcmNoJykgPiAwKXsKCiAgICAgICAgJCgiI3NfdGFiIikubmV4dCgpLm5leHQoKS5lYWNoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICB2YXIgaWQgPSBTdHJpbmcoJCh0aGlzKS5hdHRyKCJpZCIpKTsKICAgICAgICAgICAgaWYgKGlkID09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICAgICAgICAkKHRoaXMpLnJlbW92ZSgpOwogICAgICAgICAgICB9CiAgICAgICAgfSkKICAgIH0KICAgICB9CiB9CiAgfQogZnVuY3Rpb24gZGVsemhpaHUoKSB7CiAJIGlmIChsb2NhdGlvbi5ocmVmLmluZGV4T2YoJ2xpbmsuemhpaHUuY29tLz90YXJnZXQ9Jyk+PSAwICkgewoKIGlmICgkKCdwW2NsYXNzPSJsaW5rIl0nKS5sZW5ndGg+MCAgKXsKICAgd2luZG93LmxvY2F0aW9uLmhyZWY9JCgicFtjbGFzcz0nbGluayddIikudGV4dCgpOwogIH0KCn0KIGlmKHprZHVybGRvbWFpbi5pbmRleE9mKCd6aGlodS5jb20nKSA+IDApewogICBpZiAoR01fZ2V0VmFsdWUoJ2FsbGNvbmZpZycpLmJhaWR1LmtnemhpaHVlZD09dHJ1ZSl7CiAgIAkgICAkKCJkaXZbY2xhc3M9J1BjLWNhcmQgQ2FyZCddIikucmVtb3ZlKCk7CiAgIAkgICAgaWYoemtkdXJsZG9tYWluLmluZGV4T2YoJ3poaWh1LmNvbS9zaWduaW4/JykgPiAwKXsKICAgCSAgICAJd2luZG93LmxvY2F0aW9uLmhyZWY9J2h0dHBzOi8vd3d3LnpoaWh1LmNvbS9rbm93bGVkZ2UtcGxhbi9ob3QtcXVlc3Rpb24vaG90LzAvZGF5JzsKICAgCSAgICAgICAgfQoKICAgCSAgICAgIAkgICBpZiAoaXNNb2JpbGUoKSl7CiAgICAgICAgJCgiYVtjbGFzcz0nTUJhbm5lckFkJ10iKS5yZW1vdmUoKTsKICAgICAgICAkKCJhW2NsYXNzPSdNSG90RmVlZEFkJ10iKS5yZW1vdmUoKTsKICAgICAgICAkKCJkaXZbY2xhc3M9J0NhcmQgUmVsYXRlZFJlYWRpbmdzJ10iKS5yZW1vdmUoKTsKICAgIH0KCSAgIGlmICggJCgnLkJ1dHRvbi5CdXR0b24tLXByaW1hcnkuQnV0dG9uLS1ibHVlJykubGVuZ3RoPjEgICl7CiAgICQoJy5CdXR0b24uQnV0dG9uLS1wcmltYXJ5LkJ1dHRvbi0tYmx1ZScpLmVhY2goZnVuY3Rpb24oayx2KXsKICBpZiAoJCh0aGlzKS50ZXh0KCkuaW5kZXhPZign56uL5Y2z55m75b2VL+azqOWGjCcpID09MCl7CiAJJCh0aGlzKS5wYXJlbnQoKS5oaWRlKCk7CiAJCSAgICB9Cn0pCiAgIH0KIAkJICAgaWYgKCAkKCIuQnV0dG9uLk1vZGFsLWNsb3NlQnV0dG9uLkJ1dHRvbi0tcGxhaW4iKS5sZW5ndGg+MCAmJiAkKCIuc2lnbkZsb3dNb2RhbC1jb250YWluZXIiKS5sZW5ndGg+MCAmJiAgemhpaHVkbD09MCl7CiAJCSAgIAkgICB6aGlodWRsPTE7CiAJCSAgIAkgICAkKCIuQnV0dG9uLk1vZGFsLWNsb3NlQnV0dG9uLkJ1dHRvbi0tcGxhaW4iKS5jbGljaygpOwogIAkgICB9CgoKJCgiLlBjLXdvcmQiKS5oaWRlKCk7CiQoIi5QYy1mZWVkQWQiKS5yZW1vdmUoKTsKJCgiLkJhbm5lci1hZHNlbnNlIikucmVtb3ZlKCk7CgokKCJpbWciKS5lYWNoKGZ1bmN0aW9uKCl7CgogICAgICBpZiAoJCh0aGlzKS5hdHRyKCJhbHQiKT09IuW5v+WRiiIpewoKICAkKHRoaXMpLnJlbW92ZSgpOwoKICB9Cn0pOwogICAgfQogfQp9CgoKIGZ1bmN0aW9uIGRlbGJpbGkoKSB7CmlmKHprZHVybGRvbWFpbi5pbmRleE9mKCdiaWxpYmlsaS5jb20nKSA+IDApewoJICAgaWYgKEdNX2dldFZhbHVlKCdhbGxjb25maWcnKS5iYWlkdS5rZ2JpbGllZD09dHJ1ZSl7CiQoImRpdltjbGFzcz0nZmxpcC12aWV3IHAtcmVsYXRpdmUgb3Zlci1oaWRkZW4gdy0xMDAnXSIpLnJlbW92ZSgpOwppZiAoYmlsaTIyZ2lybD09dHJ1ZSAgJiYgJCgiYnV0dG9uW2NsYXNzPSdtaW5pbWl6ZS1idG4gcG9pbnRlciBiZy1jb250YWluJ10iKS5sZW5ndGg+MCl7CiAJJCgiZGl2W2NsYXNzPSdoYXJ1bmEtY3RuciBub25lLXNlbGVjdCddIikuaGlkZSgpOwoKCWJpbGkyMmdpcmw9ZmFsc2U7CgkJICAgfQogJCgiLmJpbGktdmlkZW8tY2FyZCIpLmVhY2goZnVuY3Rpb24oKSB7CiAJIGlmICgkKHRoaXMpLmZpbmQoImEiKSl7CiAJICBpZiAoJCh0aGlzKS5maW5kKCJhIikuYXR0cignaHJlZicpKXsKIAkgIGlmICgkKHRoaXMpLmZpbmQoImEiKS5hdHRyKCdocmVmJykuaW5kZXhPZignY20uYmlsaWJpbGkuY29tL2NtL2FwaS9mZWVzJykgPiAwKXsKIAkgICQodGhpcykuaGlkZSgpOwogCSB9CiAJIH0KIAkgfQoJICAgCSAgICAgICAgICAgCX0pCiAgICAgICAgJCgiYVt0YXJnZXQ9J19ibGFuayddIikuZWFjaChmdW5jdGlvbigpIHsKICAgICAgICAgICBpZiAoJCh0aGlzKS5hdHRyKCdocmVmJykpIHsKICAgICAgICAgICAJICAgIGlmKCQodGhpcykuYXR0cignaHJlZicpLmluZGV4T2YoJ2NtLmJpbGliaWxpLmNvbS9jbS9hcGkvZmVlcycpID4gMCl7CiAgICAgICAgICAgCSAgICAJICQodGhpcykuaGlkZSgpOwoKICAgICAgICAgICAJICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICB9KQogICAgfQogIH0KfQoKIGZ1bmN0aW9uIGRlbGRvdWJhbigpIHsKIGlmKHprZHVybGRvbWFpbi5pbmRleE9mKCdkb3ViYW4uY29tJykgPiAwKXsKLy8gJCgnZGl2W2FkLXN0YXR1c10nKS5hdHRyKCdhZC1zdGF0dXMnKQogIGlmIChHTV9nZXRWYWx1ZSgnYWxsY29uZmlnJykuYmFpZHUua2dkb3ViYW5lZD09dHJ1ZSl7CiAgICAgICAgJCgnZGl2W2FkLXN0YXR1c10nKS5lYWNoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICBpZiAoJCh0aGlzKS5hdHRyKCdhZC1zdGF0dXMnKSA9PSAiYXBwZW5kZWQiKSB7CiAgICAgICAgICAgICAgICAkKHRoaXMpLnJlbW92ZSgpOwogICAgICAgICAgICB9CiAgICAgICAgfSkKICAgIH0KIH0KfQogLy90ZXN0CgoKICAgIGZ1bmN0aW9uIGNsb3NleXRBZHMoKXsKICAgICAgICB2YXIgYWRjbG9zZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy55dHAtYWQtc2tpcC1idXR0b24nKXx8ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnl0cC1hZC1vdmVybGF5LWNsb3NlLWJ1dHRvbicpOwogICAgICAgIHZhciBhZHlicmVtb3ZlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3BsYXllci1hZHMnKXx8ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignZGl2I3NwYXJrbGVzLWNvbnRhaW5lcicpfHxkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCd5dGQtY29tcGFjdC1wcm9tb3RlZC1pdGVtLXJlbmRlcmVyJyl8fGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ3l0ZC12aWRlby1tYXN0aGVhZC1hZC12My1yZW5kZXJlcicpOwogICAgICAgICAgaWYgKEdNX2dldFZhbHVlKCdhbGxjb25maWcnKS5iYWlkdS5rZ3lvdWVkPT10cnVlKXsKICAgICAgICBpZihhZHlicmVtb3ZlKXsKICAgICAgICAgICAgYWR5YnJlbW92ZS5yZW1vdmUoKTsKICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmKGFkY2xvc2UpewogICAgICAgICAgICBhZGNsb3NlLmNsaWNrKCk7CiAgICAgICAgfQogICAgfQogICAgICAgIGZ1bmN0aW9uIGdldHl0dmVsZSgpewogICAgaWYoJCgnZGl2I2luZm8tY29udGVudHMnKS5sZW5ndGg+MCl7CiAgICAgICAvLyBhZGRidG4oKTsKICAgIH1lbHNlewogICAgc2V0VGltZW91dChnZXR5dHZlbGUsNTAwKTsKICAgIH0KICAgIH0KICAgICAgZnVuY3Rpb24gaW55Yml0KCl7CiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcigneXRkLXBvcHVwLWNvbnRhaW5lcicpLnN0eWxlLmRpc3BsYXk9Jyc7CiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcigneXRkLWFwcCcpLnN0eWxlLnpJbmRleD0nJzsKICAgIH0KICAgICAgICBmdW5jdGlvbiByZXl0YigpewogICAgICAgIGNsb3NleXRBZHMoKTsKCiAgICAgICAgaWYobG9jYXRpb24uaHJlZiE9PXprZHVybGRvbWFpbikKICAgICAgICB7CgogICAgICAgIGlueWJpdCgpOwogICAgICAgIHprZHVybGRvbWFpbj1sb2NhdGlvbi5ocmVmOwogICAgICAgIGdldHl0dmVsZSgpOwogICAgICAgIH0KCiAgICB9CiAgICBpZih6a2R1cmxkb21haW4uaW5kZXhPZigieW91dHViZS5jb20iKSA+PSAwICkgewoJZ29pbmdudW1iPTk5OTk5OTk5MjsKICAgICAgc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXsKICAgICByZXl0YigpOwogICAgIHJleWRvd24oKTsKICAgICAgIH0sMTUwMCk7CiAgICB9CiAgICAgIHNldEludGVydmFsKGZ1bmN0aW9uKCl7CiAgICAgZGVsdHdpdHRlcigpCiAgICAgICB9LDE1MDApOwoKCiAgICAgZnVuY3Rpb24gZGVsdHdpdHRlcigpIHsKICAgIGlmKHprZHVybGRvbWFpbi5pbmRleE9mKCJ0d2l0dGVyLmNvbSIpID49IDAgKSB7CgogJCgiYXJ0aWNsZSIpLmVhY2goZnVuY3Rpb24oaW5kZXgsZWxlbWVudCkgewogIGlmICgkKGVsZW1lbnQpLmF0dHIoImQtdHdpdHRlciIpICl7CgogICAgICAgICAgIH1lbHNlewogICBsZXQgeHpnZ3R0ID0kKGVsZW1lbnQpLmZpbmQoInNwYW4iKTsKIGlmICh4emdndHQpewogCSB4emdndHQuZWFjaChmdW5jdGlvbihpbmRleCxlbG50KSB7CiAJIGlmICAoICQoZWxudCkudGV4dCgpPT0i5o6o6I2QIil7CiAJIAkgIGlmIChHTV9nZXRWYWx1ZSgnYWxsY29uZmlnJykuYmFpZHUua2d0d2llZD09dHJ1ZSl7CiAJIAkgICQoZWxlbWVudCkuaGlkZSgpOwogCSAJICAgfQogCSB9CiAJIH0pCiB9CiAgIH0KCiAgICAgbGV0IHh6Z2dhdXJsID0kKGVsZW1lbnQpLmZpbmQoImEiKTsKICAgICAgbGV0IHh6Z2dhdmlkZW8gPSQoZWxlbWVudCkuZmluZCgidmlkZW8iKTsKICAgICAgIGxldCB4emdnYXRpbWUgPSQoZWxlbWVudCkuZmluZCgidGltZSIpOwoKIGlmICh4emdnYXVybCAmJiB4emdnYXZpZGVvKXsKIAkgIGlmICgkKGVsZW1lbnQpLmF0dHIoImQtdnVybCIpICl7CgogICAgICAgICAgIH1lbHNlewogCWlmICh4emdnYXRpbWUubGVuZ3RoPDIpewogCQkgeHpnZ2F2aWRlby5lYWNoKGZ1bmN0aW9uKGluZGV4LHZ1cmwpIHsKIAkgaWYgICggICQodnVybCkuYXR0cigncHJlbG9hZCcpKXsKIAkgCSAgIGlmICgkKHZ1cmwpLmF0dHIoImQtdnVybCIpICl7CgogICAgICAgICAgIH1lbHNlewogCSB4emdnYXVybC5lYWNoKGZ1bmN0aW9uKGluZGV4LGF1cmwpIHsKIAkgaWYgICggJChhdXJsKS5hdHRyKCdocmVmJykpewogCSAJICAgaWYgKCQodnVybCkuYXR0cigiZC12dXJsIikgKXsKCiAgICAgICAgICAgfWVsc2V7CiAgIGlmIChHTV9nZXRWYWx1ZSgnYWxsY29uZmlnJykuYmFpZHUua2d0d2ltdj09dHJ1ZSl7CiAgaWYgKCQoYXVybCkuYXR0cignaHJlZicpLmluZGV4T2YoInN0YXR1cyIpID49IDAgKSB7CiAgCSAgbGV0IHZpZGVvdXJsID0gJChhdXJsKS5hdHRyKCdocmVmJyk7CnZpZGVvdXJsID0gdmlkZW91cmwubWF0Y2goL3N0YXR1c1wvKFxTKikvKVsxXTsKdmlkZW91cmw9Imh0dHBzOi8vdHdpdHRlci5jb20vaS9zdGF0dXMvIit2aWRlb3VybDsKCiAJICAgCSAgICAkKHZ1cmwpLmF0dHIoImQtdnVybCIsIjEiKTsKIAkgICAgJCh2dXJsKS5hdHRyKCJkLXZpZGVvIix2aWRlb3VybCk7CiAJICAgICQoZWxlbWVudCkuYXR0cigiZC12dXJsIiwiMSIpOwogCSAgICAkKGVsZW1lbnQpLmZpbmQoImRpdltyb2xlPSdncm91cCddW2lkXj0naWQnXSIpLmVhY2goZnVuY3Rpb24oaW5kZXgsZG93bmJ1dCkgewogCSAgICAJLy8kKGRvd25idXQpLnJlbW92ZSgpOwogIAkgICAgCSAgICBpZiAoJCh0aGlzKS5hdHRyKCdkb3duZG93bicpPT11bmRlZmluZWQpewogIAkgICAgCSAgICAJJCh0aGlzKS5hdHRyKCdkb3duZG93bicsJzEnKTsKICAJICAgIAkgICAgCSQodGhpcykuYXR0cignc3R5bGUnLCcgYm9yZGVyLXRvcC13aWR0aDowcHggIWltcG9ydGFudDsnKTsKIAkgICAgCSAkKGRvd25idXQpLmJlZm9yZSgnPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDogMTBweDsiIGRvd25kb3duPSIxIj48YSBzdHlsZT0iIHRleHQtYWxpZ246Y2VudGVyO2JvcmRlcjoycHggc29saWQgI0RDRENEQztwYWRkaW5nOjNweCAxMHB4OyBiYWNrZ3JvdW5kOiNkZGRkZGQ7Ym9yZGVyLXJhZGl1czoxMHB4Oy1tb3otYm9yZGVyLXJhZGl1czoxMHB4OyIgaWQ9ImdvZ294dmlkZW9hIiAgZGF0YS11cmw9IicrdmlkZW91cmwrJyIgPuS4i+i9veinhumikee6v+i3r+S4gDwvYT48YSBzdHlsZT0iIHRleHQtYWxpZ246Y2VudGVyO2JvcmRlcjoycHggc29saWQgI0RDRENEQztwYWRkaW5nOjNweCAxMHB4OyBiYWNrZ3JvdW5kOiNkZGRkZGQ7Ym9yZGVyLXJhZGl1czoxMHB4Oy1tb3otYm9yZGVyLXJhZGl1czoxMHB4O21hcmdpbi1sZWZ0OiAxMHB4OyIgaWQ9ImdvZ294dmlkZW9kIiBkYXRhLXVybD0iJyt2aWRlb3VybCsnIiA+5LiL6L296KeG6aKR57q/6Lev5LqMPC9hPjxkaXY+JyAgKTsKfQoKCgkgCSAgICAJfSkKIH0KIAkgICAJICAgIH0KIAkgICAgfQogCSB9CiAJIH0pCiAJIAkgfQogCSB9CiAJICAvLyAgIGNvbnNvbGUubG9nKCcnKQogCSAJIH0pCiAJIH0KIAkgIH0KIH0KICQoZWxlbWVudCkuYXR0cigiZC10d2l0dGVyIiwiMSIpOwoKIH0pCgoKIH0KICAgIH0KCgoKZnVuY3Rpb24gcmV5ZG93bigpewogICAgCSAgaWYobG9jYXRpb24uaHJlZi5pbmRleE9mKCJ5b3V0dWJlLmNvbS93YXRjaD8iKSA+PSAwICkgewogICBpZiAoR01fZ2V0VmFsdWUoJ2FsbGNvbmZpZycpLmJhaWR1LmtneW91bXY9PXRydWUpewogIGlmICgkKCJhW2NsYXNzPSdnb2dveHZpZGVvJ10iKS5hdHRyKCdkYXRhLXVybCcpPT1sb2NhdGlvbi5ocmVmKXsKICAJICByZXR1cm47Cn0gIGVsc2UgewoJJCgiLmdvZ294dmlkZW8iKS5yZW1vdmUoKTsKIHZhciBiYXNlYnRuID0gJzxkaXYgc3R5bGU9Im1hcmdpbi10b3A6OHB4OyIgZG93bmRvd249IjEiID48YSAgICBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXI7Ym9yZGVyOjJweCBzb2xpZCAjRENEQ0RDO3BhZGRpbmc6M3B4IDIwcHg7IGJhY2tncm91bmQ6I2RkZGRkZDtib3JkZXItcmFkaXVzOjEwcHg7LW1vei1ib3JkZXItcmFkaXVzOjEwcHg7d2lkdGg6IDgwcHg7IiBpZD0iZ29nb3h2aWRlb2QiICAgY2xhc3M9ImdvZ294dmlkZW8iIGRhdGEtdXJsPSInK2xvY2F0aW9uLmhyZWYrJyIgZGF0YS1kdXJsPSJodHRwczovL3poLnNhdmVmcm9tLm5ldCIgPuS4i+i9veinhumikee6v+i3r+S4gDwvYT48YSAgICBzdHlsZT0ibWFyZ2luLWxlZnQ6IDEwcHg7dGV4dC1hbGlnbjpjZW50ZXI7Ym9yZGVyOjJweCBzb2xpZCAjRENEQ0RDO3BhZGRpbmc6M3B4IDIwcHg7IGJhY2tncm91bmQ6I2RkZGRkZDtib3JkZXItcmFkaXVzOjEwcHg7LW1vei1ib3JkZXItcmFkaXVzOjEwcHg7d2lkdGg6IDgwcHg7IiBpZD0iZ29nb3h2aWRlb2IiICAgY2xhc3M9ImdvZ294dmlkZW8iIGRhdGEtdXJsPSInK2xvY2F0aW9uLmhyZWYrJyIgZGF0YS1kdXJsPSJodHRwczovLzljb252ZXJ0LmNvbSIgPumrmOa4hee6v+i3r+S6jDwvYT48YSAgICBzdHlsZT0ibWFyZ2luLWxlZnQ6IDEwcHg7dGV4dC1hbGlnbjpjZW50ZXI7Ym9yZGVyOjJweCBzb2xpZCAjRENEQ0RDO3BhZGRpbmc6M3B4IDIwcHg7IGJhY2tncm91bmQ6I2RkZGRkZDtib3JkZXItcmFkaXVzOjEwcHg7LW1vei1ib3JkZXItcmFkaXVzOjEwcHg7d2lkdGg6IDgwcHg7IiBpZD0iZ29nb3h2aWRlb2MiIGNsYXNzPSJnb2dveHZpZGVvIiAgZGF0YS11cmw9IicrbG9jYXRpb24uaHJlZisnIiAgIGRhdGEtZHVybD0iaHR0cHM6Ly93d3cueTJtYXRlLmNvbS9kb3dubG9hZC15b3V0dWJlIiA+6auY5riF57q/6Lev5LiJPC9hPjwvZGl2Pic7CgogICAgIGlmKCQoImRpdltkb3duZG93bj0nMSddIikubGVuZ3RoPT0wKXsKICAkKCdkaXYjaW5mby1jb250ZW50cycpLmFmdGVyKGJhc2VidG4pOwogICAJIGxldCBwbGF5TGluZVRkID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmdvZ294dmlkZW8nKTsKCXBsYXlMaW5lVGQuZm9yRWFjaChmdW5jdGlvbihpdGVtKXsKCWl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLGZ1bmN0aW9uKCl7CiBjb25zb2xlLmxvZygnY3VzdG9tIGNsaWNrIGV2ZW50IHRyaWdnZXJlZCcpOwogIEdNX3NldFZhbHVlKCdnb2dveHZpZGVvZG93bicsICQodGhpcykuYXR0cignZGF0YS11cmwnKSk7CiAgICAJd2luZG93Lm9wZW4oJCh0aGlzKS5hdHRyKCdkYXRhLWR1cmwnKSk7Cgl9KQoKCX0pCn0KCn0KCiB9CgogICAgfQogICAgfQogICAgd2luZG93Lm9ubG9hZCA9IGZ1bmN0aW9uKCkgewogICAgICAgJCgnYm9keScpLm9uKCdjbGljaycsJy5nb2dveHZpZGVvJyxmdW5jdGlvbigpewogY29uc29sZS5sb2coIjExIik7CiAgICB9KQogICAgCX0KICAgICAgaWYobG9jYXRpb24uaHJlZi5pbmRleE9mKCI5Y29udmVydC5jb20iKSA+PSAwICkgewogIAkgIGlmIChHTV9nZXRWYWx1ZSgnZ29nb3h2aWRlb2Rvd24nKSl7CiAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7CiAgICAgICAkKCJpbnB1dFtuYW1lPSdxdWVyeSddIikuYXR0cigndmFsdWUnLEdNX2dldFZhbHVlKCdnb2dveHZpZGVvZG93bicpKTsKICBHTV9kZWxldGVWYWx1ZSgnZ29nb3h2aWRlb2Rvd24nKTsKICAgJCgiLmJ0bi1yZWQiKS5jbGljaygpOwogICAgICAgIH0sIDEwMDApOwoKICAJICB9CgogICAgfQoKICAgIGlmKGxvY2F0aW9uLmhyZWYuaW5kZXhPZigieTJtYXRlLmNvbS8iKSA+PSAwICYmIGxvY2F0aW9uLmhyZWYuaW5kZXhPZigiL2Rvd25sb2FkLXlvdXR1YmUiKSA+PSAwICkgewogIAkgIGlmIChHTV9nZXRWYWx1ZSgnZ29nb3h2aWRlb2Rvd24nKSl7CiAgCSAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXsKICAkKCJpbnB1dFtuYW1lPSdxdWVyeSddIikuYXR0cigndmFsdWUnLEdNX2dldFZhbHVlKCdnb2dveHZpZGVvZG93bicpKTsKICBHTV9kZWxldGVWYWx1ZSgnZ29nb3h2aWRlb2Rvd24nKTsKICAgJCgiYnV0dG9uW2lkPSdidG4tc3VibWl0J10iKS5jbGljaygpOwogICAgICAgIH0sIDEwMDApOwoKICAJICB9CgogICAgfQoKICBpZihsb2NhdGlvbi5ocmVmLmluZGV4T2YoInNhdmVmcm9tLm5ldCIpID49IDAgKSB7CiAgCSAgaWYgKEdNX2dldFZhbHVlKCdnb2dveHZpZGVvZG93bicpKXsKICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ICAkKCJpbnB1dFtuYW1lPSdzZl91cmwnXSIpLmF0dHIoJ3ZhbHVlJyxHTV9nZXRWYWx1ZSgnZ29nb3h2aWRlb2Rvd24nKSk7CiAgR01fZGVsZXRlVmFsdWUoJ2dvZ294dmlkZW9kb3duJyk7CgogICAgICQoImJ1dHRvbltjbGFzcz0nc3VibWl0J10iKS5jbGljaygpOwogICAgICAgIH0sIDEwMDApOwoKICAJICB9CgogICAgfQogICAgICBpZihsb2NhdGlvbi5ocmVmLmluZGV4T2YoImdldGZ2aWQuY29tL3poL3R3aXR0ZXIiKSA+PSAwICkgewokKCIjcy1ob3RzZWFyY2gtd3JhcHBlcndlYm9uZSIpLnJlbW92ZSgpOwokKCIjcy1ob3RzZWFyY2gtd3JhcHBlcndlYnRvbmUiKS5yZW1vdmUoKTsKJCgiI3MtaG90c2VhcmNoLXdyYXBwZXJ3ZWJjb25lIikucmVtb3ZlKCk7CiQoIiNzLWhvdHNlYXJjaC13cmFwcGVyd2ViYm9uZSIpLnJlbW92ZSgpOwogIAkgIGlmIChHTV9nZXRWYWx1ZSgnZ29nb3h2aWRlb2Rvd24nKSl7CiAgICAgc2V0VGltZW91dChmdW5jdGlvbigpeyAgJCgiaW5wdXRbbmFtZT0ndXJsJ10iKS5hdHRyKCd2YWx1ZScsR01fZ2V0VmFsdWUoJ2dvZ294dmlkZW9kb3duJykpOwogIEdNX2RlbGV0ZVZhbHVlKCdnb2dveHZpZGVvZG93bicpOwogICAgICQoImJ1dHRvbltpZD0nYnRuX3N1Ym1pdCddIikuY2xpY2soKTsKICAgICAgICB9LCAxMDAwKTsKCiAgCSAgfQoKICAgIH0KLy8KCiAgICB9KSgp
Add Comment
Please, Sign In to add comment