xiaomianao666

插件名:global_VIP专用

Aug 27th, 2023
2,468
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:网页插件¥js_url¥global_VIP专用@base64://Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgICAgICAgIOWFqOe9kVZJ6KeG6aKR5YWN6LS556C06Kej44CQ5LiT5rOo5LiA5Liq6ISa5pys5Y+q5YGa5LiA5Lu25LqL5Lu244CRCi8vIEBuYW1lc3BhY2UgICAgICAgICBodHRwOi8vdGFtcGVybW9ua2V5Lm5ldC8KLy8gQHZlcnNpb24gICAgICAgICAgIDEuNi41Ci8vIEBkZXNjcmlwdGlvbiAgICAgICDlhajnvZFWSeinhumikeWFjei0ueegtOino+OAkOS4k+azqOS4gOS4quiEmuacrOWPquWBmuS4gOS7tuS6i+S7tuOAkeOAguaUr+aMge+8muiFvuiur+OAgeeIseWlh+iJuuOAgeS8mOmFt+OAgeiKkuaenOOAgXBwdHbjgIHkuZDop4bnrYnlhbblroPnvZHnq5nvvJsKLy8gQGljb24gICAgICAgICAgICAgIGRhdGE6aW1hZ2UvanBlZztiYXNlNjQsLzlqLzRBQVFTa1pKUmdBQkFRRUFrQUNRQUFELy9nQVVVMjltZEhkaGNtVTZJRk51YVhCaGMzUmwvOXNBUXdBREFnSURBZ0lEQXdNREJBTURCQVVJQlFVRUJBVUtCd2NHQ0F3S0RBd0xDZ3NMRFE0U0VBME9FUTRMQ3hBV0VCRVRGQlVWRlF3UEZ4Z1dGQmdTRkJVVS85c0FRd0VEQkFRRkJBVUpCUVVKRkEwTERSUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVLzhBQUVRZ0FHZ0FlQXdFaUFBSVJBUU1SQWYvRUFCOEFBQUVGQVFFQkFRRUJBQUFBQUFBQUFBQUJBZ01FQlFZSENBa0tDLy9FQUxVUUFBSUJBd01DQkFNRkJRUUVBQUFCZlFFQ0F3QUVFUVVTSVRGQkJoTlJZUWNpY1JReWdaR2hDQ05Dc2NFVlV0SHdKRE5pY29JSkNoWVhHQmthSlNZbktDa3FORFUyTnpnNU9rTkVSVVpIU0VsS1UxUlZWbGRZV1ZwalpHVm1aMmhwYW5OMGRYWjNlSGw2ZzRTRmhvZUlpWXFTazVTVmxwZVltWnFpbzZTbHBxZW9xYXF5czdTMXRyZTR1YnJDdzhURnhzZkl5Y3JTMDlUVjF0ZlkyZHJoNHVQazVlYm42T25xOGZMejlQWDI5L2o1K3YvRUFCOEJBQU1CQVFFQkFRRUJBUUVBQUFBQUFBQUJBZ01FQlFZSENBa0tDLy9FQUxVUkFBSUJBZ1FFQXdRSEJRUUVBQUVDZHdBQkFnTVJCQVVoTVFZU1FWRUhZWEVUSWpLQkNCUkNrYUd4d1Frak0xTHdGV0p5MFFvV0pEVGhKZkVYR0JrYUppY29LU28xTmpjNE9UcERSRVZHUjBoSlNsTlVWVlpYV0ZsYVkyUmxabWRvYVdwemRIVjJkM2g1ZW9LRGhJV0doNGlKaXBLVGxKV1dsNWlabXFLanBLV21wNmlwcXJLenRMVzJ0N2k1dXNMRHhNWEd4OGpKeXRMVDFOWFcxOWpaMnVMajVPWG01K2pwNnZMejlQWDI5L2o1K3YvYUFBd0RBUUFDRVFNUkFEOEE4L3N0VGl2WkxoRlYwZUJ0cmh3QitQWHBYYy9CajRiWFh4eTFPYlRkRTFYVHJEVUUzR08zMVB6a015cU1zeXRIRTY0R2Y0aUQ2QTE1VHJVeDBmVXJpVlFjWGNCVVkvdmppdnBiOWhHeit3L0dMVG9jWUs2ZGNidnFRQ2EvUTZlYzQ2ZFd0aDIxelVGTnpkdDN6ZnV2UzhidG5nNXJ3bmt1Q3kzRFpyU2kzREd5b3FpdVo2SlFmMW0vZmxxMmhHK3lNUFRmMmU5WDFuVlBFRmxaYTlvbHgvWVRtTzluRFhLeG80TEIxRzZBTXhVb2NrREI3RTFpK0p2Zy9ybmh6dy9wZXVSU1d1dDZScVArcHU5TU1qZ0hCSURLNkt3T0FlM2JCd2ErZy9oUUVQaVA0MUNWbVNNNm5kYm1SZHhBM3paSUdSbjh4WGtuaVA0MldkcjRDMER3cDRYaHZQSTAvd0RlVFgyb0lzYnl2aHNoVVIyQUdXSjVZOWg3MStjVXVLdUs4WnhWaXNyeTZLcVVxRlNrcEp4U2lxYzZEbktVcDdxWFB5cUtWN3B2M1d0VjhOV3l6TEtHQWhYck54bE5UdFozZk5HZGtrdTNMZS81bmpVMXREY2JmTmlTWGFjcnZVSEI5cTMvQUEvNDM4UitFbzVvOUQxL1ZOR1NZaHBWMCs4a2dEa2RDd1JobjhheGFLL29kMGFiYmJpdGQ5TjdiWFBoL3JOZmxoRG5kbzNzcnV5dnZidGZyYmM2S2Y0aitMTHE0dUo1dkZHc3pUM0NDT2FTVFVKbWFWQm5Dc1MyU0JrOEgxTmM3UlJVVThOUm95bE9sQlJjclhhU1RkdEZmdlpiR1U2dFNwYm5rM2J1ei8vWgovLyBAYXV0aG9yICAgICAgICAgICAgd19feWkKLy8gQG1hdGNoICAgICAgICAgICAgICo6Ly8qLnlvdWt1LmNvbS8qCi8vIEBtYXRjaCAgICAgICAgICAgICAqOi8vKi5pcWl5aS5jb20vKgovLyBAbWF0Y2ggICAgICAgICAgICAgKjovLyouaXEuY29tLyoKLy8gQG1hdGNoICAgICAgICAgICAgICo6Ly8qLmxlLmNvbS8qCi8vIEBtYXRjaCAgICAgICAgICAgICAqOi8vdi5xcS5jb20vKgovLyBAbWF0Y2ggICAgICAgICAgICAgKjovL20udi5xcS5jb20vKgovLyBAbWF0Y2ggICAgICAgICAgICAgKjovLyoudHVkb3UuY29tLyoKLy8gQG1hdGNoICAgICAgICAgICAgICo6Ly8qLm1ndHYuY29tLyoKLy8gQG1hdGNoICAgICAgICAgICAgICo6Ly90di5zb2h1LmNvbS8qCi8vIEBtYXRjaCAgICAgICAgICAgICAqOi8vZmlsbS5zb2h1LmNvbS8qCi8vIEBtYXRjaCAgICAgICAgICAgICAqOi8vKi4xOTA1LmNvbS8qCi8vIEBtYXRjaCAgICAgICAgICAgICAqOi8vKi5iaWxpYmlsaS5jb20vKgovLyBAbWF0Y2ggICAgICAgICAgICAgKjovLyoucHB0di5jb20vKgoKLy8gQHJlcXVpcmUgICAgICAgICAgIGh0dHBzOi8vY2RuLmJvb3RjZG4ubmV0L2FqYXgvbGlicy9qcXVlcnkvMy4yLjEvanF1ZXJ5Lm1pbi5qcwovLyBAY29ubmVjdCAgICAgICAgICAgYXBpLmJpbGliaWxpLmNvbQovLyBAZ3JhbnQgICAgICAgICAgICAgdW5zYWZlV2luZG93Ci8vIEBncmFudCAgICAgICAgICAgICBHTV9hZGRTdHlsZQovLyBAZ3JhbnQgICAgICAgICAgICAgR01fb3BlbkluVGFiCi8vIEBncmFudCAgICAgICAgICAgICBHTV9nZXRWYWx1ZQovLyBAZ3JhbnQgICAgICAgICAgICAgR01fc2V0VmFsdWUKLy8gQGdyYW50ICAgICAgICAgICAgIEdNX3htbGh0dHBSZXF1ZXN0Ci8vIEBncmFudCAgICAgICAgICAgICBHTV9sb2cKLy8gQGNoYXJzZXQJCSAgICAgIFVURi04Ci8vIEBsaWNlbnNlICAgICAgICAgICBHUEwgTGljZW5zZQovLyA9PS9Vc2VyU2NyaXB0PT0KCmNvbnN0IHV0aWwgPSAoZnVuY3Rpb24gKCkgewoKICAgIGZ1bmN0aW9uIGZpbmRUYXJnZXRFbGVtZW50KHRhcmdldENvbnRhaW5lcikgewogICAgICAgIGNvbnN0IGJvZHkgPSB3aW5kb3cuZG9jdW1lbnQ7CiAgICAgICAgbGV0IHRhYkNvbnRhaW5lcjsKICAgICAgICBsZXQgdHJ5VGltZSA9IDA7CiAgICAgICAgY29uc3QgbWF4VHJ5VGltZSA9IDEyMDsKICAgICAgICBsZXQgc3RhcnRUaW1lc3RhbXA7CiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsKICAgICAgICAgICAgZnVuY3Rpb24gdHJ5RmluZEVsZW1lbnQodGltZXN0YW1wKSB7CiAgICAgICAgICAgICAgICBpZiAoIXN0YXJ0VGltZXN0YW1wKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhcnRUaW1lc3RhbXAgPSB0aW1lc3RhbXA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjb25zdCBlbGFwc2VkVGltZSA9IHRpbWVzdGFtcCAtIHN0YXJ0VGltZXN0YW1wOwoKICAgICAgICAgICAgICAgIGlmIChlbGFwc2VkVGltZSA+PSA1MDApIHsKICAgICAgICAgICAgICAgICAgICBHTV9sb2coIuafpeaJvuWFg+e0oO+8miIgKyB0YXJnZXRDb250YWluZXIgKyAi77yM56ysIiArIHRyeVRpbWUgKyAi5qyhIik7CiAgICAgICAgICAgICAgICAgICAgdGFiQ29udGFpbmVyID0gYm9keS5xdWVyeVNlbGVjdG9yKHRhcmdldENvbnRhaW5lcik7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRhYkNvbnRhaW5lcikgewogICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRhYkNvbnRhaW5lcik7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgrK3RyeVRpbWUgPT09IG1heFRyeVRpbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KCk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRUaW1lc3RhbXAgPSB0aW1lc3RhbXA7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCF0YWJDb250YWluZXIgJiYgdHJ5VGltZSA8IG1heFRyeVRpbWUpIHsKICAgICAgICAgICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodHJ5RmluZEVsZW1lbnQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodHJ5RmluZEVsZW1lbnQpOwogICAgICAgIH0pOwogICAgfQoKICAgIGZ1bmN0aW9uIHVybENoYW5nZVJlbG9hZCgpIHsKICAgICAgICBjb25zdCBvbGRIcmVmID0gd2luZG93LmxvY2F0aW9uLmhyZWY7CiAgICAgICAgbGV0IGludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4gewogICAgICAgICAgICBsZXQgbmV3SHJlZiA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmOwogICAgICAgICAgICBpZiAob2xkSHJlZiAhPT0gbmV3SHJlZikgewogICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7CiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9LCA1MDApOwogICAgfQoKICAgIGZ1bmN0aW9uIHJlb212ZVZpZGVvKCkgewogICAgICAgIHNldEludGVydmFsKCgpID0+IHsKICAgICAgICAgICAgZm9yIChsZXQgdmlkZW8gb2YgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInZpZGVvIikpIHsKICAgICAgICAgICAgICAgIGlmICh2aWRlby5zcmMpIHsKICAgICAgICAgICAgICAgICAgICB2aWRlby5yZW1vdmVBdHRyaWJ1dGUoInNyYyIpOwogICAgICAgICAgICAgICAgICAgIHZpZGVvLm11dGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB2aWRlby5sb2FkKCk7CiAgICAgICAgICAgICAgICAgICAgdmlkZW8ucGF1c2UoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0sIDUwMCk7CiAgICB9CgogICAgZnVuY3Rpb24gc3luY1JlcXVlc3Qob3B0aW9uKSB7CiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsKICAgICAgICAgICAgb3B0aW9uLm9ubG9hZCA9IChyZXMpID0+IHsKICAgICAgICAgICAgICAgIHJlc29sdmUocmVzKTsKICAgICAgICAgICAgfTsKICAgICAgICAgICAgb3B0aW9uLm9uZXJyb3IgPSAoZXJyKSA9PiB7CiAgICAgICAgICAgICAgICByZWplY3QoZXJyKTsKICAgICAgICAgICAgfTsKICAgICAgICAgICAgR01feG1saHR0cFJlcXVlc3Qob3B0aW9uKTsKICAgICAgICB9KTsKICAgIH0KCiAgICByZXR1cm4gewogICAgICAgIHJlcTogKG9wdGlvbikgPT4gc3luY1JlcXVlc3Qob3B0aW9uKSwKICAgICAgICBmaW5kVGFyZ2V0RWxlOiAodGFyZ2V0RWxlKSA9PiBmaW5kVGFyZ2V0RWxlbWVudCh0YXJnZXRFbGUpLAogICAgICAgIHVybENoYW5nZVJlbG9hZDogKCkgPT4gdXJsQ2hhbmdlUmVsb2FkKCksCiAgICAgICAgcmVvbXZlVmlkZW86ICgpID0+IHJlb212ZVZpZGVvKCkKICAgIH0KfSkoKTsKCgpjb25zdCBzdXBlclZpcCA9IChmdW5jdGlvbiAoKSB7CgogICAgY29uc3QgX0NPTkZJR18gPSB7CiAgICAgICAgaXNNb2JpbGU6IG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goLyhBbmRyb2lkfHdlYk9TfGlQaG9uZXxpUGFkfGlQb2R8QmxhY2tCZXJyeXxJRU1vYmlsZXxPcGVyYSBNaW5pKS9pKSwKICAgICAgICBjdXJyZW50UGxheWVyTm9kZTogbnVsbCwKICAgICAgICB2aXBCb3hJZDogJ3ZpcF9qeF9ib3gnICsgTWF0aC5jZWlsKE1hdGgucmFuZG9tKCkgKiAxMDAwMDAwMDApLAogICAgICAgIGZsYWc6ICJmbGFnX3ZpcCIsCiAgICAgICAgYXV0b1BsYXllcktleTogImF1dG9fcGxheWVyX2tleSIgKyB3aW5kb3cubG9jYXRpb24uaG9zdCwKICAgICAgICBhdXRvUGxheWVyVmFsOiAiYXV0b19wbGF5ZXJfdmFsdWVfIiArIHdpbmRvdy5sb2NhdGlvbi5ob3N0LAogICAgICAgIHZpZGVvUGFyc2VMaXN0OiBbCiAgICAgICAgICAgIHsibmFtZSI6ICLnu7zlkIgvQuermSIsICJ0eXBlIjogIjEsMyIsICJ1cmwiOiAiaHR0cHM6Ly9qeC5qc29ucGxheWVyLmNvbS9wbGF5ZXIvP3VybD0ifSwKICAgICAgICAgICAgeyJuYW1lIjogIllUIiwgInR5cGUiOiAiMSwzIiwgInVybCI6ICJodHRwczovL2p4Lnlhbmd0dS50b3AvP3VybD0ifSwKICAgICAgICAgICAgeyJuYW1lIjogIlBsYXllci1KWSIsICJ0eXBlIjogIjEsMyIsICJ1cmwiOiAiaHR0cHM6Ly9qeC5wbGF5ZXJqeS5jb20vP3VybD0ifSwKICAgICAgICAgICAgeyJuYW1lIjogIuiZvuexsyIsICJ0eXBlIjogIjEsMyIsICJ1cmwiOiAiaHR0cHM6Ly9qeC54bWZsdi5jb20vP3VybD0ifSwKICAgICAgICAgICAgLyp7Im5hbWUiOiAiTk5YViIsICJ0eXBlIjogIjEsMyIsICJ1cmwiOiAiaHR0cHM6Ly9qeC5ubnh2LmNuL3R2LnBocD91cmw9In0sKi8KICAgICAgICAgICAgLyp7Im5hbWUiOiAi5ZCs5LmQIiwgInR5cGUiOiAiMSwzIiwgInVybCI6ICJodHRwczovL2p4LmRqNnUuY29tLz91cmw9In0sKi8KICAgICAgICAgICAgLyp7Im5hbWUiOiAiUkRISyIsICJ0eXBlIjogIjEsMyIsICJ1cmwiOiAiaHR0cHM6Ly9qeC5yZGhrLm5ldC8/dj0ifSwqLwogICAgICAgICAgICB7Im5hbWUiOiAieXBhcnNlIiwgInR5cGUiOiAiMSwyIiwgInVybCI6ICJodHRwczovL2p4LnlwYXJzZS5jb20vaW5kZXgucGhwP3VybD0ifSwKICAgICAgICAgICAgeyJuYW1lIjogIk9LIiwgInR5cGUiOiAiMSwzIiwgInVybCI6ICJodHRwczovL2FwaS5va2p4LmNjOjMzODkvangucGhwP3VybD0ifSwKICAgICAgICAgICAgeyJuYW1lIjogIk9LSlgiLCAidHlwZSI6ICIxLDMiLCAidXJsIjogImh0dHBzOi8vb2tqeC5jYy8/dXJsPSJ9LAogICAgICAgICAgICB7Im5hbWUiOiAibTE5MDciLCAidHlwZSI6ICIxLDIiLCAidXJsIjogImh0dHBzOi8vaW0xOTA3LnRvcC8/ang9In0sCgogICAgICAgICAgICB7Im5hbWUiOiAi54ix6LGGIiwgInR5cGUiOiAiMSwzIiwgInVybCI6ICJodHRwczovL2p4LmFpZG91ZXIubmV0Lz91cmw9In0sCiAgICAgICAgICAgIHsibmFtZSI6ICLnjKrouYQiLCAidHlwZSI6ICIxLDMiLCAidXJsIjogImh0dHBzOi8vanguaXp0eXkuY29tL0JlaS8/dXJsPSJ9LAogICAgICAgICAgICB7Im5hbWUiOiAi5aSc5bmVIiwgInR5cGUiOiAiMSwzIiwgInVybCI6ICJodHRwczovL3d3dy55ZW11Lnh5ei8/dXJsPSJ9LAoKICAgICAgICAgICAgeyJuYW1lIjogIk1BTyIsICJ0eXBlIjogIjEsMyIsICJ1cmwiOiAiaHR0cHM6Ly93d3cubXRvc3ouY29tL20zdTgucGhwP3VybD0ifSwKICAgICAgICAgICAgeyJuYW1lIjogIk0zVThUViIsICJ0eXBlIjogIjEsMyIsICJ1cmwiOiAiaHR0cHM6Ly9qeC5tM3U4LnR2L2ppZXhpLz91cmw9In0sCiAgICAgICAgICAgIHsibmFtZSI6ICLpk63kurrkupEiLCAidHlwZSI6ICIxLDMiLCAidXJsIjogImh0dHBzOi8vcGFyc2UuMTIzbWluZ3Jlbi5jb20vP3VybD0ifSwKICAgICAgICAgICAgeyJuYW1lIjogIjRrZHYiLCAidHlwZSI6ICIxLDMiLCAidXJsIjogImh0dHBzOi8vanguNGtkdi5jb20vP3VybD0ifSwKCiAgICAgICAgICAgIHsibmFtZSI6ICIxNzE3IiwgInR5cGUiOiAiMSwzIiwgInVybCI6ICJodHRwczovL2NrbW92LmNjeWpqZC5jb20vY2ttb3YvP3VybD0ifSwKICAgICAgICAgICAgeyJuYW1lIjogIjgwOTAiLCAidHlwZSI6ICIxLDMiLCAidXJsIjogImh0dHBzOi8vd3d3LjgwOTBnLmNuLz91cmw9In0sCiAgICAgICAgICAgIHsibmFtZSI6ICJxaWFucWkiLCAidHlwZSI6ICIxLDMiLCAidXJsIjogImh0dHBzOi8vYXBpLnFpYW5xaS5uZXQvdmlwLz91cmw9In0sCiAgICAgICAgICAgIHsibmFtZSI6ICJsYW9iYW5kcSIsICJ0eXBlIjogIjEsMyIsICJ1cmwiOiAiaHR0cHM6Ly92aXAubGFvYmFuZHEuY29tL2ppZXhpLnBocD91cmw9In0sCiAgICAgICAgICAgIHsibmFtZSI6ICJwbGF5bTN1OCIsICJ0eXBlIjogIjEsMyIsICJ1cmwiOiAiaHR0cHM6Ly93d3cucGxheW0zdTguY24vamlleGkucGhwP3VybD0ifSwKICAgICAgICAgICAgeyJuYW1lIjogIuaXoOWQjeWwj+ermSIsICJ0eXBlIjogIjEsMyIsICJ1cmwiOiAiaHR0cHM6Ly93d3cuYWRtaW5pc3RyYXRvcncuY29tL3ZpZGVvLnBocD91cmw9In0sCiAgICAgICAgICAgIHsibmFtZSI6ICJDSyIsICJ0eXBlIjogIjEsMyIsICJ1cmwiOiAiaHR0cHM6Ly93d3cuY2twbGF5ZXIudmlwL2ppZXhpLz91cmw9In0sCiAgICAgICAgICAgIHsibmFtZSI6ICLnm5jlj6QiLCAidHlwZSI6ICIxLDMiLCAidXJsIjogImh0dHBzOi8vZ28ueWgwNTIzLmNuL3kuY3k/dXJsPSJ9LAogICAgICAgICAgICB7Im5hbWUiOiAiQmxibyIsICJ0eXBlIjogIjEsMyIsICJ1cmwiOiAiaHR0cHM6Ly9qeC5ibGJvLmNjOjQ0MzMvP3VybD0ifSwKICAgICAgICBdLAogICAgICAgIHBsYXllckNvbnRhaW5lcnM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaG9zdDogInYucXEuY29tIiwKICAgICAgICAgICAgICAgIGNvbnRhaW5lcjogIiNtb2RfcGxheWVyLCNwbGF5ZXItY29udGFpbmVyLC5jb250YWluZXItcGxheWVyIiwKICAgICAgICAgICAgICAgIG5hbWU6ICJEZWZhdWx0IiwKICAgICAgICAgICAgICAgIGRpc3BsYXlOb2RlczogWyIjbWFza19sYXllciIsICIubW9kX3ZpcF9wb3B1cCIsICIjbWFza19sYXllciIsICIucGFuZWwtdGlwLXBheSJdCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGhvc3Q6ICJtLnYucXEuY29tIiwKICAgICAgICAgICAgICAgIGNvbnRhaW5lcjogIi5tb2RfcGxheWVyLCNwbGF5ZXIiLAogICAgICAgICAgICAgICAgbmFtZTogIkRlZmF1bHQiLAogICAgICAgICAgICAgICAgZGlzcGxheU5vZGVzOiBbIi5tb2RfdmlwX3BvcHVwIiwgIltjbGFzc149YXBwX10sW2NsYXNzXj1hcHAtXSxbY2xhc3MqPV9hcHBfXSxbY2xhc3MqPS1hcHAtXSxbY2xhc3MkPV9hcHBdLFtjbGFzcyQ9LWFwcF0iLCAiZGl2W2R0LWVpZD1vcGVuX2FwcF9ib3R0b21dIiwgImRpdi52aWRlb19mdW5jdGlvbi52aWRlb19mdW5jdGlvbl9uZXciLCAiYVtvcGVuLWFwcF0iLCAic2VjdGlvbi5tb2Rfc291cmNlIiwgInNlY3Rpb24ubW9kX2JveC5tb2Rfc2lkZXNsaXBfaC5tb2RfbXVsdGlfZmlndXJlc19oLHNlY3Rpb24ubW9kX3NpZGVzbGlwX3ByaXZpbGVnZXMsc2VjdGlvbi5tb2RfZ2FtZV9yZWMiLCAiLmF0LWFwcC1iYW5uZXIiXQogICAgICAgICAgICB9LAoKICAgICAgICAgICAge2hvc3Q6ICJ3Lm1ndHYuY29tIiwgY29udGFpbmVyOiAiI21ndHYtcGxheWVyLXdyYXAiLCBuYW1lOiAiRGVmYXVsdCIsIGRpc3BsYXlOb2RlczogW119LAogICAgICAgICAgICB7aG9zdDogInd3dy5tZ3R2LmNvbSIsIGNvbnRhaW5lcjogIiNtZ3R2LXBsYXllci13cmFwIiwgbmFtZTogIkRlZmF1bHQiLCBkaXNwbGF5Tm9kZXM6IFtdfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaG9zdDogIm0ubWd0di5jb20iLAogICAgICAgICAgICAgICAgY29udGFpbmVyOiAiLnZpZGVvLWFyZWEiLAogICAgICAgICAgICAgICAgbmFtZTogIkRlZmF1bHQiLAogICAgICAgICAgICAgICAgZGlzcGxheU5vZGVzOiBbImRpdltjbGFzc149bWctYXBwXSIsICIudmlkZW8tYXJlYS1iYXIiLCAiLm9wZW4tYXBwLXBvcHVwIl0KICAgICAgICAgICAgfSwKICAgICAgICAgICAge2hvc3Q6ICJ3d3cuYmlsaWJpbGkuY29tIiwgY29udGFpbmVyOiAiI3BsYXllcl9tb2R1bGUsI2JpbGliaWxpUGxheWVyLCNiaWxpYmlsaS1wbGF5ZXIiLCBuYW1lOiAiRGVmYXVsdCIsIGRpc3BsYXlOb2RlczogW119LAogICAgICAgICAgICB7aG9zdDogIm0uYmlsaWJpbGkuY29tIiwgY29udGFpbmVyOiAiLnBsYXllci13cmFwcGVyLC5wbGF5ZXItY29udGFpbmVyLC5tcGxheWVyIiwgbmFtZTogIkRlZmF1bHQiLCBkaXNwbGF5Tm9kZXM6IFtdfSwKICAgICAgICAgICAge2hvc3Q6ICJ3d3cuaXFpeWkuY29tIiwgY29udGFpbmVyOiAiI2ZsYXNoYm94IiwgbmFtZTogIkRlZmF1bHQiLCBkaXNwbGF5Tm9kZXM6IFsiI3BsYXllclBvcHVwIiwgImRpdltjbGFzc149cXktaGVhZGVyLWxvZ2luLXBvcF0iLCAic2VjdGlvbltjbGFzc149bW9kYWwtY292ZXJfXSIgLCIudG9hc3QiXX0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGhvc3Q6ICJtLmlxaXlpLmNvbSIsCiAgICAgICAgICAgICAgICBjb250YWluZXI6ICIubS12aWRlby1wbGF5ZXItd3JhcCIsCiAgICAgICAgICAgICAgICBuYW1lOiAiRGVmYXVsdCIsCiAgICAgICAgICAgICAgICBkaXNwbGF5Tm9kZXM6IFsiZGl2Lm0taXF5R3VpZGUtbGF5ZXIiLCAiYVtkb3duLWFwcC1hbmRyb2lkLXVybF0iLCAiW25hbWU9bS1leHRlbmRCYXJdIiwgIltjbGFzcyo9Q2hhbm5lbEhvbWVCYW5uZXJdIiwgInNlY3Rpb24ubS1ob3RXb3Jkcy1ib3R0b20iXQogICAgICAgICAgICB9LAogICAgICAgICAgICB7aG9zdDogInd3dy5pcS5jb20iLCBjb250YWluZXI6ICIuaW50bC12aWRlby13cmFwIiwgbmFtZTogIkRlZmF1bHQiLCBkaXNwbGF5Tm9kZXM6IFtdfSwKICAgICAgICAgICAge2hvc3Q6ICJ2LnlvdWt1LmNvbSIsIGNvbnRhaW5lcjogIiNwbGF5ZXIiLCBuYW1lOiAiRGVmYXVsdCIsIGRpc3BsYXlOb2RlczogWyIjaWZyYW1hV3JhcHBlciIsICIjY2hlY2tvdXRfY291bnRlcl9tYXNrIiwgIiNjaGVja291dF9jb3VudGVyX3BvcHVwIl19LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBob3N0OiAibS55b3VrdS5jb20iLAogICAgICAgICAgICAgICAgY29udGFpbmVyOiAiI3BsYXllciwuaDUtZGV0YWlsLXBsYXllciIsCiAgICAgICAgICAgICAgICBuYW1lOiAiRGVmYXVsdCIsCiAgICAgICAgICAgICAgICBkaXNwbGF5Tm9kZXM6IFsiLmNhbGxFbmRfYm94IiwgIi5oNS1kZXRhaWwtZ3VpZGUiLCAiLmg1LWRldGFpbC12aXAtZ3VpZGUiXQogICAgICAgICAgICB9LAogICAgICAgICAgICB7aG9zdDogInR2LnNvaHUuY29tIiwgY29udGFpbmVyOiAiI3BsYXllciIsIG5hbWU6ICJEZWZhdWx0IiwgZGlzcGxheU5vZGVzOiBbXX0sCiAgICAgICAgICAgIHtob3N0OiAiZmlsbS5zb2h1LmNvbSIsIGNvbnRhaW5lcjogIiNwbGF5ZXJXcmFwIiwgbmFtZTogIkRlZmF1bHQiLCBkaXNwbGF5Tm9kZXM6IFtdfSwKICAgICAgICAgICAge2hvc3Q6ICJ3d3cubGUuY29tIiwgY29udGFpbmVyOiAiI2xlX3BsYXlib3giLCBuYW1lOiAiRGVmYXVsdCIsIGRpc3BsYXlOb2RlczogW119LAogICAgICAgICAgICB7aG9zdDogInZpZGVvLnR1ZG91LmNvbSIsIGNvbnRhaW5lcjogIi50ZC1wbGF5Ym94IiwgbmFtZTogIkRlZmF1bHQiLCBkaXNwbGF5Tm9kZXM6IFtdfSwKICAgICAgICAgICAge2hvc3Q6ICJ2LnBwdHYuY29tIiwgY29udGFpbmVyOiAiI3BwdHZfcGxheXBhZ2VfYm94IiwgbmFtZTogIkRlZmF1bHQiLCBkaXNwbGF5Tm9kZXM6IFtdfSwKICAgICAgICAgICAge2hvc3Q6ICJ2aXAucHB0di5jb20iLCBjb250YWluZXI6ICIudy12aWRlbyIsIG5hbWU6ICJEZWZhdWx0IiwgZGlzcGxheU5vZGVzOiBbXX0sCiAgICAgICAgICAgIHtob3N0OiAid3d3Lndhc3UuY24iLCBjb250YWluZXI6ICIjZmxhc2hDb250ZW50IiwgbmFtZTogIkRlZmF1bHQiLCBkaXNwbGF5Tm9kZXM6IFtdfSwKICAgICAgICAgICAge2hvc3Q6ICJ3d3cuYWNmdW4uY24iLCBjb250YWluZXI6ICIjcGxheWVyIiwgbmFtZTogIkRlZmF1bHQiLCBkaXNwbGF5Tm9kZXM6IFtdfSwKICAgICAgICAgICAge2hvc3Q6ICJ2aXAuMTkwNS5jb20iLCBjb250YWluZXI6ICIjcGxheWVyLCN2b2RQbGF5ZXIiLCBuYW1lOiAiRGVmYXVsdCIsIGRpc3BsYXlOb2RlczogW119LAogICAgICAgICAgICB7aG9zdDogInd3dy4xOTA1LmNvbSIsIGNvbnRhaW5lcjogIiNwbGF5ZXIsI3ZvZFBsYXllciIsIG5hbWU6ICJEZWZhdWx0IiwgZGlzcGxheU5vZGVzOiBbXX0sCiAgICAgICAgXQogICAgfTsKCiAgICBjbGFzcyBCYXNlQ29uc3VtZXIgewogICAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgICAgICB0aGlzLnBhcnNlID0gKCkgPT4gewogICAgICAgICAgICAgICAgdXRpbC5maW5kVGFyZ2V0RWxlKCdib2R5JykKICAgICAgICAgICAgICAgICAgICAudGhlbigoY29udGFpbmVyKSA9PiB0aGlzLnByZUhhbmRsZShjb250YWluZXIpKQogICAgICAgICAgICAgICAgICAgIC50aGVuKChjb250YWluZXIpID0+IHRoaXMuZ2VuZXJhdGVFbGVtZW50KGNvbnRhaW5lcikpCiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKGNvbnRhaW5lcikgPT4gdGhpcy5iaW5kRXZlbnQoY29udGFpbmVyKSkKICAgICAgICAgICAgICAgICAgICAudGhlbigoY29udGFpbmVyKSA9PiB0aGlzLmF1dG9QbGF5KGNvbnRhaW5lcikpCiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKGNvbnRhaW5lcikgPT4gdGhpcy5wb3N0SGFuZGxlKGNvbnRhaW5lcikpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBwcmVIYW5kbGUoY29udGFpbmVyKSB7CiAgICAgICAgICAgIF9DT05GSUdfLmN1cnJlbnRQbGF5ZXJOb2RlLmRpc3BsYXlOb2Rlcy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4gewogICAgICAgICAgICAgICAgdXRpbC5maW5kVGFyZ2V0RWxlKGl0ZW0pCiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKG9iaikgPT4gb2JqLnN0eWxlLmRpc3BsYXkgPSAnbm9uZScpCiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4gY29uc29sZS53YXJuKCLkuI3lrZjlnKjlhYPntKAiLCBlKSk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gcmVzb2x2ZShjb250YWluZXIpKTsKICAgICAgICB9CgogICAgICAgIGdlbmVyYXRlRWxlbWVudChjb250YWluZXIpIHsKICAgICAgICAgICAgR01fYWRkU3R5bGUoYAogICAgICAgICAgICAgICAgICAgICAgICAjJHtfQ09ORklHXy52aXBCb3hJZH0ge2N1cnNvcjpwb2ludGVyOyBwb3NpdGlvbjpmaXhlZDsgdG9wOjEyMHB4OyBsZWZ0OjBweDsgei1pbmRleDo5OTk5OTk5OyB0ZXh0LWFsaWduOmxlZnQ7fQogICAgICAgICAgICAgICAgICAgICAgICAjJHtfQ09ORklHXy52aXBCb3hJZH0gLmltZ19ib3h7d2lkdGg6MzJweDsgaGVpZ2h0OjMycHg7bGluZS1oZWlnaHQ6MzJweDt0ZXh0LWFsaWduOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOiMxYzg0YzY7bWFyZ2luOjEwcHggMHB4O30KICAgICAgICAgICAgICAgICAgICAgICAgIyR7X0NPTkZJR18udmlwQm94SWR9IC52aXBfbGlzdCB7ZGlzcGxheTpub25lOyBwb3NpdGlvbjphYnNvbHV0ZTsgYm9yZGVyLXJhZGl1czo1cHg7IGxlZnQ6MzJweDsgdG9wOjA7IHRleHQtYWxpZ246Y2VudGVyOyBiYWNrZ3JvdW5kLWNvbG9yOiAjM2Y0MTQ5OyBib3JkZXI6MXB4IHNvbGlkIHdoaXRlO3BhZGRpbmc6MTBweCAwcHg7IHdpZHRoOjM4MHB4OyBtYXgtaGVpZ2h0OjQwMHB4OyBvdmVyZmxvdy15OmF1dG87fQogICAgICAgICAgICAgICAgICAgICAgICAjJHtfQ09ORklHXy52aXBCb3hJZH0gLnZpcF9saXN0IGxpe2JvcmRlci1yYWRpdXM6MnB4OyBmb250LXNpemU6MTJweDsgY29sb3I6I0RDRENEQzsgdGV4dC1hbGlnbjpjZW50ZXI7IHdpZHRoOmNhbGMoMjUlIC0gMTRweCk7IGxpbmUtaGVpZ2h0OjIxcHg7IGZsb2F0OmxlZnQ7IGJvcmRlcjoxcHggc29saWQgZ3JheTsgcGFkZGluZzowIDRweDsgbWFyZ2luOjRweCAycHg7b3ZlcmZsb3c6aGlkZGVuO3doaXRlLXNwYWNlOiBub3dyYXA7dGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7LW8tdGV4dC1vdmVyZmxvdzplbGxpcHNpczt9CiAgICAgICAgICAgICAgICAgICAgICAgICMke19DT05GSUdfLnZpcEJveElkfSAudmlwX2xpc3QgbGk6aG92ZXJ7Y29sb3I6IzFjODRjNjsgYm9yZGVyOjFweCBzb2xpZCAjMWM4NGM2O30KICAgICAgICAgICAgICAgICAgICAgICAgIyR7X0NPTkZJR18udmlwQm94SWR9IC52aXBfbGlzdCB1bHtwYWRkaW5nLWxlZnQ6IDEwcHg7fQogICAgICAgICAgICAgICAgICAgICAgICAjJHtfQ09ORklHXy52aXBCb3hJZH0gLnZpcF9saXN0Ojotd2Via2l0LXNjcm9sbGJhcnt3aWR0aDo1cHg7IGhlaWdodDoxcHg7fQogICAgICAgICAgICAgICAgICAgICAgICAjJHtfQ09ORklHXy52aXBCb3hJZH0gLnZpcF9saXN0Ojotd2Via2l0LXNjcm9sbGJhci10aHVtYntib3gtc2hhZG93Omluc2V0IDAgMCA1cHggcmdiYSgwLCAwLCAwLCAwLjIpOyBiYWNrZ3JvdW5kOiNBOEE4QTg7fQogICAgICAgICAgICAgICAgICAgICAgICAjJHtfQ09ORklHXy52aXBCb3hJZH0gLnZpcF9saXN0Ojotd2Via2l0LXNjcm9sbGJhci10cmFja3tib3gtc2hhZG93Omluc2V0IDAgMCA1cHggcmdiYSgwLCAwLCAwLCAwLjIpOyBiYWNrZ3JvdW5kOiNGMUYxRjE7fQogICAgICAgICAgICAgICAgICAgICAgICAjJHtfQ09ORklHXy52aXBCb3hJZH0gbGkuc2VsZWN0ZWR7Y29sb3I6IzFjODRjNjsgYm9yZGVyOjFweCBzb2xpZCAjMWM4NGM2O30KCQkJCQkJYCk7CgogICAgICAgICAgICBpZiAoX0NPTkZJR18uaXNNb2JpbGUpIHsKICAgICAgICAgICAgICAgIEdNX2FkZFN0eWxlKGAKICAgICAgICAgICAgICAgICAgICAjJHtfQ09ORklHXy52aXBCb3hJZH0ge3RvcDozMDBweDt9CiAgICAgICAgICAgICAgICAgICAgIyR7X0NPTkZJR18udmlwQm94SWR9IC52aXBfbGlzdCB7d2lkdGg6MzAwcHg7fQogICAgICAgICAgICAgICAgICAgIGApOwogICAgICAgICAgICB9CgogICAgICAgICAgICBsZXQgdHlwZV8xX3N0ciA9ICIiOwogICAgICAgICAgICBsZXQgdHlwZV8yX3N0ciA9ICIiOwogICAgICAgICAgICBsZXQgdHlwZV8zX3N0ciA9ICIiOwogICAgICAgICAgICBfQ09ORklHXy52aWRlb1BhcnNlTGlzdC5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4gewogICAgICAgICAgICAgICAgaWYgKGl0ZW0udHlwZS5pbmNsdWRlcygiMSIpKSB7CiAgICAgICAgICAgICAgICAgICAgdHlwZV8xX3N0ciArPSBgPGxpIGNsYXNzPSJucS1saSIgdGl0bGU9IiR7aXRlbS5uYW1lfTEiIGRhdGEtaW5kZXg9IiR7aW5kZXh9Ij4ke2l0ZW0ubmFtZX08L2xpPmA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoaXRlbS50eXBlLmluY2x1ZGVzKCIyIikpIHsKICAgICAgICAgICAgICAgICAgICB0eXBlXzJfc3RyICs9IGA8bGkgY2xhc3M9InRjLWxpIiB0aXRsZT0iJHtpdGVtLm5hbWV9IiBkYXRhLWluZGV4PSIke2luZGV4fSI+JHtpdGVtLm5hbWV9PC9saT5gOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGl0ZW0udHlwZS5pbmNsdWRlcygiMyIpKSB7CiAgICAgICAgICAgICAgICAgICAgdHlwZV8zX3N0ciArPSBgPGxpIGNsYXNzPSJ0Yy1saSIgdGl0bGU9IiR7aXRlbS5uYW1lfSIgZGF0YS1pbmRleD0iJHtpbmRleH0iPiR7aXRlbS5uYW1lfTwvbGk+YDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICBsZXQgYXV0b1BsYXkgPSAhIUdNX2dldFZhbHVlKF9DT05GSUdfLmF1dG9QbGF5ZXJLZXksIG51bGwpID8gIuW8gCIgOiAi5YWzIjsKCiAgICAgICAgICAgICQoY29udGFpbmVyKS5hcHBlbmQoYAogICAgICAgICAgICAgICAgPGRpdiBpZD0iJHtfQ09ORklHXy52aXBCb3hJZH0iPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InZpcF9pY29uIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW1nX2JveCIgdGl0bGU9IumAieaLqeino+aekOa6kCIgc3R5bGU9ImNvbG9yOndoaXRlO2ZvbnQtc2l6ZToxNnB4O2ZvbnQtd2VpZ2h0OmJvbGQ7Ym9yZGVyLXJhZGl1czo1cHg7Ij48c3BhbiBzdHlsZT0iY29sb3I6IHJlZDsiPlY8L3NwYW4+STxzcGFuIHN0eWxlPSJjb2xvcjogeWVsbG93OyI+UDwvc3Bhbj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idmlwX2xpc3QiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgc3R5bGU9ImNvbG9yOiMxYzg0YzY7IGZvbnQtd2VpZ2h0OiBib2xkOyBmb250LXNpemU6IDE2cHg7IHBhZGRpbmc6NXB4IDBweDsiPlvlhoXltYzmkq3mlL5dPC9oMz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7dHlwZV8xX3N0cn0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iY2xlYXI6Ym90aDsiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIHN0eWxlPSJjb2xvcjojMWM4NGM2OyBmb250LXdlaWdodDogYm9sZDsgZm9udC1zaXplOiAxNnB4OyBwYWRkaW5nOjVweCAwcHg7Ij5b5by556qX5pKt5pS+5bim6YCJ6ZuGXTwvaDM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3R5cGVfMl9zdHJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImNsZWFyOmJvdGg7Ij48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBzdHlsZT0iY29sb3I6IzFjODRjNjsgZm9udC13ZWlnaHQ6IGJvbGQ7IGZvbnQtc2l6ZTogMTZweDsgcGFkZGluZzo1cHggMHB4OyI+W+W8ueeql+aSreaUvuS4jeW4pumAiembhl08L2gzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHt0eXBlXzNfc3RyfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJjbGVhcjpib3RoOyI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0O2NvbG9yOiNGRkY7Zm9udC1zaXplOjEwcHg7cGFkZGluZzowcHggMTBweDttYXJnaW4tdG9wOjEwcHg7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj7oh6rliqjop6PmnpDlip/og73or7TmmI7vvJo8L2I+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyPiZuYnNwOyZuYnNwOzHjgIHoh6rliqjop6PmnpDlip/og73pu5jorqTlhbPpl63vvIjoh6rliqjop6PmnpDlj6rmlK/mjIHlhoXltYzmkq3mlL7mupDvvIkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnI+Jm5ic3A7Jm5ic3A7MuOAgeW8gOWQr+iHquWKqOino+aekO+8jOe9kemhteaJk+W8gOWQjuiEmuacrOWwhuagueaNruW9k+WJjemAieS4reeahOino+aekOa6kOiHquWKqOino+aekOinhumikeOAguWmguino+aekOWksei0pe+8jOivt+aJi+WKqOmAieaLqeS4jeWQjOeahOino+aekOa6kOWwneivlQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxicj4mbmJzcDsmbmJzcDsz44CB5rKh5pyJ6YCJ5Lit6Kej5p6Q5rqQ5bCG6ZqP5py66YCJ5Y+W5LiA5LiqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyPiZuYnNwOyZuYnNwOzTjgIHlpoLmn5DkupvnvZHnq5nmnInkvJrlkZjlj6/ku6XlhbPpl63oh6rliqjop6PmnpDlip/og70KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbWdfYm94IiBpZD0idmlwX2F1dG8iIHN0eWxlPSJjb2xvcjp3aGl0ZTtmb250LXNpemU6MTZweDtmb250LXdlaWdodDpib2xkO2JvcmRlci1yYWRpdXM6NXB4OyIgdGl0bGU9IuaYr+WQpuaJk+W8gOiHquWKqOino+aekOOAguiLpeiHquWKqOino+aekOWksei0pe+8jOivt+aJi+WKqOmAieaLqeWFtuWug+aOpeWPo+Wwneivle+8ge+8gSI+JHthdXRvUGxheX08L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PmApOwogICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gcmVzb2x2ZShjb250YWluZXIpKTsKICAgICAgICB9CgogICAgICAgIGJpbmRFdmVudChjb250YWluZXIpIHsKICAgICAgICAgICAgY29uc3QgdmlwQm94ID0gJChgIyR7X0NPTkZJR18udmlwQm94SWR9YCk7CiAgICAgICAgICAgIGlmIChfQ09ORklHXy5pc01vYmlsZSkgewogICAgICAgICAgICAgICAgdmlwQm94LmZpbmQoIi52aXBfaWNvbiIpLm9uKCJjbGljayIsICgpID0+IHZpcEJveC5maW5kKCIudmlwX2xpc3QiKS50b2dnbGUoKSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB2aXBCb3guZmluZCgiLnZpcF9pY29uIikub24oIm1vdXNlb3ZlciIsICgpID0+IHZpcEJveC5maW5kKCIudmlwX2xpc3QiKS5zaG93KCkpOwogICAgICAgICAgICAgICAgdmlwQm94LmZpbmQoIi52aXBfaWNvbiIpLm9uKCJtb3VzZW91dCIsICgpID0+IHZpcEJveC5maW5kKCIudmlwX2xpc3QiKS5oaWRlKCkpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBsZXQgX3RoaXMgPSB0aGlzOwogICAgICAgICAgICB2aXBCb3guZmluZCgiLnZpcF9saXN0IC5ucS1saSIpLmVhY2goKGxpSW5kZXgsIGl0ZW0pID0+IHsKICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBwYXJzZUludCgkKGl0ZW0pLmF0dHIoImRhdGEtaW5kZXgiKSk7CiAgICAgICAgICAgICAgICAgICAgR01fc2V0VmFsdWUoX0NPTkZJR18uYXV0b1BsYXllclZhbCwgaW5kZXgpOwogICAgICAgICAgICAgICAgICAgIEdNX3NldFZhbHVlKF9DT05GSUdfLmZsYWcsICJ0cnVlIik7CiAgICAgICAgICAgICAgICAgICAgX3RoaXMuc2hvd1BsYXllcldpbmRvdyhfQ09ORklHXy52aWRlb1BhcnNlTGlzdFtpbmRleF0pOwogICAgICAgICAgICAgICAgICAgIHZpcEJveC5maW5kKCIudmlwX2xpc3QgbGkiKS5yZW1vdmVDbGFzcygic2VsZWN0ZWQiKTsKICAgICAgICAgICAgICAgICAgICAkKGl0ZW0pLmFkZENsYXNzKCJzZWxlY3RlZCIpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICB2aXBCb3guZmluZCgiLnZpcF9saXN0IC50Yy1saSIpLmVhY2goKGxpSW5kZXgsIGl0ZW0pID0+IHsKICAgICAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBwYXJzZUludCgkKGl0ZW0pLmF0dHIoImRhdGEtaW5kZXgiKSk7CiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmlkZW9PYmogPSBfQ09ORklHXy52aWRlb1BhcnNlTGlzdFtpbmRleF07CiAgICAgICAgICAgICAgICAgICAgbGV0IHVybCA9IHZpZGVvT2JqLnVybCArIHdpbmRvdy5sb2NhdGlvbi5ocmVmOwogICAgICAgICAgICAgICAgICAgIEdNX29wZW5JblRhYih1cmwsIHthY3RpdmU6IHRydWUsIGluc2VydDogdHJ1ZSwgc2V0UGFyZW50OiB0cnVlfSk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAvL+WPs+mUruenu+WKqOS9jee9rgogICAgICAgICAgICB2aXBCb3gubW91c2Vkb3duKGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICBpZiAoZS53aGljaCAhPT0gMykgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKQogICAgICAgICAgICAgICAgdmlwQm94LmNzcygiY3Vyc29yIiwgIm1vdmUiKTsKICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uRGl2ID0gJCh0aGlzKS5vZmZzZXQoKTsKICAgICAgICAgICAgICAgIGxldCBkaXN0ZW5jZVggPSBlLnBhZ2VYIC0gcG9zaXRpb25EaXYubGVmdDsKICAgICAgICAgICAgICAgIGxldCBkaXN0ZW5jZVkgPSBlLnBhZ2VZIC0gcG9zaXRpb25EaXYudG9wOwoKICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLm1vdXNlbW92ZShmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgICAgIGxldCB4ID0gZS5wYWdlWCAtIGRpc3RlbmNlWDsKICAgICAgICAgICAgICAgICAgICBsZXQgeSA9IGUucGFnZVkgLSBkaXN0ZW5jZVk7CiAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2luZG93V2lkdGggPSAkKHdpbmRvdykud2lkdGgoKTsKICAgICAgICAgICAgICAgICAgICBjb25zdCB3aW5kb3dIZWlnaHQgPSAkKHdpbmRvdykuaGVpZ2h0KCk7CgogICAgICAgICAgICAgICAgICAgIGlmICh4IDwgMCkgewogICAgICAgICAgICAgICAgICAgICAgICB4ID0gMDsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHggPiB3aW5kb3dXaWR0aCAtIHZpcEJveC5vdXRlcldpZHRoKHRydWUpIC0gMTAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHggPSB3aW5kb3dXaWR0aCAtIHZpcEJveC5vdXRlcldpZHRoKHRydWUpIC0gMTAwOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWYgKHkgPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHkgPSAwOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoeSA+IHdpbmRvd0hlaWdodCAtIHZpcEJveC5vdXRlckhlaWdodCh0cnVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICB5ID0gd2luZG93SGVpZ2h0IC0gdmlwQm94Lm91dGVySGVpZ2h0KHRydWUpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB2aXBCb3guY3NzKCJsZWZ0IiwgeCk7CiAgICAgICAgICAgICAgICAgICAgdmlwQm94LmNzcygidG9wIiwgeSk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLm1vdXNldXAoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLm9mZignbW91c2Vtb3ZlJyk7CiAgICAgICAgICAgICAgICAgICAgdmlwQm94LmNzcygiY3Vyc29yIiwgInBvaW50ZXIiKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgJChkb2N1bWVudCkuY29udGV4dG1lbnUoZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHJlc29sdmUoY29udGFpbmVyKSk7CiAgICAgICAgfQoKICAgICAgICBhdXRvUGxheShjb250YWluZXIpIHsKICAgICAgICAgICAgY29uc3QgdmlwQm94ID0gJChgIyR7X0NPTkZJR18udmlwQm94SWR9YCk7CiAgICAgICAgICAgIHZpcEJveC5maW5kKCIjdmlwX2F1dG8iKS5vbigiY2xpY2siLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICBpZiAoISFHTV9nZXRWYWx1ZShfQ09ORklHXy5hdXRvUGxheWVyS2V5LCBudWxsKSkgewogICAgICAgICAgICAgICAgICAgIEdNX3NldFZhbHVlKF9DT05GSUdfLmF1dG9QbGF5ZXJLZXksIG51bGwpOwogICAgICAgICAgICAgICAgICAgICQodGhpcykuaHRtbCgi5YWzIik7CiAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5hdHRyKCJ0aXRsZSIsICLmmK/lkKbmiZPlvIDoh6rliqjop6PmnpDjgILoi6Xoh6rliqjop6PmnpDlpLHotKXvvIzor7fmiYvliqjpgInmi6nlhbblroPmjqXlj6PlsJ3or5XvvIHvvIEiKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgR01fc2V0VmFsdWUoX0NPTkZJR18uYXV0b1BsYXllcktleSwgInRydWUiKTsKICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmh0bWwoIuW8gCIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpOwogICAgICAgICAgICAgICAgfSwgMjAwKTsKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICBpZiAoISFHTV9nZXRWYWx1ZShfQ09ORklHXy5hdXRvUGxheWVyS2V5LCBudWxsKSkgewogICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RQbGF5ZXIoY29udGFpbmVyKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gcmVzb2x2ZShjb250YWluZXIpKTsKICAgICAgICB9CgogICAgICAgIHNlbGVjdFBsYXllcihjb250YWluZXIpIHsKICAgICAgICAgICAgbGV0IGluZGV4ID0gR01fZ2V0VmFsdWUoX0NPTkZJR18uYXV0b1BsYXllclZhbCwgMik7CiAgICAgICAgICAgIGxldCBhdXRvT2JqID0gX0NPTkZJR18udmlkZW9QYXJzZUxpc3RbaW5kZXhdOwogICAgICAgICAgICBsZXQgX3RoID0gdGhpczsKICAgICAgICAgICAgaWYgKGF1dG9PYmoudHlwZS5pbmNsdWRlcygiMSIpKSB7CiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICBfdGguc2hvd1BsYXllcldpbmRvdyhhdXRvT2JqKTsKICAgICAgICAgICAgICAgICAgICBjb25zdCB2aXBCb3ggPSAkKGAjJHtfQ09ORklHXy52aXBCb3hJZH1gKTsKICAgICAgICAgICAgICAgICAgICB2aXBCb3guZmluZChgLnZpcF9saXN0IFt0aXRsZT0iJHthdXRvT2JqLm5hbWV9MSJdYCkuYWRkQ2xhc3MoInNlbGVjdGVkIik7CiAgICAgICAgICAgICAgICAgICAgJChjb250YWluZXIpLmZpbmQoIiN2aXBfYXV0byIpLmF0dHIoInRpdGxlIiwgYOiHquWKqOino+aekOa6kO+8miR7YXV0b09iai5uYW1lfWApOwogICAgICAgICAgICAgICAgfSwgMjUwMCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHNob3dQbGF5ZXJXaW5kb3codmlkZW9PYmopIHsKICAgICAgICAgICAgdXRpbC5maW5kVGFyZ2V0RWxlKF9DT05GSUdfLmN1cnJlbnRQbGF5ZXJOb2RlLmNvbnRhaW5lcikKICAgICAgICAgICAgICAgIC50aGVuKChjb250YWluZXIpID0+IHsKICAgICAgICAgICAgICAgICAgICBjb25zdCB0eXBlID0gdmlkZW9PYmoudHlwZTsKICAgICAgICAgICAgICAgICAgICBsZXQgdXJsID0gdmlkZW9PYmoudXJsICsgd2luZG93LmxvY2F0aW9uLmhyZWY7CiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUuaW5jbHVkZXMoIjEiKSkgewogICAgICAgICAgICAgICAgICAgICAgICB1dGlsLnJlb212ZVZpZGVvKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICQoY29udGFpbmVyKS5lbXB0eSgpOwogICAgICAgICAgICAgICAgICAgICAgICAkKGNvbnRhaW5lcikuZW1wdHkoKTsKICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGlmcmFtZURpdkNzcyA9ICJ3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3otaW5kZXg6OTk5OTk5OyI7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfQ09ORklHXy5pc01vYmlsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZyYW1lRGl2Q3NzID0gIndpZHRoOjEwMCU7aGVpZ2h0OjIyMHB4O3otaW5kZXg6OTk5OTk5OyI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9DT05GSUdfLmlzTW9iaWxlICYmIHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YoImlxaXlpLmNvbSIpICE9PSAtMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZyYW1lRGl2Q3NzID0gIndpZHRoOjEwMCU7aGVpZ2h0OjIyMHB4O3otaW5kZXg6OTk5OTk5O21hcmdpbi10b3A6LTU2LjI1JTsiOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICQoY29udGFpbmVyKS5hcHBlbmQoYDxkaXYgc3R5bGU9IiR7aWZyYW1lRGl2Q3NzfSI+PGlmcmFtZSBpZD0iaWZyYW1lLXBsYXllci00YTViNmMiIHNyYz0iJHt1cmx9IiBzdHlsZT0iYm9yZGVyOm5vbmU7IiBhbGxvd2Z1bGxzY3JlZW49InRydWUiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiPjwvaWZyYW1lPjwvZGl2PmApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgIH0KCiAgICAgICAgcG9zdEhhbmRsZShjb250YWluZXIpIHsKICAgICAgICAgICAgaWYgKCEhR01fZ2V0VmFsdWUoX0NPTkZJR18uYXV0b1BsYXllcktleSwgbnVsbCkpIHsKICAgICAgICAgICAgICAgIHV0aWwudXJsQ2hhbmdlUmVsb2FkKCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBsZXQgb2xkSHJlZiA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmOwogICAgICAgICAgICAgICAgbGV0IGludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4gewogICAgICAgICAgICAgICAgICAgIGxldCBuZXdIcmVmID0gd2luZG93LmxvY2F0aW9uLmhyZWY7CiAgICAgICAgICAgICAgICAgICAgaWYgKG9sZEhyZWYgIT09IG5ld0hyZWYpIHsKICAgICAgICAgICAgICAgICAgICAgICAgb2xkSHJlZiA9IG5ld0hyZWY7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIUdNX2dldFZhbHVlKF9DT05GSUdfLmZsYWcsIG51bGwpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0sIDEwMDApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgIH0KCiAgICBjbGFzcyBEZWZhdWx0Q29uc3VtZXIgZXh0ZW5kcyBCYXNlQ29uc3VtZXIgewogICAgfQoKICAgIHJldHVybiB7CiAgICAgICAgc3RhcnQ6ICgpID0+IHsKICAgICAgICAgICAgR01fc2V0VmFsdWUoX0NPTkZJR18uZmxhZywgbnVsbCk7CiAgICAgICAgICAgIGxldCBtYWxsQ2FzZSA9ICdEZWZhdWx0JzsKICAgICAgICAgICAgbGV0IHBsYXllck5vZGUgPSBfQ09ORklHXy5wbGF5ZXJDb250YWluZXJzLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZS5ob3N0ID09PSB3aW5kb3cubG9jYXRpb24uaG9zdCk7CiAgICAgICAgICAgIGlmIChwbGF5ZXJOb2RlID09PSBudWxsIHx8IHBsYXllck5vZGUubGVuZ3RoIDw9IDApIHsKICAgICAgICAgICAgICAgIGNvbnNvbGUud2Fybih3aW5kb3cubG9jYXRpb24uaG9zdCArICLor6XnvZHnq5nmmoLkuI3mlK/mjIHvvIzor7fogZTns7vkvZzogIXvvIzkvZzogIXlsIbkvJrnrKzkuIDml7bpl7TlpITnkIbvvIjms6jmhI/vvJror7forrDlvpfmj5DkvpvmnInpl67popjnmoTnvZHlnYDvvIkiKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBfQ09ORklHXy5jdXJyZW50UGxheWVyTm9kZSA9IHBsYXllck5vZGVbMF07CiAgICAgICAgICAgIG1hbGxDYXNlID0gX0NPTkZJR18uY3VycmVudFBsYXllck5vZGUubmFtZTsKICAgICAgICAgICAgY29uc3QgdGFyZ2V0Q29uc3VtZXIgPSBldmFsKGBuZXcgJHttYWxsQ2FzZX1Db25zdW1lcmApOwogICAgICAgICAgICB0YXJnZXRDb25zdW1lci5wYXJzZSgpOwogICAgICAgIH0KICAgIH0KCn0pKCk7CgooZnVuY3Rpb24gKCkgewogICAgc3VwZXJWaXAuc3RhcnQoKTsKfSkoKTs=
Add Comment
Please, Sign In to add comment