[READ-ONLY] Mirror of https://github.com/probablykasper/v4.kasper.space. Personal website v4.kasper.space
personal-website website
0

Configure Feed

Select the types of activity you want to include in your feed.

Deploy

Kasper (Oct 21, 2018, 4:04 PM +0200) b5f7efad 0e107206

+79 -2865
+1 -1
docs/CNAME
··· 1 - kasp.io 1 + kasp.io
+69 -23
docs/global.css
··· 20 20 grid-template-columns: repeat(4, 1fr); } } 21 21 22 22 @media (max-width: 600px) { 23 - section div.thumbnails a.item { 24 - width: 300px; 25 - height: calc(300px/16*9 - 4px); } } 23 + section div.thumbnails .item, section div.cards .item { 24 + width: 300px; } 25 + section.video div.thumbnails .item, section.synctan div.thumbnails .item { 26 + height: calc(300px/16*9 - 4px); } 27 + section.github div.cards .item { 28 + padding: 10px; } } 26 29 27 30 section { 28 31 max-width: 1000px; } ··· 47 50 background-size: 22px; 48 51 cursor: pointer; } 49 52 .social-media a.twitter { 50 - background-image: url("data:image/svg+xml;utf8,<svg fill='#3f3f3f' version='1.1' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'><path d='M32 7.075c-1.175 0.525-2.444 0.875-3.769 1.031 1.356-0.813 2.394-2.1 2.887-3.631-1.269 0.75-2.675 1.3-4.169 1.594-1.2-1.275-2.906-2.069-4.794-2.069-3.625 0-6.563 2.938-6.563 6.563 0 0.512 0.056 1.012 0.169 1.494-5.456-0.275-10.294-2.888-13.531-6.862-0.563 0.969-0.887 2.1-0.887 3.3 0 2.275 1.156 4.287 2.919 5.463-1.075-0.031-2.087-0.331-2.975-0.819 0 0.025 0 0.056 0 0.081 0 3.181 2.263 5.838 5.269 6.437-0.55 0.15-1.131 0.231-1.731 0.231-0.425 0-0.831-0.044-1.237-0.119 0.838 2.606 3.263 4.506 6.131 4.563-2.25 1.762-5.075 2.813-8.156 2.813-0.531 0-1.050-0.031-1.569-0.094 2.913 1.869 6.362 2.95 10.069 2.95 12.075 0 18.681-10.006 18.681-18.681 0-0.287-0.006-0.569-0.019-0.85 1.281-0.919 2.394-2.075 3.275-3.394z'></path></svg>"); } 53 + background-image: url('data:image/svg+xml;utf8,<svg fill="%233f3f3f" version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><path d="M32 7.075c-1.175 0.525-2.444 0.875-3.769 1.031 1.356-0.813 2.394-2.1 2.887-3.631-1.269 0.75-2.675 1.3-4.169 1.594-1.2-1.275-2.906-2.069-4.794-2.069-3.625 0-6.563 2.938-6.563 6.563 0 0.512 0.056 1.012 0.169 1.494-5.456-0.275-10.294-2.888-13.531-6.862-0.563 0.969-0.887 2.1-0.887 3.3 0 2.275 1.156 4.287 2.919 5.463-1.075-0.031-2.087-0.331-2.975-0.819 0 0.025 0 0.056 0 0.081 0 3.181 2.263 5.838 5.269 6.437-0.55 0.15-1.131 0.231-1.731 0.231-0.425 0-0.831-0.044-1.237-0.119 0.838 2.606 3.263 4.506 6.131 4.563-2.25 1.762-5.075 2.813-8.156 2.813-0.531 0-1.050-0.031-1.569-0.094 2.913 1.869 6.362 2.95 10.069 2.95 12.075 0 18.681-10.006 18.681-18.681 0-0.287-0.006-0.569-0.019-0.85 1.281-0.919 2.394-2.075 3.275-3.394z"></path></svg>'); } 51 54 .social-media a.discord { 52 - background-image: url("data:image/svg+xml;utf8,<svg fill='#3f3f3f' version='1.1' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'><path d='M26.963 0c1.875 0 3.387 1.516 3.476 3.3v28.7l-3.569-3.031-1.96-1.784-2.139-1.864 0.893 2.94h-18.717c-1.869 0-3.387-1.42-3.387-3.301v-21.653c0-1.784 1.52-3.303 3.393-3.303l22.009-0.004zM18.805 7.577h-0.040l-0.269 0.267c2.764 0.8 4.101 2.049 4.101 2.049-1.781-0.891-3.387-1.336-4.992-1.516-1.16-0.18-2.32-0.085-3.3 0h-0.267c-0.627 0-1.96 0.267-3.747 0.98-0.623 0.271-0.98 0.448-0.98 0.448s1.336-1.336 4.28-2.049l-0.18-0.18s-2.229-0.085-4.636 1.693c0 0-2.407 4.192-2.407 9.36 0 0 1.333 2.32 4.991 2.408 0 0 0.533-0.711 1.073-1.336-2.053-0.624-2.853-1.872-2.853-1.872s0.179 0.088 0.447 0.267h0.080c0.040 0 0.059 0.020 0.080 0.040v0.008c0.021 0.021 0.040 0.040 0.080 0.040 0.44 0.181 0.88 0.36 1.24 0.533 0.621 0.269 1.42 0.537 2.4 0.715 1.24 0.18 2.661 0.267 4.28 0 0.8-0.18 1.6-0.356 2.4-0.713 0.52-0.267 1.16-0.533 1.863-0.983 0 0-0.8 1.248-2.94 1.872 0.44 0.621 1.060 1.333 1.060 1.333 3.659-0.080 5.080-2.4 5.16-2.301 0-5.16-2.42-9.36-2.42-9.36-2.18-1.619-4.22-1.68-4.58-1.68l0.075-0.027zM19.029 13.461c0.937 0 1.693 0.8 1.693 1.78 0 0.987-0.76 1.787-1.693 1.787s-1.693-0.8-1.693-1.779c0.003-0.987 0.764-1.784 1.693-1.784zM12.972 13.461c0.933 0 1.688 0.8 1.688 1.78 0 0.987-0.76 1.787-1.693 1.787s-1.693-0.8-1.693-1.779c0-0.987 0.76-1.784 1.693-1.784z'></path></svg>"); } 55 + background-image: url('data:image/svg+xml;utf8,<svg fill="%233f3f3f" version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><path d="M26.963 0c1.875 0 3.387 1.516 3.476 3.3v28.7l-3.569-3.031-1.96-1.784-2.139-1.864 0.893 2.94h-18.717c-1.869 0-3.387-1.42-3.387-3.301v-21.653c0-1.784 1.52-3.303 3.393-3.303l22.009-0.004zM18.805 7.577h-0.040l-0.269 0.267c2.764 0.8 4.101 2.049 4.101 2.049-1.781-0.891-3.387-1.336-4.992-1.516-1.16-0.18-2.32-0.085-3.3 0h-0.267c-0.627 0-1.96 0.267-3.747 0.98-0.623 0.271-0.98 0.448-0.98 0.448s1.336-1.336 4.28-2.049l-0.18-0.18s-2.229-0.085-4.636 1.693c0 0-2.407 4.192-2.407 9.36 0 0 1.333 2.32 4.991 2.408 0 0 0.533-0.711 1.073-1.336-2.053-0.624-2.853-1.872-2.853-1.872s0.179 0.088 0.447 0.267h0.080c0.040 0 0.059 0.020 0.080 0.040v0.008c0.021 0.021 0.040 0.040 0.080 0.040 0.44 0.181 0.88 0.36 1.24 0.533 0.621 0.269 1.42 0.537 2.4 0.715 1.24 0.18 2.661 0.267 4.28 0 0.8-0.18 1.6-0.356 2.4-0.713 0.52-0.267 1.16-0.533 1.863-0.983 0 0-0.8 1.248-2.94 1.872 0.44 0.621 1.060 1.333 1.060 1.333 3.659-0.080 5.080-2.4 5.16-2.301 0-5.16-2.42-9.36-2.42-9.36-2.18-1.619-4.22-1.68-4.58-1.68l0.075-0.027zM19.029 13.461c0.937 0 1.693 0.8 1.693 1.78 0 0.987-0.76 1.787-1.693 1.787s-1.693-0.8-1.693-1.779c0.003-0.987 0.764-1.784 1.693-1.784zM12.972 13.461c0.933 0 1.688 0.8 1.688 1.78 0 0.987-0.76 1.787-1.693 1.787s-1.693-0.8-1.693-1.779c0-0.987 0.76-1.784 1.693-1.784z"></path></svg>'); } 53 56 .social-media a.discord input { 54 57 width: 70px; } 55 58 .social-media a.facebook { 56 - background-image: url("data:image/svg+xml;utf8,<svg fill='#3f3f3f' version='1.1' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'><path d='M19 6h5v-6h-5c-3.86 0-7 3.14-7 7v3h-4v6h4v16h6v-16h5l1-6h-6v-3c0-0.542 0.458-1 1-1z'></path></svg>"); } 59 + background-image: url('data:image/svg+xml;utf8,<svg fill="%233f3f3f" version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><path d="M19 6h5v-6h-5c-3.86 0-7 3.14-7 7v3h-4v6h4v16h6v-16h5l1-6h-6v-3c0-0.542 0.458-1 1-1z"></path></svg>'); } 57 60 .social-media a.youtube { 58 - background-image: url("data:image/svg+xml;utf8,<svg fill='#3f3f3f' version='1.1' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'><path d='M31.681 9.6c0 0-0.313-2.206-1.275-3.175-1.219-1.275-2.581-1.281-3.206-1.356-4.475-0.325-11.194-0.325-11.194-0.325h-0.012c0 0-6.719 0-11.194 0.325-0.625 0.075-1.987 0.081-3.206 1.356-0.963 0.969-1.269 3.175-1.269 3.175s-0.319 2.588-0.319 5.181v2.425c0 2.587 0.319 5.181 0.319 5.181s0.313 2.206 1.269 3.175c1.219 1.275 2.819 1.231 3.531 1.369 2.563 0.244 10.881 0.319 10.881 0.319s6.725-0.012 11.2-0.331c0.625-0.075 1.988-0.081 3.206-1.356 0.962-0.969 1.275-3.175 1.275-3.175s0.319-2.587 0.319-5.181v-2.425c-0.006-2.588-0.325-5.181-0.325-5.181zM12.694 20.15v-8.994l8.644 4.513-8.644 4.481z'></path></svg>"); } 61 + background-image: url('data:image/svg+xml;utf8,<svg fill="%233f3f3f" version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><path d="M31.681 9.6c0 0-0.313-2.206-1.275-3.175-1.219-1.275-2.581-1.281-3.206-1.356-4.475-0.325-11.194-0.325-11.194-0.325h-0.012c0 0-6.719 0-11.194 0.325-0.625 0.075-1.987 0.081-3.206 1.356-0.963 0.969-1.269 3.175-1.269 3.175s-0.319 2.588-0.319 5.181v2.425c0 2.587 0.319 5.181 0.319 5.181s0.313 2.206 1.269 3.175c1.219 1.275 2.819 1.231 3.531 1.369 2.563 0.244 10.881 0.319 10.881 0.319s6.725-0.012 11.2-0.331c0.625-0.075 1.988-0.081 3.206-1.356 0.962-0.969 1.275-3.175 1.275-3.175s0.319-2.587 0.319-5.181v-2.425c-0.006-2.588-0.325-5.181-0.325-5.181zM12.694 20.15v-8.994l8.644 4.513-8.644 4.481z"></path></svg>'); } 59 62 .social-media a.soundcloud { 60 - background-image: url("data:image/svg+xml;utf8,<svg fill='#3f3f3f' version='1.1' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'><path d='M27.874 16.069c-0.565 0-1.105 0.11-1.596 0.308-0.328-3.574-3.447-6.377-7.25-6.377-0.931 0-1.834 0.176-2.635 0.474-0.311 0.116-0.393 0.235-0.393 0.466v12.585c0 0.243 0.195 0.445 0.441 0.469 0.011 0.001 11.36 0.007 11.434 0.007 2.278 0 4.125-1.776 4.125-3.965s-1.848-3.966-4.126-3.966zM12.5 24h1l0.5-7.007-0.5-6.993h-1l-0.5 6.993zM9.5 24h-1l-0.5-5.086 0.5-4.914h1l0.5 5zM4.5 24h1l0.5-4-0.5-4h-1l-0.5 4zM0.5 22h1l0.5-2-0.5-2h-1l-0.5 2z'></path></svg>"); } 63 + background-image: url('data:image/svg+xml;utf8,<svg fill="%233f3f3f" version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><path d="M27.874 16.069c-0.565 0-1.105 0.11-1.596 0.308-0.328-3.574-3.447-6.377-7.25-6.377-0.931 0-1.834 0.176-2.635 0.474-0.311 0.116-0.393 0.235-0.393 0.466v12.585c0 0.243 0.195 0.445 0.441 0.469 0.011 0.001 11.36 0.007 11.434 0.007 2.278 0 4.125-1.776 4.125-3.965s-1.848-3.966-4.126-3.966zM12.5 24h1l0.5-7.007-0.5-6.993h-1l-0.5 6.993zM9.5 24h-1l-0.5-5.086 0.5-4.914h1l0.5 5zM4.5 24h1l0.5-4-0.5-4h-1l-0.5 4zM0.5 22h1l0.5-2-0.5-2h-1l-0.5 2z"></path></svg>'); } 61 64 .social-media a.github { 62 - background-image: url("data:image/svg+xml;utf8,<svg fill='#3f3f3f' version='1.1' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'><path d='M16 0.395c-8.836 0-16 7.163-16 16 0 7.069 4.585 13.067 10.942 15.182 0.8 0.148 1.094-0.347 1.094-0.77 0-0.381-0.015-1.642-0.022-2.979-4.452 0.968-5.391-1.888-5.391-1.888-0.728-1.849-1.776-2.341-1.776-2.341-1.452-0.993 0.11-0.973 0.11-0.973 1.606 0.113 2.452 1.649 2.452 1.649 1.427 2.446 3.743 1.739 4.656 1.33 0.143-1.034 0.558-1.74 1.016-2.14-3.554-0.404-7.29-1.777-7.29-7.907 0-1.747 0.625-3.174 1.649-4.295-0.166-0.403-0.714-2.030 0.155-4.234 0 0 1.344-0.43 4.401 1.64 1.276-0.355 2.645-0.532 4.005-0.539 1.359 0.006 2.729 0.184 4.008 0.539 3.054-2.070 4.395-1.64 4.395-1.64 0.871 2.204 0.323 3.831 0.157 4.234 1.026 1.12 1.647 2.548 1.647 4.295 0 6.145-3.743 7.498-7.306 7.895 0.574 0.497 1.085 1.47 1.085 2.963 0 2.141-0.019 3.864-0.019 4.391 0 0.426 0.288 0.925 1.099 0.768 6.354-2.118 10.933-8.113 10.933-15.18 0-8.837-7.164-16-16-16z'></path></svg>"); } 65 + background-image: url('data:image/svg+xml;utf8,<svg fill="%233f3f3f" version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><path d="M16 0.395c-8.836 0-16 7.163-16 16 0 7.069 4.585 13.067 10.942 15.182 0.8 0.148 1.094-0.347 1.094-0.77 0-0.381-0.015-1.642-0.022-2.979-4.452 0.968-5.391-1.888-5.391-1.888-0.728-1.849-1.776-2.341-1.776-2.341-1.452-0.993 0.11-0.973 0.11-0.973 1.606 0.113 2.452 1.649 2.452 1.649 1.427 2.446 3.743 1.739 4.656 1.33 0.143-1.034 0.558-1.74 1.016-2.14-3.554-0.404-7.29-1.777-7.29-7.907 0-1.747 0.625-3.174 1.649-4.295-0.166-0.403-0.714-2.030 0.155-4.234 0 0 1.344-0.43 4.401 1.64 1.276-0.355 2.645-0.532 4.005-0.539 1.359 0.006 2.729 0.184 4.008 0.539 3.054-2.070 4.395-1.64 4.395-1.64 0.871 2.204 0.323 3.831 0.157 4.234 1.026 1.12 1.647 2.548 1.647 4.295 0 6.145-3.743 7.498-7.306 7.895 0.574 0.497 1.085 1.47 1.085 2.963 0 2.141-0.019 3.864-0.019 4.391 0 0.426 0.288 0.925 1.099 0.768 6.354-2.118 10.933-8.113 10.933-15.18 0-8.837-7.164-16-16-16z"></path></svg>'); } 63 66 .social-media a.instagram { 64 - background-image: url("data:image/svg+xml;utf8,<svg fill='#3f3f3f' version='1.1' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'><path d='M16 2.881c4.275 0 4.781 0.019 6.462 0.094 1.563 0.069 2.406 0.331 2.969 0.55 0.744 0.288 1.281 0.638 1.837 1.194 0.563 0.563 0.906 1.094 1.2 1.838 0.219 0.563 0.481 1.412 0.55 2.969 0.075 1.688 0.094 2.194 0.094 6.463s-0.019 4.781-0.094 6.463c-0.069 1.563-0.331 2.406-0.55 2.969-0.288 0.744-0.637 1.281-1.194 1.837-0.563 0.563-1.094 0.906-1.837 1.2-0.563 0.219-1.413 0.481-2.969 0.55-1.688 0.075-2.194 0.094-6.463 0.094s-4.781-0.019-6.463-0.094c-1.563-0.069-2.406-0.331-2.969-0.55-0.744-0.288-1.281-0.637-1.838-1.194-0.563-0.563-0.906-1.094-1.2-1.837-0.219-0.563-0.481-1.413-0.55-2.969-0.075-1.688-0.094-2.194-0.094-6.463s0.019-4.781 0.094-6.463c0.069-1.563 0.331-2.406 0.55-2.969 0.288-0.744 0.638-1.281 1.194-1.838 0.563-0.563 1.094-0.906 1.838-1.2 0.563-0.219 1.412-0.481 2.969-0.55 1.681-0.075 2.188-0.094 6.463-0.094zM16 0c-4.344 0-4.887 0.019-6.594 0.094-1.7 0.075-2.869 0.35-3.881 0.744-1.056 0.412-1.95 0.956-2.837 1.85-0.894 0.888-1.438 1.781-1.85 2.831-0.394 1.019-0.669 2.181-0.744 3.881-0.075 1.713-0.094 2.256-0.094 6.6s0.019 4.887 0.094 6.594c0.075 1.7 0.35 2.869 0.744 3.881 0.413 1.056 0.956 1.95 1.85 2.837 0.887 0.887 1.781 1.438 2.831 1.844 1.019 0.394 2.181 0.669 3.881 0.744 1.706 0.075 2.25 0.094 6.594 0.094s4.888-0.019 6.594-0.094c1.7-0.075 2.869-0.35 3.881-0.744 1.050-0.406 1.944-0.956 2.831-1.844s1.438-1.781 1.844-2.831c0.394-1.019 0.669-2.181 0.744-3.881 0.075-1.706 0.094-2.25 0.094-6.594s-0.019-4.887-0.094-6.594c-0.075-1.7-0.35-2.869-0.744-3.881-0.394-1.063-0.938-1.956-1.831-2.844-0.887-0.887-1.781-1.438-2.831-1.844-1.019-0.394-2.181-0.669-3.881-0.744-1.712-0.081-2.256-0.1-6.6-0.1v0z'></path><path d='M16 7.781c-4.537 0-8.219 3.681-8.219 8.219s3.681 8.219 8.219 8.219 8.219-3.681 8.219-8.219c0-4.537-3.681-8.219-8.219-8.219zM16 21.331c-2.944 0-5.331-2.387-5.331-5.331s2.387-5.331 5.331-5.331c2.944 0 5.331 2.387 5.331 5.331s-2.387 5.331-5.331 5.331z'></path><path d='M26.462 7.456c0 1.060-0.859 1.919-1.919 1.919s-1.919-0.859-1.919-1.919c0-1.060 0.859-1.919 1.919-1.919s1.919 0.859 1.919 1.919z'></path></svg>"); } 67 + background-image: url('data:image/svg+xml;utf8,<svg fill="%233f3f3f" version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><path d="M16 2.881c4.275 0 4.781 0.019 6.462 0.094 1.563 0.069 2.406 0.331 2.969 0.55 0.744 0.288 1.281 0.638 1.837 1.194 0.563 0.563 0.906 1.094 1.2 1.838 0.219 0.563 0.481 1.412 0.55 2.969 0.075 1.688 0.094 2.194 0.094 6.463s-0.019 4.781-0.094 6.463c-0.069 1.563-0.331 2.406-0.55 2.969-0.288 0.744-0.637 1.281-1.194 1.837-0.563 0.563-1.094 0.906-1.837 1.2-0.563 0.219-1.413 0.481-2.969 0.55-1.688 0.075-2.194 0.094-6.463 0.094s-4.781-0.019-6.463-0.094c-1.563-0.069-2.406-0.331-2.969-0.55-0.744-0.288-1.281-0.637-1.838-1.194-0.563-0.563-0.906-1.094-1.2-1.837-0.219-0.563-0.481-1.413-0.55-2.969-0.075-1.688-0.094-2.194-0.094-6.463s0.019-4.781 0.094-6.463c0.069-1.563 0.331-2.406 0.55-2.969 0.288-0.744 0.638-1.281 1.194-1.838 0.563-0.563 1.094-0.906 1.838-1.2 0.563-0.219 1.412-0.481 2.969-0.55 1.681-0.075 2.188-0.094 6.463-0.094zM16 0c-4.344 0-4.887 0.019-6.594 0.094-1.7 0.075-2.869 0.35-3.881 0.744-1.056 0.412-1.95 0.956-2.837 1.85-0.894 0.888-1.438 1.781-1.85 2.831-0.394 1.019-0.669 2.181-0.744 3.881-0.075 1.713-0.094 2.256-0.094 6.6s0.019 4.887 0.094 6.594c0.075 1.7 0.35 2.869 0.744 3.881 0.413 1.056 0.956 1.95 1.85 2.837 0.887 0.887 1.781 1.438 2.831 1.844 1.019 0.394 2.181 0.669 3.881 0.744 1.706 0.075 2.25 0.094 6.594 0.094s4.888-0.019 6.594-0.094c1.7-0.075 2.869-0.35 3.881-0.744 1.050-0.406 1.944-0.956 2.831-1.844s1.438-1.781 1.844-2.831c0.394-1.019 0.669-2.181 0.744-3.881 0.075-1.706 0.094-2.25 0.094-6.594s-0.019-4.887-0.094-6.594c-0.075-1.7-0.35-2.869-0.744-3.881-0.394-1.063-0.938-1.956-1.831-2.844-0.887-0.887-1.781-1.438-2.831-1.844-1.019-0.394-2.181-0.669-3.881-0.744-1.712-0.081-2.256-0.1-6.6-0.1v0z"></path><path d="M16 7.781c-4.537 0-8.219 3.681-8.219 8.219s3.681 8.219 8.219 8.219 8.219-3.681 8.219-8.219c0-4.537-3.681-8.219-8.219-8.219zM16 21.331c-2.944 0-5.331-2.387-5.331-5.331s2.387-5.331 5.331-5.331c2.944 0 5.331 2.387 5.331 5.331s-2.387 5.331-5.331 5.331z"></path><path d="M26.462 7.456c0 1.060-0.859 1.919-1.919 1.919s-1.919-0.859-1.919-1.919c0-1.060 0.859-1.919 1.919-1.919s1.919 0.859 1.919 1.919z"></path></svg>'); } 65 68 .social-media a.email { 66 - background-image: url("data:image/svg+xml;utf8,<svg fill='#3f3f3f' version='1.1' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'><path d='M18 2c1.105 0 2 0.895 2 2v0 12c0 1.105-0.895 2-2 2v0h-16c-1.105 0-2-0.895-2-2v0-12c0-1.1 0.9-2 2-2h16zM13.63 11.1l6.37 4.9v-2l-5.12-3.9 5.12-4.1v-2l-10 8-10-8v2l5.12 4.1-5.12 3.9v2l6.37-4.9 3.63 2.9 3.63-2.9z'></path></svg>"); } 69 + background-image: url('data:image/svg+xml;utf8,<svg fill="%233f3f3f" version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path d="M18 2c1.105 0 2 0.895 2 2v0 12c0 1.105-0.895 2-2 2v0h-16c-1.105 0-2-0.895-2-2v0-12c0-1.1 0.9-2 2-2h16zM13.63 11.1l6.37 4.9v-2l-5.12-3.9 5.12-4.1v-2l-10 8-10-8v2l5.12 4.1-5.12 3.9v2l6.37-4.9 3.63 2.9 3.63-2.9z"></path></svg>'); } 67 70 .social-media a.email input { 68 71 width: 170px; } 69 72 .social-media a.has-popup { ··· 110 113 section .header p.title { 111 114 font-size: 26px; 112 115 margin-bottom: 4px; } 113 - section .thumbnails { 116 + section .thumbnails, section .cards { 114 117 width: 100%; 115 118 display: flex; 116 119 flex-wrap: wrap; 117 120 justify-content: space-evenly; } 118 - section .thumbnails a.item { 119 - display: flex; 120 - align-items: center; 121 + section .thumbnails .item, section .cards .item { 122 + border-radius: 10px; 121 123 width: 200px; 122 - height: calc(200px/16*9 - 4px); 123 124 margin: 50px; 124 125 padding: 0px; 125 126 overflow: hidden; 126 127 transition: 0.3s cubic-bezier(0.4, 0, 0.2, 1) -webkit-transform; 127 128 transition: 0.3s cubic-bezier(0.4, 0, 0.2, 1) transform; 128 129 transition: 0.3s cubic-bezier(0.4, 0, 0.2, 1) transform, 0.3s cubic-bezier(0.4, 0, 0.2, 1) -webkit-transform; } 129 - section .thumbnails a.item:hover { 130 + section .thumbnails .item:hover, section .cards .item:hover { 130 131 -webkit-transform: scale(1.1); 131 132 transform: scale(1.1); } 132 - section .thumbnails a.item:hover img { 133 + section .thumbnails .item:hover img, section .cards .item:hover img { 133 134 -webkit-transform: scale(1.3); 134 135 transform: scale(1.3); } 135 - section .thumbnails a.item img { 136 + section .thumbnails .item img, section .cards .item img { 136 137 transition: 1s cubic-bezier(0.4, 0, 0.2, 1) all; 137 - width: 100%; } 138 - section.lacuna .thumbnails a.item { 139 - display: block; 138 + width: 100%; 139 + display: block; } 140 + section.video .item, section.synctan .item { 141 + display: flex; 142 + align-items: center; 143 + height: calc(200px/16*9 - 4px); } 144 + section.lacuna .item { 140 145 height: auto; } 146 + section.github .item { 147 + display: flex; 148 + flex-direction: column; 149 + width: calc(200px + 20px); 150 + margin: calc(50px - 20px/2); 151 + border: 2px solid #ececec; 152 + box-sizing: border-box; 153 + -webkit-backface-visibility: hidden; 154 + backface-visibility: hidden; } 155 + section.github .item:hover { 156 + -webkit-transform: none; 157 + transform: none; } 158 + section.github .item p.title { 159 + margin: 18px; 160 + margin-bottom: 10px; 161 + font-size: 18px; } 162 + section.github .item p.description { 163 + margin: 0px 18px; 164 + font-size: 14px; 165 + color: #5a5a5a; } 166 + section.github .item .urls { 167 + display: flex; 168 + justify-content: flex-end; 169 + margin-top: auto; } 170 + section.github .item .urls a.repo-url, section.github .item .urls a.repo-website { 171 + background-repeat: no-repeat; 172 + background-position: center; 173 + background-size: 22px; 174 + padding: 10px; 175 + cursor: pointer; 176 + display: block; } 177 + section.github .item .urls a.repo-url.hidden, section.github .item .urls a.repo-website.hidden { 178 + display: none; } 179 + section.github .item .repo-url { 180 + height: 26px; 181 + width: 26px; 182 + background-image: url('data:image/svg+xml;utf8,<svg fill="%233f3f3f" version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><path d="M16 0.395c-8.836 0-16 7.163-16 16 0 7.069 4.585 13.067 10.942 15.182 0.8 0.148 1.094-0.347 1.094-0.77 0-0.381-0.015-1.642-0.022-2.979-4.452 0.968-5.391-1.888-5.391-1.888-0.728-1.849-1.776-2.341-1.776-2.341-1.452-0.993 0.11-0.973 0.11-0.973 1.606 0.113 2.452 1.649 2.452 1.649 1.427 2.446 3.743 1.739 4.656 1.33 0.143-1.034 0.558-1.74 1.016-2.14-3.554-0.404-7.29-1.777-7.29-7.907 0-1.747 0.625-3.174 1.649-4.295-0.166-0.403-0.714-2.030 0.155-4.234 0 0 1.344-0.43 4.401 1.64 1.276-0.355 2.645-0.532 4.005-0.539 1.359 0.006 2.729 0.184 4.008 0.539 3.054-2.070 4.395-1.64 4.395-1.64 0.871 2.204 0.323 3.831 0.157 4.234 1.026 1.12 1.647 2.548 1.647 4.295 0 6.145-3.743 7.498-7.306 7.895 0.574 0.497 1.085 1.47 1.085 2.963 0 2.141-0.019 3.864-0.019 4.391 0 0.426 0.288 0.925 1.099 0.768 6.354-2.118 10.933-8.113 10.933-15.18 0-8.837-7.164-16-16-16z"></path></svg>'); } 183 + section.github .item .repo-website { 184 + height: 26px; 185 + width: 26px; 186 + background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M0 0h24v24H0z" fill="none"/><path d="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z"/></svg>'); } 141 187 142 188 .canvas-container { 143 189 position: absolute; ··· 153 199 .canvas-container canvas { 154 200 display: block; } 155 201 156 - /*# sourceMappingURL=data:application/json;charset=utf8;base64,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ZSI6Imdsb2JhbC5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAkZGFyazogIzFEMjEyRFxuJGRhcmtlc3Q6ICMxNDE2MUQ7XG4kc2VsZWN0aW9uLWNvbG9yOiAjZmZmZmZmO1xuJHNlbGVjdGlvbi1iZy1jb2xvcjogIzYyNzNEODtcblxuLy8gdHJhbnNpdGlvbnNcbiR0cmFuc2l0aW9uLTE1OiAgICAgICAgICAgICAuMTVzIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxLjApO1xuXG4kdHJhbnNpdGlvbi0xMDogICAgICAgICAgICAgLjEwcyBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMS4wKTtcbiR0cmFuc2l0aW9uLTEwLWluOiAgICAgICAgICAuMTBzIGN1YmljLWJlemllcigwLjAsIDAuMCwgMC4yLCAxLjApO1xuJHRyYW5zaXRpb24tMTAtb3V0OiAgICAgICAgIC4xMHMgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAxLjAsIDEuMCk7XG5cbiR0cmFuc2l0aW9uLTIwOiAgICAgICAgICAgICAuMjBzIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxLjApO1xuJHRyYW5zaXRpb24tMjAtaW46ICAgICAgICAgIC4yMHMgY3ViaWMtYmV6aWVyKDAuMCwgMC4wLCAwLjIsIDEuMCk7XG4kdHJhbnNpdGlvbi0yMC1vdXQ6ICAgICAgICAgLjIwcyBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDEuMCwgMS4wKTtcblxuJHRyYW5zaXRpb24tMzA6ICAgICAgICAgICAgIC4zMHMgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEuMCk7XG4kdHJhbnNpdGlvbi0zMC1pbjogICAgICAgICAgLjMwcyBjdWJpYy1iZXppZXIoMC4wLCAwLjAsIDAuMiwgMS4wKTtcbiR0cmFuc2l0aW9uLTMwLW91dDogICAgICAgICAuMzBzIGN1YmljLWJlemllcigwLjQsIDAuMCwgMS4wLCAxLjApO1xuXG4kdHJhbnNpdGlvbi00MDogICAgICAgICAgICAgLjQwcyBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMS4wKTtcbiR0cmFuc2l0aW9uLTQwLWluOiAgICAgICAgICAuNDBzIGN1YmljLWJlemllcigwLjAsIDAuMCwgMC4yLCAxLjApO1xuJHRyYW5zaXRpb24tNDAtb3V0OiAgICAgICAgIC40MHMgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAxLjAsIDEuMCk7XG5cbiR0cmFuc2l0aW9uLTEwMDogICAgICAgICAgICAgMXMgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEuMCk7XG5cbmh0bWwge1xuICAgIDo6c2VsZWN0aW9uIHtcbiAgICAgICAgY29sb3I6ICRzZWxlY3Rpb24tY29sb3I7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRzZWxlY3Rpb24tYmctY29sb3I7IH1cbiAgICBib2R5IHtcbiAgICAgICAgZm9udC1mYW1pbHk6IFwiUnViaWtcIiwgc2Fucy1zZXJpZjtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIG1hcmdpbjogMHB4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOyB9IH1cbkBtZWRpYSAobWF4LXdpZHRoOiA2MDBweCkge1xuICAgIGRpdi5zb2NpYWwtbWVkaWEge1xuICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCg0LCAxZnIpOyB9IH1cbkBtZWRpYSAobWF4LXdpZHRoOiA2MDBweCkge1xuICAgIHNlY3Rpb24ge1xuICAgICAgICBkaXYudGh1bWJuYWlscyB7XG4gICAgICAgICAgICBhLml0ZW0ge1xuICAgICAgICAgICAgICAgIC8vIG1hcmdpbjogMzBweFxuICAgICAgICAgICAgICAgIHdpZHRoOiAzMDBweDtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IGNhbGMoMzAwcHgvMTYqOSAtIDRweCk7IH0gfSB9IH1cbnNlY3Rpb24ge1xuICAgIG1heC13aWR0aDogMTAwMHB4OyB9XG4uc29jaWFsLW1lZGlhIHtcbiAgICBkaXNwbGF5OiBncmlkO1xuICAgIGp1c3RpZnktaXRlbXM6IGNlbnRlcjtcbiAgICBncmlkLWdhcDogMjBweDtcbiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCg4LCAxZnIpO1xuICAgIG1hcmdpbjogMTBweCBhdXRvO1xuICAgIG1hcmdpbi1ib3R0b206IDUwcHg7XG4gICAgd2lkdGg6IDEwMDBweDtcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7XG4gICAgYSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB3aWR0aDogMjZweDtcbiAgICAgICAgaGVpZ2h0OiAyNnB4O1xuICAgICAgICBwYWRkaW5nOiAxMHB4O1xuICAgICAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XG4gICAgICAgIGJhY2tncm91bmQtc2l6ZTogMjJweDtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyOyB9XG4gICAgYS50d2l0dGVyIHtcbiAgICAgICAgLy8gYmFja2dyb3VuZC1pbWFnZTogdXJsKFwic3RhdGljL2xvZ29zL3R3aXR0ZXIucG5nXCIpXG4gICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgZmlsbD0nIzNmM2YzZicgdmVyc2lvbj0nMS4xJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCAzMiAzMic+PHBhdGggZD0nTTMyIDcuMDc1Yy0xLjE3NSAwLjUyNS0yLjQ0NCAwLjg3NS0zLjc2OSAxLjAzMSAxLjM1Ni0wLjgxMyAyLjM5NC0yLjEgMi44ODctMy42MzEtMS4yNjkgMC43NS0yLjY3NSAxLjMtNC4xNjkgMS41OTQtMS4yLTEuMjc1LTIuOTA2LTIuMDY5LTQuNzk0LTIuMDY5LTMuNjI1IDAtNi41NjMgMi45MzgtNi41NjMgNi41NjMgMCAwLjUxMiAwLjA1NiAxLjAxMiAwLjE2OSAxLjQ5NC01LjQ1Ni0wLjI3NS0xMC4yOTQtMi44ODgtMTMuNTMxLTYuODYyLTAuNTYzIDAuOTY5LTAuODg3IDIuMS0wLjg4NyAzLjMgMCAyLjI3NSAxLjE1NiA0LjI4NyAyLjkxOSA1LjQ2My0xLjA3NS0wLjAzMS0yLjA4Ny0wLjMzMS0yLjk3NS0wLjgxOSAwIDAuMDI1IDAgMC4wNTYgMCAwLjA4MSAwIDMuMTgxIDIuMjYzIDUuODM4IDUuMjY5IDYuNDM3LTAuNTUgMC4xNS0xLjEzMSAwLjIzMS0xLjczMSAwLjIzMS0wLjQyNSAwLTAuODMxLTAuMDQ0LTEuMjM3LTAuMTE5IDAuODM4IDIuNjA2IDMuMjYzIDQuNTA2IDYuMTMxIDQuNTYzLTIuMjUgMS43NjItNS4wNzUgMi44MTMtOC4xNTYgMi44MTMtMC41MzEgMC0xLjA1MC0wLjAzMS0xLjU2OS0wLjA5NCAyLjkxMyAxLjg2OSA2LjM2MiAyLjk1IDEwLjA2OSAyLjk1IDEyLjA3NSAwIDE4LjY4MS0xMC4wMDYgMTguNjgxLTE4LjY4MSAwLTAuMjg3LTAuMDA2LTAuNTY5LTAuMDE5LTAuODUgMS4yODEtMC45MTkgMi4zOTQtMi4wNzUgMy4yNzUtMy4zOTR6Jz48L3BhdGg+PC9zdmc+XCIpOyB9XG4gICAgYS5kaXNjb3JkIHtcbiAgICAgICAgLy8gYmFja2dyb3VuZC1pbWFnZTogdXJsKFwic3RhdGljL2xvZ29zL2Rpc2NvcmQucG5nXCIpXG4gICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgZmlsbD0nIzNmM2YzZicgdmVyc2lvbj0nMS4xJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCAzMiAzMic+PHBhdGggZD0nTTI2Ljk2MyAwYzEuODc1IDAgMy4zODcgMS41MTYgMy40NzYgMy4zdjI4LjdsLTMuNTY5LTMuMDMxLTEuOTYtMS43ODQtMi4xMzktMS44NjQgMC44OTMgMi45NGgtMTguNzE3Yy0xLjg2OSAwLTMuMzg3LTEuNDItMy4zODctMy4zMDF2LTIxLjY1M2MwLTEuNzg0IDEuNTItMy4zMDMgMy4zOTMtMy4zMDNsMjIuMDA5LTAuMDA0ek0xOC44MDUgNy41NzdoLTAuMDQwbC0wLjI2OSAwLjI2N2MyLjc2NCAwLjggNC4xMDEgMi4wNDkgNC4xMDEgMi4wNDktMS43ODEtMC44OTEtMy4zODctMS4zMzYtNC45OTItMS41MTYtMS4xNi0wLjE4LTIuMzItMC4wODUtMy4zIDBoLTAuMjY3Yy0wLjYyNyAwLTEuOTYgMC4yNjctMy43NDcgMC45OC0wLjYyMyAwLjI3MS0wLjk4IDAuNDQ4LTAuOTggMC40NDhzMS4zMzYtMS4zMzYgNC4yOC0yLjA0OWwtMC4xOC0wLjE4cy0yLjIyOS0wLjA4NS00LjYzNiAxLjY5M2MwIDAtMi40MDcgNC4xOTItMi40MDcgOS4zNiAwIDAgMS4zMzMgMi4zMiA0Ljk5MSAyLjQwOCAwIDAgMC41MzMtMC43MTEgMS4wNzMtMS4zMzYtMi4wNTMtMC42MjQtMi44NTMtMS44NzItMi44NTMtMS44NzJzMC4xNzkgMC4wODggMC40NDcgMC4yNjdoMC4wODBjMC4wNDAgMCAwLjA1OSAwLjAyMCAwLjA4MCAwLjA0MHYwLjAwOGMwLjAyMSAwLjAyMSAwLjA0MCAwLjA0MCAwLjA4MCAwLjA0MCAwLjQ0IDAuMTgxIDAuODggMC4zNiAxLjI0IDAuNTMzIDAuNjIxIDAuMjY5IDEuNDIgMC41MzcgMi40IDAuNzE1IDEuMjQgMC4xOCAyLjY2MSAwLjI2NyA0LjI4IDAgMC44LTAuMTggMS42LTAuMzU2IDIuNC0wLjcxMyAwLjUyLTAuMjY3IDEuMTYtMC41MzMgMS44NjMtMC45ODMgMCAwLTAuOCAxLjI0OC0yLjk0IDEuODcyIDAuNDQgMC42MjEgMS4wNjAgMS4zMzMgMS4wNjAgMS4zMzMgMy42NTktMC4wODAgNS4wODAtMi40IDUuMTYtMi4zMDEgMC01LjE2LTIuNDItOS4zNi0yLjQyLTkuMzYtMi4xOC0xLjYxOS00LjIyLTEuNjgtNC41OC0xLjY4bDAuMDc1LTAuMDI3ek0xOS4wMjkgMTMuNDYxYzAuOTM3IDAgMS42OTMgMC44IDEuNjkzIDEuNzggMCAwLjk4Ny0wLjc2IDEuNzg3LTEuNjkzIDEuNzg3cy0xLjY5My0wLjgtMS42OTMtMS43NzljMC4wMDMtMC45ODcgMC43NjQtMS43ODQgMS42OTMtMS43ODR6TTEyLjk3MiAxMy40NjFjMC45MzMgMCAxLjY4OCAwLjggMS42ODggMS43OCAwIDAuOTg3LTAuNzYgMS43ODctMS42OTMgMS43ODdzLTEuNjkzLTAuOC0xLjY5My0xLjc3OWMwLTAuOTg3IDAuNzYtMS43ODQgMS42OTMtMS43ODR6Jz48L3BhdGg+PC9zdmc+XCIpO1xuICAgICAgICBpbnB1dCB7XG4gICAgICAgICAgICB3aWR0aDogNzBweDsgfSB9XG4gICAgYS5mYWNlYm9vayB7XG4gICAgICAgIC8vIGJhY2tncm91bmQtaW1hZ2U6IHVybChcInN0YXRpYy9sb2dvcy9mYWNlYm9vay5wbmdcIilcbiAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsPHN2ZyBmaWxsPScjM2YzZjNmJyB2ZXJzaW9uPScxLjEnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDMyIDMyJz48cGF0aCBkPSdNMTkgNmg1di02aC01Yy0zLjg2IDAtNyAzLjE0LTcgN3YzaC00djZoNHYxNmg2di0xNmg1bDEtNmgtNnYtM2MwLTAuNTQyIDAuNDU4LTEgMS0xeic+PC9wYXRoPjwvc3ZnPlwiKTsgfVxuICAgIGEueW91dHViZSB7XG4gICAgICAgIC8vIGJhY2tncm91bmQtaW1hZ2U6IHVybChcInN0YXRpYy9sb2dvcy95b3V0dWJlLnBuZ1wiKVxuICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCw8c3ZnIGZpbGw9JyMzZjNmM2YnIHZlcnNpb249JzEuMScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgMzIgMzInPjxwYXRoIGQ9J00zMS42ODEgOS42YzAgMC0wLjMxMy0yLjIwNi0xLjI3NS0zLjE3NS0xLjIxOS0xLjI3NS0yLjU4MS0xLjI4MS0zLjIwNi0xLjM1Ni00LjQ3NS0wLjMyNS0xMS4xOTQtMC4zMjUtMTEuMTk0LTAuMzI1aC0wLjAxMmMwIDAtNi43MTkgMC0xMS4xOTQgMC4zMjUtMC42MjUgMC4wNzUtMS45ODcgMC4wODEtMy4yMDYgMS4zNTYtMC45NjMgMC45NjktMS4yNjkgMy4xNzUtMS4yNjkgMy4xNzVzLTAuMzE5IDIuNTg4LTAuMzE5IDUuMTgxdjIuNDI1YzAgMi41ODcgMC4zMTkgNS4xODEgMC4zMTkgNS4xODFzMC4zMTMgMi4yMDYgMS4yNjkgMy4xNzVjMS4yMTkgMS4yNzUgMi44MTkgMS4yMzEgMy41MzEgMS4zNjkgMi41NjMgMC4yNDQgMTAuODgxIDAuMzE5IDEwLjg4MSAwLjMxOXM2LjcyNS0wLjAxMiAxMS4yLTAuMzMxYzAuNjI1LTAuMDc1IDEuOTg4LTAuMDgxIDMuMjA2LTEuMzU2IDAuOTYyLTAuOTY5IDEuMjc1LTMuMTc1IDEuMjc1LTMuMTc1czAuMzE5LTIuNTg3IDAuMzE5LTUuMTgxdi0yLjQyNWMtMC4wMDYtMi41ODgtMC4zMjUtNS4xODEtMC4zMjUtNS4xODF6TTEyLjY5NCAyMC4xNXYtOC45OTRsOC42NDQgNC41MTMtOC42NDQgNC40ODF6Jz48L3BhdGg+PC9zdmc+XCIpOyB9XG4gICAgYS5zb3VuZGNsb3VkIHtcbiAgICAgICAgLy8gYmFja2dyb3VuZC1pbWFnZTogdXJsKFwic3RhdGljL2xvZ29zL3NvdW5kY2xvdWQucG5nXCIpXG4gICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgZmlsbD0nIzNmM2YzZicgdmVyc2lvbj0nMS4xJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCAzMiAzMic+PHBhdGggZD0nTTI3Ljg3NCAxNi4wNjljLTAuNTY1IDAtMS4xMDUgMC4xMS0xLjU5NiAwLjMwOC0wLjMyOC0zLjU3NC0zLjQ0Ny02LjM3Ny03LjI1LTYuMzc3LTAuOTMxIDAtMS44MzQgMC4xNzYtMi42MzUgMC40NzQtMC4zMTEgMC4xMTYtMC4zOTMgMC4yMzUtMC4zOTMgMC40NjZ2MTIuNTg1YzAgMC4yNDMgMC4xOTUgMC40NDUgMC40NDEgMC40NjkgMC4wMTEgMC4wMDEgMTEuMzYgMC4wMDcgMTEuNDM0IDAuMDA3IDIuMjc4IDAgNC4xMjUtMS43NzYgNC4xMjUtMy45NjVzLTEuODQ4LTMuOTY2LTQuMTI2LTMuOTY2ek0xMi41IDI0aDFsMC41LTcuMDA3LTAuNS02Ljk5M2gtMWwtMC41IDYuOTkzek05LjUgMjRoLTFsLTAuNS01LjA4NiAwLjUtNC45MTRoMWwwLjUgNXpNNC41IDI0aDFsMC41LTQtMC41LTRoLTFsLTAuNSA0ek0wLjUgMjJoMWwwLjUtMi0wLjUtMmgtMWwtMC41IDJ6Jz48L3BhdGg+PC9zdmc+XCIpOyB9XG4gICAgYS5naXRodWIge1xuICAgICAgICAvLyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJzdGF0aWMvbG9nb3MvZ2l0aHViLnBuZ1wiKVxuICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCw8c3ZnIGZpbGw9JyMzZjNmM2YnIHZlcnNpb249JzEuMScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgMzIgMzInPjxwYXRoIGQ9J00xNiAwLjM5NWMtOC44MzYgMC0xNiA3LjE2My0xNiAxNiAwIDcuMDY5IDQuNTg1IDEzLjA2NyAxMC45NDIgMTUuMTgyIDAuOCAwLjE0OCAxLjA5NC0wLjM0NyAxLjA5NC0wLjc3IDAtMC4zODEtMC4wMTUtMS42NDItMC4wMjItMi45NzktNC40NTIgMC45NjgtNS4zOTEtMS44ODgtNS4zOTEtMS44ODgtMC43MjgtMS44NDktMS43NzYtMi4zNDEtMS43NzYtMi4zNDEtMS40NTItMC45OTMgMC4xMS0wLjk3MyAwLjExLTAuOTczIDEuNjA2IDAuMTEzIDIuNDUyIDEuNjQ5IDIuNDUyIDEuNjQ5IDEuNDI3IDIuNDQ2IDMuNzQzIDEuNzM5IDQuNjU2IDEuMzMgMC4xNDMtMS4wMzQgMC41NTgtMS43NCAxLjAxNi0yLjE0LTMuNTU0LTAuNDA0LTcuMjktMS43NzctNy4yOS03LjkwNyAwLTEuNzQ3IDAuNjI1LTMuMTc0IDEuNjQ5LTQuMjk1LTAuMTY2LTAuNDAzLTAuNzE0LTIuMDMwIDAuMTU1LTQuMjM0IDAgMCAxLjM0NC0wLjQzIDQuNDAxIDEuNjQgMS4yNzYtMC4zNTUgMi42NDUtMC41MzIgNC4wMDUtMC41MzkgMS4zNTkgMC4wMDYgMi43MjkgMC4xODQgNC4wMDggMC41MzkgMy4wNTQtMi4wNzAgNC4zOTUtMS42NCA0LjM5NS0xLjY0IDAuODcxIDIuMjA0IDAuMzIzIDMuODMxIDAuMTU3IDQuMjM0IDEuMDI2IDEuMTIgMS42NDcgMi41NDggMS42NDcgNC4yOTUgMCA2LjE0NS0zLjc0MyA3LjQ5OC03LjMwNiA3Ljg5NSAwLjU3NCAwLjQ5NyAxLjA4NSAxLjQ3IDEuMDg1IDIuOTYzIDAgMi4xNDEtMC4wMTkgMy44NjQtMC4wMTkgNC4zOTEgMCAwLjQyNiAwLjI4OCAwLjkyNSAxLjA5OSAwLjc2OCA2LjM1NC0yLjExOCAxMC45MzMtOC4xMTMgMTAuOTMzLTE1LjE4IDAtOC44MzctNy4xNjQtMTYtMTYtMTZ6Jz48L3BhdGg+PC9zdmc+XCIpOyB9XG4gICAgYS5pbnN0YWdyYW0ge1xuICAgICAgICAvLyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJzdGF0aWMvbG9nb3MvaW5zdGFncmFtLnBuZ1wiKVxuICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCw8c3ZnIGZpbGw9JyMzZjNmM2YnIHZlcnNpb249JzEuMScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgMzIgMzInPjxwYXRoIGQ9J00xNiAyLjg4MWM0LjI3NSAwIDQuNzgxIDAuMDE5IDYuNDYyIDAuMDk0IDEuNTYzIDAuMDY5IDIuNDA2IDAuMzMxIDIuOTY5IDAuNTUgMC43NDQgMC4yODggMS4yODEgMC42MzggMS44MzcgMS4xOTQgMC41NjMgMC41NjMgMC45MDYgMS4wOTQgMS4yIDEuODM4IDAuMjE5IDAuNTYzIDAuNDgxIDEuNDEyIDAuNTUgMi45NjkgMC4wNzUgMS42ODggMC4wOTQgMi4xOTQgMC4wOTQgNi40NjNzLTAuMDE5IDQuNzgxLTAuMDk0IDYuNDYzYy0wLjA2OSAxLjU2My0wLjMzMSAyLjQwNi0wLjU1IDIuOTY5LTAuMjg4IDAuNzQ0LTAuNjM3IDEuMjgxLTEuMTk0IDEuODM3LTAuNTYzIDAuNTYzLTEuMDk0IDAuOTA2LTEuODM3IDEuMi0wLjU2MyAwLjIxOS0xLjQxMyAwLjQ4MS0yLjk2OSAwLjU1LTEuNjg4IDAuMDc1LTIuMTk0IDAuMDk0LTYuNDYzIDAuMDk0cy00Ljc4MS0wLjAxOS02LjQ2My0wLjA5NGMtMS41NjMtMC4wNjktMi40MDYtMC4zMzEtMi45NjktMC41NS0wLjc0NC0wLjI4OC0xLjI4MS0wLjYzNy0xLjgzOC0xLjE5NC0wLjU2My0wLjU2My0wLjkwNi0xLjA5NC0xLjItMS44MzctMC4yMTktMC41NjMtMC40ODEtMS40MTMtMC41NS0yLjk2OS0wLjA3NS0xLjY4OC0wLjA5NC0yLjE5NC0wLjA5NC02LjQ2M3MwLjAxOS00Ljc4MSAwLjA5NC02LjQ2M2MwLjA2OS0xLjU2MyAwLjMzMS0yLjQwNiAwLjU1LTIuOTY5IDAuMjg4LTAuNzQ0IDAuNjM4LTEuMjgxIDEuMTk0LTEuODM4IDAuNTYzLTAuNTYzIDEuMDk0LTAuOTA2IDEuODM4LTEuMiAwLjU2My0wLjIxOSAxLjQxMi0wLjQ4MSAyLjk2OS0wLjU1IDEuNjgxLTAuMDc1IDIuMTg4LTAuMDk0IDYuNDYzLTAuMDk0ek0xNiAwYy00LjM0NCAwLTQuODg3IDAuMDE5LTYuNTk0IDAuMDk0LTEuNyAwLjA3NS0yLjg2OSAwLjM1LTMuODgxIDAuNzQ0LTEuMDU2IDAuNDEyLTEuOTUgMC45NTYtMi44MzcgMS44NS0wLjg5NCAwLjg4OC0xLjQzOCAxLjc4MS0xLjg1IDIuODMxLTAuMzk0IDEuMDE5LTAuNjY5IDIuMTgxLTAuNzQ0IDMuODgxLTAuMDc1IDEuNzEzLTAuMDk0IDIuMjU2LTAuMDk0IDYuNnMwLjAxOSA0Ljg4NyAwLjA5NCA2LjU5NGMwLjA3NSAxLjcgMC4zNSAyLjg2OSAwLjc0NCAzLjg4MSAwLjQxMyAxLjA1NiAwLjk1NiAxLjk1IDEuODUgMi44MzcgMC44ODcgMC44ODcgMS43ODEgMS40MzggMi44MzEgMS44NDQgMS4wMTkgMC4zOTQgMi4xODEgMC42NjkgMy44ODEgMC43NDQgMS43MDYgMC4wNzUgMi4yNSAwLjA5NCA2LjU5NCAwLjA5NHM0Ljg4OC0wLjAxOSA2LjU5NC0wLjA5NGMxLjctMC4wNzUgMi44NjktMC4zNSAzLjg4MS0wLjc0NCAxLjA1MC0wLjQwNiAxLjk0NC0wLjk1NiAyLjgzMS0xLjg0NHMxLjQzOC0xLjc4MSAxLjg0NC0yLjgzMWMwLjM5NC0xLjAxOSAwLjY2OS0yLjE4MSAwLjc0NC0zLjg4MSAwLjA3NS0xLjcwNiAwLjA5NC0yLjI1IDAuMDk0LTYuNTk0cy0wLjAxOS00Ljg4Ny0wLjA5NC02LjU5NGMtMC4wNzUtMS43LTAuMzUtMi44NjktMC43NDQtMy44ODEtMC4zOTQtMS4wNjMtMC45MzgtMS45NTYtMS44MzEtMi44NDQtMC44ODctMC44ODctMS43ODEtMS40MzgtMi44MzEtMS44NDQtMS4wMTktMC4zOTQtMi4xODEtMC42NjktMy44ODEtMC43NDQtMS43MTItMC4wODEtMi4yNTYtMC4xLTYuNi0wLjF2MHonPjwvcGF0aD48cGF0aCBkPSdNMTYgNy43ODFjLTQuNTM3IDAtOC4yMTkgMy42ODEtOC4yMTkgOC4yMTlzMy42ODEgOC4yMTkgOC4yMTkgOC4yMTkgOC4yMTktMy42ODEgOC4yMTktOC4yMTljMC00LjUzNy0zLjY4MS04LjIxOS04LjIxOS04LjIxOXpNMTYgMjEuMzMxYy0yLjk0NCAwLTUuMzMxLTIuMzg3LTUuMzMxLTUuMzMxczIuMzg3LTUuMzMxIDUuMzMxLTUuMzMxYzIuOTQ0IDAgNS4zMzEgMi4zODcgNS4zMzEgNS4zMzFzLTIuMzg3IDUuMzMxLTUuMzMxIDUuMzMxeic+PC9wYXRoPjxwYXRoIGQ9J00yNi40NjIgNy40NTZjMCAxLjA2MC0wLjg1OSAxLjkxOS0xLjkxOSAxLjkxOXMtMS45MTktMC44NTktMS45MTktMS45MTljMC0xLjA2MCAwLjg1OS0xLjkxOSAxLjkxOS0xLjkxOXMxLjkxOSAwLjg1OSAxLjkxOSAxLjkxOXonPjwvcGF0aD48L3N2Zz5cIik7IH1cbiAgICBhLmVtYWlsIHtcbiAgICAgICAgLy8gYmFja2dyb3VuZC1pbWFnZTogdXJsKFwic3RhdGljL2xvZ29zL2VtYWlsLnBuZ1wiKVxuICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCw8c3ZnIGZpbGw9JyMzZjNmM2YnIHZlcnNpb249JzEuMScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgMjAgMjAnPjxwYXRoIGQ9J00xOCAyYzEuMTA1IDAgMiAwLjg5NSAyIDJ2MCAxMmMwIDEuMTA1LTAuODk1IDItMiAydjBoLTE2Yy0xLjEwNSAwLTItMC44OTUtMi0ydjAtMTJjMC0xLjEgMC45LTIgMi0yaDE2ek0xMy42MyAxMS4xbDYuMzcgNC45di0ybC01LjEyLTMuOSA1LjEyLTQuMXYtMmwtMTAgOC0xMC04djJsNS4xMiA0LjEtNS4xMiAzLjl2Mmw2LjM3LTQuOSAzLjYzIDIuOSAzLjYzLTIuOXonPjwvcGF0aD48L3N2Zz5cIik7XG4gICAgICAgIGlucHV0IHtcbiAgICAgICAgICAgIHdpZHRoOiAxNzBweDsgfSB9XG4gICAgYS5oYXMtcG9wdXAge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIGlucHV0LnBvcHVwIHtcbiAgICAgICAgICAgICYuaGlkZGVuIHtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtMTBweCkgc2NhbGUoMC41KTtcbiAgICAgICAgICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgICAgICAgICAgICBvcGFjaXR5OiAwOyB9XG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiBcIlJ1YmlrXCIsIHNhbnMtc2VyaWY7XG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICB0cmFuc2l0aW9uOiAkdHJhbnNpdGlvbi0yMCBhbGw7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAwcHgpO1xuICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgICAgICAgIGNvbG9yOiAkZGFya2VzdDtcbiAgICAgICAgICAgIHRvcDogMTAwJTtcbiAgICAgICAgICAgIGxlZnQ6IDUwJTtcbiAgICAgICAgICAgIHBhZGRpbmc6IDVweDtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OyB9IH0gfVxuLmxvZ28ge1xuICAgIG1hcmdpbjogNTBweDtcbiAgICB3aWR0aDogMTUwcHg7XG4gICAgaGVpZ2h0OiAxNTBweDsgfVxuc2VjdGlvbiB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luLWJvdHRvbTogNTBweDtcbiAgICB0cmFuc2l0aW9uOiAkdHJhbnNpdGlvbi00MCBhbGw7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAmLmhpZGRlbiB7XG4gICAgICAgIG9wYWNpdHk6IDA7IH1cbiAgICAuaGVhZGVyIHtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIHAge1xuICAgICAgICAgICAgbWFyZ2luOiBhdXRvO1xuICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyB9XG4gICAgICAgIHAudGl0bGUge1xuICAgICAgICAgICAgZm9udC1zaXplOiAyNnB4O1xuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4OyB9XG4gICAgICAgIHAuZGVzY3JpcHRpb24ge30gfVxuICAgIC50aHVtYm5haWxzIHtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1ldmVubHk7XG4gICAgICAgIC8vIGNoYW5nZSBmcm9tIGZsZXggdG8gZ3JpZFxuICAgICAgICBhLml0ZW0ge1xuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgICAgICB3aWR0aDogMjAwcHg7XG4gICAgICAgICAgICBoZWlnaHQ6IGNhbGMoMjAwcHgvMTYqOSAtIDRweCk7XG4gICAgICAgICAgICBtYXJnaW46IDUwcHg7XG4gICAgICAgICAgICBwYWRkaW5nOiAwcHg7XG4gICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgICAgdHJhbnNpdGlvbjogJHRyYW5zaXRpb24tMzAgdHJhbnNmb3JtO1xuICAgICAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjEpO1xuICAgICAgICAgICAgICAgIGltZyB7XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4zKTsgfSB9XG4gICAgICAgICAgICBpbWcge1xuICAgICAgICAgICAgICAgIHRyYW5zaXRpb246ICR0cmFuc2l0aW9uLTEwMCBhbGw7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7IH0gfSB9XG4gICAgJi5sYWN1bmEge1xuICAgICAgICAudGh1bWJuYWlscyB7XG4gICAgICAgICAgICBhLml0ZW0ge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgICAgIGhlaWdodDogYXV0bzsgfSB9IH0gfVxuLmNhbnZhcy1jb250YWluZXIge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDBweDtcbiAgICBsZWZ0OiAwcHg7XG4gICAgei1pbmRleDogLTE7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcbiAgICB0cmFuc2l0aW9uOiAkdHJhbnNpdGlvbi0xMDAgb3BhY2l0eTtcbiAgICAmLmhpZGRlbiB7XG4gICAgICAgIG9wYWNpdHk6IDA7IH1cbiAgICBjYW52YXMge1xuICAgICAgICBkaXNwbGF5OiBibG9jazsgfSB9XG4iXX0= */ 202 + /*# sourceMappingURL=data:application/json;charset=utf8;base64,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QUEzQiw0QkFBMkIsRUErQjRYO0lBbkZuYTtNQXNEZ0Isd0JBQWU7TUFBZixnQkFBZSxFQUFHO0lBdERsQztNQXdEZ0IsYUFBWTtNQUNaLG9CQUFtQjtNQUNuQixnQkFBZSxFQUFHO0lBMURsQztNQTREZ0IsaUJBQWdCO01BQ2hCLGdCQUFlO01BQ2YsZUFBYyxFQUFHO0lBOURqQztNQWdFZ0IsY0FBYTtNQUNiLDBCQUF5QjtNQUN6QixpQkFBZ0IsRUFTWTtNQTNFNUM7UUFvRW9CLDZCQUE0QjtRQUM1Qiw0QkFBMkI7UUFDM0Isc0JBQXFCO1FBQ3JCLGNBQWE7UUFDYixnQkFBZTtRQUNmLGVBQWMsRUFFUTtRQTNFMUM7VUEyRXdCLGNBQWEsRUFBRztJQTNFeEM7TUE2RWdCLGFBQVk7TUFDWixZQUFXO01BQ1gsKytCQUE4K0IsRUFBRztJQS9FamdDO01BaUZnQixhQUFZO01BQ1osWUFBVztNQUNYLCtZQUE4WSxFQUFHOztBQUVqYTtFQUNJLG1CQUFrQjtFQUNsQixTQUFRO0VBQ1IsVUFBUztFQUNULFlBQVc7RUFDWCxZQUFXO0VBQ1gsa0NBQXlCO0VBQXpCLDBCQUF5QjtFQUN6QixvREFBbUMsRUFJWjtFQVgzQjtJQVNRLFdBQVUsRUFBRztFQVRyQjtJQVdRLGVBQWMsRUFBRyIsImZpbGUiOiJnbG9iYWwuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gJGRhcms6ICMxRDIxMkRcbiRkYXJrZXN0OiAjMTQxNjFEO1xuJHNlbGVjdGlvbi1jb2xvcjogI2ZmZmZmZjtcbiRzZWxlY3Rpb24tYmctY29sb3I6ICM2MjczRDg7XG5cbi8vIHRyYW5zaXRpb25zXG4kdHJhbnNpdGlvbi0xNTogICAgICAgICAgICAgLjE1cyBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMS4wKTtcblxuJHRyYW5zaXRpb24tMTA6ICAgICAgICAgICAgIC4xMHMgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEuMCk7XG4kdHJhbnNpdGlvbi0xMC1pbjogICAgICAgICAgLjEwcyBjdWJpYy1iZXppZXIoMC4wLCAwLjAsIDAuMiwgMS4wKTtcbiR0cmFuc2l0aW9uLTEwLW91dDogICAgICAgICAuMTBzIGN1YmljLWJlemllcigwLjQsIDAuMCwgMS4wLCAxLjApO1xuXG4kdHJhbnNpdGlvbi0yMDogICAgICAgICAgICAgLjIwcyBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMS4wKTtcbiR0cmFuc2l0aW9uLTIwLWluOiAgICAgICAgICAuMjBzIGN1YmljLWJlemllcigwLjAsIDAuMCwgMC4yLCAxLjApO1xuJHRyYW5zaXRpb24tMjAtb3V0OiAgICAgICAgIC4yMHMgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAxLjAsIDEuMCk7XG5cbiR0cmFuc2l0aW9uLTMwOiAgICAgICAgICAgICAuMzBzIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxLjApO1xuJHRyYW5zaXRpb24tMzAtaW46ICAgICAgICAgIC4zMHMgY3ViaWMtYmV6aWVyKDAuMCwgMC4wLCAwLjIsIDEuMCk7XG4kdHJhbnNpdGlvbi0zMC1vdXQ6ICAgICAgICAgLjMwcyBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDEuMCwgMS4wKTtcblxuJHRyYW5zaXRpb24tNDA6ICAgICAgICAgICAgIC40MHMgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEuMCk7XG4kdHJhbnNpdGlvbi00MC1pbjogICAgICAgICAgLjQwcyBjdWJpYy1iZXppZXIoMC4wLCAwLjAsIDAuMiwgMS4wKTtcbiR0cmFuc2l0aW9uLTQwLW91dDogICAgICAgICAuNDBzIGN1YmljLWJlemllcigwLjQsIDAuMCwgMS4wLCAxLjApO1xuXG4kdHJhbnNpdGlvbi0xMDA6ICAgICAgICAgICAgIDFzIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxLjApO1xuXG5odG1sIHtcbiAgICA6OnNlbGVjdGlvbiB7XG4gICAgICAgIGNvbG9yOiAkc2VsZWN0aW9uLWNvbG9yO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkc2VsZWN0aW9uLWJnLWNvbG9yOyB9XG4gICAgYm9keSB7XG4gICAgICAgIGZvbnQtZmFtaWx5OiBcIlJ1YmlrXCIsIHNhbnMtc2VyaWY7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBtYXJnaW46IDBweDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsgfSB9XG5AbWVkaWEgKG1heC13aWR0aDogNjAwcHgpIHtcbiAgICBkaXYuc29jaWFsLW1lZGlhIHtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoNCwgMWZyKTsgfSB9XG5AbWVkaWEgKG1heC13aWR0aDogNjAwcHgpIHtcbiAgICBzZWN0aW9uIHtcbiAgICAgICAgZGl2LnRodW1ibmFpbHMgLml0ZW0sIGRpdi5jYXJkcyAuaXRlbSB7XG4gICAgICAgICAgICB3aWR0aDogMzAwcHg7IH0gfVxuICAgIHNlY3Rpb24udmlkZW8sIHNlY3Rpb24uc3luY3RhbiB7XG4gICAgICAgIGRpdi50aHVtYm5haWxzIC5pdGVtIHtcbiAgICAgICAgICAgIGhlaWdodDogY2FsYygzMDBweC8xNio5IC0gNHB4KTsgfSB9XG4gICAgc2VjdGlvbi5naXRodWIgZGl2LmNhcmRzIHtcbiAgICAgICAgLml0ZW0ge1xuICAgICAgICAgICAgcGFkZGluZzogMTBweDsgfSB9IH1cbnNlY3Rpb24ge1xuICAgIG1heC13aWR0aDogMTAwMHB4OyB9XG4uc29jaWFsLW1lZGlhIHtcbiAgICBkaXNwbGF5OiBncmlkO1xuICAgIGp1c3RpZnktaXRlbXM6IGNlbnRlcjtcbiAgICBncmlkLWdhcDogMjBweDtcbiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCg4LCAxZnIpO1xuICAgIG1hcmdpbjogMTBweCBhdXRvO1xuICAgIG1hcmdpbi1ib3R0b206IDUwcHg7XG4gICAgd2lkdGg6IDEwMDBweDtcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7XG4gICAgYSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB3aWR0aDogMjZweDtcbiAgICAgICAgaGVpZ2h0OiAyNnB4O1xuICAgICAgICBwYWRkaW5nOiAxMHB4O1xuICAgICAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XG4gICAgICAgIGJhY2tncm91bmQtc2l6ZTogMjJweDtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyOyB9XG4gICAgYS50d2l0dGVyIHtcbiAgICAgICAgLy8gYmFja2dyb3VuZC1pbWFnZTogdXJsKFwic3RhdGljL2xvZ29zL3R3aXR0ZXIucG5nXCIpXG4gICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsPHN2ZyBmaWxsPVwiJTIzM2YzZjNmXCIgdmVyc2lvbj1cIjEuMVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDMyIDMyXCI+PHBhdGggZD1cIk0zMiA3LjA3NWMtMS4xNzUgMC41MjUtMi40NDQgMC44NzUtMy43NjkgMS4wMzEgMS4zNTYtMC44MTMgMi4zOTQtMi4xIDIuODg3LTMuNjMxLTEuMjY5IDAuNzUtMi42NzUgMS4zLTQuMTY5IDEuNTk0LTEuMi0xLjI3NS0yLjkwNi0yLjA2OS00Ljc5NC0yLjA2OS0zLjYyNSAwLTYuNTYzIDIuOTM4LTYuNTYzIDYuNTYzIDAgMC41MTIgMC4wNTYgMS4wMTIgMC4xNjkgMS40OTQtNS40NTYtMC4yNzUtMTAuMjk0LTIuODg4LTEzLjUzMS02Ljg2Mi0wLjU2MyAwLjk2OS0wLjg4NyAyLjEtMC44ODcgMy4zIDAgMi4yNzUgMS4xNTYgNC4yODcgMi45MTkgNS40NjMtMS4wNzUtMC4wMzEtMi4wODctMC4zMzEtMi45NzUtMC44MTkgMCAwLjAyNSAwIDAuMDU2IDAgMC4wODEgMCAzLjE4MSAyLjI2MyA1LjgzOCA1LjI2OSA2LjQzNy0wLjU1IDAuMTUtMS4xMzEgMC4yMzEtMS43MzEgMC4yMzEtMC40MjUgMC0wLjgzMS0wLjA0NC0xLjIzNy0wLjExOSAwLjgzOCAyLjYwNiAzLjI2MyA0LjUwNiA2LjEzMSA0LjU2My0yLjI1IDEuNzYyLTUuMDc1IDIuODEzLTguMTU2IDIuODEzLTAuNTMxIDAtMS4wNTAtMC4wMzEtMS41NjktMC4wOTQgMi45MTMgMS44NjkgNi4zNjIgMi45NSAxMC4wNjkgMi45NSAxMi4wNzUgMCAxOC42ODEtMTAuMDA2IDE4LjY4MS0xOC42ODEgMC0wLjI4Ny0wLjAwNi0wLjU2OS0wLjAxOS0wLjg1IDEuMjgxLTAuOTE5IDIuMzk0LTIuMDc1IDMuMjc1LTMuMzk0elwiPjwvcGF0aD48L3N2Zz4nKTsgfVxuICAgIGEuZGlzY29yZCB7XG4gICAgICAgIC8vIGJhY2tncm91bmQtaW1hZ2U6IHVybChcInN0YXRpYy9sb2dvcy9kaXNjb3JkLnBuZ1wiKVxuICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgZmlsbD1cIiUyMzNmM2YzZlwiIHZlcnNpb249XCIxLjFcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAzMiAzMlwiPjxwYXRoIGQ9XCJNMjYuOTYzIDBjMS44NzUgMCAzLjM4NyAxLjUxNiAzLjQ3NiAzLjN2MjguN2wtMy41NjktMy4wMzEtMS45Ni0xLjc4NC0yLjEzOS0xLjg2NCAwLjg5MyAyLjk0aC0xOC43MTdjLTEuODY5IDAtMy4zODctMS40Mi0zLjM4Ny0zLjMwMXYtMjEuNjUzYzAtMS43ODQgMS41Mi0zLjMwMyAzLjM5My0zLjMwM2wyMi4wMDktMC4wMDR6TTE4LjgwNSA3LjU3N2gtMC4wNDBsLTAuMjY5IDAuMjY3YzIuNzY0IDAuOCA0LjEwMSAyLjA0OSA0LjEwMSAyLjA0OS0xLjc4MS0wLjg5MS0zLjM4Ny0xLjMzNi00Ljk5Mi0xLjUxNi0xLjE2LTAuMTgtMi4zMi0wLjA4NS0zLjMgMGgtMC4yNjdjLTAuNjI3IDAtMS45NiAwLjI2Ny0zLjc0NyAwLjk4LTAuNjIzIDAuMjcxLTAuOTggMC40NDgtMC45OCAwLjQ0OHMxLjMzNi0xLjMzNiA0LjI4LTIuMDQ5bC0wLjE4LTAuMThzLTIuMjI5LTAuMDg1LTQuNjM2IDEuNjkzYzAgMC0yLjQwNyA0LjE5Mi0yLjQwNyA5LjM2IDAgMCAxLjMzMyAyLjMyIDQuOTkxIDIuNDA4IDAgMCAwLjUzMy0wLjcxMSAxLjA3My0xLjMzNi0yLjA1My0wLjYyNC0yLjg1My0xLjg3Mi0yLjg1My0xLjg3MnMwLjE3OSAwLjA4OCAwLjQ0NyAwLjI2N2gwLjA4MGMwLjA0MCAwIDAuMDU5IDAuMDIwIDAuMDgwIDAuMDQwdjAuMDA4YzAuMDIxIDAuMDIxIDAuMDQwIDAuMDQwIDAuMDgwIDAuMDQwIDAuNDQgMC4xODEgMC44OCAwLjM2IDEuMjQgMC41MzMgMC42MjEgMC4yNjkgMS40MiAwLjUzNyAyLjQgMC43MTUgMS4yNCAwLjE4IDIuNjYxIDAuMjY3IDQuMjggMCAwLjgtMC4xOCAxLjYtMC4zNTYgMi40LTAuNzEzIDAuNTItMC4yNjcgMS4xNi0wLjUzMyAxLjg2My0wLjk4MyAwIDAtMC44IDEuMjQ4LTIuOTQgMS44NzIgMC40NCAwLjYyMSAxLjA2MCAxLjMzMyAxLjA2MCAxLjMzMyAzLjY1OS0wLjA4MCA1LjA4MC0yLjQgNS4xNi0yLjMwMSAwLTUuMTYtMi40Mi05LjM2LTIuNDItOS4zNi0yLjE4LTEuNjE5LTQuMjItMS42OC00LjU4LTEuNjhsMC4wNzUtMC4wMjd6TTE5LjAyOSAxMy40NjFjMC45MzcgMCAxLjY5MyAwLjggMS42OTMgMS43OCAwIDAuOTg3LTAuNzYgMS43ODctMS42OTMgMS43ODdzLTEuNjkzLTAuOC0xLjY5My0xLjc3OWMwLjAwMy0wLjk4NyAwLjc2NC0xLjc4NCAxLjY5My0xLjc4NHpNMTIuOTcyIDEzLjQ2MWMwLjkzMyAwIDEuNjg4IDAuOCAxLjY4OCAxLjc4IDAgMC45ODctMC43NiAxLjc4Ny0xLjY5MyAxLjc4N3MtMS42OTMtMC44LTEuNjkzLTEuNzc5YzAtMC45ODcgMC43Ni0xLjc4NCAxLjY5My0xLjc4NHpcIj48L3BhdGg+PC9zdmc+Jyk7XG4gICAgICAgIGlucHV0IHtcbiAgICAgICAgICAgIHdpZHRoOiA3MHB4OyB9IH1cbiAgICBhLmZhY2Vib29rIHtcbiAgICAgICAgLy8gYmFja2dyb3VuZC1pbWFnZTogdXJsKFwic3RhdGljL2xvZ29zL2ZhY2Vib29rLnBuZ1wiKVxuICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgZmlsbD1cIiUyMzNmM2YzZlwiIHZlcnNpb249XCIxLjFcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAzMiAzMlwiPjxwYXRoIGQ9XCJNMTkgNmg1di02aC01Yy0zLjg2IDAtNyAzLjE0LTcgN3YzaC00djZoNHYxNmg2di0xNmg1bDEtNmgtNnYtM2MwLTAuNTQyIDAuNDU4LTEgMS0xelwiPjwvcGF0aD48L3N2Zz4nKTsgfVxuICAgIGEueW91dHViZSB7XG4gICAgICAgIC8vIGJhY2tncm91bmQtaW1hZ2U6IHVybChcInN0YXRpYy9sb2dvcy95b3V0dWJlLnBuZ1wiKVxuICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgZmlsbD1cIiUyMzNmM2YzZlwiIHZlcnNpb249XCIxLjFcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAzMiAzMlwiPjxwYXRoIGQ9XCJNMzEuNjgxIDkuNmMwIDAtMC4zMTMtMi4yMDYtMS4yNzUtMy4xNzUtMS4yMTktMS4yNzUtMi41ODEtMS4yODEtMy4yMDYtMS4zNTYtNC40NzUtMC4zMjUtMTEuMTk0LTAuMzI1LTExLjE5NC0wLjMyNWgtMC4wMTJjMCAwLTYuNzE5IDAtMTEuMTk0IDAuMzI1LTAuNjI1IDAuMDc1LTEuOTg3IDAuMDgxLTMuMjA2IDEuMzU2LTAuOTYzIDAuOTY5LTEuMjY5IDMuMTc1LTEuMjY5IDMuMTc1cy0wLjMxOSAyLjU4OC0wLjMxOSA1LjE4MXYyLjQyNWMwIDIuNTg3IDAuMzE5IDUuMTgxIDAuMzE5IDUuMTgxczAuMzEzIDIuMjA2IDEuMjY5IDMuMTc1YzEuMjE5IDEuMjc1IDIuODE5IDEuMjMxIDMuNTMxIDEuMzY5IDIuNTYzIDAuMjQ0IDEwLjg4MSAwLjMxOSAxMC44ODEgMC4zMTlzNi43MjUtMC4wMTIgMTEuMi0wLjMzMWMwLjYyNS0wLjA3NSAxLjk4OC0wLjA4MSAzLjIwNi0xLjM1NiAwLjk2Mi0wLjk2OSAxLjI3NS0zLjE3NSAxLjI3NS0zLjE3NXMwLjMxOS0yLjU4NyAwLjMxOS01LjE4MXYtMi40MjVjLTAuMDA2LTIuNTg4LTAuMzI1LTUuMTgxLTAuMzI1LTUuMTgxek0xMi42OTQgMjAuMTV2LTguOTk0bDguNjQ0IDQuNTEzLTguNjQ0IDQuNDgxelwiPjwvcGF0aD48L3N2Zz4nKTsgfVxuICAgIGEuc291bmRjbG91ZCB7XG4gICAgICAgIC8vIGJhY2tncm91bmQtaW1hZ2U6IHVybChcInN0YXRpYy9sb2dvcy9zb3VuZGNsb3VkLnBuZ1wiKVxuICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgZmlsbD1cIiUyMzNmM2YzZlwiIHZlcnNpb249XCIxLjFcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAzMiAzMlwiPjxwYXRoIGQ9XCJNMjcuODc0IDE2LjA2OWMtMC41NjUgMC0xLjEwNSAwLjExLTEuNTk2IDAuMzA4LTAuMzI4LTMuNTc0LTMuNDQ3LTYuMzc3LTcuMjUtNi4zNzctMC45MzEgMC0xLjgzNCAwLjE3Ni0yLjYzNSAwLjQ3NC0wLjMxMSAwLjExNi0wLjM5MyAwLjIzNS0wLjM5MyAwLjQ2NnYxMi41ODVjMCAwLjI0MyAwLjE5NSAwLjQ0NSAwLjQ0MSAwLjQ2OSAwLjAxMSAwLjAwMSAxMS4zNiAwLjAwNyAxMS40MzQgMC4wMDcgMi4yNzggMCA0LjEyNS0xLjc3NiA0LjEyNS0zLjk2NXMtMS44NDgtMy45NjYtNC4xMjYtMy45NjZ6TTEyLjUgMjRoMWwwLjUtNy4wMDctMC41LTYuOTkzaC0xbC0wLjUgNi45OTN6TTkuNSAyNGgtMWwtMC41LTUuMDg2IDAuNS00LjkxNGgxbDAuNSA1ek00LjUgMjRoMWwwLjUtNC0wLjUtNGgtMWwtMC41IDR6TTAuNSAyMmgxbDAuNS0yLTAuNS0yaC0xbC0wLjUgMnpcIj48L3BhdGg+PC9zdmc+Jyk7IH1cbiAgICBhLmdpdGh1YiB7XG4gICAgICAgIC8vIGJhY2tncm91bmQtaW1hZ2U6IHVybChcInN0YXRpYy9sb2dvcy9naXRodWIucG5nXCIpXG4gICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsPHN2ZyBmaWxsPVwiJTIzM2YzZjNmXCIgdmVyc2lvbj1cIjEuMVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDMyIDMyXCI+PHBhdGggZD1cIk0xNiAwLjM5NWMtOC44MzYgMC0xNiA3LjE2My0xNiAxNiAwIDcuMDY5IDQuNTg1IDEzLjA2NyAxMC45NDIgMTUuMTgyIDAuOCAwLjE0OCAxLjA5NC0wLjM0NyAxLjA5NC0wLjc3IDAtMC4zODEtMC4wMTUtMS42NDItMC4wMjItMi45NzktNC40NTIgMC45NjgtNS4zOTEtMS44ODgtNS4zOTEtMS44ODgtMC43MjgtMS44NDktMS43NzYtMi4zNDEtMS43NzYtMi4zNDEtMS40NTItMC45OTMgMC4xMS0wLjk3MyAwLjExLTAuOTczIDEuNjA2IDAuMTEzIDIuNDUyIDEuNjQ5IDIuNDUyIDEuNjQ5IDEuNDI3IDIuNDQ2IDMuNzQzIDEuNzM5IDQuNjU2IDEuMzMgMC4xNDMtMS4wMzQgMC41NTgtMS43NCAxLjAxNi0yLjE0LTMuNTU0LTAuNDA0LTcuMjktMS43NzctNy4yOS03LjkwNyAwLTEuNzQ3IDAuNjI1LTMuMTc0IDEuNjQ5LTQuMjk1LTAuMTY2LTAuNDAzLTAuNzE0LTIuMDMwIDAuMTU1LTQuMjM0IDAgMCAxLjM0NC0wLjQzIDQuNDAxIDEuNjQgMS4yNzYtMC4zNTUgMi42NDUtMC41MzIgNC4wMDUtMC41MzkgMS4zNTkgMC4wMDYgMi43MjkgMC4xODQgNC4wMDggMC41MzkgMy4wNTQtMi4wNzAgNC4zOTUtMS42NCA0LjM5NS0xLjY0IDAuODcxIDIuMjA0IDAuMzIzIDMuODMxIDAuMTU3IDQuMjM0IDEuMDI2IDEuMTIgMS42NDcgMi41NDggMS42NDcgNC4yOTUgMCA2LjE0NS0zLjc0MyA3LjQ5OC03LjMwNiA3Ljg5NSAwLjU3NCAwLjQ5NyAxLjA4NSAxLjQ3IDEuMDg1IDIuOTYzIDAgMi4xNDEtMC4wMTkgMy44NjQtMC4wMTkgNC4zOTEgMCAwLjQyNiAwLjI4OCAwLjkyNSAxLjA5OSAwLjc2OCA2LjM1NC0yLjExOCAxMC45MzMtOC4xMTMgMTAuOTMzLTE1LjE4IDAtOC44MzctNy4xNjQtMTYtMTYtMTZ6XCI+PC9wYXRoPjwvc3ZnPicpOyB9XG4gICAgYS5pbnN0YWdyYW0ge1xuICAgICAgICAvLyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJzdGF0aWMvbG9nb3MvaW5zdGFncmFtLnBuZ1wiKVxuICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgZmlsbD1cIiUyMzNmM2YzZlwiIHZlcnNpb249XCIxLjFcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAzMiAzMlwiPjxwYXRoIGQ9XCJNMTYgMi44ODFjNC4yNzUgMCA0Ljc4MSAwLjAxOSA2LjQ2MiAwLjA5NCAxLjU2MyAwLjA2OSAyLjQwNiAwLjMzMSAyLjk2OSAwLjU1IDAuNzQ0IDAuMjg4IDEuMjgxIDAuNjM4IDEuODM3IDEuMTk0IDAuNTYzIDAuNTYzIDAuOTA2IDEuMDk0IDEuMiAxLjgzOCAwLjIxOSAwLjU2MyAwLjQ4MSAxLjQxMiAwLjU1IDIuOTY5IDAuMDc1IDEuNjg4IDAuMDk0IDIuMTk0IDAuMDk0IDYuNDYzcy0wLjAxOSA0Ljc4MS0wLjA5NCA2LjQ2M2MtMC4wNjkgMS41NjMtMC4zMzEgMi40MDYtMC41NSAyLjk2OS0wLjI4OCAwLjc0NC0wLjYzNyAxLjI4MS0xLjE5NCAxLjgzNy0wLjU2MyAwLjU2My0xLjA5NCAwLjkwNi0xLjgzNyAxLjItMC41NjMgMC4yMTktMS40MTMgMC40ODEtMi45NjkgMC41NS0xLjY4OCAwLjA3NS0yLjE5NCAwLjA5NC02LjQ2MyAwLjA5NHMtNC43ODEtMC4wMTktNi40NjMtMC4wOTRjLTEuNTYzLTAuMDY5LTIuNDA2LTAuMzMxLTIuOTY5LTAuNTUtMC43NDQtMC4yODgtMS4yODEtMC42MzctMS44MzgtMS4xOTQtMC41NjMtMC41NjMtMC45MDYtMS4wOTQtMS4yLTEuODM3LTAuMjE5LTAuNTYzLTAuNDgxLTEuNDEzLTAuNTUtMi45NjktMC4wNzUtMS42ODgtMC4wOTQtMi4xOTQtMC4wOTQtNi40NjNzMC4wMTktNC43ODEgMC4wOTQtNi40NjNjMC4wNjktMS41NjMgMC4zMzEtMi40MDYgMC41NS0yLjk2OSAwLjI4OC0wLjc0NCAwLjYzOC0xLjI4MSAxLjE5NC0xLjgzOCAwLjU2My0wLjU2MyAxLjA5NC0wLjkwNiAxLjgzOC0xLjIgMC41NjMtMC4yMTkgMS40MTItMC40ODEgMi45NjktMC41NSAxLjY4MS0wLjA3NSAyLjE4OC0wLjA5NCA2LjQ2My0wLjA5NHpNMTYgMGMtNC4zNDQgMC00Ljg4NyAwLjAxOS02LjU5NCAwLjA5NC0xLjcgMC4wNzUtMi44NjkgMC4zNS0zLjg4MSAwLjc0NC0xLjA1NiAwLjQxMi0xLjk1IDAuOTU2LTIuODM3IDEuODUtMC44OTQgMC44ODgtMS40MzggMS43ODEtMS44NSAyLjgzMS0wLjM5NCAxLjAxOS0wLjY2OSAyLjE4MS0wLjc0NCAzLjg4MS0wLjA3NSAxLjcxMy0wLjA5NCAyLjI1Ni0wLjA5NCA2LjZzMC4wMTkgNC44ODcgMC4wOTQgNi41OTRjMC4wNzUgMS43IDAuMzUgMi44NjkgMC43NDQgMy44ODEgMC40MTMgMS4wNTYgMC45NTYgMS45NSAxLjg1IDIuODM3IDAuODg3IDAuODg3IDEuNzgxIDEuNDM4IDIuODMxIDEuODQ0IDEuMDE5IDAuMzk0IDIuMTgxIDAuNjY5IDMuODgxIDAuNzQ0IDEuNzA2IDAuMDc1IDIuMjUgMC4wOTQgNi41OTQgMC4wOTRzNC44ODgtMC4wMTkgNi41OTQtMC4wOTRjMS43LTAuMDc1IDIuODY5LTAuMzUgMy44ODEtMC43NDQgMS4wNTAtMC40MDYgMS45NDQtMC45NTYgMi44MzEtMS44NDRzMS40MzgtMS43ODEgMS44NDQtMi44MzFjMC4zOTQtMS4wMTkgMC42NjktMi4xODEgMC43NDQtMy44ODEgMC4wNzUtMS43MDYgMC4wOTQtMi4yNSAwLjA5NC02LjU5NHMtMC4wMTktNC44ODctMC4wOTQtNi41OTRjLTAuMDc1LTEuNy0wLjM1LTIuODY5LTAuNzQ0LTMuODgxLTAuMzk0LTEuMDYzLTAuOTM4LTEuOTU2LTEuODMxLTIuODQ0LTAuODg3LTAuODg3LTEuNzgxLTEuNDM4LTIuODMxLTEuODQ0LTEuMDE5LTAuMzk0LTIuMTgxLTAuNjY5LTMuODgxLTAuNzQ0LTEuNzEyLTAuMDgxLTIuMjU2LTAuMS02LjYtMC4xdjB6XCI+PC9wYXRoPjxwYXRoIGQ9XCJNMTYgNy43ODFjLTQuNTM3IDAtOC4yMTkgMy42ODEtOC4yMTkgOC4yMTlzMy42ODEgOC4yMTkgOC4yMTkgOC4yMTkgOC4yMTktMy42ODEgOC4yMTktOC4yMTljMC00LjUzNy0zLjY4MS04LjIxOS04LjIxOS04LjIxOXpNMTYgMjEuMzMxYy0yLjk0NCAwLTUuMzMxLTIuMzg3LTUuMzMxLTUuMzMxczIuMzg3LTUuMzMxIDUuMzMxLTUuMzMxYzIuOTQ0IDAgNS4zMzEgMi4zODcgNS4zMzEgNS4zMzFzLTIuMzg3IDUuMzMxLTUuMzMxIDUuMzMxelwiPjwvcGF0aD48cGF0aCBkPVwiTTI2LjQ2MiA3LjQ1NmMwIDEuMDYwLTAuODU5IDEuOTE5LTEuOTE5IDEuOTE5cy0xLjkxOS0wLjg1OS0xLjkxOS0xLjkxOWMwLTEuMDYwIDAuODU5LTEuOTE5IDEuOTE5LTEuOTE5czEuOTE5IDAuODU5IDEuOTE5IDEuOTE5elwiPjwvcGF0aD48L3N2Zz4nKTsgfVxuICAgIGEuZW1haWwge1xuICAgICAgICAvLyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJzdGF0aWMvbG9nb3MvZW1haWwucG5nXCIpXG4gICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsPHN2ZyBmaWxsPVwiJTIzM2YzZjNmXCIgdmVyc2lvbj1cIjEuMVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCI+PHBhdGggZD1cIk0xOCAyYzEuMTA1IDAgMiAwLjg5NSAyIDJ2MCAxMmMwIDEuMTA1LTAuODk1IDItMiAydjBoLTE2Yy0xLjEwNSAwLTItMC44OTUtMi0ydjAtMTJjMC0xLjEgMC45LTIgMi0yaDE2ek0xMy42MyAxMS4xbDYuMzcgNC45di0ybC01LjEyLTMuOSA1LjEyLTQuMXYtMmwtMTAgOC0xMC04djJsNS4xMiA0LjEtNS4xMiAzLjl2Mmw2LjM3LTQuOSAzLjYzIDIuOSAzLjYzLTIuOXpcIj48L3BhdGg+PC9zdmc+Jyk7XG4gICAgICAgIGlucHV0IHtcbiAgICAgICAgICAgIHdpZHRoOiAxNzBweDsgfSB9XG4gICAgYS5oYXMtcG9wdXAge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIGlucHV0LnBvcHVwIHtcbiAgICAgICAgICAgICYuaGlkZGVuIHtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtMTBweCkgc2NhbGUoMC41KTtcbiAgICAgICAgICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgICAgICAgICAgICBvcGFjaXR5OiAwOyB9XG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiBcIlJ1YmlrXCIsIHNhbnMtc2VyaWY7XG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICB0cmFuc2l0aW9uOiAkdHJhbnNpdGlvbi0yMCBhbGw7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAwcHgpO1xuICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgICAgICAgIGNvbG9yOiAkZGFya2VzdDtcbiAgICAgICAgICAgIHRvcDogMTAwJTtcbiAgICAgICAgICAgIGxlZnQ6IDUwJTtcbiAgICAgICAgICAgIHBhZGRpbmc6IDVweDtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OyB9IH0gfVxuLmxvZ28ge1xuICAgIG1hcmdpbjogNTBweDtcbiAgICB3aWR0aDogMTUwcHg7XG4gICAgaGVpZ2h0OiAxNTBweDsgfVxuc2VjdGlvbiB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luLWJvdHRvbTogNTBweDtcbiAgICB0cmFuc2l0aW9uOiAkdHJhbnNpdGlvbi00MCBhbGw7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAmLmhpZGRlbiB7XG4gICAgICAgIG9wYWNpdHk6IDA7IH1cbiAgICAuaGVhZGVyIHtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIHAge1xuICAgICAgICAgICAgbWFyZ2luOiBhdXRvO1xuICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyB9XG4gICAgICAgIHAudGl0bGUge1xuICAgICAgICAgICAgZm9udC1zaXplOiAyNnB4O1xuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4OyB9XG4gICAgICAgIHAuZGVzY3JpcHRpb24ge30gfVxuICAgIC50aHVtYm5haWxzLCAuY2FyZHMge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWV2ZW5seTtcbiAgICAgICAgLml0ZW0ge1xuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMTBweDtcbiAgICAgICAgICAgIHdpZHRoOiAyMDBweDtcbiAgICAgICAgICAgIG1hcmdpbjogNTBweDtcbiAgICAgICAgICAgIHBhZGRpbmc6IDBweDtcbiAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICB0cmFuc2l0aW9uOiAkdHJhbnNpdGlvbi0zMCB0cmFuc2Zvcm07XG4gICAgICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMSk7XG4gICAgICAgICAgICAgICAgaW1nIHtcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjMpOyB9IH1cbiAgICAgICAgICAgIGltZyB7XG4gICAgICAgICAgICAgICAgdHJhbnNpdGlvbjogJHRyYW5zaXRpb24tMTAwIGFsbDtcbiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jazsgfSB9IH1cbiAgICAmLnZpZGVvLCAmLnN5bmN0YW4ge1xuICAgICAgICAuaXRlbSB7XG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgICAgIGhlaWdodDogY2FsYygyMDBweC8xNio5IC0gNHB4KTsgfSB9XG4gICAgJi5sYWN1bmEge1xuICAgICAgICAuaXRlbSB7XG4gICAgICAgICAgICBoZWlnaHQ6IGF1dG87IH0gfVxuICAgICYuZ2l0aHViIHtcbiAgICAgICAgLml0ZW0ge1xuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgICB3aWR0aDogY2FsYygyMDBweCArIDIwcHgpO1xuICAgICAgICAgICAgbWFyZ2luOiBjYWxjKDUwcHggLSAyMHB4LzIpO1xuICAgICAgICAgICAgYm9yZGVyOiAycHggc29saWQgI2VjZWNlYztcbiAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IG5vbmU7IH1cbiAgICAgICAgICAgIHAudGl0bGUge1xuICAgICAgICAgICAgICAgIG1hcmdpbjogMThweDtcbiAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4O1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMThweDsgfVxuICAgICAgICAgICAgcC5kZXNjcmlwdGlvbiB7XG4gICAgICAgICAgICAgICAgbWFyZ2luOiAwcHggMThweDtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICAgICAgICAgICAgY29sb3I6ICM1YTVhNWE7IH1cbiAgICAgICAgICAgIC51cmxzIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogYXV0bztcbiAgICAgICAgICAgICAgICBhLnJlcG8tdXJsLCBhLnJlcG8td2Vic2l0ZSB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1zaXplOiAyMnB4O1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxMHB4O1xuICAgICAgICAgICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgICAgICAgICAmLmhpZGRlbiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lOyB9IH0gfVxuICAgICAgICAgICAgLnJlcG8tdXJsIHtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDI2cHg7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDI2cHg7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCw8c3ZnIGZpbGw9XCIlMjMzZjNmM2ZcIiB2ZXJzaW9uPVwiMS4xXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMzIgMzJcIj48cGF0aCBkPVwiTTE2IDAuMzk1Yy04LjgzNiAwLTE2IDcuMTYzLTE2IDE2IDAgNy4wNjkgNC41ODUgMTMuMDY3IDEwLjk0MiAxNS4xODIgMC44IDAuMTQ4IDEuMDk0LTAuMzQ3IDEuMDk0LTAuNzcgMC0wLjM4MS0wLjAxNS0xLjY0Mi0wLjAyMi0yLjk3OS00LjQ1MiAwLjk2OC01LjM5MS0xLjg4OC01LjM5MS0xLjg4OC0wLjcyOC0xLjg0OS0xLjc3Ni0yLjM0MS0xLjc3Ni0yLjM0MS0xLjQ1Mi0wLjk5MyAwLjExLTAuOTczIDAuMTEtMC45NzMgMS42MDYgMC4xMTMgMi40NTIgMS42NDkgMi40NTIgMS42NDkgMS40MjcgMi40NDYgMy43NDMgMS43MzkgNC42NTYgMS4zMyAwLjE0My0xLjAzNCAwLjU1OC0xLjc0IDEuMDE2LTIuMTQtMy41NTQtMC40MDQtNy4yOS0xLjc3Ny03LjI5LTcuOTA3IDAtMS43NDcgMC42MjUtMy4xNzQgMS42NDktNC4yOTUtMC4xNjYtMC40MDMtMC43MTQtMi4wMzAgMC4xNTUtNC4yMzQgMCAwIDEuMzQ0LTAuNDMgNC40MDEgMS42NCAxLjI3Ni0wLjM1NSAyLjY0NS0wLjUzMiA0LjAwNS0wLjUzOSAxLjM1OSAwLjAwNiAyLjcyOSAwLjE4NCA0LjAwOCAwLjUzOSAzLjA1NC0yLjA3MCA0LjM5NS0xLjY0IDQuMzk1LTEuNjQgMC44NzEgMi4yMDQgMC4zMjMgMy44MzEgMC4xNTcgNC4yMzQgMS4wMjYgMS4xMiAxLjY0NyAyLjU0OCAxLjY0NyA0LjI5NSAwIDYuMTQ1LTMuNzQzIDcuNDk4LTcuMzA2IDcuODk1IDAuNTc0IDAuNDk3IDEuMDg1IDEuNDcgMS4wODUgMi45NjMgMCAyLjE0MS0wLjAxOSAzLjg2NC0wLjAxOSA0LjM5MSAwIDAuNDI2IDAuMjg4IDAuOTI1IDEuMDk5IDAuNzY4IDYuMzU0LTIuMTE4IDEwLjkzMy04LjExMyAxMC45MzMtMTUuMTggMC04LjgzNy03LjE2NC0xNi0xNi0xNnpcIj48L3BhdGg+PC9zdmc+Jyk7IH1cbiAgICAgICAgICAgIC5yZXBvLXdlYnNpdGUge1xuICAgICAgICAgICAgICAgIGhlaWdodDogMjZweDtcbiAgICAgICAgICAgICAgICB3aWR0aDogMjZweDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj48cGF0aCBkPVwiTTAgMGgyNHYyNEgwelwiIGZpbGw9XCJub25lXCIvPjxwYXRoIGQ9XCJNMy45IDEyYzAtMS43MSAxLjM5LTMuMSAzLjEtMy4xaDRWN0g3Yy0yLjc2IDAtNSAyLjI0LTUgNXMyLjI0IDUgNSA1aDR2LTEuOUg3Yy0xLjcxIDAtMy4xLTEuMzktMy4xLTMuMXpNOCAxM2g4di0ySDh2MnptOS02aC00djEuOWg0YzEuNzEgMCAzLjEgMS4zOSAzLjEgMy4xcy0xLjM5IDMuMS0zLjEgMy4xaC00VjE3aDRjMi43NiAwIDUtMi4yNCA1LTVzLTIuMjQtNS01LTV6XCIvPjwvc3ZnPicpOyB9IH0gfSB9XG5cbi5jYW52YXMtY29udGFpbmVyIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwcHg7XG4gICAgbGVmdDogMHB4O1xuICAgIHotaW5kZXg6IC0xO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XG4gICAgdHJhbnNpdGlvbjogJHRyYW5zaXRpb24tMTAwIG9wYWNpdHk7XG4gICAgJi5oaWRkZW4ge1xuICAgICAgICBvcGFjaXR5OiAwOyB9XG4gICAgY2FudmFzIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7IH0gfVxuIl19 */
+1 -1
docs/index.html
··· 1 - <!DOCTYPE html><html><head><title>KH</title><!-- font--><link href="https://fonts.googleapis.com/css?family=Rubik:400" rel="stylesheet"><!-- css--><link rel="stylesheet" type="text/css" href="global.css"><!-- stuff--><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0"><!-- favicon--><link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png?v=YAoOnmWBYg"><link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png?v=YAoOnmWBYg"><link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png?v=YAoOnmWBYg"><link rel="manifest" href="/site.webmanifest?v=YAoOnmWBYg"><link rel="mask-icon" href="/safari-pinned-tab.svg?v=YAoOnmWBYg" color="#5bbad5"><link rel="shortcut icon" href="/favicon.ico?v=YAoOnmWBYg"><meta name="msapplication-TileColor" content="#ffffff"><meta name="theme-color" content="#ffffff"></head><body><img class="logo" src="static/kh-logo.png"><div class="social-media"><a class="twitter" target="_blank" title="Twitter" href="https://twitter.com/SpectralKH"></a><a class="discord has-popup" title="Discord"><input class="popup hidden" value="KH#6425"></a><a class="youtube" target="_blank" title="YouTube" href="https://youtube.com/SpectralKH"></a><a class="instagram" target="_blank" title="Instagram" href="https://www.instagram.com/spckh/"></a><a class="github" target="_blank" title="GitHub" href="https://github.com/SpectralKH"></a><a class="facebook" target="_blank" title="Facebook" href="https://www.facebook.com/SpectralKH"></a><a class="email has-popup" title="Email"><input class="popup hidden" value="kasperkh.kh@gmail.com"></a><a class="soundcloud" target="_blank" title="SoundCloud" href="https://soundcloud.com/SpectralKH"></a></div><section class="video hidden"><div class="header"><p class="title">Video</p><p class="description">I make some pretty cool videos. I'd watch them.</p></div><div class="thumbnails"><a class="item" target="_blank"><img></a><a class="item" target="_blank"><img></a><a class="item" target="_blank"><img></a><a class="item" target="_blank"><img></a><a class="item" target="_blank"><img></a><a class="item" target="_blank"><img></a></div></section><section class="synctan hidden"><div class="header"><p class="title">Synctan</p><p class="description">A YouTube channel where I curate all kinds of music I like.</p></div><div class="thumbnails"><a class="item" target="_blank"><img></a><a class="item" target="_blank"><img></a><a class="item" target="_blank"><img></a><a class="item" target="_blank"><img></a><a class="item" target="_blank"><img></a><a class="item" target="_blank"><img></a></div></section><section class="lacuna hidden"><div class="header"><p class="title">Lacuna</p><p class="description">I am a co-owner of this independent indie record label.</p></div><div class="thumbnails"><a class="item" target="_blank"><img></a><a class="item" target="_blank"><img></a><a class="item" target="_blank"><img></a><a class="item" target="_blank"><img></a><a class="item" target="_blank"><img></a><a class="item" target="_blank"><img></a></div></section><script src="js/global.js"></script><script src="lib/three.min.js"></script><script src="js/canvas-renderer-and-projector.min.js"></script><script src="js/bg.min.js"></script></body></html> 1 + <!DOCTYPE html><html><head><title>KH</title><!-- font--><link href="https://fonts.googleapis.com/css?family=Rubik:400" rel="stylesheet"><!-- css--><link rel="stylesheet" type="text/css" href="global.css"><!-- stuff--><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0"><!-- favicon--><link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png?v=YAoOnmWBYg"><link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png?v=YAoOnmWBYg"><link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png?v=YAoOnmWBYg"><link rel="manifest" href="/site.webmanifest?v=YAoOnmWBYg"><link rel="mask-icon" href="/safari-pinned-tab.svg?v=YAoOnmWBYg" color="#5bbad5"><link rel="shortcut icon" href="/favicon.ico?v=YAoOnmWBYg"><meta name="msapplication-TileColor" content="#ffffff"><meta name="theme-color" content="#ffffff"></head><body><img class="logo" src="static/kh-logo.png"><div class="social-media"><a class="twitter" target="_blank" title="Twitter" href="https://twitter.com/SpectralKH"></a><a class="discord has-popup" title="Discord"><input class="popup hidden" value="KH#6425"></a><a class="youtube" target="_blank" title="YouTube" href="https://youtube.com/SpectralKH"></a><a class="instagram" target="_blank" title="Instagram" href="https://www.instagram.com/spckh/"></a><a class="github" target="_blank" title="GitHub" href="https://github.com/SpectralKH"></a><a class="facebook" target="_blank" title="Facebook" href="https://www.facebook.com/SpectralKH"></a><a class="email has-popup" title="Email"><input class="popup hidden" value="kasperkh.kh@gmail.com"></a><a class="soundcloud" target="_blank" title="SoundCloud" href="https://soundcloud.com/SpectralKH"></a></div><section class="video hidden"><div class="header"><p class="title">Video</p><p class="description">I make some pretty cool videos. I'd watch them.</p></div><div class="thumbnails"><a class="item" target="_blank"><img></a><a class="item" target="_blank"><img></a><a class="item" target="_blank"><img></a><a class="item" target="_blank"><img></a><a class="item" target="_blank"><img></a><a class="item" target="_blank"><img></a></div></section><section class="synctan hidden"><div class="header"><p class="title">Synctan</p><p class="description">A YouTube channel where I curate all kinds of music I like.</p></div><div class="thumbnails"><a class="item" target="_blank"><img></a><a class="item" target="_blank"><img></a><a class="item" target="_blank"><img></a><a class="item" target="_blank"><img></a><a class="item" target="_blank"><img></a><a class="item" target="_blank"><img></a></div></section><section class="lacuna hidden"><div class="header"><p class="title">Lacuna</p><p class="description">I am a co-owner of this independent indie record label.</p></div><div class="thumbnails"><a class="item" target="_blank"><img></a><a class="item" target="_blank"><img></a><a class="item" target="_blank"><img></a><a class="item" target="_blank"><img></a><a class="item" target="_blank"><img></a><a class="item" target="_blank"><img></a></div></section><section class="github hidden"><div class="header"><p class="title">Development</p><p class="description">I do some programming for fun. These are some of my favorite projects.</p></div><div class="cards"><div class="item" target="_blank"><p class="title"></p><p class="description"></p><div class="urls"><a class="repo-website hidden"></a><a class="repo-url hidden"></a></div></div><div class="item" target="_blank"><p class="title"></p><p class="description"></p><div class="urls"><a class="repo-website hidden"></a><a class="repo-url hidden"></a></div></div><div class="item" target="_blank"><p class="title"></p><p class="description"></p><div class="urls"><a class="repo-website hidden"></a><a class="repo-url hidden"></a></div></div><div class="item" target="_blank"><p class="title"></p><p class="description"></p><div class="urls"><a class="repo-website hidden"></a><a class="repo-url hidden"></a></div></div><div class="item" target="_blank"><p class="title"></p><p class="description"></p><div class="urls"><a class="repo-website hidden"></a><a class="repo-url hidden"></a></div></div><div class="item" target="_blank"><p class="title"></p><p class="description"></p><div class="urls"><a class="repo-website hidden"></a><a class="repo-url hidden"></a></div></div></div></section><script src="js/global.js"></script><script src="lib/three.min.js"></script><script src="js/canvas-renderer-and-projector.min.js"></script><script src="js/bg.js"></script></body></html>
+2 -126
docs/js/bg.js
··· 1 - "use strict"; 2 - 3 - // minOnSave: true, minifier: uglify-js 4 - var canvasHeight = 400; 5 - var SEPARATION = 100; 6 - var AMOUNTX = 80; 7 - var AMOUNTY = 40; 8 - var particleColor = "#3f3f3f"; 9 - 10 - var container; 11 - var camera, scene, renderer; 12 - 13 - var particles, 14 - particle, 15 - count = 0; 16 - 17 - var mouseX = 0, 18 - mouseY = 0; 19 - 20 - container = document.createElement('div'); 21 - container.classList.add("canvas-container"); 22 - container.classList.add("hidden"); 23 - setTimeout(function () { 24 - container.classList.remove("hidden"); 25 - }, 1000); 26 - document.body.appendChild(container); 27 - 28 - function getCanvasContainerWidth() { 29 - return document.querySelector(".canvas-container").clientWidth; 30 - } 31 - 32 - var windowHalfX = getCanvasContainerWidth() / 2; 33 - var windowHalfY = canvasHeight / 2; 34 - 35 - init(); 36 - animate(); 37 - 38 - function init() { 39 - 40 - camera = new THREE.PerspectiveCamera(75, getCanvasContainerWidth() / canvasHeight, 1, 10000); 41 - camera.position.z = 10000; 42 - 43 - scene = new THREE.Scene(); 44 - 45 - particles = new Array(); 46 - 47 - var PI2 = Math.PI * 2; 48 - var material = new THREE.SpriteCanvasMaterial({ 49 - 50 - color: particleColor, 51 - program: function program(context) { 52 - 53 - context.beginPath(); 54 - context.arc(0, 0, 0.5, 0, PI2, true); 55 - context.fill(); 56 - } 57 - 58 - }); 59 - 60 - var i = 0; 61 - 62 - for (var ix = 0; ix < AMOUNTX; ix++) { 63 - 64 - for (var iy = 0; iy < AMOUNTY; iy++) { 65 - 66 - particle = particles[i++] = new THREE.Sprite(material); 67 - particle.position.x = ix * SEPARATION - AMOUNTX * SEPARATION / 2; 68 - particle.position.z = iy * SEPARATION - AMOUNTY * SEPARATION / 2; 69 - scene.add(particle); 70 - } 71 - } 72 - 73 - renderer = new THREE.CanvasRenderer(); 74 - renderer.setPixelRatio(window.devicePixelRatio); 75 - renderer.setSize(getCanvasContainerWidth(), canvasHeight); 76 - container.appendChild(renderer.domElement); 77 - 78 - // 79 - 80 - window.addEventListener('resize', onWindowResize, false); 81 - } 82 - 83 - function onWindowResize() { 84 - canvasContainerWidth = getCanvasContainerWidth(); 85 - 86 - windowHalfX = canvasContainerWidth / 2; 87 - windowHalfY = canvasHeight / 2; 88 - 89 - camera.aspect = canvasContainerWidth / canvasHeight; 90 - camera.updateProjectionMatrix(); 91 - 92 - renderer.setSize(canvasContainerWidth, canvasHeight); 93 - } 94 - 95 - // 96 - 97 - // 98 - 99 - function animate() { 100 - 101 - requestAnimationFrame(animate); 102 - 103 - render(); 104 - } 105 - 106 - function render() { 107 - 108 - camera.position.set(0, 355, 122); 109 - 110 - var i = 0; 111 - 112 - for (var ix = 0; ix < AMOUNTX; ix++) { 113 - 114 - for (var iy = 0; iy < AMOUNTY; iy++) { 115 - 116 - particle = particles[i++]; 117 - particle.position.y = Math.sin((ix + count) * 0.3) * 50 + Math.sin((iy + count) * 0.5) * 50; 118 - particle.scale.x = particle.scale.y = (Math.sin((ix + count) * 0.3) + 1) * 4 + (Math.sin((iy + count) * 0.5) + 1) * 4; 119 - } 120 - } 121 - 122 - renderer.render(scene, camera); 123 - 124 - count += 0.1; 125 - } 126 - //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpzL2JnLmpzIl0sIm5hbWVzIjpbImNhbnZhc0hlaWdodCIsIlNFUEFSQVRJT04iLCJBTU9VTlRYIiwiQU1PVU5UWSIsInBhcnRpY2xlQ29sb3IiLCJjb250YWluZXIiLCJjYW1lcmEiLCJzY2VuZSIsInJlbmRlcmVyIiwicGFydGljbGVzIiwicGFydGljbGUiLCJjb3VudCIsIm1vdXNlWCIsIm1vdXNlWSIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTGlzdCIsImFkZCIsInNldFRpbWVvdXQiLCJyZW1vdmUiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJnZXRDYW52YXNDb250YWluZXJXaWR0aCIsInF1ZXJ5U2VsZWN0b3IiLCJjbGllbnRXaWR0aCIsIndpbmRvd0hhbGZYIiwid2luZG93SGFsZlkiLCJpbml0IiwiYW5pbWF0ZSIsIlRIUkVFIiwiUGVyc3BlY3RpdmVDYW1lcmEiLCJwb3NpdGlvbiIsInoiLCJTY2VuZSIsIkFycmF5IiwiUEkyIiwiTWF0aCIsIlBJIiwibWF0ZXJpYWwiLCJTcHJpdGVDYW52YXNNYXRlcmlhbCIsImNvbG9yIiwicHJvZ3JhbSIsImNvbnRleHQiLCJiZWdpblBhdGgiLCJhcmMiLCJmaWxsIiwiaSIsIml4IiwiaXkiLCJTcHJpdGUiLCJ4IiwiQ2FudmFzUmVuZGVyZXIiLCJzZXRQaXhlbFJhdGlvIiwid2luZG93IiwiZGV2aWNlUGl4ZWxSYXRpbyIsInNldFNpemUiLCJkb21FbGVtZW50IiwiYWRkRXZlbnRMaXN0ZW5lciIsIm9uV2luZG93UmVzaXplIiwiY2FudmFzQ29udGFpbmVyV2lkdGgiLCJhc3BlY3QiLCJ1cGRhdGVQcm9qZWN0aW9uTWF0cml4IiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwicmVuZGVyIiwic2V0IiwieSIsInNpbiIsInNjYWxlIl0sIm1hcHBpbmdzIjoiOztBQUFBO0FBQ0EsSUFBSUEsZUFBZSxHQUFuQjtBQUNBLElBQUlDLGFBQWEsR0FBakI7QUFDQSxJQUFJQyxVQUFVLEVBQWQ7QUFD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LEdBQTNCLElBQW1DLENBQXJDLElBQTJDLENBRDVDO0FBR0E7QUFFRDs7QUFFREgsVUFBU3VELE1BQVQsQ0FBaUJ4RCxLQUFqQixFQUF3QkQsTUFBeEI7O0FBRUFLLFVBQVMsR0FBVDtBQUVBIiwiZmlsZSI6ImpzL2JnLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gbWluT25TYXZlOiB0cnVlLCBtaW5pZmllcjogdWdsaWZ5LWpzXG52YXIgY2FudmFzSGVpZ2h0ID0gNDAwO1xudmFyIFNFUEFSQVRJT04gPSAxMDA7XG52YXIgQU1PVU5UWCA9IDgwO1xudmFyIEFNT1VOVFkgPSA0MDtcbnZhciBwYXJ0aWNsZUNvbG9yID0gXCIjM2YzZjNmXCI7XG5cbnZhciBjb250YWluZXI7XG52YXIgY2FtZXJhLCBzY2VuZSwgcmVuZGVyZXI7XG5cbnZhciBwYXJ0aWNsZXMsIHBhcnRpY2xlLCBjb3VudCA9IDA7XG5cbnZhciBtb3VzZVggPSAwLCBtb3VzZVkgPSAwO1xuXG5jb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnZGl2JyApO1xuY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJjYW52YXMtY29udGFpbmVyXCIpO1xuY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJoaWRkZW5cIik7XG5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgIGNvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKFwiaGlkZGVuXCIpO1xufSwgMTAwMCk7XG5kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKCBjb250YWluZXIgKTtcblxuZnVuY3Rpb24gZ2V0Q2FudmFzQ29udGFpbmVyV2lkdGgoKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuY2FudmFzLWNvbnRhaW5lclwiKS5jbGllbnRXaWR0aDtcbn1cblxudmFyIHdpbmRvd0hhbGZYID0gZ2V0Q2FudmFzQ29udGFpbmVyV2lkdGgoKSAvIDI7XG52YXIgd2luZG93SGFsZlkgPSBjYW52YXNIZWlnaHQgLyAyO1xuXG5pbml0KCk7XG5hbmltYXRlKCk7XG5cbmZ1bmN0aW9uIGluaXQoKSB7XG5cblx0Y2FtZXJhID0gbmV3IFRIUkVFLlBlcnNwZWN0aXZlQ2FtZXJhKCA3NSwgZ2V0Q2FudmFzQ29udGFpbmVyV2lkdGgoKSAvIGNhbnZhc0hlaWdodCwgMSwgMTAwMDAgKTtcblx0Y2FtZXJhLnBvc2l0aW9uLnogPSAxMDAwMDtcblxuXHRzY2VuZSA9IG5ldyBUSFJFRS5TY2VuZSgpO1xuXG5cdHBhcnRpY2xlcyA9IG5ldyBBcnJheSgpO1xuXG5cdHZhciBQSTIgPSBNYXRoLlBJICogMjtcblx0dmFyIG1hdGVyaWFsID0gbmV3IFRIUkVFLlNwcml0ZUNhbnZhc01hdGVyaWFsKCB7XG5cblx0XHRjb2xvcjogcGFydGljbGVDb2xvcixcblx0XHRwcm9ncmFtOiBmdW5jdGlvbiAoIGNvbnRleHQgKSB7XG5cblx0XHRcdGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cdFx0XHRjb250ZXh0LmFyYyggMCwgMCwgMC41LCAwLCBQSTIsIHRydWUgKTtcblx0XHRcdGNvbnRleHQuZmlsbCgpO1xuXG5cdFx0fVxuXG5cdH0gKTtcblxuXHR2YXIgaSA9IDA7XG5cblx0Zm9yICggdmFyIGl4ID0gMDsgaXggPCBBTU9VTlRYOyBpeCArKyApIHtcblxuXHRcdGZvciAoIHZhciBpeSA9IDA7IGl5IDwgQU1PVU5UWTsgaXkgKysgKSB7XG5cblx0XHRcdHBhcnRpY2xlID0gcGFydGljbGVzWyBpICsrIF0gPSBuZXcgVEhSRUUuU3ByaXRlKCBtYXRlcmlhbCApO1xuXHRcdFx0cGFydGljbGUucG9zaXRpb24ueCA9IGl4ICogU0VQQVJBVElPTiAtICggKCBBTU9VTlRYICogU0VQQVJBVElPTiApIC8gMiApO1xuXHRcdFx0cGFydGljbGUucG9zaXRpb24ueiA9IGl5ICogU0VQQVJBVElPTiAtICggKCBBTU9VTlRZICogU0VQQVJBVElPTiApIC8gMiApO1xuXHRcdFx0c2NlbmUuYWRkKCBwYXJ0aWNsZSApO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRyZW5kZXJlciA9IG5ldyBUSFJFRS5DYW52YXNSZW5kZXJlcigpO1xuXHRyZW5kZXJlci5zZXRQaXhlbFJhdGlvKCB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyApO1xuXHRyZW5kZXJlci5zZXRTaXplKCBnZXRDYW52YXNDb250YWluZXJXaWR0aCgpLCBjYW52YXNIZWlnaHQgKTtcblx0Y29udGFpbmVyLmFwcGVuZENoaWxkKCByZW5kZXJlci5kb21FbGVtZW50ICk7XG5cblxuXG5cdC8vXG5cblx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoICdyZXNpemUnLCBvbldpbmRvd1Jlc2l6ZSwgZmFsc2UgKTtcblxufVxuXG5mdW5jdGlvbiBvbldpbmRvd1Jlc2l6ZSgpIHtcbiAgICBjYW52YXNDb250YWluZXJXaWR0aCA9IGdldENhbnZhc0NvbnRhaW5lcldpZHRoKCk7XG5cblx0d2luZG93SGFsZlggPSBjYW52YXNDb250YWluZXJXaWR0aCAvIDI7XG5cdHdpbmRvd0hhbGZZID0gY2FudmFzSGVpZ2h0IC8gMjtcblxuXHRjYW1lcmEuYXNwZWN0ID0gY2FudmFzQ29udGFpbmVyV2lkdGggLyBjYW52YXNIZWlnaHQ7XG5cdGNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7XG5cblx0cmVuZGVyZXIuc2V0U2l6ZSggY2FudmFzQ29udGFpbmVyV2lkdGgsIGNhbnZhc0hlaWdodCApO1xuXG59XG5cbi8vXG5cbi8vXG5cbmZ1bmN0aW9uIGFuaW1hdGUoKSB7XG5cblx0cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCBhbmltYXRlICk7XG5cblx0cmVuZGVyKCk7XG5cbn1cblxuZnVuY3Rpb24gcmVuZGVyKCkge1xuXG5cblx0Y2FtZXJhLnBvc2l0aW9uLnNldCgwLDM1NSwxMjIpO1xuXG5cdHZhciBpID0gMDtcblxuXHRmb3IgKCB2YXIgaXggPSAwOyBpeCA8IEFNT1VOVFg7IGl4ICsrICkge1xuXG5cdFx0Zm9yICggdmFyIGl5ID0gMDsgaXkgPCBBTU9VTlRZOyBpeSArKyApIHtcblxuXHRcdFx0cGFydGljbGUgPSBwYXJ0aWNsZXNbIGkrKyBdO1xuXHRcdFx0cGFydGljbGUucG9zaXRpb24ueSA9ICggTWF0aC5zaW4oICggaXggKyBjb3VudCApICogMC4zICkgKiA1MCApICtcblx0XHRcdFx0KCBNYXRoLnNpbiggKCBpeSArIGNvdW50ICkgKiAwLjUgKSAqIDUwICk7XG5cdFx0XHRwYXJ0aWNsZS5zY2FsZS54ID0gcGFydGljbGUuc2NhbGUueSA9ICggTWF0aC5zaW4oICggaXggKyBjb3VudCApICogMC4zICkgKyAxICkgKiA0ICtcblx0XHRcdFx0KCBNYXRoLnNpbiggKCBpeSArIGNvdW50ICkgKiAwLjUgKSArIDEgKSAqIDQ7XG5cblx0XHR9XG5cblx0fVxuXG5cdHJlbmRlcmVyLnJlbmRlciggc2NlbmUsIGNhbWVyYSApO1xuXG5cdGNvdW50ICs9IDAuMTtcblxufVxuIl19 1 + "use strict";var container,camera,scene,renderer,particles,particle,canvasHeight=400,SEPARATION=100,AMOUNTX=80,AMOUNTY=40,particleColor="#3f3f3f",count=0,mouseX=0,mouseY=0;function getCanvasContainerWidth(){return document.querySelector(".canvas-container").clientWidth}(container=document.createElement("div")).classList.add("canvas-container"),container.classList.add("hidden"),setTimeout(function(){container.classList.remove("hidden")},1e3),document.body.appendChild(container);var windowHalfX=getCanvasContainerWidth()/2,windowHalfY=canvasHeight/2;function init(){(camera=new THREE.PerspectiveCamera(75,getCanvasContainerWidth()/canvasHeight,1,1e4)).position.z=1e4,scene=new THREE.Scene,particles=new Array;for(var n=2*Math.PI,e=new THREE.SpriteCanvasMaterial({color:particleColor,program:function(e){e.beginPath(),e.arc(0,0,.5,0,n,!0),e.fill()}}),a=0,i=0;i<AMOUNTX;i++)for(var t=0;t<AMOUNTY;t++)(particle=particles[a++]=new THREE.Sprite(e)).position.x=i*SEPARATION-AMOUNTX*SEPARATION/2,particle.position.z=t*SEPARATION-AMOUNTY*SEPARATION/2,scene.add(particle);(renderer=new THREE.CanvasRenderer).setPixelRatio(window.devicePixelRatio),renderer.setSize(getCanvasContainerWidth(),canvasHeight),container.appendChild(renderer.domElement),window.addEventListener("resize",onWindowResize,!1)}function onWindowResize(){var e=getCanvasContainerWidth();windowHalfX=e/2,windowHalfY=canvasHeight/2,camera.aspect=e/canvasHeight,camera.updateProjectionMatrix(),renderer.setSize(e,canvasHeight)}function animate(){requestAnimationFrame(animate),render()}function render(){camera.position.set(0,355,122);for(var e=0,n=0;n<AMOUNTX;n++)for(var a=0;a<AMOUNTY;a++)(particle=particles[e++]).position.y=50*Math.sin(.3*(n+count))+50*Math.sin(.5*(a+count)),particle.scale.x=particle.scale.y=4*(Math.sin(.3*(n+count))+1)+4*(Math.sin(.5*(a+count))+1);renderer.render(scene,camera),count+=.1}init(),animate(); 2 + //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpzL2JnLmpzIl0sIm5hbWVzIjpbInBhcnRpY2xlQ29sb3IiLCJjYW1lcmEiLCJzY2VuZSIsInJlbmRlcmVyIiwiY2FudmFzSGVpZ2h0IiwiU0VQQVJBVElPTiIsIkFNT1VOVFgiLCJwYXJ0aWNsZXMiLCJtb3VzZVkiLCJzZXRUaW1lb3V0IiwiY29udGFpbmVyIiwiY2xhc3NMaXN0IiwicXVlcnlTZWxlY3RvciIsImNsaWVudFdpZHRoIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiYWRkIiwibW91c2VYIiwicmVtb3ZlIiwid2luZG93SGFsZlgiLCJnZXRDYW52YXNDb250YWluZXJXaWR0aCIsIndpbmRvd0hhbGZZIiwiaW5pdCIsImFuaW1hdGUiLCJUSFJFRSIsIlNjZW5lIiwiUEkyIiwiTWF0aCIsIlBJIiwiU3ByaXRlQ2FudmFzTWF0ZXJpYWwiLCJwcm9ncmFtIiwiY29udGV4dCIsIm1hdGVyaWFsIiwiYXJjIiwiY29sb3IiLCJpIiwiaXgiLCJpeSIsIkFNT1VOVFkiLCJwYXJ0aWNsZSIsIlNwcml0ZSIsInBvc2l0aW9uIiwieCIsIkNhbnZhc1JlbmRlcmVyIiwic2V0UGl4ZWxSYXRpbyIsIndpbmRvdyIsImRldmljZVBpeGVsUmF0aW8iLCJhZGRFdmVudExpc3RlbmVyIiwib25XaW5kb3dSZXNpemUiLCJjYW52YXNDb250YWluZXJXaWR0aCIsInVwZGF0ZVByb2plY3Rpb25NYXRyaXgiLCJzZXRTaXplIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwicmVuZGVyIiwic2V0Iiwic2NhbGUiLCJ5Iiwic2luIiwiY291bnQiXSwibWFwcGluZ3MiOiJhQUNBLElBSUlBLFVBR0FDLE9BQVFDLE1BQU9DLFNBQWZGLFVBQVFDLFNBUFJFLGFBQWUsSUFEbkJDLFdBQUEsSUFDSUQsUUFBQUEsR0FDQUMsUUFBQUEsR0FDQUMsY0FBSixVQUttQkgsTUFBbkIsRUFFSUksT0FBSixFQUFBQyxPQUFBLEVBT0FDLFNBQUFBLDBCQUNJQyxPQUFVQyxTQUFWQyxjQUEyQixxQkFBM0JDLGFBUkpILFVBQWlDSSxTQUFqQ0MsY0FBQSxRQUtVSixVQUFVSyxJQUFJLG9CQUh4Qk4sVUFBSU8sVUFBSkQsSUFBQSxVQUFBUCxXQUFnQkQsV0FNWkUsVUFBVUMsVUFBVU8sT0FBTyxXQUovQlIsS0FDQUEsU0FBQUEsS0FBVUMsWUFBY0QsV0FXeEIsSUFBSVMsWUFBY0MsMEJBQTRCLEVBSjlDQyxZQUFTRCxhQUFULEVBS0EsU0FBSUMsUUFFSkMsT0FBQUEsSUFBQUEsTUFBQUEsa0JBQUFBLEdBQUFBLDBCQUFBQSxhQUFBQSxFQUFBQSxNQUNBQyxTQUFBQSxFQUFBQSxJQUVBckIsTUFBU29CLElBQVRFLE1BQWdCQyxNQUVmeEIsVUFBUyxJQUFJdUIsTUFRa0MsSUFEL0MsSUFBSUUsRUFBZ0IsRUFBVkMsS0FBS0MsR0FKZjFCLEVBQVlzQixJQUFNQyxNQUFsQkkscUJBQUEsQ0FFQXRCLE1BQUFBLGNBTUN1QixRQUFTLFNBQVdDLEdBSHJCQSxFQUFJQyxZQU1GRCxFQUFRRSxJQUFLLEVBQUcsRUFBRyxHQUFLLEVBQUdQLEdBQUssR0FKakNRLEVBQU9sQyxVQU9ObUMsRUFBQSxFQVRGQyxFQUFBLEVBQUFBLEVBQUE5QixRQUFBOEIsSUFhQSxJQUFJRCxJQUFKRSxFQUFBLEVBQUFBLEVBQUFDLFFBQUFELEtBRUFFLFNBQVVILFVBQWE5QixLQUFTOEIsSUFBUVosTUFBQWdCLE9BQUFSLElBSzdCUyxTQUFTQyxFQUFJTixFQUFLL0IsV0FBaUJDLFFBQVVELFdBQWUsRUFIdEVrQyxTQUFVRixTQUFRQSxFQUFLQyxFQUFBQSxXQUFpQkEsUUFBQWpDLFdBQUEsRUFLdkNILE1BQU1jLElBQUt1QixXQUlacEMsU0FBQSxJQUFBcUIsTUFBQW1CLGdCQUdRQyxjQUFlQyxPQUFPQyxrQkFEL0IzQyxTQUFBQSxRQUFlcUIsMEJBQWZwQixjQUNBRCxVQUFTeUMsWUFBZUMsU0FBT0MsWUFRL0JELE9BQU9FLGlCQUFrQixTQUFVQyxnQkFBZ0IsR0FLbEQsU0FBSUMsaUJBQUosSUFBSUEsRUFBdUI3QiwwQkFHNUJDLFlBQWNqQixFQUFkLEVBQUFpQixZQUFjakIsYUFBZSxFQUc3QkgsT0FBT2lELE9BQUFBLEVBQVA5QyxhQUFBSCxPQUFPaUQseUJBSVAvQyxTQUFBZ0QsUUFBQUYsRUFBQTdDLGNBUUFnRCxTQUFBQSxVQUVBQyxzQkFBQUEsU0FBQUEsU0FJRCxTQUFTQSxTQU9ScEQsT0FBTXdDLFNBQU5hLElBQWtCbEIsRUFBSzlCLElBQUFBLEtBSXJCaUMsSUFGRCxJQUFBSixFQUFNLEVBRUxJLEVBQVdoQyxFQUFBQSxFQUFXNEIsUUFBdEJDLElBR0FHLElBQUFBLElBQVNnQixFQUFULEVBQUFsQixFQUFtQkUsUUFBU2dCLEtBSzdCaEIsU0FBQWhDLFVBQUE0QixNQVBVTSxTQUFTZSxFQUF5QyxHQUFuQzdCLEtBQUs4QixJQUFzQixJQUFmckIsRUFBS3NCLFFBUzNDLEdBQUF2RCxLQUFTa0QsSUFBVCxJQUFpQm5ELEVBQWpCd0QsUUFQRW5CLFNBQVNnQixNQUFNYixFQUFJSCxTQUFTZ0IsTUFBTUMsRUFBK0MsR0FBekM3QixLQUFLOEIsSUFBc0IsSUFBZnJCLEVBQUtzQixRQUFrQixHQVM3RSxHQUFBQSxLQUFTRCxJQUFULElBQUFwQixFQUFBcUIsUUFBQSxHQUZBdkQsU0FBU2tELE9BQVFuRCxNQUFPRCxRQUV4QnlELE9BQVMsR0EzR1RwQyxPQU1EQyIsImZpbGUiOiJqcy9iZy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIG1pbk9uU2F2ZTogdHJ1ZSwgbWluaWZpZXI6IHVnbGlmeS1qc1xudmFyIGNhbnZhc0hlaWdodCA9IDQwMDtcbnZhciBTRVBBUkFUSU9OID0gMTAwO1xudmFyIEFNT1VOVFggPSA4MDtcbnZhciBBTU9VTlRZID0gNDA7XG52YXIgcGFydGljbGVDb2xvciA9IFwiIzNmM2YzZlwiO1xuXG52YXIgY29udGFpbmVyO1xudmFyIGNhbWVyYSwgc2NlbmUsIHJlbmRlcmVyO1xuXG52YXIgcGFydGljbGVzLCBwYXJ0aWNsZSwgY291bnQgPSAwO1xuXG52YXIgbW91c2VYID0gMCwgbW91c2VZID0gMDtcblxuY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKTtcbmNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKFwiY2FudmFzLWNvbnRhaW5lclwiKTtcbmNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKFwiaGlkZGVuXCIpO1xuc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICBjb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZShcImhpZGRlblwiKTtcbn0sIDEwMDApO1xuZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCggY29udGFpbmVyICk7XG5cbmZ1bmN0aW9uIGdldENhbnZhc0NvbnRhaW5lcldpZHRoKCkge1xuICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmNhbnZhcy1jb250YWluZXJcIikuY2xpZW50V2lkdGg7XG59XG5cbnZhciB3aW5kb3dIYWxmWCA9IGdldENhbnZhc0NvbnRhaW5lcldpZHRoKCkgLyAyO1xudmFyIHdpbmRvd0hhbGZZID0gY2FudmFzSGVpZ2h0IC8gMjtcblxuaW5pdCgpO1xuYW5pbWF0ZSgpO1xuXG5mdW5jdGlvbiBpbml0KCkge1xuXG5cdGNhbWVyYSA9IG5ldyBUSFJFRS5QZXJzcGVjdGl2ZUNhbWVyYSggNzUsIGdldENhbnZhc0NvbnRhaW5lcldpZHRoKCkgLyBjYW52YXNIZWlnaHQsIDEsIDEwMDAwICk7XG5cdGNhbWVyYS5wb3NpdGlvbi56ID0gMTAwMDA7XG5cblx0c2NlbmUgPSBuZXcgVEhSRUUuU2NlbmUoKTtcblxuXHRwYXJ0aWNsZXMgPSBuZXcgQXJyYXkoKTtcblxuXHR2YXIgUEkyID0gTWF0aC5QSSAqIDI7XG5cdHZhciBtYXRlcmlhbCA9IG5ldyBUSFJFRS5TcHJpdGVDYW52YXNNYXRlcmlhbCgge1xuXG5cdFx0Y29sb3I6IHBhcnRpY2xlQ29sb3IsXG5cdFx0cHJvZ3JhbTogZnVuY3Rpb24gKCBjb250ZXh0ICkge1xuXG5cdFx0XHRjb250ZXh0LmJlZ2luUGF0aCgpO1xuXHRcdFx0Y29udGV4dC5hcmMoIDAsIDAsIDAuNSwgMCwgUEkyLCB0cnVlICk7XG5cdFx0XHRjb250ZXh0LmZpbGwoKTtcblxuXHRcdH1cblxuXHR9ICk7XG5cblx0dmFyIGkgPSAwO1xuXG5cdGZvciAoIHZhciBpeCA9IDA7IGl4IDwgQU1PVU5UWDsgaXggKysgKSB7XG5cblx0XHRmb3IgKCB2YXIgaXkgPSAwOyBpeSA8IEFNT1VOVFk7IGl5ICsrICkge1xuXG5cdFx0XHRwYXJ0aWNsZSA9IHBhcnRpY2xlc1sgaSArKyBdID0gbmV3IFRIUkVFLlNwcml0ZSggbWF0ZXJpYWwgKTtcblx0XHRcdHBhcnRpY2xlLnBvc2l0aW9uLnggPSBpeCAqIFNFUEFSQVRJT04gLSAoICggQU1PVU5UWCAqIFNFUEFSQVRJT04gKSAvIDIgKTtcblx0XHRcdHBhcnRpY2xlLnBvc2l0aW9uLnogPSBpeSAqIFNFUEFSQVRJT04gLSAoICggQU1PVU5UWSAqIFNFUEFSQVRJT04gKSAvIDIgKTtcblx0XHRcdHNjZW5lLmFkZCggcGFydGljbGUgKTtcblxuXHRcdH1cblxuXHR9XG5cblx0cmVuZGVyZXIgPSBuZXcgVEhSRUUuQ2FudmFzUmVuZGVyZXIoKTtcblx0cmVuZGVyZXIuc2V0UGl4ZWxSYXRpbyggd2luZG93LmRldmljZVBpeGVsUmF0aW8gKTtcblx0cmVuZGVyZXIuc2V0U2l6ZSggZ2V0Q2FudmFzQ29udGFpbmVyV2lkdGgoKSwgY2FudmFzSGVpZ2h0ICk7XG5cdGNvbnRhaW5lci5hcHBlbmRDaGlsZCggcmVuZGVyZXIuZG9tRWxlbWVudCApO1xuXG5cblxuXHQvL1xuXG5cdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCAncmVzaXplJywgb25XaW5kb3dSZXNpemUsIGZhbHNlICk7XG5cbn1cblxuZnVuY3Rpb24gb25XaW5kb3dSZXNpemUoKSB7XG4gIHZhciBjYW52YXNDb250YWluZXJXaWR0aCA9IGdldENhbnZhc0NvbnRhaW5lcldpZHRoKCk7XG5cblx0d2luZG93SGFsZlggPSBjYW52YXNDb250YWluZXJXaWR0aCAvIDI7XG5cdHdpbmRvd0hhbGZZID0gY2FudmFzSGVpZ2h0IC8gMjtcblxuXHRjYW1lcmEuYXNwZWN0ID0gY2FudmFzQ29udGFpbmVyV2lkdGggLyBjYW52YXNIZWlnaHQ7XG5cdGNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7XG5cblx0cmVuZGVyZXIuc2V0U2l6ZSggY2FudmFzQ29udGFpbmVyV2lkdGgsIGNhbnZhc0hlaWdodCApO1xuXG59XG5cbi8vXG5cbi8vXG5cbmZ1bmN0aW9uIGFuaW1hdGUoKSB7XG5cblx0cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCBhbmltYXRlICk7XG5cblx0cmVuZGVyKCk7XG5cbn1cblxuZnVuY3Rpb24gcmVuZGVyKCkge1xuXG5cblx0Y2FtZXJhLnBvc2l0aW9uLnNldCgwLDM1NSwxMjIpO1xuXG5cdHZhciBpID0gMDtcblxuXHRmb3IgKCB2YXIgaXggPSAwOyBpeCA8IEFNT1VOVFg7IGl4ICsrICkge1xuXG5cdFx0Zm9yICggdmFyIGl5ID0gMDsgaXkgPCBBTU9VTlRZOyBpeSArKyApIHtcblxuXHRcdFx0cGFydGljbGUgPSBwYXJ0aWNsZXNbIGkrKyBdO1xuXHRcdFx0cGFydGljbGUucG9zaXRpb24ueSA9ICggTWF0aC5zaW4oICggaXggKyBjb3VudCApICogMC4zICkgKiA1MCApICtcblx0XHRcdFx0KCBNYXRoLnNpbiggKCBpeSArIGNvdW50ICkgKiAwLjUgKSAqIDUwICk7XG5cdFx0XHRwYXJ0aWNsZS5zY2FsZS54ID0gcGFydGljbGUuc2NhbGUueSA9ICggTWF0aC5zaW4oICggaXggKyBjb3VudCApICogMC4zICkgKyAxICkgKiA0ICtcblx0XHRcdFx0KCBNYXRoLnNpbiggKCBpeSArIGNvdW50ICkgKiAwLjUgKSArIDEgKSAqIDQ7XG5cblx0XHR9XG5cblx0fVxuXG5cdHJlbmRlcmVyLnJlbmRlciggc2NlbmUsIGNhbWVyYSApO1xuXG5cdGNvdW50ICs9IDAuMTtcblxufVxuIl19
-40
docs/js/bg.min.js
··· 1 - "use strict"; 2 - 3 - function getCanvasContainerWidth() { 4 - return document.querySelector(".canvas-container").clientWidth; 5 - }function init() { 6 - camera = new THREE.PerspectiveCamera(75, getCanvasContainerWidth() / canvasHeight, 1, 1e4), camera.position.z = 1e4, scene = new THREE.Scene(), particles = new Array();for (var e = 2 * Math.PI, n = new THREE.SpriteCanvasMaterial({ color: particleColor, program: function program(n) { 7 - n.beginPath(), n.arc(0, 0, .5, 0, e, !0), n.fill(); 8 - } }), a = 0, i = 0; i < AMOUNTX; i++) { 9 - for (var t = 0; t < AMOUNTY; t++) { 10 - particle = particles[a++] = new THREE.Sprite(n), particle.position.x = i * SEPARATION - AMOUNTX * SEPARATION / 2, particle.position.z = t * SEPARATION - AMOUNTY * SEPARATION / 2, scene.add(particle); 11 - } 12 - }renderer = new THREE.CanvasRenderer(), renderer.setPixelRatio(window.devicePixelRatio), renderer.setSize(getCanvasContainerWidth(), canvasHeight), container.appendChild(renderer.domElement), window.addEventListener("resize", onWindowResize, !1); 13 - }function onWindowResize() { 14 - canvasContainerWidth = getCanvasContainerWidth(), windowHalfX = canvasContainerWidth / 2, windowHalfY = canvasHeight / 2, camera.aspect = canvasContainerWidth / canvasHeight, camera.updateProjectionMatrix(), renderer.setSize(canvasContainerWidth, canvasHeight); 15 - }function animate() { 16 - requestAnimationFrame(animate), render(); 17 - }function render() { 18 - camera.position.set(0, 355, 122);for (var e = 0, n = 0; n < AMOUNTX; n++) { 19 - for (var a = 0; a < AMOUNTY; a++) { 20 - particle = particles[e++], particle.position.y = 50 * Math.sin(.3 * (n + count)) + 50 * Math.sin(.5 * (a + count)), particle.scale.x = particle.scale.y = 4 * (Math.sin(.3 * (n + count)) + 1) + 4 * (Math.sin(.5 * (a + count)) + 1); 21 - } 22 - }renderer.render(scene, camera), count += .1; 23 - }var canvasHeight = 400, 24 - SEPARATION = 100, 25 - AMOUNTX = 80, 26 - AMOUNTY = 40, 27 - particleColor = "#3f3f3f", 28 - container, 29 - camera, 30 - scene, 31 - renderer, 32 - particles, 33 - particle, 34 - count = 0, 35 - mouseX = 0, 36 - mouseY = 0;container = document.createElement("div"), container.classList.add("canvas-container"), container.classList.add("hidden"), setTimeout(function () { 37 - container.classList.remove("hidden"); 38 - }, 1e3), document.body.appendChild(container);var windowHalfX = getCanvasContainerWidth() / 2, 39 - windowHalfY = canvasHeight / 2;init(), animate(); 40 - //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpzL2JnLm1pbi5qcyJdLCJuYW1lcyI6WyJnZXRDYW52YXNDb250YWluZXJXaWR0aCIsImRvY3VtZW50IiwicXVlcnlTZWxlY3RvciIsImNsaWVudFdpZHRoIiwiaW5pdCIsImNhbWVyYSIsIlRIUkVFIiwiUGVyc3BlY3RpdmVDYW1lcmEiLCJjYW52YXNIZWlnaHQiLCJwb3NpdGlvbiIsInoiLCJzY2VuZSIsIlNjZW5lIiwicGFydGljbGVzIiwiQXJyYXkiLCJlIiwiTWF0aCIsIlBJIiwibiIsIlNwcml0ZUNhbnZhc01hdGVyaWFsIiwiY29sb3IiLCJwYXJ0aWNsZUNvbG9yIiwicHJvZ3JhbSIsImJlZ2luUGF0aCIsImFyYyIsImZpbGwiLCJhIiwiaSIsIkFNT1VOVFgiLCJ0IiwiQU1PVU5UWSIsInBhcnRpY2xlIiwiU3ByaXRlIiwieCIsIlNFUEFSQVRJT04iLCJhZGQiLCJyZW5kZXJlciIsIkNhbnZhc1JlbmRlcmVyIiwic2V0UGl4ZWxSYXRpbyIsIndpbmRvdyIsImRldmljZVBpeGVsUmF0aW8iLCJzZXRTaXplIiwiY29udGFpbmVyIiwiYXBwZW5kQ2hpbGQiLCJkb21FbGVtZW50IiwiYWRkRXZlbnRMaXN0ZW5lciIsIm9uV2luZG93UmVzaXplIiwiY2FudmFzQ29udGFpbmVyV2lkdGgiLCJ3aW5kb3dIYWxmWCIsIndpbmRvd0hhbGZZIiwiYXNwZWN0IiwidXBkYXRlUHJvamVjdGlvbk1hdHJpeCIsImFuaW1hdGUiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJyZW5kZXIiLCJzZXQiLCJ5Iiwic2luIiwiY291bnQiLCJzY2FsZSIsIm1vdXNlWCIsIm1vdXNlWSIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc0xpc3QiLCJzZXRUaW1lb3V0IiwicmVtb3ZlIiwiYm9keSJdLCJtYXBwaW5ncyI6Ijs7QUFBQSxTQUFTQSx1QkFBVCxHQUFrQztBQUFDLFNBQU9DLFNBQVNDLGFBQVQsQ0FBdUIsbUJBQXZCLEVBQTRDQyxXQUFuRDtBQUErRCxVQUFTQyxJQUFULEdB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QUExQztBQUFBLElBQTRDaUQsY0FBWXpDLGVBQWEsQ0FBckUsQ0FBdUVKLFFBQU9nRCxTQUFQIiwiZmlsZSI6ImpzL2JnLm1pbi5qcyIsInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIGdldENhbnZhc0NvbnRhaW5lcldpZHRoKCl7cmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuY2FudmFzLWNvbnRhaW5lclwiKS5jbGllbnRXaWR0aH1mdW5jdGlvbiBpbml0KCl7Y2FtZXJhPW5ldyBUSFJFRS5QZXJzcGVjdGl2ZUNhbWVyYSg3NSxnZXRDYW52YXNDb250YWluZXJXaWR0aCgpL2NhbnZhc0hlaWdodCwxLDFlNCksY2FtZXJhLnBvc2l0aW9uLno9MWU0LHNjZW5lPW5ldyBUSFJFRS5TY2VuZSxwYXJ0aWNsZXM9bmV3IEFycmF5O2Zvcih2YXIgZT0yKk1hdGguUEksbj1uZXcgVEhSRUUuU3ByaXRlQ2FudmFzTWF0ZXJpYWwoe2NvbG9yOnBhcnRpY2xlQ29sb3IscHJvZ3JhbTpmdW5jdGlvbihuKXtuLmJlZ2luUGF0aCgpLG4uYXJjKDAsMCwuNSwwLGUsITApLG4uZmlsbCgpfX0pLGE9MCxpPTA7aTxBTU9VTlRYO2krKylmb3IodmFyIHQ9MDt0PEFNT1VOVFk7dCsrKXBhcnRpY2xlPXBhcnRpY2xlc1thKytdPW5ldyBUSFJFRS5TcHJpdGUobikscGFydGljbGUucG9zaXRpb24ueD1pKlNFUEFSQVRJT04tQU1PVU5UWCpTRVBBUkFUSU9OLzIscGFydGljbGUucG9zaXRpb24uej10KlNFUEFSQVRJT04tQU1PVU5UWSpTRVBBUkFUSU9OLzIsc2NlbmUuYWRkKHBhcnRpY2xlKTtyZW5kZXJlcj1uZXcgVEhSRUUuQ2FudmFzUmVuZGVyZXIscmVuZGVyZXIuc2V0UGl4ZWxSYXRpbyh3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbykscmVuZGVyZXIuc2V0U2l6ZShnZXRDYW52YXNDb250YWluZXJXaWR0aCgpLGNhbnZhc0hlaWdodCksY29udGFpbmVyLmFwcGVuZENoaWxkKHJlbmRlcmVyLmRvbUVsZW1lbnQpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsb25XaW5kb3dSZXNpemUsITEpfWZ1bmN0aW9uIG9uV2luZG93UmVzaXplKCl7Y2FudmFzQ29udGFpbmVyV2lkdGg9Z2V0Q2FudmFzQ29udGFpbmVyV2lkdGgoKSx3aW5kb3dIYWxmWD1jYW52YXNDb250YWluZXJXaWR0aC8yLHdpbmRvd0hhbGZZPWNhbnZhc0hlaWdodC8yLGNhbWVyYS5hc3BlY3Q9Y2FudmFzQ29udGFpbmVyV2lkdGgvY2FudmFzSGVpZ2h0LGNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCkscmVuZGVyZXIuc2V0U2l6ZShjYW52YXNDb250YWluZXJXaWR0aCxjYW52YXNIZWlnaHQpfWZ1bmN0aW9uIGFuaW1hdGUoKXtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYW5pbWF0ZSkscmVuZGVyKCl9ZnVuY3Rpb24gcmVuZGVyKCl7Y2FtZXJhLnBvc2l0aW9uLnNldCgwLDM1NSwxMjIpO2Zvcih2YXIgZT0wLG49MDtuPEFNT1VOVFg7bisrKWZvcih2YXIgYT0wO2E8QU1PVU5UWTthKyspcGFydGljbGU9cGFydGljbGVzW2UrK10scGFydGljbGUucG9zaXRpb24ueT01MCpNYXRoLnNpbiguMyoobitjb3VudCkpKzUwKk1hdGguc2luKC41KihhK2NvdW50KSkscGFydGljbGUuc2NhbGUueD1wYXJ0aWNsZS5zY2FsZS55PTQqKE1hdGguc2luKC4zKihuK2NvdW50KSkrMSkrNCooTWF0aC5zaW4oLjUqKGErY291bnQpKSsxKTtyZW5kZXJlci5yZW5kZXIoc2NlbmUsY2FtZXJhKSxjb3VudCs9LjF9dmFyIGNhbnZhc0hlaWdodD00MDAsU0VQQVJBVElPTj0xMDAsQU1PVU5UWD04MCxBTU9VTlRZPTQwLHBhcnRpY2xlQ29sb3I9XCIjM2YzZjNmXCIsY29udGFpbmVyLGNhbWVyYSxzY2VuZSxyZW5kZXJlcixwYXJ0aWNsZXMscGFydGljbGUsY291bnQ9MCxtb3VzZVg9MCxtb3VzZVk9MDtjb250YWluZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSxjb250YWluZXIuY2xhc3NMaXN0LmFkZChcImNhbnZhcy1jb250YWluZXJcIiksY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJoaWRkZW5cIiksc2V0VGltZW91dChmdW5jdGlvbigpe2NvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKFwiaGlkZGVuXCIpfSwxZTMpLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTt2YXIgd2luZG93SGFsZlg9Z2V0Q2FudmFzQ29udGFpbmVyV2lkdGgoKS8yLHdpbmRvd0hhbGZZPWNhbnZhc0hlaWdodC8yO2luaXQoKSxhbmltYXRlKCk7Il19
+2 -1934
docs/js/canvas-renderer-and-projector.js
··· 1 - 'use strict'; 2 - 3 - // minOnSave: true, minifier: uglify-js 4 - var bgColor = 0xffffff; 5 - /** 6 - * @author mrdoob / http://mrdoob.com/ 7 - */ 8 - 9 - THREE.SpriteCanvasMaterial = function (parameters) { 10 - 11 - THREE.Material.call(this); 12 - 13 - this.type = 'SpriteCanvasMaterial'; 14 - 15 - this.color = new THREE.Color(0xffffff); 16 - this.program = function () {}; 17 - 18 - this.setValues(parameters); 19 - }; 20 - 21 - THREE.SpriteCanvasMaterial.prototype = Object.create(THREE.Material.prototype); 22 - THREE.SpriteCanvasMaterial.prototype.constructor = THREE.SpriteCanvasMaterial; 23 - THREE.SpriteCanvasMaterial.prototype.isSpriteCanvasMaterial = true; 24 - 25 - THREE.SpriteCanvasMaterial.prototype.clone = function () { 26 - 27 - var material = new THREE.SpriteCanvasMaterial(); 28 - 29 - material.copy(this); 30 - material.color.copy(this.color); 31 - material.program = this.program; 32 - 33 - return material; 34 - }; 35 - 36 - // 37 - 38 - THREE.CanvasRenderer = function (parameters) { 39 - 40 - console.log('THREE.CanvasRenderer', THREE.REVISION); 41 - 42 - parameters = parameters || {}; 43 - 44 - var _this = this, 45 - _renderData, 46 - _elements, 47 - _lights, 48 - _projector = new THREE.Projector(), 49 - _canvas = parameters.canvas !== undefined ? parameters.canvas : document.createElement('canvas'), 50 - _canvasWidth = _canvas.width, 51 - _canvasHeight = _canvas.height, 52 - _canvasWidthHalf = Math.floor(_canvasWidth / 2), 53 - _canvasHeightHalf = Math.floor(_canvasHeight / 2), 54 - _viewportX = 0, 55 - _viewportY = 0, 56 - _viewportWidth = _canvasWidth, 57 - _viewportHeight = _canvasHeight, 58 - _pixelRatio = 1, 59 - _context = _canvas.getContext('2d', { 60 - alpha: parameters.alpha === true 61 - }), 62 - _clearColor = new THREE.Color(bgColor), 63 - _clearAlpha = parameters.alpha === true ? 0 : 1, 64 - _contextGlobalAlpha = 1, 65 - _contextGlobalCompositeOperation = 0, 66 - _contextStrokeStyle = null, 67 - _contextFillStyle = null, 68 - _contextLineWidth = null, 69 - _contextLineCap = null, 70 - _contextLineJoin = null, 71 - _contextLineDash = [], 72 - _v1, 73 - _v2, 74 - _v3, 75 - _v1x, 76 - _v1y, 77 - _v2x, 78 - _v2y, 79 - _v3x, 80 - _v3y, 81 - _color = new THREE.Color(), 82 - _diffuseColor = new THREE.Color(), 83 - _emissiveColor = new THREE.Color(), 84 - _lightColor = new THREE.Color(), 85 - _patterns = {}, 86 - _uvs, 87 - _uv1x, 88 - _uv1y, 89 - _uv2x, 90 - _uv2y, 91 - _uv3x, 92 - _uv3y, 93 - _clipBox = new THREE.Box2(), 94 - _clearBox = new THREE.Box2(), 95 - _elemBox = new THREE.Box2(), 96 - _ambientLight = new THREE.Color(), 97 - _directionalLights = new THREE.Color(), 98 - _pointLights = new THREE.Color(), 99 - _vector3 = new THREE.Vector3(), 100 - // Needed for PointLight 101 - _centroid = new THREE.Vector3(), 102 - _normal = new THREE.Vector3(), 103 - _normalViewMatrix = new THREE.Matrix3(); 104 - 105 - /* TODO 106 - _canvas.mozImageSmoothingEnabled = false; 107 - _canvas.webkitImageSmoothingEnabled = false; 108 - _canvas.msImageSmoothingEnabled = false; 109 - _canvas.imageSmoothingEnabled = false; 110 - */ 111 - 112 - // dash+gap fallbacks for Firefox and everything else 113 - 114 - if (_context.setLineDash === undefined) { 115 - 116 - _context.setLineDash = function () {}; 117 - } 118 - 119 - this.domElement = _canvas; 120 - 121 - this.autoClear = true; 122 - this.sortObjects = true; 123 - this.sortElements = true; 124 - 125 - this.info = { 126 - 127 - render: { 128 - 129 - vertices: 0, 130 - faces: 0 131 - 132 - } 133 - 134 - }; 135 - 136 - // API 137 - 138 - this.getContext = function () { 139 - 140 - return _context; 141 - }; 142 - 143 - this.getContextAttributes = function () { 144 - 145 - return _context.getContextAttributes(); 146 - }; 147 - 148 - this.getPixelRatio = function () { 149 - 150 - return _pixelRatio; 151 - }; 152 - 153 - this.setPixelRatio = function (value) { 154 - 155 - if (value !== undefined) _pixelRatio = value; 156 - }; 157 - 158 - this.setSize = function (width, height, updateStyle) { 159 - 160 - _canvasWidth = width * _pixelRatio; 161 - _canvasHeight = height * _pixelRatio; 162 - 163 - _canvas.width = _canvasWidth; 164 - _canvas.height = _canvasHeight; 165 - 166 - _canvasWidthHalf = Math.floor(_canvasWidth / 2); 167 - _canvasHeightHalf = Math.floor(_canvasHeight / 2); 168 - 169 - if (updateStyle !== false) { 170 - 171 - _canvas.style.width = width + 'px'; 172 - _canvas.style.height = height + 'px'; 173 - } 174 - 175 - _clipBox.min.set(-_canvasWidthHalf, -_canvasHeightHalf); 176 - _clipBox.max.set(_canvasWidthHalf, _canvasHeightHalf); 177 - 178 - _clearBox.min.set(-_canvasWidthHalf, -_canvasHeightHalf); 179 - _clearBox.max.set(_canvasWidthHalf, _canvasHeightHalf); 180 - 181 - _contextGlobalAlpha = 1; 182 - _contextGlobalCompositeOperation = 0; 183 - _contextStrokeStyle = null; 184 - _contextFillStyle = null; 185 - _contextLineWidth = null; 186 - _contextLineCap = null; 187 - _contextLineJoin = null; 188 - 189 - this.setViewport(0, 0, width, height); 190 - }; 191 - 192 - this.setViewport = function (x, y, width, height) { 193 - 194 - _viewportX = x * _pixelRatio; 195 - _viewportY = y * _pixelRatio; 196 - 197 - _viewportWidth = width * _pixelRatio; 198 - _viewportHeight = height * _pixelRatio; 199 - }; 200 - 201 - this.setScissor = function () {}; 202 - this.setScissorTest = function () {}; 203 - 204 - this.setClearColor = function (color, alpha) { 205 - 206 - _clearColor.set(color); 207 - _clearAlpha = alpha !== undefined ? alpha : 1; 208 - 209 - _clearBox.min.set(-_canvasWidthHalf, -_canvasHeightHalf); 210 - _clearBox.max.set(_canvasWidthHalf, _canvasHeightHalf); 211 - }; 212 - 213 - this.setClearColorHex = function (hex, alpha) { 214 - 215 - console.warn('THREE.CanvasRenderer: .setClearColorHex() is being removed. Use .setClearColor() instead.'); 216 - this.setClearColor(hex, alpha); 217 - }; 218 - 219 - this.getClearColor = function () { 220 - 221 - return _clearColor; 222 - }; 223 - 224 - this.getClearAlpha = function () { 225 - 226 - return _clearAlpha; 227 - }; 228 - 229 - this.getMaxAnisotropy = function () { 230 - 231 - return 0; 232 - }; 233 - 234 - this.clear = function () { 235 - 236 - if (_clearBox.isEmpty() === false) { 237 - 238 - _clearBox.intersect(_clipBox); 239 - _clearBox.expandByScalar(2); 240 - 241 - _clearBox.min.x = _clearBox.min.x + _canvasWidthHalf; 242 - _clearBox.min.y = -_clearBox.min.y + _canvasHeightHalf; // higher y value ! 243 - _clearBox.max.x = _clearBox.max.x + _canvasWidthHalf; 244 - _clearBox.max.y = -_clearBox.max.y + _canvasHeightHalf; // lower y value ! 245 - 246 - if (_clearAlpha < 1) { 247 - 248 - _context.clearRect(_clearBox.min.x | 0, _clearBox.max.y | 0, _clearBox.max.x - _clearBox.min.x | 0, _clearBox.min.y - _clearBox.max.y | 0); 249 - } 250 - 251 - if (_clearAlpha > 0) { 252 - 253 - setOpacity(1); 254 - setBlending(THREE.NormalBlending); 255 - 256 - setFillStyle('rgba(' + Math.floor(_clearColor.r * 255) + ',' + Math.floor(_clearColor.g * 255) + ',' + Math.floor(_clearColor.b * 255) + ',' + _clearAlpha + ')'); 257 - 258 - _context.fillRect(_clearBox.min.x | 0, _clearBox.max.y | 0, _clearBox.max.x - _clearBox.min.x | 0, _clearBox.min.y - _clearBox.max.y | 0); 259 - } 260 - 261 - _clearBox.makeEmpty(); 262 - } 263 - }; 264 - 265 - // compatibility 266 - 267 - this.clearColor = function () {}; 268 - this.clearDepth = function () {}; 269 - this.clearStencil = function () {}; 270 - 271 - this.render = function (scene, camera) { 272 - 273 - if (camera.isCamera === undefined) { 274 - 275 - console.error('THREE.CanvasRenderer.render: camera is not an instance of THREE.Camera.'); 276 - return; 277 - } 278 - 279 - var background = scene.background; 280 - 281 - if (background && background.isColor) { 282 - 283 - setOpacity(1); 284 - setBlending(THREE.NormalBlending); 285 - 286 - setFillStyle(background.getStyle()); 287 - _context.fillRect(0, 0, _canvasWidth, _canvasHeight); 288 - } else if (this.autoClear === true) { 289 - 290 - this.clear(); 291 - } 292 - 293 - _this.info.render.vertices = 0; 294 - _this.info.render.faces = 0; 295 - 296 - _context.setTransform(_viewportWidth / _canvasWidth, 0, 0, -_viewportHeight / _canvasHeight, _viewportX, _canvasHeight - _viewportY); 297 - _context.translate(_canvasWidthHalf, _canvasHeightHalf); 298 - 299 - _renderData = _projector.projectScene(scene, camera, this.sortObjects, this.sortElements); 300 - _elements = _renderData.elements; 301 - _lights = _renderData.lights; 302 - 303 - _normalViewMatrix.getNormalMatrix(camera.matrixWorldInverse); 304 - 305 - /* DEBUG 306 - setFillStyle( 'rgba( 0, 255, 255, 0.5 )' ); 307 - _context.fillRect( _clipBox.min.x, _clipBox.min.y, _clipBox.max.x - _clipBox.min.x, _clipBox.max.y - _clipBox.min.y ); 308 - */ 309 - 310 - calculateLights(); 311 - 312 - for (var e = 0, el = _elements.length; e < el; e++) { 313 - 314 - var element = _elements[e]; 315 - 316 - var material = element.material; 317 - 318 - if (material === undefined || material.opacity === 0) continue; 319 - 320 - _elemBox.makeEmpty(); 321 - 322 - if (element instanceof THREE.RenderableSprite) { 323 - 324 - _v1 = element; 325 - _v1.x *= _canvasWidthHalf;_v1.y *= _canvasHeightHalf; 326 - 327 - renderSprite(_v1, element, material); 328 - } else if (element instanceof THREE.RenderableLine) { 329 - 330 - _v1 = element.v1;_v2 = element.v2; 331 - 332 - _v1.positionScreen.x *= _canvasWidthHalf;_v1.positionScreen.y *= _canvasHeightHalf; 333 - _v2.positionScreen.x *= _canvasWidthHalf;_v2.positionScreen.y *= _canvasHeightHalf; 334 - 335 - _elemBox.setFromPoints([_v1.positionScreen, _v2.positionScreen]); 336 - 337 - if (_clipBox.intersectsBox(_elemBox) === true) { 338 - 339 - renderLine(_v1, _v2, element, material); 340 - } 341 - } else if (element instanceof THREE.RenderableFace) { 342 - 343 - _v1 = element.v1;_v2 = element.v2;_v3 = element.v3; 344 - 345 - if (_v1.positionScreen.z < -1 || _v1.positionScreen.z > 1) continue; 346 - if (_v2.positionScreen.z < -1 || _v2.positionScreen.z > 1) continue; 347 - if (_v3.positionScreen.z < -1 || _v3.positionScreen.z > 1) continue; 348 - 349 - _v1.positionScreen.x *= _canvasWidthHalf;_v1.positionScreen.y *= _canvasHeightHalf; 350 - _v2.positionScreen.x *= _canvasWidthHalf;_v2.positionScreen.y *= _canvasHeightHalf; 351 - _v3.positionScreen.x *= _canvasWidthHalf;_v3.positionScreen.y *= _canvasHeightHalf; 352 - 353 - if (material.overdraw > 0) { 354 - 355 - expand(_v1.positionScreen, _v2.positionScreen, material.overdraw); 356 - expand(_v2.positionScreen, _v3.positionScreen, material.overdraw); 357 - expand(_v3.positionScreen, _v1.positionScreen, material.overdraw); 358 - } 359 - 360 - _elemBox.setFromPoints([_v1.positionScreen, _v2.positionScreen, _v3.positionScreen]); 361 - 362 - if (_clipBox.intersectsBox(_elemBox) === true) { 363 - 364 - renderFace3(_v1, _v2, _v3, 0, 1, 2, element, material); 365 - } 366 - } 367 - 368 - /* DEBUG 369 - setLineWidth( 1 ); 370 - setStrokeStyle( 'rgba( 0, 255, 0, 0.5 )' ); 371 - _context.strokeRect( _elemBox.min.x, _elemBox.min.y, _elemBox.max.x - _elemBox.min.x, _elemBox.max.y - _elemBox.min.y ); 372 - */ 373 - 374 - _clearBox.union(_elemBox); 375 - } 376 - 377 - /* DEBUG 378 - setLineWidth( 1 ); 379 - setStrokeStyle( 'rgba( 255, 0, 0, 0.5 )' ); 380 - _context.strokeRect( _clearBox.min.x, _clearBox.min.y, _clearBox.max.x - _clearBox.min.x, _clearBox.max.y - _clearBox.min.y ); 381 - */ 382 - 383 - _context.setTransform(1, 0, 0, 1, 0, 0); 384 - }; 385 - 386 - // 387 - 388 - function calculateLights() { 389 - 390 - _ambientLight.setRGB(0, 0, 0); 391 - _directionalLights.setRGB(0, 0, 0); 392 - _pointLights.setRGB(0, 0, 0); 393 - 394 - for (var l = 0, ll = _lights.length; l < ll; l++) { 395 - 396 - var light = _lights[l]; 397 - var lightColor = light.color; 398 - 399 - if (light.isAmbientLight) { 400 - 401 - _ambientLight.add(lightColor); 402 - } else if (light.isDirectionalLight) { 403 - 404 - // for sprites 405 - 406 - _directionalLights.add(lightColor); 407 - } else if (light.isPointLight) { 408 - 409 - // for sprites 410 - 411 - _pointLights.add(lightColor); 412 - } 413 - } 414 - } 415 - 416 - function calculateLight(position, normal, color) { 417 - 418 - for (var l = 0, ll = _lights.length; l < ll; l++) { 419 - 420 - var light = _lights[l]; 421 - 422 - _lightColor.copy(light.color); 423 - 424 - if (light.isDirectionalLight) { 425 - 426 - var lightPosition = _vector3.setFromMatrixPosition(light.matrixWorld).normalize(); 427 - 428 - var amount = normal.dot(lightPosition); 429 - 430 - if (amount <= 0) continue; 431 - 432 - amount *= light.intensity; 433 - 434 - color.add(_lightColor.multiplyScalar(amount)); 435 - } else if (light.isPointLight) { 436 - 437 - var lightPosition = _vector3.setFromMatrixPosition(light.matrixWorld); 438 - 439 - var amount = normal.dot(_vector3.subVectors(lightPosition, position).normalize()); 440 - 441 - if (amount <= 0) continue; 442 - 443 - amount *= light.distance == 0 ? 1 : 1 - Math.min(position.distanceTo(lightPosition) / light.distance, 1); 444 - 445 - if (amount == 0) continue; 446 - 447 - amount *= light.intensity; 448 - 449 - color.add(_lightColor.multiplyScalar(amount)); 450 - } 451 - } 452 - } 453 - 454 - function renderSprite(v1, element, material) { 455 - 456 - setOpacity(material.opacity); 457 - setBlending(material.blending); 458 - 459 - var scaleX = element.scale.x * _canvasWidthHalf; 460 - var scaleY = element.scale.y * _canvasHeightHalf; 461 - 462 - var dist = Math.sqrt(scaleX * scaleX + scaleY * scaleY); // allow for rotated sprite 463 - _elemBox.min.set(v1.x - dist, v1.y - dist); 464 - _elemBox.max.set(v1.x + dist, v1.y + dist); 465 - 466 - if (material.isSpriteMaterial) { 467 - 468 - var texture = material.map; 469 - 470 - if (texture !== null) { 471 - 472 - var pattern = _patterns[texture.id]; 473 - 474 - if (pattern === undefined || pattern.version !== texture.version) { 475 - 476 - pattern = textureToPattern(texture); 477 - _patterns[texture.id] = pattern; 478 - } 479 - 480 - if (pattern.canvas !== undefined) { 481 - 482 - setFillStyle(pattern.canvas); 483 - 484 - var bitmap = texture.image; 485 - 486 - var ox = bitmap.width * texture.offset.x; 487 - var oy = bitmap.height * texture.offset.y; 488 - 489 - var sx = bitmap.width * texture.repeat.x; 490 - var sy = bitmap.height * texture.repeat.y; 491 - 492 - var cx = scaleX / sx; 493 - var cy = scaleY / sy; 494 - 495 - _context.save(); 496 - _context.translate(v1.x, v1.y); 497 - if (material.rotation !== 0) _context.rotate(material.rotation); 498 - _context.translate(-scaleX / 2, -scaleY / 2); 499 - _context.scale(cx, cy); 500 - _context.translate(-ox, -oy); 501 - _context.fillRect(ox, oy, sx, sy); 502 - _context.restore(); 503 - } 504 - } else { 505 - 506 - // no texture 507 - 508 - setFillStyle(material.color.getStyle()); 509 - 510 - _context.save(); 511 - _context.translate(v1.x, v1.y); 512 - if (material.rotation !== 0) _context.rotate(material.rotation); 513 - _context.scale(scaleX, -scaleY); 514 - _context.fillRect(-0.5, -0.5, 1, 1); 515 - _context.restore(); 516 - } 517 - } else if (material.isSpriteCanvasMaterial) { 518 - 519 - setStrokeStyle(material.color.getStyle()); 520 - setFillStyle(material.color.getStyle()); 521 - 522 - _context.save(); 523 - _context.translate(v1.x, v1.y); 524 - if (material.rotation !== 0) _context.rotate(material.rotation); 525 - _context.scale(scaleX, scaleY); 526 - 527 - material.program(_context); 528 - 529 - _context.restore(); 530 - } else if (material.isPointsMaterial) { 531 - 532 - setFillStyle(material.color.getStyle()); 533 - 534 - _context.save(); 535 - _context.translate(v1.x, v1.y); 536 - if (material.rotation !== 0) _context.rotate(material.rotation); 537 - _context.scale(scaleX * material.size, -scaleY * material.size); 538 - _context.fillRect(-0.5, -0.5, 1, 1); 539 - _context.restore(); 540 - } 541 - 542 - /* DEBUG 543 - setStrokeStyle( 'rgb(255,255,0)' ); 544 - _context.beginPath(); 545 - _context.moveTo( v1.x - 10, v1.y ); 546 - _context.lineTo( v1.x + 10, v1.y ); 547 - _context.moveTo( v1.x, v1.y - 10 ); 548 - _context.lineTo( v1.x, v1.y + 10 ); 549 - _context.stroke(); 550 - */ 551 - } 552 - 553 - function renderLine(v1, v2, element, material) { 554 - 555 - setOpacity(material.opacity); 556 - setBlending(material.blending); 557 - 558 - _context.beginPath(); 559 - _context.moveTo(v1.positionScreen.x, v1.positionScreen.y); 560 - _context.lineTo(v2.positionScreen.x, v2.positionScreen.y); 561 - 562 - if (material.isLineBasicMaterial) { 563 - 564 - setLineWidth(material.linewidth); 565 - setLineCap(material.linecap); 566 - setLineJoin(material.linejoin); 567 - 568 - if (material.vertexColors !== THREE.VertexColors) { 569 - 570 - setStrokeStyle(material.color.getStyle()); 571 - } else { 572 - 573 - var colorStyle1 = element.vertexColors[0].getStyle(); 574 - var colorStyle2 = element.vertexColors[1].getStyle(); 575 - 576 - if (colorStyle1 === colorStyle2) { 577 - 578 - setStrokeStyle(colorStyle1); 579 - } else { 580 - 581 - try { 582 - 583 - var grad = _context.createLinearGradient(v1.positionScreen.x, v1.positionScreen.y, v2.positionScreen.x, v2.positionScreen.y); 584 - grad.addColorStop(0, colorStyle1); 585 - grad.addColorStop(1, colorStyle2); 586 - } catch (exception) { 587 - 588 - grad = colorStyle1; 589 - } 590 - 591 - setStrokeStyle(grad); 592 - } 593 - } 594 - 595 - if (material.isLineDashedMaterial) { 596 - 597 - setLineDash([material.dashSize, material.gapSize]); 598 - } 599 - 600 - _context.stroke(); 601 - _elemBox.expandByScalar(material.linewidth * 2); 602 - 603 - if (material.isLineDashedMaterial) { 604 - 605 - setLineDash([]); 606 - } 607 - } 608 - } 609 - 610 - function renderFace3(v1, v2, v3, uv1, uv2, uv3, element, material) { 611 - 612 - _this.info.render.vertices += 3; 613 - _this.info.render.faces++; 614 - 615 - setOpacity(material.opacity); 616 - setBlending(material.blending); 617 - 618 - _v1x = v1.positionScreen.x;_v1y = v1.positionScreen.y; 619 - _v2x = v2.positionScreen.x;_v2y = v2.positionScreen.y; 620 - _v3x = v3.positionScreen.x;_v3y = v3.positionScreen.y; 621 - 622 - drawTriangle(_v1x, _v1y, _v2x, _v2y, _v3x, _v3y); 623 - 624 - if ((material.isMeshLambertMaterial || material.isMeshPhongMaterial || material.isMeshStandardMaterial) && material.map === null) { 625 - 626 - _diffuseColor.copy(material.color); 627 - _emissiveColor.copy(material.emissive); 628 - 629 - if (material.vertexColors === THREE.FaceColors) { 630 - 631 - _diffuseColor.multiply(element.color); 632 - } 633 - 634 - _color.copy(_ambientLight); 635 - 636 - _centroid.copy(v1.positionWorld).add(v2.positionWorld).add(v3.positionWorld).divideScalar(3); 637 - 638 - calculateLight(_centroid, element.normalModel, _color); 639 - 640 - _color.multiply(_diffuseColor).add(_emissiveColor); 641 - 642 - material.wireframe === true ? strokePath(_color, material.wireframeLinewidth, material.wireframeLinecap, material.wireframeLinejoin) : fillPath(_color); 643 - } else if (material.isMeshBasicMaterial || material.isMeshLambertMaterial || material.isMeshPhongMaterial || material.isMeshStandardMaterial) { 644 - 645 - if (material.map !== null) { 646 - 647 - var mapping = material.map.mapping; 648 - 649 - if (mapping === THREE.UVMapping) { 650 - 651 - _uvs = element.uvs; 652 - patternPath(_v1x, _v1y, _v2x, _v2y, _v3x, _v3y, _uvs[uv1].x, _uvs[uv1].y, _uvs[uv2].x, _uvs[uv2].y, _uvs[uv3].x, _uvs[uv3].y, material.map); 653 - } 654 - } else if (material.envMap !== null) { 655 - 656 - if (material.envMap.mapping === THREE.SphericalReflectionMapping) { 657 - 658 - _normal.copy(element.vertexNormalsModel[uv1]).applyMatrix3(_normalViewMatrix); 659 - _uv1x = 0.5 * _normal.x + 0.5; 660 - _uv1y = 0.5 * _normal.y + 0.5; 661 - 662 - _normal.copy(element.vertexNormalsModel[uv2]).applyMatrix3(_normalViewMatrix); 663 - _uv2x = 0.5 * _normal.x + 0.5; 664 - _uv2y = 0.5 * _normal.y + 0.5; 665 - 666 - _normal.copy(element.vertexNormalsModel[uv3]).applyMatrix3(_normalViewMatrix); 667 - _uv3x = 0.5 * _normal.x + 0.5; 668 - _uv3y = 0.5 * _normal.y + 0.5; 669 - 670 - patternPath(_v1x, _v1y, _v2x, _v2y, _v3x, _v3y, _uv1x, _uv1y, _uv2x, _uv2y, _uv3x, _uv3y, material.envMap); 671 - } 672 - } else { 673 - 674 - _color.copy(material.color); 675 - 676 - if (material.vertexColors === THREE.FaceColors) { 677 - 678 - _color.multiply(element.color); 679 - } 680 - 681 - material.wireframe === true ? strokePath(_color, material.wireframeLinewidth, material.wireframeLinecap, material.wireframeLinejoin) : fillPath(_color); 682 - } 683 - } else if (material.isMeshNormalMaterial) { 684 - 685 - _normal.copy(element.normalModel).applyMatrix3(_normalViewMatrix); 686 - 687 - _color.setRGB(_normal.x, _normal.y, _normal.z).multiplyScalar(0.5).addScalar(0.5); 688 - 689 - material.wireframe === true ? strokePath(_color, material.wireframeLinewidth, material.wireframeLinecap, material.wireframeLinejoin) : fillPath(_color); 690 - } else { 691 - 692 - _color.setRGB(1, 1, 1); 693 - 694 - material.wireframe === true ? strokePath(_color, material.wireframeLinewidth, material.wireframeLinecap, material.wireframeLinejoin) : fillPath(_color); 695 - } 696 - } 697 - 698 - // 699 - 700 - function drawTriangle(x0, y0, x1, y1, x2, y2) { 701 - 702 - _context.beginPath(); 703 - _context.moveTo(x0, y0); 704 - _context.lineTo(x1, y1); 705 - _context.lineTo(x2, y2); 706 - _context.closePath(); 707 - } 708 - 709 - function strokePath(color, linewidth, linecap, linejoin) { 710 - 711 - setLineWidth(linewidth); 712 - setLineCap(linecap); 713 - setLineJoin(linejoin); 714 - setStrokeStyle(color.getStyle()); 715 - 716 - _context.stroke(); 717 - 718 - _elemBox.expandByScalar(linewidth * 2); 719 - } 720 - 721 - function fillPath(color) { 722 - 723 - setFillStyle(color.getStyle()); 724 - _context.fill(); 725 - } 726 - 727 - function textureToPattern(texture) { 728 - 729 - if (texture.version === 0 || texture instanceof THREE.CompressedTexture || texture instanceof THREE.DataTexture) { 730 - 731 - return { 732 - canvas: undefined, 733 - version: texture.version 734 - }; 735 - } 736 - 737 - var image = texture.image; 738 - 739 - if (image.complete === false) { 740 - 741 - return { 742 - canvas: undefined, 743 - version: 0 744 - }; 745 - } 746 - 747 - var repeatX = texture.wrapS === THREE.RepeatWrapping || texture.wrapS === THREE.MirroredRepeatWrapping; 748 - var repeatY = texture.wrapT === THREE.RepeatWrapping || texture.wrapT === THREE.MirroredRepeatWrapping; 749 - 750 - var mirrorX = texture.wrapS === THREE.MirroredRepeatWrapping; 751 - var mirrorY = texture.wrapT === THREE.MirroredRepeatWrapping; 752 - 753 - // 754 - 755 - var canvas = document.createElement('canvas'); 756 - canvas.width = image.width * (mirrorX ? 2 : 1); 757 - canvas.height = image.height * (mirrorY ? 2 : 1); 758 - 759 - var context = canvas.getContext('2d'); 760 - context.setTransform(1, 0, 0, -1, 0, image.height); 761 - context.drawImage(image, 0, 0); 762 - 763 - if (mirrorX === true) { 764 - 765 - context.setTransform(-1, 0, 0, -1, image.width, image.height); 766 - context.drawImage(image, -image.width, 0); 767 - } 768 - 769 - if (mirrorY === true) { 770 - 771 - context.setTransform(1, 0, 0, 1, 0, 0); 772 - context.drawImage(image, 0, image.height); 773 - } 774 - 775 - if (mirrorX === true && mirrorY === true) { 776 - 777 - context.setTransform(-1, 0, 0, 1, image.width, 0); 778 - context.drawImage(image, -image.width, image.height); 779 - } 780 - 781 - var repeat = 'no-repeat'; 782 - 783 - if (repeatX === true && repeatY === true) { 784 - 785 - repeat = 'repeat'; 786 - } else if (repeatX === true) { 787 - 788 - repeat = 'repeat-x'; 789 - } else if (repeatY === true) { 790 - 791 - repeat = 'repeat-y'; 792 - } 793 - 794 - var pattern = _context.createPattern(canvas, repeat); 795 - 796 - if (texture.onUpdate) texture.onUpdate(texture); 797 - 798 - return { 799 - canvas: pattern, 800 - version: texture.version 801 - }; 802 - } 803 - 804 - function patternPath(x0, y0, x1, y1, x2, y2, u0, v0, u1, v1, u2, v2, texture) { 805 - 806 - var pattern = _patterns[texture.id]; 807 - 808 - if (pattern === undefined || pattern.version !== texture.version) { 809 - 810 - pattern = textureToPattern(texture); 811 - _patterns[texture.id] = pattern; 812 - } 813 - 814 - if (pattern.canvas !== undefined) { 815 - 816 - setFillStyle(pattern.canvas); 817 - } else { 818 - 819 - setFillStyle('rgba( 0, 0, 0, 1)'); 820 - _context.fill(); 821 - return; 822 - } 823 - 824 - // http://extremelysatisfactorytotalitarianism.com/blog/?p=2120 825 - 826 - var a, 827 - b, 828 - c, 829 - d, 830 - e, 831 - f, 832 - det, 833 - idet, 834 - offsetX = texture.offset.x / texture.repeat.x, 835 - offsetY = texture.offset.y / texture.repeat.y, 836 - width = texture.image.width * texture.repeat.x, 837 - height = texture.image.height * texture.repeat.y; 838 - 839 - u0 = (u0 + offsetX) * width; 840 - v0 = (v0 + offsetY) * height; 841 - 842 - u1 = (u1 + offsetX) * width; 843 - v1 = (v1 + offsetY) * height; 844 - 845 - u2 = (u2 + offsetX) * width; 846 - v2 = (v2 + offsetY) * height; 847 - 848 - x1 -= x0;y1 -= y0; 849 - x2 -= x0;y2 -= y0; 850 - 851 - u1 -= u0;v1 -= v0; 852 - u2 -= u0;v2 -= v0; 853 - 854 - det = u1 * v2 - u2 * v1; 855 - 856 - if (det === 0) return; 857 - 858 - idet = 1 / det; 859 - 860 - a = (v2 * x1 - v1 * x2) * idet; 861 - b = (v2 * y1 - v1 * y2) * idet; 862 - c = (u1 * x2 - u2 * x1) * idet; 863 - d = (u1 * y2 - u2 * y1) * idet; 864 - 865 - e = x0 - a * u0 - c * v0; 866 - f = y0 - b * u0 - d * v0; 867 - 868 - _context.save(); 869 - _context.transform(a, b, c, d, e, f); 870 - _context.fill(); 871 - _context.restore(); 872 - } 873 - 874 - /* 875 - function clipImage( x0, y0, x1, y1, x2, y2, u0, v0, u1, v1, u2, v2, image ) { 876 - // http://extremelysatisfactorytotalitarianism.com/blog/?p=2120 877 - var a, b, c, d, e, f, det, idet, 878 - width = image.width - 1, 879 - height = image.height - 1; 880 - u0 *= width; v0 *= height; 881 - u1 *= width; v1 *= height; 882 - u2 *= width; v2 *= height; 883 - x1 -= x0; y1 -= y0; 884 - x2 -= x0; y2 -= y0; 885 - u1 -= u0; v1 -= v0; 886 - u2 -= u0; v2 -= v0; 887 - det = u1 * v2 - u2 * v1; 888 - idet = 1 / det; 889 - a = ( v2 * x1 - v1 * x2 ) * idet; 890 - b = ( v2 * y1 - v1 * y2 ) * idet; 891 - c = ( u1 * x2 - u2 * x1 ) * idet; 892 - d = ( u1 * y2 - u2 * y1 ) * idet; 893 - e = x0 - a * u0 - c * v0; 894 - f = y0 - b * u0 - d * v0; 895 - _context.save(); 896 - _context.transform( a, b, c, d, e, f ); 897 - _context.clip(); 898 - _context.drawImage( image, 0, 0 ); 899 - _context.restore(); 900 - } 901 - */ 902 - 903 - // Hide anti-alias gaps 904 - 905 - function expand(v1, v2, pixels) { 906 - 907 - var x = v2.x - v1.x, 908 - y = v2.y - v1.y, 909 - det = x * x + y * y, 910 - idet; 911 - 912 - if (det === 0) return; 913 - 914 - idet = pixels / Math.sqrt(det); 915 - 916 - x *= idet;y *= idet; 917 - 918 - v2.x += x;v2.y += y; 919 - v1.x -= x;v1.y -= y; 920 - } 921 - 922 - // Context cached methods. 923 - 924 - function setOpacity(value) { 925 - 926 - if (_contextGlobalAlpha !== value) { 927 - 928 - _context.globalAlpha = value; 929 - _contextGlobalAlpha = value; 930 - } 931 - } 932 - 933 - function setBlending(value) { 934 - 935 - if (_contextGlobalCompositeOperation !== value) { 936 - 937 - if (value === THREE.NormalBlending) { 938 - 939 - _context.globalCompositeOperation = 'source-over'; 940 - } else if (value === THREE.AdditiveBlending) { 941 - 942 - _context.globalCompositeOperation = 'lighter'; 943 - } else if (value === THREE.SubtractiveBlending) { 944 - 945 - _context.globalCompositeOperation = 'darker'; 946 - } else if (value === THREE.MultiplyBlending) { 947 - 948 - _context.globalCompositeOperation = 'multiply'; 949 - } 950 - 951 - _contextGlobalCompositeOperation = value; 952 - } 953 - } 954 - 955 - function setLineWidth(value) { 956 - 957 - if (_contextLineWidth !== value) { 958 - 959 - _context.lineWidth = value; 960 - _contextLineWidth = value; 961 - } 962 - } 963 - 964 - function setLineCap(value) { 965 - 966 - // "butt", "round", "square" 967 - 968 - if (_contextLineCap !== value) { 969 - 970 - _context.lineCap = value; 971 - _contextLineCap = value; 972 - } 973 - } 974 - 975 - function setLineJoin(value) { 976 - 977 - // "round", "bevel", "miter" 978 - 979 - if (_contextLineJoin !== value) { 980 - 981 - _context.lineJoin = value; 982 - _contextLineJoin = value; 983 - } 984 - } 985 - 986 - function setStrokeStyle(value) { 987 - 988 - if (_contextStrokeStyle !== value) { 989 - 990 - _context.strokeStyle = value; 991 - _contextStrokeStyle = value; 992 - } 993 - } 994 - 995 - function setFillStyle(value) { 996 - 997 - if (_contextFillStyle !== value) { 998 - 999 - _context.fillStyle = value; 1000 - _contextFillStyle = value; 1001 - } 1002 - } 1003 - 1004 - function setLineDash(value) { 1005 - 1006 - if (_contextLineDash.length !== value.length) { 1007 - 1008 - _context.setLineDash(value); 1009 - _contextLineDash = value; 1010 - } 1011 - } 1012 - }; 1013 - 1014 - /** 1015 - * @author mrdoob / http://mrdoob.com/ 1016 - * @author supereggbert / http://www.paulbrunt.co.uk/ 1017 - * @author julianwa / https://github.com/julianwa 1018 - */ 1019 - 1020 - THREE.RenderableObject = function () { 1021 - 1022 - this.id = 0; 1023 - 1024 - this.object = null; 1025 - this.z = 0; 1026 - this.renderOrder = 0; 1027 - }; 1028 - 1029 - // 1030 - 1031 - THREE.RenderableFace = function () { 1032 - 1033 - this.id = 0; 1034 - 1035 - this.v1 = new THREE.RenderableVertex(); 1036 - this.v2 = new THREE.RenderableVertex(); 1037 - this.v3 = new THREE.RenderableVertex(); 1038 - 1039 - this.normalModel = new THREE.Vector3(); 1040 - 1041 - this.vertexNormalsModel = [new THREE.Vector3(), new THREE.Vector3(), new THREE.Vector3()]; 1042 - this.vertexNormalsLength = 0; 1043 - 1044 - this.color = new THREE.Color(); 1045 - this.material = null; 1046 - this.uvs = [new THREE.Vector2(), new THREE.Vector2(), new THREE.Vector2()]; 1047 - 1048 - this.z = 0; 1049 - this.renderOrder = 0; 1050 - }; 1051 - 1052 - // 1053 - 1054 - THREE.RenderableVertex = function () { 1055 - 1056 - this.position = new THREE.Vector3(); 1057 - this.positionWorld = new THREE.Vector3(); 1058 - this.positionScreen = new THREE.Vector4(); 1059 - 1060 - this.visible = true; 1061 - }; 1062 - 1063 - THREE.RenderableVertex.prototype.copy = function (vertex) { 1064 - 1065 - this.positionWorld.copy(vertex.positionWorld); 1066 - this.positionScreen.copy(vertex.positionScreen); 1067 - }; 1068 - 1069 - // 1070 - 1071 - THREE.RenderableLine = function () { 1072 - 1073 - this.id = 0; 1074 - 1075 - this.v1 = new THREE.RenderableVertex(); 1076 - this.v2 = new THREE.RenderableVertex(); 1077 - 1078 - this.vertexColors = [new THREE.Color(), new THREE.Color()]; 1079 - this.material = null; 1080 - 1081 - this.z = 0; 1082 - this.renderOrder = 0; 1083 - }; 1084 - 1085 - // 1086 - 1087 - THREE.RenderableSprite = function () { 1088 - 1089 - this.id = 0; 1090 - 1091 - this.object = null; 1092 - 1093 - this.x = 0; 1094 - this.y = 0; 1095 - this.z = 0; 1096 - 1097 - this.rotation = 0; 1098 - this.scale = new THREE.Vector2(); 1099 - 1100 - this.material = null; 1101 - this.renderOrder = 0; 1102 - }; 1103 - 1104 - // 1105 - 1106 - THREE.Projector = function () { 1107 - 1108 - var _object, 1109 - _objectCount, 1110 - _objectPool = [], 1111 - _objectPoolLength = 0, 1112 - _vertex, 1113 - _vertexCount, 1114 - _vertexPool = [], 1115 - _vertexPoolLength = 0, 1116 - _face, 1117 - _faceCount, 1118 - _facePool = [], 1119 - _facePoolLength = 0, 1120 - _line, 1121 - _lineCount, 1122 - _linePool = [], 1123 - _linePoolLength = 0, 1124 - _sprite, 1125 - _spriteCount, 1126 - _spritePool = [], 1127 - _spritePoolLength = 0, 1128 - _renderData = { objects: [], lights: [], elements: [] }, 1129 - _vector3 = new THREE.Vector3(), 1130 - _vector4 = new THREE.Vector4(), 1131 - _clipBox = new THREE.Box3(new THREE.Vector3(-1, -1, -1), new THREE.Vector3(1, 1, 1)), 1132 - _boundingBox = new THREE.Box3(), 1133 - _points3 = new Array(3), 1134 - _viewMatrix = new THREE.Matrix4(), 1135 - _viewProjectionMatrix = new THREE.Matrix4(), 1136 - _modelMatrix, 1137 - _modelViewProjectionMatrix = new THREE.Matrix4(), 1138 - _normalMatrix = new THREE.Matrix3(), 1139 - _frustum = new THREE.Frustum(), 1140 - _clippedVertex1PositionScreen = new THREE.Vector4(), 1141 - _clippedVertex2PositionScreen = new THREE.Vector4(); 1142 - 1143 - // 1144 - 1145 - this.projectVector = function (vector, camera) { 1146 - 1147 - console.warn('THREE.Projector: .projectVector() is now vector.project().'); 1148 - vector.project(camera); 1149 - }; 1150 - 1151 - this.unprojectVector = function (vector, camera) { 1152 - 1153 - console.warn('THREE.Projector: .unprojectVector() is now vector.unproject().'); 1154 - vector.unproject(camera); 1155 - }; 1156 - 1157 - this.pickingRay = function () { 1158 - 1159 - console.error('THREE.Projector: .pickingRay() is now raycaster.setFromCamera().'); 1160 - }; 1161 - 1162 - // 1163 - 1164 - var RenderList = function RenderList() { 1165 - 1166 - var normals = []; 1167 - var colors = []; 1168 - var uvs = []; 1169 - 1170 - var object = null; 1171 - var material = null; 1172 - 1173 - var normalMatrix = new THREE.Matrix3(); 1174 - 1175 - function setObject(value) { 1176 - 1177 - object = value; 1178 - material = object.material; 1179 - 1180 - normalMatrix.getNormalMatrix(object.matrixWorld); 1181 - 1182 - normals.length = 0; 1183 - colors.length = 0; 1184 - uvs.length = 0; 1185 - } 1186 - 1187 - function projectVertex(vertex) { 1188 - 1189 - var position = vertex.position; 1190 - var positionWorld = vertex.positionWorld; 1191 - var positionScreen = vertex.positionScreen; 1192 - 1193 - positionWorld.copy(position).applyMatrix4(_modelMatrix); 1194 - positionScreen.copy(positionWorld).applyMatrix4(_viewProjectionMatrix); 1195 - 1196 - var invW = 1 / positionScreen.w; 1197 - 1198 - positionScreen.x *= invW; 1199 - positionScreen.y *= invW; 1200 - positionScreen.z *= invW; 1201 - 1202 - vertex.visible = positionScreen.x >= -1 && positionScreen.x <= 1 && positionScreen.y >= -1 && positionScreen.y <= 1 && positionScreen.z >= -1 && positionScreen.z <= 1; 1203 - } 1204 - 1205 - function pushVertex(x, y, z) { 1206 - 1207 - _vertex = getNextVertexInPool(); 1208 - _vertex.position.set(x, y, z); 1209 - 1210 - projectVertex(_vertex); 1211 - } 1212 - 1213 - function pushNormal(x, y, z) { 1214 - 1215 - normals.push(x, y, z); 1216 - } 1217 - 1218 - function pushColor(r, g, b) { 1219 - 1220 - colors.push(r, g, b); 1221 - } 1222 - 1223 - function pushUv(x, y) { 1224 - 1225 - uvs.push(x, y); 1226 - } 1227 - 1228 - function checkTriangleVisibility(v1, v2, v3) { 1229 - 1230 - if (v1.visible === true || v2.visible === true || v3.visible === true) return true; 1231 - 1232 - _points3[0] = v1.positionScreen; 1233 - _points3[1] = v2.positionScreen; 1234 - _points3[2] = v3.positionScreen; 1235 - 1236 - return _clipBox.intersectsBox(_boundingBox.setFromPoints(_points3)); 1237 - } 1238 - 1239 - function checkBackfaceCulling(v1, v2, v3) { 1240 - 1241 - return (v3.positionScreen.x - v1.positionScreen.x) * (v2.positionScreen.y - v1.positionScreen.y) - (v3.positionScreen.y - v1.positionScreen.y) * (v2.positionScreen.x - v1.positionScreen.x) < 0; 1242 - } 1243 - 1244 - function pushLine(a, b) { 1245 - 1246 - var v1 = _vertexPool[a]; 1247 - var v2 = _vertexPool[b]; 1248 - 1249 - // Clip 1250 - 1251 - v1.positionScreen.copy(v1.position).applyMatrix4(_modelViewProjectionMatrix); 1252 - v2.positionScreen.copy(v2.position).applyMatrix4(_modelViewProjectionMatrix); 1253 - 1254 - if (clipLine(v1.positionScreen, v2.positionScreen) === true) { 1255 - 1256 - // Perform the perspective divide 1257 - v1.positionScreen.multiplyScalar(1 / v1.positionScreen.w); 1258 - v2.positionScreen.multiplyScalar(1 / v2.positionScreen.w); 1259 - 1260 - _line = getNextLineInPool(); 1261 - _line.id = object.id; 1262 - _line.v1.copy(v1); 1263 - _line.v2.copy(v2); 1264 - _line.z = Math.max(v1.positionScreen.z, v2.positionScreen.z); 1265 - _line.renderOrder = object.renderOrder; 1266 - 1267 - _line.material = object.material; 1268 - 1269 - if (object.material.vertexColors === THREE.VertexColors) { 1270 - 1271 - _line.vertexColors[0].fromArray(colors, a * 3); 1272 - _line.vertexColors[1].fromArray(colors, b * 3); 1273 - } 1274 - 1275 - _renderData.elements.push(_line); 1276 - } 1277 - } 1278 - 1279 - function pushTriangle(a, b, c) { 1280 - 1281 - var v1 = _vertexPool[a]; 1282 - var v2 = _vertexPool[b]; 1283 - var v3 = _vertexPool[c]; 1284 - 1285 - if (checkTriangleVisibility(v1, v2, v3) === false) return; 1286 - 1287 - if (material.side === THREE.DoubleSide || checkBackfaceCulling(v1, v2, v3) === true) { 1288 - 1289 - _face = getNextFaceInPool(); 1290 - 1291 - _face.id = object.id; 1292 - _face.v1.copy(v1); 1293 - _face.v2.copy(v2); 1294 - _face.v3.copy(v3); 1295 - _face.z = (v1.positionScreen.z + v2.positionScreen.z + v3.positionScreen.z) / 3; 1296 - _face.renderOrder = object.renderOrder; 1297 - 1298 - // use first vertex normal as face normal 1299 - 1300 - _face.normalModel.fromArray(normals, a * 3); 1301 - _face.normalModel.applyMatrix3(normalMatrix).normalize(); 1302 - 1303 - for (var i = 0; i < 3; i++) { 1304 - 1305 - var normal = _face.vertexNormalsModel[i]; 1306 - normal.fromArray(normals, arguments[i] * 3); 1307 - normal.applyMatrix3(normalMatrix).normalize(); 1308 - 1309 - var uv = _face.uvs[i]; 1310 - uv.fromArray(uvs, arguments[i] * 2); 1311 - } 1312 - 1313 - _face.vertexNormalsLength = 3; 1314 - 1315 - _face.material = object.material; 1316 - 1317 - _renderData.elements.push(_face); 1318 - } 1319 - } 1320 - 1321 - return { 1322 - setObject: setObject, 1323 - projectVertex: projectVertex, 1324 - checkTriangleVisibility: checkTriangleVisibility, 1325 - checkBackfaceCulling: checkBackfaceCulling, 1326 - pushVertex: pushVertex, 1327 - pushNormal: pushNormal, 1328 - pushColor: pushColor, 1329 - pushUv: pushUv, 1330 - pushLine: pushLine, 1331 - pushTriangle: pushTriangle 1332 - }; 1333 - }; 1334 - 1335 - var renderList = new RenderList(); 1336 - 1337 - function projectObject(object) { 1338 - 1339 - if (object.visible === false) return; 1340 - 1341 - if (object instanceof THREE.Light) { 1342 - 1343 - _renderData.lights.push(object); 1344 - } else if (object instanceof THREE.Mesh || object instanceof THREE.Line || object instanceof THREE.Points) { 1345 - 1346 - if (object.material.visible === false) return; 1347 - if (object.frustumCulled === true && _frustum.intersectsObject(object) === false) return; 1348 - 1349 - addObject(object); 1350 - } else if (object instanceof THREE.Sprite) { 1351 - 1352 - if (object.material.visible === false) return; 1353 - if (object.frustumCulled === true && _frustum.intersectsSprite(object) === false) return; 1354 - 1355 - addObject(object); 1356 - } 1357 - 1358 - var children = object.children; 1359 - 1360 - for (var i = 0, l = children.length; i < l; i++) { 1361 - 1362 - projectObject(children[i]); 1363 - } 1364 - } 1365 - 1366 - function addObject(object) { 1367 - 1368 - _object = getNextObjectInPool(); 1369 - _object.id = object.id; 1370 - _object.object = object; 1371 - 1372 - _vector3.setFromMatrixPosition(object.matrixWorld); 1373 - _vector3.applyMatrix4(_viewProjectionMatrix); 1374 - _object.z = _vector3.z; 1375 - _object.renderOrder = object.renderOrder; 1376 - 1377 - _renderData.objects.push(_object); 1378 - } 1379 - 1380 - this.projectScene = function (scene, camera, sortObjects, sortElements) { 1381 - 1382 - _faceCount = 0; 1383 - _lineCount = 0; 1384 - _spriteCount = 0; 1385 - 1386 - _renderData.elements.length = 0; 1387 - 1388 - if (scene.autoUpdate === true) scene.updateMatrixWorld(); 1389 - if (camera.parent === null) camera.updateMatrixWorld(); 1390 - 1391 - _viewMatrix.copy(camera.matrixWorldInverse); 1392 - _viewProjectionMatrix.multiplyMatrices(camera.projectionMatrix, _viewMatrix); 1393 - 1394 - _frustum.setFromMatrix(_viewProjectionMatrix); 1395 - 1396 - // 1397 - 1398 - _objectCount = 0; 1399 - 1400 - _renderData.objects.length = 0; 1401 - _renderData.lights.length = 0; 1402 - 1403 - projectObject(scene); 1404 - 1405 - if (sortObjects === true) { 1406 - 1407 - _renderData.objects.sort(painterSort); 1408 - } 1409 - 1410 - // 1411 - 1412 - var objects = _renderData.objects; 1413 - 1414 - for (var o = 0, ol = objects.length; o < ol; o++) { 1415 - 1416 - var object = objects[o].object; 1417 - var geometry = object.geometry; 1418 - 1419 - renderList.setObject(object); 1420 - 1421 - _modelMatrix = object.matrixWorld; 1422 - 1423 - _vertexCount = 0; 1424 - 1425 - if (object instanceof THREE.Mesh) { 1426 - 1427 - if (geometry instanceof THREE.BufferGeometry) { 1428 - 1429 - var attributes = geometry.attributes; 1430 - var groups = geometry.groups; 1431 - 1432 - if (attributes.position === undefined) continue; 1433 - 1434 - var positions = attributes.position.array; 1435 - 1436 - for (var i = 0, l = positions.length; i < l; i += 3) { 1437 - 1438 - renderList.pushVertex(positions[i], positions[i + 1], positions[i + 2]); 1439 - } 1440 - 1441 - if (attributes.normal !== undefined) { 1442 - 1443 - var normals = attributes.normal.array; 1444 - 1445 - for (var i = 0, l = normals.length; i < l; i += 3) { 1446 - 1447 - renderList.pushNormal(normals[i], normals[i + 1], normals[i + 2]); 1448 - } 1449 - } 1450 - 1451 - if (attributes.uv !== undefined) { 1452 - 1453 - var uvs = attributes.uv.array; 1454 - 1455 - for (var i = 0, l = uvs.length; i < l; i += 2) { 1456 - 1457 - renderList.pushUv(uvs[i], uvs[i + 1]); 1458 - } 1459 - } 1460 - 1461 - if (geometry.index !== null) { 1462 - 1463 - var indices = geometry.index.array; 1464 - 1465 - if (groups.length > 0) { 1466 - 1467 - for (var g = 0; g < groups.length; g++) { 1468 - 1469 - var group = groups[g]; 1470 - 1471 - for (var i = group.start, l = group.start + group.count; i < l; i += 3) { 1472 - 1473 - renderList.pushTriangle(indices[i], indices[i + 1], indices[i + 2]); 1474 - } 1475 - } 1476 - } else { 1477 - 1478 - for (var i = 0, l = indices.length; i < l; i += 3) { 1479 - 1480 - renderList.pushTriangle(indices[i], indices[i + 1], indices[i + 2]); 1481 - } 1482 - } 1483 - } else { 1484 - 1485 - for (var i = 0, l = positions.length / 3; i < l; i += 3) { 1486 - 1487 - renderList.pushTriangle(i, i + 1, i + 2); 1488 - } 1489 - } 1490 - } else if (geometry instanceof THREE.Geometry) { 1491 - 1492 - var vertices = geometry.vertices; 1493 - var faces = geometry.faces; 1494 - var faceVertexUvs = geometry.faceVertexUvs[0]; 1495 - 1496 - _normalMatrix.getNormalMatrix(_modelMatrix); 1497 - 1498 - var material = object.material; 1499 - 1500 - var isMultiMaterial = Array.isArray(material); 1501 - 1502 - for (var v = 0, vl = vertices.length; v < vl; v++) { 1503 - 1504 - var vertex = vertices[v]; 1505 - 1506 - _vector3.copy(vertex); 1507 - 1508 - if (material.morphTargets === true) { 1509 - 1510 - var morphTargets = geometry.morphTargets; 1511 - var morphInfluences = object.morphTargetInfluences; 1512 - 1513 - for (var t = 0, tl = morphTargets.length; t < tl; t++) { 1514 - 1515 - var influence = morphInfluences[t]; 1516 - 1517 - if (influence === 0) continue; 1518 - 1519 - var target = morphTargets[t]; 1520 - var targetVertex = target.vertices[v]; 1521 - 1522 - _vector3.x += (targetVertex.x - vertex.x) * influence; 1523 - _vector3.y += (targetVertex.y - vertex.y) * influence; 1524 - _vector3.z += (targetVertex.z - vertex.z) * influence; 1525 - } 1526 - } 1527 - 1528 - renderList.pushVertex(_vector3.x, _vector3.y, _vector3.z); 1529 - } 1530 - 1531 - for (var f = 0, fl = faces.length; f < fl; f++) { 1532 - 1533 - var face = faces[f]; 1534 - 1535 - material = isMultiMaterial === true ? object.material[face.materialIndex] : object.material; 1536 - 1537 - if (material === undefined) continue; 1538 - 1539 - var side = material.side; 1540 - 1541 - var v1 = _vertexPool[face.a]; 1542 - var v2 = _vertexPool[face.b]; 1543 - var v3 = _vertexPool[face.c]; 1544 - 1545 - if (renderList.checkTriangleVisibility(v1, v2, v3) === false) continue; 1546 - 1547 - var visible = renderList.checkBackfaceCulling(v1, v2, v3); 1548 - 1549 - if (side !== THREE.DoubleSide) { 1550 - 1551 - if (side === THREE.FrontSide && visible === false) continue; 1552 - if (side === THREE.BackSide && visible === true) continue; 1553 - } 1554 - 1555 - _face = getNextFaceInPool(); 1556 - 1557 - _face.id = object.id; 1558 - _face.v1.copy(v1); 1559 - _face.v2.copy(v2); 1560 - _face.v3.copy(v3); 1561 - 1562 - _face.normalModel.copy(face.normal); 1563 - 1564 - if (visible === false && (side === THREE.BackSide || side === THREE.DoubleSide)) { 1565 - 1566 - _face.normalModel.negate(); 1567 - } 1568 - 1569 - _face.normalModel.applyMatrix3(_normalMatrix).normalize(); 1570 - 1571 - var faceVertexNormals = face.vertexNormals; 1572 - 1573 - for (var n = 0, nl = Math.min(faceVertexNormals.length, 3); n < nl; n++) { 1574 - 1575 - var normalModel = _face.vertexNormalsModel[n]; 1576 - normalModel.copy(faceVertexNormals[n]); 1577 - 1578 - if (visible === false && (side === THREE.BackSide || side === THREE.DoubleSide)) { 1579 - 1580 - normalModel.negate(); 1581 - } 1582 - 1583 - normalModel.applyMatrix3(_normalMatrix).normalize(); 1584 - } 1585 - 1586 - _face.vertexNormalsLength = faceVertexNormals.length; 1587 - 1588 - var vertexUvs = faceVertexUvs[f]; 1589 - 1590 - if (vertexUvs !== undefined) { 1591 - 1592 - for (var u = 0; u < 3; u++) { 1593 - 1594 - _face.uvs[u].copy(vertexUvs[u]); 1595 - } 1596 - } 1597 - 1598 - _face.color = face.color; 1599 - _face.material = material; 1600 - 1601 - _face.z = (v1.positionScreen.z + v2.positionScreen.z + v3.positionScreen.z) / 3; 1602 - _face.renderOrder = object.renderOrder; 1603 - 1604 - _renderData.elements.push(_face); 1605 - } 1606 - } 1607 - } else if (object instanceof THREE.Line) { 1608 - 1609 - _modelViewProjectionMatrix.multiplyMatrices(_viewProjectionMatrix, _modelMatrix); 1610 - 1611 - if (geometry instanceof THREE.BufferGeometry) { 1612 - 1613 - var attributes = geometry.attributes; 1614 - 1615 - if (attributes.position !== undefined) { 1616 - 1617 - var positions = attributes.position.array; 1618 - 1619 - for (var i = 0, l = positions.length; i < l; i += 3) { 1620 - 1621 - renderList.pushVertex(positions[i], positions[i + 1], positions[i + 2]); 1622 - } 1623 - 1624 - if (attributes.color !== undefined) { 1625 - 1626 - var colors = attributes.color.array; 1627 - 1628 - for (var i = 0, l = colors.length; i < l; i += 3) { 1629 - 1630 - renderList.pushColor(colors[i], colors[i + 1], colors[i + 2]); 1631 - } 1632 - } 1633 - 1634 - if (geometry.index !== null) { 1635 - 1636 - var indices = geometry.index.array; 1637 - 1638 - for (var i = 0, l = indices.length; i < l; i += 2) { 1639 - 1640 - renderList.pushLine(indices[i], indices[i + 1]); 1641 - } 1642 - } else { 1643 - 1644 - var step = object instanceof THREE.LineSegments ? 2 : 1; 1645 - 1646 - for (var i = 0, l = positions.length / 3 - 1; i < l; i += step) { 1647 - 1648 - renderList.pushLine(i, i + 1); 1649 - } 1650 - } 1651 - } 1652 - } else if (geometry instanceof THREE.Geometry) { 1653 - 1654 - var vertices = object.geometry.vertices; 1655 - 1656 - if (vertices.length === 0) continue; 1657 - 1658 - v1 = getNextVertexInPool(); 1659 - v1.positionScreen.copy(vertices[0]).applyMatrix4(_modelViewProjectionMatrix); 1660 - 1661 - var step = object instanceof THREE.LineSegments ? 2 : 1; 1662 - 1663 - for (var v = 1, vl = vertices.length; v < vl; v++) { 1664 - 1665 - v1 = getNextVertexInPool(); 1666 - v1.positionScreen.copy(vertices[v]).applyMatrix4(_modelViewProjectionMatrix); 1667 - 1668 - if ((v + 1) % step > 0) continue; 1669 - 1670 - v2 = _vertexPool[_vertexCount - 2]; 1671 - 1672 - _clippedVertex1PositionScreen.copy(v1.positionScreen); 1673 - _clippedVertex2PositionScreen.copy(v2.positionScreen); 1674 - 1675 - if (clipLine(_clippedVertex1PositionScreen, _clippedVertex2PositionScreen) === true) { 1676 - 1677 - // Perform the perspective divide 1678 - _clippedVertex1PositionScreen.multiplyScalar(1 / _clippedVertex1PositionScreen.w); 1679 - _clippedVertex2PositionScreen.multiplyScalar(1 / _clippedVertex2PositionScreen.w); 1680 - 1681 - _line = getNextLineInPool(); 1682 - 1683 - _line.id = object.id; 1684 - _line.v1.positionScreen.copy(_clippedVertex1PositionScreen); 1685 - _line.v2.positionScreen.copy(_clippedVertex2PositionScreen); 1686 - 1687 - _line.z = Math.max(_clippedVertex1PositionScreen.z, _clippedVertex2PositionScreen.z); 1688 - _line.renderOrder = object.renderOrder; 1689 - 1690 - _line.material = object.material; 1691 - 1692 - if (object.material.vertexColors === THREE.VertexColors) { 1693 - 1694 - _line.vertexColors[0].copy(object.geometry.colors[v]); 1695 - _line.vertexColors[1].copy(object.geometry.colors[v - 1]); 1696 - } 1697 - 1698 - _renderData.elements.push(_line); 1699 - } 1700 - } 1701 - } 1702 - } else if (object instanceof THREE.Points) { 1703 - 1704 - _modelViewProjectionMatrix.multiplyMatrices(_viewProjectionMatrix, _modelMatrix); 1705 - 1706 - if (geometry instanceof THREE.Geometry) { 1707 - 1708 - var vertices = object.geometry.vertices; 1709 - 1710 - for (var v = 0, vl = vertices.length; v < vl; v++) { 1711 - 1712 - var vertex = vertices[v]; 1713 - 1714 - _vector4.set(vertex.x, vertex.y, vertex.z, 1); 1715 - _vector4.applyMatrix4(_modelViewProjectionMatrix); 1716 - 1717 - pushPoint(_vector4, object, camera); 1718 - } 1719 - } else if (geometry instanceof THREE.BufferGeometry) { 1720 - 1721 - var attributes = geometry.attributes; 1722 - 1723 - if (attributes.position !== undefined) { 1724 - 1725 - var positions = attributes.position.array; 1726 - 1727 - for (var i = 0, l = positions.length; i < l; i += 3) { 1728 - 1729 - _vector4.set(positions[i], positions[i + 1], positions[i + 2], 1); 1730 - _vector4.applyMatrix4(_modelViewProjectionMatrix); 1731 - 1732 - pushPoint(_vector4, object, camera); 1733 - } 1734 - } 1735 - } 1736 - } else if (object instanceof THREE.Sprite) { 1737 - 1738 - _vector4.set(_modelMatrix.elements[12], _modelMatrix.elements[13], _modelMatrix.elements[14], 1); 1739 - _vector4.applyMatrix4(_viewProjectionMatrix); 1740 - 1741 - pushPoint(_vector4, object, camera); 1742 - } 1743 - } 1744 - 1745 - if (sortElements === true) { 1746 - 1747 - _renderData.elements.sort(painterSort); 1748 - } 1749 - 1750 - return _renderData; 1751 - }; 1752 - 1753 - function pushPoint(_vector4, object, camera) { 1754 - 1755 - var invW = 1 / _vector4.w; 1756 - 1757 - _vector4.z *= invW; 1758 - 1759 - if (_vector4.z >= -1 && _vector4.z <= 1) { 1760 - 1761 - _sprite = getNextSpriteInPool(); 1762 - _sprite.id = object.id; 1763 - _sprite.x = _vector4.x * invW; 1764 - _sprite.y = _vector4.y * invW; 1765 - _sprite.z = _vector4.z; 1766 - _sprite.renderOrder = object.renderOrder; 1767 - _sprite.object = object; 1768 - 1769 - _sprite.rotation = object.rotation; 1770 - 1771 - _sprite.scale.x = object.scale.x * Math.abs(_sprite.x - (_vector4.x + camera.projectionMatrix.elements[0]) / (_vector4.w + camera.projectionMatrix.elements[12])); 1772 - _sprite.scale.y = object.scale.y * Math.abs(_sprite.y - (_vector4.y + camera.projectionMatrix.elements[5]) / (_vector4.w + camera.projectionMatrix.elements[13])); 1773 - 1774 - _sprite.material = object.material; 1775 - 1776 - _renderData.elements.push(_sprite); 1777 - } 1778 - } 1779 - 1780 - // Pools 1781 - 1782 - function getNextObjectInPool() { 1783 - 1784 - if (_objectCount === _objectPoolLength) { 1785 - 1786 - var object = new THREE.RenderableObject(); 1787 - _objectPool.push(object); 1788 - _objectPoolLength++; 1789 - _objectCount++; 1790 - return object; 1791 - } 1792 - 1793 - return _objectPool[_objectCount++]; 1794 - } 1795 - 1796 - function getNextVertexInPool() { 1797 - 1798 - if (_vertexCount === _vertexPoolLength) { 1799 - 1800 - var vertex = new THREE.RenderableVertex(); 1801 - _vertexPool.push(vertex); 1802 - _vertexPoolLength++; 1803 - _vertexCount++; 1804 - return vertex; 1805 - } 1806 - 1807 - return _vertexPool[_vertexCount++]; 1808 - } 1809 - 1810 - function getNextFaceInPool() { 1811 - 1812 - if (_faceCount === _facePoolLength) { 1813 - 1814 - var face = new THREE.RenderableFace(); 1815 - _facePool.push(face); 1816 - _facePoolLength++; 1817 - _faceCount++; 1818 - return face; 1819 - } 1820 - 1821 - return _facePool[_faceCount++]; 1822 - } 1823 - 1824 - function getNextLineInPool() { 1825 - 1826 - if (_lineCount === _linePoolLength) { 1827 - 1828 - var line = new THREE.RenderableLine(); 1829 - _linePool.push(line); 1830 - _linePoolLength++; 1831 - _lineCount++; 1832 - return line; 1833 - } 1834 - 1835 - return _linePool[_lineCount++]; 1836 - } 1837 - 1838 - function getNextSpriteInPool() { 1839 - 1840 - if (_spriteCount === _spritePoolLength) { 1841 - 1842 - var sprite = new THREE.RenderableSprite(); 1843 - _spritePool.push(sprite); 1844 - _spritePoolLength++; 1845 - _spriteCount++; 1846 - return sprite; 1847 - } 1848 - 1849 - return _spritePool[_spriteCount++]; 1850 - } 1851 - 1852 - // 1853 - 1854 - function painterSort(a, b) { 1855 - 1856 - if (a.renderOrder !== b.renderOrder) { 1857 - 1858 - return a.renderOrder - b.renderOrder; 1859 - } else if (a.z !== b.z) { 1860 - 1861 - return b.z - a.z; 1862 - } else if (a.id !== b.id) { 1863 - 1864 - return a.id - b.id; 1865 - } else { 1866 - 1867 - return 0; 1868 - } 1869 - } 1870 - 1871 - function clipLine(s1, s2) { 1872 - 1873 - var alpha1 = 0, 1874 - alpha2 = 1, 1875 - 1876 - 1877 - // Calculate the boundary coordinate of each vertex for the near and far clip planes, 1878 - // Z = -1 and Z = +1, respectively. 1879 - 1880 - bc1near = s1.z + s1.w, 1881 - bc2near = s2.z + s2.w, 1882 - bc1far = -s1.z + s1.w, 1883 - bc2far = -s2.z + s2.w; 1884 - 1885 - if (bc1near >= 0 && bc2near >= 0 && bc1far >= 0 && bc2far >= 0) { 1886 - 1887 - // Both vertices lie entirely within all clip planes. 1888 - return true; 1889 - } else if (bc1near < 0 && bc2near < 0 || bc1far < 0 && bc2far < 0) { 1890 - 1891 - // Both vertices lie entirely outside one of the clip planes. 1892 - return false; 1893 - } else { 1894 - 1895 - // The line segment spans at least one clip plane. 1896 - 1897 - if (bc1near < 0) { 1898 - 1899 - // v1 lies outside the near plane, v2 inside 1900 - alpha1 = Math.max(alpha1, bc1near / (bc1near - bc2near)); 1901 - } else if (bc2near < 0) { 1902 - 1903 - // v2 lies outside the near plane, v1 inside 1904 - alpha2 = Math.min(alpha2, bc1near / (bc1near - bc2near)); 1905 - } 1906 - 1907 - if (bc1far < 0) { 1908 - 1909 - // v1 lies outside the far plane, v2 inside 1910 - alpha1 = Math.max(alpha1, bc1far / (bc1far - bc2far)); 1911 - } else if (bc2far < 0) { 1912 - 1913 - // v2 lies outside the far plane, v2 inside 1914 - alpha2 = Math.min(alpha2, bc1far / (bc1far - bc2far)); 1915 - } 1916 - 1917 - if (alpha2 < alpha1) { 1918 - 1919 - // The line segment spans two boundaries, but is outside both of them. 1920 - // (This can't happen when we're only clipping against just near/far but good 1921 - // to leave the check here for future usage if other clip planes are added.) 1922 - return false; 1923 - } else { 1924 - 1925 - // Update the s1 and s2 vertices to match the clipped line segment. 1926 - s1.lerp(s2, alpha1); 1927 - s2.lerp(s1, 1 - alpha2); 1928 - 1929 - return true; 1930 - } 1931 - } 1932 - } 1933 - }; 1934 - //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpzL2NhbnZhcy1yZW5kZXJlci1hbmQtcHJvamVjdG9yLmpzIl0sIm5hbWVzIjpbImJnQ29sb3IiLCJUSFJFRSIsIlNwcml0ZUNhbnZhc01hdGVyaWFsIiwicGFyYW1ldGVycyIsIk1hdGVyaWFsIiwiY2FsbCIsInR5cGUiLCJjb2xvciIsIkNvbG9yIiwicHJvZ3JhbSIsInNldFZhbHVlcyIsInByb3RvdHlwZSIsIk9iamVjdCIsImNyZWF0ZSIsImNvbnN0cnVjdG9yIiwiaXNTcHJpdGVDYW52YXNNYXRlcmlhbCIsImNsb25lIiwibWF0ZXJpYWwiLCJjb3B5IiwiQ2FudmFzUmVuZGVyZXIiLCJjb25zb2xlIiwibG9nIiwiUkVWSVNJT04iLCJfdGhpcyIsIl9yZW5kZXJEYXRhIiwiX2VsZW1lbnRzIiwiX2xpZ2h0cyIsIl9wcm9qZWN0b3IiLCJQcm9qZWN0b3IiLCJfY2FudmFzIiwiY2FudmFzIiwidW5kZWZpbmVkIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiX2NhbnZhc1dpZHRoIiwid2lkdGgiLCJfY2FudmFzSGVpZ2h0IiwiaGVpZ2h0IiwiX2NhbnZhc1dpZHRoSGFsZiIsIk1hdGgiLCJmbG9vciIsIl9jYW52YXNIZWlnaHRIYWxmIiwiX3ZpZXdwb3J0WCIsIl92aWV3cG9ydFkiLCJfdmlld3BvcnRXaWR0aCIsIl92aWV3cG9ydEhlaWdodCIsIl9waXhlbFJhdGlvIiwiX2NvbnRleHQiLCJnZXRDb250ZXh0IiwiYWxwaGEiLCJfY2xlYXJDb2xvciIsIl9jbGVhckFscGhhIiwiX2NvbnRleHRHbG9iYWxBbHBoYSIsIl9jb250ZXh0R2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uIiwiX2NvbnRleHRTdHJva2VTdHlsZSIsIl9jb250ZXh0RmlsbFN0eWxlIiwiX2NvbnRleHRMaW5lV2lkdGgiLCJfY29udGV4dExpbmVDYXAiLCJfY29udGV4dExpbmVKb2luIiwiX2NvbnRleHRMaW5lRGFzaCIsIl92MSIsIl92MiIsIl92MyIsIl92MXgiLCJfdjF5IiwiX3YyeCIsIl92MnkiLCJfdjN4IiwiX3YzeSIsIl9jb2xvciIsIl9kaWZmdXNlQ29sb3IiLCJfZW1pc3NpdmVDb2xvciIsIl9saWdodENvbG9yIiwiX3BhdHRlcm5zIiwiX3V2cyIsIl91djF4IiwiX3V2MXkiLCJfdXYyeCIsIl91djJ5IiwiX3V2M3giLCJfdXYzeSIsIl9jbGlwQm94IiwiQm94MiIsIl9jbGVhckJveCIsIl9lbGVtQm94IiwiX2FtYmllbnRMaWdodCIsIl9kaXJlY3Rpb25hbExpZ2h0cyIsIl9wb2ludExpZ2h0cyIsIl92ZWN0b3IzIiwiVmVjdG9yMyIsIl9jZW50cm9pZCIsIl9ub3JtYWwiLCJfbm9ybWFsVmlld01hdHJpeCIsIk1hdHJpeDMiLCJzZXRMaW5lRGFzaCIsImRvbUVsZW1lbnQiLCJhdXRvQ2xlYXIiLCJzb3J0T2JqZWN0cyIsInNvcnRFbGVtZW50cyIsImluZm8iLCJyZW5kZXIiLCJ2ZXJ0aWNlcyIsImZhY2VzIiwiZ2V0Q29udGV4dEF0dHJpYnV0ZXMiLCJnZXRQaXhlbFJhdGlvIiwic2V0UGl4ZWxSYXRpbyIsInZhbHVlIiwic2V0U2l6ZSIsInVwZGF0ZVN0eWxlIiwic3R5bGUiLCJtaW4iLCJzZXQiLCJtYXgiLCJzZXRWaWV3cG9ydCIsIngiLCJ5Iiwic2V0U2Npc3NvciIsInNldFNjaXNzb3JUZXN0Iiwic2V0Q2xlYXJDb2xvciIsInNldENsZWFyQ29sb3JIZXgiLCJoZXgiLCJ3YXJuIiwiZ2V0Q2xlYXJDb2xvciIsImdldENsZWFyQWxwaGEiLCJnZXRNYXhBbmlzb3Ryb3B5IiwiY2xlYXIiLCJpc0VtcHR5IiwiaW50ZXJzZWN0IiwiZXhwYW5kQnlTY2FsYXIiLCJjbGVhclJlY3QiLCJzZXRPcGFjaXR5Iiwic2V0QmxlbmRpbmciLCJOb3JtYWxCbGVuZGluZyIsInNldEZpbGxTdHlsZSIsInIiLCJnIiwiYiIsImZpbGxSZWN0IiwibWFrZUVtcHR5IiwiY2xlYXJDb2xvciIsImNsZWFyRGVwdGgiLCJjbGVhclN0ZW5jaWwiLCJzY2VuZSIsImNhbWVyYSIsImlzQ2FtZXJhIiwiZXJyb3IiLCJiYWNrZ3JvdW5kIiwiaXNDb2xvciIsImdldFN0eWxlIiwic2V0VHJhbnNmb3JtIiwidHJhbnNsYXRlIiwicHJvamVjdFNjZW5lIiwiZWxlbWVudHMiLCJsaWdodHMiLCJnZXROb3JtYWxNYXRyaXgiLCJtYXRyaXhXb3JsZEludmVyc2UiLCJjYWxjdWxhdGVMaWdodHMiLCJlIiwiZWwiLCJsZW5ndGgiLCJlbGVtZW50Iiwib3BhY2l0eSIsIlJlbmRlcmFibGVTcHJpdGUiLCJyZW5kZXJTcHJpdGUiLCJSZW5kZXJhYmxlTGluZSIsInYxIiwidjIiLCJwb3NpdGlvblNjcmVlbiIsInNldEZyb21Qb2ludHMiLCJpbnRlcnNlY3RzQm94IiwicmVuZGVyTGluZSIsIlJlbmRlcmFibGVGYWNlIiwidjMiLCJ6Iiwib3ZlcmRyYXciLCJleHBhbmQiLCJyZW5kZXJGYWNlMyIsInVuaW9uIiwic2V0UkdCIiwibCIsImxsIiwibGlnaHQiLCJsaWdodENvbG9yIiwiaXNBbWJpZW50TGlnaHQiLCJhZGQiLCJpc0RpcmVjdGlvbmFsTGlnaHQiLCJpc1BvaW50TGlnaHQiLCJjYWxjdWxhdGVMaWdodCIsInBvc2l0aW9uIiwibm9ybWFsIiwibGlnaHRQb3NpdGlvbiIsInNldEZyb21NYXRyaXhQb3NpdGlvbiIsIm1hdHJpeFdvcmxkIiwibm9ybWFsaXplIiwiYW1vdW50IiwiZG90IiwiaW50ZW5zaXR5IiwibXVsdGlwbHlTY2FsYXIiLCJzdWJWZWN0b3JzIiwiZGlzdGFuY2UiLCJkaXN0YW5jZVRvIiwiYmxlbmRpbmciLCJzY2FsZVgiLCJzY2FsZSIsInNjYWxlWSIsImRpc3QiLCJzcXJ0IiwiaXNTcHJpdGVNYXRlcmlhbCIsInRleHR1cmUiLCJtYXAiLCJwYXR0ZXJuIiwiaWQiLCJ2ZXJzaW9uIiwidGV4dHVyZVRvUGF0dGVybiIsImJpdG1hcCIsImltYWdlIiwib3giLCJvZmZzZXQiLCJveSIsInN4IiwicmVwZWF0Iiwic3kiLCJjeCIsImN5Iiwic2F2ZSIsInJvdGF0aW9uIiwicm90YXRlIiwicmVzdG9yZSIsInNldFN0cm9rZVN0eWxlIiwiaXNQb2ludHNNYXRlcmlhbCIsInNpemUiLCJiZWdpblBhdGgiLCJtb3ZlVG8iLCJsaW5lVG8iLCJpc0xpbmVCYXNpY01hdGVyaWFsIiwic2V0TGluZVdpZHRoIiwibGluZXdpZHRoIiwic2V0TGluZUNhcCIsImxpbmVjYXAiLCJzZXRMaW5lSm9pbiIsImxpbmVqb2luIiwidmVydGV4Q29sb3JzIiwiVmVydGV4Q29sb3JzIiwiY29sb3JTdHlsZTEiLCJjb2xvclN0eWxlMiIsImdyYWQiLCJjcmVhdGVMaW5lYXJHcmFkaWVudCIsImFkZENvbG9yU3RvcCIsImV4Y2VwdGlvbiIsImlzTGluZURhc2hlZE1hdGVyaWFsIiwiZGFzaFNpemUiLCJnYXBTaXplIiwic3Ryb2tlIiwidXYxIiwidXYyIiwidXYzIiwiZHJhd1RyaWFuZ2xlIiwiaXNNZXNoTGFtYmVydE1hdGVyaWFsIiwiaXNNZXNoUGhvbmdNYXRlcmlhbCIsImlzTWVzaFN0YW5kYXJkTWF0ZXJpYWwiLCJlbWlzc2l2ZSIsIkZhY2VDb2xvcnMiLCJtdWx0aXBseSIsInBvc2l0aW9uV29ybGQiLCJkaXZpZGVTY2FsYXIiLCJub3JtYWxNb2RlbCIsIndpcmVmcmFtZSIsInN0cm9rZVBhdGgiLCJ3aXJlZnJhbWVMaW5ld2lkdGgiLCJ3aXJlZnJhbWVMaW5lY2FwIiwid2lyZWZyYW1lTGluZWpvaW4iLCJmaWxsUGF0aCIsImlzTWVzaEJhc2ljTWF0ZXJpYWwiLCJtYXBwaW5nIiwiVVZNYXBwaW5nIiwidXZzIiwicGF0dGVyblBhdGgiLCJlbnZNYXAiLCJTcGhlcmljYWxSZWZsZWN0aW9uTWFwcGluZyIsInZlcnRleE5vcm1hbHNNb2RlbCIsImFwcGx5TWF0cml4MyIsImlzTWVzaE5vcm1hbE1hdGVyaWFsIiwiYWRkU2NhbGFyIiwieDAiLCJ5MCIsIngxIiwieTEiLCJ4MiIsInkyIiwiY2xvc2VQYXRoIiwiZmlsbCIsIkNvbXByZXNzZWRUZXh0dXJlIiwiRGF0YVRleHR1cmUiLCJjb21wbGV0ZSIsInJlcGVhdFgiLCJ3cmFwUyIsIlJlcGVhdFdyYXBwaW5nIiwiTWlycm9yZWRSZXBlYXRXcmFwcGluZyIsInJlcGVhdFkiLCJ3cmFwVCIsIm1pcnJvclgiLCJtaXJyb3JZIiwiY29udGV4dCIsImRyYXdJbWFnZSIsImNyZWF0ZVBhdHRlcm4iLCJvblVwZGF0ZSIsInUwIiwidjAiLCJ1MSIsInUyIiwiYSIsImMiLCJkIiwiZiIsImRldCIsImlkZXQiLCJvZmZzZXRYIiwib2Zmc2V0WSIsInRyYW5zZm9ybSIsInBpeGVscyIsImdsb2JhbEFscGhhIiwiZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uIiwiQWRkaXRpdmVCbGVuZGluZyIsIlN1YnRyYWN0aXZlQmxlbmRpbmciLCJNdWx0aXBseUJsZW5kaW5nIiwibGluZVdpZHRoIiwibGluZUNhcCIsImxpbmVKb2luIiwic3Ryb2tlU3R5bGUiLCJmaWxsU3R5bGUiLCJSZW5kZXJhYmxlT2JqZWN0Iiwib2JqZWN0IiwicmVuZGVyT3JkZXIiLCJSZW5kZXJhYmxlVmVydGV4IiwidmVydGV4Tm9ybWFsc0xlbmd0aCIsIlZlY3RvcjIiLCJWZWN0b3I0IiwidmlzaWJsZSIsInZlcnRleCIsIl9vYmplY3QiLCJfb2JqZWN0Q291bnQiLCJfb2JqZWN0UG9vbCIsIl9vYmplY3RQb29sTGVuZ3RoIiwiX3ZlcnRleCIsIl92ZXJ0ZXhDb3VudCIsIl92ZXJ0ZXhQb29sIiwiX3ZlcnRleFBvb2xMZW5ndGgiLCJfZmFjZSIsIl9mYWNlQ291bnQiLCJfZmFjZVBvb2wiLCJfZmFjZVBvb2xMZW5ndGgiLCJfbGluZSIsIl9saW5lQ291bnQiLCJfbGluZVBvb2wiLCJfbGluZVBvb2xMZW5ndGgiLCJfc3ByaXRlIiwiX3Nwcml0ZUNvdW50IiwiX3Nwcml0ZVBvb2wiLCJfc3ByaXRlUG9vbExlbmd0aCIsIm9iamVjdHMiLCJfdmVjdG9yNCIsIkJveDMiLCJfYm91bmRpbmdCb3giLCJfcG9pbnRzMyIsIkFycmF5IiwiX3ZpZXdNYXRyaXgiLCJNYXRyaXg0IiwiX3ZpZXdQcm9qZWN0aW9uTWF0cml4IiwiX21vZGVsTWF0cml4IiwiX21vZGVsVmlld1Byb2plY3Rpb25NYXRyaXgiLCJfbm9ybWFsTWF0cml4IiwiX2ZydXN0dW0iLCJGcnVzdHVtIiwiX2NsaXBwZWRWZXJ0ZXgxUG9zaXRpb25TY3JlZW4iLCJfY2xpcHBlZFZlcnRleDJQb3NpdGlvblNjcmVlbiIsInByb2plY3RWZWN0b3IiLCJ2ZWN0b3IiLCJwcm9qZWN0IiwidW5wcm9qZWN0VmVjdG9yIiwidW5wcm9qZWN0IiwicGlja2luZ1JheSIsIlJlbmRlckxpc3QiLCJub3JtYWxzIiwiY29sb3JzIiwibm9ybWFsTWF0cml4Iiwic2V0T2JqZWN0IiwicHJvamVjdFZlcnRleCIsImFwcGx5TWF0cml4NCIsImludlciLCJ3IiwicHVzaFZlcnRleCIsImdldE5leHRWZXJ0ZXhJblBvb2wiLCJwdXNoTm9ybWFsIiwicHVzaCIsInB1c2hDb2xvciIsInB1c2hVdiIsImNoZWNrVHJpYW5nbGVWaXNpYmlsaXR5IiwiY2hlY2tCYWNrZmFjZUN1bGxpbmciLCJwdXNoTGluZSIsImNsaXBMaW5lIiwiZ2V0TmV4dExpbmVJblBvb2wiLCJmcm9tQXJyYXkiLCJwdXNoVHJpYW5nbGUiLCJzaWRlIiwiRG91YmxlU2lkZSIsImdldE5leHRGYWNlSW5Qb29sIiwiaSIsImFyZ3VtZW50cyIsInV2IiwicmVuZGVyTGlzdCIsInByb2plY3RPYmplY3QiLCJMaWdodCIsIk1lc2giLCJMaW5lIiwiUG9pbnRzIiwiZnJ1c3R1bUN1bGxlZCIsImludGVyc2VjdHNPYmplY3QiLCJhZGRPYmplY3QiLCJTcHJpdGUiLCJpbnRlcnNlY3RzU3ByaXRlIiwiY2hpbGRyZW4iLCJnZXROZXh0T2JqZWN0SW5Qb29sIiwiYXV0b1VwZGF0ZSIsInVwZGF0ZU1hdHJpeFdvcmxkIiwicGFyZW50IiwibXVsdGlwbHlNYXRyaWNlcyIsInByb2plY3Rpb25NYXRyaXgiLCJzZXRGcm9tTWF0cml4Iiwic29ydCIsInBhaW50ZXJTb3J0IiwibyIsIm9sIiwiZ2VvbWV0cnkiLCJCdWZmZXJHZW9tZXRyeSIsImF0dHJpYnV0ZXMiLCJncm91cHMiLCJwb3NpdGlvbnMiLCJhcnJheSIsImluZGV4IiwiaW5kaWNlcyIsImdyb3VwIiwic3RhcnQiLCJjb3VudCIsIkdlb21ldHJ5IiwiZmFjZVZlcnRleFV2cyIsImlzTXVsdGlNYXRlcmlhbCIsImlzQXJyYXkiLCJ2IiwidmwiLCJtb3JwaFRhcmdldHMiLCJtb3JwaEluZmx1ZW5jZXMiLCJtb3JwaFRhcmdldEluZmx1ZW5jZXMiLCJ0IiwidGwiLCJpbmZsdWVuY2UiLCJ0YXJnZXQiLCJ0YXJnZXRWZXJ0ZXgiLCJmbCIsImZhY2UiLCJtYXRlcmlhbEluZGV4IiwiRnJvbnRTaWRlIiwiQmFja1NpZGUiLCJuZWdhdGUiLCJmYWNlVmVydGV4Tm9ybWFscyIsInZlcnRleE5vcm1hbHMiLCJuIiwibmwiLCJ2ZXJ0ZXhVdnMiLCJ1Iiwic3RlcCIsIkxpbmVTZWdtZW50cyIsInB1c2hQb2ludCIsImdldE5leHRTcHJpdGVJblBvb2wiLCJhYnMiLCJsaW5lIiwic3ByaXRlIiwiczEiLCJzMiIsImFscGhhMSIsImFscGhhMiIsImJjMW5lYXIiLCJiYzJuZWFyIiwiYmMxZmFyIiwiYmMyZmFyIiwibGVycCJdLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBLElBQUlBLFVBQVUsUUFBZDtBQUNBOzs7O0FBSUFDLE1BQU1DLG9CQUFOLEdBQTZCLFVBQVdDLFVBQVgsRUFBd0I7O0FBRXBERixPQUFNRyxRQUFOLENBQWVDLElBQWYsQ0FBcUIsSUFBckI7O0FBRUEsTUFBS0MsSUFBTCxHQUFZLHNCQUFaOztBQUVBLE1BQUtDLEtBQUwsR0FBYSxJQUFJTixNQUFNTyxLQUFWLENBQWlCLFFBQWpCLENBQWI7QUFDQSxNQUFLQyxPQUFMLEdBQWUsWUFBWSxDQUFFLENBQTdCOztBQUVBLE1BQUtDLFNBQUwsQ0FBZ0JQLFVBQWhCO0FBRUEsQ0FYRDs7QUFhQUYsTUFBTUMsb0JBQU4sQ0FBMkJTLFNBQTNCLEdBQXVDQyxPQUFPQyxNQUFQLENBQWVaLE1BQU1HLFFBQU4sQ0FBZU8sU0FBOUIsQ0FB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ZXNDb250ZW50IjpbIi8vIG1pbk9uU2F2ZTogdHJ1ZSwgbWluaWZpZXI6IHVnbGlmeS1qc1xudmFyIGJnQ29sb3IgPSAweGZmZmZmZlxuLyoqXG4gKiBAYXV0aG9yIG1yZG9vYiAvIGh0dHA6Ly9tcmRvb2IuY29tL1xuICovXG5cblRIUkVFLlNwcml0ZUNhbnZhc01hdGVyaWFsID0gZnVuY3Rpb24gKCBwYXJhbWV0ZXJzICkge1xuXG5cdFRIUkVFLk1hdGVyaWFsLmNhbGwoIHRoaXMgKTtcblxuXHR0aGlzLnR5cGUgPSAnU3ByaXRlQ2FudmFzTWF0ZXJpYWwnO1xuXG5cdHRoaXMuY29sb3IgPSBuZXcgVEhSRUUuQ29sb3IoIDB4ZmZmZmZmICk7XG5cdHRoaXMucHJvZ3JhbSA9IGZ1bmN0aW9uICgpIHt9O1xuXG5cdHRoaXMuc2V0VmFsdWVzKCBwYXJhbWV0ZXJzICk7XG5cbn07XG5cblRIUkVFLlNwcml0ZUNhbnZhc01hdGVyaWFsLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoIFRIUkVFLk1hdGVyaWFsLnByb3RvdHlwZSApO1xuVEhSRUUuU3ByaXRlQ2FudmFzTWF0ZXJpYWwucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVEhSRUUuU3ByaXRlQ2FudmFzTWF0ZXJpYWw7XG5USFJFRS5TcHJpdGVDYW52YXNNYXRlcmlhbC5wcm90b3R5cGUuaXNTcHJpdGVDYW52YXNNYXRlcmlhbCA9IHRydWU7XG5cblRIUkVFLlNwcml0ZUNhbnZhc01hdGVyaWFsLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcblxuXHR2YXIgbWF0ZXJpYWwgPSBuZXcgVEhSRUUuU3ByaXRlQ2FudmFzTWF0ZXJpYWwoKTtcblxuXHRtYXRlcmlhbC5jb3B5KCB0aGlzICk7XG5cdG1hdGVyaWFsLmNvbG9yLmNvcHkoIHRoaXMuY29sb3IgKTtcblx0bWF0ZXJpYWwucHJvZ3JhbSA9IHRoaXMucHJvZ3JhbTtcblxuXHRyZXR1cm4gbWF0ZXJpYWw7XG5cbn07XG5cbi8vXG5cblRIUkVFLkNhbnZhc1JlbmRlcmVyID0gZnVuY3Rpb24gKCBwYXJhbWV0ZXJzICkge1xuXG5cdGNvbnNvbGUubG9nKCAnVEhSRUUuQ2FudmFzUmVuZGVyZXInLCBUSFJFRS5SRVZJU0lPTiApO1xuXG5cdHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzIHx8IHt9O1xuXG5cdHZhciBfdGhpcyA9IHRoaXMsXG5cdFx0X3JlbmRlckRhdGEsIF9lbGVtZW50cywgX2xpZ2h0cyxcblx0XHRfcHJvamVjdG9yID0gbmV3IFRIUkVFLlByb2plY3RvcigpLFxuXG5cdFx0X2NhbnZhcyA9IHBhcmFtZXRlcnMuY2FudmFzICE9PSB1bmRlZmluZWRcblx0XHRcdFx0ID8gcGFyYW1ldGVycy5jYW52YXNcblx0XHRcdFx0IDogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2NhbnZhcycgKSxcblxuXHRcdF9jYW52YXNXaWR0aCA9IF9jYW52YXMud2lkdGgsXG5cdFx0X2NhbnZhc0hlaWdodCA9IF9jYW52YXMuaGVpZ2h0LFxuXHRcdF9jYW52YXNXaWR0aEhhbGYgPSBNYXRoLmZsb29yKCBfY2FudmFzV2lkdGggLyAyICksXG5cdFx0X2NhbnZhc0hlaWdodEhhbGYgPSBNYXRoLmZsb29yKCBfY2FudmFzSGVpZ2h0IC8gMiApLFxuXG5cdFx0X3ZpZXdwb3J0WCA9IDAsXG5cdFx0X3ZpZXdwb3J0WSA9IDAsXG5cdFx0X3ZpZXdwb3J0V2lkdGggPSBfY2FudmFzV2lkdGgsXG5cdFx0X3ZpZXdwb3J0SGVpZ2h0ID0gX2NhbnZhc0hlaWdodCxcblxuXHRcdF9waXhlbFJhdGlvID0gMSxcblxuXHRcdF9jb250ZXh0ID0gX2NhbnZhcy5nZXRDb250ZXh0KCAnMmQnLCB7XG5cdFx0XHRhbHBoYTogcGFyYW1ldGVycy5hbHBoYSA9PT0gdHJ1ZVxuXHRcdH0gKSxcblxuXHRcdF9jbGVhckNvbG9yID0gbmV3IFRIUkVFLkNvbG9yKCBiZ0NvbG9yICksXG5cdFx0X2NsZWFyQWxwaGEgPSBwYXJhbWV0ZXJzLmFscGhhID09PSB0cnVlID8gMCA6IDEsXG5cblx0XHRfY29udGV4dEdsb2JhbEFscGhhID0gMSxcblx0XHRfY29udGV4dEdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IDAsXG5cdFx0X2NvbnRleHRTdHJva2VTdHlsZSA9IG51bGwsXG5cdFx0X2NvbnRleHRGaWxsU3R5bGUgPSBudWxsLFxuXHRcdF9jb250ZXh0TGluZVdpZHRoID0gbnVsbCxcblx0XHRfY29udGV4dExpbmVDYXAgPSBudWxsLFxuXHRcdF9jb250ZXh0TGluZUpvaW4gPSBudWxsLFxuXHRcdF9jb250ZXh0TGluZURhc2ggPSBbXSxcblxuXHRcdF92MSwgX3YyLCBfdjMsXG5cblx0XHRfdjF4LCBfdjF5LCBfdjJ4LCBfdjJ5LCBfdjN4LCBfdjN5LFxuXG5cdFx0X2NvbG9yID0gbmV3IFRIUkVFLkNvbG9yKCksXG5cblx0XHRfZGlmZnVzZUNvbG9yID0gbmV3IFRIUkVFLkNvbG9yKCksXG5cdFx0X2VtaXNzaXZlQ29sb3IgPSBuZXcgVEhSRUUuQ29sb3IoKSxcblxuXHRcdF9saWdodENvbG9yID0gbmV3IFRIUkVFLkNvbG9yKCksXG5cblx0XHRfcGF0dGVybnMgPSB7fSxcblxuXHRcdF91dnMsXG5cdFx0X3V2MXgsIF91djF5LCBfdXYyeCwgX3V2MnksIF91djN4LCBfdXYzeSxcblxuXHRcdF9jbGlwQm94ID0gbmV3IFRIUkVFLkJveDIoKSxcblx0XHRfY2xlYXJCb3ggPSBuZXcgVEhSRUUuQm94MigpLFxuXHRcdF9lbGVtQm94ID0gbmV3IFRIUkVFLkJveDIoKSxcblxuXHRcdF9hbWJpZW50TGlnaHQgPSBuZXcgVEhSRUUuQ29sb3IoKSxcblx0XHRfZGlyZWN0aW9uYWxMaWdodHMgPSBuZXcgVEhSRUUuQ29sb3IoKSxcblx0XHRfcG9pbnRMaWdodHMgPSBuZXcgVEhSRUUuQ29sb3IoKSxcblxuXHRcdF92ZWN0b3IzID0gbmV3IFRIUkVFLlZlY3RvcjMoKSwgLy8gTmVlZGVkIGZvciBQb2ludExpZ2h0XG5cdFx0X2NlbnRyb2lkID0gbmV3IFRIUkVFLlZlY3RvcjMoKSxcblx0XHRfbm9ybWFsID0gbmV3IFRIUkVFLlZlY3RvcjMoKSxcblx0XHRfbm9ybWFsVmlld01hdHJpeCA9IG5ldyBUSFJFRS5NYXRyaXgzKCk7XG5cblx0LyogVE9ET1xuXHRfY2FudmFzLm1vekltYWdlU21vb3RoaW5nRW5hYmxlZCA9IGZhbHNlO1xuXHRfY2FudmFzLndlYmtpdEltYWdlU21vb3RoaW5nRW5hYmxlZCA9IGZhbHNlO1xuXHRfY2FudmFzLm1zSW1hZ2VTbW9vdGhpbmdFbmFibGVkID0gZmFsc2U7XG5cdF9jYW52YXMuaW1hZ2VTbW9vdGhpbmdFbmFibGVkID0gZmFsc2U7XG5cdCovXG5cblx0Ly8gZGFzaCtnYXAgZmFsbGJhY2tzIGZvciBGaXJlZm94IGFuZCBldmVyeXRoaW5nIGVsc2VcblxuXHRpZiAoIF9jb250ZXh0LnNldExpbmVEYXNoID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRfY29udGV4dC5zZXRMaW5lRGFzaCA9IGZ1bmN0aW9uICgpIHt9O1xuXG5cdH1cblxuXHR0aGlzLmRvbUVsZW1lbnQgPSBfY2FudmFzO1xuXG5cdHRoaXMuYXV0b0NsZWFyID0gdHJ1ZTtcblx0dGhpcy5zb3J0T2JqZWN0cyA9IHRydWU7XG5cdHRoaXMuc29ydEVsZW1lbnRzID0gdHJ1ZTtcblxuXHR0aGlzLmluZm8gPSB7XG5cblx0XHRyZW5kZXI6IHtcblxuXHRcdFx0dmVydGljZXM6IDAsXG5cdFx0XHRmYWNlczogMFxuXG5cdFx0fVxuXG5cdH07XG5cblx0Ly8gQVBJXG5cblx0dGhpcy5nZXRDb250ZXh0ID0gZnVuY3Rpb24gKCkge1xuXG5cdFx0cmV0dXJuIF9jb250ZXh0O1xuXG5cdH07XG5cblx0dGhpcy5nZXRDb250ZXh0QXR0cmlidXRlcyA9IGZ1bmN0aW9uICgpIHtcblxuXHRcdHJldHVybiBfY29udGV4dC5nZXRDb250ZXh0QXR0cmlidXRlcygpO1xuXG5cdH07XG5cblx0dGhpcy5nZXRQaXhlbFJhdGlvID0gZnVuY3Rpb24gKCkge1xuXG5cdFx0cmV0dXJuIF9waXhlbFJhdGlvO1xuXG5cdH07XG5cblx0dGhpcy5zZXRQaXhlbFJhdGlvID0gZnVuY3Rpb24gKCB2YWx1ZSApIHtcblxuXHRcdGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIF9waXhlbFJhdGlvID0gdmFsdWU7XG5cblx0fTtcblxuXHR0aGlzLnNldFNpemUgPSBmdW5jdGlvbiAoIHdpZHRoLCBoZWlnaHQsIHVwZGF0ZVN0eWxlICkge1xuXG5cdFx0X2NhbnZhc1dpZHRoID0gd2lkdGggKiBfcGl4ZWxSYXRpbztcblx0XHRfY2FudmFzSGVpZ2h0ID0gaGVpZ2h0ICogX3BpeGVsUmF0aW87XG5cblx0XHRfY2FudmFzLndpZHRoID0gX2NhbnZhc1dpZHRoO1xuXHRcdF9jYW52YXMuaGVpZ2h0ID0gX2NhbnZhc0hlaWdodDtcblxuXHRcdF9jYW52YXNXaWR0aEhhbGYgPSBNYXRoLmZsb29yKCBfY2FudmFzV2lkdGggLyAyICk7XG5cdFx0X2NhbnZhc0hlaWdodEhhbGYgPSBNYXRoLmZsb29yKCBfY2FudmFzSGVpZ2h0IC8gMiApO1xuXG5cdFx0aWYgKCB1cGRhdGVTdHlsZSAhPT0gZmFsc2UgKSB7XG5cblx0XHRcdF9jYW52YXMuc3R5bGUud2lkdGggPSB3aWR0aCArICdweCc7XG5cdFx0XHRfY2FudmFzLnN0eWxlLmhlaWdodCA9IGhlaWdodCArICdweCc7XG5cblx0XHR9XG5cblx0XHRfY2xpcEJveC5taW4uc2V0KCAtIF9jYW52YXNXaWR0aEhhbGYsIC0gX2NhbnZhc0hlaWdodEhhbGYgKTtcblx0XHRfY2xpcEJveC5tYXguc2V0KCAgIF9jYW52YXNXaWR0aEhhbGYsICAgX2NhbnZhc0hlaWdodEhhbGYgKTtcblxuXHRcdF9jbGVhckJveC5taW4uc2V0KCAtIF9jYW52YXNXaWR0aEhhbGYsIC0gX2NhbnZhc0hlaWdodEhhbGYgKTtcblx0XHRfY2xlYXJCb3gubWF4LnNldCggICBfY2FudmFzV2lkdGhIYWxmLCAgIF9jYW52YXNIZWlnaHRIYWxmICk7XG5cblx0XHRfY29udGV4dEdsb2JhbEFscGhhID0gMTtcblx0XHRfY29udGV4dEdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IDA7XG5cdFx0X2NvbnRleHRTdHJva2VTdHlsZSA9IG51bGw7XG5cdFx0X2NvbnRleHRGaWxsU3R5bGUgPSBudWxsO1xuXHRcdF9jb250ZXh0TGluZVdpZHRoID0gbnVsbDtcblx0XHRfY29udGV4dExpbmVDYXAgPSBudWxsO1xuXHRcdF9jb250ZXh0TGluZUpvaW4gPSBudWxsO1xuXG5cdFx0dGhpcy5zZXRWaWV3cG9ydCggMCwgMCwgd2lkdGgsIGhlaWdodCApO1xuXG5cdH07XG5cblx0dGhpcy5zZXRWaWV3cG9ydCA9IGZ1bmN0aW9uICggeCwgeSwgd2lkdGgsIGhlaWdodCApIHtcblxuXHRcdF92aWV3cG9ydFggPSB4ICogX3BpeGVsUmF0aW87XG5cdFx0X3ZpZXdwb3J0WSA9IHkgKiBfcGl4ZWxSYXRpbztcblxuXHRcdF92aWV3cG9ydFdpZHRoID0gd2lkdGggKiBfcGl4ZWxSYXRpbztcblx0XHRfdmlld3BvcnRIZWlnaHQgPSBoZWlnaHQgKiBfcGl4ZWxSYXRpbztcblxuXHR9O1xuXG5cdHRoaXMuc2V0U2Npc3NvciA9IGZ1bmN0aW9uICgpIHt9O1xuXHR0aGlzLnNldFNjaXNzb3JUZXN0ID0gZnVuY3Rpb24gKCkge307XG5cblx0dGhpcy5zZXRDbGVhckNvbG9yID0gZnVuY3Rpb24gKCBjb2xvciwgYWxwaGEgKSB7XG5cblx0XHRfY2xlYXJDb2xvci5zZXQoIGNvbG9yICk7XG5cdFx0X2NsZWFyQWxwaGEgPSBhbHBoYSAhPT0gdW5kZWZpbmVkID8gYWxwaGEgOiAxO1xuXG5cdFx0X2NsZWFyQm94Lm1pbi5zZXQoIC0gX2NhbnZhc1dpZHRoSGFsZiwgLSBfY2FudmFzSGVpZ2h0SGFsZiApO1xuXHRcdF9jbGVhckJveC5tYXguc2V0KCAgIF9jYW52YXNXaWR0aEhhbGYsICAgX2NhbnZhc0hlaWdodEhhbGYgKTtcblxuXHR9O1xuXG5cdHRoaXMuc2V0Q2xlYXJDb2xvckhleCA9IGZ1bmN0aW9uICggaGV4LCBhbHBoYSApIHtcblxuXHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLkNhbnZhc1JlbmRlcmVyOiAuc2V0Q2xlYXJDb2xvckhleCgpIGlzIGJlaW5nIHJlbW92ZWQuIFVzZSAuc2V0Q2xlYXJDb2xvcigpIGluc3RlYWQuJyApO1xuXHRcdHRoaXMuc2V0Q2xlYXJDb2xvciggaGV4LCBhbHBoYSApO1xuXG5cdH07XG5cblx0dGhpcy5nZXRDbGVhckNvbG9yID0gZnVuY3Rpb24gKCkge1xuXG5cdFx0cmV0dXJuIF9jbGVhckNvbG9yO1xuXG5cdH07XG5cblx0dGhpcy5nZXRDbGVhckFscGhhID0gZnVuY3Rpb24gKCkge1xuXG5cdFx0cmV0dXJuIF9jbGVhckFscGhhO1xuXG5cdH07XG5cblx0dGhpcy5nZXRNYXhBbmlzb3Ryb3B5ID0gZnVuY3Rpb24gKCkge1xuXG5cdFx0cmV0dXJuIDA7XG5cblx0fTtcblxuXHR0aGlzLmNsZWFyID0gZnVuY3Rpb24gKCkge1xuXG5cdFx0aWYgKCBfY2xlYXJCb3guaXNFbXB0eSgpID09PSBmYWxzZSApIHtcblxuXHRcdFx0X2NsZWFyQm94LmludGVyc2VjdCggX2NsaXBCb3ggKTtcblx0XHRcdF9jbGVhckJveC5leHBhbmRCeVNjYWxhciggMiApO1xuXG5cdFx0XHRfY2xlYXJCb3gubWluLnggPSAgIF9jbGVhckJveC5taW4ueCArIF9jYW52YXNXaWR0aEhhbGY7XG5cdFx0XHRfY2xlYXJCb3gubWluLnkgPSAtIF9jbGVhckJveC5taW4ueSArIF9jYW52YXNIZWlnaHRIYWxmO1x0XHQvLyBoaWdoZXIgeSB2YWx1ZSAhXG5cdFx0XHRfY2xlYXJCb3gubWF4LnggPSAgIF9jbGVhckJveC5tYXgueCArIF9jYW52YXNXaWR0aEhhbGY7XG5cdFx0XHRfY2xlYXJCb3gubWF4LnkgPSAtIF9jbGVhckJveC5tYXgueSArIF9jYW52YXNIZWlnaHRIYWxmO1x0XHQvLyBsb3dlciB5IHZhbHVlICFcblxuXHRcdFx0aWYgKCBfY2xlYXJBbHBoYSA8IDEgKSB7XG5cblx0XHRcdFx0X2NvbnRleHQuY2xlYXJSZWN0KFxuXHRcdFx0XHRcdF9jbGVhckJveC5taW4ueCB8IDAsXG5cdFx0XHRcdFx0X2NsZWFyQm94Lm1heC55IHwgMCxcblx0XHRcdFx0XHQoIF9jbGVhckJveC5tYXgueCAtIF9jbGVhckJveC5taW4ueCApIHwgMCxcblx0XHRcdFx0XHQoIF9jbGVhckJveC5taW4ueSAtIF9jbGVhckJveC5tYXgueSApIHwgMFxuXHRcdFx0XHQpO1xuXG5cdFx0XHR9XG5cblx0XHRcdGlmICggX2NsZWFyQWxwaGEgPiAwICkge1xuXG5cdFx0XHRcdHNldE9wYWNpdHkoIDEgKTtcblx0XHRcdFx0c2V0QmxlbmRpbmcoIFRIUkVFLk5vcm1hbEJsZW5kaW5nICk7XG5cblx0XHRcdFx0c2V0RmlsbFN0eWxlKCAncmdiYSgnICsgTWF0aC5mbG9vciggX2NsZWFyQ29sb3IuciAqIDI1NSApICsgJywnICsgTWF0aC5mbG9vciggX2NsZWFyQ29sb3IuZyAqIDI1NSApICsgJywnICsgTWF0aC5mbG9vciggX2NsZWFyQ29sb3IuYiAqIDI1NSApICsgJywnICsgX2NsZWFyQWxwaGEgKyAnKScgKTtcblxuXHRcdFx0XHRfY29udGV4dC5maWxsUmVjdChcblx0XHRcdFx0XHRfY2xlYXJCb3gubWluLnggfCAwLFxuXHRcdFx0XHRcdF9jbGVhckJveC5tYXgueSB8IDAsXG5cdFx0XHRcdFx0KCBfY2xlYXJCb3gubWF4LnggLSBfY2xlYXJCb3gubWluLnggKSB8IDAsXG5cdFx0XHRcdFx0KCBfY2xlYXJCb3gubWluLnkgLSBfY2xlYXJCb3gubWF4LnkgKSB8IDBcblx0XHRcdFx0KTtcblxuXHRcdFx0fVxuXG5cdFx0XHRfY2xlYXJCb3gubWFrZUVtcHR5KCk7XG5cblx0XHR9XG5cblx0fTtcblxuXHQvLyBjb21wYXRpYmlsaXR5XG5cblx0dGhpcy5jbGVhckNvbG9yID0gZnVuY3Rpb24gKCkge307XG5cdHRoaXMuY2xlYXJEZXB0aCA9IGZ1bmN0aW9uICgpIHt9O1xuXHR0aGlzLmNsZWFyU3RlbmNpbCA9IGZ1bmN0aW9uICgpIHt9O1xuXG5cdHRoaXMucmVuZGVyID0gZnVuY3Rpb24gKCBzY2VuZSwgY2FtZXJhICkge1xuXG5cdFx0aWYgKCBjYW1lcmEuaXNDYW1lcmEgPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0Y29uc29sZS5lcnJvciggJ1RIUkVFLkNhbnZhc1JlbmRlcmVyLnJlbmRlcjogY2FtZXJhIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5DYW1lcmEuJyApO1xuXHRcdFx0cmV0dXJuO1xuXG5cdFx0fVxuXG5cdFx0dmFyIGJhY2tncm91bmQgPSBzY2VuZS5iYWNrZ3JvdW5kO1xuXG5cdFx0aWYgKCBiYWNrZ3JvdW5kICYmIGJhY2tncm91bmQuaXNDb2xvciApIHtcblxuXHRcdFx0c2V0T3BhY2l0eSggMSApO1xuXHRcdFx0c2V0QmxlbmRpbmcoIFRIUkVFLk5vcm1hbEJsZW5kaW5nICk7XG5cblx0XHRcdHNldEZpbGxTdHlsZSggYmFja2dyb3VuZC5nZXRTdHlsZSgpICk7XG5cdFx0XHRfY29udGV4dC5maWxsUmVjdCggMCwgMCwgX2NhbnZhc1dpZHRoLCBfY2FudmFzSGVpZ2h0ICk7XG5cblx0XHR9IGVsc2UgaWYgKCB0aGlzLmF1dG9DbGVhciA9PT0gdHJ1ZSApIHtcblxuXHRcdFx0dGhpcy5jbGVhcigpO1xuXG5cdFx0fVxuXG5cdFx0X3RoaXMuaW5mby5yZW5kZXIudmVydGljZXMgPSAwO1xuXHRcdF90aGlzLmluZm8ucmVuZGVyLmZhY2VzID0gMDtcblxuXHRcdF9jb250ZXh0LnNldFRyYW5zZm9ybSggX3ZpZXdwb3J0V2lkdGggLyBfY2FudmFzV2lkdGgsIDAsIDAsIC0gX3ZpZXdwb3J0SGVpZ2h0IC8gX2NhbnZhc0hlaWdodCwgX3ZpZXdwb3J0WCwgX2NhbnZhc0hlaWdodCAtIF92aWV3cG9ydFkgKTtcblx0XHRfY29udGV4dC50cmFuc2xhdGUoIF9jYW52YXNXaWR0aEhhbGYsIF9jYW52YXNIZWlnaHRIYWxmICk7XG5cblx0XHRfcmVuZGVyRGF0YSA9IF9wcm9qZWN0b3IucHJvamVjdFNjZW5lKCBzY2VuZSwgY2FtZXJhLCB0aGlzLnNvcnRPYmplY3RzLCB0aGlzLnNvcnRFbGVtZW50cyApO1xuXHRcdF9lbGVtZW50cyA9IF9yZW5kZXJEYXRhLmVsZW1lbnRzO1xuXHRcdF9saWdodHMgPSBfcmVuZGVyRGF0YS5saWdodHM7XG5cblx0XHRfbm9ybWFsVmlld01hdHJpeC5nZXROb3JtYWxNYXRyaXgoIGNhbWVyYS5tYXRyaXhXb3JsZEludmVyc2UgKTtcblxuXHRcdC8qIERFQlVHXG5cdFx0c2V0RmlsbFN0eWxlKCAncmdiYSggMCwgMjU1LCAyNTUsIDAuNSApJyApO1xuXHRcdF9jb250ZXh0LmZpbGxSZWN0KCBfY2xpcEJveC5taW4ueCwgX2NsaXBCb3gubWluLnksIF9jbGlwQm94Lm1heC54IC0gX2NsaXBCb3gubWluLngsIF9jbGlwQm94Lm1heC55IC0gX2NsaXBCb3gubWluLnkgKTtcblx0XHQqL1xuXG5cdFx0Y2FsY3VsYXRlTGlnaHRzKCk7XG5cblx0XHRmb3IgKCB2YXIgZSA9IDAsIGVsID0gX2VsZW1lbnRzLmxlbmd0aDsgZSA8IGVsOyBlICsrICkge1xuXG5cdFx0XHR2YXIgZWxlbWVudCA9IF9lbGVtZW50c1sgZSBdO1xuXG5cdFx0XHR2YXIgbWF0ZXJpYWwgPSBlbGVtZW50Lm1hdGVyaWFsO1xuXG5cdFx0XHRpZiAoIG1hdGVyaWFsID09PSB1bmRlZmluZWQgfHwgbWF0ZXJpYWwub3BhY2l0eSA9PT0gMCApIGNvbnRpbnVlO1xuXG5cdFx0XHRfZWxlbUJveC5tYWtlRW1wdHkoKTtcblxuXHRcdFx0aWYgKCBlbGVtZW50IGluc3RhbmNlb2YgVEhSRUUuUmVuZGVyYWJsZVNwcml0ZSApIHtcblxuXHRcdFx0XHRfdjEgPSBlbGVtZW50O1xuXHRcdFx0XHRfdjEueCAqPSBfY2FudmFzV2lkdGhIYWxmOyBfdjEueSAqPSBfY2FudmFzSGVpZ2h0SGFsZjtcblxuXHRcdFx0XHRyZW5kZXJTcHJpdGUoIF92MSwgZWxlbWVudCwgbWF0ZXJpYWwgKTtcblxuXHRcdFx0fSBlbHNlIGlmICggZWxlbWVudCBpbnN0YW5jZW9mIFRIUkVFLlJlbmRlcmFibGVMaW5lICkge1xuXG5cdFx0XHRcdF92MSA9IGVsZW1lbnQudjE7IF92MiA9IGVsZW1lbnQudjI7XG5cblx0XHRcdFx0X3YxLnBvc2l0aW9uU2NyZWVuLnggKj0gX2NhbnZhc1dpZHRoSGFsZjsgX3YxLnBvc2l0aW9uU2NyZWVuLnkgKj0gX2NhbnZhc0hlaWdodEhhbGY7XG5cdFx0XHRcdF92Mi5wb3NpdGlvblNjcmVlbi54ICo9IF9jYW52YXNXaWR0aEhhbGY7IF92Mi5wb3NpdGlvblNjcmVlbi55ICo9IF9jYW52YXNIZWlnaHRIYWxmO1xuXG5cdFx0XHRcdF9lbGVtQm94LnNldEZyb21Qb2ludHMoIFtcblx0XHRcdFx0XHRfdjEucG9zaXRpb25TY3JlZW4sXG5cdFx0XHRcdFx0X3YyLnBvc2l0aW9uU2NyZWVuXG5cdFx0XHRcdF0gKTtcblxuXHRcdFx0XHRpZiAoIF9jbGlwQm94LmludGVyc2VjdHNCb3goIF9lbGVtQm94ICkgPT09IHRydWUgKSB7XG5cblx0XHRcdFx0XHRyZW5kZXJMaW5lKCBfdjEsIF92MiwgZWxlbWVudCwgbWF0ZXJpYWwgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH0gZWxzZSBpZiAoIGVsZW1lbnQgaW5zdGFuY2VvZiBUSFJFRS5SZW5kZXJhYmxlRmFjZSApIHtcblxuXHRcdFx0XHRfdjEgPSBlbGVtZW50LnYxOyBfdjIgPSBlbGVtZW50LnYyOyBfdjMgPSBlbGVtZW50LnYzO1xuXG5cdFx0XHRcdGlmICggX3YxLnBvc2l0aW9uU2NyZWVuLnogPCAtIDEgfHwgX3YxLnBvc2l0aW9uU2NyZWVuLnogPiAxICkgY29udGludWU7XG5cdFx0XHRcdGlmICggX3YyLnBvc2l0aW9uU2NyZWVuLnogPCAtIDEgfHwgX3YyLnBvc2l0aW9uU2NyZWVuLnogPiAxICkgY29udGludWU7XG5cdFx0XHRcdGlmICggX3YzLnBvc2l0aW9uU2NyZWVuLnogPCAtIDEgfHwgX3YzLnBvc2l0aW9uU2NyZWVuLnogPiAxICkgY29udGludWU7XG5cblx0XHRcdFx0X3YxLnBvc2l0aW9uU2NyZWVuLnggKj0gX2NhbnZhc1dpZHRoSGFsZjsgX3YxLnBvc2l0aW9uU2NyZWVuLnkgKj0gX2NhbnZhc0hlaWdodEhhbGY7XG5cdFx0XHRcdF92Mi5wb3NpdGlvblNjcmVlbi54ICo9IF9jYW52YXNXaWR0aEhhbGY7IF92Mi5wb3NpdGlvblNjcmVlbi55ICo9IF9jYW52YXNIZWlnaHRIYWxmO1xuXHRcdFx0XHRfdjMucG9zaXRpb25TY3JlZW4ueCAqPSBfY2FudmFzV2lkdGhIYWxmOyBfdjMucG9zaXRpb25TY3JlZW4ueSAqPSBfY2FudmFzSGVpZ2h0SGFsZjtcblxuXHRcdFx0XHRpZiAoIG1hdGVyaWFsLm92ZXJkcmF3ID4gMCApIHtcblxuXHRcdFx0XHRcdGV4cGFuZCggX3YxLnBvc2l0aW9uU2NyZWVuLCBfdjIucG9zaXRpb25TY3JlZW4sIG1hdGVyaWFsLm92ZXJkcmF3ICk7XG5cdFx0XHRcdFx0ZXhwYW5kKCBfdjIucG9zaXRpb25TY3JlZW4sIF92My5wb3NpdGlvblNjcmVlbiwgbWF0ZXJpYWwub3ZlcmRyYXcgKTtcblx0XHRcdFx0XHRleHBhbmQoIF92My5wb3NpdGlvblNjcmVlbiwgX3YxLnBvc2l0aW9uU2NyZWVuLCBtYXRlcmlhbC5vdmVyZHJhdyApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRfZWxlbUJveC5zZXRGcm9tUG9pbnRzKCBbXG5cdFx0XHRcdFx0X3YxLnBvc2l0aW9uU2NyZWVuLFxuXHRcdFx0XHRcdF92Mi5wb3NpdGlvblNjcmVlbixcblx0XHRcdFx0XHRfdjMucG9zaXRpb25TY3JlZW5cblx0XHRcdFx0XSApO1xuXG5cdFx0XHRcdGlmICggX2NsaXBCb3guaW50ZXJzZWN0c0JveCggX2VsZW1Cb3ggKSA9PT0gdHJ1ZSApIHtcblxuXHRcdFx0XHRcdHJlbmRlckZhY2UzKCBfdjEsIF92MiwgX3YzLCAwLCAxLCAyLCBlbGVtZW50LCBtYXRlcmlhbCApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0XHQvKiBERUJVR1xuXHRcdFx0c2V0TGluZVdpZHRoKCAxICk7XG5cdFx0XHRzZXRTdHJva2VTdHlsZSggJ3JnYmEoIDAsIDI1NSwgMCwgMC41ICknICk7XG5cdFx0XHRfY29udGV4dC5zdHJva2VSZWN0KCBfZWxlbUJveC5taW4ueCwgX2VsZW1Cb3gubWluLnksIF9lbGVtQm94Lm1heC54IC0gX2VsZW1Cb3gubWluLngsIF9lbGVtQm94Lm1heC55IC0gX2VsZW1Cb3gubWluLnkgKTtcblx0XHRcdCovXG5cblx0XHRcdF9jbGVhckJveC51bmlvbiggX2VsZW1Cb3ggKTtcblxuXHRcdH1cblxuXHRcdC8qIERFQlVHXG5cdFx0c2V0TGluZVdpZHRoKCAxICk7XG5cdFx0c2V0U3Ryb2tlU3R5bGUoICdyZ2JhKCAyNTUsIDAsIDAsIDAuNSApJyApO1xuXHRcdF9jb250ZXh0LnN0cm9rZVJlY3QoIF9jbGVhckJveC5taW4ueCwgX2NsZWFyQm94Lm1pbi55LCBfY2xlYXJCb3gubWF4LnggLSBfY2xlYXJCb3gubWluLngsIF9jbGVhckJveC5tYXgueSAtIF9jbGVhckJveC5taW4ueSApO1xuXHRcdCovXG5cblx0XHRfY29udGV4dC5zZXRUcmFuc2Zvcm0oIDEsIDAsIDAsIDEsIDAsIDAgKTtcblxuXHR9O1xuXG5cdC8vXG5cblx0ZnVuY3Rpb24gY2FsY3VsYXRlTGlnaHRzKCkge1xuXG5cdFx0X2FtYmllbnRMaWdodC5zZXRSR0IoIDAsIDAsIDAgKTtcblx0XHRfZGlyZWN0aW9uYWxMaWdodHMuc2V0UkdCKCAwLCAwLCAwICk7XG5cdFx0X3BvaW50TGlnaHRzLnNldFJHQiggMCwgMCwgMCApO1xuXG5cdFx0Zm9yICggdmFyIGwgPSAwLCBsbCA9IF9saWdodHMubGVuZ3RoOyBsIDwgbGw7IGwgKysgKSB7XG5cblx0XHRcdHZhciBsaWdodCA9IF9saWdodHNbIGwgXTtcblx0XHRcdHZhciBsaWdodENvbG9yID0gbGlnaHQuY29sb3I7XG5cblx0XHRcdGlmICggbGlnaHQuaXNBbWJpZW50TGlnaHQgKSB7XG5cblx0XHRcdFx0X2FtYmllbnRMaWdodC5hZGQoIGxpZ2h0Q29sb3IgKTtcblxuXHRcdFx0fSBlbHNlIGlmICggbGlnaHQuaXNEaXJlY3Rpb25hbExpZ2h0ICkge1xuXG5cdFx0XHRcdC8vIGZvciBzcHJpdGVzXG5cblx0XHRcdFx0X2RpcmVjdGlvbmFsTGlnaHRzLmFkZCggbGlnaHRDb2xvciApO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBsaWdodC5pc1BvaW50TGlnaHQgKSB7XG5cblx0XHRcdFx0Ly8gZm9yIHNwcml0ZXNcblxuXHRcdFx0XHRfcG9pbnRMaWdodHMuYWRkKCBsaWdodENvbG9yICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHR9XG5cblx0ZnVuY3Rpb24gY2FsY3VsYXRlTGlnaHQoIHBvc2l0aW9uLCBub3JtYWwsIGNvbG9yICkge1xuXG5cdFx0Zm9yICggdmFyIGwgPSAwLCBsbCA9IF9saWdodHMubGVuZ3RoOyBsIDwgbGw7IGwgKysgKSB7XG5cblx0XHRcdHZhciBsaWdodCA9IF9saWdodHNbIGwgXTtcblxuXHRcdFx0X2xpZ2h0Q29sb3IuY29weSggbGlnaHQuY29sb3IgKTtcblxuXHRcdFx0aWYgKCBsaWdodC5pc0RpcmVjdGlvbmFsTGlnaHQgKSB7XG5cblx0XHRcdFx0dmFyIGxpZ2h0UG9zaXRpb24gPSBfdmVjdG9yMy5zZXRGcm9tTWF0cml4UG9zaXRpb24oIGxpZ2h0Lm1hdHJpeFdvcmxkICkubm9ybWFsaXplKCk7XG5cblx0XHRcdFx0dmFyIGFtb3VudCA9IG5vcm1hbC5kb3QoIGxpZ2h0UG9zaXRpb24gKTtcblxuXHRcdFx0XHRpZiAoIGFtb3VudCA8PSAwICkgY29udGludWU7XG5cblx0XHRcdFx0YW1vdW50ICo9IGxpZ2h0LmludGVuc2l0eTtcblxuXHRcdFx0XHRjb2xvci5hZGQoIF9saWdodENvbG9yLm11bHRpcGx5U2NhbGFyKCBhbW91bnQgKSApO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBsaWdodC5pc1BvaW50TGlnaHQgKSB7XG5cblx0XHRcdFx0dmFyIGxpZ2h0UG9zaXRpb24gPSBfdmVjdG9yMy5zZXRGcm9tTWF0cml4UG9zaXRpb24oIGxpZ2h0Lm1hdHJpeFdvcmxkICk7XG5cblx0XHRcdFx0dmFyIGFtb3VudCA9IG5vcm1hbC5kb3QoIF92ZWN0b3IzLnN1YlZlY3RvcnMoIGxpZ2h0UG9zaXRpb24sIHBvc2l0aW9uICkubm9ybWFsaXplKCkgKTtcblxuXHRcdFx0XHRpZiAoIGFtb3VudCA8PSAwICkgY29udGludWU7XG5cblx0XHRcdFx0YW1vdW50ICo9IGxpZ2h0LmRpc3RhbmNlID09IDAgPyAxIDogMSAtIE1hdGgubWluKCBwb3NpdGlvbi5kaXN0YW5jZVRvKCBsaWdodFBvc2l0aW9uICkgLyBsaWdodC5kaXN0YW5jZSwgMSApO1xuXG5cdFx0XHRcdGlmICggYW1vdW50ID09IDAgKSBjb250aW51ZTtcblxuXHRcdFx0XHRhbW91bnQgKj0gbGlnaHQuaW50ZW5zaXR5O1xuXG5cdFx0XHRcdGNvbG9yLmFkZCggX2xpZ2h0Q29sb3IubXVsdGlwbHlTY2FsYXIoIGFtb3VudCApICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHR9XG5cblx0ZnVuY3Rpb24gcmVuZGVyU3ByaXRlKCB2MSwgZWxlbWVudCwgbWF0ZXJpYWwgKSB7XG5cblx0XHRzZXRPcGFjaXR5KCBtYXRlcmlhbC5vcGFjaXR5ICk7XG5cdFx0c2V0QmxlbmRpbmcoIG1hdGVyaWFsLmJsZW5kaW5nICk7XG5cblx0XHR2YXIgc2NhbGVYID0gZWxlbWVudC5zY2FsZS54ICogX2NhbnZhc1dpZHRoSGFsZjtcblx0XHR2YXIgc2NhbGVZID0gZWxlbWVudC5zY2FsZS55ICogX2NhbnZhc0hlaWdodEhhbGY7XG5cblx0XHR2YXIgZGlzdCA9IE1hdGguc3FydCggc2NhbGVYICogc2NhbGVYICsgc2NhbGVZICogc2NhbGVZICk7IC8vIGFsbG93IGZvciByb3RhdGVkIHNwcml0ZVxuXHRcdF9lbGVtQm94Lm1pbi5zZXQoIHYxLnggLSBkaXN0LCB2MS55IC0gZGlzdCApO1xuXHRcdF9lbGVtQm94Lm1heC5zZXQoIHYxLnggKyBkaXN0LCB2MS55ICsgZGlzdCApO1xuXG5cdFx0aWYgKCBtYXRlcmlhbC5pc1Nwcml0ZU1hdGVyaWFsICkge1xuXG5cdFx0XHR2YXIgdGV4dHVyZSA9IG1hdGVyaWFsLm1hcDtcblxuXHRcdFx0aWYgKCB0ZXh0dXJlICE9PSBudWxsICkge1xuXG5cdFx0XHRcdHZhciBwYXR0ZXJuID0gX3BhdHRlcm5zWyB0ZXh0dXJlLmlkIF07XG5cblx0XHRcdFx0aWYgKCBwYXR0ZXJuID09PSB1bmRlZmluZWQgfHwgcGF0dGVybi52ZXJzaW9uICE9PSB0ZXh0dXJlLnZlcnNpb24gKSB7XG5cblx0XHRcdFx0XHRwYXR0ZXJuID0gdGV4dHVyZVRvUGF0dGVybiggdGV4dHVyZSApO1xuXHRcdFx0XHRcdF9wYXR0ZXJuc1sgdGV4dHVyZS5pZCBdID0gcGF0dGVybjtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCBwYXR0ZXJuLmNhbnZhcyAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdFx0c2V0RmlsbFN0eWxlKCBwYXR0ZXJuLmNhbnZhcyApO1xuXG5cdFx0XHRcdFx0dmFyIGJpdG1hcCA9IHRleHR1cmUuaW1hZ2U7XG5cblx0XHRcdFx0XHR2YXIgb3ggPSBiaXRtYXAud2lkdGggKiB0ZXh0dXJlLm9mZnNldC54O1xuXHRcdFx0XHRcdHZhciBveSA9IGJpdG1hcC5oZWlnaHQgKiB0ZXh0dXJlLm9mZnNldC55O1xuXG5cdFx0XHRcdFx0dmFyIHN4ID0gYml0bWFwLndpZHRoICogdGV4dHVyZS5yZXBlYXQueDtcblx0XHRcdFx0XHR2YXIgc3kgPSBiaXRtYXAuaGVpZ2h0ICogdGV4dHVyZS5yZXBlYXQueTtcblxuXHRcdFx0XHRcdHZhciBjeCA9IHNjYWxlWCAvIHN4O1xuXHRcdFx0XHRcdHZhciBjeSA9IHNjYWxlWSAvIHN5O1xuXG5cdFx0XHRcdFx0X2NvbnRleHQuc2F2ZSgpO1xuXHRcdFx0XHRcdF9jb250ZXh0LnRyYW5zbGF0ZSggdjEueCwgdjEueSApO1xuXHRcdFx0XHRcdGlmICggbWF0ZXJpYWwucm90YXRpb24gIT09IDAgKSBfY29udGV4dC5yb3RhdGUoIG1hdGVyaWFsLnJvdGF0aW9uICk7XG5cdFx0XHRcdFx0X2NvbnRleHQudHJhbnNsYXRlKCAtIHNjYWxlWCAvIDIsIC0gc2NhbGVZIC8gMiApO1xuXHRcdFx0XHRcdF9jb250ZXh0LnNjYWxlKCBjeCwgY3kgKTtcblx0XHRcdFx0XHRfY29udGV4dC50cmFuc2xhdGUoIC0gb3gsIC0gb3kgKTtcblx0XHRcdFx0XHRfY29udGV4dC5maWxsUmVjdCggb3gsIG95LCBzeCwgc3kgKTtcblx0XHRcdFx0XHRfY29udGV4dC5yZXN0b3JlKCk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdC8vIG5vIHRleHR1cmVcblxuXHRcdFx0XHRzZXRGaWxsU3R5bGUoIG1hdGVyaWFsLmNvbG9yLmdldFN0eWxlKCkgKTtcblxuXHRcdFx0XHRfY29udGV4dC5zYXZlKCk7XG5cdFx0XHRcdF9jb250ZXh0LnRyYW5zbGF0ZSggdjEueCwgdjEueSApO1xuXHRcdFx0XHRpZiAoIG1hdGVyaWFsLnJvdGF0aW9uICE9PSAwICkgX2NvbnRleHQucm90YXRlKCBtYXRlcmlhbC5yb3RhdGlvbiApO1xuXHRcdFx0XHRfY29udGV4dC5zY2FsZSggc2NhbGVYLCAtIHNjYWxlWSApO1xuXHRcdFx0XHRfY29udGV4dC5maWxsUmVjdCggLSAwLjUsIC0gMC41LCAxLCAxICk7XG5cdFx0XHRcdF9jb250ZXh0LnJlc3RvcmUoKTtcblxuXHRcdFx0fVxuXG5cdFx0fSBlbHNlIGlmICggbWF0ZXJpYWwuaXNTcHJpdGVDYW52YXNNYXRlcmlhbCApIHtcblxuXHRcdFx0c2V0U3Ryb2tlU3R5bGUoIG1hdGVyaWFsLmNvbG9yLmdldFN0eWxlKCkgKTtcblx0XHRcdHNldEZpbGxTdHlsZSggbWF0ZXJpYWwuY29sb3IuZ2V0U3R5bGUoKSApO1xuXG5cdFx0XHRfY29udGV4dC5zYXZlKCk7XG5cdFx0XHRfY29udGV4dC50cmFuc2xhdGUoIHYxLngsIHYxLnkgKTtcblx0XHRcdGlmICggbWF0ZXJpYWwucm90YXRpb24gIT09IDAgKSBfY29udGV4dC5yb3RhdGUoIG1hdGVyaWFsLnJvdGF0aW9uICk7XG5cdFx0XHRfY29udGV4dC5zY2FsZSggc2NhbGVYLCBzY2FsZVkgKTtcblxuXHRcdFx0bWF0ZXJpYWwucHJvZ3JhbSggX2NvbnRleHQgKTtcblxuXHRcdFx0X2NvbnRleHQucmVzdG9yZSgpO1xuXG5cdFx0fSBlbHNlIGlmICggbWF0ZXJpYWwuaXNQb2ludHNNYXRlcmlhbCApIHtcblxuXHRcdFx0c2V0RmlsbFN0eWxlKCBtYXRlcmlhbC5jb2xvci5nZXRTdHlsZSgpICk7XG5cblx0XHRcdF9jb250ZXh0LnNhdmUoKTtcblx0XHRcdF9jb250ZXh0LnRyYW5zbGF0ZSggdjEueCwgdjEueSApO1xuXHRcdFx0aWYgKCBtYXRlcmlhbC5yb3RhdGlvbiAhPT0gMCApIF9jb250ZXh0LnJvdGF0ZSggbWF0ZXJpYWwucm90YXRpb24gKTtcblx0XHRcdF9jb250ZXh0LnNjYWxlKCBzY2FsZVggKiBtYXRlcmlhbC5zaXplLCAtIHNjYWxlWSAqIG1hdGVyaWFsLnNpemUgKTtcblx0XHRcdF9jb250ZXh0LmZpbGxSZWN0KCAtIDAuNSwgLSAwLjUsIDEsIDEgKTtcblx0XHRcdF9jb250ZXh0LnJlc3RvcmUoKTtcblxuXHRcdH1cblxuXHRcdC8qIERFQlVHXG5cdFx0c2V0U3Ryb2tlU3R5bGUoICdyZ2IoMjU1LDI1NSwwKScgKTtcblx0XHRfY29udGV4dC5iZWdpblBhdGgoKTtcblx0XHRfY29udGV4dC5tb3ZlVG8oIHYxLnggLSAxMCwgdjEueSApO1xuXHRcdF9jb250ZXh0LmxpbmVUbyggdjEueCArIDEwLCB2MS55ICk7XG5cdFx0X2NvbnRleHQubW92ZVRvKCB2MS54LCB2MS55IC0gMTAgKTtcblx0XHRfY29udGV4dC5saW5lVG8oIHYxLngsIHYxLnkgKyAxMCApO1xuXHRcdF9jb250ZXh0LnN0cm9rZSgpO1xuXHRcdCovXG5cblx0fVxuXG5cdGZ1bmN0aW9uIHJlbmRlckxpbmUoIHYxLCB2MiwgZWxlbWVudCwgbWF0ZXJpYWwgKSB7XG5cblx0XHRzZXRPcGFjaXR5KCBtYXRlcmlhbC5vcGFjaXR5ICk7XG5cdFx0c2V0QmxlbmRpbmcoIG1hdGVyaWFsLmJsZW5kaW5nICk7XG5cblx0XHRfY29udGV4dC5iZWdpblBhdGgoKTtcblx0XHRfY29udGV4dC5tb3ZlVG8oIHYxLnBvc2l0aW9uU2NyZWVuLngsIHYxLnBvc2l0aW9uU2NyZWVuLnkgKTtcblx0XHRfY29udGV4dC5saW5lVG8oIHYyLnBvc2l0aW9uU2NyZWVuLngsIHYyLnBvc2l0aW9uU2NyZWVuLnkgKTtcblxuXHRcdGlmICggbWF0ZXJpYWwuaXNMaW5lQmFzaWNNYXRlcmlhbCApIHtcblxuXHRcdFx0c2V0TGluZVdpZHRoKCBtYXRlcmlhbC5saW5ld2lkdGggKTtcblx0XHRcdHNldExpbmVDYXAoIG1hdGVyaWFsLmxpbmVjYXAgKTtcblx0XHRcdHNldExpbmVKb2luKCBtYXRlcmlhbC5saW5lam9pbiApO1xuXG5cdFx0XHRpZiAoIG1hdGVyaWFsLnZlcnRleENvbG9ycyAhPT0gVEhSRUUuVmVydGV4Q29sb3JzICkge1xuXG5cdFx0XHRcdHNldFN0cm9rZVN0eWxlKCBtYXRlcmlhbC5jb2xvci5nZXRTdHlsZSgpICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0dmFyIGNvbG9yU3R5bGUxID0gZWxlbWVudC52ZXJ0ZXhDb2xvcnNbIDAgXS5nZXRTdHlsZSgpO1xuXHRcdFx0XHR2YXIgY29sb3JTdHlsZTIgPSBlbGVtZW50LnZlcnRleENvbG9yc1sgMSBdLmdldFN0eWxlKCk7XG5cblx0XHRcdFx0aWYgKCBjb2xvclN0eWxlMSA9PT0gY29sb3JTdHlsZTIgKSB7XG5cblx0XHRcdFx0XHRzZXRTdHJva2VTdHlsZSggY29sb3JTdHlsZTEgKTtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0dHJ5IHtcblxuXHRcdFx0XHRcdFx0dmFyIGdyYWQgPSBfY29udGV4dC5jcmVhdGVMaW5lYXJHcmFkaWVudChcblx0XHRcdFx0XHRcdFx0djEucG9zaXRpb25TY3JlZW4ueCxcblx0XHRcdFx0XHRcdFx0djEucG9zaXRpb25TY3JlZW4ueSxcblx0XHRcdFx0XHRcdFx0djIucG9zaXRpb25TY3JlZW4ueCxcblx0XHRcdFx0XHRcdFx0djIucG9zaXRpb25TY3JlZW4ueVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdGdyYWQuYWRkQ29sb3JTdG9wKCAwLCBjb2xvclN0eWxlMSApO1xuXHRcdFx0XHRcdFx0Z3JhZC5hZGRDb2xvclN0b3AoIDEsIGNvbG9yU3R5bGUyICk7XG5cblx0XHRcdFx0XHR9IGNhdGNoICggZXhjZXB0aW9uICkge1xuXG5cdFx0XHRcdFx0XHRncmFkID0gY29sb3JTdHlsZTE7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRzZXRTdHJva2VTdHlsZSggZ3JhZCApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIG1hdGVyaWFsLmlzTGluZURhc2hlZE1hdGVyaWFsICkge1xuXG5cdFx0XHRcdHNldExpbmVEYXNoKCBbIG1hdGVyaWFsLmRhc2hTaXplLCBtYXRlcmlhbC5nYXBTaXplIF0gKTtcblxuXHRcdFx0fVxuXG5cdFx0XHRfY29udGV4dC5zdHJva2UoKTtcblx0XHRcdF9lbGVtQm94LmV4cGFuZEJ5U2NhbGFyKCBtYXRlcmlhbC5saW5ld2lkdGggKiAyICk7XG5cblx0XHRcdGlmICggbWF0ZXJpYWwuaXNMaW5lRGFzaGVkTWF0ZXJpYWwgKSB7XG5cblx0XHRcdFx0c2V0TGluZURhc2goIFtdICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHR9XG5cblx0ZnVuY3Rpb24gcmVuZGVyRmFjZTMoIHYxLCB2MiwgdjMsIHV2MSwgdXYyLCB1djMsIGVsZW1lbnQsIG1hdGVyaWFsICkge1xuXG5cdFx0X3RoaXMuaW5mby5yZW5kZXIudmVydGljZXMgKz0gMztcblx0XHRfdGhpcy5pbmZvLnJlbmRlci5mYWNlcyArKztcblxuXHRcdHNldE9wYWNpdHkoIG1hdGVyaWFsLm9wYWNpdHkgKTtcblx0XHRzZXRCbGVuZGluZyggbWF0ZXJpYWwuYmxlbmRpbmcgKTtcblxuXHRcdF92MXggPSB2MS5wb3NpdGlvblNjcmVlbi54OyBfdjF5ID0gdjEucG9zaXRpb25TY3JlZW4ueTtcblx0XHRfdjJ4ID0gdjIucG9zaXRpb25TY3JlZW4ueDsgX3YyeSA9IHYyLnBvc2l0aW9uU2NyZWVuLnk7XG5cdFx0X3YzeCA9IHYzLnBvc2l0aW9uU2NyZWVuLng7IF92M3kgPSB2My5wb3NpdGlvblNjcmVlbi55O1xuXG5cdFx0ZHJhd1RyaWFuZ2xlKCBfdjF4LCBfdjF5LCBfdjJ4LCBfdjJ5LCBfdjN4LCBfdjN5ICk7XG5cblx0XHRpZiAoICggbWF0ZXJpYWwuaXNNZXNoTGFtYmVydE1hdGVyaWFsIHx8IG1hdGVyaWFsLmlzTWVzaFBob25nTWF0ZXJpYWwgfHwgbWF0ZXJpYWwuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbCApICYmIG1hdGVyaWFsLm1hcCA9PT0gbnVsbCApIHtcblxuXHRcdFx0X2RpZmZ1c2VDb2xvci5jb3B5KCBtYXRlcmlhbC5jb2xvciApO1xuXHRcdFx0X2VtaXNzaXZlQ29sb3IuY29weSggbWF0ZXJpYWwuZW1pc3NpdmUgKTtcblxuXHRcdFx0aWYgKCBtYXRlcmlhbC52ZXJ0ZXhDb2xvcnMgPT09IFRIUkVFLkZhY2VDb2xvcnMgKSB7XG5cblx0XHRcdFx0X2RpZmZ1c2VDb2xvci5tdWx0aXBseSggZWxlbWVudC5jb2xvciApO1xuXG5cdFx0XHR9XG5cblx0XHRcdF9jb2xvci5jb3B5KCBfYW1iaWVudExpZ2h0ICk7XG5cblx0XHRcdF9jZW50cm9pZC5jb3B5KCB2MS5wb3NpdGlvbldvcmxkICkuYWRkKCB2Mi5wb3NpdGlvbldvcmxkICkuYWRkKCB2My5wb3NpdGlvbldvcmxkICkuZGl2aWRlU2NhbGFyKCAzICk7XG5cblx0XHRcdGNhbGN1bGF0ZUxpZ2h0KCBfY2VudHJvaWQsIGVsZW1lbnQubm9ybWFsTW9kZWwsIF9jb2xvciApO1xuXG5cdFx0XHRfY29sb3IubXVsdGlwbHkoIF9kaWZmdXNlQ29sb3IgKS5hZGQoIF9lbWlzc2l2ZUNvbG9yICk7XG5cblx0XHRcdG1hdGVyaWFsLndpcmVmcmFtZSA9PT0gdHJ1ZVxuXHRcdFx0XHQgPyBzdHJva2VQYXRoKCBfY29sb3IsIG1hdGVyaWFsLndpcmVmcmFtZUxpbmV3aWR0aCwgbWF0ZXJpYWwud2lyZWZyYW1lTGluZWNhcCwgbWF0ZXJpYWwud2lyZWZyYW1lTGluZWpvaW4gKVxuXHRcdFx0XHQgOiBmaWxsUGF0aCggX2NvbG9yICk7XG5cblx0XHR9IGVsc2UgaWYgKCBtYXRlcmlhbC5pc01lc2hCYXNpY01hdGVyaWFsIHx8IG1hdGVyaWFsLmlzTWVzaExhbWJlcnRNYXRlcmlhbCB8fCBtYXRlcmlhbC5pc01lc2hQaG9uZ01hdGVyaWFsIHx8IG1hdGVyaWFsLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWwgKSB7XG5cblx0XHRcdGlmICggbWF0ZXJpYWwubWFwICE9PSBudWxsICkge1xuXG5cdFx0XHRcdHZhciBtYXBwaW5nID0gbWF0ZXJpYWwubWFwLm1hcHBpbmc7XG5cblx0XHRcdFx0aWYgKCBtYXBwaW5nID09PSBUSFJFRS5VVk1hcHBpbmcgKSB7XG5cblx0XHRcdFx0XHRfdXZzID0gZWxlbWVudC51dnM7XG5cdFx0XHRcdFx0cGF0dGVyblBhdGgoIF92MXgsIF92MXksIF92MngsIF92MnksIF92M3gsIF92M3ksIF91dnNbIHV2MSBdLngsIF91dnNbIHV2MSBdLnksIF91dnNbIHV2MiBdLngsIF91dnNbIHV2MiBdLnksIF91dnNbIHV2MyBdLngsIF91dnNbIHV2MyBdLnksIG1hdGVyaWFsLm1hcCApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fSBlbHNlIGlmICggbWF0ZXJpYWwuZW52TWFwICE9PSBudWxsICkge1xuXG5cdFx0XHRcdGlmICggbWF0ZXJpYWwuZW52TWFwLm1hcHBpbmcgPT09IFRIUkVFLlNwaGVyaWNhbFJlZmxlY3Rpb25NYXBwaW5nICkge1xuXG5cdFx0XHRcdFx0X25vcm1hbC5jb3B5KCBlbGVtZW50LnZlcnRleE5vcm1hbHNNb2RlbFsgdXYxIF0gKS5hcHBseU1hdHJpeDMoIF9ub3JtYWxWaWV3TWF0cml4ICk7XG5cdFx0XHRcdFx0X3V2MXggPSAwLjUgKiBfbm9ybWFsLnggKyAwLjU7XG5cdFx0XHRcdFx0X3V2MXkgPSAwLjUgKiBfbm9ybWFsLnkgKyAwLjU7XG5cblx0XHRcdFx0XHRfbm9ybWFsLmNvcHkoIGVsZW1lbnQudmVydGV4Tm9ybWFsc01vZGVsWyB1djIgXSApLmFwcGx5TWF0cml4MyggX25vcm1hbFZpZXdNYXRyaXggKTtcblx0XHRcdFx0XHRfdXYyeCA9IDAuNSAqIF9ub3JtYWwueCArIDAuNTtcblx0XHRcdFx0XHRfdXYyeSA9IDAuNSAqIF9ub3JtYWwueSArIDAuNTtcblxuXHRcdFx0XHRcdF9ub3JtYWwuY29weSggZWxlbWVudC52ZXJ0ZXhOb3JtYWxzTW9kZWxbIHV2MyBdICkuYXBwbHlNYXRyaXgzKCBfbm9ybWFsVmlld01hdHJpeCApO1xuXHRcdFx0XHRcdF91djN4ID0gMC41ICogX25vcm1hbC54ICsgMC41O1xuXHRcdFx0XHRcdF91djN5ID0gMC41ICogX25vcm1hbC55ICsgMC41O1xuXG5cdFx0XHRcdFx0cGF0dGVyblBhdGgoIF92MXgsIF92MXksIF92MngsIF92MnksIF92M3gsIF92M3ksIF91djF4LCBfdXYxeSwgX3V2MngsIF91djJ5LCBfdXYzeCwgX3V2M3ksIG1hdGVyaWFsLmVudk1hcCApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRfY29sb3IuY29weSggbWF0ZXJpYWwuY29sb3IgKTtcblxuXHRcdFx0XHRpZiAoIG1hdGVyaWFsLnZlcnRleENvbG9ycyA9PT0gVEhSRUUuRmFjZUNvbG9ycyApIHtcblxuXHRcdFx0XHRcdF9jb2xvci5tdWx0aXBseSggZWxlbWVudC5jb2xvciApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRtYXRlcmlhbC53aXJlZnJhbWUgPT09IHRydWVcblx0XHRcdFx0XHQgPyBzdHJva2VQYXRoKCBfY29sb3IsIG1hdGVyaWFsLndpcmVmcmFtZUxpbmV3aWR0aCwgbWF0ZXJpYWwud2lyZWZyYW1lTGluZWNhcCwgbWF0ZXJpYWwud2lyZWZyYW1lTGluZWpvaW4gKVxuXHRcdFx0XHRcdCA6IGZpbGxQYXRoKCBfY29sb3IgKTtcblxuXHRcdFx0fVxuXG5cdFx0fSBlbHNlIGlmICggbWF0ZXJpYWwuaXNNZXNoTm9ybWFsTWF0ZXJpYWwgKSB7XG5cblx0XHRcdF9ub3JtYWwuY29weSggZWxlbWVudC5ub3JtYWxNb2RlbCApLmFwcGx5TWF0cml4MyggX25vcm1hbFZpZXdNYXRyaXggKTtcblxuXHRcdFx0X2NvbG9yLnNldFJHQiggX25vcm1hbC54LCBfbm9ybWFsLnksIF9ub3JtYWwueiApLm11bHRpcGx5U2NhbGFyKCAwLjUgKS5hZGRTY2FsYXIoIDAuNSApO1xuXG5cdFx0XHRtYXRlcmlhbC53aXJlZnJhbWUgPT09IHRydWVcblx0XHRcdFx0ID8gc3Ryb2tlUGF0aCggX2NvbG9yLCBtYXRlcmlhbC53aXJlZnJhbWVMaW5ld2lkdGgsIG1hdGVyaWFsLndpcmVmcmFtZUxpbmVjYXAsIG1hdGVyaWFsLndpcmVmcmFtZUxpbmVqb2luIClcblx0XHRcdFx0IDogZmlsbFBhdGgoIF9jb2xvciApO1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0X2NvbG9yLnNldFJHQiggMSwgMSwgMSApO1xuXG5cdFx0XHRtYXRlcmlhbC53aXJlZnJhbWUgPT09IHRydWVcblx0XHRcdFx0ID8gc3Ryb2tlUGF0aCggX2NvbG9yLCBtYXRlcmlhbC53aXJlZnJhbWVMaW5ld2lkdGgsIG1hdGVyaWFsLndpcmVmcmFtZUxpbmVjYXAsIG1hdGVyaWFsLndpcmVmcmFtZUxpbmVqb2luIClcblx0XHRcdFx0IDogZmlsbFBhdGgoIF9jb2xvciApO1xuXG5cdFx0fVxuXG5cdH1cblxuXHQvL1xuXG5cdGZ1bmN0aW9uIGRyYXdUcmlhbmdsZSggeDAsIHkwLCB4MSwgeTEsIHgyLCB5MiApIHtcblxuXHRcdF9jb250ZXh0LmJlZ2luUGF0aCgpO1xuXHRcdF9jb250ZXh0Lm1vdmVUbyggeDAsIHkwICk7XG5cdFx0X2NvbnRleHQubGluZVRvKCB4MSwgeTEgKTtcblx0XHRfY29udGV4dC5saW5lVG8oIHgyLCB5MiApO1xuXHRcdF9jb250ZXh0LmNsb3NlUGF0aCgpO1xuXG5cdH1cblxuXHRmdW5jdGlvbiBzdHJva2VQYXRoKCBjb2xvciwgbGluZXdpZHRoLCBsaW5lY2FwLCBsaW5lam9pbiApIHtcblxuXHRcdHNldExpbmVXaWR0aCggbGluZXdpZHRoICk7XG5cdFx0c2V0TGluZUNhcCggbGluZWNhcCApO1xuXHRcdHNldExpbmVKb2luKCBsaW5lam9pbiApO1xuXHRcdHNldFN0cm9rZVN0eWxlKCBjb2xvci5nZXRTdHlsZSgpICk7XG5cblx0XHRfY29udGV4dC5zdHJva2UoKTtcblxuXHRcdF9lbGVtQm94LmV4cGFuZEJ5U2NhbGFyKCBsaW5ld2lkdGggKiAyICk7XG5cblx0fVxuXG5cdGZ1bmN0aW9uIGZpbGxQYXRoKCBjb2xvciApIHtcblxuXHRcdHNldEZpbGxTdHlsZSggY29sb3IuZ2V0U3R5bGUoKSApO1xuXHRcdF9jb250ZXh0LmZpbGwoKTtcblxuXHR9XG5cblx0ZnVuY3Rpb24gdGV4dHVyZVRvUGF0dGVybiggdGV4dHVyZSApIHtcblxuXHRcdGlmICggdGV4dHVyZS52ZXJzaW9uID09PSAwIHx8XG5cdFx0XHR0ZXh0dXJlIGluc3RhbmNlb2YgVEhSRUUuQ29tcHJlc3NlZFRleHR1cmUgfHxcblx0XHRcdHRleHR1cmUgaW5zdGFuY2VvZiBUSFJFRS5EYXRhVGV4dHVyZSApIHtcblxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0Y2FudmFzOiB1bmRlZmluZWQsXG5cdFx0XHRcdHZlcnNpb246IHRleHR1cmUudmVyc2lvblxuXHRcdFx0fTtcblxuXHRcdH1cblxuXHRcdHZhciBpbWFnZSA9IHRleHR1cmUuaW1hZ2U7XG5cblx0XHRpZiAoIGltYWdlLmNvbXBsZXRlID09PSBmYWxzZSApIHtcblxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0Y2FudmFzOiB1bmRlZmluZWQsXG5cdFx0XHRcdHZlcnNpb246IDBcblx0XHRcdH07XG5cblx0XHR9XG5cblx0XHR2YXIgcmVwZWF0WCA9IHRleHR1cmUud3JhcFMgPT09IFRIUkVFLlJlcGVhdFdyYXBwaW5nIHx8IHRleHR1cmUud3JhcFMgPT09IFRIUkVFLk1pcnJvcmVkUmVwZWF0V3JhcHBpbmc7XG5cdFx0dmFyIHJlcGVhdFkgPSB0ZXh0dXJlLndyYXBUID09PSBUSFJFRS5SZXBlYXRXcmFwcGluZyB8fCB0ZXh0dXJlLndyYXBUID09PSBUSFJFRS5NaXJyb3JlZFJlcGVhdFdyYXBwaW5nO1xuXG5cdFx0dmFyIG1pcnJvclggPSB0ZXh0dXJlLndyYXBTID09PSBUSFJFRS5NaXJyb3JlZFJlcGVhdFdyYXBwaW5nO1xuXHRcdHZhciBtaXJyb3JZID0gdGV4dHVyZS53cmFwVCA9PT0gVEhSRUUuTWlycm9yZWRSZXBlYXRXcmFwcGluZztcblxuXHRcdC8vXG5cblx0XHR2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2NhbnZhcycgKTtcblx0XHRjYW52YXMud2lkdGggPSBpbWFnZS53aWR0aCAqICggbWlycm9yWCA/IDIgOiAxICk7XG5cdFx0Y2FudmFzLmhlaWdodCA9IGltYWdlLmhlaWdodCAqICggbWlycm9yWSA/IDIgOiAxICk7XG5cblx0XHR2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCAnMmQnICk7XG5cdFx0Y29udGV4dC5zZXRUcmFuc2Zvcm0oIDEsIDAsIDAsIC0gMSwgMCwgaW1hZ2UuaGVpZ2h0ICk7XG5cdFx0Y29udGV4dC5kcmF3SW1hZ2UoIGltYWdlLCAwLCAwICk7XG5cblx0XHRpZiAoIG1pcnJvclggPT09IHRydWUgKSB7XG5cblx0XHRcdGNvbnRleHQuc2V0VHJhbnNmb3JtKCAtIDEsIDAsIDAsIC0gMSwgaW1hZ2Uud2lkdGgsIGltYWdlLmhlaWdodCApO1xuXHRcdFx0Y29udGV4dC5kcmF3SW1hZ2UoIGltYWdlLCAtIGltYWdlLndpZHRoLCAwICk7XG5cblx0XHR9XG5cblx0XHRpZiAoIG1pcnJvclkgPT09IHRydWUgKSB7XG5cblx0XHRcdGNvbnRleHQuc2V0VHJhbnNmb3JtKCAxLCAwLCAwLCAxLCAwLCAwICk7XG5cdFx0XHRjb250ZXh0LmRyYXdJbWFnZSggaW1hZ2UsIDAsIGltYWdlLmhlaWdodCApO1xuXG5cdFx0fVxuXG5cdFx0aWYgKCBtaXJyb3JYID09PSB0cnVlICYmIG1pcnJvclkgPT09IHRydWUgKSB7XG5cblx0XHRcdGNvbnRleHQuc2V0VHJhbnNmb3JtKCAtIDEsIDAsIDAsIDEsIGltYWdlLndpZHRoLCAwICk7XG5cdFx0XHRjb250ZXh0LmRyYXdJbWFnZSggaW1hZ2UsIC0gaW1hZ2Uud2lkdGgsIGltYWdlLmhlaWdodCApO1xuXG5cdFx0fVxuXG5cdFx0dmFyIHJlcGVhdCA9ICduby1yZXBlYXQnO1xuXG5cdFx0aWYgKCByZXBlYXRYID09PSB0cnVlICYmIHJlcGVhdFkgPT09IHRydWUgKSB7XG5cblx0XHRcdHJlcGVhdCA9ICdyZXBlYXQnO1xuXG5cdFx0fSBlbHNlIGlmICggcmVwZWF0WCA9PT0gdHJ1ZSApIHtcblxuXHRcdFx0cmVwZWF0ID0gJ3JlcGVhdC14JztcblxuXHRcdH0gZWxzZSBpZiAoIHJlcGVhdFkgPT09IHRydWUgKSB7XG5cblx0XHRcdHJlcGVhdCA9ICdyZXBlYXQteSc7XG5cblx0XHR9XG5cblx0XHR2YXIgcGF0dGVybiA9IF9jb250ZXh0LmNyZWF0ZVBhdHRlcm4oIGNhbnZhcywgcmVwZWF0ICk7XG5cblx0XHRpZiAoIHRleHR1cmUub25VcGRhdGUgKSB0ZXh0dXJlLm9uVXBkYXRlKCB0ZXh0dXJlICk7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0Y2FudmFzOiBwYXR0ZXJuLFxuXHRcdFx0dmVyc2lvbjogdGV4dHVyZS52ZXJzaW9uXG5cdFx0fTtcblxuXHR9XG5cblx0ZnVuY3Rpb24gcGF0dGVyblBhdGgoIHgwLCB5MCwgeDEsIHkxLCB4MiwgeTIsIHUwLCB2MCwgdTEsIHYxLCB1MiwgdjIsIHRleHR1cmUgKSB7XG5cblx0XHR2YXIgcGF0dGVybiA9IF9wYXR0ZXJuc1sgdGV4dHVyZS5pZCBdO1xuXG5cdFx0aWYgKCBwYXR0ZXJuID09PSB1bmRlZmluZWQgfHwgcGF0dGVybi52ZXJzaW9uICE9PSB0ZXh0dXJlLnZlcnNpb24gKSB7XG5cblx0XHRcdHBhdHRlcm4gPSB0ZXh0dXJlVG9QYXR0ZXJuKCB0ZXh0dXJlICk7XG5cdFx0XHRfcGF0dGVybnNbIHRleHR1cmUuaWQgXSA9IHBhdHRlcm47XG5cblx0XHR9XG5cblx0XHRpZiAoIHBhdHRlcm4uY2FudmFzICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdHNldEZpbGxTdHlsZSggcGF0dGVybi5jYW52YXMgKTtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdHNldEZpbGxTdHlsZSggJ3JnYmEoIDAsIDAsIDAsIDEpJyApO1xuXHRcdFx0X2NvbnRleHQuZmlsbCgpO1xuXHRcdFx0cmV0dXJuO1xuXG5cdFx0fVxuXG5cdFx0Ly8gaHR0cDovL2V4dHJlbWVseXNhdGlzZmFjdG9yeXRvdGFsaXRhcmlhbmlzbS5jb20vYmxvZy8/cD0yMTIwXG5cblx0XHR2YXIgYSwgYiwgYywgZCwgZSwgZiwgZGV0LCBpZGV0LFxuXHRcdFx0b2Zmc2V0WCA9IHRleHR1cmUub2Zmc2V0LnggLyB0ZXh0dXJlLnJlcGVhdC54LFxuXHRcdFx0b2Zmc2V0WSA9IHRleHR1cmUub2Zmc2V0LnkgLyB0ZXh0dXJlLnJlcGVhdC55LFxuXHRcdFx0d2lkdGggPSB0ZXh0dXJlLmltYWdlLndpZHRoICogdGV4dHVyZS5yZXBlYXQueCxcblx0XHRcdGhlaWdodCA9IHRleHR1cmUuaW1hZ2UuaGVpZ2h0ICogdGV4dHVyZS5yZXBlYXQueTtcblxuXHRcdHUwID0gKCB1MCArIG9mZnNldFggKSAqIHdpZHRoO1xuXHRcdHYwID0gKCB2MCArIG9mZnNldFkgKSAqIGhlaWdodDtcblxuXHRcdHUxID0gKCB1MSArIG9mZnNldFggKSAqIHdpZHRoO1xuXHRcdHYxID0gKCB2MSArIG9mZnNldFkgKSAqIGhlaWdodDtcblxuXHRcdHUyID0gKCB1MiArIG9mZnNldFggKSAqIHdpZHRoO1xuXHRcdHYyID0gKCB2MiArIG9mZnNldFkgKSAqIGhlaWdodDtcblxuXHRcdHgxIC09IHgwOyB5MSAtPSB5MDtcblx0XHR4MiAtPSB4MDsgeTIgLT0geTA7XG5cblx0XHR1MSAtPSB1MDsgdjEgLT0gdjA7XG5cdFx0dTIgLT0gdTA7IHYyIC09IHYwO1xuXG5cdFx0ZGV0ID0gdTEgKiB2MiAtIHUyICogdjE7XG5cblx0XHRpZiAoIGRldCA9PT0gMCApIHJldHVybjtcblxuXHRcdGlkZXQgPSAxIC8gZGV0O1xuXG5cdFx0YSA9ICggdjIgKiB4MSAtIHYxICogeDIgKSAqIGlkZXQ7XG5cdFx0YiA9ICggdjIgKiB5MSAtIHYxICogeTIgKSAqIGlkZXQ7XG5cdFx0YyA9ICggdTEgKiB4MiAtIHUyICogeDEgKSAqIGlkZXQ7XG5cdFx0ZCA9ICggdTEgKiB5MiAtIHUyICogeTEgKSAqIGlkZXQ7XG5cblx0XHRlID0geDAgLSBhICogdTAgLSBjICogdjA7XG5cdFx0ZiA9IHkwIC0gYiAqIHUwIC0gZCAqIHYwO1xuXG5cdFx0X2NvbnRleHQuc2F2ZSgpO1xuXHRcdF9jb250ZXh0LnRyYW5zZm9ybSggYSwgYiwgYywgZCwgZSwgZiApO1xuXHRcdF9jb250ZXh0LmZpbGwoKTtcblx0XHRfY29udGV4dC5yZXN0b3JlKCk7XG5cblx0fVxuXG5cdC8qXG5cdGZ1bmN0aW9uIGNsaXBJbWFnZSggeDAsIHkwLCB4MSwgeTEsIHgyLCB5MiwgdTAsIHYwLCB1MSwgdjEsIHUyLCB2MiwgaW1hZ2UgKSB7XG5cblx0XHQvLyBodHRwOi8vZXh0cmVtZWx5c2F0aXNmYWN0b3J5dG90YWxpdGFyaWFuaXNtLmNvbS9ibG9nLz9wPTIxMjBcblxuXHRcdHZhciBhLCBiLCBjLCBkLCBlLCBmLCBkZXQsIGlkZXQsXG5cdFx0d2lkdGggPSBpbWFnZS53aWR0aCAtIDEsXG5cdFx0aGVpZ2h0ID0gaW1hZ2UuaGVpZ2h0IC0gMTtcblxuXHRcdHUwICo9IHdpZHRoOyB2MCAqPSBoZWlnaHQ7XG5cdFx0dTEgKj0gd2lkdGg7IHYxICo9IGhlaWdodDtcblx0XHR1MiAqPSB3aWR0aDsgdjIgKj0gaGVpZ2h0O1xuXG5cdFx0eDEgLT0geDA7IHkxIC09IHkwO1xuXHRcdHgyIC09IHgwOyB5MiAtPSB5MDtcblxuXHRcdHUxIC09IHUwOyB2MSAtPSB2MDtcblx0XHR1MiAtPSB1MDsgdjIgLT0gdjA7XG5cblx0XHRkZXQgPSB1MSAqIHYyIC0gdTIgKiB2MTtcblxuXHRcdGlkZXQgPSAxIC8gZGV0O1xuXG5cdFx0YSA9ICggdjIgKiB4MSAtIHYxICogeDIgKSAqIGlkZXQ7XG5cdFx0YiA9ICggdjIgKiB5MSAtIHYxICogeTIgKSAqIGlkZXQ7XG5cdFx0YyA9ICggdTEgKiB4MiAtIHUyICogeDEgKSAqIGlkZXQ7XG5cdFx0ZCA9ICggdTEgKiB5MiAtIHUyICogeTEgKSAqIGlkZXQ7XG5cblx0XHRlID0geDAgLSBhICogdTAgLSBjICogdjA7XG5cdFx0ZiA9IHkwIC0gYiAqIHUwIC0gZCAqIHYwO1xuXG5cdFx0X2NvbnRleHQuc2F2ZSgpO1xuXHRcdF9jb250ZXh0LnRyYW5zZm9ybSggYSwgYiwgYywgZCwgZSwgZiApO1xuXHRcdF9jb250ZXh0LmNsaXAoKTtcblx0XHRfY29udGV4dC5kcmF3SW1hZ2UoIGltYWdlLCAwLCAwICk7XG5cdFx0X2NvbnRleHQucmVzdG9yZSgpO1xuXG5cdH1cblx0Ki9cblxuXHQvLyBIaWRlIGFudGktYWxpYXMgZ2Fwc1xuXG5cdGZ1bmN0aW9uIGV4cGFuZCggdjEsIHYyLCBwaXhlbHMgKSB7XG5cblx0XHR2YXIgeCA9IHYyLnggLSB2MS54LCB5ID0gdjIueSAtIHYxLnksXG5cdFx0XHRkZXQgPSB4ICogeCArIHkgKiB5LCBpZGV0O1xuXG5cdFx0aWYgKCBkZXQgPT09IDAgKSByZXR1cm47XG5cblx0XHRpZGV0ID0gcGl4ZWxzIC8gTWF0aC5zcXJ0KCBkZXQgKTtcblxuXHRcdHggKj0gaWRldDsgeSAqPSBpZGV0O1xuXG5cdFx0djIueCArPSB4OyB2Mi55ICs9IHk7XG5cdFx0djEueCAtPSB4OyB2MS55IC09IHk7XG5cblx0fVxuXG5cdC8vIENvbnRleHQgY2FjaGVkIG1ldGhvZHMuXG5cblx0ZnVuY3Rpb24gc2V0T3BhY2l0eSggdmFsdWUgKSB7XG5cblx0XHRpZiAoIF9jb250ZXh0R2xvYmFsQWxwaGEgIT09IHZhbHVlICkge1xuXG5cdFx0XHRfY29udGV4dC5nbG9iYWxBbHBoYSA9IHZhbHVlO1xuXHRcdFx0X2NvbnRleHRHbG9iYWxBbHBoYSA9IHZhbHVlO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRmdW5jdGlvbiBzZXRCbGVuZGluZyggdmFsdWUgKSB7XG5cblx0XHRpZiAoIF9jb250ZXh0R2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uICE9PSB2YWx1ZSApIHtcblxuXHRcdFx0aWYgKCB2YWx1ZSA9PT0gVEhSRUUuTm9ybWFsQmxlbmRpbmcgKSB7XG5cblx0XHRcdFx0X2NvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ3NvdXJjZS1vdmVyJztcblxuXHRcdFx0fSBlbHNlIGlmICggdmFsdWUgPT09IFRIUkVFLkFkZGl0aXZlQmxlbmRpbmcgKSB7XG5cblx0XHRcdFx0X2NvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2xpZ2h0ZXInO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCB2YWx1ZSA9PT0gVEhSRUUuU3VidHJhY3RpdmVCbGVuZGluZyApIHtcblxuXHRcdFx0XHRfY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnZGFya2VyJztcblxuXHRcdFx0fSBlbHNlIGlmICggdmFsdWUgPT09IFRIUkVFLk11bHRpcGx5QmxlbmRpbmcgKSB7XG5cblx0XHRcdFx0X2NvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ211bHRpcGx5JztcblxuXHRcdFx0fVxuXG5cdFx0XHRfY29udGV4dEdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IHZhbHVlO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRmdW5jdGlvbiBzZXRMaW5lV2lkdGgoIHZhbHVlICkge1xuXG5cdFx0aWYgKCBfY29udGV4dExpbmVXaWR0aCAhPT0gdmFsdWUgKSB7XG5cblx0XHRcdF9jb250ZXh0LmxpbmVXaWR0aCA9IHZhbHVlO1xuXHRcdFx0X2NvbnRleHRMaW5lV2lkdGggPSB2YWx1ZTtcblxuXHRcdH1cblxuXHR9XG5cblx0ZnVuY3Rpb24gc2V0TGluZUNhcCggdmFsdWUgKSB7XG5cblx0XHQvLyBcImJ1dHRcIiwgXCJyb3VuZFwiLCBcInNxdWFyZVwiXG5cblx0XHRpZiAoIF9jb250ZXh0TGluZUNhcCAhPT0gdmFsdWUgKSB7XG5cblx0XHRcdF9jb250ZXh0LmxpbmVDYXAgPSB2YWx1ZTtcblx0XHRcdF9jb250ZXh0TGluZUNhcCA9IHZhbHVlO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRmdW5jdGlvbiBzZXRMaW5lSm9pbiggdmFsdWUgKSB7XG5cblx0XHQvLyBcInJvdW5kXCIsIFwiYmV2ZWxcIiwgXCJtaXRlclwiXG5cblx0XHRpZiAoIF9jb250ZXh0TGluZUpvaW4gIT09IHZhbHVlICkge1xuXG5cdFx0XHRfY29udGV4dC5saW5lSm9pbiA9IHZhbHVlO1xuXHRcdFx0X2NvbnRleHRMaW5lSm9pbiA9IHZhbHVlO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRmdW5jdGlvbiBzZXRTdHJva2VTdHlsZSggdmFsdWUgKSB7XG5cblx0XHRpZiAoIF9jb250ZXh0U3Ryb2tlU3R5bGUgIT09IHZhbHVlICkge1xuXG5cdFx0XHRfY29udGV4dC5zdHJva2VTdHlsZSA9IHZhbHVlO1xuXHRcdFx0X2NvbnRleHRTdHJva2VTdHlsZSA9IHZhbHVlO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRmdW5jdGlvbiBzZXRGaWxsU3R5bGUoIHZhbHVlICkge1xuXG5cdFx0aWYgKCBfY29udGV4dEZpbGxTdHlsZSAhPT0gdmFsdWUgKSB7XG5cblx0XHRcdF9jb250ZXh0LmZpbGxTdHlsZSA9IHZhbHVlO1xuXHRcdFx0X2NvbnRleHRGaWxsU3R5bGUgPSB2YWx1ZTtcblxuXHRcdH1cblxuXHR9XG5cblx0ZnVuY3Rpb24gc2V0TGluZURhc2goIHZhbHVlICkge1xuXG5cdFx0aWYgKCBfY29udGV4dExpbmVEYXNoLmxlbmd0aCAhPT0gdmFsdWUubGVuZ3RoICkge1xuXG5cdFx0XHRfY29udGV4dC5zZXRMaW5lRGFzaCggdmFsdWUgKTtcblx0XHRcdF9jb250ZXh0TGluZURhc2ggPSB2YWx1ZTtcblxuXHRcdH1cblxuXHR9XG5cbn07XG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qKlxuICogQGF1dGhvciBtcmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbS9cbiAqIEBhdXRob3Igc3VwZXJlZ2diZXJ0IC8gaHR0cDovL3d3dy5wYXVsYnJ1bnQuY28udWsvXG4gKiBAYXV0aG9yIGp1bGlhbndhIC8gaHR0cHM6Ly9naXRodWIuY29tL2p1bGlhbndhXG4gKi9cblxuVEhSRUUuUmVuZGVyYWJsZU9iamVjdCA9IGZ1bmN0aW9uICgpIHtcblxuXHR0aGlzLmlkID0gMDtcblxuXHR0aGlzLm9iamVjdCA9IG51bGw7XG5cdHRoaXMueiA9IDA7XG5cdHRoaXMucmVuZGVyT3JkZXIgPSAwO1xuXG59O1xuXG4vL1xuXG5USFJFRS5SZW5kZXJhYmxlRmFjZSA9IGZ1bmN0aW9uICgpIHtcblxuXHR0aGlzLmlkID0gMDtcblxuXHR0aGlzLnYxID0gbmV3IFRIUkVFLlJlbmRlcmFibGVWZXJ0ZXgoKTtcblx0dGhpcy52MiA9IG5ldyBUSFJFRS5SZW5kZXJhYmxlVmVydGV4KCk7XG5cdHRoaXMudjMgPSBuZXcgVEhSRUUuUmVuZGVyYWJsZVZlcnRleCgpO1xuXG5cdHRoaXMubm9ybWFsTW9kZWwgPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xuXG5cdHRoaXMudmVydGV4Tm9ybWFsc01vZGVsID0gWyBuZXcgVEhSRUUuVmVjdG9yMygpLCBuZXcgVEhSRUUuVmVjdG9yMygpLCBuZXcgVEhSRUUuVmVjdG9yMygpIF07XG5cdHRoaXMudmVydGV4Tm9ybWFsc0xlbmd0aCA9IDA7XG5cblx0dGhpcy5jb2xvciA9IG5ldyBUSFJFRS5Db2xvcigpO1xuXHR0aGlzLm1hdGVyaWFsID0gbnVsbDtcblx0dGhpcy51dnMgPSBbIG5ldyBUSFJFRS5WZWN0b3IyKCksIG5ldyBUSFJFRS5WZWN0b3IyKCksIG5ldyBUSFJFRS5WZWN0b3IyKCkgXTtcblxuXHR0aGlzLnogPSAwO1xuXHR0aGlzLnJlbmRlck9yZGVyID0gMDtcblxufTtcblxuLy9cblxuVEhSRUUuUmVuZGVyYWJsZVZlcnRleCA9IGZ1bmN0aW9uICgpIHtcblxuXHR0aGlzLnBvc2l0aW9uID0gbmV3IFRIUkVFLlZlY3RvcjMoKTtcblx0dGhpcy5wb3NpdGlvbldvcmxkID0gbmV3IFRIUkVFLlZlY3RvcjMoKTtcblx0dGhpcy5wb3NpdGlvblNjcmVlbiA9IG5ldyBUSFJFRS5WZWN0b3I0KCk7XG5cblx0dGhpcy52aXNpYmxlID0gdHJ1ZTtcblxufTtcblxuVEhSRUUuUmVuZGVyYWJsZVZlcnRleC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uICggdmVydGV4ICkge1xuXG5cdHRoaXMucG9zaXRpb25Xb3JsZC5jb3B5KCB2ZXJ0ZXgucG9zaXRpb25Xb3JsZCApO1xuXHR0aGlzLnBvc2l0aW9uU2NyZWVuLmNvcHkoIHZlcnRleC5wb3NpdGlvblNjcmVlbiApO1xuXG59O1xuXG4vL1xuXG5USFJFRS5SZW5kZXJhYmxlTGluZSA9IGZ1bmN0aW9uICgpIHtcblxuXHR0aGlzLmlkID0gMDtcblxuXHR0aGlzLnYxID0gbmV3IFRIUkVFLlJlbmRlcmFibGVWZXJ0ZXgoKTtcblx0dGhpcy52MiA9IG5ldyBUSFJFRS5SZW5kZXJhYmxlVmVydGV4KCk7XG5cblx0dGhpcy52ZXJ0ZXhDb2xvcnMgPSBbIG5ldyBUSFJFRS5Db2xvcigpLCBuZXcgVEhSRUUuQ29sb3IoKSBdO1xuXHR0aGlzLm1hdGVyaWFsID0gbnVsbDtcblxuXHR0aGlzLnogPSAwO1xuXHR0aGlzLnJlbmRlck9yZGVyID0gMDtcblxufTtcblxuLy9cblxuVEhSRUUuUmVuZGVyYWJsZVNwcml0ZSA9IGZ1bmN0aW9uICgpIHtcblxuXHR0aGlzLmlkID0gMDtcblxuXHR0aGlzLm9iamVjdCA9IG51bGw7XG5cblx0dGhpcy54ID0gMDtcblx0dGhpcy55ID0gMDtcblx0dGhpcy56ID0gMDtcblxuXHR0aGlzLnJvdGF0aW9uID0gMDtcblx0dGhpcy5zY2FsZSA9IG5ldyBUSFJFRS5WZWN0b3IyKCk7XG5cblx0dGhpcy5tYXRlcmlhbCA9IG51bGw7XG5cdHRoaXMucmVuZGVyT3JkZXIgPSAwO1xuXG59O1xuXG4vL1xuXG5USFJFRS5Qcm9qZWN0b3IgPSBmdW5jdGlvbiAoKSB7XG5cblx0dmFyIF9vYmplY3QsIF9vYmplY3RDb3VudCwgX29iamVjdFBvb2wgPSBbXSwgX29iamVjdFBvb2xMZW5ndGggPSAwLFxuXHRcdF92ZXJ0ZXgsIF92ZXJ0ZXhDb3VudCwgX3ZlcnRleFBvb2wgPSBbXSwgX3ZlcnRleFBvb2xMZW5ndGggPSAwLFxuXHRcdF9mYWNlLCBfZmFjZUNvdW50LCBfZmFjZVBvb2wgPSBbXSwgX2ZhY2VQb29sTGVuZ3RoID0gMCxcblx0XHRfbGluZSwgX2xpbmVDb3VudCwgX2xpbmVQb29sID0gW10sIF9saW5lUG9vbExlbmd0aCA9IDAsXG5cdFx0X3Nwcml0ZSwgX3Nwcml0ZUNvdW50LCBfc3ByaXRlUG9vbCA9IFtdLCBfc3ByaXRlUG9vbExlbmd0aCA9IDAsXG5cblx0XHRfcmVuZGVyRGF0YSA9IHsgb2JqZWN0czogW10sIGxpZ2h0czogW10sIGVsZW1lbnRzOiBbXSB9LFxuXG5cdFx0X3ZlY3RvcjMgPSBuZXcgVEhSRUUuVmVjdG9yMygpLFxuXHRcdF92ZWN0b3I0ID0gbmV3IFRIUkVFLlZlY3RvcjQoKSxcblxuXHRcdF9jbGlwQm94ID0gbmV3IFRIUkVFLkJveDMoIG5ldyBUSFJFRS5WZWN0b3IzKCAtIDEsIC0gMSwgLSAxICksIG5ldyBUSFJFRS5WZWN0b3IzKCAxLCAxLCAxICkgKSxcblx0XHRfYm91bmRpbmdCb3ggPSBuZXcgVEhSRUUuQm94MygpLFxuXHRcdF9wb2ludHMzID0gbmV3IEFycmF5KCAzICksXG5cblx0XHRfdmlld01hdHJpeCA9IG5ldyBUSFJFRS5NYXRyaXg0KCksXG5cdFx0X3ZpZXdQcm9qZWN0aW9uTWF0cml4ID0gbmV3IFRIUkVFLk1hdHJpeDQoKSxcblxuXHRcdF9tb2RlbE1hdHJpeCxcblx0XHRfbW9kZWxWaWV3UHJvamVjdGlvbk1hdHJpeCA9IG5ldyBUSFJFRS5NYXRyaXg0KCksXG5cblx0XHRfbm9ybWFsTWF0cml4ID0gbmV3IFRIUkVFLk1hdHJpeDMoKSxcblxuXHRcdF9mcnVzdHVtID0gbmV3IFRIUkVFLkZydXN0dW0oKSxcblxuXHRcdF9jbGlwcGVkVmVydGV4MVBvc2l0aW9uU2NyZWVuID0gbmV3IFRIUkVFLlZlY3RvcjQoKSxcblx0XHRfY2xpcHBlZFZlcnRleDJQb3NpdGlvblNjcmVlbiA9IG5ldyBUSFJFRS5WZWN0b3I0KCk7XG5cblx0Ly9cblxuXHR0aGlzLnByb2plY3RWZWN0b3IgPSBmdW5jdGlvbiAoIHZlY3RvciwgY2FtZXJhICkge1xuXG5cdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuUHJvamVjdG9yOiAucHJvamVjdFZlY3RvcigpIGlzIG5vdyB2ZWN0b3IucHJvamVjdCgpLicgKTtcblx0XHR2ZWN0b3IucHJvamVjdCggY2FtZXJhICk7XG5cblx0fTtcblxuXHR0aGlzLnVucHJvamVjdFZlY3RvciA9IGZ1bmN0aW9uICggdmVjdG9yLCBjYW1lcmEgKSB7XG5cblx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5Qcm9qZWN0b3I6IC51bnByb2plY3RWZWN0b3IoKSBpcyBub3cgdmVjdG9yLnVucHJvamVjdCgpLicgKTtcblx0XHR2ZWN0b3IudW5wcm9qZWN0KCBjYW1lcmEgKTtcblxuXHR9O1xuXG5cdHRoaXMucGlja2luZ1JheSA9IGZ1bmN0aW9uICgpIHtcblxuXHRcdGNvbnNvbGUuZXJyb3IoICdUSFJFRS5Qcm9qZWN0b3I6IC5waWNraW5nUmF5KCkgaXMgbm93IHJheWNhc3Rlci5zZXRGcm9tQ2FtZXJhKCkuJyApO1xuXG5cdH07XG5cblx0Ly9cblxuXHR2YXIgUmVuZGVyTGlzdCA9IGZ1bmN0aW9uICgpIHtcblxuXHRcdHZhciBub3JtYWxzID0gW107XG5cdFx0dmFyIGNvbG9ycyA9IFtdO1xuXHRcdHZhciB1dnMgPSBbXTtcblxuXHRcdHZhciBvYmplY3QgPSBudWxsO1xuXHRcdHZhciBtYXRlcmlhbCA9IG51bGw7XG5cblx0XHR2YXIgbm9ybWFsTWF0cml4ID0gbmV3IFRIUkVFLk1hdHJpeDMoKTtcblxuXHRcdGZ1bmN0aW9uIHNldE9iamVjdCggdmFsdWUgKSB7XG5cblx0XHRcdG9iamVjdCA9IHZhbHVlO1xuXHRcdFx0bWF0ZXJpYWwgPSBvYmplY3QubWF0ZXJpYWw7XG5cblx0XHRcdG5vcm1hbE1hdHJpeC5nZXROb3JtYWxNYXRyaXgoIG9iamVjdC5tYXRyaXhXb3JsZCApO1xuXG5cdFx0XHRub3JtYWxzLmxlbmd0aCA9IDA7XG5cdFx0XHRjb2xvcnMubGVuZ3RoID0gMDtcblx0XHRcdHV2cy5sZW5ndGggPSAwO1xuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gcHJvamVjdFZlcnRleCggdmVydGV4ICkge1xuXG5cdFx0XHR2YXIgcG9zaXRpb24gPSB2ZXJ0ZXgucG9zaXRpb247XG5cdFx0XHR2YXIgcG9zaXRpb25Xb3JsZCA9IHZlcnRleC5wb3NpdGlvbldvcmxkO1xuXHRcdFx0dmFyIHBvc2l0aW9uU2NyZWVuID0gdmVydGV4LnBvc2l0aW9uU2NyZWVuO1xuXG5cdFx0XHRwb3NpdGlvbldvcmxkLmNvcHkoIHBvc2l0aW9uICkuYXBwbHlNYXRyaXg0KCBfbW9kZWxNYXRyaXggKTtcblx0XHRcdHBvc2l0aW9uU2NyZWVuLmNvcHkoIHBvc2l0aW9uV29ybGQgKS5hcHBseU1hdHJpeDQoIF92aWV3UHJvamVjdGlvbk1hdHJpeCApO1xuXG5cdFx0XHR2YXIgaW52VyA9IDEgLyBwb3NpdGlvblNjcmVlbi53O1xuXG5cdFx0XHRwb3NpdGlvblNjcmVlbi54ICo9IGludlc7XG5cdFx0XHRwb3NpdGlvblNjcmVlbi55ICo9IGludlc7XG5cdFx0XHRwb3NpdGlvblNjcmVlbi56ICo9IGludlc7XG5cblx0XHRcdHZlcnRleC52aXNpYmxlID0gcG9zaXRpb25TY3JlZW4ueCA+PSAtIDEgJiYgcG9zaXRpb25TY3JlZW4ueCA8PSAxICYmXG5cdFx0XHRcdFx0IHBvc2l0aW9uU2NyZWVuLnkgPj0gLSAxICYmIHBvc2l0aW9uU2NyZWVuLnkgPD0gMSAmJlxuXHRcdFx0XHRcdCBwb3NpdGlvblNjcmVlbi56ID49IC0gMSAmJiBwb3NpdGlvblNjcmVlbi56IDw9IDE7XG5cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBwdXNoVmVydGV4KCB4LCB5LCB6ICkge1xuXG5cdFx0XHRfdmVydGV4ID0gZ2V0TmV4dFZlcnRleEluUG9vbCgpO1xuXHRcdFx0X3ZlcnRleC5wb3NpdGlvbi5zZXQoIHgsIHksIHogKTtcblxuXHRcdFx0cHJvamVjdFZlcnRleCggX3ZlcnRleCApO1xuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gcHVzaE5vcm1hbCggeCwgeSwgeiApIHtcblxuXHRcdFx0bm9ybWFscy5wdXNoKCB4LCB5LCB6ICk7XG5cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBwdXNoQ29sb3IoIHIsIGcsIGIgKSB7XG5cblx0XHRcdGNvbG9ycy5wdXNoKCByLCBnLCBiICk7XG5cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBwdXNoVXYoIHgsIHkgKSB7XG5cblx0XHRcdHV2cy5wdXNoKCB4LCB5ICk7XG5cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBjaGVja1RyaWFuZ2xlVmlzaWJpbGl0eSggdjEsIHYyLCB2MyApIHtcblxuXHRcdFx0aWYgKCB2MS52aXNpYmxlID09PSB0cnVlIHx8IHYyLnZpc2libGUgPT09IHRydWUgfHwgdjMudmlzaWJsZSA9PT0gdHJ1ZSApIHJldHVybiB0cnVlO1xuXG5cdFx0XHRfcG9pbnRzM1sgMCBdID0gdjEucG9zaXRpb25TY3JlZW47XG5cdFx0XHRfcG9pbnRzM1sgMSBdID0gdjIucG9zaXRpb25TY3JlZW47XG5cdFx0XHRfcG9pbnRzM1sgMiBdID0gdjMucG9zaXRpb25TY3JlZW47XG5cblx0XHRcdHJldHVybiBfY2xpcEJveC5pbnRlcnNlY3RzQm94KCBfYm91bmRpbmdCb3guc2V0RnJvbVBvaW50cyggX3BvaW50czMgKSApO1xuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gY2hlY2tCYWNrZmFjZUN1bGxpbmcoIHYxLCB2MiwgdjMgKSB7XG5cblx0XHRcdHJldHVybiAoICggdjMucG9zaXRpb25TY3JlZW4ueCAtIHYxLnBvc2l0aW9uU2NyZWVuLnggKSAqXG5cdFx0XHRcdCAgICAoIHYyLnBvc2l0aW9uU2NyZWVuLnkgLSB2MS5wb3NpdGlvblNjcmVlbi55ICkgLVxuXHRcdFx0XHQgICAgKCB2My5wb3NpdGlvblNjcmVlbi55IC0gdjEucG9zaXRpb25TY3JlZW4ueSApICpcblx0XHRcdFx0ICAgICggdjIucG9zaXRpb25TY3JlZW4ueCAtIHYxLnBvc2l0aW9uU2NyZWVuLnggKSApIDwgMDtcblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIHB1c2hMaW5lKCBhLCBiICkge1xuXG5cdFx0XHR2YXIgdjEgPSBfdmVydGV4UG9vbFsgYSBdO1xuXHRcdFx0dmFyIHYyID0gX3ZlcnRleFBvb2xbIGIgXTtcblxuXHRcdFx0Ly8gQ2xpcFxuXG5cdFx0XHR2MS5wb3NpdGlvblNjcmVlbi5jb3B5KCB2MS5wb3NpdGlvbiApLmFwcGx5TWF0cml4NCggX21vZGVsVmlld1Byb2plY3Rpb25NYXRyaXggKTtcblx0XHRcdHYyLnBvc2l0aW9uU2NyZWVuLmNvcHkoIHYyLnBvc2l0aW9uICkuYXBwbHlNYXRyaXg0KCBfbW9kZWxWaWV3UHJvamVjdGlvbk1hdHJpeCApO1xuXG5cdFx0XHRpZiAoIGNsaXBMaW5lKCB2MS5wb3NpdGlvblNjcmVlbiwgdjIucG9zaXRpb25TY3JlZW4gKSA9PT0gdHJ1ZSApIHtcblxuXHRcdFx0XHQvLyBQZXJmb3JtIHRoZSBwZXJzcGVjdGl2ZSBkaXZpZGVcblx0XHRcdFx0djEucG9zaXRpb25TY3JlZW4ubXVsdGlwbHlTY2FsYXIoIDEgLyB2MS5wb3NpdGlvblNjcmVlbi53ICk7XG5cdFx0XHRcdHYyLnBvc2l0aW9uU2NyZWVuLm11bHRpcGx5U2NhbGFyKCAxIC8gdjIucG9zaXRpb25TY3JlZW4udyApO1xuXG5cdFx0XHRcdF9saW5lID0gZ2V0TmV4dExpbmVJblBvb2woKTtcblx0XHRcdFx0X2xpbmUuaWQgPSBvYmplY3QuaWQ7XG5cdFx0XHRcdF9saW5lLnYxLmNvcHkoIHYxICk7XG5cdFx0XHRcdF9saW5lLnYyLmNvcHkoIHYyICk7XG5cdFx0XHRcdF9saW5lLnogPSBNYXRoLm1heCggdjEucG9zaXRpb25TY3JlZW4ueiwgdjIucG9zaXRpb25TY3JlZW4ueiApO1xuXHRcdFx0XHRfbGluZS5yZW5kZXJPcmRlciA9IG9iamVjdC5yZW5kZXJPcmRlcjtcblxuXHRcdFx0XHRfbGluZS5tYXRlcmlhbCA9IG9iamVjdC5tYXRlcmlhbDtcblxuXHRcdFx0XHRpZiAoIG9iamVjdC5tYXRlcmlhbC52ZXJ0ZXhDb2xvcnMgPT09IFRIUkVFLlZlcnRleENvbG9ycyApIHtcblxuXHRcdFx0XHRcdF9saW5lLnZlcnRleENvbG9yc1sgMCBdLmZyb21BcnJheSggY29sb3JzLCBhICogMyApO1xuXHRcdFx0XHRcdF9saW5lLnZlcnRleENvbG9yc1sgMSBdLmZyb21BcnJheSggY29sb3JzLCBiICogMyApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRfcmVuZGVyRGF0YS5lbGVtZW50cy5wdXNoKCBfbGluZSApO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBwdXNoVHJpYW5nbGUoIGEsIGIsIGMgKSB7XG5cblx0XHRcdHZhciB2MSA9IF92ZXJ0ZXhQb29sWyBhIF07XG5cdFx0XHR2YXIgdjIgPSBfdmVydGV4UG9vbFsgYiBdO1xuXHRcdFx0dmFyIHYzID0gX3ZlcnRleFBvb2xbIGMgXTtcblxuXHRcdFx0aWYgKCBjaGVja1RyaWFuZ2xlVmlzaWJpbGl0eSggdjEsIHYyLCB2MyApID09PSBmYWxzZSApIHJldHVybjtcblxuXHRcdFx0aWYgKCBtYXRlcmlhbC5zaWRlID09PSBUSFJFRS5Eb3VibGVTaWRlIHx8IGNoZWNrQmFja2ZhY2VDdWxsaW5nKCB2MSwgdjIsIHYzICkgPT09IHRydWUgKSB7XG5cblx0XHRcdFx0X2ZhY2UgPSBnZXROZXh0RmFjZUluUG9vbCgpO1xuXG5cdFx0XHRcdF9mYWNlLmlkID0gb2JqZWN0LmlkO1xuXHRcdFx0XHRfZmFjZS52MS5jb3B5KCB2MSApO1xuXHRcdFx0XHRfZmFjZS52Mi5jb3B5KCB2MiApO1xuXHRcdFx0XHRfZmFjZS52My5jb3B5KCB2MyApO1xuXHRcdFx0XHRfZmFjZS56ID0gKCB2MS5wb3NpdGlvblNjcmVlbi56ICsgdjIucG9zaXRpb25TY3JlZW4ueiArIHYzLnBvc2l0aW9uU2NyZWVuLnogKSAvIDM7XG5cdFx0XHRcdF9mYWNlLnJlbmRlck9yZGVyID0gb2JqZWN0LnJlbmRlck9yZGVyO1xuXG5cdFx0XHRcdC8vIHVzZSBmaXJzdCB2ZXJ0ZXggbm9ybWFsIGFzIGZhY2Ugbm9ybWFsXG5cblx0XHRcdFx0X2ZhY2Uubm9ybWFsTW9kZWwuZnJvbUFycmF5KCBub3JtYWxzLCBhICogMyApO1xuXHRcdFx0XHRfZmFjZS5ub3JtYWxNb2RlbC5hcHBseU1hdHJpeDMoIG5vcm1hbE1hdHJpeCApLm5vcm1hbGl6ZSgpO1xuXG5cdFx0XHRcdGZvciAoIHZhciBpID0gMDsgaSA8IDM7IGkgKysgKSB7XG5cblx0XHRcdFx0XHR2YXIgbm9ybWFsID0gX2ZhY2UudmVydGV4Tm9ybWFsc01vZGVsWyBpIF07XG5cdFx0XHRcdFx0bm9ybWFsLmZyb21BcnJheSggbm9ybWFscywgYXJndW1lbnRzWyBpIF0gKiAzICk7XG5cdFx0XHRcdFx0bm9ybWFsLmFwcGx5TWF0cml4Myggbm9ybWFsTWF0cml4ICkubm9ybWFsaXplKCk7XG5cblx0XHRcdFx0XHR2YXIgdXYgPSBfZmFjZS51dnNbIGkgXTtcblx0XHRcdFx0XHR1di5mcm9tQXJyYXkoIHV2cywgYXJndW1lbnRzWyBpIF0gKiAyICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdF9mYWNlLnZlcnRleE5vcm1hbHNMZW5ndGggPSAzO1xuXG5cdFx0XHRcdF9mYWNlLm1hdGVyaWFsID0gb2JqZWN0Lm1hdGVyaWFsO1xuXG5cdFx0XHRcdF9yZW5kZXJEYXRhLmVsZW1lbnRzLnB1c2goIF9mYWNlICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHRzZXRPYmplY3Q6IHNldE9iamVjdCxcblx0XHRcdHByb2plY3RWZXJ0ZXg6IHByb2plY3RWZXJ0ZXgsXG5cdFx0XHRjaGVja1RyaWFuZ2xlVmlzaWJpbGl0eTogY2hlY2tUcmlhbmdsZVZpc2liaWxpdHksXG5cdFx0XHRjaGVja0JhY2tmYWNlQ3VsbGluZzogY2hlY2tCYWNrZmFjZUN1bGxpbmcsXG5cdFx0XHRwdXNoVmVydGV4OiBwdXNoVmVydGV4LFxuXHRcdFx0cHVzaE5vcm1hbDogcHVzaE5vcm1hbCxcblx0XHRcdHB1c2hDb2xvcjogcHVzaENvbG9yLFxuXHRcdFx0cHVzaFV2OiBwdXNoVXYsXG5cdFx0XHRwdXNoTGluZTogcHVzaExpbmUsXG5cdFx0XHRwdXNoVHJpYW5nbGU6IHB1c2hUcmlhbmdsZVxuXHRcdH07XG5cblx0fTtcblxuXHR2YXIgcmVuZGVyTGlzdCA9IG5ldyBSZW5kZXJMaXN0KCk7XG5cblx0ZnVuY3Rpb24gcHJvamVjdE9iamVjdCggb2JqZWN0ICkge1xuXG5cdFx0aWYgKCBvYmplY3QudmlzaWJsZSA9PT0gZmFsc2UgKSByZXR1cm47XG5cblx0XHRpZiAoIG9iamVjdCBpbnN0YW5jZW9mIFRIUkVFLkxpZ2h0ICkge1xuXG5cdFx0XHRfcmVuZGVyRGF0YS5saWdodHMucHVzaCggb2JqZWN0ICk7XG5cblx0XHR9IGVsc2UgaWYgKCBvYmplY3QgaW5zdGFuY2VvZiBUSFJFRS5NZXNoIHx8IG9iamVjdCBpbnN0YW5jZW9mIFRIUkVFLkxpbmUgfHwgb2JqZWN0IGluc3RhbmNlb2YgVEhSRUUuUG9pbnRzICkge1xuXG5cdFx0XHRpZiAoIG9iamVjdC5tYXRlcmlhbC52aXNpYmxlID09PSBmYWxzZSApIHJldHVybjtcblx0XHRcdGlmICggb2JqZWN0LmZydXN0dW1DdWxsZWQgPT09IHRydWUgJiYgX2ZydXN0dW0uaW50ZXJzZWN0c09iamVjdCggb2JqZWN0ICkgPT09IGZhbHNlICkgcmV0dXJuO1xuXG5cdFx0XHRhZGRPYmplY3QoIG9iamVjdCApO1xuXG5cdFx0fSBlbHNlIGlmICggb2JqZWN0IGluc3RhbmNlb2YgVEhSRUUuU3ByaXRlICkge1xuXG5cdFx0XHRpZiAoIG9iamVjdC5tYXRlcmlhbC52aXNpYmxlID09PSBmYWxzZSApIHJldHVybjtcblx0XHRcdGlmICggb2JqZWN0LmZydXN0dW1DdWxsZWQgPT09IHRydWUgJiYgX2ZydXN0dW0uaW50ZXJzZWN0c1Nwcml0ZSggb2JqZWN0ICkgPT09IGZhbHNlICkgcmV0dXJuO1xuXG5cdFx0XHRhZGRPYmplY3QoIG9iamVjdCApO1xuXG5cdFx0fVxuXG5cdFx0dmFyIGNoaWxkcmVuID0gb2JqZWN0LmNoaWxkcmVuO1xuXG5cdFx0Zm9yICggdmFyIGkgPSAwLCBsID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsgaSArKyApIHtcblxuXHRcdFx0cHJvamVjdE9iamVjdCggY2hpbGRyZW5bIGkgXSApO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRmdW5jdGlvbiBhZGRPYmplY3QoIG9iamVjdCApIHtcblxuXHRcdF9vYmplY3QgPSBnZXROZXh0T2JqZWN0SW5Qb29sKCk7XG5cdFx0X29iamVjdC5pZCA9IG9iamVjdC5pZDtcblx0XHRfb2JqZWN0Lm9iamVjdCA9IG9iamVjdDtcblxuXHRcdF92ZWN0b3IzLnNldEZyb21NYXRyaXhQb3NpdGlvbiggb2JqZWN0Lm1hdHJpeFdvcmxkICk7XG5cdFx0X3ZlY3RvcjMuYXBwbHlNYXRyaXg0KCBfdmlld1Byb2plY3Rpb25NYXRyaXggKTtcblx0XHRfb2JqZWN0LnogPSBfdmVjdG9yMy56O1xuXHRcdF9vYmplY3QucmVuZGVyT3JkZXIgPSBvYmplY3QucmVuZGVyT3JkZXI7XG5cblx0XHRfcmVuZGVyRGF0YS5vYmplY3RzLnB1c2goIF9vYmplY3QgKTtcblxuXHR9XG5cblx0dGhpcy5wcm9qZWN0U2NlbmUgPSBmdW5jdGlvbiAoIHNjZW5lLCBjYW1lcmEsIHNvcnRPYmplY3RzLCBzb3J0RWxlbWVudHMgKSB7XG5cblx0XHRfZmFjZUNvdW50ID0gMDtcblx0XHRfbGluZUNvdW50ID0gMDtcblx0XHRfc3ByaXRlQ291bnQgPSAwO1xuXG5cdFx0X3JlbmRlckRhdGEuZWxlbWVudHMubGVuZ3RoID0gMDtcblxuXHRcdGlmICggc2NlbmUuYXV0b1VwZGF0ZSA9PT0gdHJ1ZSApIHNjZW5lLnVwZGF0ZU1hdHJpeFdvcmxkKCk7XG5cdFx0aWYgKCBjYW1lcmEucGFyZW50ID09PSBudWxsICkgY2FtZXJhLnVwZGF0ZU1hdHJpeFdvcmxkKCk7XG5cblx0XHRfdmlld01hdHJpeC5jb3B5KCBjYW1lcmEubWF0cml4V29ybGRJbnZlcnNlICk7XG5cdFx0X3ZpZXdQcm9qZWN0aW9uTWF0cml4Lm11bHRpcGx5TWF0cmljZXMoIGNhbWVyYS5wcm9qZWN0aW9uTWF0cml4LCBfdmlld01hdHJpeCApO1xuXG5cdFx0X2ZydXN0dW0uc2V0RnJvbU1hdHJpeCggX3ZpZXdQcm9qZWN0aW9uTWF0cml4ICk7XG5cblx0XHQvL1xuXG5cdFx0X29iamVjdENvdW50ID0gMDtcblxuXHRcdF9yZW5kZXJEYXRhLm9iamVjdHMubGVuZ3RoID0gMDtcblx0XHRfcmVuZGVyRGF0YS5saWdodHMubGVuZ3RoID0gMDtcblxuXHRcdHByb2plY3RPYmplY3QoIHNjZW5lICk7XG5cblx0XHRpZiAoIHNvcnRPYmplY3RzID09PSB0cnVlICkge1xuXG5cdFx0XHRfcmVuZGVyRGF0YS5vYmplY3RzLnNvcnQoIHBhaW50ZXJTb3J0ICk7XG5cblx0XHR9XG5cblx0XHQvL1xuXG5cdFx0dmFyIG9iamVjdHMgPSBfcmVuZGVyRGF0YS5vYmplY3RzO1xuXG5cdFx0Zm9yICggdmFyIG8gPSAwLCBvbCA9IG9iamVjdHMubGVuZ3RoOyBvIDwgb2w7IG8gKysgKSB7XG5cblx0XHRcdHZhciBvYmplY3QgPSBvYmplY3RzWyBvIF0ub2JqZWN0O1xuXHRcdFx0dmFyIGdlb21ldHJ5ID0gb2JqZWN0Lmdlb21ldHJ5O1xuXG5cdFx0XHRyZW5kZXJMaXN0LnNldE9iamVjdCggb2JqZWN0ICk7XG5cblx0XHRcdF9tb2RlbE1hdHJpeCA9IG9iamVjdC5tYXRyaXhXb3JsZDtcblxuXHRcdFx0X3ZlcnRleENvdW50ID0gMDtcblxuXHRcdFx0aWYgKCBvYmplY3QgaW5zdGFuY2VvZiBUSFJFRS5NZXNoICkge1xuXG5cdFx0XHRcdGlmICggZ2VvbWV0cnkgaW5zdGFuY2VvZiBUSFJFRS5CdWZmZXJHZW9tZXRyeSApIHtcblxuXHRcdFx0XHRcdHZhciBhdHRyaWJ1dGVzID0gZ2VvbWV0cnkuYXR0cmlidXRlcztcblx0XHRcdFx0XHR2YXIgZ3JvdXBzID0gZ2VvbWV0cnkuZ3JvdXBzO1xuXG5cdFx0XHRcdFx0aWYgKCBhdHRyaWJ1dGVzLnBvc2l0aW9uID09PSB1bmRlZmluZWQgKSBjb250aW51ZTtcblxuXHRcdFx0XHRcdHZhciBwb3NpdGlvbnMgPSBhdHRyaWJ1dGVzLnBvc2l0aW9uLmFycmF5O1xuXG5cdFx0XHRcdFx0Zm9yICggdmFyIGkgPSAwLCBsID0gcG9zaXRpb25zLmxlbmd0aDsgaSA8IGw7IGkgKz0gMyApIHtcblxuXHRcdFx0XHRcdFx0cmVuZGVyTGlzdC5wdXNoVmVydGV4KCBwb3NpdGlvbnNbIGkgXSwgcG9zaXRpb25zWyBpICsgMSBdLCBwb3NpdGlvbnNbIGkgKyAyIF0gKTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmICggYXR0cmlidXRlcy5ub3JtYWwgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRcdFx0dmFyIG5vcm1hbHMgPSBhdHRyaWJ1dGVzLm5vcm1hbC5hcnJheTtcblxuXHRcdFx0XHRcdFx0Zm9yICggdmFyIGkgPSAwLCBsID0gbm9ybWFscy5sZW5ndGg7IGkgPCBsOyBpICs9IDMgKSB7XG5cblx0XHRcdFx0XHRcdFx0cmVuZGVyTGlzdC5wdXNoTm9ybWFsKCBub3JtYWxzWyBpIF0sIG5vcm1hbHNbIGkgKyAxIF0sIG5vcm1hbHNbIGkgKyAyIF0gKTtcblxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKCBhdHRyaWJ1dGVzLnV2ICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0XHRcdHZhciB1dnMgPSBhdHRyaWJ1dGVzLnV2LmFycmF5O1xuXG5cdFx0XHRcdFx0XHRmb3IgKCB2YXIgaSA9IDAsIGwgPSB1dnMubGVuZ3RoOyBpIDwgbDsgaSArPSAyICkge1xuXG5cdFx0XHRcdFx0XHRcdHJlbmRlckxpc3QucHVzaFV2KCB1dnNbIGkgXSwgdXZzWyBpICsgMSBdICk7XG5cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmICggZ2VvbWV0cnkuaW5kZXggIT09IG51bGwgKSB7XG5cblx0XHRcdFx0XHRcdHZhciBpbmRpY2VzID0gZ2VvbWV0cnkuaW5kZXguYXJyYXk7XG5cblx0XHRcdFx0XHRcdGlmICggZ3JvdXBzLmxlbmd0aCA+IDAgKSB7XG5cblx0XHRcdFx0XHRcdFx0Zm9yICggdmFyIGcgPSAwOyBnIDwgZ3JvdXBzLmxlbmd0aDsgZyArKyApIHtcblxuXHRcdFx0XHRcdFx0XHRcdHZhciBncm91cCA9IGdyb3Vwc1sgZyBdO1xuXG5cdFx0XHRcdFx0XHRcdFx0Zm9yICggdmFyIGkgPSBncm91cC5zdGFydCwgbCA9IGdyb3VwLnN0YXJ0ICsgZ3JvdXAuY291bnQ7IGkgPCBsOyBpICs9IDMgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdHJlbmRlckxpc3QucHVzaFRyaWFuZ2xlKCBpbmRpY2VzWyBpIF0sIGluZGljZXNbIGkgKyAxIF0sIGluZGljZXNbIGkgKyAyIF0gKTtcblxuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0Zm9yICggdmFyIGkgPSAwLCBsID0gaW5kaWNlcy5sZW5ndGg7IGkgPCBsOyBpICs9IDMgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRyZW5kZXJMaXN0LnB1c2hUcmlhbmdsZSggaW5kaWNlc1sgaSBdLCBpbmRpY2VzWyBpICsgMSBdLCBpbmRpY2VzWyBpICsgMiBdICk7XG5cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRmb3IgKCB2YXIgaSA9IDAsIGwgPSBwb3NpdGlvbnMubGVuZ3RoIC8gMzsgaSA8IGw7IGkgKz0gMyApIHtcblxuXHRcdFx0XHRcdFx0XHRyZW5kZXJMaXN0LnB1c2hUcmlhbmdsZSggaSwgaSArIDEsIGkgKyAyICk7XG5cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9IGVsc2UgaWYgKCBnZW9tZXRyeSBpbnN0YW5jZW9mIFRIUkVFLkdlb21ldHJ5ICkge1xuXG5cdFx0XHRcdFx0dmFyIHZlcnRpY2VzID0gZ2VvbWV0cnkudmVydGljZXM7XG5cdFx0XHRcdFx0dmFyIGZhY2VzID0gZ2VvbWV0cnkuZmFjZXM7XG5cdFx0XHRcdFx0dmFyIGZhY2VWZXJ0ZXhVdnMgPSBnZW9tZXRyeS5mYWNlVmVydGV4VXZzWyAwIF07XG5cblx0XHRcdFx0XHRfbm9ybWFsTWF0cml4LmdldE5vcm1hbE1hdHJpeCggX21vZGVsTWF0cml4ICk7XG5cblx0XHRcdFx0XHR2YXIgbWF0ZXJpYWwgPSBvYmplY3QubWF0ZXJpYWw7XG5cblx0XHRcdFx0XHR2YXIgaXNNdWx0aU1hdGVyaWFsID0gQXJyYXkuaXNBcnJheSggbWF0ZXJpYWwgKTtcblxuXHRcdFx0XHRcdGZvciAoIHZhciB2ID0gMCwgdmwgPSB2ZXJ0aWNlcy5sZW5ndGg7IHYgPCB2bDsgdiArKyApIHtcblxuXHRcdFx0XHRcdFx0dmFyIHZlcnRleCA9IHZlcnRpY2VzWyB2IF07XG5cblx0XHRcdFx0XHRcdF92ZWN0b3IzLmNvcHkoIHZlcnRleCApO1xuXG5cdFx0XHRcdFx0XHRpZiAoIG1hdGVyaWFsLm1vcnBoVGFyZ2V0cyA9PT0gdHJ1ZSApIHtcblxuXHRcdFx0XHRcdFx0XHR2YXIgbW9ycGhUYXJnZXRzID0gZ2VvbWV0cnkubW9ycGhUYXJnZXRzO1xuXHRcdFx0XHRcdFx0XHR2YXIgbW9ycGhJbmZsdWVuY2VzID0gb2JqZWN0Lm1vcnBoVGFyZ2V0SW5mbHVlbmNlcztcblxuXHRcdFx0XHRcdFx0XHRmb3IgKCB2YXIgdCA9IDAsIHRsID0gbW9ycGhUYXJnZXRzLmxlbmd0aDsgdCA8IHRsOyB0ICsrICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0dmFyIGluZmx1ZW5jZSA9IG1vcnBoSW5mbHVlbmNlc1sgdCBdO1xuXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCBpbmZsdWVuY2UgPT09IDAgKSBjb250aW51ZTtcblxuXHRcdFx0XHRcdFx0XHRcdHZhciB0YXJnZXQgPSBtb3JwaFRhcmdldHNbIHQgXTtcblx0XHRcdFx0XHRcdFx0XHR2YXIgdGFyZ2V0VmVydGV4ID0gdGFyZ2V0LnZlcnRpY2VzWyB2IF07XG5cblx0XHRcdFx0XHRcdFx0XHRfdmVjdG9yMy54ICs9ICggdGFyZ2V0VmVydGV4LnggLSB2ZXJ0ZXgueCApICogaW5mbHVlbmNlO1xuXHRcdFx0XHRcdFx0XHRcdF92ZWN0b3IzLnkgKz0gKCB0YXJnZXRWZXJ0ZXgueSAtIHZlcnRleC55ICkgKiBpbmZsdWVuY2U7XG5cdFx0XHRcdFx0XHRcdFx0X3ZlY3RvcjMueiArPSAoIHRhcmdldFZlcnRleC56IC0gdmVydGV4LnogKSAqIGluZmx1ZW5jZTtcblxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0cmVuZGVyTGlzdC5wdXNoVmVydGV4KCBfdmVjdG9yMy54LCBfdmVjdG9yMy55LCBfdmVjdG9yMy56ICk7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRmb3IgKCB2YXIgZiA9IDAsIGZsID0gZmFjZXMubGVuZ3RoOyBmIDwgZmw7IGYgKysgKSB7XG5cblx0XHRcdFx0XHRcdHZhciBmYWNlID0gZmFjZXNbIGYgXTtcblxuXHRcdFx0XHRcdFx0bWF0ZXJpYWwgPSBpc011bHRpTWF0ZXJpYWwgPT09IHRydWVcblx0XHRcdFx0XHRcdFx0ID8gb2JqZWN0Lm1hdGVyaWFsWyBmYWNlLm1hdGVyaWFsSW5kZXggXVxuXHRcdFx0XHRcdFx0XHQgOiBvYmplY3QubWF0ZXJpYWw7XG5cblx0XHRcdFx0XHRcdGlmICggbWF0ZXJpYWwgPT09IHVuZGVmaW5lZCApIGNvbnRpbnVlO1xuXG5cdFx0XHRcdFx0XHR2YXIgc2lkZSA9IG1hdGVyaWFsLnNpZGU7XG5cblx0XHRcdFx0XHRcdHZhciB2MSA9IF92ZXJ0ZXhQb29sWyBmYWNlLmEgXTtcblx0XHRcdFx0XHRcdHZhciB2MiA9IF92ZXJ0ZXhQb29sWyBmYWNlLmIgXTtcblx0XHRcdFx0XHRcdHZhciB2MyA9IF92ZXJ0ZXhQb29sWyBmYWNlLmMgXTtcblxuXHRcdFx0XHRcdFx0aWYgKCByZW5kZXJMaXN0LmNoZWNrVHJpYW5nbGVWaXNpYmlsaXR5KCB2MSwgdjIsIHYzICkgPT09IGZhbHNlICkgY29udGludWU7XG5cblx0XHRcdFx0XHRcdHZhciB2aXNpYmxlID0gcmVuZGVyTGlzdC5jaGVja0JhY2tmYWNlQ3VsbGluZyggdjEsIHYyLCB2MyApO1xuXG5cdFx0XHRcdFx0XHRpZiAoIHNpZGUgIT09IFRIUkVFLkRvdWJsZVNpZGUgKSB7XG5cblx0XHRcdFx0XHRcdFx0aWYgKCBzaWRlID09PSBUSFJFRS5Gcm9udFNpZGUgJiYgdmlzaWJsZSA9PT0gZmFsc2UgKSBjb250aW51ZTtcblx0XHRcdFx0XHRcdFx0aWYgKCBzaWRlID09PSBUSFJFRS5CYWNrU2lkZSAmJiB2aXNpYmxlID09PSB0cnVlICkgY29udGludWU7XG5cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0X2ZhY2UgPSBnZXROZXh0RmFjZUluUG9vbCgpO1xuXG5cdFx0XHRcdFx0XHRfZmFjZS5pZCA9IG9iamVjdC5pZDtcblx0XHRcdFx0XHRcdF9mYWNlLnYxLmNvcHkoIHYxICk7XG5cdFx0XHRcdFx0XHRfZmFjZS52Mi5jb3B5KCB2MiApO1xuXHRcdFx0XHRcdFx0X2ZhY2UudjMuY29weSggdjMgKTtcblxuXHRcdFx0XHRcdFx0X2ZhY2Uubm9ybWFsTW9kZWwuY29weSggZmFjZS5ub3JtYWwgKTtcblxuXHRcdFx0XHRcdFx0aWYgKCB2aXNpYmxlID09PSBmYWxzZSAmJiAoIHNpZGUgPT09IFRIUkVFLkJhY2tTaWRlIHx8IHNpZGUgPT09IFRIUkVFLkRvdWJsZVNpZGUgKSApIHtcblxuXHRcdFx0XHRcdFx0XHRfZmFjZS5ub3JtYWxNb2RlbC5uZWdhdGUoKTtcblxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRfZmFjZS5ub3JtYWxNb2RlbC5hcHBseU1hdHJpeDMoIF9ub3JtYWxNYXRyaXggKS5ub3JtYWxpemUoKTtcblxuXHRcdFx0XHRcdFx0dmFyIGZhY2VWZXJ0ZXhOb3JtYWxzID0gZmFjZS52ZXJ0ZXhOb3JtYWxzO1xuXG5cdFx0XHRcdFx0XHRmb3IgKCB2YXIgbiA9IDAsIG5sID0gTWF0aC5taW4oIGZhY2VWZXJ0ZXhOb3JtYWxzLmxlbmd0aCwgMyApOyBuIDwgbmw7IG4gKysgKSB7XG5cblx0XHRcdFx0XHRcdFx0dmFyIG5vcm1hbE1vZGVsID0gX2ZhY2UudmVydGV4Tm9ybWFsc01vZGVsWyBuIF07XG5cdFx0XHRcdFx0XHRcdG5vcm1hbE1vZGVsLmNvcHkoIGZhY2VWZXJ0ZXhOb3JtYWxzWyBuIF0gKTtcblxuXHRcdFx0XHRcdFx0XHRpZiAoIHZpc2libGUgPT09IGZhbHNlICYmICggc2lkZSA9PT0gVEhSRUUuQmFja1NpZGUgfHwgc2lkZSA9PT0gVEhSRUUuRG91YmxlU2lkZSApICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0bm9ybWFsTW9kZWwubmVnYXRlKCk7XG5cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdG5vcm1hbE1vZGVsLmFwcGx5TWF0cml4MyggX25vcm1hbE1hdHJpeCApLm5vcm1hbGl6ZSgpO1xuXG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdF9mYWNlLnZlcnRleE5vcm1hbHNMZW5ndGggPSBmYWNlVmVydGV4Tm9ybWFscy5sZW5ndGg7XG5cblx0XHRcdFx0XHRcdHZhciB2ZXJ0ZXhVdnMgPSBmYWNlVmVydGV4VXZzWyBmIF07XG5cblx0XHRcdFx0XHRcdGlmICggdmVydGV4VXZzICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0XHRcdFx0Zm9yICggdmFyIHUgPSAwOyB1IDwgMzsgdSArKyApIHtcblxuXHRcdFx0XHRcdFx0XHRcdF9mYWNlLnV2c1sgdSBdLmNvcHkoIHZlcnRleFV2c1sgdSBdICk7XG5cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdF9mYWNlLmNvbG9yID0gZmFjZS5jb2xvcjtcblx0XHRcdFx0XHRcdF9mYWNlLm1hdGVyaWFsID0gbWF0ZXJpYWw7XG5cblx0XHRcdFx0XHRcdF9mYWNlLnogPSAoIHYxLnBvc2l0aW9uU2NyZWVuLnogKyB2Mi5wb3NpdGlvblNjcmVlbi56ICsgdjMucG9zaXRpb25TY3JlZW4ueiApIC8gMztcblx0XHRcdFx0XHRcdF9mYWNlLnJlbmRlck9yZGVyID0gb2JqZWN0LnJlbmRlck9yZGVyO1xuXG5cdFx0XHRcdFx0XHRfcmVuZGVyRGF0YS5lbGVtZW50cy5wdXNoKCBfZmFjZSApO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH1cblxuXHRcdFx0fSBlbHNlIGlmICggb2JqZWN0IGluc3RhbmNlb2YgVEhSRUUuTGluZSApIHtcblxuXHRcdFx0XHRfbW9kZWxWaWV3UHJvamVjdGlvbk1hdHJpeC5tdWx0aXBseU1hdHJpY2VzKCBfdmlld1Byb2plY3Rpb25NYXRyaXgsIF9tb2RlbE1hdHJpeCApO1xuXG5cdFx0XHRcdGlmICggZ2VvbWV0cnkgaW5zdGFuY2VvZiBUSFJFRS5CdWZmZXJHZW9tZXRyeSApIHtcblxuXHRcdFx0XHRcdHZhciBhdHRyaWJ1dGVzID0gZ2VvbWV0cnkuYXR0cmlidXRlcztcblxuXHRcdFx0XHRcdGlmICggYXR0cmlidXRlcy5wb3NpdGlvbiAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdFx0XHR2YXIgcG9zaXRpb25zID0gYXR0cmlidXRlcy5wb3NpdGlvbi5hcnJheTtcblxuXHRcdFx0XHRcdFx0Zm9yICggdmFyIGkgPSAwLCBsID0gcG9zaXRpb25zLmxlbmd0aDsgaSA8IGw7IGkgKz0gMyApIHtcblxuXHRcdFx0XHRcdFx0XHRyZW5kZXJMaXN0LnB1c2hWZXJ0ZXgoIHBvc2l0aW9uc1sgaSBdLCBwb3NpdGlvbnNbIGkgKyAxIF0sIHBvc2l0aW9uc1sgaSArIDIgXSApO1xuXG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmICggYXR0cmlidXRlcy5jb2xvciAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdFx0XHRcdHZhciBjb2xvcnMgPSBhdHRyaWJ1dGVzLmNvbG9yLmFycmF5O1xuXG5cdFx0XHRcdFx0XHRcdGZvciAoIHZhciBpID0gMCwgbCA9IGNvbG9ycy5sZW5ndGg7IGkgPCBsOyBpICs9IDMgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRyZW5kZXJMaXN0LnB1c2hDb2xvciggY29sb3JzWyBpIF0sIGNvbG9yc1sgaSArIDEgXSwgY29sb3JzWyBpICsgMiBdICk7XG5cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmICggZ2VvbWV0cnkuaW5kZXggIT09IG51bGwgKSB7XG5cblx0XHRcdFx0XHRcdFx0dmFyIGluZGljZXMgPSBnZW9tZXRyeS5pbmRleC5hcnJheTtcblxuXHRcdFx0XHRcdFx0XHRmb3IgKCB2YXIgaSA9IDAsIGwgPSBpbmRpY2VzLmxlbmd0aDsgaSA8IGw7IGkgKz0gMiApIHtcblxuXHRcdFx0XHRcdFx0XHRcdHJlbmRlckxpc3QucHVzaExpbmUoIGluZGljZXNbIGkgXSwgaW5kaWNlc1sgaSArIDEgXSApO1xuXG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHR2YXIgc3RlcCA9IG9iamVjdCBpbnN0YW5jZW9mIFRIUkVFLkxpbmVTZWdtZW50cyA/IDIgOiAxO1xuXG5cdFx0XHRcdFx0XHRcdGZvciAoIHZhciBpID0gMCwgbCA9ICggcG9zaXRpb25zLmxlbmd0aCAvIDMgKSAtIDE7IGkgPCBsOyBpICs9IHN0ZXAgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRyZW5kZXJMaXN0LnB1c2hMaW5lKCBpLCBpICsgMSApO1xuXG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH0gZWxzZSBpZiAoIGdlb21ldHJ5IGluc3RhbmNlb2YgVEhSRUUuR2VvbWV0cnkgKSB7XG5cblx0XHRcdFx0XHR2YXIgdmVydGljZXMgPSBvYmplY3QuZ2VvbWV0cnkudmVydGljZXM7XG5cblx0XHRcdFx0XHRpZiAoIHZlcnRpY2VzLmxlbmd0aCA9PT0gMCApIGNvbnRpbnVlO1xuXG5cdFx0XHRcdFx0djEgPSBnZXROZXh0VmVydGV4SW5Qb29sKCk7XG5cdFx0XHRcdFx0djEucG9zaXRpb25TY3JlZW4uY29weSggdmVydGljZXNbIDAgXSApLmFwcGx5TWF0cml4NCggX21vZGVsVmlld1Byb2plY3Rpb25NYXRyaXggKTtcblxuXHRcdFx0XHRcdHZhciBzdGVwID0gb2JqZWN0IGluc3RhbmNlb2YgVEhSRUUuTGluZVNlZ21lbnRzID8gMiA6IDE7XG5cblx0XHRcdFx0XHRmb3IgKCB2YXIgdiA9IDEsIHZsID0gdmVydGljZXMubGVuZ3RoOyB2IDwgdmw7IHYgKysgKSB7XG5cblx0XHRcdFx0XHRcdHYxID0gZ2V0TmV4dFZlcnRleEluUG9vbCgpO1xuXHRcdFx0XHRcdFx0djEucG9zaXRpb25TY3JlZW4uY29weSggdmVydGljZXNbIHYgXSApLmFwcGx5TWF0cml4NCggX21vZGVsVmlld1Byb2plY3Rpb25NYXRyaXggKTtcblxuXHRcdFx0XHRcdFx0aWYgKCAoIHYgKyAxICkgJSBzdGVwID4gMCApIGNvbnRpbnVlO1xuXG5cdFx0XHRcdFx0XHR2MiA9IF92ZXJ0ZXhQb29sWyBfdmVydGV4Q291bnQgLSAyIF07XG5cblx0XHRcdFx0XHRcdF9jbGlwcGVkVmVydGV4MVBvc2l0aW9uU2NyZWVuLmNvcHkoIHYxLnBvc2l0aW9uU2NyZWVuICk7XG5cdFx0XHRcdFx0XHRfY2xpcHBlZFZlcnRleDJQb3NpdGlvblNjcmVlbi5jb3B5KCB2Mi5wb3NpdGlvblNjcmVlbiApO1xuXG5cdFx0XHRcdFx0XHRpZiAoIGNsaXBMaW5lKCBfY2xpcHBlZFZlcnRleDFQb3NpdGlvblNjcmVlbiwgX2NsaXBwZWRWZXJ0ZXgyUG9zaXRpb25TY3JlZW4gKSA9PT0gdHJ1ZSApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBQZXJmb3JtIHRoZSBwZXJzcGVjdGl2ZSBkaXZpZGVcblx0XHRcdFx0XHRcdFx0X2NsaXBwZWRWZXJ0ZXgxUG9zaXRpb25TY3JlZW4ubXVsdGlwbHlTY2FsYXIoIDEgLyBfY2xpcHBlZFZlcnRleDFQb3NpdGlvblNjcmVlbi53ICk7XG5cdFx0XHRcdFx0XHRcdF9jbGlwcGVkVmVydGV4MlBvc2l0aW9uU2NyZWVuLm11bHRpcGx5U2NhbGFyKCAxIC8gX2NsaXBwZWRWZXJ0ZXgyUG9zaXRpb25TY3JlZW4udyApO1xuXG5cdFx0XHRcdFx0XHRcdF9saW5lID0gZ2V0TmV4dExpbmVJblBvb2woKTtcblxuXHRcdFx0XHRcdFx0XHRfbGluZS5pZCA9IG9iamVjdC5pZDtcblx0XHRcdFx0XHRcdFx0X2xpbmUudjEucG9zaXRpb25TY3JlZW4uY29weSggX2NsaXBwZWRWZXJ0ZXgxUG9zaXRpb25TY3JlZW4gKTtcblx0XHRcdFx0XHRcdFx0X2xpbmUudjIucG9zaXRpb25TY3JlZW4uY29weSggX2NsaXBwZWRWZXJ0ZXgyUG9zaXRpb25TY3JlZW4gKTtcblxuXHRcdFx0XHRcdFx0XHRfbGluZS56ID0gTWF0aC5tYXgoIF9jbGlwcGVkVmVydGV4MVBvc2l0aW9uU2NyZWVuLnosIF9jbGlwcGVkVmVydGV4MlBvc2l0aW9uU2NyZWVuLnogKTtcblx0XHRcdFx0XHRcdFx0X2xpbmUucmVuZGVyT3JkZXIgPSBvYmplY3QucmVuZGVyT3JkZXI7XG5cblx0XHRcdFx0XHRcdFx0X2xpbmUubWF0ZXJpYWwgPSBvYmplY3QubWF0ZXJpYWw7XG5cblx0XHRcdFx0XHRcdFx0aWYgKCBvYmplY3QubWF0ZXJpYWwudmVydGV4Q29sb3JzID09PSBUSFJFRS5WZXJ0ZXhDb2xvcnMgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRfbGluZS52ZXJ0ZXhDb2xvcnNbIDAgXS5jb3B5KCBvYmplY3QuZ2VvbWV0cnkuY29sb3JzWyB2IF0gKTtcblx0XHRcdFx0XHRcdFx0XHRfbGluZS52ZXJ0ZXhDb2xvcnNbIDEgXS5jb3B5KCBvYmplY3QuZ2VvbWV0cnkuY29sb3JzWyB2IC0gMSBdICk7XG5cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdF9yZW5kZXJEYXRhLmVsZW1lbnRzLnB1c2goIF9saW5lICk7XG5cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9XG5cblx0XHRcdH0gZWxzZSBpZiAoIG9iamVjdCBpbnN0YW5jZW9mIFRIUkVFLlBvaW50cyApIHtcblxuXHRcdFx0XHRfbW9kZWxWaWV3UHJvamVjdGlvbk1hdHJpeC5tdWx0aXBseU1hdHJpY2VzKCBfdmlld1Byb2plY3Rpb25NYXRyaXgsIF9tb2RlbE1hdHJpeCApO1xuXG5cdFx0XHRcdGlmICggZ2VvbWV0cnkgaW5zdGFuY2VvZiBUSFJFRS5HZW9tZXRyeSApIHtcblxuXHRcdFx0XHRcdHZhciB2ZXJ0aWNlcyA9IG9iamVjdC5nZW9tZXRyeS52ZXJ0aWNlcztcblxuXHRcdFx0XHRcdGZvciAoIHZhciB2ID0gMCwgdmwgPSB2ZXJ0aWNlcy5sZW5ndGg7IHYgPCB2bDsgdiArKyApIHtcblxuXHRcdFx0XHRcdFx0dmFyIHZlcnRleCA9IHZlcnRpY2VzWyB2IF07XG5cblx0XHRcdFx0XHRcdF92ZWN0b3I0LnNldCggdmVydGV4LngsIHZlcnRleC55LCB2ZXJ0ZXgueiwgMSApO1xuXHRcdFx0XHRcdFx0X3ZlY3RvcjQuYXBwbHlNYXRyaXg0KCBfbW9kZWxWaWV3UHJvamVjdGlvbk1hdHJpeCApO1xuXG5cdFx0XHRcdFx0XHRwdXNoUG9pbnQoIF92ZWN0b3I0LCBvYmplY3QsIGNhbWVyYSApO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH0gZWxzZSBpZiAoIGdlb21ldHJ5IGluc3RhbmNlb2YgVEhSRUUuQnVmZmVyR2VvbWV0cnkgKSB7XG5cblx0XHRcdFx0XHR2YXIgYXR0cmlidXRlcyA9IGdlb21ldHJ5LmF0dHJpYnV0ZXM7XG5cblx0XHRcdFx0XHRpZiAoIGF0dHJpYnV0ZXMucG9zaXRpb24gIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRcdFx0dmFyIHBvc2l0aW9ucyA9IGF0dHJpYnV0ZXMucG9zaXRpb24uYXJyYXk7XG5cblx0XHRcdFx0XHRcdGZvciAoIHZhciBpID0gMCwgbCA9IHBvc2l0aW9ucy5sZW5ndGg7IGkgPCBsOyBpICs9IDMgKSB7XG5cblx0XHRcdFx0XHRcdFx0X3ZlY3RvcjQuc2V0KCBwb3NpdGlvbnNbIGkgXSwgcG9zaXRpb25zWyBpICsgMSBdLCBwb3NpdGlvbnNbIGkgKyAyIF0sIDEgKTtcblx0XHRcdFx0XHRcdFx0X3ZlY3RvcjQuYXBwbHlNYXRyaXg0KCBfbW9kZWxWaWV3UHJvamVjdGlvbk1hdHJpeCApO1xuXG5cdFx0XHRcdFx0XHRcdHB1c2hQb2ludCggX3ZlY3RvcjQsIG9iamVjdCwgY2FtZXJhICk7XG5cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9XG5cblx0XHRcdH0gZWxzZSBpZiAoIG9iamVjdCBpbnN0YW5jZW9mIFRIUkVFLlNwcml0ZSApIHtcblxuXHRcdFx0XHRfdmVjdG9yNC5zZXQoIF9tb2RlbE1hdHJpeC5lbGVtZW50c1sgMTIgXSwgX21vZGVsTWF0cml4LmVsZW1lbnRzWyAxMyBdLCBfbW9kZWxNYXRyaXguZWxlbWVudHNbIDE0IF0sIDEgKTtcblx0XHRcdFx0X3ZlY3RvcjQuYXBwbHlNYXRyaXg0KCBfdmlld1Byb2plY3Rpb25NYXRyaXggKTtcblxuXHRcdFx0XHRwdXNoUG9pbnQoIF92ZWN0b3I0LCBvYmplY3QsIGNhbWVyYSApO1xuXG5cdFx0XHR9XG5cblx0XHR9XG5cblx0XHRpZiAoIHNvcnRFbGVtZW50cyA9PT0gdHJ1ZSApIHtcblxuXHRcdFx0X3JlbmRlckRhdGEuZWxlbWVudHMuc29ydCggcGFpbnRlclNvcnQgKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiBfcmVuZGVyRGF0YTtcblxuXHR9O1xuXG5cdGZ1bmN0aW9uIHB1c2hQb2ludCggX3ZlY3RvcjQsIG9iamVjdCwgY2FtZXJhICkge1xuXG5cdFx0dmFyIGludlcgPSAxIC8gX3ZlY3RvcjQudztcblxuXHRcdF92ZWN0b3I0LnogKj0gaW52VztcblxuXHRcdGlmICggX3ZlY3RvcjQueiA+PSAtIDEgJiYgX3ZlY3RvcjQueiA8PSAxICkge1xuXG5cdFx0XHRfc3ByaXRlID0gZ2V0TmV4dFNwcml0ZUluUG9vbCgpO1xuXHRcdFx0X3Nwcml0ZS5pZCA9IG9iamVjdC5pZDtcblx0XHRcdF9zcHJpdGUueCA9IF92ZWN0b3I0LnggKiBpbnZXO1xuXHRcdFx0X3Nwcml0ZS55ID0gX3ZlY3RvcjQueSAqIGludlc7XG5cdFx0XHRfc3ByaXRlLnogPSBfdmVjdG9yNC56O1xuXHRcdFx0X3Nwcml0ZS5yZW5kZXJPcmRlciA9IG9iamVjdC5yZW5kZXJPcmRlcjtcblx0XHRcdF9zcHJpdGUub2JqZWN0ID0gb2JqZWN0O1xuXG5cdFx0XHRfc3ByaXRlLnJvdGF0aW9uID0gb2JqZWN0LnJvdGF0aW9uO1xuXG5cdFx0XHRfc3ByaXRlLnNjYWxlLnggPSBvYmplY3Quc2NhbGUueCAqIE1hdGguYWJzKCBfc3ByaXRlLnggLSAoIF92ZWN0b3I0LnggKyBjYW1lcmEucHJvamVjdGlvbk1hdHJpeC5lbGVtZW50c1sgMCBdICkgLyAoIF92ZWN0b3I0LncgKyBjYW1lcmEucHJvamVjdGlvbk1hdHJpeC5lbGVtZW50c1sgMTIgXSApICk7XG5cdFx0XHRfc3ByaXRlLnNjYWxlLnkgPSBvYmplY3Quc2NhbGUueSAqIE1hdGguYWJzKCBfc3ByaXRlLnkgLSAoIF92ZWN0b3I0LnkgKyBjYW1lcmEucHJvamVjdGlvbk1hdHJpeC5lbGVtZW50c1sgNSBdICkgLyAoIF92ZWN0b3I0LncgKyBjYW1lcmEucHJvamVjdGlvbk1hdHJpeC5lbGVtZW50c1sgMTMgXSApICk7XG5cblx0XHRcdF9zcHJpdGUubWF0ZXJpYWwgPSBvYmplY3QubWF0ZXJpYWw7XG5cblx0XHRcdF9yZW5kZXJEYXRhLmVsZW1lbnRzLnB1c2goIF9zcHJpdGUgKTtcblxuXHRcdH1cblxuXHR9XG5cblx0Ly8gUG9vbHNcblxuXHRmdW5jdGlvbiBnZXROZXh0T2JqZWN0SW5Qb29sKCkge1xuXG5cdFx0aWYgKCBfb2JqZWN0Q291bnQgPT09IF9vYmplY3RQb29sTGVuZ3RoICkge1xuXG5cdFx0XHR2YXIgb2JqZWN0ID0gbmV3IFRIUkVFLlJlbmRlcmFibGVPYmplY3QoKTtcblx0XHRcdF9vYmplY3RQb29sLnB1c2goIG9iamVjdCApO1xuXHRcdFx0X29iamVjdFBvb2xMZW5ndGggKys7XG5cdFx0XHRfb2JqZWN0Q291bnQgKys7XG5cdFx0XHRyZXR1cm4gb2JqZWN0O1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIF9vYmplY3RQb29sWyBfb2JqZWN0Q291bnQgKysgXTtcblxuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0TmV4dFZlcnRleEluUG9vbCgpIHtcblxuXHRcdGlmICggX3ZlcnRleENvdW50ID09PSBfdmVydGV4UG9vbExlbmd0aCApIHtcblxuXHRcdFx0dmFyIHZlcnRleCA9IG5ldyBUSFJFRS5SZW5kZXJhYmxlVmVydGV4KCk7XG5cdFx0XHRfdmVydGV4UG9vbC5wdXNoKCB2ZXJ0ZXggKTtcblx0XHRcdF92ZXJ0ZXhQb29sTGVuZ3RoICsrO1xuXHRcdFx0X3ZlcnRleENvdW50ICsrO1xuXHRcdFx0cmV0dXJuIHZlcnRleDtcblxuXHRcdH1cblxuXHRcdHJldHVybiBfdmVydGV4UG9vbFsgX3ZlcnRleENvdW50ICsrIF07XG5cblx0fVxuXG5cdGZ1bmN0aW9uIGdldE5leHRGYWNlSW5Qb29sKCkge1xuXG5cdFx0aWYgKCBfZmFjZUNvdW50ID09PSBfZmFjZVBvb2xMZW5ndGggKSB7XG5cblx0XHRcdHZhciBmYWNlID0gbmV3IFRIUkVFLlJlbmRlcmFibGVGYWNlKCk7XG5cdFx0XHRfZmFjZVBvb2wucHVzaCggZmFjZSApO1xuXHRcdFx0X2ZhY2VQb29sTGVuZ3RoICsrO1xuXHRcdFx0X2ZhY2VDb3VudCArKztcblx0XHRcdHJldHVybiBmYWNlO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIF9mYWNlUG9vbFsgX2ZhY2VDb3VudCArKyBdO1xuXG5cblx0fVxuXG5cdGZ1bmN0aW9uIGdldE5leHRMaW5lSW5Qb29sKCkge1xuXG5cdFx0aWYgKCBfbGluZUNvdW50ID09PSBfbGluZVBvb2xMZW5ndGggKSB7XG5cblx0XHRcdHZhciBsaW5lID0gbmV3IFRIUkVFLlJlbmRlcmFibGVMaW5lKCk7XG5cdFx0XHRfbGluZVBvb2wucHVzaCggbGluZSApO1xuXHRcdFx0X2xpbmVQb29sTGVuZ3RoICsrO1xuXHRcdFx0X2xpbmVDb3VudCArKztcblx0XHRcdHJldHVybiBsaW5lO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIF9saW5lUG9vbFsgX2xpbmVDb3VudCArKyBdO1xuXG5cdH1cblxuXHRmdW5jdGlvbiBnZXROZXh0U3ByaXRlSW5Qb29sKCkge1xuXG5cdFx0aWYgKCBfc3ByaXRlQ291bnQgPT09IF9zcHJpdGVQb29sTGVuZ3RoICkge1xuXG5cdFx0XHR2YXIgc3ByaXRlID0gbmV3IFRIUkVFLlJlbmRlcmFibGVTcHJpdGUoKTtcblx0XHRcdF9zcHJpdGVQb29sLnB1c2goIHNwcml0ZSApO1xuXHRcdFx0X3Nwcml0ZVBvb2xMZW5ndGggKys7XG5cdFx0XHRfc3ByaXRlQ291bnQgKys7XG5cdFx0XHRyZXR1cm4gc3ByaXRlO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIF9zcHJpdGVQb29sWyBfc3ByaXRlQ291bnQgKysgXTtcblxuXHR9XG5cblx0Ly9cblxuXHRmdW5jdGlvbiBwYWludGVyU29ydCggYSwgYiApIHtcblxuXHRcdGlmICggYS5yZW5kZXJPcmRlciAhPT0gYi5yZW5kZXJPcmRlciApIHtcblxuXHRcdFx0cmV0dXJuIGEucmVuZGVyT3JkZXIgLSBiLnJlbmRlck9yZGVyO1xuXG5cdFx0fSBlbHNlIGlmICggYS56ICE9PSBiLnogKSB7XG5cblx0XHRcdHJldHVybiBiLnogLSBhLno7XG5cblx0XHR9IGVsc2UgaWYgKCBhLmlkICE9PSBiLmlkICkge1xuXG5cdFx0XHRyZXR1cm4gYS5pZCAtIGIuaWQ7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHRyZXR1cm4gMDtcblxuXHRcdH1cblxuXHR9XG5cblx0ZnVuY3Rpb24gY2xpcExpbmUoIHMxLCBzMiApIHtcblxuXHRcdHZhciBhbHBoYTEgPSAwLCBhbHBoYTIgPSAxLFxuXG5cdFx0Ly8gQ2FsY3VsYXRlIHRoZSBib3VuZGFyeSBjb29yZGluYXRlIG9mIGVhY2ggdmVydGV4IGZvciB0aGUgbmVhciBhbmQgZmFyIGNsaXAgcGxhbmVzLFxuXHRcdC8vIFogPSAtMSBhbmQgWiA9ICsxLCByZXNwZWN0aXZlbHkuXG5cblx0XHRcdGJjMW5lYXIgPSBzMS56ICsgczEudyxcblx0XHRcdGJjMm5lYXIgPSBzMi56ICsgczIudyxcblx0XHRcdGJjMWZhciA9IC0gczEueiArIHMxLncsXG5cdFx0XHRiYzJmYXIgPSAtIHMyLnogKyBzMi53O1xuXG5cdFx0aWYgKCBiYzFuZWFyID49IDAgJiYgYmMybmVhciA+PSAwICYmIGJjMWZhciA+PSAwICYmIGJjMmZhciA+PSAwICkge1xuXG5cdFx0XHQvLyBCb3RoIHZlcnRpY2VzIGxpZSBlbnRpcmVseSB3aXRoaW4gYWxsIGNsaXAgcGxhbmVzLlxuXHRcdFx0cmV0dXJuIHRydWU7XG5cblx0XHR9IGVsc2UgaWYgKCAoIGJjMW5lYXIgPCAwICYmIGJjMm5lYXIgPCAwICkgfHwgKCBiYzFmYXIgPCAwICYmIGJjMmZhciA8IDAgKSApIHtcblxuXHRcdFx0Ly8gQm90aCB2ZXJ0aWNlcyBsaWUgZW50aXJlbHkgb3V0c2lkZSBvbmUgb2YgdGhlIGNsaXAgcGxhbmVzLlxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gVGhlIGxpbmUgc2VnbWVudCBzcGFucyBhdCBsZWFzdCBvbmUgY2xpcCBwbGFuZS5cblxuXHRcdFx0aWYgKCBiYzFuZWFyIDwgMCApIHtcblxuXHRcdFx0XHQvLyB2MSBsaWVzIG91dHNpZGUgdGhlIG5lYXIgcGxhbmUsIHYyIGluc2lkZVxuXHRcdFx0XHRhbHBoYTEgPSBNYXRoLm1heCggYWxwaGExLCBiYzFuZWFyIC8gKCBiYzFuZWFyIC0gYmMybmVhciApICk7XG5cblx0XHRcdH0gZWxzZSBpZiAoIGJjMm5lYXIgPCAwICkge1xuXG5cdFx0XHRcdC8vIHYyIGxpZXMgb3V0c2lkZSB0aGUgbmVhciBwbGFuZSwgdjEgaW5zaWRlXG5cdFx0XHRcdGFscGhhMiA9IE1hdGgubWluKCBhbHBoYTIsIGJjMW5lYXIgLyAoIGJjMW5lYXIgLSBiYzJuZWFyICkgKTtcblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGJjMWZhciA8IDAgKSB7XG5cblx0XHRcdFx0Ly8gdjEgbGllcyBvdXRzaWRlIHRoZSBmYXIgcGxhbmUsIHYyIGluc2lkZVxuXHRcdFx0XHRhbHBoYTEgPSBNYXRoLm1heCggYWxwaGExLCBiYzFmYXIgLyAoIGJjMWZhciAtIGJjMmZhciApICk7XG5cblx0XHRcdH0gZWxzZSBpZiAoIGJjMmZhciA8IDAgKSB7XG5cblx0XHRcdFx0Ly8gdjIgbGllcyBvdXRzaWRlIHRoZSBmYXIgcGxhbmUsIHYyIGluc2lkZVxuXHRcdFx0XHRhbHBoYTIgPSBNYXRoLm1pbiggYWxwaGEyLCBiYzFmYXIgLyAoIGJjMWZhciAtIGJjMmZhciApICk7XG5cblx0XHRcdH1cblxuXHRcdFx0aWYgKCBhbHBoYTIgPCBhbHBoYTEgKSB7XG5cblx0XHRcdFx0Ly8gVGhlIGxpbmUgc2VnbWVudCBzcGFucyB0d28gYm91bmRhcmllcywgYnV0IGlzIG91dHNpZGUgYm90aCBvZiB0aGVtLlxuXHRcdFx0XHQvLyAoVGhpcyBjYW4ndCBoYXBwZW4gd2hlbiB3ZSdyZSBvbmx5IGNsaXBwaW5nIGFnYWluc3QganVzdCBuZWFyL2ZhciBidXQgZ29vZFxuXHRcdFx0XHQvLyAgdG8gbGVhdmUgdGhlIGNoZWNrIGhlcmUgZm9yIGZ1dHVyZSB1c2FnZSBpZiBvdGhlciBjbGlwIHBsYW5lcyBhcmUgYWRkZWQuKVxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gVXBkYXRlIHRoZSBzMSBhbmQgczIgdmVydGljZXMgdG8gbWF0Y2ggdGhlIGNsaXBwZWQgbGluZSBzZWdtZW50LlxuXHRcdFx0XHRzMS5sZXJwKCBzMiwgYWxwaGExICk7XG5cdFx0XHRcdHMyLmxlcnAoIHMxLCAxIC0gYWxwaGEyICk7XG5cblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHR9XG5cbn07XG4iXX0= 1 + "use strict";var bgColor=16777215;THREE.SpriteCanvasMaterial=function(e){THREE.Material.call(this),this.type="SpriteCanvasMaterial",this.color=new THREE.Color(16777215),this.program=function(){},this.setValues(e)},THREE.SpriteCanvasMaterial.prototype=Object.create(THREE.Material.prototype),THREE.SpriteCanvasMaterial.prototype.constructor=THREE.SpriteCanvasMaterial,THREE.SpriteCanvasMaterial.prototype.isSpriteCanvasMaterial=!0,THREE.SpriteCanvasMaterial.prototype.clone=function(){var e=new THREE.SpriteCanvasMaterial;return e.copy(this),e.color.copy(this.color),e.program=this.program,e},THREE.CanvasRenderer=function(e){console.log("THREE.CanvasRenderer",THREE.REVISION),e=e||{};var s,l,h,c,p,E,u,m,v,y,x,R,T,g,S,H,w,M,C,b=this,d=new THREE.Projector,i=void 0!==e.canvas?e.canvas:document.createElement("canvas"),f=i.width,z=i.height,V=Math.floor(f/2),j=Math.floor(z/2),L=0,O=0,B=f,P=z,o=1,W=i.getContext("2d",{alpha:!0===e.alpha}),t=new THREE.Color(bgColor),n=!0===e.alpha?0:1,a=1,N=0,k=null,A=null,F=null,D=null,G=null,r=[],I=new THREE.Color,U=new THREE.Color,q=new THREE.Color,J=new THREE.Color,K={},Q=new THREE.Box2,X=new THREE.Box2,Y=new THREE.Box2,Z=new THREE.Color,$=new THREE.Color,_=new THREE.Color,ee=new THREE.Vector3,re=new THREE.Vector3,te=new THREE.Vector3,ie=new THREE.Matrix3;function oe(e,r,t){de(t.opacity),fe(t.blending);var i=r.scale.x*V,o=r.scale.y*j,n=Math.sqrt(i*i+o*o);if(Y.min.set(e.x-n,e.y-n),Y.max.set(e.x+n,e.y+n),t.isSpriteMaterial){var a=t.map;if(null!==a){var s=K[a.id];if(void 0!==s&&s.version===a.version||(s=ce(a),K[a.id]=s),void 0!==s.canvas){ye(s.canvas);var l=a.image,c=l.width*a.offset.x,p=l.height*a.offset.y,E=l.width*a.repeat.x,d=l.height*a.repeat.y,f=i/E,h=o/d;W.save(),W.translate(e.x,e.y),0!==t.rotation&&W.rotate(t.rotation),W.translate(-i/2,-o/2),W.scale(f,h),W.translate(-c,-p),W.fillRect(c,p,E,d),W.restore()}}else ye(t.color.getStyle()),W.save(),W.translate(e.x,e.y),0!==t.rotation&&W.rotate(t.rotation),W.scale(i,-o),W.fillRect(-.5,-.5,1,1),W.restore()}else t.isSpriteCanvasMaterial?(ve(t.color.getStyle()),ye(t.color.getStyle()),W.save(),W.translate(e.x,e.y),0!==t.rotation&&W.rotate(t.rotation),W.scale(i,o),t.program(W),W.restore()):t.isPointsMaterial&&(ye(t.color.getStyle()),W.save(),W.translate(e.x,e.y),0!==t.rotation&&W.rotate(t.rotation),W.scale(i*t.size,-o*t.size),W.fillRect(-.5,-.5,1,1),W.restore())}function ne(e,r,t,i){if(de(i.opacity),fe(i.blending),W.beginPath(),W.moveTo(e.positionScreen.x,e.positionScreen.y),W.lineTo(r.positionScreen.x,r.positionScreen.y),i.isLineBasicMaterial){if(he(i.linewidth),ue(i.linecap),me(i.linejoin),i.vertexColors!==THREE.VertexColors)ve(i.color.getStyle());else{var o=t.vertexColors[0].getStyle(),n=t.vertexColors[1].getStyle();if(o===n)ve(o);else{try{var a=W.createLinearGradient(e.positionScreen.x,e.positionScreen.y,r.positionScreen.x,r.positionScreen.y);a.addColorStop(0,o),a.addColorStop(1,n)}catch(e){a=o}ve(a)}}i.isLineDashedMaterial&&xe([i.dashSize,i.gapSize]),W.stroke(),Y.expandByScalar(2*i.linewidth),i.isLineDashedMaterial&&xe([])}}function ae(e,r,t,i,o,n,a,s){var l,c,p,E,d,f;if(b.info.render.vertices+=3,b.info.render.faces++,de(s.opacity),fe(s.blending),u=e.positionScreen.x,m=e.positionScreen.y,v=r.positionScreen.x,y=r.positionScreen.y,x=t.positionScreen.x,R=t.positionScreen.y,l=u,c=m,p=v,E=y,d=x,f=R,W.beginPath(),W.moveTo(l,c),W.lineTo(p,E),W.lineTo(d,f),W.closePath(),(s.isMeshLambertMaterial||s.isMeshPhongMaterial||s.isMeshStandardMaterial)&&null===s.map)U.copy(s.color),q.copy(s.emissive),s.vertexColors===THREE.FaceColors&&U.multiply(a.color),I.copy(Z),re.copy(e.positionWorld).add(r.positionWorld).add(t.positionWorld).divideScalar(3),function(e,r,t){for(var i=0,o=h.length;i<o;i++){var n=h[i];if(J.copy(n.color),n.isDirectionalLight){var a=ee.setFromMatrixPosition(n.matrixWorld).normalize();if((s=r.dot(a))<=0)continue;s*=n.intensity,t.add(J.multiplyScalar(s))}else if(n.isPointLight){var s;if(a=ee.setFromMatrixPosition(n.matrixWorld),(s=r.dot(ee.subVectors(a,e).normalize()))<=0)continue;if(0==(s*=0==n.distance?1:1-Math.min(e.distanceTo(a)/n.distance,1)))continue;s*=n.intensity,t.add(J.multiplyScalar(s))}}}(re,a.normalModel,I),I.multiply(U).add(q),!0===s.wireframe?se(I,s.wireframeLinewidth,s.wireframeLinecap,s.wireframeLinejoin):le(I);else if(s.isMeshBasicMaterial||s.isMeshLambertMaterial||s.isMeshPhongMaterial||s.isMeshStandardMaterial){if(null!==s.map)s.map.mapping===THREE.UVMapping&&(T=a.uvs,pe(u,m,v,y,x,R,T[i].x,T[i].y,T[o].x,T[o].y,T[n].x,T[n].y,s.map));else null!==s.envMap?s.envMap.mapping===THREE.SphericalReflectionMapping&&(te.copy(a.vertexNormalsModel[i]).applyMatrix3(ie),g=.5*te.x+.5,S=.5*te.y+.5,te.copy(a.vertexNormalsModel[o]).applyMatrix3(ie),H=.5*te.x+.5,w=.5*te.y+.5,te.copy(a.vertexNormalsModel[n]).applyMatrix3(ie),M=.5*te.x+.5,C=.5*te.y+.5,pe(u,m,v,y,x,R,g,S,H,w,M,C,s.envMap)):(I.copy(s.color),s.vertexColors===THREE.FaceColors&&I.multiply(a.color),!0===s.wireframe?se(I,s.wireframeLinewidth,s.wireframeLinecap,s.wireframeLinejoin):le(I))}else s.isMeshNormalMaterial?(te.copy(a.normalModel).applyMatrix3(ie),I.setRGB(te.x,te.y,te.z).multiplyScalar(.5).addScalar(.5)):I.setRGB(1,1,1),!0===s.wireframe?se(I,s.wireframeLinewidth,s.wireframeLinecap,s.wireframeLinejoin):le(I)}function se(e,r,t,i){he(r),ue(t),me(i),ve(e.getStyle()),W.stroke(),Y.expandByScalar(2*r)}function le(e){ye(e.getStyle()),W.fill()}function ce(e){if(0===e.version||e instanceof THREE.CompressedTexture||e instanceof THREE.DataTexture)return{canvas:void 0,version:e.version};var r=e.image;if(!1===r.complete)return{canvas:void 0,version:0};var t=e.wrapS===THREE.RepeatWrapping||e.wrapS===THREE.MirroredRepeatWrapping,i=e.wrapT===THREE.RepeatWrapping||e.wrapT===THREE.MirroredRepeatWrapping,o=e.wrapS===THREE.MirroredRepeatWrapping,n=e.wrapT===THREE.MirroredRepeatWrapping,a=document.createElement("canvas");a.width=r.width*(o?2:1),a.height=r.height*(n?2:1);var s=a.getContext("2d");s.setTransform(1,0,0,-1,0,r.height),s.drawImage(r,0,0),!0===o&&(s.setTransform(-1,0,0,-1,r.width,r.height),s.drawImage(r,-r.width,0)),!0===n&&(s.setTransform(1,0,0,1,0,0),s.drawImage(r,0,r.height)),!0===o&&!0===n&&(s.setTransform(-1,0,0,1,r.width,0),s.drawImage(r,-r.width,r.height));var l="no-repeat";!0===t&&!0===i?l="repeat":!0===t?l="repeat-x":!0===i&&(l="repeat-y");var c=W.createPattern(a,l);return e.onUpdate&&e.onUpdate(e),{canvas:c,version:e.version}}function pe(e,r,t,i,o,n,a,s,l,c,p,E,d){var f=K[d.id];if(void 0!==f&&f.version===d.version||(f=ce(d),K[d.id]=f),void 0===f.canvas)return ye("rgba( 0, 0, 0, 1)"),void W.fill();ye(f.canvas);var h,u,m,v,y,x,R,T,g=d.offset.x/d.repeat.x,S=d.offset.y/d.repeat.y,H=d.image.width*d.repeat.x,w=d.image.height*d.repeat.y;l=(l+g)*H,c=(c+S)*w,p=(p+g)*H,E=(E+S)*w,t-=e,i-=r,o-=e,n-=r,0!==(R=(l-=a=(a+g)*H)*(E-=s=(s+S)*w)-(p-=a)*(c-=s))&&(y=e-(h=(E*t-c*o)*(T=1/R))*a-(m=(l*o-p*t)*T)*s,x=r-(u=(E*i-c*n)*T)*a-(v=(l*n-p*i)*T)*s,W.save(),W.transform(h,u,m,v,y,x),W.fill(),W.restore())}function Ee(e,r,t){var i,o=r.x-e.x,n=r.y-e.y,a=o*o+n*n;0!==a&&(o*=i=t/Math.sqrt(a),n*=i,r.x+=o,r.y+=n,e.x-=o,e.y-=n)}function de(e){a!==e&&(W.globalAlpha=e,a=e)}function fe(e){N!==e&&(e===THREE.NormalBlending?W.globalCompositeOperation="source-over":e===THREE.AdditiveBlending?W.globalCompositeOperation="lighter":e===THREE.SubtractiveBlending?W.globalCompositeOperation="darker":e===THREE.MultiplyBlending&&(W.globalCompositeOperation="multiply"),N=e)}function he(e){F!==e&&(W.lineWidth=e,F=e)}function ue(e){D!==e&&(W.lineCap=e,D=e)}function me(e){G!==e&&(W.lineJoin=e,G=e)}function ve(e){k!==e&&(W.strokeStyle=e,k=e)}function ye(e){A!==e&&(W.fillStyle=e,A=e)}function xe(e){r.length!==e.length&&(W.setLineDash(e),r=e)}void 0===W.setLineDash&&(W.setLineDash=function(){}),this.domElement=i,this.autoClear=!0,this.sortObjects=!0,this.sortElements=!0,this.info={render:{vertices:0,faces:0}},this.getContext=function(){return W},this.getContextAttributes=function(){return W.getContextAttributes()},this.getPixelRatio=function(){return o},this.setPixelRatio=function(e){void 0!==e&&(o=e)},this.setSize=function(e,r,t){f=e*o,z=r*o,i.width=f,i.height=z,V=Math.floor(f/2),j=Math.floor(z/2),!1!==t&&(i.style.width=e+"px",i.style.height=r+"px"),Q.min.set(-V,-j),Q.max.set(V,j),X.min.set(-V,-j),X.max.set(V,j),a=1,N=0,G=D=F=A=k=null,this.setViewport(0,0,e,r)},this.setViewport=function(e,r,t,i){L=e*o,O=r*o,B=t*o,P=i*o},this.setScissor=function(){},this.setScissorTest=function(){},this.setClearColor=function(e,r){t.set(e),n=void 0!==r?r:1,X.min.set(-V,-j),X.max.set(V,j)},this.setClearColorHex=function(e,r){console.warn("THREE.CanvasRenderer: .setClearColorHex() is being removed. Use .setClearColor() instead."),this.setClearColor(e,r)},this.getClearColor=function(){return t},this.getClearAlpha=function(){return n},this.getMaxAnisotropy=function(){return 0},this.clear=function(){!1===X.isEmpty()&&(X.intersect(Q),X.expandByScalar(2),X.min.x=X.min.x+V,X.min.y=-X.min.y+j,X.max.x=X.max.x+V,X.max.y=-X.max.y+j,n<1&&W.clearRect(0|X.min.x,0|X.max.y,X.max.x-X.min.x|0,X.min.y-X.max.y|0),0<n&&(de(1),fe(THREE.NormalBlending),ye("rgba("+Math.floor(255*t.r)+","+Math.floor(255*t.g)+","+Math.floor(255*t.b)+","+n+")"),W.fillRect(0|X.min.x,0|X.max.y,X.max.x-X.min.x|0,X.min.y-X.max.y|0)),X.makeEmpty())},this.clearColor=function(){},this.clearDepth=function(){},this.clearStencil=function(){},this.render=function(e,r){if(void 0!==r.isCamera){var t=e.background;t&&t.isColor?(de(1),fe(THREE.NormalBlending),ye(t.getStyle()),W.fillRect(0,0,f,z)):!0===this.autoClear&&this.clear(),b.info.render.vertices=0,b.info.render.faces=0,W.setTransform(B/f,0,0,-P/z,L,z-O),W.translate(V,j),s=d.projectScene(e,r,this.sortObjects,this.sortElements),l=s.elements,h=s.lights,ie.getNormalMatrix(r.matrixWorldInverse),function(){Z.setRGB(0,0,0),$.setRGB(0,0,0),_.setRGB(0,0,0);for(var e=0,r=h.length;e<r;e++){var t=h[e],i=t.color;t.isAmbientLight?Z.add(i):t.isDirectionalLight?$.add(i):t.isPointLight&&_.add(i)}}();for(var i=0,o=l.length;i<o;i++){var n=l[i],a=n.material;if(void 0!==a&&0!==a.opacity){if(Y.makeEmpty(),n instanceof THREE.RenderableSprite)(c=n).x*=V,c.y*=j,oe(c,n,a);else if(n instanceof THREE.RenderableLine)c=n.v1,p=n.v2,c.positionScreen.x*=V,c.positionScreen.y*=j,p.positionScreen.x*=V,p.positionScreen.y*=j,Y.setFromPoints([c.positionScreen,p.positionScreen]),!0===Q.intersectsBox(Y)&&ne(c,p,n,a);else if(n instanceof THREE.RenderableFace){if(c=n.v1,p=n.v2,E=n.v3,c.positionScreen.z<-1||1<c.positionScreen.z)continue;if(p.positionScreen.z<-1||1<p.positionScreen.z)continue;if(E.positionScreen.z<-1||1<E.positionScreen.z)continue;c.positionScreen.x*=V,c.positionScreen.y*=j,p.positionScreen.x*=V,p.positionScreen.y*=j,E.positionScreen.x*=V,E.positionScreen.y*=j,0<a.overdraw&&(Ee(c.positionScreen,p.positionScreen,a.overdraw),Ee(p.positionScreen,E.positionScreen,a.overdraw),Ee(E.positionScreen,c.positionScreen,a.overdraw)),Y.setFromPoints([c.positionScreen,p.positionScreen,E.positionScreen]),!0===Q.intersectsBox(Y)&&ae(c,p,E,0,1,2,n,a)}X.union(Y)}}W.setTransform(1,0,0,1,0,0)}else console.error("THREE.CanvasRenderer.render: camera is not an instance of THREE.Camera.")}},THREE.RenderableObject=function(){this.id=0,this.object=null,this.z=0,this.renderOrder=0},THREE.RenderableFace=function(){this.id=0,this.v1=new THREE.RenderableVertex,this.v2=new THREE.RenderableVertex,this.v3=new THREE.RenderableVertex,this.normalModel=new THREE.Vector3,this.vertexNormalsModel=[new THREE.Vector3,new THREE.Vector3,new THREE.Vector3],this.vertexNormalsLength=0,this.color=new THREE.Color,this.material=null,this.uvs=[new THREE.Vector2,new THREE.Vector2,new THREE.Vector2],this.z=0,this.renderOrder=0},THREE.RenderableVertex=function(){this.position=new THREE.Vector3,this.positionWorld=new THREE.Vector3,this.positionScreen=new THREE.Vector4,this.visible=!0},THREE.RenderableVertex.prototype.copy=function(e){this.positionWorld.copy(e.positionWorld),this.positionScreen.copy(e.positionScreen)},THREE.RenderableLine=function(){this.id=0,this.v1=new THREE.RenderableVertex,this.v2=new THREE.RenderableVertex,this.vertexColors=[new THREE.Color,new THREE.Color],this.material=null,this.z=0,this.renderOrder=0},THREE.RenderableSprite=function(){this.id=0,this.object=null,this.x=0,this.y=0,this.z=0,this.rotation=0,this.scale=new THREE.Vector2,this.material=null,this.renderOrder=0},THREE.Projector=function(){var r,X,n,Y,Z,$,_,ee,o,re,te,t=[],i=0,ie=[],a=0,s=[],l=0,c=[],p=0,E=[],d=0,oe={objects:[],lights:[],elements:[]},ne=new THREE.Vector3,ae=new THREE.Vector4,u=new THREE.Box3(new THREE.Vector3(-1,-1,-1),new THREE.Vector3(1,1,1)),m=new THREE.Box3,v=new Array(3),se=new THREE.Matrix4,le=new THREE.Matrix4,ce=new THREE.Matrix4,pe=new THREE.Matrix3,Ee=new THREE.Frustum,de=new THREE.Vector4,fe=new THREE.Vector4;this.projectVector=function(e,r){console.warn("THREE.Projector: .projectVector() is now vector.project()."),e.project(r)},this.unprojectVector=function(e,r){console.warn("THREE.Projector: .unprojectVector() is now vector.unproject()."),e.unproject(r)},this.pickingRay=function(){console.error("THREE.Projector: .pickingRay() is now raycaster.setFromCamera().")};var he=new function(){var l=[],o=[],c=[],p=null,E=null,d=new THREE.Matrix3;function i(e){var r=e.position,t=e.positionWorld,i=e.positionScreen;t.copy(r).applyMatrix4(te),i.copy(t).applyMatrix4(le);var o=1/i.w;i.x*=o,i.y*=o,i.z*=o,e.visible=-1<=i.x&&i.x<=1&&-1<=i.y&&i.y<=1&&-1<=i.z&&i.z<=1}function f(e,r,t){return!0===e.visible||!0===r.visible||!0===t.visible||(v[0]=e.positionScreen,v[1]=r.positionScreen,v[2]=t.positionScreen,u.intersectsBox(m.setFromPoints(v)))}function h(e,r,t){return(t.positionScreen.x-e.positionScreen.x)*(r.positionScreen.y-e.positionScreen.y)-(t.positionScreen.y-e.positionScreen.y)*(r.positionScreen.x-e.positionScreen.x)<0}return{setObject:function(e){E=(p=e).material,d.getNormalMatrix(p.matrixWorld),l.length=0,o.length=0,c.length=0},projectVertex:i,checkTriangleVisibility:f,checkBackfaceCulling:h,pushVertex:function(e,r,t){(n=ve()).position.set(e,r,t),i(n)},pushNormal:function(e,r,t){l.push(e,r,t)},pushColor:function(e,r,t){o.push(e,r,t)},pushUv:function(e,r){c.push(e,r)},pushLine:function(e,r){var t=ie[e],i=ie[r];t.positionScreen.copy(t.position).applyMatrix4(ce),i.positionScreen.copy(i.position).applyMatrix4(ce),!0===Te(t.positionScreen,i.positionScreen)&&(t.positionScreen.multiplyScalar(1/t.positionScreen.w),i.positionScreen.multiplyScalar(1/i.positionScreen.w),(_=xe()).id=p.id,_.v1.copy(t),_.v2.copy(i),_.z=Math.max(t.positionScreen.z,i.positionScreen.z),_.renderOrder=p.renderOrder,_.material=p.material,p.material.vertexColors===THREE.VertexColors&&(_.vertexColors[0].fromArray(o,3*e),_.vertexColors[1].fromArray(o,3*r)),oe.elements.push(_))},pushTriangle:function(e,r,t){var i=ie[e],o=ie[r],n=ie[t];if(!1!==f(i,o,n)&&(E.side===THREE.DoubleSide||!0===h(i,o,n))){(Z=ye()).id=p.id,Z.v1.copy(i),Z.v2.copy(o),Z.v3.copy(n),Z.z=(i.positionScreen.z+o.positionScreen.z+n.positionScreen.z)/3,Z.renderOrder=p.renderOrder,Z.normalModel.fromArray(l,3*e),Z.normalModel.applyMatrix3(d).normalize();for(var a=0;a<3;a++){var s=Z.vertexNormalsModel[a];s.fromArray(l,3*arguments[a]),s.applyMatrix3(d).normalize(),Z.uvs[a].fromArray(c,2*arguments[a])}Z.vertexNormalsLength=3,Z.material=p.material,oe.elements.push(Z)}}}};function ue(e){(r=function(){if(X!==i)return t[X++];var e=new THREE.RenderableObject;return t.push(e),i++,X++,e}()).id=e.id,r.object=e,ne.setFromMatrixPosition(e.matrixWorld),ne.applyMatrix4(le),r.z=ne.z,r.renderOrder=e.renderOrder,oe.objects.push(r)}function me(e,r,t){var i=1/e.w;e.z*=i,-1<=e.z&&e.z<=1&&((o=function(){if(re!==d)return E[re++];var e=new THREE.RenderableSprite;return E.push(e),d++,re++,e}()).id=r.id,o.x=e.x*i,o.y=e.y*i,o.z=e.z,o.renderOrder=r.renderOrder,o.object=r,o.rotation=r.rotation,o.scale.x=r.scale.x*Math.abs(o.x-(e.x+t.projectionMatrix.elements[0])/(e.w+t.projectionMatrix.elements[12])),o.scale.y=r.scale.y*Math.abs(o.y-(e.y+t.projectionMatrix.elements[5])/(e.w+t.projectionMatrix.elements[13])),o.material=r.material,oe.elements.push(o))}function ve(){if(Y!==a)return ie[Y++];var e=new THREE.RenderableVertex;return ie.push(e),a++,Y++,e}function ye(){if($!==l)return s[$++];var e=new THREE.RenderableFace;return s.push(e),l++,$++,e}function xe(){if(ee!==p)return c[ee++];var e=new THREE.RenderableLine;return c.push(e),p++,ee++,e}function Re(e,r){return e.renderOrder!==r.renderOrder?e.renderOrder-r.renderOrder:e.z!==r.z?r.z-e.z:e.id!==r.id?e.id-r.id:0}function Te(e,r){var t=0,i=1,o=e.z+e.w,n=r.z+r.w,a=-e.z+e.w,s=-r.z+r.w;return 0<=o&&0<=n&&0<=a&&0<=s||!(o<0&&n<0||a<0&&s<0)&&(o<0?t=Math.max(t,o/(o-n)):n<0&&(i=Math.min(i,o/(o-n))),a<0?t=Math.max(t,a/(a-s)):s<0&&(i=Math.min(i,a/(a-s))),!(i<t)&&(e.lerp(r,t),r.lerp(e,1-i),!0))}this.projectScene=function(e,r,t,i){re=ee=$=0,!(oe.elements.length=0)===e.autoUpdate&&e.updateMatrixWorld(),null===r.parent&&r.updateMatrixWorld(),se.copy(r.matrixWorldInverse),le.multiplyMatrices(r.projectionMatrix,se),Ee.setFromMatrix(le),X=0,oe.objects.length=0,oe.lights.length=0,function e(r){if(!1!==r.visible){if(r instanceof THREE.Light)oe.lights.push(r);else if(r instanceof THREE.Mesh||r instanceof THREE.Line||r instanceof THREE.Points){if(!1===r.material.visible)return;if(!0===r.frustumCulled&&!1===Ee.intersectsObject(r))return;ue(r)}else if(r instanceof THREE.Sprite){if(!1===r.material.visible)return;if(!0===r.frustumCulled&&!1===Ee.intersectsSprite(r))return;ue(r)}for(var t=r.children,i=0,o=t.length;i<o;i++)e(t[i])}}(e),!0===t&&oe.objects.sort(Re);for(var o=oe.objects,n=0,a=o.length;n<a;n++){var s=o[n].object,l=s.geometry;if(he.setObject(s),te=s.matrixWorld,Y=0,s instanceof THREE.Mesh){if(l instanceof THREE.BufferGeometry){var c=l.attributes,p=l.groups;if(void 0===c.position)continue;for(var E=0,d=(Q=c.position.array).length;E<d;E+=3)he.pushVertex(Q[E],Q[E+1],Q[E+2]);if(void 0!==c.normal){var f=c.normal.array;for(E=0,d=f.length;E<d;E+=3)he.pushNormal(f[E],f[E+1],f[E+2])}if(void 0!==c.uv){var h=c.uv.array;for(E=0,d=h.length;E<d;E+=2)he.pushUv(h[E],h[E+1])}if(null!==l.index){var u=l.index.array;if(0<p.length)for(var m=0;m<p.length;m++){var v=p[m];for(E=v.start,d=v.start+v.count;E<d;E+=3)he.pushTriangle(u[E],u[E+1],u[E+2])}else for(E=0,d=u.length;E<d;E+=3)he.pushTriangle(u[E],u[E+1],u[E+2])}else for(E=0,d=Q.length/3;E<d;E+=3)he.pushTriangle(E,E+1,E+2)}else if(l instanceof THREE.Geometry){var y=l.vertices,x=l.faces,R=l.faceVertexUvs[0];pe.getNormalMatrix(te);for(var T=s.material,g=Array.isArray(T),S=0,H=y.length;S<H;S++){var w=y[S];if(ne.copy(w),!0===T.morphTargets)for(var M=l.morphTargets,C=s.morphTargetInfluences,b=0,z=M.length;b<z;b++){var V=C[b];if(0!==V){var j=M[b].vertices[S];ne.x+=(j.x-w.x)*V,ne.y+=(j.y-w.y)*V,ne.z+=(j.z-w.z)*V}}he.pushVertex(ne.x,ne.y,ne.z)}for(var L=0,O=x.length;L<O;L++){var B=x[L];if(void 0!==(T=!0===g?s.material[B.materialIndex]:s.material)){var P=T.side,W=ie[B.a],N=ie[B.b],k=ie[B.c];if(!1!==he.checkTriangleVisibility(W,N,k)){var A=he.checkBackfaceCulling(W,N,k);if(P!==THREE.DoubleSide){if(P===THREE.FrontSide&&!1===A)continue;if(P===THREE.BackSide&&!0===A)continue}(Z=ye()).id=s.id,Z.v1.copy(W),Z.v2.copy(N),Z.v3.copy(k),Z.normalModel.copy(B.normal),!1!==A||P!==THREE.BackSide&&P!==THREE.DoubleSide||Z.normalModel.negate(),Z.normalModel.applyMatrix3(pe).normalize();for(var F=B.vertexNormals,D=0,G=Math.min(F.length,3);D<G;D++){var I=Z.vertexNormalsModel[D];I.copy(F[D]),!1!==A||P!==THREE.BackSide&&P!==THREE.DoubleSide||I.negate(),I.applyMatrix3(pe).normalize()}Z.vertexNormalsLength=F.length;var U=R[L];if(void 0!==U)for(var q=0;q<3;q++)Z.uvs[q].copy(U[q]);Z.color=B.color,Z.material=T,Z.z=(W.positionScreen.z+N.positionScreen.z+k.positionScreen.z)/3,Z.renderOrder=s.renderOrder,oe.elements.push(Z)}}}}}else if(s instanceof THREE.Line){if(ce.multiplyMatrices(le,te),l instanceof THREE.BufferGeometry){if(void 0!==(c=l.attributes).position){for(E=0,d=(Q=c.position.array).length;E<d;E+=3)he.pushVertex(Q[E],Q[E+1],Q[E+2]);if(void 0!==c.color){var J=c.color.array;for(E=0,d=J.length;E<d;E+=3)he.pushColor(J[E],J[E+1],J[E+2])}if(null!==l.index)for(E=0,d=(u=l.index.array).length;E<d;E+=2)he.pushLine(u[E],u[E+1]);else{var K=s instanceof THREE.LineSegments?2:1;for(E=0,d=Q.length/3-1;E<d;E+=K)he.pushLine(E,E+1)}}}else if(l instanceof THREE.Geometry){if(0===(y=s.geometry.vertices).length)continue;(W=ve()).positionScreen.copy(y[0]).applyMatrix4(ce);for(K=s instanceof THREE.LineSegments?2:1,S=1,H=y.length;S<H;S++)(W=ve()).positionScreen.copy(y[S]).applyMatrix4(ce),0<(S+1)%K||(N=ie[Y-2],de.copy(W.positionScreen),fe.copy(N.positionScreen),!0===Te(de,fe)&&(de.multiplyScalar(1/de.w),fe.multiplyScalar(1/fe.w),(_=xe()).id=s.id,_.v1.positionScreen.copy(de),_.v2.positionScreen.copy(fe),_.z=Math.max(de.z,fe.z),_.renderOrder=s.renderOrder,_.material=s.material,s.material.vertexColors===THREE.VertexColors&&(_.vertexColors[0].copy(s.geometry.colors[S]),_.vertexColors[1].copy(s.geometry.colors[S-1])),oe.elements.push(_)))}}else if(s instanceof THREE.Points){if(ce.multiplyMatrices(le,te),l instanceof THREE.Geometry)for(S=0,H=(y=s.geometry.vertices).length;S<H;S++){w=y[S];ae.set(w.x,w.y,w.z,1),ae.applyMatrix4(ce),me(ae,s,r)}else if(l instanceof THREE.BufferGeometry){if(void 0!==(c=l.attributes).position){var Q;for(E=0,d=(Q=c.position.array).length;E<d;E+=3)ae.set(Q[E],Q[E+1],Q[E+2],1),ae.applyMatrix4(ce),me(ae,s,r)}}}else s instanceof THREE.Sprite&&(ae.set(te.elements[12],te.elements[13],te.elements[14],1),ae.applyMatrix4(le),me(ae,s,r))}return!0===i&&oe.elements.sort(Re),oe}}; 2 + //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpzL2NhbnZhcy1yZW5kZXJlci1hbmQtcHJvamVjdG9yLmpzIl0sIm5hbWVzIjpbImJnQ29sb3IiLCJUSFJFRSIsIlNwcml0ZUNhbnZhc01hdGVyaWFsIiwicGFyYW1ldGVycyIsIk1hdGVyaWFsIiwidGhpcyIsInR5cGUiLCJDb2xvciIsInByb2dyYW0iLCJwcm90b3R5cGUiLCJPYmplY3QiLCJjcmVhdGUiLCJjb25zdHJ1Y3RvciIsImNsb25lIiwibWF0ZXJpYWwiLCJjb3B5IiwiY29sb3IiLCJDYW52YXNSZW5kZXJlciIsImNvbnNvbGUiLCJsb2ciLCJSRVZJU0lPTiIsIl9yZW5kZXJEYXRhIiwiX2xpZ2h0cyIsIl92MSIsIl92M3kiLCJfdjMiLCJfdjF4IiwiX2RpZmZ1c2VDb2xvciIsIl91dnMiLCJfdXYxeCIsIl9jbGVhckJveCIsIkJveDIiLCJfdXYzeSIsIl90aGlzIiwiX3Byb2plY3RvciIsIlByb2plY3RvciIsIl9jYW52YXMiLCJfY2FudmFzV2lkdGgiLCJ3aWR0aCIsIl9jYW52YXNXaWR0aEhhbGYiLCJNYXRoIiwiX2NhbnZhc0hlaWdodCIsIl9jYW52YXNIZWlnaHRIYWxmIiwiZmxvb3IiLCJfdmlld3BvcnRYIiwiX3ZpZXdwb3J0SGVpZ2h0IiwiX3ZpZXdwb3J0WSIsIl9waXhlbFJhdGlvIiwiX3ZpZXdwb3J0V2lkdGgiLCJhbHBoYSIsIl9jbGVhckNvbG9yIiwiX2NvbnRleHQiLCJfY29udGV4dEdsb2JhbEFscGhhIiwiX2NvbnRleHRHbG9iYWxDb21wb3NpdGVPcGVyYXRpb24iLCJfY29udGV4dExpbmVXaWR0aCIsIl9jbGVhckFscGhhIiwiX2NvbnRleHRMaW5lQ2FwIiwiX2NvbnRleHRTdHJva2VTdHlsZSIsIl9jb250ZXh0RmlsbFN0eWxlIiwiX2NvbnRleHRMaW5lSm9pbiIsIl9jb250ZXh0TGluZURhc2giLCJfY29sb3IiLCJfbGlnaHRDb2xvciIsIl9lbWlzc2l2ZUNvbG9yIiwiX3BhdHRlcm5zIiwiX2NsaXBCb3giLCJfYW1iaWVudExpZ2h0IiwiX2RpcmVjdGlvbmFsTGlnaHRzIiwiX2VsZW1Cb3giLCJfcG9pbnRMaWdodHMiLCJfY2VudHJvaWQiLCJWZWN0b3IzIiwiX3ZlY3RvcjMiLCJfbm9ybWFsIiwiX25vcm1hbFZpZXdNYXRyaXgiLCJNYXRyaXgzIiwicm90YXRpb24iLCJlbGVtZW50IiwiZmlsbFJlY3QiLCJvcGFjaXR5IiwicmVzdG9yZSIsImJsZW5kaW5nIiwic2NhbGVYIiwiaXNTcHJpdGVDYW52YXNNYXRlcmlhbCIsInNjYWxlWSIsInNjYWxlIiwieSIsInNldEZpbGxTdHlsZSIsImdldFN0eWxlIiwibWluIiwic2V0IiwidjEiLCJ4IiwiZGlzdCIsInNhdmUiLCJ0ZXh0dXJlIiwibWFwIiwicGF0dGVybiIsImlzUG9pbnRzTWF0ZXJpYWwiLCJ2ZXJzaW9uIiwidHJhbnNsYXRlIiwidW5kZWZpbmVkIiwiY2FudmFzIiwiYml0bWFwIiwiaW1hZ2UiLCJveCIsIm9mZnNldCIsIm95IiwiaGVpZ2h0Iiwic3giLCJyZXBlYXQiLCJzeSIsImN4IiwiY3kiLCJzZXRPcGFjaXR5Iiwic2V0QmxlbmRpbmciLCJyb3RhdGUiLCJiZWdpblBhdGgiLCJtb3ZlVG8iLCJwb3NpdGlvblNjcmVlbiIsImxpbmVUbyIsInZlcnRleENvbG9ycyIsImNvbG9yU3R5bGUxIiwiY29sb3JTdHlsZTIiLCJzZXRTdHJva2VTdHlsZSIsImNyZWF0ZUxpbmVhckdyYWRpZW50IiwiZ3JhZCIsImFkZENvbG9yU3RvcCIsInN0cm9rZSIsImV4cGFuZEJ5U2NhbGFyIiwibGluZXdpZHRoIiwic2l6ZSIsIl92MngiLCJ2MiIsIl92MnkiLCJkcmF3VHJpYW5nbGUiLCJfdjF5IiwiaXNMaW5lQmFzaWNNYXRlcmlhbCIsInNldExpbmVXaWR0aCIsIm11bHRpcGx5Iiwic2V0TGluZUpvaW4iLCJsaW5lam9pbiIsIlZlcnRleENvbG9ycyIsInBvc2l0aW9uV29ybGQiLCJjYWxjdWxhdGVMaWdodCIsImlzTWVzaEJhc2ljTWF0ZXJpYWwiLCJtYXBwaW5nIiwicGF0dGVyblBhdGgiLCJlbnZNYXAiLCJ2ZXJ0ZXhOb3JtYWxzTW9kZWwiLCJfdXYxeSIsImV4Y2VwdGlvbiIsImlzTGluZURhc2hlZE1hdGVyaWFsIiwiZ2FwU2l6ZSIsIndpcmVmcmFtZSIsInNldExpbmVEYXNoIiwicmVuZGVyRmFjZTMiLCJ2MyIsInV2MSIsInV2MiIsInV2MyIsIngwIiwieTAiLCJ4MSIsInkxIiwieDIiLCJ5MiIsImluZm8iLCJyZW5kZXIiLCJ2ZXJ0aWNlcyIsIl92M3giLCJjbG9zZVBhdGgiLCJpc01lc2hQaG9uZ01hdGVyaWFsIiwiaXNNZXNoU3RhbmRhcmRNYXRlcmlhbCIsImVtaXNzaXZlIiwiRmFjZUNvbG9ycyIsInNldExpbmVDYXAiLCJsaW5lY2FwIiwiYWRkIiwiZGl2aWRlU2NhbGFyIiwicG9zaXRpb24iLCJub3JtYWwiLCJsIiwibGwiLCJsaWdodCIsInRleHR1cmVUb1BhdHRlcm4iLCJpc0RpcmVjdGlvbmFsTGlnaHQiLCJtYXRyaXhXb3JsZCIsIm5vcm1hbGl6ZSIsImFtb3VudCIsIm11bHRpcGx5U2NhbGFyIiwibGlnaHRQb3NpdGlvbiIsInNldEZyb21NYXRyaXhQb3NpdGlvbiIsImRvdCIsInN1YlZlY3RvcnMiLCJkaXN0YW5jZVRvIiwiZGlzdGFuY2UiLCJub3JtYWxNb2RlbCIsImZpbGwiLCJzdHJva2VQYXRoIiwid2lyZWZyYW1lTGluZXdpZHRoIiwid2lyZWZyYW1lTGluZWNhcCIsIndpcmVmcmFtZUxpbmVqb2luIiwiZmlsbFBhdGgiLCJpc01lc2hMYW1iZXJ0TWF0ZXJpYWwiLCJVVk1hcHBpbmciLCJ1dnMiLCJTcGhlcmljYWxSZWZsZWN0aW9uTWFwcGluZyIsImFwcGx5TWF0cml4MyIsInJlcGVhdFgiLCJ3cmFwUyIsIl91djJ4IiwibWlycm9yWCIsIl91djJ5IiwibWlycm9yWSIsIndyYXBUIiwiX3V2M3giLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJjb250ZXh0Iiwic2V0VHJhbnNmb3JtIiwiaXNNZXNoTm9ybWFsTWF0ZXJpYWwiLCJ6IiwiYWRkU2NhbGFyIiwic2V0UkdCIiwicmVwZWF0WSIsImlkIiwiaWRldCIsInUwIiwib2Zmc2V0WCIsIm9mZnNldFkiLCJSZXBlYXRXcmFwcGluZyIsIk1pcnJvcmVkUmVwZWF0V3JhcHBpbmciLCJkZXQiLCJlIiwidjAiLCJnZXRDb250ZXh0IiwiYSIsImRyYXdJbWFnZSIsImNyZWF0ZVBhdHRlcm4iLCJvblVwZGF0ZSIsInBpeGVscyIsInUxIiwidTIiLCJ2YWx1ZSIsImIiLCJjIiwiZCIsImYiLCJnbG9iYWxDb21wb3NpdGVPcGVyYXRpb24iLCJNdWx0aXBseUJsZW5kaW5nIiwibGluZVdpZHRoIiwidHJhbnNmb3JtIiwiZXhwYW5kIiwiUmVuZGVyYWJsZUZhY2UiLCJSZW5kZXJhYmxlVmVydGV4IiwiZ2xvYmFsQWxwaGEiLCJOb3JtYWxCbGVuZGluZyIsInZlcnRleCIsIlN1YnRyYWN0aXZlQmxlbmRpbmciLCJSZW5kZXJhYmxlTGluZSIsIlJlbmRlcmFibGVTcHJpdGUiLCJsaW5lQ2FwIiwiX29iamVjdENvdW50IiwiX3ZlcnRleENvdW50IiwiX3ZlcnRleFBvb2xMZW5ndGgiLCJfbGluZVBvb2wiLCJfc3ByaXRlIiwiX3Nwcml0ZVBvb2wiLCJfcG9pbnRzMyIsIkFycmF5IiwiX3ZpZXdQcm9qZWN0aW9uTWF0cml4IiwiX21vZGVsVmlld1Byb2plY3Rpb25NYXRyaXgiLCJsZW5ndGgiLCJ2ZWN0b3IiLCJwcm9qZWN0IiwiZG9tRWxlbWVudCIsImF1dG9DbGVhciIsInNvcnRFbGVtZW50cyIsImZhY2VzIiwiZ2V0Q29udGV4dEF0dHJpYnV0ZXMiLCJ1cGRhdGVTdHlsZSIsInN0eWxlIiwic2V0Vmlld3BvcnQiLCJzZXRDbGVhckNvbG9ySGV4Iiwic2V0U2Npc3NvclRlc3QiLCJzZXRDbGVhckNvbG9yIiwiaGV4IiwiZ2V0Q2xlYXJDb2xvciIsIm1heCIsIndhcm4iLCJnZXRNYXhBbmlzb3Ryb3B5IiwiY2xlYXIiLCJpc0VtcHR5IiwiaW50ZXJzZWN0IiwibWFrZUVtcHR5IiwiY2xlYXJSZWN0IiwiY2xlYXJDb2xvciIsImNsZWFyRGVwdGgiLCJjbGVhclN0ZW5jaWwiLCJiYWNrZ3JvdW5kIiwiciIsImciLCJfZWxlbWVudHMiLCJzY2VuZSIsImNhbWVyYSIsImlzQ2FtZXJhIiwiaXNDb2xvciIsInJlbmRlclNwcml0ZSIsIl92MiIsInByb2plY3RTY2VuZSIsImVsZW1lbnRzIiwic2V0RnJvbVBvaW50cyIsImludGVyc2VjdHNCb3giLCJtYXRyaXhXb3JsZEludmVyc2UiLCJsaWdodENvbG9yIiwiaXNBbWJpZW50TGlnaHQiLCJpc1BvaW50TGlnaHQiLCJjYWxjdWxhdGVMaWdodHMiLCJyZW5kZXJMaW5lIiwib3ZlcmRyYXciLCJ1bmlvbiIsImVycm9yIiwiUmVuZGVyYWJsZU9iamVjdCIsIl92ZXJ0ZXgiLCJvYmplY3QiLCJwcm9qZWN0VmVydGV4IiwicmVuZGVyT3JkZXIiLCJwdXNoVXYiLCJ2ZXJ0ZXhOb3JtYWxzTGVuZ3RoIiwiY2hlY2tUcmlhbmdsZVZpc2liaWxpdHkiLCJ2aXNpYmxlIiwiVmVjdG9yMiIsIlZlY3RvcjQiLCJfdmVydGV4UG9vbCIsImFwcGx5TWF0cml4NCIsIl9saW5lIiwiZ2V0TmV4dExpbmVJblBvb2wiLCJwdXNoVHJpYW5nbGUiLCJzaWRlIiwiX2ZhY2UiLCJfb2JqZWN0IiwiX2xpbmVDb3VudCIsIl9zcHJpdGVDb3VudCIsIl9vYmplY3RQb29sIiwiX29iamVjdFBvb2xMZW5ndGgiLCJmcm9tQXJyYXkiLCJfZmFjZVBvb2wiLCJub3JtYWxNYXRyaXgiLCJfbGluZVBvb2xMZW5ndGgiLCJfc3ByaXRlUG9vbExlbmd0aCIsImkiLCJfdmVjdG9yNCIsInV2IiwiYXJndW1lbnRzIiwiX2JvdW5kaW5nQm94IiwiQm94MyIsIl92aWV3TWF0cml4IiwiTWF0cml4NCIsIl9ub3JtYWxNYXRyaXgiLCJzZXRPYmplY3QiLCJGcnVzdHVtIiwiY2hlY2tCYWNrZmFjZUN1bGxpbmciLCJ1bnByb2plY3RWZWN0b3IiLCJsaWdodHMiLCJyZW5kZXJMaXN0Iiwibm9ybWFscyIsImZydXN0dW1DdWxsZWQiLCJjb2xvcnMiLCJhZGRPYmplY3QiLCJjaGlsZHJlbiIsIm9iamVjdHMiLCJwdXNoIiwiX21vZGVsTWF0cml4IiwiX2ZhY2VDb3VudCIsInciLCJpbnZXIiwiYXV0b1VwZGF0ZSIsIm11bHRpcGx5TWF0cmljZXMiLCJwcm9qZWN0aW9uTWF0cml4IiwiTWVzaCIsImdlb21ldHJ5IiwiYXR0cmlidXRlcyIsInBvc2l0aW9ucyIsInByb2plY3RPYmplY3QiLCJnZXROb3JtYWxNYXRyaXgiLCJmbCIsInB1c2hWZXJ0ZXgiLCJwdXNoTm9ybWFsIiwic29ydCIsInB1c2hDb2xvciIsInB1c2hMaW5lIiwiY2xpcExpbmUiLCJpbmRleCIsImluZGljZXMiLCJncm91cHMiLCJncm91cCIsInN0YXJ0IiwiR2VvbWV0cnkiLCJmYWNlVmVydGV4VXZzIiwibW9ycGhUYXJnZXRzIiwidCIsInRsIiwicHVzaFBvaW50Iiwic3ByaXRlIiwiZ2V0TmV4dFNwcml0ZUluUG9vbCIsImFicyIsImdldE5leHRWZXJ0ZXhJblBvb2wiLCJnZXROZXh0RmFjZUluUG9vbCIsIl9mYWNlUG9vbExlbmd0aCIsImZhY2UiLCJsaW5lIiwicGFpbnRlclNvcnQiLCJzMSIsInMyIiwiYWxwaGExIiwiYWxwaGEyIiwiYmMxbmVhciIsImJjMm5lYXIiLCJiYzFmYXIiLCJiYzJmYXIiLCJsZXJwIiwic29ydE9iamVjdHMiLCJfZnJ1c3R1bSIsInNldEZyb21NYXRyaXgiLCJMaWdodCIsIkJhY2tTaWRlIiwiTGluZSIsIlBvaW50cyIsImludGVyc2VjdHNPYmplY3QiLCJTcHJpdGUiLCJpbnRlcnNlY3RzU3ByaXRlIiwibyIsIkJ1ZmZlckdlb21ldHJ5IiwiYXJyYXkiLCJzdGVwIiwiX2NsaXBwZWRWZXJ0ZXgxUG9zaXRpb25TY3JlZW4iLCJjb3VudCIsInYiLCJ2bCIsImlzTXVsdGlNYXRlcmlhbCIsImlzQXJyYXkiLCJpbmZsdWVuY2UiLCJtb3JwaEluZmx1ZW5jZXMiLCJ0YXJnZXRWZXJ0ZXgiLCJtYXRlcmlhbEluZGV4IiwiZ2V0TmV4dE9iamVjdEluUG9vbCIsIkRvdWJsZVNpZGUiLCJmYWNlVmVydGV4Tm9ybWFscyIsInZlcnRleE5vcm1hbHMiLCJuIiwibmwiLCJ2ZXJ0ZXhVdnMiLCJ1IiwiTGluZVNlZ21lbnRzIiwiX2NsaXBwZWRWZXJ0ZXgyUG9zaXRpb25TY3JlZW4iXSwibWFwcGluZ3MiOiJhQUNBLElBQUlBLFFBQVUsU0FLZEMsTUFBTUMscUJBQXVCLFNBQVdDLEdBQXhDRixNQUFNQyxTQUFBQSxLQUFBQSxNQUVMRCxLQUFBQSxLQUFNRyx1QkFFTkMsS0FBS0MsTUFBTyxJQUFBTCxNQUFBTSxNQUFBLFVBR1pGLEtBQUtHLFFBQVUsYUFBZkgsS0FBS0csVUFBVUwsSUFNaEJGLE1BQU1DLHFCQUFxQk8sVUFBWUMsT0FBT0MsT0FBUVYsTUFBTUcsU0FBU0ssV0FBckVSLE1BQU1DLHFCQUFxQk8sVUFBM0JHLFlBQThDRCxNQUFRVixxQkFDdERBLE1BQU1DLHFCQUFxQk8sVUFBVUcsd0JBQW9CVixFQUd6REQsTUFBTUMscUJBQXFCTyxVQUFVSSxNQUFRLFdBRTVDLElBQUlDLEVBQVcsSUFBSWIsTUFBTUMscUJBTXpCLE9BSkFZLEVBQVNDLEtBQU1WLE1BQWZTLEVBQVNDLE1BQU1BLEtBQWZWLEtBQUFXLE9BQ0FGLEVBQVNFLFFBQVRYLEtBQXFCRyxRQUdkTSxHQU1SYixNQUFNZ0IsZUFBaUIsU0FBV2QsR0FFakNlLFFBQVFDLElBQUssdUJBQXdCbEIsTUFBTW1CLFVBRTNDakIsRUFBYUEsR0FBYyxHQUUzQixJQUFBa0IsRUFDQ0EsRUFEREMsRUFBQUMsRUFzQytCQyxFQXRDL0JDLEVBQUFDLEVBMENDQyxFQUFBQSxFQUFBQSxFQUFvQjFCLEVBQU1NLEVBMUMzQnFCLEVBQUFDLEVBcURDQyxFQUFBQSxFQUFnQjdCLEVBQU04QixFQXJEdkJDLEVBQUlDLEVBQVE1QixLQUFaNkIsRUFBQSxJQUFBakMsTUFBQWtDLFVBQUFDLE9BRXdCRCxJQUF2QkQsRUFBaUJqQyxPQUVqQm1DLEVBQVVqQyxPQUlWa0MsU0FBQUEsY0FBdUJDLFVBUnhCRCxFQVVDRSxFQUFtQkMsTUFWcEJDLEVBV0NDLEVBQW9CRixPQVhyQkQsRUFBQUMsS0FBQUcsTUFBQU4sRUFBQSxHQUFBSyxFQUFBRixLQUFBRyxNQUFBRixFQUFBLEdBQUFHLEVBZ0JDQyxFQWhCREMsRUFrQkNDLEVBbEJEQyxFQW9CWVosRUFDVmEsRUFBa0JBLEVBckJwQkYsRUF3QkNHLEVBeEJEQyxFQTJCQ0MsRUFBQUEsV0EzQkQsS0FBQSxDQUFBSCxPQTRCQ0ksSUFBQUEsRUFBQUEsUUE1QkRILEVBK0JDSSxJQUFBQSxNQUFvQi9DLE1BL0JyQlAsU0FBQXVELEdBQUEsSUFnQ0NDLEVBaENEUCxNQUFBLEVBQUEsRUFBQUcsRUFrQ29CLEVBbENwQkMsRUFBQSxFQUFBSSxFQUFBLEtBQUFDLEVBQUEsS0FBQUosRUFBQSxLQUFBRSxFQUFBLEtBQUFHLEVBQUEsS0FBQUMsRUFBQSxHQUFBQyxFQTZDQ0MsSUFBQUEsTUFBY3ZELE1BN0Nmb0IsRUFBQSxJQUFBMUIsTUFBQU0sTUFBQXdELEVBQUEsSUFBQTlELE1BQUFNLE1BQUF1RCxFQUFBLElBQUE3RCxNQUFBTSxNQUFBeUQsRUFBQSxHQUFBQyxFQXdEQ0MsSUFBQUEsTUFBZ0JuQyxLQXhEakJELEVBeURDcUMsSUFBQUEsTUFBQUEsS0F6RERDLEVBMERDQyxJQUFBQSxNQUFldEMsS0ExRGhCbUMsRUE0RGlDLElBQUFqRSxNQUFBTSxNQUNoQytELEVBQXNCQyxJQUFBQSxNQTdEdkJoRSxNQUFBOEQsRUE4RFcsSUFBSXBFLE1BQU1zRSxNQUZwQkMsR0FBVyxJQUFJdkUsTUFBTXNFLFFBS3RCRCxHQUFBLElBQUFyRSxNQUFBc0UsUUFIQ0UsR0FBVSxJQUFJeEUsTUFBTXNFLFFBQ3BCRyxHQUFvQixJQUFJekUsTUFBTTBFLFFBa2Q1QixTQUFLN0QsR0FBUzhELEVBQVRDLEVBQTBCMUIsR0FFL0JBLEdBQVMyQixFQUFZQyxTQUNyQjVCLEdBQVM2QixFQUFUQyxVQUlELElBeEREQyxFQXdEWXBFLEVBQVNxRSxNQUFBQSxFQUFBQSxFQTlEakJDLEVBQVNQLEVBQVFRLE1BQU1DLEVBQUk1QyxFQWlFOUI2QyxFQUFBQSxLQUFjekUsS0FBQUEsRUFBZTBFLEVBQTdCSixFQUFBQSxHQUlBLEdBbEVEaEIsRUFBU3FCLElBQUlDLElBQUtDLEVBQUdDLEVBQUlDLEVBQU1GLEVBQUdMLEVBQUlPLEdBZ0VyQzFDLEVBQUFBLElBQVMyQyxJQUFUSCxFQUFBQyxFQUFBQyxFQUFBRixFQUFBTCxFQUFBTyxHQUVLL0UsRUFBUzhELGlCQUFpQnpCLENBN0QvQixJQUFJNEMsRUFBVWpGLEVBQVNrRixJQUV2QixHQUFpQixPQUFaRCxFQUFtQixDQW9EbEIsSUFBQUUsRUFjS25GLEVBQVNvRixFQUFBQSxJQVNwQi9DLFFBUGNyQyxJQUFkeUUsR0FBNkJDLEVBQTdCVyxVQUFBSixFQUFBSSxVQUVBaEQsRUFBUzJDLEdBQVRDLEdBQ0E1QyxFQUFTaUQsRUFBV1QsSUFBU0wsUUFJN0JlLElBQUFsRCxFQUFTNkIsT0FBVCxDQTlERU8sR0FBY1UsRUFBUUssUUFFdEIsSUFBSUMsRUFBU1IsRUFBUVMsTUFFakJDLEVBQUtGLEVBQU9qRSxNQUFReUQsRUFBUVcsT0FBT2QsRUFDbkNlLEVBQUtKLEVBQU9LLE9BQVNiLEVBQVFXLE9BQU9wQixFQUVwQ3VCLEVBQUtOLEVBQU9qRSxNQUFReUQsRUFBUWUsT0FBT2xCLEVBQ25DbUIsRUFBS1IsRUFBT0ssT0FBU2IsRUFBUWUsT0FBT3hCLEVBb0UzQzBCLEVBQUE5QixFQUFBMkIsRUFqRU9JLEVBQUs3QixFQUFTMkIsRUFFbEI1RCxFQUFTMkMsT0FtRVpvQixFQUFZcEcsVUFBU2lFLEVBQUFBLEVBQXJCWSxFQUFBTCxHQUNBLElBQUE2QixFQUFhckcsVUFBYnFDLEVBQUFpRSxPQUFBdEcsRUFBQThELFVBakVHekIsRUFBU2lELFdBQWFsQixFQUFTLEdBQUtFLEVBQVMsR0FtRWhEakMsRUFBU2tFLE1BQVRMLEVBQUFDLEdBQ0E5RCxFQUFTbUUsV0FBV0MsR0FBQUEsR0FDcEJwRSxFQUFTcUUsU0FBV0QsRUFBQUEsRUFBQUEsRUFBZTNCLEdBakVoQ3pDLEVBQVM2QixnQkFRVk8sR0FBY3pFLEVBQVNFLE1BQU13RSxZQWlFOUJyQyxFQUlPMkMsT0FsRU4zQyxFQUFTaUQsVUFBV1QsRUFBR0MsRUFBR0QsRUFBR0wsR0FvRUhtQyxJQUF0QkMsRUFBQUEsVUFBc0JELEVBQVJMLE9BQTBCNUIsRUFBNUNaLFVBQ0F6QixFQUFJd0UsTUFBQUEsR0FBc0JGLEdBbEUxQnRFLEVBQVMyQixVQUFZLElBQU8sR0FBSyxFQUFHLEdBb0VwQzNCLEVBQUt1RSxlQS9ESzVHLEVBQVNxRSx3QkFFcEJ5QyxHQUFnQjlHLEVBQVNFLE1BQU13RSxZQXFFNUJELEdBQVdwQyxFQUFTMEUsTUFBQUEsWUFPcEJDLEVBQUtDLE9BRUw1RSxFQUFDaUQsVUFBQVQsRUFBb0JDLEVBQUFELEVBQUFMLEdBekVHLElBQXRCeEUsRUFBUzhELFVBQWlCekIsRUFBU2lFLE9BQVF0RyxFQUFTOEQsVUEyRXREa0QsRUFBQUEsTUFBT0osRUFBUHRDLEdBeEVIdEUsRUFBU04sUUFBUzJDLEdBOEVoQkEsRUFBQTZCLFdBMUVTbEUsRUFBU29GLG1CQUVwQlgsR0FBY3pFLEVBQVNFLE1BQU13RSxZQWdGNUJyQyxFQUFBMkMsT0E3RUQzQyxFQUFTaUQsVUFBV1QsRUFBR0MsRUFBR0QsRUFBR0wsR0ErRTdCLElBQUFuQyxFQUFTNkUsVUFBVDdFLEVBQUFpRSxPQUFBdEcsRUFBQThELFVBQ0FSLEVBQVM2RCxNQUFBQSxFQUFnQm5ILEVBQVNvSCxNQUFUOUMsRUFBekJ0RSxFQUFBcUgsTUE3RUFoRixFQUFTMkIsVUFBWSxJQUFPLEdBQUssRUFBRyxHQStFcEMzQixFQUFLckMsV0FtQk5zSCxTQUFPQyxHQUFHZCxFQUFIYyxFQUFxQkMsRUFBVWYsR0F4RXRDLEdBUEFMLEdBQVlwRyxFQUFTaUUsU0FrRnJCd0QsR0FBYzdHLEVBQU04RyxVQUVwQnJGLEVBQU9yQyxZQWhGUHFDLEVBQVNtRSxPQUFRM0IsRUFBRzRCLGVBQWUzQixFQUFHRCxFQUFHNEIsZUFBZWpDLEdBa0Z2RDNELEVBQUFBLE9BQWNaLEVBQU1ELGVBQXBCOEUsRUFBQXlDLEVBQUFkLGVBQUFqQyxHQS9FSXhFLEVBQVMySCxvQkFBc0IsQ0F3Rm5DNUUsR0F0RkE2RSxHQUFjNUgsRUFBU29ILFdBa0Z0QnZHLEdBQUFBLEVBQWNnSCxTQUVkQyxHQUFBOUgsRUFBQStILFVBRURoRixFQUFhSyxlQUFiakUsTUFBQTZJLGFBRUF4RSxHQUFnQnFCLEVBQUdvRCxNQUFuQnZELGdCQUVBd0QsQ0FFQW5GLElBQUFBLEVBQWlCbEMsRUFBQUEsYUFBcUJvQyxHQUFBQSxXQWpGakM0RCxFQUFjOUMsRUFBUTRDLGFBQWMsR0FBSWpDLFdBZ0U5QyxHQXVCT2tDLElBQWN1QixFQUVwQnJCLEdBQUtGLE9BRUF3QixDQUVKLElBRUN0SCxJQUFBQSxFQUFPaUQsRUFBUGdELHFCQUNBc0IsRUFBQUEsZUFBbUJYLEVBRW5CN0MsRUFBQTRCLGVBQUFqQyxFQVRGK0MsRUFXT2QsZUFBYzZCLEVBdEZqQmYsRUFBR2QsZUFBZWpDLEdBRW5Cd0MsRUFBS0MsYUFBYyxFQUFHTCxHQXdGdkJqRCxFQUFBQSxhQUFjSSxFQUFRd0UsR0FFdEJDLE1BQVFDLEdBRVI5RSxFQUFRMUQsRUFJUjBELEdBQWNJLElBWlQvRCxFQW9CQTBJLHNCQUVOM0YsR0FBYS9DLENBQUFBLEVBQVNFLFNBQXRCRixFQUFBMkksVUFJQzVGLEVBQU84RSxTQUVQdkUsRUFBQTZELGVBQUEsRUFBQW5ILEVBQUFvSCxXQUVEcEgsRUFBUzRJLHNCQTNDSkMsR0FpREs3SSxLQXRGYixTQUFTOEksR0FBYWpFLEVBQUkwQyxFQUFJd0IsRUFBSUMsRUFBS0MsRUFBS0MsRUFBS25GLEVBQVMvRCxHQTZObEQsSUFBUG1KLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUFDLEVBMUdBbkgsR0FqSEFsQixFQUFNc0ksS0FBS0MsT0FBT0MsVUFBWSxFQWtHN0IzSixFQUFBQSxLQUFTNEksT0FBQUEsUUFNVnhDLEdBQUFwRyxFQUFBaUUsU0FwR0FvQyxHQUFhckcsRUFBU21FLFVBRXRCdkQsRUFBT2lFLEVBQUc0QixlQUFlM0IsRUFBRzRDLEVBQU83QyxFQUFHNEIsZUFBZWpDLEVBc0d0RDhDLEVBQUFDLEVBQVNFLGVBQWtCMkIsRUFBM0I1QixFQUFBRCxFQUF1Q2dDLGVBQVMvRSxFQXBHL0NvRixFQUFPYixFQUFHdEMsZUFBZTNCLEVBQUdwRSxFQUFPcUksRUFBR3RDLGVBQWVqQyxFQW1OckQyRSxFQTVHUzNDLEVBNEdUNEMsRUE1R3FCQSxFQTRHckJDLEVBNUdBL0IsRUE0R0FnQyxFQTVHQTlCLEVBNEdBK0IsRUE1R0FLLEVBNEdBSixFQTVHQTlJLEVBREEyQixFQUFTa0UsWUFvSFZsRSxFQUFTZ0csT0FBQUEsRUFBYWMsR0FsSHJCOUcsRUFBU3FFLE9BQVEyQyxFQUFJQyxHQW9IckJqSCxFQUFJOEMsT0FBVWpDLEVBQUFBLEdBbEhkYixFQUFTd0gsYUFEVHhILEVBQWlCa0gsdUJBQWpCdkosRUFBQThKLHFCQUFBOUosRUFBQStKLHlCQUFBLE9BQUEvSixFQUFBa0YsSUFHQXJFLEVBQUFaLEtBQUFELEVBQUFFLE9BckdDK0MsRUFBZWhELEtBQU1ELEVBQVNnSyxVQUV6QmhLLEVBQVMyRyxlQUFpQnhILE1BQU04SyxZQXdHdENDLEVBQVlDLFNBQVpwRyxFQUFBN0QsT0FJQW1DLEVBQUFBLEtBQVM2RSxHQUVUNUQsR0FBUzZELEtBQUFBLEVBQUFBLGVBQTRCaUQsSUFBckM3QyxFQUFBVSxlQUFBbUMsSUFBQXJCLEVBQUFkLGVBQUFvQyxhQUFBLEdBcFNDLFNBQXdCQyxFQUFBQyxFQUFBckssR0FFdkIsSUFBSWlGLElBQUFBLEVBQUFBLEVBQVVqQyxFQUFBQSxFQUFXK0IsT0FBekJ1RixFQUFBQyxFQUFBRCxJQUFBLENBRUEsSUFBQUUsRUFBS3ZGLEVBQVlJLEdBS2hCLEdBSEFKLEVBQVV3RixLQUFBQSxFQUFBQSxPQUdWRCxFQUFBRSxtQkFBQSxDQUVELElBQUt6RixFQUFBekIsR0FBbUI2QixzQkFBWW1GLEVBQUFHLGFBQUFDLFlBSW5DLElBRkFyRyxFQUFBQSxFQUFjVSxJQUFRSyxLQUVUUCxFQUFBQSxTQUViOEYsR0FBU3RGLEVBQUFBLFVBekRWdkYsRUFBTWtLLElBQUtwSCxFQUFZZ0ksZUFBZ0JELFNBNkRsQzlFLEdBQUtSLEVBQU9LLGFBQVNiLENBRXpCLElBekRHOEYsRUE2REgxSSxHQUpBNEksRUFBa0JsRixHQUFsQm1GLHNCQUFBUixFQUFBRyxjQXpER0UsRUFBU1IsRUFBT1ksSUFBS3pILEdBQVMwSCxXQUFZSCxFQUFlWCxHQUFXUSxlQTZEOUR4RixFQUFULFNBSUFqRCxHQUFTaUQsSUFGVGpELEdBQW9CLEdBQVhpRCxFQUFBQSxTQUFULEVBQW9DaEIsRUFBRjVDLEtBQWxDaUQsSUFBQTJGLEVBQUFlLFdBQUFKLEdBQUFQLEVBQUFZLFNBQUEsSUFFQSxTQUVBakosR0FBUzZCLEVBQUFBLFVBakNYaEUsRUFxQ09rSyxJQUFBcEgsRUFBQWdJLGVBQUFELE1BMkpQN0MsQ0FBZ0IxRSxHQUFXTyxFQUFRd0gsWUFBYXhJLEdBRWhEQSxFQUFPOEUsU0FBVWhILEdBQWdCdUosSUFBS25ILElBeUd2QyxJQUFBWixFQUFTbUosVUFFVEMsR0FBQTFJLEVBQUEvQyxFQUFBMEwsbUJBQUExTCxFQUFBMkwsaUJBQUEzTCxFQUFBNEwsbUJBdkdLQyxHQUFVOUksUUFFUixHQUFLL0MsRUFBU21JLHFCQUF1Qm5JLEVBQVM4TCx1QkFBeUI5TCxFQUFTOEoscUJBQXVCOUosRUFBUytKLHVCQUF5QixDQUUvSSxHQUFzQixPQUFqQi9KLEVBQVNrRixJQTRHTEssRUFERkwsSUFBQWtELFVBQVBqSixNQUFBNE0sWUFyR0VqTCxFQUFPaUQsRUFBUWlJLElBNEdsQjNELEdBQVlwRCxFQUFRUyxFQUFwQjRCLEVBQUFFLEVBQUFvQyxFQUFBbEosRUFBQUksRUFBQWtJLEdBQUFsRSxFQUFBaEUsRUFBQWtJLEdBQUF4RSxFQUFBMUQsRUFBQW1JLEdBQUFuRSxFQUFBaEUsRUFBQW1JLEdBQUF6RSxFQUFBMUQsRUFBQW9JLEdBQUFwRSxFQUFBaEUsRUFBQW9JLEdBQUExRSxFQUFBeEUsRUFBQWtGLFdBSVEsT0FBQWxGLEVBQUFzSSxPQUVOakQsRUFBU2lELE9BQUFGLFVBQUFqSixNQUFBOE0sNkJBR1Z0SSxHQUFBMUQsS0FBQThELEVBQUF3RSxtQkFBQVMsSUFBQWtELGFBQUF0SSxJQTNHRTdDLEVBQVEsR0FBTTRDLEdBQVFtQixFQUFJLEdBNkc3QjBELEVBQUkyRCxHQUFVbEgsR0FBUW1ILEVBQVIsR0ExR1h6SSxHQUFRMUQsS0FBTThELEVBQVF3RSxtQkFBb0JVLElBQVFpRCxhQUFjdEksSUE2R25FeUksRUFBSUMsR0FBVXJILEdBQVFtSCxFQUFSLEdBQ2RHLEVBQUlDLEdBQVV2SCxHQUFRd0gsRUFBUixHQUVkOUksR0FBQTFELEtBQUE4RCxFQUFBd0UsbUJBQUFXLElBQUFnRCxhQUFBdEksSUEzR0c4SSxFQUFRLEdBQU0vSSxHQUFRbUIsRUFBSSxHQTZHN0I1RCxFQUFJc0UsR0FBU21ILEdBQVNDLEVBQUFBLEdBRXRCcEgsR0FBZ0JFLEVBQU1JLEVBQU53QixFQUFpQmtGLEVBQUFBLEVBQWM5TCxFQUEvQ0ssRUFBQXlILEVBQUE2RCxFQUFBRSxFQUFBRyxFQUFBeEwsRUFBQWxCLEVBQUFzSSxVQU1BdkYsRUFBS3VKLEtBQUFBLEVBQW1CcE0sT0FFdkIyTSxFQUFRQyxlQUEyQjNOLE1BQUd1RyxZQUd0QzNDLEVBQUE4RSxTQUFBOUQsRUFBQTdELFFBSXlCLElBQXpCMk0sRUFBUUMsVUFDUkQsR0FBQTlKLEVBQTBCL0MsRUFBUzhGLG1CQUFuQzlGLEVBQUEyTCxpQkFBQTNMLEVBQUE0TCxtQkFFQUMsR0FBQTlJLFNBSVErSixFQUFSQyxzQkFHQXBKLEdBQUExRCxLQUFBOEQsRUFBQXdILGFBQUFXLGFBQUF0SSxJQUVEYixFQUFJaUQsT0FBU3JDLEdBQWJtQixFQUFBbkIsR0FBQWEsRUFBQWIsR0FBQXFKLEdBQUFoQyxlQUFBLElBQUFpQyxVQUFBLEtBTU9sSyxFQUlBbUssT0FBS0MsRUFBQUEsRUFBQUEsSUFSYUEsSUFBekJuTixFQUFLbU0sVUE5R0FWLEdBQVkxSSxFQUFRL0MsRUFBUzBMLG1CQUFvQjFMLEVBQVMyTCxpQkFBa0IzTCxFQUFTNEwsbUJBZ0h6RjVGLEdBQVNqRCxHQThCVEcsU0FBQUEsR0FBbUJrSyxFQUFPakksRUFBMUJnRixFQUFBcEMsR0FqSERILEdBQWNSLEdBcUhkOEMsR0FBYTFFLEdBbkhic0MsR0FBYUMsR0FxSFp0RCxHQUFjVSxFQUFRSyxZQWxIdkJuRCxFQUFTNkUsU0F1SFI3RSxFQUFBQSxlQUFBLEVBQUErRSxHQUtELFNBQUF5RSxHQUFBM0wsR0FFQXVFLEdBQUF2RSxFQUFBd0UsWUFBQXJDLEVBQUFtSixPQUFBLFNBQUFiLEdBQUExRixHQUFBLEdBQUEsSUFBMkJvSSxFQUEzQmhJLFNBQUFKLGFBQ1dBLE1BQVFXLG1CQURuQlgsYUFFV0EsTUFBUVcsWUFGbkIsTUFJQ0UsQ0E5R0NOLFlBQVFELEVBZ0hWK0gsUUFBWUMsRUFBUGxJLFNBMUdMLElBQUlLLEVBQVFULEVBQVFTLE1BaUhwQjZCLElBQXdCekIsSUFBbkJKLEVBQU84SCxTQUVabkUsTUFBQSxDQUNBRSxZQUFVQyxFQTlHUm5FLFFBQVMsR0FLWCxJQUFJOEcsRUFBVWxILEVBQVFtSCxRQUFVak4sTUFBTXNPLGdCQUFrQnhJLEVBQVFtSCxRQUFVak4sTUFBTXVPLHVCQWdIM0VDLEVBQUwxSSxFQUFpQndILFFBQUF0TixNQUFBc08sZ0JBQUF4SSxFQUFBd0gsUUFBQXROLE1BQUF1Tyx1QkFFakJMLEVBQUFwSSxFQUFBbUgsUUFBQWpOLE1BQUF1Tyx1QkE5R0lsQixFQUFVdkgsRUFBUXdILFFBQVV0TixNQUFNdU8sdUJBbUhsQ2xJLEVBQUVtSCxTQUFGQyxjQUFKLFVBOUdBcEgsRUFBT2hFLE1BQVFrRSxFQUFNbEUsT0FBVThLLEVBQVUsRUFBSSxHQWdIN0NzQixFQUFJekUsT0FBQXpELEVBQWtCbUksUUFBdEJyQixFQUFBLEVBQUEsR0E3R0EsSUFBSUssRUFBVXJILEVBQU9zSSxXQUFZLE1BZ0hqQ3pMLEVBQUFBLGFBQUEsRUFBQSxFQUFBLEdBQUEsRUFBQSxFQUFBcUQsRUFBQUksUUFDQXpELEVBQUFBLFVBQW9CMEwsRUFBcEIsRUFBQSxJQUVBLElBQUExTCxJQTdHQ3dLLEVBQVFDLGNBQWdCLEVBQUcsRUFBRyxHQUFLLEVBQUdwSCxFQUFNbEUsTUFBT2tFLEVBQU1JLFFBaUgzRCtHLEVBQUFtQixVQUFBdEksR0FBQUEsRUFBQWxFLE1BQUEsS0E1R2tCLElBQVpnTCxJQUVKSyxFQUFRQyxhQUFjLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUNyQ0QsRUFBUW1CLFVBQVd0SSxFQUFPLEVBQUdBLEVBQU1JLFVBSW5CLElBQVp3RyxJQUFnQyxJQUFaRSxJQUV4QkssRUFBUUMsY0FBZ0IsRUFBRyxFQUFHLEVBQUcsRUFBR3BILEVBQU1sRSxNQUFPLEdBQ2pEcUwsRUFBUW1CLFVBQVd0SSxHQUFTQSxFQUFNbEUsTUFBT2tFLEVBQU1JLFNBSWhELElBQUlFLEVBQVMsYUFFSSxJQUFabUcsSUFBZ0MsSUFBWmdCLEVBRXhCbkgsRUFBUyxVQUVjLElBQVptRyxFQUVYbkcsRUFBUyxZQUVjLElBQVptSCxJQUVYbkgsRUFBUyxZQThIVixJQUFxQnhCLEVBQUluQyxFQUF6QjRMLGNBQUF6SSxFQUFBUSxHQUdBLE9BRnNCcUgsRUFEdEJhLFVBQUFqSixFQUFBaUosU0FBQWpKLEdBR0swSSxDQXhISm5JLE9BQVFMLEVBMEhUa0ksUUFBT2MsRUFBU3pNLFNBS2hCbUQsU0FBUUMsR0FBR3FFLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUE4RCxFQUFBTyxFQUFBTyxFQUFBdkosRUFBQXdKLEVBQUE5RyxFQUFBdEMsR0F2SFgsSUFBSUUsRUFBVWpDLEVBQVcrQixFQUFRbUksSUFvSWhDLFFBbElnQjdILElBQVpKLEdBQXlCQSxFQUFRRSxVQUFZSixFQUFRSSxVQUV6REYsRUFBVXdGLEdBQWtCMUYsR0EySDdCL0IsRUFBS1osRUFBQUEsSUFBQUEsUUFLSmlELElBQUFKLEVBQUFLLE9BbkhBLE9BRkFmLEdBQWMsMEJBNkhkcEMsRUFBS2lNLE9BaklMN0osR0FBY1UsRUFBUUssUUFZdkIsSUFBSXVJLEVBQUdRLEVBQUdDLEVBQUdDLEVBQUdiLEVBQUdjLEVBQUdmLEVBQUtOLEVBK0h6QmhMLEVBQVNzTSxFQUFBQSxPQUFBQSxFQUFBQSxFQUEyQjNJLE9BQUFsQixFQUVwQzBJLEVBQU12SSxFQUFLcUosT0FBVW5QLEVBQU15UCxFQUFBQSxPQUFyQnBLLEVBOUhQaEQsRUFBUXlELEVBQVFTLE1BQU1sRSxNQUFReUQsRUFBUWUsT0FBT2xCLEVBZ0k1Q3pDLEVBQUFBLEVBQVNzTSxNQUFBQSxPQUFBQSxFQUEyQjNJLE9BQXBDeEIsRUFRRjRKLEdBQUFBLEVBQUFiLEdBQUEvTCxFQWpJQXFELEdBQU9BLEVBQUsySSxHQUFZMUgsRUFFeEJ1SSxHQUFPQSxFQUFLZCxHQUFZL0wsRUFtSXhCK0YsR0FBSy9FLEVBQUFBLEdBQUFBLEVBRUpILEdBQUFBLEVBQVN3TSxHQUFBQSxFQUNUck0sR0FBQUEsRUFBQUEsR0FBQUEsRUEzSFksS0FGYm1MLEdBaUlBUyxHQWhKQWQsR0FBT0EsRUFBS0MsR0FBWS9MLElBYWQrRixHQW9IVGhGLEdBQUFBLEVBQUFBLEdBQUFBLElBcEhEOEwsR0FBTWYsSUFtSU56SSxHQUFBZ0osTUF0SEFELEVBQUl6RSxHQStISHpHLEdBQUFBLEVBQUFBLEVBQUFBLEVBQWtCNEwsSUF0SW5CakIsRUFBTyxFQUFJTSxJQU9FTCxHQW1JYmtCLEdBQUFKLEVBQUE3RSxFQUFBOEUsRUFBQWhGLEdBQUFnRSxHQW5Jc0JRLEVBdUl0QmEsRUFBQXRGLEdBTkNtRixHQUFBaEgsRUFBQStCLEVBQUF6RSxFQUFBMkUsR0FBQTZELEdBTURDLEdBeklBbUIsR0FBTUwsRUFBSzVFLEVBQUs2RSxFQUFLL0UsR0FBTytELEdBeUk1QlEsRUFFQXhMLEVBQUtRLE9BcklMUixFQUFTeU0sVUFBV2YsRUFBR1EsRUFBR0MsRUFBR0MsRUFBR2IsRUFBR2MsR0F1SWxDck0sRUFBQUEsT0FDQVEsRUFBQUEsV0F4RkYsU0FBU2tNLEdBQVFsSyxFQUFJMEMsRUFBSTRHLEdBRXhCLElBMkxxQmQsRUEzTGpCdkksRUFBSXlDLEVBQUd6QyxFQUFJRCxFQUFHQyxFQUFHTixFQUFJK0MsRUFBRy9DLEVBQUlLLEVBQUdMLEVBMkxyQ3JGLEVBQU02UCxFQUFBQSxFQUFBQSxFQUFOeEssRUFFQyxJQUFLNEksSUFJTHRJLEdBRkF1SSxFQUFBYyxFQUFjaFAsS0FBTThQLEtBQUFBLEdBRVZ6SyxHQUFJckYsRUFFZG9JLEVBQUF6QyxHQUFLeUcsRUFBQUEsRUFBQUEsR0FBYy9HLEVBekxsQkssRUFBR0MsR0FBS0EsRUFBR0QsRUFBR0wsR0FBS0EsR0FnTXBCLFNBQUE0QixHQUFpQmpILEdBRWpCbUQsSUFBQWdNLElBakJEak0sRUFBQTZNLFlBQUFaLEVBdEtHaE0sRUFBc0JnTSxHQWlNeEIsU0FBS3JHLEdBQWdCcUcsR0F6TGYvTCxJQUFxQytMLElBc0w1Q0EsSUFBQW5QLE1BQUFnUSxlQVVBaFEsRUFBTThQLHlCQUFrQyxjQUVsQ2hILElBQW9CbUgsTUFBQUEsaUJBRjFCL00sRUFBQXNNLHlCQUFBLFVBT0FMLElBQUFuUCxNQUFBa1Esb0JBRUFsUSxFQUFNbVEseUJBQTZCLFNBRWxDaEIsSUFBQW5QLE1BQUF5UCxtQkFFQXZNLEVBQVVzTSx5QkFBVixZQUlBcE0sRUFBQStMLEdBT0QsU0FBQTFHLEdBQUEwRyxHQUVNaUIsSUFBbUJqQixJQUV4QmpNLEVBQUF3TSxVQUFBUCxFQTdMRTlMLEVBQW9COEwsR0FNdEIsU0FBU3BFLEdBQVlvRSxHQWtNaEJ0TyxJQUFMc08sSUFiRGpNLEVBQUFtTixRQUFBbEIsRUE5S0c1TCxFQUFrQjRMLEdBb01wQixTQUFhbUIsR0FBYm5CLEdBQ1VvQixJQURWcEIsSUFBQWpNLEVBQzBDc04sU0FBQUEsRUFEMUM5TSxFQUFBeUwsR0FBQSxTQUdvQnNCLEdBSHBCdEIsR0FJQ3VCLElBSkR2QixJQUFBak0sRUFJd0J5TixZQUp4QnhCLEVBQUEzTCxFQUk4RDJMLEdBSjlELFNBYUN5QixHQUFlQyxHQUdmQyxJQUF3QjNCLElBaEJ6QmpNLEVBbUJDNk4sVUFBQUEsRUFuQkR0TixFQXFCaUIwTCxHQWhMakIsU0FBU3pGLEdBQWF5RixHQUVoQnhMLEVBQWlCcU4sU0FBVzdCLEVBQU02QixTQTBMdkNDLEVBQU9DLFlBQVAvQixHQUhEeEwsRUFBQXdMLFFBM3JDOEIvSSxJQUF6QmxELEVBQVN3RyxjQUVieEcsRUFBU3dHLFlBQWMsY0FJeEJ0SixLQUFLK1EsV0FBYWhQLEVBRWxCL0IsS0FBS2dSLFdBQVksRUFNaEI3RyxLQUFBQSxhQUFRLEVBSlRuSyxLQUFLaVIsY0FBZSxFQU9sQkMsS0FBQUEsS0FBTyxDQUhBL0csT0FBQSxDQUZUQyxTQUFBLEVBS0U4RyxNQUFPLElBY1RsUixLQUFLbVIsV0FBQUEsV0FFSixPQUFPck8sR0FGUjlDLEtBQUttUixxQkFBdUIsV0FNNUIsT0FBQXJPLEVBQUFxTyx3QkFRQ25SLEtBQUsrTyxjQUFVL0ksV0FOZixPQUFPdEQsR0FhUE4sS0FBQUEsY0FBZ0JtRSxTQUFTN0QsUUFFekJzRCxJQUFBakUsSUFBZ0JDLEVBQWhCK00sSUFJQTFNLEtBQUFBLFFBQUFBLFNBQXlCQyxFQUFPRixFQUFBQSxHQUVoQ0osRUFBS29QLEVBQWdCMU8sRUFSckJOLEVBQWdCbUUsRUFBUzdELEVBV3hCWCxFQUFBQSxNQUFjd0UsRUFFZHhFLEVBQUF3RSxPQUFBbkUsRUFFRHdCLEVBQW9CMUIsS0FBQUEsTUFBQUEsRUFBb0JHLEdBQ3hDdUIsRUFBb0IxQixLQUFBQSxNQUFBQSxFQUFvQkcsSUFFbkJILElBQXJCVCxJQVJDTSxFQUFRc1AsTUFBTXBQLE1BQVFBLEVBQVEsS0FXL0JjLEVBQUFBLE1BQUFBLE9BQUF3RCxFQUFBLE1BSUF0RCxFQUFBQSxJQUFBQSxLQUFvQmYsR0FBcEJHLEdBQ0FjLEVBQUFBLElBQUFBLElBQWtCakIsRUFBbEJHLEdBUkFaLEVBQVUyRCxJQUFJQyxLQUFPbkQsR0FBb0JHLEdBV3pDWixFQUFLNlAsSUFBQUEsSUFBTHBQLEVBQUFHLEdBUkFVLEVBQXNCLEVBWXZCQyxFQUFvQ2YsRUFLbkNVLEVBWkFRLEVBVUFWLEVBREFGLEVBWkFhLEVBQXNCLEtBVXZCcEQsS0FBQXNSLFlBQUEsRUFBQSxFQUFBclAsRUFBQXNFLElBQUF2RyxLQUFLc1IsWUFBYyxTQUFXL0wsRUFBR04sRUFBR2hELEVBQU9zRSxHQUUxQ2hFLEVBQWFnRCxFQUFJN0MsRUFhakJHLEVBQVl3QyxFQUFLMUUsRUFWakJnQyxFQUFpQlYsRUFBUVMsRUFhekJqQixFQUFtQjhFLEVBQUVyRSxHQUt0QmxDLEtBQUt1UixXQUFBQSxhQVpMdlIsS0FBS3dSLGVBQWlCLGFBZXJCeFIsS0FBQXlSLGNBQW9CQyxTQUFwQi9RLEVBQUFpQyxHQVhBQyxFQUFZd0MsSUFBSzFFLEdBZWxCdUMsT0FBcUI4QyxJQUFoQjJMLEVBQTRCL08sRUFBQSxFQUVoQ25CLEVBQU9vQixJQUFBQSxLQUFQWCxHQUFBRyxHQUZEWixFQUFBbVEsSUFBQXZNLElBQUFuRCxFQUFBRyxJQVFDckMsS0FBQXVSLGlCQUFBLFNBQUFHLEVBQUE5TyxHQWJBL0IsUUFBUWdSLEtBQU0sNkZBaUJmN1IsS0FBSzhSLGNBQUxKLEVBQXdCOU8sSUFaeEI1QyxLQUFLMlIsY0FBZ0IsV0FFcEIsT0FBTzlPLEdBcUJOcEIsS0FBQUEsY0FBVW1HLFdBRVZuRyxPQUFBQSxHQWJGekIsS0FBSzhSLGlCQUFtQixXQUV2QixPQUFPLEdBMkJOOVIsS0FBQStSLE1BQUs3TyxZQUVKLElBQUEyRCxFQUFBbUwsWUFyQkR2USxFQUFVd1EsVUFBV3JPLEdBd0JwQnNCLEVBQUFBLGVBQXdCL0MsR0FFeEJXLEVBQVMyQixJQUFBQSxFQUNSaEQsRUFBVTJELElBQVZHLEVBRERyRCxFQU9BVCxFQUFBMkQsSUFBQUgsR0FBQXhELEVBQUEyRCxJQUFBSCxFQUFBNUMsRUE1QkRaLEVBQVVtUSxJQUFJck0sRUFBTTlELEVBQVVtUSxJQUFJck0sRUFBSXJELEVBOEJ0Q1QsRUFBVXlRLElBQUFBLEdBQVZ6USxFQUFBbVEsSUFBQTNNLEVBQUE1QyxFQXZDRmEsRUFBQSxHQTZDQUosRUFBQXFQLFVBOUJzQixFQUFsQjFRLEVBQVUyRCxJQUFJRyxFQWdDQSxFQUFsQjlELEVBQUsyUSxJQUFhbk4sRUFDYm9OLEVBQUxULElBQWtCck0sRUFBQTlELEVBQWxCMkQsSUFBQUcsRUFBQSxFQUNLK00sRUFBQUEsSUFBZXJOLEVBQUF4RCxFQUFwQm1RLElBQUEzTSxFQUFBLEdBMUJxQixFQUFkL0IsSUFpQ0wyRCxHQUFBLEdBRUFDLEdBQUFsSCxNQUFBZ1EsZ0JBRUQxSyxHQUFJcU4sUUFBbUJBLEtBQUFBLE1BQXZCLElBQUExUCxFQUFBMlAsR0FBQSxJQUFBclEsS0FBQUcsTUFBQSxJQUFBTyxFQUFBNFAsR0FBQSxJQUFBdFEsS0FBQUcsTUFBQSxJQUFBTyxFQUFBbU0sR0FBQSxJQUFBOUwsRUFBQSxLQUVBSixFQUFLeVAsU0EvQmdCLEVBQWxCOVEsRUFBVTJELElBQUlHLEVBaUNoQixFQUFBc0IsRUFBQStLLElBQUEzTSxFQUNBNkIsRUFBYWxILElBQU1nUSxFQUFBQSxFQUFuQnhLLElBQUFHLEVBQUEsRUEvQkk5RCxFQUFVMkQsSUFBSUgsRUFBSXhELEVBQVVtUSxJQUFJM00sRUFBTSxJQXNDMUN4RCxFQUFBeVEsY0F6QkZsUyxLQUFLb1MsV0FBYSxhQW1DakJwUixLQUFBQSxXQUFjYSxhQUNkNlEsS0FBQUEsYUFBWTFSLGFBaENiaEIsS0FBS21LLE9BQVMsU0FBV3dJLEVBQU9DLEdBRS9CLFFBQXlCNU0sSUFBcEI0TSxFQUFPQyxTQUFaLENBT0EsSUFBSU4sRUFBYUksRUFBTUosV0FFbEJBLEdBQWNBLEVBQVdPLFNBRTdCak0sR0FBWSxHQW1DWkMsR0FBSXJHLE1BQVcrRCxnQkFFZlUsR0FBS3pFLEVBQWF1RixZQWpDbEJsRCxFQUFTMkIsU0FBVSxFQUFHLEVBQUd6QyxFQUFjSSxLQUVULElBQW5CcEMsS0FBS2dSLFdBRWhCaFIsS0FBSytSLFFBc0NKZ0IsRUFBQUEsS0FBQUEsT0FBQTNJLFNBQTRCM0osRUFFNUJtQixFQVBEc0ksS0FPT0MsT0FBSzNGLE1BQUFBLEVBRVh0RCxFQUFNc0QsYUFBWXdPLEVBQUFoUixFQUFBLEVBQUEsR0FBQVEsRUFBQUosRUFBQUcsRUFBQUgsRUFBQUssR0FsQ3BCSyxFQUFTaUQsVUFBVzdELEVBQWtCRyxHQXFDcEMyUSxFQUFJOUwsRUFBSitMLGFBQXdCL1EsRUFBa0I4USxFQUFJOUwsS0FBQUEsWUFBb0I3RSxLQUFBQSxjQWxDcEVxUSxFQUFZMVIsRUFBWWtTLFNBb0N0Qm5QLEVBQUFBLEVBQVNvUCxPQUtUOU8sR0FBYytPLGdCQUFlclAsRUFBeEJzUCxvQkFxSEwsV0FFQXhQLEVBQUkySCxPQUFnQkksRUFBUCxFQUFZekgsR0F0RDNCTCxFQUFtQjZKLE9BQVEsRUFBRyxFQUFHLEdBd0QvQjNKLEVBQUt3SCxPQUFjLEVBQUEsRUFBQSxHQUVuQkEsSUFBQUEsSUFBQUEsRUFBVUwsRUFBQUEsRUFBTVksRUFBWTZFLE9BQVEzRixFQUFJOUksRUFBQUEsSUFBVTRJLENBRWxELElBQUFJLEVBQUtLLEVBQWNQLEdBdERoQnFJLEVBQWFuSSxFQUFNeEssTUFFbEJ3SyxFQUFNb0ksZUEwRFYxUCxFQUFBZ0gsSUFBQXlJLEdBSUZuSSxFQUFBRSxtQkFJQXhFLEVBQXFCbkMsSUFBQUEsR0F4RFJ5RyxFQUFNcUksY0E4RG5CeFAsRUFBVzdCLElBQUFtUixJQWhMWEcsR0EwQ0UsSUFBS1QsSUFBSTlMLEVBQUFBLEVBQUFBLEVBQUFBLEVBQUowSixPQUFrQzFKLEVBQUFBLEVBQUFBLElBQUosQ0F0Q3BDLElBQUkxQyxFQUFVa08sRUFBV3JFLEdBMEN4QjJFLEVBQUk5TCxFQUFKekcsU0F0Q0QsUUFBa0J1RixJQUFidkYsR0FBK0MsSUFBckJBLEVBQVNpRSxRQUF4QyxDQTRDRThLLEdBMUNGekwsRUFBU21PLFlBMENQMUMsYUFBWXRJLE1BQWdCOUYsa0JBRzVCRixFQUFBc0QsR0F4Q0dlLEdBQUtyRCxFQUFrQmhCLEVBQUkrRCxHQUFLNUMsRUFFcEMwUSxHQUFjN1IsRUFBS3NELEVBQVMvRCxRQUV0QixHQUFLK0QsYUFBbUI1RSxNQUFNbVEsZUFnRG5DN08sRUFBQXNELEVBQUFjLEdBQUEwTixFQUFBeE8sRUFBQXdELEdBNUNEOUcsRUFBSWdHLGVBQWUzQixHQUFLckQsRUFBa0JoQixFQUFJZ0csZUFBZWpDLEdBQUs1QyxFQWdEbkUyUSxFQUFBOUwsZUFBQTNCLEdBQUFyRCxFQUFBOFEsRUFBQTlMLGVBQUFqQyxHQUFBNUMsRUE3Q0MwQixFQUFTb1AsY0FBZSxDQUN2QmpTLEVBQUlnRyxlQUNKOEwsRUFBSTlMLGtCQW1ETixJQUFBdEQsRUFBQXdQLGNBQUFyUCxJQUVEMlAsR0FBQXhTLEVBQUE4UixFQUFBeE8sRUFBQS9ELFFBNUNRLEdBQUsrRCxhQUFtQjVFLE1BQU02UCxlQUFpQixDQUlyRCxHQThDRjNNLEVBQUFBLEVBQVN5SyxHQUFBQSxFQUFUL0ksRUFBbUN3RCxHQUFuQzVHLEVBQUFvRCxFQUFBZ0YsR0E5Q090SSxFQUFJZ0csZUFBZXVHLEdBQU0sR0FBNEIsRUFBdkJ2TSxFQUFJZ0csZUFBZXVHLEVBQVEsU0FrRGpFLEdBQUF1RixFQUFBOUwsZUFBQXVHLEdBQUEsR0FBQSxFQUFBdUYsRUFBQTlMLGVBQUF1RyxFQUFBLFNBaERHLEdBQUtyTSxFQUFJOEYsZUFBZXVHLEdBQU0sR0FBNEIsRUFBdkJyTSxFQUFJOEYsZUFBZXVHLEVBQVEsU0FFOUR2TSxFQUFJZ0csZUFBZTNCLEdBQUtyRCxFQUFrQmhCLEVBQUlnRyxlQUFlakMsR0FBSzVDLEVBa0RwRXdCLEVBQUFBLGVBQXNCMEIsR0FBdEJyRCxFQUFBOFEsRUFBQTlMLGVBQUFqQyxHQUFBNUMsRUFDQXlCLEVBQUFBLGVBQW1CNkosR0FBUXpMLEVBQTNCZCxFQUFBOEYsZUFBQWpDLEdBQUE1QyxFQS9DMkIsRUFBcEI1QixFQUFTa1QsV0FFYm5FLEdBQVF0TyxFQUFJZ0csZUFBZ0I4TCxFQUFJOUwsZUFBZ0J6RyxFQUFTa1QsVUFrRDNEbkUsR0FBSXJFLEVBQVFsSyxlQUFaRyxFQUFBOEYsZUFBQXpHLEVBQUFrVCxVQUNBbkUsR0FBSThELEVBQUFBLGVBQUpwUyxFQUFBZ0csZUFBQXpHLEVBQUFrVCxXQUlDOVAsRUFBQUEsY0FBbUJ5UCxDQUZwQnBTLEVBQUFnRyxlQTdDRThMLEVBQUk5TCxlQW1ETDlGLEVBQUE4RixrQkFJZ0MsSUFOMUJ0RCxFQU1LdUgsY0FBTHBILElBRU53RixHQUFBckksRUFBQThSLEVBQUE1UixFQUFBLEVBQUEsRUFBQSxFQUFBb0QsRUFBQS9ELEdBdkNEZ0IsRUFBVW1TLE1BQU83UCxJQVVsQmpCLEVBQVN5SyxhQUFjLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxRQTdIckMxTSxRQUFRZ1QsTUFBTyw2RUFra0NoQmpVLE1BQUFrVSxpQkFBd0I3TyxXQUV2QjhPLEtBQUFBLEdBQUFBLEVBN0xGL1QsS0FBS2dVLE9BQVMsS0FnTVpDLEtBQUFBLEVBQUFBLEVBRUFqVSxLQUFBa1UsWUFBQSxHQTFMSHRVLE1BQU02UCxlQUFpQixXQUV0QnpQLEtBQUs2TixHQUFLLEVBb01SN04sS0FBQXNGLEdBQUEsSUFBQTFGLE1BQUE4UCxpQkFqTUYxUCxLQUFLZ0ksR0FBSyxJQUFJcEksTUFBTThQLGlCQW1NbkIxUCxLQUFBd0osR0FBUzJLLElBQUFBLE1BQVdsUCxpQkFFbkJ3SCxLQUFBQSxZQUFBLElBQUE3TSxNQUFBc0UsUUFoTUZsRSxLQUFLZ0osbUJBQXFCLENBQUUsSUFBSXBKLE1BQU1zRSxRQUFXLElBQUl0RSxNQUFNc0UsUUFBVyxJQUFJdEUsTUFBTXNFLFNBb00vRWxFLEtBQUFvVSxvQkFBU0MsRUFFUnJVLEtBQUFXLE1BQVEyVCxJQUFIMVUsTUFBZU0sTUFsTXRCRixLQUFLUyxTQUFXLEtBb01kK1AsS0FBQUEsSUFBVSxDQUFWLElBQWdCbEwsTUFBRzRCLFFBQW5CLElBQUF0SCxNQUFBMlUsUUFBQSxJQUFBM1UsTUFBQTJVLFNBRUEvRCxLQUFBQSxFQUFBQSxFQWxNRnhRLEtBQUtrVSxZQUFjLEdBME1qQnRVLE1BQUE4UCxpQkFBY3hJLFdBbE1oQmxILEtBQUsrSyxTQUFXLElBQUluTCxNQUFNc0UsUUF5TXpCbEUsS0FBQTBJLGNBQUEsSUFBMEI5SSxNQUFBc0UsUUF2TTNCbEUsS0FBS2tILGVBQWlCLElBQUl0SCxNQUFNNFUsUUEwTTlCeFUsS0FBQXNVLFNBQVNHLEdBSVRuUCxNQUFHNEIsaUJBQWV4RyxVQUFTcUssS0FBVzJKLFNBQXRDN0UsR0F0TUY3UCxLQUFLMEksY0FBY2hJLEtBQU1tUCxFQUFPbkgsZUF5TTlCMUksS0FBQWtILGVBQWtCQSxLQUFBQSxFQUFiQSxpQkFNSnlOLE1BQUFBLGVBQVFDLFdBRVJELEtBQUFBLEdBQU1yUCxFQUVOcVAsS0FBQUEsR0FBQSxJQUFVeFMsTUFBS3lQLGlCQUNmK0MsS0FBQUEsR0FBTVQsSUFBQUEsTUFBTnhFLGlCQUVBaUYsS0FBQUEsYUFBaUJYLENBQUFBLElBQUFBLE1BQU92VCxNQUF4QixJQUFBYixNQUFBTSxPQXZNSEYsS0FBS1MsU0FBVyxLQUVoQlQsS0FBS3lOLEVBQUksRUF5TUxrSCxLQUFBQSxZQUFNdk4sR0FTUnhILE1BQUFvUSxpQkFBQSxXQUVEaFEsS0FBQTZOLEdBQVNnSCxFQUVSN1UsS0FBQWdVLE9BQVNTLEtBRVR6VSxLQUFBdUYsRUFBSWlFLEVBMU1OeEosS0FBS2lGLEVBQUksRUE0TVBqRixLQUFBeU4sRUFBSzRHLEVBRUxyVSxLQUFBdUUsU0FBY3VRLEVBMU1oQjlVLEtBQUtnRixNQUFRLElBQUlwRixNQUFNMlUsUUFFdkJ2VSxLQUFLUyxTQUFXLEtBNE1ic1UsS0FBQUEsWUFBV2YsR0FyTWZwVSxNQUFNa0MsVUFBWSxXQUVqQixJQUFJa1QsRUFBUzlFLEVBNE1WNkUsRUFBTS9JLEVBQ04rSSxFQUFBQSxFQTFNRkosRUFBT00sR0E0TUwzRSxFQUFNNEUsR0FlTmxVLEdBOU53Qm1VLEVBQWMsR0FBSUMsRUFBb0IsRUE0TTVDQyxHQUFsQixHQUFzQzdHLEVBQXRDLEVBQ0E4RyxFQUFrQjNJLEdBQWM0SSxFQUFlaEssRUExTTlCOEUsRUFBWSxHQUFJbUYsRUFBa0IsRUE0TW5EakYsRUFBK0IsR0FBQWtGLEVBQUEsRUFFOUJ6VSxHQUFJZ0ssQ0FBUytKLFFBQU0vTCxHQUFBQSxPQUFBQSxHQUFvQjBNLFNBQXZDLElBRUExSyxHQUFPMkIsSUFBQUEsTUFBQUEsUUExTVZnSixHQUFXLElBQUkvVixNQUFNNFUsUUE2TWxCb0IsRUFBR1AsSUFBSHpWLE1BQW1CaVcsS0FBQUEsSUFBV0gsTUFBOUJ4UixTQUFBLEdBQUEsR0FBQSxHQUFBLElBQUF0RSxNQUFBc0UsUUFBQSxFQUFBLEVBQUEsSUFFQTRSLEVBQUEsSUFBQWxXLE1BQUFtVyxLQTNNSHZGLEVBQVcsSUFBSUMsTUFBTyxHQUV0QnVGLEdBQWMsSUFBSXBXLE1BQU1xVyxRQTZNdEJsQixHQUFpQmYsSUFBT3ZULE1BQXhCd1YsUUFJQXRGLEdBQUEsSUFBQS9RLE1BQUFxVyxRQTNNRkMsR0FBZ0IsSUFBSXRXLE1BQU0wRSxRQWdOekI2UixHQUFBQSxJQUFXQSxNQURMQyxRQUdOL0IsR0FBeUJBLElBQUFBLE1BQUFBLFFBQ3pCZ0MsR0FBc0JBLElBQUFBLE1BQUFBLFFBSXRCbEMsS0FBQUEsY0FSTSxTQUFBdEQsRUFBQStCLEdBVU5pQyxRQUFBQSxLQUFBQSw4REFWTWhFLEVBQVBDLFFBQUE4QixJQS9MRDVTLEtBQUtzVyxnQkFBa0IsU0FBV3pGLEVBQVErQixHQUV6Qy9SLFFBQVFnUixLQUFNLGtFQWdOZGhCLEVBQUttRCxVQUFBcEIsSUFJSjVSLEtBQUFBLFdBQVl1VixXQTdNYjFWLFFBQVFnVCxNQUFPLHFFQU1oQixJQXdhSzJDLEdBQVMvQixJQXhhRyxXQW1OZixJQUFBZ0MsRUFBWUMsR0FoTlRDLEVBQVMsR0FrTlpDLEVBQUFBLEdBL01HNUMsRUFBUyxLQW1OVDZDLEVBQVc3QyxLQUVmdUIsRUFBaUJ0SyxJQUFJNEwsTUFBU2pHLFFBaUI5Qm9FLFNBQVFkLEVBQWNGLEdBRXRCaFQsSUFBQUEsRUFBWThWLEVBQVFDLFNBRXBCck8sRUFBQW1ILEVBQUFuSCxjQXBOS3hCLEVBQWlCMkksRUFBTzNJLGVBRTVCd0IsRUFBY2hJLEtBQU1xSyxHQUFXMkosYUFBY3NDLElBc045Q0MsRUFBQXZXLEtBQUFnSSxHQUFBZ00sYUFBQWhFLElBRUF3RSxJQUFBQSxFQUFBQSxFQUFBaE8sRUFBQWdRLEVBRUFsVyxFQUFZa1MsR0FBU3RDLEVBcE5wQjFKLEVBQWVqQyxHQUFLa1MsRUFzTnJCalEsRUFBV2tRLEdBQU5ELEVBbk5KdEgsRUFBT3lFLFNBQWdDLEdBQXRCcE4sRUFBZTNCLEdBQVkyQixFQUFlM0IsR0FBSyxJQXNOeEM4TixHQUF6QjJDLEVBQWtCcEQsR0FBT1MsRUFBekJwTyxHQUFBLElBQ3NCb1MsR0FBdEIzRyxFQUFBQSxHQUFzQjJHLEVBQXlCQyxHQUFBQSxFQWdDOUNuSCxTQUFBQSxFQUFBN0ssRUFBQTBDLEVBQUF3QixHQUVBLE9BQUt3SyxJQUFBQSxFQUFBQSxVQUErQixJQUFQdUQsRUFBQUEsVUFBTyxJQUFBL04sRUFBQThLLFVBRW5DOUQsRUFBS2dILEdBQUFBLEVBQUFBLGVBck5OaEgsRUFBVSxHQUFNeEksRUFBR2QsZUF1TmpCc0osRUFBSWlILEdBQUFBLEVBQWFELGVBcE5aNVQsRUFBU3dQLGNBQWUwQyxFQUFhM0MsY0FBZTNDLEtBSTVELFNBQVM2RixFQUFzQi9RLEVBQUkwQyxFQUFJd0IsR0FFdEMsT0FBV0EsRUFBR3RDLGVBQWUzQixFQUFJRCxFQUFHNEIsZUFBZTNCLElBdU5oRGlSLEVBQUFBLGVBQXVCa0IsRUFBQUEsRUFBQUEsZUFBZ0JBLElBRXZDbE8sRUFBQXRDLGVBQUFqQyxFQUFBSyxFQUFBNEIsZUFBQWpDLElBdE5JK0MsRUFBR2QsZUFBZTNCLEVBQUlELEVBQUc0QixlQUFlM0IsR0FBUSxFQXVGeEQsTUFBTyxDQXVPSGlSLFVBMUxIbUIsU0FBZWQsR0EvTWZwVyxHQW1ORHVULEVBQUFqRixHQW5ObUJ0TyxTQUVsQjhVLEVBQWFxQyxnQkFBaUI1RCxFQUFPMUksYUFzTnRDMEosRUFBUW5ILE9BQUttRyxFQUNiZ0IsRUFBUWhCLE9BQVNBLEVBbk5oQnZILEVBQUltRSxPQUFTLEdBcVlWcUQsY0FBQUEsRUF0T0hJLHdCQUF5QkEsRUF3T3ZCZ0MscUJBQWlCd0IsRUF0T25CQyxXQTZFRCxTQUFBdlMsRUFBQU4sRUFBQXdJLElBRUF5QyxFQUFBQSxNQXBOU25GLFNBQVMxRixJQUFLRSxFQUFHTixFQUFHd0ksR0F1TjdCek0sRUFBWXVWLElBc0pSd0IsV0FsSkosU0FBcUJ4UyxFQUFyQk4sRUFBNEJ3SSxHQUUzQnpNLEVBQUFBLEtBQVk4VixFQUFBQSxFQUFRa0IsSUF0RnBCQyxVQTNIRCxTQUFvQnpGLEVBQUdDLEVBQUd6RCxHQUV6QjJILEVBQU9JLEtBQU12RSxFQUFHQyxFQUFHekQsSUFpV2hCdk8sT0F2SUgsU0FBZXVULEVBQUFBLEdBRWZ3QyxFQUFBQSxLQUFBQSxFQUFXTCxJQWpHWCtCLFNBNUZELFNBQW1CMUosRUFBR1EsR0FFckIsSUFBSTFKLEVBQUttUCxHQUFhakcsR0F3TmxCZ0ksRUFBQUEsR0FBV3VCLEdBTWJ6UyxFQUFBNEIsZUFBZ0IwTyxLQUFPNVAsRUFBQUEsVUFBWTBPLGFBQUEvRCxJQXhOckMzSSxFQUFHZCxlQUFleEcsS0FBTXNILEVBQUcrQyxVQUFXMkosYUFBYy9ELEtBRU0sSUFBckR3SCxHQUFVN1MsRUFBRzRCLGVBQWdCYyxFQUFHZCxrQkE0TmpDc1AsRUFBQUEsZUFBV3JDLGVBQXVCdUIsRUFBTHBRLEVBQTdCNEIsZUFBQWdRLEdBRUFsUCxFQUFBZCxlQUFBdUUsZUFBQSxFQUFBekQsRUFBQWQsZUFBQWdRLElBeE5IdkMsRUFBUUMsTUE0TkY0QyxHQUFBQSxFQUFTWSxHQTFOZnpELEVBQU1yUCxHQUFHNUUsS0FBTTRFLEdBNE5icVAsRUFBSTBELEdBQUFBLEtBQUFBLEdBMU5OMUQsRUFBTWxILEVBQUl0TCxLQUFLeVAsSUFBS3RNLEVBQUc0QixlQUFldUcsRUFBR3pGLEVBQUdkLGVBQWV1RyxHQTROekRrSCxFQUFLMkQsWUFBQXRFLEVBQW9CRSxZQUV4QlMsRUFBQWxVLFNBQUF1VCxFQUFxQnNFLFNBRXBCdEUsRUFBSXVFLFNBQVFELGVBQVoxWSxNQUFBNkksZUFFQWtNLEVBQUF2TixhQUFjbVIsR0FBTUMsVUFBV0QsRUFBY0EsRUFBUkMsR0ExTnhDN0QsRUFBTXZOLGFBQWMsR0FBSWlPLFVBQVdzQixFQUFZLEVBQUozSCxJQWtPekNoTyxHQUFNa1MsU0FBQTZELEtBQUFwQyxLQXdFUEUsYUFoRUMsU0FBQXJHLEVBQUFRLEVBQUFDLEdBOU5KLElBQUkzSixFQUFLbVAsR0FBYWpHLEdBa09uQnhHLEVBQU15TSxHQUFXeEosR0FoT2hCekIsRUFBS2lMLEdBQWF4RixHQW9PbEIsSUFBQSxJQUFBb0YsRUFBQS9PLEVBQUEwQyxFQUFBd0IsS0F6RUgvSSxFQTZFWStXLE9BQUFBLE1BQUFBLGFBQXFDLElBQVhpQixFQUFXblQsRUFBQTBDLEVBQUF3QixJQUFBLEVBRWhEdUwsRUFBSTNLLE1BRUFzTyxHQUFBQSxFQUFBQSxHQW5PTDNELEVBQU16UCxHQUFHNUUsS0FBTTRFLEdBcU9kNFEsRUFBQUEsR0FBQUEsS0FBYzBCLEdBbk9mN0MsRUFBTXZMLEdBQUc5SSxLQUFNOEksR0FxT2R1TCxFQUFJdFUsR0FBQUEsRUFBQUEsZUFBa0JBLEVBQXRCdUgsRUFBQWQsZUFBQXVHLEVBQUFqRSxFQUFBdEMsZUFBQXVHLEdBQUEsRUFuT0RzSCxFQUFNYixZQUFjRixFQUFPRSxZQUkzQmEsRUFBTS9JLFlBQVlxSixVQUFXb0IsRUFBYSxFQUFKakksR0FxT3BDdUcsRUFBSWxGLFlBQVN6RixhQUFibUwsR0FBQWhLLFlBRUFwSCxJQUFBQSxJQUFBQSxFQUFTekQsRUFBTW1QLEVBQUFBLEVBQWY2RixJQUFBLENBRUEsSUFBQTFLLEVBQUt2SyxFQUFTa1ksbUJBQXdCakQsR0FuT3ZDMUssRUFBT3FLLFVBQVdvQixFQUEwQixFQUFqQlosVUFBV0gsSUFxT3BDMUssRUFBSTJOLGFBQWVuQixHQUFTbUIsWUFsT3JCNUQsRUFBTXRJLElBQUtpSixHQXFPbEJMLFVBQVV1RCxFQUF5QmhJLEVBQWxCaUksVUFBS0YsSUFJckI1RCxFQUFBWCxvQkFBdUIsRUFFdkJXLEVBQUF0VSxTQUFha1ksRUFBQUEsU0FsT2pCM1gsR0FBWWtTLFNBQVM2RCxLQUFNaEMsT0FvU3hCLFNBQUE2QixHQUFLdEMsSUFFSnRJLEVBMk9QLFdBRUMsR0FBS2tFLElBQWlCa0YsRUFVdEIsT0FBT0QsRUFBYWpGLEtBUm5CLElBQUk4RCxFQUFTLElBQUlwVSxNQUFNa1UsaUJBSXZCLE9BSEFxQixFQUFZNEIsS0FBTS9DLEdBQ2xCb0IsSUFDQWxGLElBQ084RCxFQW5QRmhJLElBRUE2QixHQUFBbUcsRUFBQW5HLEdBM09ObUgsRUFBUWhCLE9BQVNBLEVBK09aN1AsR0FBQXdILHNCQUFBcUksRUFBQTFJLGFBNU9MbkgsR0FBU3VRLGFBQWNoRSxJQThPbkJxRSxFQUFBQSxFQUFNWCxHQUFBQSxFQTVPVlksRUFBUWQsWUFBY0YsRUFBT0UsWUFFN0JsVCxHQUFZOFYsUUFBUUMsS0FBTS9CLEdBOGEzQixTQUFTOEQsR0FBV25ELEVBQVUzQixFQUFRcEIsR0FFckMsSUFBSXVFLEVBQU8sRUFBSXhCLEVBQVN1QixFQUV4QnZCLEVBQVNsSSxHQUFLMEosR0FFTyxHQUFoQnhCLEVBQVNsSSxHQUFZa0ksRUFBU2xJLEdBQUssS0FFdkM2QyxFQXdGRixXQUVDLEdBQUs0RSxLQUFpQk8sRUFVdEIsT0FBT2xGLEVBQWEyRSxNQVJuQixJQUFJNkQsRUFBUyxJQUFJblosTUFBTW9RLGlCQUl2QixPQUhBTyxFQUFZd0csS0FBTWdDLEdBQ2xCdEQsSUFDQVAsS0FDTzZELEVBaEdHQyxJQUNGbkwsR0FBS21HLEVBQU9uRyxHQUNwQnlDLEVBQVEvSyxFQUFJb1EsRUFBU3BRLEVBQUk0UixFQUN6QjdHLEVBQVFyTCxFQUFJMFEsRUFBUzFRLEVBQUlrUyxFQUN6QjdHLEVBQVE3QyxFQUFJa0ksRUFBU2xJLEVBQ3JCNkMsRUFBUTRELFlBQWNGLEVBQU9FLFlBQzdCNUQsRUFBUTBELE9BQVNBLEVBRWpCMUQsRUFBUS9MLFNBQVd5UCxFQUFPelAsU0FFMUIrTCxFQUFRdEwsTUFBTU8sRUFBSXlPLEVBQU9oUCxNQUFNTyxFQUFJcEQsS0FBSzhXLElBQUszSSxFQUFRL0ssR0FBTW9RLEVBQVNwUSxFQUFJcU4sRUFBTzBFLGlCQUFpQnBFLFNBQVUsS0FBVXlDLEVBQVN1QixFQUFJdEUsRUFBTzBFLGlCQUFpQnBFLFNBQVUsTUFDbks1QyxFQUFRdEwsTUFBTUMsRUFBSStPLEVBQU9oUCxNQUFNQyxFQUFJOUMsS0FBSzhXLElBQUszSSxFQUFRckwsR0FBTTBRLEVBQVMxUSxFQUFJMk4sRUFBTzBFLGlCQUFpQnBFLFNBQVUsS0FBVXlDLEVBQVN1QixFQUFJdEUsRUFBTzBFLGlCQUFpQnBFLFNBQVUsTUFFbks1QyxFQUFRN1AsU0FBV3VULEVBQU92VCxTQUUxQk8sR0FBWWtTLFNBQVM2RCxLQUFNekcsSUF3QjdCLFNBQVM0SSxLQUVSLEdBQUsvSSxJQUFpQkMsRUFVdEIsT0FBT3FFLEdBQWF0RSxLQVJuQixJQUFJTixFQUFTLElBQUlqUSxNQUFNOFAsaUJBSXZCLE9BSEErRSxHQUFZc0MsS0FBTWxILEdBQ2xCTyxJQUNBRCxJQUNPTixFQVFULFNBQVNzSixLQUVSLEdBQUtsQyxJQUFlbUMsRUFVcEIsT0FBTzlELEVBQVcyQixLQVJqQixJQUFJb0MsRUFBTyxJQUFJelosTUFBTTZQLGVBSXJCLE9BSEE2RixFQUFVeUIsS0FBTXNDLEdBQ2hCRCxJQUNBbkMsSUFDT29DLEVBU1QsU0FBU3pFLEtBRVIsR0FBS0ssS0FBZU8sRUFVcEIsT0FBT25GLEVBQVc0RSxNQVJqQixJQUFJcUUsRUFBTyxJQUFJMVosTUFBTW1RLGVBSXJCLE9BSEFNLEVBQVUwRyxLQUFNdUMsR0FDaEI5RCxJQUNBUCxLQUNPcUUsRUEwQlQsU0FBU0MsR0FBYS9LLEVBQUdRLEdBRXhCLE9BQUtSLEVBQUUwRixjQUFnQmxGLEVBQUVrRixZQUVqQjFGLEVBQUUwRixZQUFjbEYsRUFBRWtGLFlBRWQxRixFQUFFZixJQUFNdUIsRUFBRXZCLEVBRWR1QixFQUFFdkIsRUFBSWUsRUFBRWYsRUFFSmUsRUFBRVgsS0FBT21CLEVBQUVuQixHQUVmVyxFQUFFWCxHQUFLbUIsRUFBRW5CLEdBSVQsRUFNVCxTQUFTc0ssR0FBVXFCLEVBQUlDLEdBRXRCLElBQUlDLEVBQVMsRUFBR0MsRUFBUyxFQUt4QkMsRUFBVUosRUFBRy9MLEVBQUkrTCxFQUFHdEMsRUFDcEIyQyxFQUFVSixFQUFHaE0sRUFBSWdNLEVBQUd2QyxFQUNwQjRDLEdBQVdOLEVBQUcvTCxFQUFJK0wsRUFBR3RDLEVBQ3JCNkMsR0FBV04sRUFBR2hNLEVBQUlnTSxFQUFHdkMsRUFFdEIsT0FBZ0IsR0FBWDBDLEdBQTJCLEdBQVhDLEdBQTBCLEdBQVZDLEdBQXlCLEdBQVZDLEtBS3RDSCxFQUFVLEdBQUtDLEVBQVUsR0FBU0MsRUFBUyxHQUFLQyxFQUFTLEtBU2pFSCxFQUFVLEVBR2RGLEVBQVN2WCxLQUFLeVAsSUFBSzhILEVBQVFFLEdBQVlBLEVBQVVDLElBRXRDQSxFQUFVLElBR3JCRixFQUFTeFgsS0FBS2lELElBQUt1VSxFQUFRQyxHQUFZQSxFQUFVQyxLQUk3Q0MsRUFBUyxFQUdiSixFQUFTdlgsS0FBS3lQLElBQUs4SCxFQUFRSSxHQUFXQSxFQUFTQyxJQUVwQ0EsRUFBUyxJQUdwQkosRUFBU3hYLEtBQUtpRCxJQUFLdVUsRUFBUUcsR0FBV0EsRUFBU0MsT0FJM0NKLEVBQVNELEtBVWJGLEVBQUdRLEtBQU1QLEVBQUlDLEdBQ2JELEVBQUdPLEtBQU1SLEVBQUksRUFBSUcsSUFFVixJQWpuQlYzWixLQUFLaVQsYUFBZSxTQUFXTixFQUFPQyxFQUFRcUgsRUFBYWhKLEdBSTFEaUUsR0E4T0tELEdBRkNnQyxFQUFBLElBS0ZsQyxHQUFNdFUsU0FBV0EsT0FBakIsS0FFQXNVLEVBQUFxQyxZQUE4QjNKLEVBQUl6RixvQkFDbEMsT0FBQStNLEVBQU1iLFFBQWNGLEVBQU9FLG9CQUUzQmxULEdBQUFBLEtBQVlrUyxFQUFTNkQsb0JBRXJCckcsR0FBQTJHLGlCQUFBekUsRUFBQTBFLGlCQUFBdEIsSUFJRmtFLEdBQU1DLGNBQUtuRyxJQUlYOUQsRUFBS3NILEVBRUp4VyxHQUFJeVcsUUFBYUQsT0FBU0MsRUFqUDdCelcsR0FBWXVWLE9BQU8zRixPQUFTLEVBdEU3QixTQUFTK0csRUFBZTNELEdBRXZCLElBQXdCLElBQW5CQSxFQUFPTSxRQUFaLENBRUEsR0FBS04sYUFBa0JwVSxNQUFNd2EsTUFFNUJwWixHQUFZdVYsT0FBT1EsS0FBTS9DLFFBMk9yQixHQUFLYyxhQUFldUYsTUFBWS9GLE1BQUFBLGFBQW1CMVUsTUFBQTBhLE1BQUF0RyxhQUFBcFUsTUFBQTJhLE9BQUEsQ0F2T3ZELElBQWlDLElBQTVCdkcsRUFBT3ZULFNBQVM2VCxRQUFvQixPQTJPdENTLElBQUEsSUFBQUEsRUFBUW9FLGdCQUFSLElBQUFlLEdBQUFNLGlCQUFBeEcsR0FBQSxPQUVBZSxHQUFBZixRQUVBZSxHQUFBZixhQUFBcFUsTUFBQTZhLE9BQUEsQ0F4T0gsSUFBaUMsSUFBNUJ6RyxFQUFPdlQsU0FBUzZULFFBQW9CLE9BMk90Q1MsSUFBd0JzRSxJQUF4QnRFLEVBQU0vSSxnQkFBTixJQUFBa08sR0FBQVEsaUJBQUExRyxHQUFBLE9BRUE0QyxHQUFLdEMsR0FwT1QsSUFGQSxJQUFJdUMsRUFBVzdDLEVBQU82QyxTQUVabkIsRUFBSSxFQUFHekssRUFBSTRMLEVBQVNqRyxPQUFROEUsRUFBSXpLLEVBQUd5SyxJQUU1Q2lDLEVBQWVkLEVBQVVuQixLQTRDMUJpQyxDQUFlaEYsSUFFTSxJQUFoQnNILEdBRUpqWixHQUFZOFYsUUFBUWtCLEtBQU11QixJQTJQdEIsSUFGQSxJQUFBekMsRUFBSUgsR0FBU2MsUUFFUGtELEVBQUlqRixFQUFBQSxFQUFPekssRUFBSTBMLE9BQXJCZ0UsRUFBb0NqRixFQUFwQ2lGLElBQUEsQ0FFQ25FLElBQUFBLEVBQUFBLEVBQVd5QixHQUFXdEIsT0FFdEJhLEVBQUF4RCxFQUFBd0QsU0E1T0wsR0FOQWhCLEdBQVdMLFVBQVduQyxHQUV0QmdELEdBQWVoRCxFQUFPMUksWUFFdEI2RSxFQUFlLEVBRVY2RCxhQUFrQnBVLE1BQU0yWCxNQXdQeEIsR0FBQUMsYUFBQTVYLE1BQUFnYixlQUFBLENBcFBILElBQUluRCxFQUFhRCxFQUFTQyxXQXdQeEJhLEVBQVd0RSxFQUFBQSxPQUVYLFFBQXVCMEQsSUFBdkJELEVBQU0xTSxTQUFvQyxTQU0xQyxJQUpDeUwsSUFJRGQsRUFBQSxFQUFBekssR0FKQ3VMLEVBQVcwQixFQUFheEMsU0FBeEJtRixPQUlEakssT0FBQThFLEVBQUF6SyxFQUFBeUssR0FBQSxFQTlDSGMsR0FrRFlnQixXQUFBQSxFQUFvQjVYLEdBQU02WSxFQUFXL0MsRUFBQSxHQUFBZ0MsRUFBQWhDLEVBQUEsSUFJaEQsUUFBNkIxUCxJQUF4Qm9FLEVBQVN3RyxPQUVkdEwsQ0FBQUEsSUFBSzRULEVBQUFBLEVBQUxsTyxPQUFBNlAsTUF6UEMsSUFBVW5GLEVBQUksRUFBR3pLLEVBQUl3TCxFQUFRN0YsT0FBUThFLEVBQUl6SyxFQUFHeUssR0FBSyxFQUVoRGMsR0FBV3VCLFdBQVl0QixFQUFTZixHQUFLZSxFQUFTZixFQUFJLEdBQUtlLEVBQVNmLEVBQUksSUFpUXJFLFFBQUExUCxJQUFLeVIsRUFBWXFELEdBRWpCOVMsQ0FBQUEsSUFBQUEsRUFBS3lNLEVBQWF0RSxHQUFBQSxNQUVsQjRLLElBQUFBLEVBQUFBLEVBQUFBLEVBQUFBLEVBQUFBLE9BQThCcmEsRUFBTTRFLEVBQUc0QixHQUFBQSxFQXpQdENzUCxHQUFXckMsT0FBUTFILEVBQUtpSixHQUFLakosRUFBS2lKLEVBQUksSUFNeEMsR0FBd0IsT0FBbkI4QixFQUFTWSxNQUFpQixDQUU5QixJQUFJQyxFQUFVYixFQUFTWSxNQUFNeUMsTUE2UDVCbEcsR0FBU3pOLEVBQVR5TixFQUFTek4sT0F6UFQsSUFBTSxJQUFJdUwsRUFBSSxFQUFHQSxFQUFJNkYsRUFBTzFILE9BQVE2QixJQTZQcENrQyxDQUFBQSxJQUFBQSxFQUFNVCxFQUFjRixHQUVwQlcsSUFBTWxVLEVBQU44WCxFQUFpQnZFLE1BQU92VCxFQUF4QjhYLEVBQUFDLE1BQUFELEVBQUF5QyxNQUFBdEYsRUFBQXpLLEVBQUF5SyxHQUFBLEVBRUFjLEdBQVkvVixhQUFTMkcsRUFBaEJzTyxHQUFpQzlWLEVBQU02SSxFQUFBQSxHQUFlNFAsRUFBQTNDLEVBQUEsU0FXNUQsSUFBQUEsRUFBQSxFQUFBekssRUFBQW9OLEVBQUF6SCxPQUFBOEUsRUFBQXpLLEVBQUF5SyxHQUFBLEVBekdJYyxHQTZHS3hDLGFBQWtCcFUsRUFBTTJhLEdBQVNsQyxFQUFBM0MsRUFBQSxHQUFBMkMsRUFBQTNDLEVBQUEsU0FRM0MsSUFBVXVGLEVBQUosRUFBV0MsRUFBSzlRLEVBQVN3RyxPQUFRcUssRUFBdkN2RixFQUErQ3VGLEVBQU92RixHQUFBLEVBRXJEYyxHQUFJM0csYUFBSjZGLEVBQUFBLEVBQUEsRUFBQUEsRUFBQSxRQU9BLEdBQUE4QixhQUFBNVgsTUFBQTZZLFNBQUEsQ0EvUEQsSUFBSXJPLEVBQVdvTixFQUFTcE4sU0FtUXBCcU4sRUFBQUEsRUFBYUQsTUFqUWJrQixFQUFnQmxCLEVBQVNrQixjQUFlLEdBRTVDeEMsR0FBYzBCLGdCQUFpQlosSUF3UTdCckIsSUF0UUYsSUFBSWxWLEVBQVd1VCxFQUFPdlQsU0FFbEIwYSxFQUFrQjFLLE1BQU0ySyxRQUFTM2EsR0FvUW5Da1YsRUFBU2pCLEVBQUFBLEVBQUFBLEVBQWMvRCxPQUFBQSxFQUFBQSxFQUFBQSxJQUF2QixDQUVBbUksSUFBQUEsRUFBV25ELEVBQVUzQixHQWhDbEIsR0FvQ0o3UCxHQUFBekQsS0FBQW1QLElBSTJCalEsSUFBdkJhLEVBQUt1VCxhQUtYOEUsSUFIQW5ELElBQUFBLEVBQWNxQixFQUFhOUQsYUFDM0J5QyxFQUF1QmpGLEVBQUFBLHNCQUVaaUYsRUFBQUEsRUFBVTNCLEVBQUFBLEVBQXJCcEQsT0FBQWdJLEVBQUFDLEVBQUFELElBQUEsQ0FJRCxJQUFBeUMsRUFBQUMsRUFBQTFDLEdBRUkzSCxHQUFMLElBQUtBLEVBQUFBLENBRUpqUSxJQUVBdWEsRUFGWXJJLEVBQWVxRyxHQUUzQm5QLFNBQUE2USxHQUVEOVcsR0FBT25ELElBQVB1YSxFQUFBaFcsRUFBQXNLLEVBQUF0SyxHQUFBOFYsRUF0YURsWCxHQUFBYyxJQUFBc1csRUFBQXRXLEVBQUE0SyxFQUFBNUssR0FBQW9XLEVBK0pPbFgsR0FBU3NKLElBQU84TixFQUFhOU4sRUFBSW9DLEVBQU9wQyxHQUFNNE4sR0FNaEQ3RSxHQUFXc0IsV0FBWTNULEdBQVNvQixFQUFHcEIsR0FBU2MsRUFBR2QsR0FBU3NKLEdBOFEzRDZDLElBQVF6QyxJQUFSc0IsRUFBYTZFLEVBQUFBLEVBQWI5QyxFQUFBTixPQUFBekIsRUFBQTBJLEVBQUExSSxJQUFBLENBRUFtQixJQUFBQSxFQUFZcUYsRUFBUzFRLEdBcFFsQixRQUFrQmUsS0FzUXJCc0ssR0FBNkI0RCxJQUFyQkEsRUFDUjVELEVBQUE3UCxTQUFBNFksRUFBQW1DLGVBelFPeEgsRUFBT3ZULFVBRVgsQ0E0UUg2UCxJQUFBQSxFQUFjckwsRUFBSStPLEtBRWxCMUQsRUFBUTdQLEdBQVd1VCxFQUFPdlQsR0F6UW5CdUgsRUFBS3lNLEdBQWE0RSxFQUFLckssR0EyUTlCaE8sRUFBWWtTLEdBQVptRyxFQUEyQi9JLEdBSTVCLElBQUEsSUFBQWtHLEdBQUFuQyx3QkFBQS9PLEVBQUEwQyxFQUFBd0IsR0FBQSxDQUVELElBQUE4SyxFQUFBa0MsR0FBQUgscUJBQUEvUSxFQUFBMEMsRUFBQXdCLEdBRUEsR0FBU2lTLElBQUFBLE1BQUFBLFdBQXNCLENBRXpCdkwsR0FBQUEsSUFBQUEsTUFBaUJrRixZQUFvQixJQUExQ2QsRUFBMEMsU0EzUXJDLEdBQUtRLElBQVNsVixNQUFNeWEsV0FBd0IsSUFBWi9GLEVBQW1CLFVBZ1J2RHBFLEVBQUFBLE1BR0FyQyxHQUFBbUcsRUFBQW5HLEdBNVFHa0gsRUFBTXpQLEdBQUc1RSxLQUFNNEUsR0E4UW5CeVAsRUFBT0ksR0FBQUEsS0FBYWpGLEdBRXBCNkUsRUFBQXZMLEdBQUE5SSxLQUFBOEksR0FFRHVMLEVBQVNtRSxZQUFBQSxLQUFURyxFQUErQnJPLFNBRVJvRixJQUFqQkQsR0FBaUJDLElBQW9CeFEsTUFBQXlhLFVBQUF2RixJQUFBbFYsTUFBQThiLFlBRXJDN0wsRUFBQUEsWUFBYWpRLFNBSWpCbVYsRUFBT2xGLFlBQVBsRCxhQUFBdUosSUFBQTNLLFlBTUQsSUFsUkksSUFBSW9RLEVBQW9CdEMsRUFBS3VDLGNBa1JqQ0MsRUFBQSxFQUFBQyxFQUFBM1osS0FBQWlELElBQUF1VyxFQUFBL0ssT0FBQSxHQUFBaUwsRUFBQUMsRUFBQUQsSUFBQSxDQUVELElBQVMxQyxFQUFBQSxFQUFvQm5RLG1CQUFBNlMsR0EvUXZCN1AsRUFBWXRMLEtBQU1pYixFQUFtQkUsS0FFcEIsSUFBWnZILEdBQXVCUSxJQUFTbFYsTUFBTXlhLFVBQVl2RixJQUFTbFYsTUFBTThiLFlBa1IxRXBHLEVBQWdCK0QsU0FLaEJyTixFQUFBVyxhQUFBdUosSUFBQTNLLFlBN1FHd0osRUFBTVgsb0JBQXNCdUgsRUFBa0IvSyxPQUU5QyxJQUFJbUwsRUFBWXJELEVBQWV2SixHQUUvQixRQUFtQm5KLElBQWQrVixFQXFSUjFMLElBQVUwRyxJQUFWaUYsRUFBZ0IxQyxFQUFoQjBDLEVBQUEsRUFBQUEsSUFFQS9HLEVBQUFBLElBQUFBLEdBQUFBLEtBQUFBLEVBQUFBLElBN1FHRixFQUFNcFUsTUFBUTBZLEVBQUsxWSxNQXNSeEJvVSxFQUFTaUUsU0FBQUEsRUFFSDlELEVBQUFBLEdBQUFBLEVBQUFBLGVBQWlCTyxFQUF0QnpOLEVBQTBDZCxlQUFBdUcsRUFBQWpFLEVBQUF0QyxlQUFBdUcsR0FBQSxFQXBSdENzSCxFQUFNYixZQUFjRixFQUFPRSxZQXVSOUIzRCxHQUFZd0csU0FBWkEsS0FBQWhDLFlBT014RSxHQUFBQSxhQUFhMkUsTUFBcEJvRixLQUFBLENBbFJFLEdBRkEzSixHQUEyQjBHLGlCQUFrQjNHLEdBQXVCc0csSUFFL0RRLGFBQW9CNVgsTUFBTWdiLGdCQUk5QixRQUE2QjVVLEtBRnpCeVIsRUFBYUQsRUFBU0MsWUFFVjFNLFNBQXlCLENBNFIzQyxJQUFheUQsRUFBYixFQUFBdkQsR0FGTXlNLEVBQWExSSxFQUFNakUsU0FBQThQLE9BRXpCakssT0FBQThFLEVBQUF6SyxFQUFBeUssR0FBQSxFQXRSSWMsR0FBV3NCLFdBQVlKLEVBQVdoQyxHQUFLZ0MsRUFBV2hDLEVBQUksR0FBS2dDLEVBQVdoQyxFQUFJLElBOFI5RSxRQUFBMVAsSUFBQXlSLEVBQUE5VyxNQUlELENBQUEsSUFBQWdXLEVBQUFjLEVBQUE5VyxNQUFBa2EsTUFFRCxJQUFTMUMsRUFBVCxFQUF1QnNCLEVBQUs5QyxFQUFBL0YsT0FBQThFLEVBQUF6SyxFQUFBeUssR0FBQSxFQUV2QmdFLEdBQUp6QixVQUFBdEIsRUFBQWpCLEdBQUFpQixFQUFBakIsRUFBQSxHQUFBaUIsRUFBQWpCLEVBQUEsSUF0UkksR0FBd0IsT0FBbkI4QixFQUFTWSxNQThSakIyQixJQUFXTixFQUFGLEVBQVNBLEdBRmxCSSxFQUFVckMsRUFOWFksTUFBQXlDLE9BQUFqSyxPQUFBOEUsRUFBQXpLLEVBQUF5SyxHQUFBLEVBVUtrRSxHQUFBMUIsU0FBZ0IyQixFQUFnQkMsR0FBQUEsRUFBaENwRSxFQUErQ3FFLFFBT25ELENBQUEsSUFBQWUsRUFBQTlHLGFBQUFwVSxNQUFBcWMsYUFBQSxFQUFBLEVBRk0sSUFLQXZHLEVBQUEsRUFBQXpLLEVBQUF5TSxFQUFBOUcsT0FBQSxFQUFBLEVBQUE4RSxFQUFBekssRUFBQXlLLEdBQUFvRixFQUVOdEUsR0FBQTBCLFNBQUF4QyxFQUFBQSxFQUFBLFVBU0MsR0FBQThCLGFBQUE1WCxNQUFBNlksU0FBQSxDQUtELEdBQWtCLEtBRmpCck8sRUFBQTRKLEVBQUF3RCxTQUFBcE4sVUFFaUJ3RyxPQUFBLFVBRWpCdEwsRUFBQTRULE1BQ0FRLGVBQW1CQSxLQUFWdFAsRUFBa0IwUCxJQUFXQSxhQUF0Q25KLElBS0FnSixJQWpTS21CLEVBQU85RyxhQUFrQnBVLE1BQU1xYyxhQUFlLEVBQUksRUFpUzlDOVosRUFBS2lELEVBQUt1VSxFQUFBQSxFQUFRRyxPQUFXQSxFQUFBQSxFQUFTQyxLQTdSN0N6VSxFQUFLNFQsTUFpU0hTLGVBQWtCalosS0FBQTBKLEVBQUE2USxJQUFBdkcsYUFBQS9ELElBRXRCLEdBQUFzSyxFQUFBLEdBQUFILElBRUE5UyxFQUFBeU0sR0FBQXRFLEVBQUEsR0FKRDRLLEdBT09yYSxLQUFBNEUsRUFBQTRCLGdCQWhTSmdWLEdBQThCeGIsS0FBTXNILEVBQUdkLGlCQW1TekMsSUFBQWlSLEdBQWF1QixHQUFid0MsTUFHQW5CLEdBQUF0UCxlQUFBLEVBQUFzUCxHQUFBN0QsR0FFQWdGLEdBQUF6USxlQUFBLEVBQUF5USxHQUFBaEYsSUFJRnZDLEVBQUFDLE1BbFNXL0csR0FBS21HLEVBQU9uRyxHQUNsQjhHLEVBQU1yUCxHQUFHNEIsZUFBZXhHLEtBQU1xYSxJQUM5QnBHLEVBQU0zTSxHQUFHZCxlQUFleEcsS0FBTXdiLElBRTlCdkgsRUFBTWxILEVBQUl0TCxLQUFLeVAsSUFBS21KLEdBQThCdE4sRUFBR3lPLEdBQThCek8sR0FDbkZrSCxFQUFNVCxZQUFjRixFQUFPRSxZQUUzQlMsRUFBTWxVLFNBQVd1VCxFQUFPdlQsU0FFbkJ1VCxFQUFPdlQsU0FBUzJHLGVBQWlCeEgsTUFBTTZJLGVBRTNDa00sRUFBTXZOLGFBQWMsR0FBSTFHLEtBQU1zVCxFQUFPd0QsU0FBU2IsT0FBUXNFLElBQ3REdEcsRUFBTXZOLGFBQWMsR0FBSTFHLEtBQU1zVCxFQUFPd0QsU0FBU2IsT0FBUXNFLEVBQUksS0FJM0RqYSxHQUFZa1MsU0FBUzZELEtBQU1wQyxXQVF4QixHQUFLWCxhQUFrQnBVLE1BQU0yYSxRQUluQyxHQUZBNUosR0FBMkIwRyxpQkFBa0IzRyxHQUF1QnNHLElBRS9EUSxhQUFvQjVYLE1BQU02WSxTQUk5QixJQUFVd0MsRUFBSSxFQUFHQyxHQUZiOVEsRUFBVzRKLEVBQU93RCxTQUFTcE4sVUFFQXdHLE9BQVFxSyxFQUFJQyxFQUFJRCxJQUFPLENBRWpEcEwsRUFBU3pGLEVBQVU2USxHQUV2QnRGLEdBQVN0USxJQUFLd0ssRUFBT3RLLEVBQUdzSyxFQUFPNUssRUFBRzRLLEVBQU9wQyxFQUFHLEdBQzVDa0ksR0FBU2pCLGFBQWMvRCxJQUV2Qm1JLEdBQVduRCxHQUFVM0IsRUFBUXBCLFFBSXhCLEdBQUs0RSxhQUFvQjVYLE1BQU1nYixlQUFpQixDQUl0RCxRQUE2QjVVLEtBRnpCeVIsRUFBYUQsRUFBU0MsWUFFVjFNLFNBRWYsQ0FBQSxJQUFJMk0sRUFFSixJQUFVaEMsRUFBSSxFQUFHekssR0FGYnlNLEVBQVlELEVBQVcxTSxTQUFTOFAsT0FFTGpLLE9BQVE4RSxFQUFJekssRUFBR3lLLEdBQUssRUFFbERDLEdBQVN0USxJQUFLcVMsRUFBV2hDLEdBQUtnQyxFQUFXaEMsRUFBSSxHQUFLZ0MsRUFBV2hDLEVBQUksR0FBSyxHQUN0RUMsR0FBU2pCLGFBQWMvRCxJQUV2Qm1JLEdBQVduRCxHQUFVM0IsRUFBUXBCLFVBUXJCb0IsYUFBa0JwVSxNQUFNNmEsU0FFbkM5RSxHQUFTdFEsSUFBSzJSLEdBQWE5RCxTQUFVLElBQU04RCxHQUFhOUQsU0FBVSxJQUFNOEQsR0FBYTlELFNBQVUsSUFBTSxHQUNyR3lDLEdBQVNqQixhQUFjaEUsSUFFdkJvSSxHQUFXbkQsR0FBVTNCLEVBQVFwQixJQVkvQixPQU5zQixJQUFqQjNCLEdBRUpqUSxHQUFZa1MsU0FBUzhFLEtBQU11QixJQUlyQnZZIiwiZmlsZSI6ImpzL2NhbnZhcy1yZW5kZXJlci1hbmQtcHJvamVjdG9yLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gbWluT25TYXZlOiB0cnVlLCBtaW5pZmllcjogdWdsaWZ5LWpzXG52YXIgYmdDb2xvciA9IDB4ZmZmZmZmXG4vKipcbiAqIEBhdXRob3IgbXJkb29iIC8gaHR0cDovL21yZG9vYi5jb20vXG4gKi9cblxuVEhSRUUuU3ByaXRlQ2FudmFzTWF0ZXJpYWwgPSBmdW5jdGlvbiAoIHBhcmFtZXRlcnMgKSB7XG5cblx0VEhSRUUuTWF0ZXJpYWwuY2FsbCggdGhpcyApO1xuXG5cdHRoaXMudHlwZSA9ICdTcHJpdGVDYW52YXNNYXRlcmlhbCc7XG5cblx0dGhpcy5jb2xvciA9IG5ldyBUSFJFRS5Db2xvciggMHhmZmZmZmYgKTtcblx0dGhpcy5wcm9ncmFtID0gZnVuY3Rpb24gKCkge307XG5cblx0dGhpcy5zZXRWYWx1ZXMoIHBhcmFtZXRlcnMgKTtcblxufTtcblxuVEhSRUUuU3ByaXRlQ2FudmFzTWF0ZXJpYWwucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSggVEhSRUUuTWF0ZXJpYWwucHJvdG90eXBlICk7XG5USFJFRS5TcHJpdGVDYW52YXNNYXRlcmlhbC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUSFJFRS5TcHJpdGVDYW52YXNNYXRlcmlhbDtcblRIUkVFLlNwcml0ZUNhbnZhc01hdGVyaWFsLnByb3RvdHlwZS5pc1Nwcml0ZUNhbnZhc01hdGVyaWFsID0gdHJ1ZTtcblxuVEhSRUUuU3ByaXRlQ2FudmFzTWF0ZXJpYWwucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xuXG5cdHZhciBtYXRlcmlhbCA9IG5ldyBUSFJFRS5TcHJpdGVDYW52YXNNYXRlcmlhbCgpO1xuXG5cdG1hdGVyaWFsLmNvcHkoIHRoaXMgKTtcblx0bWF0ZXJpYWwuY29sb3IuY29weSggdGhpcy5jb2xvciApO1xuXHRtYXRlcmlhbC5wcm9ncmFtID0gdGhpcy5wcm9ncmFtO1xuXG5cdHJldHVybiBtYXRlcmlhbDtcblxufTtcblxuLy9cblxuVEhSRUUuQ2FudmFzUmVuZGVyZXIgPSBmdW5jdGlvbiAoIHBhcmFtZXRlcnMgKSB7XG5cblx0Y29uc29sZS5sb2coICdUSFJFRS5DYW52YXNSZW5kZXJlcicsIFRIUkVFLlJFVklTSU9OICk7XG5cblx0cGFyYW1ldGVycyA9IHBhcmFtZXRlcnMgfHwge307XG5cblx0dmFyIF90aGlzID0gdGhpcyxcblx0XHRfcmVuZGVyRGF0YSwgX2VsZW1lbnRzLCBfbGlnaHRzLFxuXHRcdF9wcm9qZWN0b3IgPSBuZXcgVEhSRUUuUHJvamVjdG9yKCksXG5cblx0XHRfY2FudmFzID0gcGFyYW1ldGVycy5jYW52YXMgIT09IHVuZGVmaW5lZFxuXHRcdFx0XHQgPyBwYXJhbWV0ZXJzLmNhbnZhc1xuXHRcdFx0XHQgOiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnY2FudmFzJyApLFxuXG5cdFx0X2NhbnZhc1dpZHRoID0gX2NhbnZhcy53aWR0aCxcblx0XHRfY2FudmFzSGVpZ2h0ID0gX2NhbnZhcy5oZWlnaHQsXG5cdFx0X2NhbnZhc1dpZHRoSGFsZiA9IE1hdGguZmxvb3IoIF9jYW52YXNXaWR0aCAvIDIgKSxcblx0XHRfY2FudmFzSGVpZ2h0SGFsZiA9IE1hdGguZmxvb3IoIF9jYW52YXNIZWlnaHQgLyAyICksXG5cblx0XHRfdmlld3BvcnRYID0gMCxcblx0XHRfdmlld3BvcnRZID0gMCxcblx0XHRfdmlld3BvcnRXaWR0aCA9IF9jYW52YXNXaWR0aCxcblx0XHRfdmlld3BvcnRIZWlnaHQgPSBfY2FudmFzSGVpZ2h0LFxuXG5cdFx0X3BpeGVsUmF0aW8gPSAxLFxuXG5cdFx0X2NvbnRleHQgPSBfY2FudmFzLmdldENvbnRleHQoICcyZCcsIHtcblx0XHRcdGFscGhhOiBwYXJhbWV0ZXJzLmFscGhhID09PSB0cnVlXG5cdFx0fSApLFxuXG5cdFx0X2NsZWFyQ29sb3IgPSBuZXcgVEhSRUUuQ29sb3IoIGJnQ29sb3IgKSxcblx0XHRfY2xlYXJBbHBoYSA9IHBhcmFtZXRlcnMuYWxwaGEgPT09IHRydWUgPyAwIDogMSxcblxuXHRcdF9jb250ZXh0R2xvYmFsQWxwaGEgPSAxLFxuXHRcdF9jb250ZXh0R2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gMCxcblx0XHRfY29udGV4dFN0cm9rZVN0eWxlID0gbnVsbCxcblx0XHRfY29udGV4dEZpbGxTdHlsZSA9IG51bGwsXG5cdFx0X2NvbnRleHRMaW5lV2lkdGggPSBudWxsLFxuXHRcdF9jb250ZXh0TGluZUNhcCA9IG51bGwsXG5cdFx0X2NvbnRleHRMaW5lSm9pbiA9IG51bGwsXG5cdFx0X2NvbnRleHRMaW5lRGFzaCA9IFtdLFxuXG5cdFx0X3YxLCBfdjIsIF92MyxcblxuXHRcdF92MXgsIF92MXksIF92MngsIF92MnksIF92M3gsIF92M3ksXG5cblx0XHRfY29sb3IgPSBuZXcgVEhSRUUuQ29sb3IoKSxcblxuXHRcdF9kaWZmdXNlQ29sb3IgPSBuZXcgVEhSRUUuQ29sb3IoKSxcblx0XHRfZW1pc3NpdmVDb2xvciA9IG5ldyBUSFJFRS5Db2xvcigpLFxuXG5cdFx0X2xpZ2h0Q29sb3IgPSBuZXcgVEhSRUUuQ29sb3IoKSxcblxuXHRcdF9wYXR0ZXJucyA9IHt9LFxuXG5cdFx0X3V2cyxcblx0XHRfdXYxeCwgX3V2MXksIF91djJ4LCBfdXYyeSwgX3V2M3gsIF91djN5LFxuXG5cdFx0X2NsaXBCb3ggPSBuZXcgVEhSRUUuQm94MigpLFxuXHRcdF9jbGVhckJveCA9IG5ldyBUSFJFRS5Cb3gyKCksXG5cdFx0X2VsZW1Cb3ggPSBuZXcgVEhSRUUuQm94MigpLFxuXG5cdFx0X2FtYmllbnRMaWdodCA9IG5ldyBUSFJFRS5Db2xvcigpLFxuXHRcdF9kaXJlY3Rpb25hbExpZ2h0cyA9IG5ldyBUSFJFRS5Db2xvcigpLFxuXHRcdF9wb2ludExpZ2h0cyA9IG5ldyBUSFJFRS5Db2xvcigpLFxuXG5cdFx0X3ZlY3RvcjMgPSBuZXcgVEhSRUUuVmVjdG9yMygpLCAvLyBOZWVkZWQgZm9yIFBvaW50TGlnaHRcblx0XHRfY2VudHJvaWQgPSBuZXcgVEhSRUUuVmVjdG9yMygpLFxuXHRcdF9ub3JtYWwgPSBuZXcgVEhSRUUuVmVjdG9yMygpLFxuXHRcdF9ub3JtYWxWaWV3TWF0cml4ID0gbmV3IFRIUkVFLk1hdHJpeDMoKTtcblxuXHQvKiBUT0RPXG5cdF9jYW52YXMubW96SW1hZ2VTbW9vdGhpbmdFbmFibGVkID0gZmFsc2U7XG5cdF9jYW52YXMud2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkID0gZmFsc2U7XG5cdF9jYW52YXMubXNJbWFnZVNtb290aGluZ0VuYWJsZWQgPSBmYWxzZTtcblx0X2NhbnZhcy5pbWFnZVNtb290aGluZ0VuYWJsZWQgPSBmYWxzZTtcblx0Ki9cblxuXHQvLyBkYXNoK2dhcCBmYWxsYmFja3MgZm9yIEZpcmVmb3ggYW5kIGV2ZXJ5dGhpbmcgZWxzZVxuXG5cdGlmICggX2NvbnRleHQuc2V0TGluZURhc2ggPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdF9jb250ZXh0LnNldExpbmVEYXNoID0gZnVuY3Rpb24gKCkge307XG5cblx0fVxuXG5cdHRoaXMuZG9tRWxlbWVudCA9IF9jYW52YXM7XG5cblx0dGhpcy5hdXRvQ2xlYXIgPSB0cnVlO1xuXHR0aGlzLnNvcnRPYmplY3RzID0gdHJ1ZTtcblx0dGhpcy5zb3J0RWxlbWVudHMgPSB0cnVlO1xuXG5cdHRoaXMuaW5mbyA9IHtcblxuXHRcdHJlbmRlcjoge1xuXG5cdFx0XHR2ZXJ0aWNlczogMCxcblx0XHRcdGZhY2VzOiAwXG5cblx0XHR9XG5cblx0fTtcblxuXHQvLyBBUElcblxuXHR0aGlzLmdldENvbnRleHQgPSBmdW5jdGlvbiAoKSB7XG5cblx0XHRyZXR1cm4gX2NvbnRleHQ7XG5cblx0fTtcblxuXHR0aGlzLmdldENvbnRleHRBdHRyaWJ1dGVzID0gZnVuY3Rpb24gKCkge1xuXG5cdFx0cmV0dXJuIF9jb250ZXh0LmdldENvbnRleHRBdHRyaWJ1dGVzKCk7XG5cblx0fTtcblxuXHR0aGlzLmdldFBpeGVsUmF0aW8gPSBmdW5jdGlvbiAoKSB7XG5cblx0XHRyZXR1cm4gX3BpeGVsUmF0aW87XG5cblx0fTtcblxuXHR0aGlzLnNldFBpeGVsUmF0aW8gPSBmdW5jdGlvbiAoIHZhbHVlICkge1xuXG5cdFx0aWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkgX3BpeGVsUmF0aW8gPSB2YWx1ZTtcblxuXHR9O1xuXG5cdHRoaXMuc2V0U2l6ZSA9IGZ1bmN0aW9uICggd2lkdGgsIGhlaWdodCwgdXBkYXRlU3R5bGUgKSB7XG5cblx0XHRfY2FudmFzV2lkdGggPSB3aWR0aCAqIF9waXhlbFJhdGlvO1xuXHRcdF9jYW52YXNIZWlnaHQgPSBoZWlnaHQgKiBfcGl4ZWxSYXRpbztcblxuXHRcdF9jYW52YXMud2lkdGggPSBfY2FudmFzV2lkdGg7XG5cdFx0X2NhbnZhcy5oZWlnaHQgPSBfY2FudmFzSGVpZ2h0O1xuXG5cdFx0X2NhbnZhc1dpZHRoSGFsZiA9IE1hdGguZmxvb3IoIF9jYW52YXNXaWR0aCAvIDIgKTtcblx0XHRfY2FudmFzSGVpZ2h0SGFsZiA9IE1hdGguZmxvb3IoIF9jYW52YXNIZWlnaHQgLyAyICk7XG5cblx0XHRpZiAoIHVwZGF0ZVN0eWxlICE9PSBmYWxzZSApIHtcblxuXHRcdFx0X2NhbnZhcy5zdHlsZS53aWR0aCA9IHdpZHRoICsgJ3B4Jztcblx0XHRcdF9jYW52YXMuc3R5bGUuaGVpZ2h0ID0gaGVpZ2h0ICsgJ3B4JztcblxuXHRcdH1cblxuXHRcdF9jbGlwQm94Lm1pbi5zZXQoIC0gX2NhbnZhc1dpZHRoSGFsZiwgLSBfY2FudmFzSGVpZ2h0SGFsZiApO1xuXHRcdF9jbGlwQm94Lm1heC5zZXQoICAgX2NhbnZhc1dpZHRoSGFsZiwgICBfY2FudmFzSGVpZ2h0SGFsZiApO1xuXG5cdFx0X2NsZWFyQm94Lm1pbi5zZXQoIC0gX2NhbnZhc1dpZHRoSGFsZiwgLSBfY2FudmFzSGVpZ2h0SGFsZiApO1xuXHRcdF9jbGVhckJveC5tYXguc2V0KCAgIF9jYW52YXNXaWR0aEhhbGYsICAgX2NhbnZhc0hlaWdodEhhbGYgKTtcblxuXHRcdF9jb250ZXh0R2xvYmFsQWxwaGEgPSAxO1xuXHRcdF9jb250ZXh0R2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gMDtcblx0XHRfY29udGV4dFN0cm9rZVN0eWxlID0gbnVsbDtcblx0XHRfY29udGV4dEZpbGxTdHlsZSA9IG51bGw7XG5cdFx0X2NvbnRleHRMaW5lV2lkdGggPSBudWxsO1xuXHRcdF9jb250ZXh0TGluZUNhcCA9IG51bGw7XG5cdFx0X2NvbnRleHRMaW5lSm9pbiA9IG51bGw7XG5cblx0XHR0aGlzLnNldFZpZXdwb3J0KCAwLCAwLCB3aWR0aCwgaGVpZ2h0ICk7XG5cblx0fTtcblxuXHR0aGlzLnNldFZpZXdwb3J0ID0gZnVuY3Rpb24gKCB4LCB5LCB3aWR0aCwgaGVpZ2h0ICkge1xuXG5cdFx0X3ZpZXdwb3J0WCA9IHggKiBfcGl4ZWxSYXRpbztcblx0XHRfdmlld3BvcnRZID0geSAqIF9waXhlbFJhdGlvO1xuXG5cdFx0X3ZpZXdwb3J0V2lkdGggPSB3aWR0aCAqIF9waXhlbFJhdGlvO1xuXHRcdF92aWV3cG9ydEhlaWdodCA9IGhlaWdodCAqIF9waXhlbFJhdGlvO1xuXG5cdH07XG5cblx0dGhpcy5zZXRTY2lzc29yID0gZnVuY3Rpb24gKCkge307XG5cdHRoaXMuc2V0U2Npc3NvclRlc3QgPSBmdW5jdGlvbiAoKSB7fTtcblxuXHR0aGlzLnNldENsZWFyQ29sb3IgPSBmdW5jdGlvbiAoIGNvbG9yLCBhbHBoYSApIHtcblxuXHRcdF9jbGVhckNvbG9yLnNldCggY29sb3IgKTtcblx0XHRfY2xlYXJBbHBoYSA9IGFscGhhICE9PSB1bmRlZmluZWQgPyBhbHBoYSA6IDE7XG5cblx0XHRfY2xlYXJCb3gubWluLnNldCggLSBfY2FudmFzV2lkdGhIYWxmLCAtIF9jYW52YXNIZWlnaHRIYWxmICk7XG5cdFx0X2NsZWFyQm94Lm1heC5zZXQoICAgX2NhbnZhc1dpZHRoSGFsZiwgICBfY2FudmFzSGVpZ2h0SGFsZiApO1xuXG5cdH07XG5cblx0dGhpcy5zZXRDbGVhckNvbG9ySGV4ID0gZnVuY3Rpb24gKCBoZXgsIGFscGhhICkge1xuXG5cdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuQ2FudmFzUmVuZGVyZXI6IC5zZXRDbGVhckNvbG9ySGV4KCkgaXMgYmVpbmcgcmVtb3ZlZC4gVXNlIC5zZXRDbGVhckNvbG9yKCkgaW5zdGVhZC4nICk7XG5cdFx0dGhpcy5zZXRDbGVhckNvbG9yKCBoZXgsIGFscGhhICk7XG5cblx0fTtcblxuXHR0aGlzLmdldENsZWFyQ29sb3IgPSBmdW5jdGlvbiAoKSB7XG5cblx0XHRyZXR1cm4gX2NsZWFyQ29sb3I7XG5cblx0fTtcblxuXHR0aGlzLmdldENsZWFyQWxwaGEgPSBmdW5jdGlvbiAoKSB7XG5cblx0XHRyZXR1cm4gX2NsZWFyQWxwaGE7XG5cblx0fTtcblxuXHR0aGlzLmdldE1heEFuaXNvdHJvcHkgPSBmdW5jdGlvbiAoKSB7XG5cblx0XHRyZXR1cm4gMDtcblxuXHR9O1xuXG5cdHRoaXMuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XG5cblx0XHRpZiAoIF9jbGVhckJveC5pc0VtcHR5KCkgPT09IGZhbHNlICkge1xuXG5cdFx0XHRfY2xlYXJCb3guaW50ZXJzZWN0KCBfY2xpcEJveCApO1xuXHRcdFx0X2NsZWFyQm94LmV4cGFuZEJ5U2NhbGFyKCAyICk7XG5cblx0XHRcdF9jbGVhckJveC5taW4ueCA9ICAgX2NsZWFyQm94Lm1pbi54ICsgX2NhbnZhc1dpZHRoSGFsZjtcblx0XHRcdF9jbGVhckJveC5taW4ueSA9IC0gX2NsZWFyQm94Lm1pbi55ICsgX2NhbnZhc0hlaWdodEhhbGY7XHRcdC8vIGhpZ2hlciB5IHZhbHVlICFcblx0XHRcdF9jbGVhckJveC5tYXgueCA9ICAgX2NsZWFyQm94Lm1heC54ICsgX2NhbnZhc1dpZHRoSGFsZjtcblx0XHRcdF9jbGVhckJveC5tYXgueSA9IC0gX2NsZWFyQm94Lm1heC55ICsgX2NhbnZhc0hlaWdodEhhbGY7XHRcdC8vIGxvd2VyIHkgdmFsdWUgIVxuXG5cdFx0XHRpZiAoIF9jbGVhckFscGhhIDwgMSApIHtcblxuXHRcdFx0XHRfY29udGV4dC5jbGVhclJlY3QoXG5cdFx0XHRcdFx0X2NsZWFyQm94Lm1pbi54IHwgMCxcblx0XHRcdFx0XHRfY2xlYXJCb3gubWF4LnkgfCAwLFxuXHRcdFx0XHRcdCggX2NsZWFyQm94Lm1heC54IC0gX2NsZWFyQm94Lm1pbi54ICkgfCAwLFxuXHRcdFx0XHRcdCggX2NsZWFyQm94Lm1pbi55IC0gX2NsZWFyQm94Lm1heC55ICkgfCAwXG5cdFx0XHRcdCk7XG5cblx0XHRcdH1cblxuXHRcdFx0aWYgKCBfY2xlYXJBbHBoYSA+IDAgKSB7XG5cblx0XHRcdFx0c2V0T3BhY2l0eSggMSApO1xuXHRcdFx0XHRzZXRCbGVuZGluZyggVEhSRUUuTm9ybWFsQmxlbmRpbmcgKTtcblxuXHRcdFx0XHRzZXRGaWxsU3R5bGUoICdyZ2JhKCcgKyBNYXRoLmZsb29yKCBfY2xlYXJDb2xvci5yICogMjU1ICkgKyAnLCcgKyBNYXRoLmZsb29yKCBfY2xlYXJDb2xvci5nICogMjU1ICkgKyAnLCcgKyBNYXRoLmZsb29yKCBfY2xlYXJDb2xvci5iICogMjU1ICkgKyAnLCcgKyBfY2xlYXJBbHBoYSArICcpJyApO1xuXG5cdFx0XHRcdF9jb250ZXh0LmZpbGxSZWN0KFxuXHRcdFx0XHRcdF9jbGVhckJveC5taW4ueCB8IDAsXG5cdFx0XHRcdFx0X2NsZWFyQm94Lm1heC55IHwgMCxcblx0XHRcdFx0XHQoIF9jbGVhckJveC5tYXgueCAtIF9jbGVhckJveC5taW4ueCApIHwgMCxcblx0XHRcdFx0XHQoIF9jbGVhckJveC5taW4ueSAtIF9jbGVhckJveC5tYXgueSApIHwgMFxuXHRcdFx0XHQpO1xuXG5cdFx0XHR9XG5cblx0XHRcdF9jbGVhckJveC5tYWtlRW1wdHkoKTtcblxuXHRcdH1cblxuXHR9O1xuXG5cdC8vIGNvbXBhdGliaWxpdHlcblxuXHR0aGlzLmNsZWFyQ29sb3IgPSBmdW5jdGlvbiAoKSB7fTtcblx0dGhpcy5jbGVhckRlcHRoID0gZnVuY3Rpb24gKCkge307XG5cdHRoaXMuY2xlYXJTdGVuY2lsID0gZnVuY3Rpb24gKCkge307XG5cblx0dGhpcy5yZW5kZXIgPSBmdW5jdGlvbiAoIHNjZW5lLCBjYW1lcmEgKSB7XG5cblx0XHRpZiAoIGNhbWVyYS5pc0NhbWVyYSA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRjb25zb2xlLmVycm9yKCAnVEhSRUUuQ2FudmFzUmVuZGVyZXIucmVuZGVyOiBjYW1lcmEgaXMgbm90IGFuIGluc3RhbmNlIG9mIFRIUkVFLkNhbWVyYS4nICk7XG5cdFx0XHRyZXR1cm47XG5cblx0XHR9XG5cblx0XHR2YXIgYmFja2dyb3VuZCA9IHNjZW5lLmJhY2tncm91bmQ7XG5cblx0XHRpZiAoIGJhY2tncm91bmQgJiYgYmFja2dyb3VuZC5pc0NvbG9yICkge1xuXG5cdFx0XHRzZXRPcGFjaXR5KCAxICk7XG5cdFx0XHRzZXRCbGVuZGluZyggVEhSRUUuTm9ybWFsQmxlbmRpbmcgKTtcblxuXHRcdFx0c2V0RmlsbFN0eWxlKCBiYWNrZ3JvdW5kLmdldFN0eWxlKCkgKTtcblx0XHRcdF9jb250ZXh0LmZpbGxSZWN0KCAwLCAwLCBfY2FudmFzV2lkdGgsIF9jYW52YXNIZWlnaHQgKTtcblxuXHRcdH0gZWxzZSBpZiAoIHRoaXMuYXV0b0NsZWFyID09PSB0cnVlICkge1xuXG5cdFx0XHR0aGlzLmNsZWFyKCk7XG5cblx0XHR9XG5cblx0XHRfdGhpcy5pbmZvLnJlbmRlci52ZXJ0aWNlcyA9IDA7XG5cdFx0X3RoaXMuaW5mby5yZW5kZXIuZmFjZXMgPSAwO1xuXG5cdFx0X2NvbnRleHQuc2V0VHJhbnNmb3JtKCBfdmlld3BvcnRXaWR0aCAvIF9jYW52YXNXaWR0aCwgMCwgMCwgLSBfdmlld3BvcnRIZWlnaHQgLyBfY2FudmFzSGVpZ2h0LCBfdmlld3BvcnRYLCBfY2FudmFzSGVpZ2h0IC0gX3ZpZXdwb3J0WSApO1xuXHRcdF9jb250ZXh0LnRyYW5zbGF0ZSggX2NhbnZhc1dpZHRoSGFsZiwgX2NhbnZhc0hlaWdodEhhbGYgKTtcblxuXHRcdF9yZW5kZXJEYXRhID0gX3Byb2plY3Rvci5wcm9qZWN0U2NlbmUoIHNjZW5lLCBjYW1lcmEsIHRoaXMuc29ydE9iamVjdHMsIHRoaXMuc29ydEVsZW1lbnRzICk7XG5cdFx0X2VsZW1lbnRzID0gX3JlbmRlckRhdGEuZWxlbWVudHM7XG5cdFx0X2xpZ2h0cyA9IF9yZW5kZXJEYXRhLmxpZ2h0cztcblxuXHRcdF9ub3JtYWxWaWV3TWF0cml4LmdldE5vcm1hbE1hdHJpeCggY2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZSApO1xuXG5cdFx0LyogREVCVUdcblx0XHRzZXRGaWxsU3R5bGUoICdyZ2JhKCAwLCAyNTUsIDI1NSwgMC41ICknICk7XG5cdFx0X2NvbnRleHQuZmlsbFJlY3QoIF9jbGlwQm94Lm1pbi54LCBfY2xpcEJveC5taW4ueSwgX2NsaXBCb3gubWF4LnggLSBfY2xpcEJveC5taW4ueCwgX2NsaXBCb3gubWF4LnkgLSBfY2xpcEJveC5taW4ueSApO1xuXHRcdCovXG5cblx0XHRjYWxjdWxhdGVMaWdodHMoKTtcblxuXHRcdGZvciAoIHZhciBlID0gMCwgZWwgPSBfZWxlbWVudHMubGVuZ3RoOyBlIDwgZWw7IGUgKysgKSB7XG5cblx0XHRcdHZhciBlbGVtZW50ID0gX2VsZW1lbnRzWyBlIF07XG5cblx0XHRcdHZhciBtYXRlcmlhbCA9IGVsZW1lbnQubWF0ZXJpYWw7XG5cblx0XHRcdGlmICggbWF0ZXJpYWwgPT09IHVuZGVmaW5lZCB8fCBtYXRlcmlhbC5vcGFjaXR5ID09PSAwICkgY29udGludWU7XG5cblx0XHRcdF9lbGVtQm94Lm1ha2VFbXB0eSgpO1xuXG5cdFx0XHRpZiAoIGVsZW1lbnQgaW5zdGFuY2VvZiBUSFJFRS5SZW5kZXJhYmxlU3ByaXRlICkge1xuXG5cdFx0XHRcdF92MSA9IGVsZW1lbnQ7XG5cdFx0XHRcdF92MS54ICo9IF9jYW52YXNXaWR0aEhhbGY7IF92MS55ICo9IF9jYW52YXNIZWlnaHRIYWxmO1xuXG5cdFx0XHRcdHJlbmRlclNwcml0ZSggX3YxLCBlbGVtZW50LCBtYXRlcmlhbCApO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBlbGVtZW50IGluc3RhbmNlb2YgVEhSRUUuUmVuZGVyYWJsZUxpbmUgKSB7XG5cblx0XHRcdFx0X3YxID0gZWxlbWVudC52MTsgX3YyID0gZWxlbWVudC52MjtcblxuXHRcdFx0XHRfdjEucG9zaXRpb25TY3JlZW4ueCAqPSBfY2FudmFzV2lkdGhIYWxmOyBfdjEucG9zaXRpb25TY3JlZW4ueSAqPSBfY2FudmFzSGVpZ2h0SGFsZjtcblx0XHRcdFx0X3YyLnBvc2l0aW9uU2NyZWVuLnggKj0gX2NhbnZhc1dpZHRoSGFsZjsgX3YyLnBvc2l0aW9uU2NyZWVuLnkgKj0gX2NhbnZhc0hlaWdodEhhbGY7XG5cblx0XHRcdFx0X2VsZW1Cb3guc2V0RnJvbVBvaW50cyggW1xuXHRcdFx0XHRcdF92MS5wb3NpdGlvblNjcmVlbixcblx0XHRcdFx0XHRfdjIucG9zaXRpb25TY3JlZW5cblx0XHRcdFx0XSApO1xuXG5cdFx0XHRcdGlmICggX2NsaXBCb3guaW50ZXJzZWN0c0JveCggX2VsZW1Cb3ggKSA9PT0gdHJ1ZSApIHtcblxuXHRcdFx0XHRcdHJlbmRlckxpbmUoIF92MSwgX3YyLCBlbGVtZW50LCBtYXRlcmlhbCApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fSBlbHNlIGlmICggZWxlbWVudCBpbnN0YW5jZW9mIFRIUkVFLlJlbmRlcmFibGVGYWNlICkge1xuXG5cdFx0XHRcdF92MSA9IGVsZW1lbnQudjE7IF92MiA9IGVsZW1lbnQudjI7IF92MyA9IGVsZW1lbnQudjM7XG5cblx0XHRcdFx0aWYgKCBfdjEucG9zaXRpb25TY3JlZW4ueiA8IC0gMSB8fCBfdjEucG9zaXRpb25TY3JlZW4ueiA+IDEgKSBjb250aW51ZTtcblx0XHRcdFx0aWYgKCBfdjIucG9zaXRpb25TY3JlZW4ueiA8IC0gMSB8fCBfdjIucG9zaXRpb25TY3JlZW4ueiA+IDEgKSBjb250aW51ZTtcblx0XHRcdFx0aWYgKCBfdjMucG9zaXRpb25TY3JlZW4ueiA8IC0gMSB8fCBfdjMucG9zaXRpb25TY3JlZW4ueiA+IDEgKSBjb250aW51ZTtcblxuXHRcdFx0XHRfdjEucG9zaXRpb25TY3JlZW4ueCAqPSBfY2FudmFzV2lkdGhIYWxmOyBfdjEucG9zaXRpb25TY3JlZW4ueSAqPSBfY2FudmFzSGVpZ2h0SGFsZjtcblx0XHRcdFx0X3YyLnBvc2l0aW9uU2NyZWVuLnggKj0gX2NhbnZhc1dpZHRoSGFsZjsgX3YyLnBvc2l0aW9uU2NyZWVuLnkgKj0gX2NhbnZhc0hlaWdodEhhbGY7XG5cdFx0XHRcdF92My5wb3NpdGlvblNjcmVlbi54ICo9IF9jYW52YXNXaWR0aEhhbGY7IF92My5wb3NpdGlvblNjcmVlbi55ICo9IF9jYW52YXNIZWlnaHRIYWxmO1xuXG5cdFx0XHRcdGlmICggbWF0ZXJpYWwub3ZlcmRyYXcgPiAwICkge1xuXG5cdFx0XHRcdFx0ZXhwYW5kKCBfdjEucG9zaXRpb25TY3JlZW4sIF92Mi5wb3NpdGlvblNjcmVlbiwgbWF0ZXJpYWwub3ZlcmRyYXcgKTtcblx0XHRcdFx0XHRleHBhbmQoIF92Mi5wb3NpdGlvblNjcmVlbiwgX3YzLnBvc2l0aW9uU2NyZWVuLCBtYXRlcmlhbC5vdmVyZHJhdyApO1xuXHRcdFx0XHRcdGV4cGFuZCggX3YzLnBvc2l0aW9uU2NyZWVuLCBfdjEucG9zaXRpb25TY3JlZW4sIG1hdGVyaWFsLm92ZXJkcmF3ICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdF9lbGVtQm94LnNldEZyb21Qb2ludHMoIFtcblx0XHRcdFx0XHRfdjEucG9zaXRpb25TY3JlZW4sXG5cdFx0XHRcdFx0X3YyLnBvc2l0aW9uU2NyZWVuLFxuXHRcdFx0XHRcdF92My5wb3NpdGlvblNjcmVlblxuXHRcdFx0XHRdICk7XG5cblx0XHRcdFx0aWYgKCBfY2xpcEJveC5pbnRlcnNlY3RzQm94KCBfZWxlbUJveCApID09PSB0cnVlICkge1xuXG5cdFx0XHRcdFx0cmVuZGVyRmFjZTMoIF92MSwgX3YyLCBfdjMsIDAsIDEsIDIsIGVsZW1lbnQsIG1hdGVyaWFsICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHRcdC8qIERFQlVHXG5cdFx0XHRzZXRMaW5lV2lkdGgoIDEgKTtcblx0XHRcdHNldFN0cm9rZVN0eWxlKCAncmdiYSggMCwgMjU1LCAwLCAwLjUgKScgKTtcblx0XHRcdF9jb250ZXh0LnN0cm9rZVJlY3QoIF9lbGVtQm94Lm1pbi54LCBfZWxlbUJveC5taW4ueSwgX2VsZW1Cb3gubWF4LnggLSBfZWxlbUJveC5taW4ueCwgX2VsZW1Cb3gubWF4LnkgLSBfZWxlbUJveC5taW4ueSApO1xuXHRcdFx0Ki9cblxuXHRcdFx0X2NsZWFyQm94LnVuaW9uKCBfZWxlbUJveCApO1xuXG5cdFx0fVxuXG5cdFx0LyogREVCVUdcblx0XHRzZXRMaW5lV2lkdGgoIDEgKTtcblx0XHRzZXRTdHJva2VTdHlsZSggJ3JnYmEoIDI1NSwgMCwgMCwgMC41ICknICk7XG5cdFx0X2NvbnRleHQuc3Ryb2tlUmVjdCggX2NsZWFyQm94Lm1pbi54LCBfY2xlYXJCb3gubWluLnksIF9jbGVhckJveC5tYXgueCAtIF9jbGVhckJveC5taW4ueCwgX2NsZWFyQm94Lm1heC55IC0gX2NsZWFyQm94Lm1pbi55ICk7XG5cdFx0Ki9cblxuXHRcdF9jb250ZXh0LnNldFRyYW5zZm9ybSggMSwgMCwgMCwgMSwgMCwgMCApO1xuXG5cdH07XG5cblx0Ly9cblxuXHRmdW5jdGlvbiBjYWxjdWxhdGVMaWdodHMoKSB7XG5cblx0XHRfYW1iaWVudExpZ2h0LnNldFJHQiggMCwgMCwgMCApO1xuXHRcdF9kaXJlY3Rpb25hbExpZ2h0cy5zZXRSR0IoIDAsIDAsIDAgKTtcblx0XHRfcG9pbnRMaWdodHMuc2V0UkdCKCAwLCAwLCAwICk7XG5cblx0XHRmb3IgKCB2YXIgbCA9IDAsIGxsID0gX2xpZ2h0cy5sZW5ndGg7IGwgPCBsbDsgbCArKyApIHtcblxuXHRcdFx0dmFyIGxpZ2h0ID0gX2xpZ2h0c1sgbCBdO1xuXHRcdFx0dmFyIGxpZ2h0Q29sb3IgPSBsaWdodC5jb2xvcjtcblxuXHRcdFx0aWYgKCBsaWdodC5pc0FtYmllbnRMaWdodCApIHtcblxuXHRcdFx0XHRfYW1iaWVudExpZ2h0LmFkZCggbGlnaHRDb2xvciApO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBsaWdodC5pc0RpcmVjdGlvbmFsTGlnaHQgKSB7XG5cblx0XHRcdFx0Ly8gZm9yIHNwcml0ZXNcblxuXHRcdFx0XHRfZGlyZWN0aW9uYWxMaWdodHMuYWRkKCBsaWdodENvbG9yICk7XG5cblx0XHRcdH0gZWxzZSBpZiAoIGxpZ2h0LmlzUG9pbnRMaWdodCApIHtcblxuXHRcdFx0XHQvLyBmb3Igc3ByaXRlc1xuXG5cdFx0XHRcdF9wb2ludExpZ2h0cy5hZGQoIGxpZ2h0Q29sb3IgKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdH1cblxuXHRmdW5jdGlvbiBjYWxjdWxhdGVMaWdodCggcG9zaXRpb24sIG5vcm1hbCwgY29sb3IgKSB7XG5cblx0XHRmb3IgKCB2YXIgbCA9IDAsIGxsID0gX2xpZ2h0cy5sZW5ndGg7IGwgPCBsbDsgbCArKyApIHtcblxuXHRcdFx0dmFyIGxpZ2h0ID0gX2xpZ2h0c1sgbCBdO1xuXG5cdFx0XHRfbGlnaHRDb2xvci5jb3B5KCBsaWdodC5jb2xvciApO1xuXG5cdFx0XHRpZiAoIGxpZ2h0LmlzRGlyZWN0aW9uYWxMaWdodCApIHtcblxuXHRcdFx0XHR2YXIgbGlnaHRQb3NpdGlvbiA9IF92ZWN0b3IzLnNldEZyb21NYXRyaXhQb3NpdGlvbiggbGlnaHQubWF0cml4V29ybGQgKS5ub3JtYWxpemUoKTtcblxuXHRcdFx0XHR2YXIgYW1vdW50ID0gbm9ybWFsLmRvdCggbGlnaHRQb3NpdGlvbiApO1xuXG5cdFx0XHRcdGlmICggYW1vdW50IDw9IDAgKSBjb250aW51ZTtcblxuXHRcdFx0XHRhbW91bnQgKj0gbGlnaHQuaW50ZW5zaXR5O1xuXG5cdFx0XHRcdGNvbG9yLmFkZCggX2xpZ2h0Q29sb3IubXVsdGlwbHlTY2FsYXIoIGFtb3VudCApICk7XG5cblx0XHRcdH0gZWxzZSBpZiAoIGxpZ2h0LmlzUG9pbnRMaWdodCApIHtcblxuXHRcdFx0XHR2YXIgbGlnaHRQb3NpdGlvbiA9IF92ZWN0b3IzLnNldEZyb21NYXRyaXhQb3NpdGlvbiggbGlnaHQubWF0cml4V29ybGQgKTtcblxuXHRcdFx0XHR2YXIgYW1vdW50ID0gbm9ybWFsLmRvdCggX3ZlY3RvcjMuc3ViVmVjdG9ycyggbGlnaHRQb3NpdGlvbiwgcG9zaXRpb24gKS5ub3JtYWxpemUoKSApO1xuXG5cdFx0XHRcdGlmICggYW1vdW50IDw9IDAgKSBjb250aW51ZTtcblxuXHRcdFx0XHRhbW91bnQgKj0gbGlnaHQuZGlzdGFuY2UgPT0gMCA/IDEgOiAxIC0gTWF0aC5taW4oIHBvc2l0aW9uLmRpc3RhbmNlVG8oIGxpZ2h0UG9zaXRpb24gKSAvIGxpZ2h0LmRpc3RhbmNlLCAxICk7XG5cblx0XHRcdFx0aWYgKCBhbW91bnQgPT0gMCApIGNvbnRpbnVlO1xuXG5cdFx0XHRcdGFtb3VudCAqPSBsaWdodC5pbnRlbnNpdHk7XG5cblx0XHRcdFx0Y29sb3IuYWRkKCBfbGlnaHRDb2xvci5tdWx0aXBseVNjYWxhciggYW1vdW50ICkgKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdH1cblxuXHRmdW5jdGlvbiByZW5kZXJTcHJpdGUoIHYxLCBlbGVtZW50LCBtYXRlcmlhbCApIHtcblxuXHRcdHNldE9wYWNpdHkoIG1hdGVyaWFsLm9wYWNpdHkgKTtcblx0XHRzZXRCbGVuZGluZyggbWF0ZXJpYWwuYmxlbmRpbmcgKTtcblxuXHRcdHZhciBzY2FsZVggPSBlbGVtZW50LnNjYWxlLnggKiBfY2FudmFzV2lkdGhIYWxmO1xuXHRcdHZhciBzY2FsZVkgPSBlbGVtZW50LnNjYWxlLnkgKiBfY2FudmFzSGVpZ2h0SGFsZjtcblxuXHRcdHZhciBkaXN0ID0gTWF0aC5zcXJ0KCBzY2FsZVggKiBzY2FsZVggKyBzY2FsZVkgKiBzY2FsZVkgKTsgLy8gYWxsb3cgZm9yIHJvdGF0ZWQgc3ByaXRlXG5cdFx0X2VsZW1Cb3gubWluLnNldCggdjEueCAtIGRpc3QsIHYxLnkgLSBkaXN0ICk7XG5cdFx0X2VsZW1Cb3gubWF4LnNldCggdjEueCArIGRpc3QsIHYxLnkgKyBkaXN0ICk7XG5cblx0XHRpZiAoIG1hdGVyaWFsLmlzU3ByaXRlTWF0ZXJpYWwgKSB7XG5cblx0XHRcdHZhciB0ZXh0dXJlID0gbWF0ZXJpYWwubWFwO1xuXG5cdFx0XHRpZiAoIHRleHR1cmUgIT09IG51bGwgKSB7XG5cblx0XHRcdFx0dmFyIHBhdHRlcm4gPSBfcGF0dGVybnNbIHRleHR1cmUuaWQgXTtcblxuXHRcdFx0XHRpZiAoIHBhdHRlcm4gPT09IHVuZGVmaW5lZCB8fCBwYXR0ZXJuLnZlcnNpb24gIT09IHRleHR1cmUudmVyc2lvbiApIHtcblxuXHRcdFx0XHRcdHBhdHRlcm4gPSB0ZXh0dXJlVG9QYXR0ZXJuKCB0ZXh0dXJlICk7XG5cdFx0XHRcdFx0X3BhdHRlcm5zWyB0ZXh0dXJlLmlkIF0gPSBwYXR0ZXJuO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIHBhdHRlcm4uY2FudmFzICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0XHRzZXRGaWxsU3R5bGUoIHBhdHRlcm4uY2FudmFzICk7XG5cblx0XHRcdFx0XHR2YXIgYml0bWFwID0gdGV4dHVyZS5pbWFnZTtcblxuXHRcdFx0XHRcdHZhciBveCA9IGJpdG1hcC53aWR0aCAqIHRleHR1cmUub2Zmc2V0Lng7XG5cdFx0XHRcdFx0dmFyIG95ID0gYml0bWFwLmhlaWdodCAqIHRleHR1cmUub2Zmc2V0Lnk7XG5cblx0XHRcdFx0XHR2YXIgc3ggPSBiaXRtYXAud2lkdGggKiB0ZXh0dXJlLnJlcGVhdC54O1xuXHRcdFx0XHRcdHZhciBzeSA9IGJpdG1hcC5oZWlnaHQgKiB0ZXh0dXJlLnJlcGVhdC55O1xuXG5cdFx0XHRcdFx0dmFyIGN4ID0gc2NhbGVYIC8gc3g7XG5cdFx0XHRcdFx0dmFyIGN5ID0gc2NhbGVZIC8gc3k7XG5cblx0XHRcdFx0XHRfY29udGV4dC5zYXZlKCk7XG5cdFx0XHRcdFx0X2NvbnRleHQudHJhbnNsYXRlKCB2MS54LCB2MS55ICk7XG5cdFx0XHRcdFx0aWYgKCBtYXRlcmlhbC5yb3RhdGlvbiAhPT0gMCApIF9jb250ZXh0LnJvdGF0ZSggbWF0ZXJpYWwucm90YXRpb24gKTtcblx0XHRcdFx0XHRfY29udGV4dC50cmFuc2xhdGUoIC0gc2NhbGVYIC8gMiwgLSBzY2FsZVkgLyAyICk7XG5cdFx0XHRcdFx0X2NvbnRleHQuc2NhbGUoIGN4LCBjeSApO1xuXHRcdFx0XHRcdF9jb250ZXh0LnRyYW5zbGF0ZSggLSBveCwgLSBveSApO1xuXHRcdFx0XHRcdF9jb250ZXh0LmZpbGxSZWN0KCBveCwgb3ksIHN4LCBzeSApO1xuXHRcdFx0XHRcdF9jb250ZXh0LnJlc3RvcmUoKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gbm8gdGV4dHVyZVxuXG5cdFx0XHRcdHNldEZpbGxTdHlsZSggbWF0ZXJpYWwuY29sb3IuZ2V0U3R5bGUoKSApO1xuXG5cdFx0XHRcdF9jb250ZXh0LnNhdmUoKTtcblx0XHRcdFx0X2NvbnRleHQudHJhbnNsYXRlKCB2MS54LCB2MS55ICk7XG5cdFx0XHRcdGlmICggbWF0ZXJpYWwucm90YXRpb24gIT09IDAgKSBfY29udGV4dC5yb3RhdGUoIG1hdGVyaWFsLnJvdGF0aW9uICk7XG5cdFx0XHRcdF9jb250ZXh0LnNjYWxlKCBzY2FsZVgsIC0gc2NhbGVZICk7XG5cdFx0XHRcdF9jb250ZXh0LmZpbGxSZWN0KCAtIDAuNSwgLSAwLjUsIDEsIDEgKTtcblx0XHRcdFx0X2NvbnRleHQucmVzdG9yZSgpO1xuXG5cdFx0XHR9XG5cblx0XHR9IGVsc2UgaWYgKCBtYXRlcmlhbC5pc1Nwcml0ZUNhbnZhc01hdGVyaWFsICkge1xuXG5cdFx0XHRzZXRTdHJva2VTdHlsZSggbWF0ZXJpYWwuY29sb3IuZ2V0U3R5bGUoKSApO1xuXHRcdFx0c2V0RmlsbFN0eWxlKCBtYXRlcmlhbC5jb2xvci5nZXRTdHlsZSgpICk7XG5cblx0XHRcdF9jb250ZXh0LnNhdmUoKTtcblx0XHRcdF9jb250ZXh0LnRyYW5zbGF0ZSggdjEueCwgdjEueSApO1xuXHRcdFx0aWYgKCBtYXRlcmlhbC5yb3RhdGlvbiAhPT0gMCApIF9jb250ZXh0LnJvdGF0ZSggbWF0ZXJpYWwucm90YXRpb24gKTtcblx0XHRcdF9jb250ZXh0LnNjYWxlKCBzY2FsZVgsIHNjYWxlWSApO1xuXG5cdFx0XHRtYXRlcmlhbC5wcm9ncmFtKCBfY29udGV4dCApO1xuXG5cdFx0XHRfY29udGV4dC5yZXN0b3JlKCk7XG5cblx0XHR9IGVsc2UgaWYgKCBtYXRlcmlhbC5pc1BvaW50c01hdGVyaWFsICkge1xuXG5cdFx0XHRzZXRGaWxsU3R5bGUoIG1hdGVyaWFsLmNvbG9yLmdldFN0eWxlKCkgKTtcblxuXHRcdFx0X2NvbnRleHQuc2F2ZSgpO1xuXHRcdFx0X2NvbnRleHQudHJhbnNsYXRlKCB2MS54LCB2MS55ICk7XG5cdFx0XHRpZiAoIG1hdGVyaWFsLnJvdGF0aW9uICE9PSAwICkgX2NvbnRleHQucm90YXRlKCBtYXRlcmlhbC5yb3RhdGlvbiApO1xuXHRcdFx0X2NvbnRleHQuc2NhbGUoIHNjYWxlWCAqIG1hdGVyaWFsLnNpemUsIC0gc2NhbGVZICogbWF0ZXJpYWwuc2l6ZSApO1xuXHRcdFx0X2NvbnRleHQuZmlsbFJlY3QoIC0gMC41LCAtIDAuNSwgMSwgMSApO1xuXHRcdFx0X2NvbnRleHQucmVzdG9yZSgpO1xuXG5cdFx0fVxuXG5cdFx0LyogREVCVUdcblx0XHRzZXRTdHJva2VTdHlsZSggJ3JnYigyNTUsMjU1LDApJyApO1xuXHRcdF9jb250ZXh0LmJlZ2luUGF0aCgpO1xuXHRcdF9jb250ZXh0Lm1vdmVUbyggdjEueCAtIDEwLCB2MS55ICk7XG5cdFx0X2NvbnRleHQubGluZVRvKCB2MS54ICsgMTAsIHYxLnkgKTtcblx0XHRfY29udGV4dC5tb3ZlVG8oIHYxLngsIHYxLnkgLSAxMCApO1xuXHRcdF9jb250ZXh0LmxpbmVUbyggdjEueCwgdjEueSArIDEwICk7XG5cdFx0X2NvbnRleHQuc3Ryb2tlKCk7XG5cdFx0Ki9cblxuXHR9XG5cblx0ZnVuY3Rpb24gcmVuZGVyTGluZSggdjEsIHYyLCBlbGVtZW50LCBtYXRlcmlhbCApIHtcblxuXHRcdHNldE9wYWNpdHkoIG1hdGVyaWFsLm9wYWNpdHkgKTtcblx0XHRzZXRCbGVuZGluZyggbWF0ZXJpYWwuYmxlbmRpbmcgKTtcblxuXHRcdF9jb250ZXh0LmJlZ2luUGF0aCgpO1xuXHRcdF9jb250ZXh0Lm1vdmVUbyggdjEucG9zaXRpb25TY3JlZW4ueCwgdjEucG9zaXRpb25TY3JlZW4ueSApO1xuXHRcdF9jb250ZXh0LmxpbmVUbyggdjIucG9zaXRpb25TY3JlZW4ueCwgdjIucG9zaXRpb25TY3JlZW4ueSApO1xuXG5cdFx0aWYgKCBtYXRlcmlhbC5pc0xpbmVCYXNpY01hdGVyaWFsICkge1xuXG5cdFx0XHRzZXRMaW5lV2lkdGgoIG1hdGVyaWFsLmxpbmV3aWR0aCApO1xuXHRcdFx0c2V0TGluZUNhcCggbWF0ZXJpYWwubGluZWNhcCApO1xuXHRcdFx0c2V0TGluZUpvaW4oIG1hdGVyaWFsLmxpbmVqb2luICk7XG5cblx0XHRcdGlmICggbWF0ZXJpYWwudmVydGV4Q29sb3JzICE9PSBUSFJFRS5WZXJ0ZXhDb2xvcnMgKSB7XG5cblx0XHRcdFx0c2V0U3Ryb2tlU3R5bGUoIG1hdGVyaWFsLmNvbG9yLmdldFN0eWxlKCkgKTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHR2YXIgY29sb3JTdHlsZTEgPSBlbGVtZW50LnZlcnRleENvbG9yc1sgMCBdLmdldFN0eWxlKCk7XG5cdFx0XHRcdHZhciBjb2xvclN0eWxlMiA9IGVsZW1lbnQudmVydGV4Q29sb3JzWyAxIF0uZ2V0U3R5bGUoKTtcblxuXHRcdFx0XHRpZiAoIGNvbG9yU3R5bGUxID09PSBjb2xvclN0eWxlMiApIHtcblxuXHRcdFx0XHRcdHNldFN0cm9rZVN0eWxlKCBjb2xvclN0eWxlMSApO1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHR0cnkge1xuXG5cdFx0XHRcdFx0XHR2YXIgZ3JhZCA9IF9jb250ZXh0LmNyZWF0ZUxpbmVhckdyYWRpZW50KFxuXHRcdFx0XHRcdFx0XHR2MS5wb3NpdGlvblNjcmVlbi54LFxuXHRcdFx0XHRcdFx0XHR2MS5wb3NpdGlvblNjcmVlbi55LFxuXHRcdFx0XHRcdFx0XHR2Mi5wb3NpdGlvblNjcmVlbi54LFxuXHRcdFx0XHRcdFx0XHR2Mi5wb3NpdGlvblNjcmVlbi55XG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0Z3JhZC5hZGRDb2xvclN0b3AoIDAsIGNvbG9yU3R5bGUxICk7XG5cdFx0XHRcdFx0XHRncmFkLmFkZENvbG9yU3RvcCggMSwgY29sb3JTdHlsZTIgKTtcblxuXHRcdFx0XHRcdH0gY2F0Y2ggKCBleGNlcHRpb24gKSB7XG5cblx0XHRcdFx0XHRcdGdyYWQgPSBjb2xvclN0eWxlMTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHNldFN0cm9rZVN0eWxlKCBncmFkICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9XG5cblx0XHRcdGlmICggbWF0ZXJpYWwuaXNMaW5lRGFzaGVkTWF0ZXJpYWwgKSB7XG5cblx0XHRcdFx0c2V0TGluZURhc2goIFsgbWF0ZXJpYWwuZGFzaFNpemUsIG1hdGVyaWFsLmdhcFNpemUgXSApO1xuXG5cdFx0XHR9XG5cblx0XHRcdF9jb250ZXh0LnN0cm9rZSgpO1xuXHRcdFx0X2VsZW1Cb3guZXhwYW5kQnlTY2FsYXIoIG1hdGVyaWFsLmxpbmV3aWR0aCAqIDIgKTtcblxuXHRcdFx0aWYgKCBtYXRlcmlhbC5pc0xpbmVEYXNoZWRNYXRlcmlhbCApIHtcblxuXHRcdFx0XHRzZXRMaW5lRGFzaCggW10gKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdH1cblxuXHRmdW5jdGlvbiByZW5kZXJGYWNlMyggdjEsIHYyLCB2MywgdXYxLCB1djIsIHV2MywgZWxlbWVudCwgbWF0ZXJpYWwgKSB7XG5cblx0XHRfdGhpcy5pbmZvLnJlbmRlci52ZXJ0aWNlcyArPSAzO1xuXHRcdF90aGlzLmluZm8ucmVuZGVyLmZhY2VzICsrO1xuXG5cdFx0c2V0T3BhY2l0eSggbWF0ZXJpYWwub3BhY2l0eSApO1xuXHRcdHNldEJsZW5kaW5nKCBtYXRlcmlhbC5ibGVuZGluZyApO1xuXG5cdFx0X3YxeCA9IHYxLnBvc2l0aW9uU2NyZWVuLng7IF92MXkgPSB2MS5wb3NpdGlvblNjcmVlbi55O1xuXHRcdF92MnggPSB2Mi5wb3NpdGlvblNjcmVlbi54OyBfdjJ5ID0gdjIucG9zaXRpb25TY3JlZW4ueTtcblx0XHRfdjN4ID0gdjMucG9zaXRpb25TY3JlZW4ueDsgX3YzeSA9IHYzLnBvc2l0aW9uU2NyZWVuLnk7XG5cblx0XHRkcmF3VHJpYW5nbGUoIF92MXgsIF92MXksIF92MngsIF92MnksIF92M3gsIF92M3kgKTtcblxuXHRcdGlmICggKCBtYXRlcmlhbC5pc01lc2hMYW1iZXJ0TWF0ZXJpYWwgfHwgbWF0ZXJpYWwuaXNNZXNoUGhvbmdNYXRlcmlhbCB8fCBtYXRlcmlhbC5pc01lc2hTdGFuZGFyZE1hdGVyaWFsICkgJiYgbWF0ZXJpYWwubWFwID09PSBudWxsICkge1xuXG5cdFx0XHRfZGlmZnVzZUNvbG9yLmNvcHkoIG1hdGVyaWFsLmNvbG9yICk7XG5cdFx0XHRfZW1pc3NpdmVDb2xvci5jb3B5KCBtYXRlcmlhbC5lbWlzc2l2ZSApO1xuXG5cdFx0XHRpZiAoIG1hdGVyaWFsLnZlcnRleENvbG9ycyA9PT0gVEhSRUUuRmFjZUNvbG9ycyApIHtcblxuXHRcdFx0XHRfZGlmZnVzZUNvbG9yLm11bHRpcGx5KCBlbGVtZW50LmNvbG9yICk7XG5cblx0XHRcdH1cblxuXHRcdFx0X2NvbG9yLmNvcHkoIF9hbWJpZW50TGlnaHQgKTtcblxuXHRcdFx0X2NlbnRyb2lkLmNvcHkoIHYxLnBvc2l0aW9uV29ybGQgKS5hZGQoIHYyLnBvc2l0aW9uV29ybGQgKS5hZGQoIHYzLnBvc2l0aW9uV29ybGQgKS5kaXZpZGVTY2FsYXIoIDMgKTtcblxuXHRcdFx0Y2FsY3VsYXRlTGlnaHQoIF9jZW50cm9pZCwgZWxlbWVudC5ub3JtYWxNb2RlbCwgX2NvbG9yICk7XG5cblx0XHRcdF9jb2xvci5tdWx0aXBseSggX2RpZmZ1c2VDb2xvciApLmFkZCggX2VtaXNzaXZlQ29sb3IgKTtcblxuXHRcdFx0bWF0ZXJpYWwud2lyZWZyYW1lID09PSB0cnVlXG5cdFx0XHRcdCA/IHN0cm9rZVBhdGgoIF9jb2xvciwgbWF0ZXJpYWwud2lyZWZyYW1lTGluZXdpZHRoLCBtYXRlcmlhbC53aXJlZnJhbWVMaW5lY2FwLCBtYXRlcmlhbC53aXJlZnJhbWVMaW5lam9pbiApXG5cdFx0XHRcdCA6IGZpbGxQYXRoKCBfY29sb3IgKTtcblxuXHRcdH0gZWxzZSBpZiAoIG1hdGVyaWFsLmlzTWVzaEJhc2ljTWF0ZXJpYWwgfHwgbWF0ZXJpYWwuaXNNZXNoTGFtYmVydE1hdGVyaWFsIHx8IG1hdGVyaWFsLmlzTWVzaFBob25nTWF0ZXJpYWwgfHwgbWF0ZXJpYWwuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbCApIHtcblxuXHRcdFx0aWYgKCBtYXRlcmlhbC5tYXAgIT09IG51bGwgKSB7XG5cblx0XHRcdFx0dmFyIG1hcHBpbmcgPSBtYXRlcmlhbC5tYXAubWFwcGluZztcblxuXHRcdFx0XHRpZiAoIG1hcHBpbmcgPT09IFRIUkVFLlVWTWFwcGluZyApIHtcblxuXHRcdFx0XHRcdF91dnMgPSBlbGVtZW50LnV2cztcblx0XHRcdFx0XHRwYXR0ZXJuUGF0aCggX3YxeCwgX3YxeSwgX3YyeCwgX3YyeSwgX3YzeCwgX3YzeSwgX3V2c1sgdXYxIF0ueCwgX3V2c1sgdXYxIF0ueSwgX3V2c1sgdXYyIF0ueCwgX3V2c1sgdXYyIF0ueSwgX3V2c1sgdXYzIF0ueCwgX3V2c1sgdXYzIF0ueSwgbWF0ZXJpYWwubWFwICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9IGVsc2UgaWYgKCBtYXRlcmlhbC5lbnZNYXAgIT09IG51bGwgKSB7XG5cblx0XHRcdFx0aWYgKCBtYXRlcmlhbC5lbnZNYXAubWFwcGluZyA9PT0gVEhSRUUuU3BoZXJpY2FsUmVmbGVjdGlvbk1hcHBpbmcgKSB7XG5cblx0XHRcdFx0XHRfbm9ybWFsLmNvcHkoIGVsZW1lbnQudmVydGV4Tm9ybWFsc01vZGVsWyB1djEgXSApLmFwcGx5TWF0cml4MyggX25vcm1hbFZpZXdNYXRyaXggKTtcblx0XHRcdFx0XHRfdXYxeCA9IDAuNSAqIF9ub3JtYWwueCArIDAuNTtcblx0XHRcdFx0XHRfdXYxeSA9IDAuNSAqIF9ub3JtYWwueSArIDAuNTtcblxuXHRcdFx0XHRcdF9ub3JtYWwuY29weSggZWxlbWVudC52ZXJ0ZXhOb3JtYWxzTW9kZWxbIHV2MiBdICkuYXBwbHlNYXRyaXgzKCBfbm9ybWFsVmlld01hdHJpeCApO1xuXHRcdFx0XHRcdF91djJ4ID0gMC41ICogX25vcm1hbC54ICsgMC41O1xuXHRcdFx0XHRcdF91djJ5ID0gMC41ICogX25vcm1hbC55ICsgMC41O1xuXG5cdFx0XHRcdFx0X25vcm1hbC5jb3B5KCBlbGVtZW50LnZlcnRleE5vcm1hbHNNb2RlbFsgdXYzIF0gKS5hcHBseU1hdHJpeDMoIF9ub3JtYWxWaWV3TWF0cml4ICk7XG5cdFx0XHRcdFx0X3V2M3ggPSAwLjUgKiBfbm9ybWFsLnggKyAwLjU7XG5cdFx0XHRcdFx0X3V2M3kgPSAwLjUgKiBfbm9ybWFsLnkgKyAwLjU7XG5cblx0XHRcdFx0XHRwYXR0ZXJuUGF0aCggX3YxeCwgX3YxeSwgX3YyeCwgX3YyeSwgX3YzeCwgX3YzeSwgX3V2MXgsIF91djF5LCBfdXYyeCwgX3V2MnksIF91djN4LCBfdXYzeSwgbWF0ZXJpYWwuZW52TWFwICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdF9jb2xvci5jb3B5KCBtYXRlcmlhbC5jb2xvciApO1xuXG5cdFx0XHRcdGlmICggbWF0ZXJpYWwudmVydGV4Q29sb3JzID09PSBUSFJFRS5GYWNlQ29sb3JzICkge1xuXG5cdFx0XHRcdFx0X2NvbG9yLm11bHRpcGx5KCBlbGVtZW50LmNvbG9yICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdG1hdGVyaWFsLndpcmVmcmFtZSA9PT0gdHJ1ZVxuXHRcdFx0XHRcdCA/IHN0cm9rZVBhdGgoIF9jb2xvciwgbWF0ZXJpYWwud2lyZWZyYW1lTGluZXdpZHRoLCBtYXRlcmlhbC53aXJlZnJhbWVMaW5lY2FwLCBtYXRlcmlhbC53aXJlZnJhbWVMaW5lam9pbiApXG5cdFx0XHRcdFx0IDogZmlsbFBhdGgoIF9jb2xvciApO1xuXG5cdFx0XHR9XG5cblx0XHR9IGVsc2UgaWYgKCBtYXRlcmlhbC5pc01lc2hOb3JtYWxNYXRlcmlhbCApIHtcblxuXHRcdFx0X25vcm1hbC5jb3B5KCBlbGVtZW50Lm5vcm1hbE1vZGVsICkuYXBwbHlNYXRyaXgzKCBfbm9ybWFsVmlld01hdHJpeCApO1xuXG5cdFx0XHRfY29sb3Iuc2V0UkdCKCBfbm9ybWFsLngsIF9ub3JtYWwueSwgX25vcm1hbC56ICkubXVsdGlwbHlTY2FsYXIoIDAuNSApLmFkZFNjYWxhciggMC41ICk7XG5cblx0XHRcdG1hdGVyaWFsLndpcmVmcmFtZSA9PT0gdHJ1ZVxuXHRcdFx0XHQgPyBzdHJva2VQYXRoKCBfY29sb3IsIG1hdGVyaWFsLndpcmVmcmFtZUxpbmV3aWR0aCwgbWF0ZXJpYWwud2lyZWZyYW1lTGluZWNhcCwgbWF0ZXJpYWwud2lyZWZyYW1lTGluZWpvaW4gKVxuXHRcdFx0XHQgOiBmaWxsUGF0aCggX2NvbG9yICk7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHRfY29sb3Iuc2V0UkdCKCAxLCAxLCAxICk7XG5cblx0XHRcdG1hdGVyaWFsLndpcmVmcmFtZSA9PT0gdHJ1ZVxuXHRcdFx0XHQgPyBzdHJva2VQYXRoKCBfY29sb3IsIG1hdGVyaWFsLndpcmVmcmFtZUxpbmV3aWR0aCwgbWF0ZXJpYWwud2lyZWZyYW1lTGluZWNhcCwgbWF0ZXJpYWwud2lyZWZyYW1lTGluZWpvaW4gKVxuXHRcdFx0XHQgOiBmaWxsUGF0aCggX2NvbG9yICk7XG5cblx0XHR9XG5cblx0fVxuXG5cdC8vXG5cblx0ZnVuY3Rpb24gZHJhd1RyaWFuZ2xlKCB4MCwgeTAsIHgxLCB5MSwgeDIsIHkyICkge1xuXG5cdFx0X2NvbnRleHQuYmVnaW5QYXRoKCk7XG5cdFx0X2NvbnRleHQubW92ZVRvKCB4MCwgeTAgKTtcblx0XHRfY29udGV4dC5saW5lVG8oIHgxLCB5MSApO1xuXHRcdF9jb250ZXh0LmxpbmVUbyggeDIsIHkyICk7XG5cdFx0X2NvbnRleHQuY2xvc2VQYXRoKCk7XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHN0cm9rZVBhdGgoIGNvbG9yLCBsaW5ld2lkdGgsIGxpbmVjYXAsIGxpbmVqb2luICkge1xuXG5cdFx0c2V0TGluZVdpZHRoKCBsaW5ld2lkdGggKTtcblx0XHRzZXRMaW5lQ2FwKCBsaW5lY2FwICk7XG5cdFx0c2V0TGluZUpvaW4oIGxpbmVqb2luICk7XG5cdFx0c2V0U3Ryb2tlU3R5bGUoIGNvbG9yLmdldFN0eWxlKCkgKTtcblxuXHRcdF9jb250ZXh0LnN0cm9rZSgpO1xuXG5cdFx0X2VsZW1Cb3guZXhwYW5kQnlTY2FsYXIoIGxpbmV3aWR0aCAqIDIgKTtcblxuXHR9XG5cblx0ZnVuY3Rpb24gZmlsbFBhdGgoIGNvbG9yICkge1xuXG5cdFx0c2V0RmlsbFN0eWxlKCBjb2xvci5nZXRTdHlsZSgpICk7XG5cdFx0X2NvbnRleHQuZmlsbCgpO1xuXG5cdH1cblxuXHRmdW5jdGlvbiB0ZXh0dXJlVG9QYXR0ZXJuKCB0ZXh0dXJlICkge1xuXG5cdFx0aWYgKCB0ZXh0dXJlLnZlcnNpb24gPT09IDAgfHxcblx0XHRcdHRleHR1cmUgaW5zdGFuY2VvZiBUSFJFRS5Db21wcmVzc2VkVGV4dHVyZSB8fFxuXHRcdFx0dGV4dHVyZSBpbnN0YW5jZW9mIFRIUkVFLkRhdGFUZXh0dXJlICkge1xuXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRjYW52YXM6IHVuZGVmaW5lZCxcblx0XHRcdFx0dmVyc2lvbjogdGV4dHVyZS52ZXJzaW9uXG5cdFx0XHR9O1xuXG5cdFx0fVxuXG5cdFx0dmFyIGltYWdlID0gdGV4dHVyZS5pbWFnZTtcblxuXHRcdGlmICggaW1hZ2UuY29tcGxldGUgPT09IGZhbHNlICkge1xuXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRjYW52YXM6IHVuZGVmaW5lZCxcblx0XHRcdFx0dmVyc2lvbjogMFxuXHRcdFx0fTtcblxuXHRcdH1cblxuXHRcdHZhciByZXBlYXRYID0gdGV4dHVyZS53cmFwUyA9PT0gVEhSRUUuUmVwZWF0V3JhcHBpbmcgfHwgdGV4dHVyZS53cmFwUyA9PT0gVEhSRUUuTWlycm9yZWRSZXBlYXRXcmFwcGluZztcblx0XHR2YXIgcmVwZWF0WSA9IHRleHR1cmUud3JhcFQgPT09IFRIUkVFLlJlcGVhdFdyYXBwaW5nIHx8IHRleHR1cmUud3JhcFQgPT09IFRIUkVFLk1pcnJvcmVkUmVwZWF0V3JhcHBpbmc7XG5cblx0XHR2YXIgbWlycm9yWCA9IHRleHR1cmUud3JhcFMgPT09IFRIUkVFLk1pcnJvcmVkUmVwZWF0V3JhcHBpbmc7XG5cdFx0dmFyIG1pcnJvclkgPSB0ZXh0dXJlLndyYXBUID09PSBUSFJFRS5NaXJyb3JlZFJlcGVhdFdyYXBwaW5nO1xuXG5cdFx0Ly9cblxuXHRcdHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnY2FudmFzJyApO1xuXHRcdGNhbnZhcy53aWR0aCA9IGltYWdlLndpZHRoICogKCBtaXJyb3JYID8gMiA6IDEgKTtcblx0XHRjYW52YXMuaGVpZ2h0ID0gaW1hZ2UuaGVpZ2h0ICogKCBtaXJyb3JZID8gMiA6IDEgKTtcblxuXHRcdHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoICcyZCcgKTtcblx0XHRjb250ZXh0LnNldFRyYW5zZm9ybSggMSwgMCwgMCwgLSAxLCAwLCBpbWFnZS5oZWlnaHQgKTtcblx0XHRjb250ZXh0LmRyYXdJbWFnZSggaW1hZ2UsIDAsIDAgKTtcblxuXHRcdGlmICggbWlycm9yWCA9PT0gdHJ1ZSApIHtcblxuXHRcdFx0Y29udGV4dC5zZXRUcmFuc2Zvcm0oIC0gMSwgMCwgMCwgLSAxLCBpbWFnZS53aWR0aCwgaW1hZ2UuaGVpZ2h0ICk7XG5cdFx0XHRjb250ZXh0LmRyYXdJbWFnZSggaW1hZ2UsIC0gaW1hZ2Uud2lkdGgsIDAgKTtcblxuXHRcdH1cblxuXHRcdGlmICggbWlycm9yWSA9PT0gdHJ1ZSApIHtcblxuXHRcdFx0Y29udGV4dC5zZXRUcmFuc2Zvcm0oIDEsIDAsIDAsIDEsIDAsIDAgKTtcblx0XHRcdGNvbnRleHQuZHJhd0ltYWdlKCBpbWFnZSwgMCwgaW1hZ2UuaGVpZ2h0ICk7XG5cblx0XHR9XG5cblx0XHRpZiAoIG1pcnJvclggPT09IHRydWUgJiYgbWlycm9yWSA9PT0gdHJ1ZSApIHtcblxuXHRcdFx0Y29udGV4dC5zZXRUcmFuc2Zvcm0oIC0gMSwgMCwgMCwgMSwgaW1hZ2Uud2lkdGgsIDAgKTtcblx0XHRcdGNvbnRleHQuZHJhd0ltYWdlKCBpbWFnZSwgLSBpbWFnZS53aWR0aCwgaW1hZ2UuaGVpZ2h0ICk7XG5cblx0XHR9XG5cblx0XHR2YXIgcmVwZWF0ID0gJ25vLXJlcGVhdCc7XG5cblx0XHRpZiAoIHJlcGVhdFggPT09IHRydWUgJiYgcmVwZWF0WSA9PT0gdHJ1ZSApIHtcblxuXHRcdFx0cmVwZWF0ID0gJ3JlcGVhdCc7XG5cblx0XHR9IGVsc2UgaWYgKCByZXBlYXRYID09PSB0cnVlICkge1xuXG5cdFx0XHRyZXBlYXQgPSAncmVwZWF0LXgnO1xuXG5cdFx0fSBlbHNlIGlmICggcmVwZWF0WSA9PT0gdHJ1ZSApIHtcblxuXHRcdFx0cmVwZWF0ID0gJ3JlcGVhdC15JztcblxuXHRcdH1cblxuXHRcdHZhciBwYXR0ZXJuID0gX2NvbnRleHQuY3JlYXRlUGF0dGVybiggY2FudmFzLCByZXBlYXQgKTtcblxuXHRcdGlmICggdGV4dHVyZS5vblVwZGF0ZSApIHRleHR1cmUub25VcGRhdGUoIHRleHR1cmUgKTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRjYW52YXM6IHBhdHRlcm4sXG5cdFx0XHR2ZXJzaW9uOiB0ZXh0dXJlLnZlcnNpb25cblx0XHR9O1xuXG5cdH1cblxuXHRmdW5jdGlvbiBwYXR0ZXJuUGF0aCggeDAsIHkwLCB4MSwgeTEsIHgyLCB5MiwgdTAsIHYwLCB1MSwgdjEsIHUyLCB2MiwgdGV4dHVyZSApIHtcblxuXHRcdHZhciBwYXR0ZXJuID0gX3BhdHRlcm5zWyB0ZXh0dXJlLmlkIF07XG5cblx0XHRpZiAoIHBhdHRlcm4gPT09IHVuZGVmaW5lZCB8fCBwYXR0ZXJuLnZlcnNpb24gIT09IHRleHR1cmUudmVyc2lvbiApIHtcblxuXHRcdFx0cGF0dGVybiA9IHRleHR1cmVUb1BhdHRlcm4oIHRleHR1cmUgKTtcblx0XHRcdF9wYXR0ZXJuc1sgdGV4dHVyZS5pZCBdID0gcGF0dGVybjtcblxuXHRcdH1cblxuXHRcdGlmICggcGF0dGVybi5jYW52YXMgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0c2V0RmlsbFN0eWxlKCBwYXR0ZXJuLmNhbnZhcyApO1xuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0c2V0RmlsbFN0eWxlKCAncmdiYSggMCwgMCwgMCwgMSknICk7XG5cdFx0XHRfY29udGV4dC5maWxsKCk7XG5cdFx0XHRyZXR1cm47XG5cblx0XHR9XG5cblx0XHQvLyBodHRwOi8vZXh0cmVtZWx5c2F0aXNmYWN0b3J5dG90YWxpdGFyaWFuaXNtLmNvbS9ibG9nLz9wPTIxMjBcblxuXHRcdHZhciBhLCBiLCBjLCBkLCBlLCBmLCBkZXQsIGlkZXQsXG5cdFx0XHRvZmZzZXRYID0gdGV4dHVyZS5vZmZzZXQueCAvIHRleHR1cmUucmVwZWF0LngsXG5cdFx0XHRvZmZzZXRZID0gdGV4dHVyZS5vZmZzZXQueSAvIHRleHR1cmUucmVwZWF0LnksXG5cdFx0XHR3aWR0aCA9IHRleHR1cmUuaW1hZ2Uud2lkdGggKiB0ZXh0dXJlLnJlcGVhdC54LFxuXHRcdFx0aGVpZ2h0ID0gdGV4dHVyZS5pbWFnZS5oZWlnaHQgKiB0ZXh0dXJlLnJlcGVhdC55O1xuXG5cdFx0dTAgPSAoIHUwICsgb2Zmc2V0WCApICogd2lkdGg7XG5cdFx0djAgPSAoIHYwICsgb2Zmc2V0WSApICogaGVpZ2h0O1xuXG5cdFx0dTEgPSAoIHUxICsgb2Zmc2V0WCApICogd2lkdGg7XG5cdFx0djEgPSAoIHYxICsgb2Zmc2V0WSApICogaGVpZ2h0O1xuXG5cdFx0dTIgPSAoIHUyICsgb2Zmc2V0WCApICogd2lkdGg7XG5cdFx0djIgPSAoIHYyICsgb2Zmc2V0WSApICogaGVpZ2h0O1xuXG5cdFx0eDEgLT0geDA7IHkxIC09IHkwO1xuXHRcdHgyIC09IHgwOyB5MiAtPSB5MDtcblxuXHRcdHUxIC09IHUwOyB2MSAtPSB2MDtcblx0XHR1MiAtPSB1MDsgdjIgLT0gdjA7XG5cblx0XHRkZXQgPSB1MSAqIHYyIC0gdTIgKiB2MTtcblxuXHRcdGlmICggZGV0ID09PSAwICkgcmV0dXJuO1xuXG5cdFx0aWRldCA9IDEgLyBkZXQ7XG5cblx0XHRhID0gKCB2MiAqIHgxIC0gdjEgKiB4MiApICogaWRldDtcblx0XHRiID0gKCB2MiAqIHkxIC0gdjEgKiB5MiApICogaWRldDtcblx0XHRjID0gKCB1MSAqIHgyIC0gdTIgKiB4MSApICogaWRldDtcblx0XHRkID0gKCB1MSAqIHkyIC0gdTIgKiB5MSApICogaWRldDtcblxuXHRcdGUgPSB4MCAtIGEgKiB1MCAtIGMgKiB2MDtcblx0XHRmID0geTAgLSBiICogdTAgLSBkICogdjA7XG5cblx0XHRfY29udGV4dC5zYXZlKCk7XG5cdFx0X2NvbnRleHQudHJhbnNmb3JtKCBhLCBiLCBjLCBkLCBlLCBmICk7XG5cdFx0X2NvbnRleHQuZmlsbCgpO1xuXHRcdF9jb250ZXh0LnJlc3RvcmUoKTtcblxuXHR9XG5cblx0Lypcblx0ZnVuY3Rpb24gY2xpcEltYWdlKCB4MCwgeTAsIHgxLCB5MSwgeDIsIHkyLCB1MCwgdjAsIHUxLCB2MSwgdTIsIHYyLCBpbWFnZSApIHtcblxuXHRcdC8vIGh0dHA6Ly9leHRyZW1lbHlzYXRpc2ZhY3Rvcnl0b3RhbGl0YXJpYW5pc20uY29tL2Jsb2cvP3A9MjEyMFxuXG5cdFx0dmFyIGEsIGIsIGMsIGQsIGUsIGYsIGRldCwgaWRldCxcblx0XHR3aWR0aCA9IGltYWdlLndpZHRoIC0gMSxcblx0XHRoZWlnaHQgPSBpbWFnZS5oZWlnaHQgLSAxO1xuXG5cdFx0dTAgKj0gd2lkdGg7IHYwICo9IGhlaWdodDtcblx0XHR1MSAqPSB3aWR0aDsgdjEgKj0gaGVpZ2h0O1xuXHRcdHUyICo9IHdpZHRoOyB2MiAqPSBoZWlnaHQ7XG5cblx0XHR4MSAtPSB4MDsgeTEgLT0geTA7XG5cdFx0eDIgLT0geDA7IHkyIC09IHkwO1xuXG5cdFx0dTEgLT0gdTA7IHYxIC09IHYwO1xuXHRcdHUyIC09IHUwOyB2MiAtPSB2MDtcblxuXHRcdGRldCA9IHUxICogdjIgLSB1MiAqIHYxO1xuXG5cdFx0aWRldCA9IDEgLyBkZXQ7XG5cblx0XHRhID0gKCB2MiAqIHgxIC0gdjEgKiB4MiApICogaWRldDtcblx0XHRiID0gKCB2MiAqIHkxIC0gdjEgKiB5MiApICogaWRldDtcblx0XHRjID0gKCB1MSAqIHgyIC0gdTIgKiB4MSApICogaWRldDtcblx0XHRkID0gKCB1MSAqIHkyIC0gdTIgKiB5MSApICogaWRldDtcblxuXHRcdGUgPSB4MCAtIGEgKiB1MCAtIGMgKiB2MDtcblx0XHRmID0geTAgLSBiICogdTAgLSBkICogdjA7XG5cblx0XHRfY29udGV4dC5zYXZlKCk7XG5cdFx0X2NvbnRleHQudHJhbnNmb3JtKCBhLCBiLCBjLCBkLCBlLCBmICk7XG5cdFx0X2NvbnRleHQuY2xpcCgpO1xuXHRcdF9jb250ZXh0LmRyYXdJbWFnZSggaW1hZ2UsIDAsIDAgKTtcblx0XHRfY29udGV4dC5yZXN0b3JlKCk7XG5cblx0fVxuXHQqL1xuXG5cdC8vIEhpZGUgYW50aS1hbGlhcyBnYXBzXG5cblx0ZnVuY3Rpb24gZXhwYW5kKCB2MSwgdjIsIHBpeGVscyApIHtcblxuXHRcdHZhciB4ID0gdjIueCAtIHYxLngsIHkgPSB2Mi55IC0gdjEueSxcblx0XHRcdGRldCA9IHggKiB4ICsgeSAqIHksIGlkZXQ7XG5cblx0XHRpZiAoIGRldCA9PT0gMCApIHJldHVybjtcblxuXHRcdGlkZXQgPSBwaXhlbHMgLyBNYXRoLnNxcnQoIGRldCApO1xuXG5cdFx0eCAqPSBpZGV0OyB5ICo9IGlkZXQ7XG5cblx0XHR2Mi54ICs9IHg7IHYyLnkgKz0geTtcblx0XHR2MS54IC09IHg7IHYxLnkgLT0geTtcblxuXHR9XG5cblx0Ly8gQ29udGV4dCBjYWNoZWQgbWV0aG9kcy5cblxuXHRmdW5jdGlvbiBzZXRPcGFjaXR5KCB2YWx1ZSApIHtcblxuXHRcdGlmICggX2NvbnRleHRHbG9iYWxBbHBoYSAhPT0gdmFsdWUgKSB7XG5cblx0XHRcdF9jb250ZXh0Lmdsb2JhbEFscGhhID0gdmFsdWU7XG5cdFx0XHRfY29udGV4dEdsb2JhbEFscGhhID0gdmFsdWU7XG5cblx0XHR9XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHNldEJsZW5kaW5nKCB2YWx1ZSApIHtcblxuXHRcdGlmICggX2NvbnRleHRHbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gIT09IHZhbHVlICkge1xuXG5cdFx0XHRpZiAoIHZhbHVlID09PSBUSFJFRS5Ob3JtYWxCbGVuZGluZyApIHtcblxuXHRcdFx0XHRfY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnc291cmNlLW92ZXInO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCB2YWx1ZSA9PT0gVEhSRUUuQWRkaXRpdmVCbGVuZGluZyApIHtcblxuXHRcdFx0XHRfY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnbGlnaHRlcic7XG5cblx0XHRcdH0gZWxzZSBpZiAoIHZhbHVlID09PSBUSFJFRS5TdWJ0cmFjdGl2ZUJsZW5kaW5nICkge1xuXG5cdFx0XHRcdF9jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdkYXJrZXInO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCB2YWx1ZSA9PT0gVEhSRUUuTXVsdGlwbHlCbGVuZGluZyApIHtcblxuXHRcdFx0XHRfY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnbXVsdGlwbHknO1xuXG5cdFx0XHR9XG5cblx0XHRcdF9jb250ZXh0R2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gdmFsdWU7XG5cblx0XHR9XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHNldExpbmVXaWR0aCggdmFsdWUgKSB7XG5cblx0XHRpZiAoIF9jb250ZXh0TGluZVdpZHRoICE9PSB2YWx1ZSApIHtcblxuXHRcdFx0X2NvbnRleHQubGluZVdpZHRoID0gdmFsdWU7XG5cdFx0XHRfY29udGV4dExpbmVXaWR0aCA9IHZhbHVlO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRmdW5jdGlvbiBzZXRMaW5lQ2FwKCB2YWx1ZSApIHtcblxuXHRcdC8vIFwiYnV0dFwiLCBcInJvdW5kXCIsIFwic3F1YXJlXCJcblxuXHRcdGlmICggX2NvbnRleHRMaW5lQ2FwICE9PSB2YWx1ZSApIHtcblxuXHRcdFx0X2NvbnRleHQubGluZUNhcCA9IHZhbHVlO1xuXHRcdFx0X2NvbnRleHRMaW5lQ2FwID0gdmFsdWU7XG5cblx0XHR9XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHNldExpbmVKb2luKCB2YWx1ZSApIHtcblxuXHRcdC8vIFwicm91bmRcIiwgXCJiZXZlbFwiLCBcIm1pdGVyXCJcblxuXHRcdGlmICggX2NvbnRleHRMaW5lSm9pbiAhPT0gdmFsdWUgKSB7XG5cblx0XHRcdF9jb250ZXh0LmxpbmVKb2luID0gdmFsdWU7XG5cdFx0XHRfY29udGV4dExpbmVKb2luID0gdmFsdWU7XG5cblx0XHR9XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHNldFN0cm9rZVN0eWxlKCB2YWx1ZSApIHtcblxuXHRcdGlmICggX2NvbnRleHRTdHJva2VTdHlsZSAhPT0gdmFsdWUgKSB7XG5cblx0XHRcdF9jb250ZXh0LnN0cm9rZVN0eWxlID0gdmFsdWU7XG5cdFx0XHRfY29udGV4dFN0cm9rZVN0eWxlID0gdmFsdWU7XG5cblx0XHR9XG5cblx0fVxuXG5cdGZ1bmN0aW9uIHNldEZpbGxTdHlsZSggdmFsdWUgKSB7XG5cblx0XHRpZiAoIF9jb250ZXh0RmlsbFN0eWxlICE9PSB2YWx1ZSApIHtcblxuXHRcdFx0X2NvbnRleHQuZmlsbFN0eWxlID0gdmFsdWU7XG5cdFx0XHRfY29udGV4dEZpbGxTdHlsZSA9IHZhbHVlO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRmdW5jdGlvbiBzZXRMaW5lRGFzaCggdmFsdWUgKSB7XG5cblx0XHRpZiAoIF9jb250ZXh0TGluZURhc2gubGVuZ3RoICE9PSB2YWx1ZS5sZW5ndGggKSB7XG5cblx0XHRcdF9jb250ZXh0LnNldExpbmVEYXNoKCB2YWx1ZSApO1xuXHRcdFx0X2NvbnRleHRMaW5lRGFzaCA9IHZhbHVlO1xuXG5cdFx0fVxuXG5cdH1cblxufTtcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLyoqXG4gKiBAYXV0aG9yIG1yZG9vYiAvIGh0dHA6Ly9tcmRvb2IuY29tL1xuICogQGF1dGhvciBzdXBlcmVnZ2JlcnQgLyBodHRwOi8vd3d3LnBhdWxicnVudC5jby51ay9cbiAqIEBhdXRob3IganVsaWFud2EgLyBodHRwczovL2dpdGh1Yi5jb20vanVsaWFud2FcbiAqL1xuXG5USFJFRS5SZW5kZXJhYmxlT2JqZWN0ID0gZnVuY3Rpb24gKCkge1xuXG5cdHRoaXMuaWQgPSAwO1xuXG5cdHRoaXMub2JqZWN0ID0gbnVsbDtcblx0dGhpcy56ID0gMDtcblx0dGhpcy5yZW5kZXJPcmRlciA9IDA7XG5cbn07XG5cbi8vXG5cblRIUkVFLlJlbmRlcmFibGVGYWNlID0gZnVuY3Rpb24gKCkge1xuXG5cdHRoaXMuaWQgPSAwO1xuXG5cdHRoaXMudjEgPSBuZXcgVEhSRUUuUmVuZGVyYWJsZVZlcnRleCgpO1xuXHR0aGlzLnYyID0gbmV3IFRIUkVFLlJlbmRlcmFibGVWZXJ0ZXgoKTtcblx0dGhpcy52MyA9IG5ldyBUSFJFRS5SZW5kZXJhYmxlVmVydGV4KCk7XG5cblx0dGhpcy5ub3JtYWxNb2RlbCA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7XG5cblx0dGhpcy52ZXJ0ZXhOb3JtYWxzTW9kZWwgPSBbIG5ldyBUSFJFRS5WZWN0b3IzKCksIG5ldyBUSFJFRS5WZWN0b3IzKCksIG5ldyBUSFJFRS5WZWN0b3IzKCkgXTtcblx0dGhpcy52ZXJ0ZXhOb3JtYWxzTGVuZ3RoID0gMDtcblxuXHR0aGlzLmNvbG9yID0gbmV3IFRIUkVFLkNvbG9yKCk7XG5cdHRoaXMubWF0ZXJpYWwgPSBudWxsO1xuXHR0aGlzLnV2cyA9IFsgbmV3IFRIUkVFLlZlY3RvcjIoKSwgbmV3IFRIUkVFLlZlY3RvcjIoKSwgbmV3IFRIUkVFLlZlY3RvcjIoKSBdO1xuXG5cdHRoaXMueiA9IDA7XG5cdHRoaXMucmVuZGVyT3JkZXIgPSAwO1xuXG59O1xuXG4vL1xuXG5USFJFRS5SZW5kZXJhYmxlVmVydGV4ID0gZnVuY3Rpb24gKCkge1xuXG5cdHRoaXMucG9zaXRpb24gPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xuXHR0aGlzLnBvc2l0aW9uV29ybGQgPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xuXHR0aGlzLnBvc2l0aW9uU2NyZWVuID0gbmV3IFRIUkVFLlZlY3RvcjQoKTtcblxuXHR0aGlzLnZpc2libGUgPSB0cnVlO1xuXG59O1xuXG5USFJFRS5SZW5kZXJhYmxlVmVydGV4LnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gKCB2ZXJ0ZXggKSB7XG5cblx0dGhpcy5wb3NpdGlvbldvcmxkLmNvcHkoIHZlcnRleC5wb3NpdGlvbldvcmxkICk7XG5cdHRoaXMucG9zaXRpb25TY3JlZW4uY29weSggdmVydGV4LnBvc2l0aW9uU2NyZWVuICk7XG5cbn07XG5cbi8vXG5cblRIUkVFLlJlbmRlcmFibGVMaW5lID0gZnVuY3Rpb24gKCkge1xuXG5cdHRoaXMuaWQgPSAwO1xuXG5cdHRoaXMudjEgPSBuZXcgVEhSRUUuUmVuZGVyYWJsZVZlcnRleCgpO1xuXHR0aGlzLnYyID0gbmV3IFRIUkVFLlJlbmRlcmFibGVWZXJ0ZXgoKTtcblxuXHR0aGlzLnZlcnRleENvbG9ycyA9IFsgbmV3IFRIUkVFLkNvbG9yKCksIG5ldyBUSFJFRS5Db2xvcigpIF07XG5cdHRoaXMubWF0ZXJpYWwgPSBudWxsO1xuXG5cdHRoaXMueiA9IDA7XG5cdHRoaXMucmVuZGVyT3JkZXIgPSAwO1xuXG59O1xuXG4vL1xuXG5USFJFRS5SZW5kZXJhYmxlU3ByaXRlID0gZnVuY3Rpb24gKCkge1xuXG5cdHRoaXMuaWQgPSAwO1xuXG5cdHRoaXMub2JqZWN0ID0gbnVsbDtcblxuXHR0aGlzLnggPSAwO1xuXHR0aGlzLnkgPSAwO1xuXHR0aGlzLnogPSAwO1xuXG5cdHRoaXMucm90YXRpb24gPSAwO1xuXHR0aGlzLnNjYWxlID0gbmV3IFRIUkVFLlZlY3RvcjIoKTtcblxuXHR0aGlzLm1hdGVyaWFsID0gbnVsbDtcblx0dGhpcy5yZW5kZXJPcmRlciA9IDA7XG5cbn07XG5cbi8vXG5cblRIUkVFLlByb2plY3RvciA9IGZ1bmN0aW9uICgpIHtcblxuXHR2YXIgX29iamVjdCwgX29iamVjdENvdW50LCBfb2JqZWN0UG9vbCA9IFtdLCBfb2JqZWN0UG9vbExlbmd0aCA9IDAsXG5cdFx0X3ZlcnRleCwgX3ZlcnRleENvdW50LCBfdmVydGV4UG9vbCA9IFtdLCBfdmVydGV4UG9vbExlbmd0aCA9IDAsXG5cdFx0X2ZhY2UsIF9mYWNlQ291bnQsIF9mYWNlUG9vbCA9IFtdLCBfZmFjZVBvb2xMZW5ndGggPSAwLFxuXHRcdF9saW5lLCBfbGluZUNvdW50LCBfbGluZVBvb2wgPSBbXSwgX2xpbmVQb29sTGVuZ3RoID0gMCxcblx0XHRfc3ByaXRlLCBfc3ByaXRlQ291bnQsIF9zcHJpdGVQb29sID0gW10sIF9zcHJpdGVQb29sTGVuZ3RoID0gMCxcblxuXHRcdF9yZW5kZXJEYXRhID0geyBvYmplY3RzOiBbXSwgbGlnaHRzOiBbXSwgZWxlbWVudHM6IFtdIH0sXG5cblx0XHRfdmVjdG9yMyA9IG5ldyBUSFJFRS5WZWN0b3IzKCksXG5cdFx0X3ZlY3RvcjQgPSBuZXcgVEhSRUUuVmVjdG9yNCgpLFxuXG5cdFx0X2NsaXBCb3ggPSBuZXcgVEhSRUUuQm94MyggbmV3IFRIUkVFLlZlY3RvcjMoIC0gMSwgLSAxLCAtIDEgKSwgbmV3IFRIUkVFLlZlY3RvcjMoIDEsIDEsIDEgKSApLFxuXHRcdF9ib3VuZGluZ0JveCA9IG5ldyBUSFJFRS5Cb3gzKCksXG5cdFx0X3BvaW50czMgPSBuZXcgQXJyYXkoIDMgKSxcblxuXHRcdF92aWV3TWF0cml4ID0gbmV3IFRIUkVFLk1hdHJpeDQoKSxcblx0XHRfdmlld1Byb2plY3Rpb25NYXRyaXggPSBuZXcgVEhSRUUuTWF0cml4NCgpLFxuXG5cdFx0X21vZGVsTWF0cml4LFxuXHRcdF9tb2RlbFZpZXdQcm9qZWN0aW9uTWF0cml4ID0gbmV3IFRIUkVFLk1hdHJpeDQoKSxcblxuXHRcdF9ub3JtYWxNYXRyaXggPSBuZXcgVEhSRUUuTWF0cml4MygpLFxuXG5cdFx0X2ZydXN0dW0gPSBuZXcgVEhSRUUuRnJ1c3R1bSgpLFxuXG5cdFx0X2NsaXBwZWRWZXJ0ZXgxUG9zaXRpb25TY3JlZW4gPSBuZXcgVEhSRUUuVmVjdG9yNCgpLFxuXHRcdF9jbGlwcGVkVmVydGV4MlBvc2l0aW9uU2NyZWVuID0gbmV3IFRIUkVFLlZlY3RvcjQoKTtcblxuXHQvL1xuXG5cdHRoaXMucHJvamVjdFZlY3RvciA9IGZ1bmN0aW9uICggdmVjdG9yLCBjYW1lcmEgKSB7XG5cblx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5Qcm9qZWN0b3I6IC5wcm9qZWN0VmVjdG9yKCkgaXMgbm93IHZlY3Rvci5wcm9qZWN0KCkuJyApO1xuXHRcdHZlY3Rvci5wcm9qZWN0KCBjYW1lcmEgKTtcblxuXHR9O1xuXG5cdHRoaXMudW5wcm9qZWN0VmVjdG9yID0gZnVuY3Rpb24gKCB2ZWN0b3IsIGNhbWVyYSApIHtcblxuXHRcdGNvbnNvbGUud2FybiggJ1RIUkVFLlByb2plY3RvcjogLnVucHJvamVjdFZlY3RvcigpIGlzIG5vdyB2ZWN0b3IudW5wcm9qZWN0KCkuJyApO1xuXHRcdHZlY3Rvci51bnByb2plY3QoIGNhbWVyYSApO1xuXG5cdH07XG5cblx0dGhpcy5waWNraW5nUmF5ID0gZnVuY3Rpb24gKCkge1xuXG5cdFx0Y29uc29sZS5lcnJvciggJ1RIUkVFLlByb2plY3RvcjogLnBpY2tpbmdSYXkoKSBpcyBub3cgcmF5Y2FzdGVyLnNldEZyb21DYW1lcmEoKS4nICk7XG5cblx0fTtcblxuXHQvL1xuXG5cdHZhciBSZW5kZXJMaXN0ID0gZnVuY3Rpb24gKCkge1xuXG5cdFx0dmFyIG5vcm1hbHMgPSBbXTtcblx0XHR2YXIgY29sb3JzID0gW107XG5cdFx0dmFyIHV2cyA9IFtdO1xuXG5cdFx0dmFyIG9iamVjdCA9IG51bGw7XG5cdFx0dmFyIG1hdGVyaWFsID0gbnVsbDtcblxuXHRcdHZhciBub3JtYWxNYXRyaXggPSBuZXcgVEhSRUUuTWF0cml4MygpO1xuXG5cdFx0ZnVuY3Rpb24gc2V0T2JqZWN0KCB2YWx1ZSApIHtcblxuXHRcdFx0b2JqZWN0ID0gdmFsdWU7XG5cdFx0XHRtYXRlcmlhbCA9IG9iamVjdC5tYXRlcmlhbDtcblxuXHRcdFx0bm9ybWFsTWF0cml4LmdldE5vcm1hbE1hdHJpeCggb2JqZWN0Lm1hdHJpeFdvcmxkICk7XG5cblx0XHRcdG5vcm1hbHMubGVuZ3RoID0gMDtcblx0XHRcdGNvbG9ycy5sZW5ndGggPSAwO1xuXHRcdFx0dXZzLmxlbmd0aCA9IDA7XG5cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBwcm9qZWN0VmVydGV4KCB2ZXJ0ZXggKSB7XG5cblx0XHRcdHZhciBwb3NpdGlvbiA9IHZlcnRleC5wb3NpdGlvbjtcblx0XHRcdHZhciBwb3NpdGlvbldvcmxkID0gdmVydGV4LnBvc2l0aW9uV29ybGQ7XG5cdFx0XHR2YXIgcG9zaXRpb25TY3JlZW4gPSB2ZXJ0ZXgucG9zaXRpb25TY3JlZW47XG5cblx0XHRcdHBvc2l0aW9uV29ybGQuY29weSggcG9zaXRpb24gKS5hcHBseU1hdHJpeDQoIF9tb2RlbE1hdHJpeCApO1xuXHRcdFx0cG9zaXRpb25TY3JlZW4uY29weSggcG9zaXRpb25Xb3JsZCApLmFwcGx5TWF0cml4NCggX3ZpZXdQcm9qZWN0aW9uTWF0cml4ICk7XG5cblx0XHRcdHZhciBpbnZXID0gMSAvIHBvc2l0aW9uU2NyZWVuLnc7XG5cblx0XHRcdHBvc2l0aW9uU2NyZWVuLnggKj0gaW52Vztcblx0XHRcdHBvc2l0aW9uU2NyZWVuLnkgKj0gaW52Vztcblx0XHRcdHBvc2l0aW9uU2NyZWVuLnogKj0gaW52VztcblxuXHRcdFx0dmVydGV4LnZpc2libGUgPSBwb3NpdGlvblNjcmVlbi54ID49IC0gMSAmJiBwb3NpdGlvblNjcmVlbi54IDw9IDEgJiZcblx0XHRcdFx0XHQgcG9zaXRpb25TY3JlZW4ueSA+PSAtIDEgJiYgcG9zaXRpb25TY3JlZW4ueSA8PSAxICYmXG5cdFx0XHRcdFx0IHBvc2l0aW9uU2NyZWVuLnogPj0gLSAxICYmIHBvc2l0aW9uU2NyZWVuLnogPD0gMTtcblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIHB1c2hWZXJ0ZXgoIHgsIHksIHogKSB7XG5cblx0XHRcdF92ZXJ0ZXggPSBnZXROZXh0VmVydGV4SW5Qb29sKCk7XG5cdFx0XHRfdmVydGV4LnBvc2l0aW9uLnNldCggeCwgeSwgeiApO1xuXG5cdFx0XHRwcm9qZWN0VmVydGV4KCBfdmVydGV4ICk7XG5cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBwdXNoTm9ybWFsKCB4LCB5LCB6ICkge1xuXG5cdFx0XHRub3JtYWxzLnB1c2goIHgsIHksIHogKTtcblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIHB1c2hDb2xvciggciwgZywgYiApIHtcblxuXHRcdFx0Y29sb3JzLnB1c2goIHIsIGcsIGIgKTtcblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIHB1c2hVdiggeCwgeSApIHtcblxuXHRcdFx0dXZzLnB1c2goIHgsIHkgKTtcblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGNoZWNrVHJpYW5nbGVWaXNpYmlsaXR5KCB2MSwgdjIsIHYzICkge1xuXG5cdFx0XHRpZiAoIHYxLnZpc2libGUgPT09IHRydWUgfHwgdjIudmlzaWJsZSA9PT0gdHJ1ZSB8fCB2My52aXNpYmxlID09PSB0cnVlICkgcmV0dXJuIHRydWU7XG5cblx0XHRcdF9wb2ludHMzWyAwIF0gPSB2MS5wb3NpdGlvblNjcmVlbjtcblx0XHRcdF9wb2ludHMzWyAxIF0gPSB2Mi5wb3NpdGlvblNjcmVlbjtcblx0XHRcdF9wb2ludHMzWyAyIF0gPSB2My5wb3NpdGlvblNjcmVlbjtcblxuXHRcdFx0cmV0dXJuIF9jbGlwQm94LmludGVyc2VjdHNCb3goIF9ib3VuZGluZ0JveC5zZXRGcm9tUG9pbnRzKCBfcG9pbnRzMyApICk7XG5cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBjaGVja0JhY2tmYWNlQ3VsbGluZyggdjEsIHYyLCB2MyApIHtcblxuXHRcdFx0cmV0dXJuICggKCB2My5wb3NpdGlvblNjcmVlbi54IC0gdjEucG9zaXRpb25TY3JlZW4ueCApICpcblx0XHRcdFx0ICAgICggdjIucG9zaXRpb25TY3JlZW4ueSAtIHYxLnBvc2l0aW9uU2NyZWVuLnkgKSAtXG5cdFx0XHRcdCAgICAoIHYzLnBvc2l0aW9uU2NyZWVuLnkgLSB2MS5wb3NpdGlvblNjcmVlbi55ICkgKlxuXHRcdFx0XHQgICAgKCB2Mi5wb3NpdGlvblNjcmVlbi54IC0gdjEucG9zaXRpb25TY3JlZW4ueCApICkgPCAwO1xuXG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gcHVzaExpbmUoIGEsIGIgKSB7XG5cblx0XHRcdHZhciB2MSA9IF92ZXJ0ZXhQb29sWyBhIF07XG5cdFx0XHR2YXIgdjIgPSBfdmVydGV4UG9vbFsgYiBdO1xuXG5cdFx0XHQvLyBDbGlwXG5cblx0XHRcdHYxLnBvc2l0aW9uU2NyZWVuLmNvcHkoIHYxLnBvc2l0aW9uICkuYXBwbHlNYXRyaXg0KCBfbW9kZWxWaWV3UHJvamVjdGlvbk1hdHJpeCApO1xuXHRcdFx0djIucG9zaXRpb25TY3JlZW4uY29weSggdjIucG9zaXRpb24gKS5hcHBseU1hdHJpeDQoIF9tb2RlbFZpZXdQcm9qZWN0aW9uTWF0cml4ICk7XG5cblx0XHRcdGlmICggY2xpcExpbmUoIHYxLnBvc2l0aW9uU2NyZWVuLCB2Mi5wb3NpdGlvblNjcmVlbiApID09PSB0cnVlICkge1xuXG5cdFx0XHRcdC8vIFBlcmZvcm0gdGhlIHBlcnNwZWN0aXZlIGRpdmlkZVxuXHRcdFx0XHR2MS5wb3NpdGlvblNjcmVlbi5tdWx0aXBseVNjYWxhciggMSAvIHYxLnBvc2l0aW9uU2NyZWVuLncgKTtcblx0XHRcdFx0djIucG9zaXRpb25TY3JlZW4ubXVsdGlwbHlTY2FsYXIoIDEgLyB2Mi5wb3NpdGlvblNjcmVlbi53ICk7XG5cblx0XHRcdFx0X2xpbmUgPSBnZXROZXh0TGluZUluUG9vbCgpO1xuXHRcdFx0XHRfbGluZS5pZCA9IG9iamVjdC5pZDtcblx0XHRcdFx0X2xpbmUudjEuY29weSggdjEgKTtcblx0XHRcdFx0X2xpbmUudjIuY29weSggdjIgKTtcblx0XHRcdFx0X2xpbmUueiA9IE1hdGgubWF4KCB2MS5wb3NpdGlvblNjcmVlbi56LCB2Mi5wb3NpdGlvblNjcmVlbi56ICk7XG5cdFx0XHRcdF9saW5lLnJlbmRlck9yZGVyID0gb2JqZWN0LnJlbmRlck9yZGVyO1xuXG5cdFx0XHRcdF9saW5lLm1hdGVyaWFsID0gb2JqZWN0Lm1hdGVyaWFsO1xuXG5cdFx0XHRcdGlmICggb2JqZWN0Lm1hdGVyaWFsLnZlcnRleENvbG9ycyA9PT0gVEhSRUUuVmVydGV4Q29sb3JzICkge1xuXG5cdFx0XHRcdFx0X2xpbmUudmVydGV4Q29sb3JzWyAwIF0uZnJvbUFycmF5KCBjb2xvcnMsIGEgKiAzICk7XG5cdFx0XHRcdFx0X2xpbmUudmVydGV4Q29sb3JzWyAxIF0uZnJvbUFycmF5KCBjb2xvcnMsIGIgKiAzICk7XG5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdF9yZW5kZXJEYXRhLmVsZW1lbnRzLnB1c2goIF9saW5lICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIHB1c2hUcmlhbmdsZSggYSwgYiwgYyApIHtcblxuXHRcdFx0dmFyIHYxID0gX3ZlcnRleFBvb2xbIGEgXTtcblx0XHRcdHZhciB2MiA9IF92ZXJ0ZXhQb29sWyBiIF07XG5cdFx0XHR2YXIgdjMgPSBfdmVydGV4UG9vbFsgYyBdO1xuXG5cdFx0XHRpZiAoIGNoZWNrVHJpYW5nbGVWaXNpYmlsaXR5KCB2MSwgdjIsIHYzICkgPT09IGZhbHNlICkgcmV0dXJuO1xuXG5cdFx0XHRpZiAoIG1hdGVyaWFsLnNpZGUgPT09IFRIUkVFLkRvdWJsZVNpZGUgfHwgY2hlY2tCYWNrZmFjZUN1bGxpbmcoIHYxLCB2MiwgdjMgKSA9PT0gdHJ1ZSApIHtcblxuXHRcdFx0XHRfZmFjZSA9IGdldE5leHRGYWNlSW5Qb29sKCk7XG5cblx0XHRcdFx0X2ZhY2UuaWQgPSBvYmplY3QuaWQ7XG5cdFx0XHRcdF9mYWNlLnYxLmNvcHkoIHYxICk7XG5cdFx0XHRcdF9mYWNlLnYyLmNvcHkoIHYyICk7XG5cdFx0XHRcdF9mYWNlLnYzLmNvcHkoIHYzICk7XG5cdFx0XHRcdF9mYWNlLnogPSAoIHYxLnBvc2l0aW9uU2NyZWVuLnogKyB2Mi5wb3NpdGlvblNjcmVlbi56ICsgdjMucG9zaXRpb25TY3JlZW4ueiApIC8gMztcblx0XHRcdFx0X2ZhY2UucmVuZGVyT3JkZXIgPSBvYmplY3QucmVuZGVyT3JkZXI7XG5cblx0XHRcdFx0Ly8gdXNlIGZpcnN0IHZlcnRleCBub3JtYWwgYXMgZmFjZSBub3JtYWxcblxuXHRcdFx0XHRfZmFjZS5ub3JtYWxNb2RlbC5mcm9tQXJyYXkoIG5vcm1hbHMsIGEgKiAzICk7XG5cdFx0XHRcdF9mYWNlLm5vcm1hbE1vZGVsLmFwcGx5TWF0cml4Myggbm9ybWFsTWF0cml4ICkubm9ybWFsaXplKCk7XG5cblx0XHRcdFx0Zm9yICggdmFyIGkgPSAwOyBpIDwgMzsgaSArKyApIHtcblxuXHRcdFx0XHRcdHZhciBub3JtYWwgPSBfZmFjZS52ZXJ0ZXhOb3JtYWxzTW9kZWxbIGkgXTtcblx0XHRcdFx0XHRub3JtYWwuZnJvbUFycmF5KCBub3JtYWxzLCBhcmd1bWVudHNbIGkgXSAqIDMgKTtcblx0XHRcdFx0XHRub3JtYWwuYXBwbHlNYXRyaXgzKCBub3JtYWxNYXRyaXggKS5ub3JtYWxpemUoKTtcblxuXHRcdFx0XHRcdHZhciB1diA9IF9mYWNlLnV2c1sgaSBdO1xuXHRcdFx0XHRcdHV2LmZyb21BcnJheSggdXZzLCBhcmd1bWVudHNbIGkgXSAqIDIgKTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0X2ZhY2UudmVydGV4Tm9ybWFsc0xlbmd0aCA9IDM7XG5cblx0XHRcdFx0X2ZhY2UubWF0ZXJpYWwgPSBvYmplY3QubWF0ZXJpYWw7XG5cblx0XHRcdFx0X3JlbmRlckRhdGEuZWxlbWVudHMucHVzaCggX2ZhY2UgKTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdHNldE9iamVjdDogc2V0T2JqZWN0LFxuXHRcdFx0cHJvamVjdFZlcnRleDogcHJvamVjdFZlcnRleCxcblx0XHRcdGNoZWNrVHJpYW5nbGVWaXNpYmlsaXR5OiBjaGVja1RyaWFuZ2xlVmlzaWJpbGl0eSxcblx0XHRcdGNoZWNrQmFja2ZhY2VDdWxsaW5nOiBjaGVja0JhY2tmYWNlQ3VsbGluZyxcblx0XHRcdHB1c2hWZXJ0ZXg6IHB1c2hWZXJ0ZXgsXG5cdFx0XHRwdXNoTm9ybWFsOiBwdXNoTm9ybWFsLFxuXHRcdFx0cHVzaENvbG9yOiBwdXNoQ29sb3IsXG5cdFx0XHRwdXNoVXY6IHB1c2hVdixcblx0XHRcdHB1c2hMaW5lOiBwdXNoTGluZSxcblx0XHRcdHB1c2hUcmlhbmdsZTogcHVzaFRyaWFuZ2xlXG5cdFx0fTtcblxuXHR9O1xuXG5cdHZhciByZW5kZXJMaXN0ID0gbmV3IFJlbmRlckxpc3QoKTtcblxuXHRmdW5jdGlvbiBwcm9qZWN0T2JqZWN0KCBvYmplY3QgKSB7XG5cblx0XHRpZiAoIG9iamVjdC52aXNpYmxlID09PSBmYWxzZSApIHJldHVybjtcblxuXHRcdGlmICggb2JqZWN0IGluc3RhbmNlb2YgVEhSRUUuTGlnaHQgKSB7XG5cblx0XHRcdF9yZW5kZXJEYXRhLmxpZ2h0cy5wdXNoKCBvYmplY3QgKTtcblxuXHRcdH0gZWxzZSBpZiAoIG9iamVjdCBpbnN0YW5jZW9mIFRIUkVFLk1lc2ggfHwgb2JqZWN0IGluc3RhbmNlb2YgVEhSRUUuTGluZSB8fCBvYmplY3QgaW5zdGFuY2VvZiBUSFJFRS5Qb2ludHMgKSB7XG5cblx0XHRcdGlmICggb2JqZWN0Lm1hdGVyaWFsLnZpc2libGUgPT09IGZhbHNlICkgcmV0dXJuO1xuXHRcdFx0aWYgKCBvYmplY3QuZnJ1c3R1bUN1bGxlZCA9PT0gdHJ1ZSAmJiBfZnJ1c3R1bS5pbnRlcnNlY3RzT2JqZWN0KCBvYmplY3QgKSA9PT0gZmFsc2UgKSByZXR1cm47XG5cblx0XHRcdGFkZE9iamVjdCggb2JqZWN0ICk7XG5cblx0XHR9IGVsc2UgaWYgKCBvYmplY3QgaW5zdGFuY2VvZiBUSFJFRS5TcHJpdGUgKSB7XG5cblx0XHRcdGlmICggb2JqZWN0Lm1hdGVyaWFsLnZpc2libGUgPT09IGZhbHNlICkgcmV0dXJuO1xuXHRcdFx0aWYgKCBvYmplY3QuZnJ1c3R1bUN1bGxlZCA9PT0gdHJ1ZSAmJiBfZnJ1c3R1bS5pbnRlcnNlY3RzU3ByaXRlKCBvYmplY3QgKSA9PT0gZmFsc2UgKSByZXR1cm47XG5cblx0XHRcdGFkZE9iamVjdCggb2JqZWN0ICk7XG5cblx0XHR9XG5cblx0XHR2YXIgY2hpbGRyZW4gPSBvYmplY3QuY2hpbGRyZW47XG5cblx0XHRmb3IgKCB2YXIgaSA9IDAsIGwgPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRwcm9qZWN0T2JqZWN0KCBjaGlsZHJlblsgaSBdICk7XG5cblx0XHR9XG5cblx0fVxuXG5cdGZ1bmN0aW9uIGFkZE9iamVjdCggb2JqZWN0ICkge1xuXG5cdFx0X29iamVjdCA9IGdldE5leHRPYmplY3RJblBvb2woKTtcblx0XHRfb2JqZWN0LmlkID0gb2JqZWN0LmlkO1xuXHRcdF9vYmplY3Qub2JqZWN0ID0gb2JqZWN0O1xuXG5cdFx0X3ZlY3RvcjMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCBvYmplY3QubWF0cml4V29ybGQgKTtcblx0XHRfdmVjdG9yMy5hcHBseU1hdHJpeDQoIF92aWV3UHJvamVjdGlvbk1hdHJpeCApO1xuXHRcdF9vYmplY3QueiA9IF92ZWN0b3IzLno7XG5cdFx0X29iamVjdC5yZW5kZXJPcmRlciA9IG9iamVjdC5yZW5kZXJPcmRlcjtcblxuXHRcdF9yZW5kZXJEYXRhLm9iamVjdHMucHVzaCggX29iamVjdCApO1xuXG5cdH1cblxuXHR0aGlzLnByb2plY3RTY2VuZSA9IGZ1bmN0aW9uICggc2NlbmUsIGNhbWVyYSwgc29ydE9iamVjdHMsIHNvcnRFbGVtZW50cyApIHtcblxuXHRcdF9mYWNlQ291bnQgPSAwO1xuXHRcdF9saW5lQ291bnQgPSAwO1xuXHRcdF9zcHJpdGVDb3VudCA9IDA7XG5cblx0XHRfcmVuZGVyRGF0YS5lbGVtZW50cy5sZW5ndGggPSAwO1xuXG5cdFx0aWYgKCBzY2VuZS5hdXRvVXBkYXRlID09PSB0cnVlICkgc2NlbmUudXBkYXRlTWF0cml4V29ybGQoKTtcblx0XHRpZiAoIGNhbWVyYS5wYXJlbnQgPT09IG51bGwgKSBjYW1lcmEudXBkYXRlTWF0cml4V29ybGQoKTtcblxuXHRcdF92aWV3TWF0cml4LmNvcHkoIGNhbWVyYS5tYXRyaXhXb3JsZEludmVyc2UgKTtcblx0XHRfdmlld1Byb2plY3Rpb25NYXRyaXgubXVsdGlwbHlNYXRyaWNlcyggY2FtZXJhLnByb2plY3Rpb25NYXRyaXgsIF92aWV3TWF0cml4ICk7XG5cblx0XHRfZnJ1c3R1bS5zZXRGcm9tTWF0cml4KCBfdmlld1Byb2plY3Rpb25NYXRyaXggKTtcblxuXHRcdC8vXG5cblx0XHRfb2JqZWN0Q291bnQgPSAwO1xuXG5cdFx0X3JlbmRlckRhdGEub2JqZWN0cy5sZW5ndGggPSAwO1xuXHRcdF9yZW5kZXJEYXRhLmxpZ2h0cy5sZW5ndGggPSAwO1xuXG5cdFx0cHJvamVjdE9iamVjdCggc2NlbmUgKTtcblxuXHRcdGlmICggc29ydE9iamVjdHMgPT09IHRydWUgKSB7XG5cblx0XHRcdF9yZW5kZXJEYXRhLm9iamVjdHMuc29ydCggcGFpbnRlclNvcnQgKTtcblxuXHRcdH1cblxuXHRcdC8vXG5cblx0XHR2YXIgb2JqZWN0cyA9IF9yZW5kZXJEYXRhLm9iamVjdHM7XG5cblx0XHRmb3IgKCB2YXIgbyA9IDAsIG9sID0gb2JqZWN0cy5sZW5ndGg7IG8gPCBvbDsgbyArKyApIHtcblxuXHRcdFx0dmFyIG9iamVjdCA9IG9iamVjdHNbIG8gXS5vYmplY3Q7XG5cdFx0XHR2YXIgZ2VvbWV0cnkgPSBvYmplY3QuZ2VvbWV0cnk7XG5cblx0XHRcdHJlbmRlckxpc3Quc2V0T2JqZWN0KCBvYmplY3QgKTtcblxuXHRcdFx0X21vZGVsTWF0cml4ID0gb2JqZWN0Lm1hdHJpeFdvcmxkO1xuXG5cdFx0XHRfdmVydGV4Q291bnQgPSAwO1xuXG5cdFx0XHRpZiAoIG9iamVjdCBpbnN0YW5jZW9mIFRIUkVFLk1lc2ggKSB7XG5cblx0XHRcdFx0aWYgKCBnZW9tZXRyeSBpbnN0YW5jZW9mIFRIUkVFLkJ1ZmZlckdlb21ldHJ5ICkge1xuXG5cdFx0XHRcdFx0dmFyIGF0dHJpYnV0ZXMgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzO1xuXHRcdFx0XHRcdHZhciBncm91cHMgPSBnZW9tZXRyeS5ncm91cHM7XG5cblx0XHRcdFx0XHRpZiAoIGF0dHJpYnV0ZXMucG9zaXRpb24gPT09IHVuZGVmaW5lZCApIGNvbnRpbnVlO1xuXG5cdFx0XHRcdFx0dmFyIHBvc2l0aW9ucyA9IGF0dHJpYnV0ZXMucG9zaXRpb24uYXJyYXk7XG5cblx0XHRcdFx0XHRmb3IgKCB2YXIgaSA9IDAsIGwgPSBwb3NpdGlvbnMubGVuZ3RoOyBpIDwgbDsgaSArPSAzICkge1xuXG5cdFx0XHRcdFx0XHRyZW5kZXJMaXN0LnB1c2hWZXJ0ZXgoIHBvc2l0aW9uc1sgaSBdLCBwb3NpdGlvbnNbIGkgKyAxIF0sIHBvc2l0aW9uc1sgaSArIDIgXSApO1xuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKCBhdHRyaWJ1dGVzLm5vcm1hbCAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdFx0XHR2YXIgbm9ybWFscyA9IGF0dHJpYnV0ZXMubm9ybWFsLmFycmF5O1xuXG5cdFx0XHRcdFx0XHRmb3IgKCB2YXIgaSA9IDAsIGwgPSBub3JtYWxzLmxlbmd0aDsgaSA8IGw7IGkgKz0gMyApIHtcblxuXHRcdFx0XHRcdFx0XHRyZW5kZXJMaXN0LnB1c2hOb3JtYWwoIG5vcm1hbHNbIGkgXSwgbm9ybWFsc1sgaSArIDEgXSwgbm9ybWFsc1sgaSArIDIgXSApO1xuXG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoIGF0dHJpYnV0ZXMudXYgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRcdFx0dmFyIHV2cyA9IGF0dHJpYnV0ZXMudXYuYXJyYXk7XG5cblx0XHRcdFx0XHRcdGZvciAoIHZhciBpID0gMCwgbCA9IHV2cy5sZW5ndGg7IGkgPCBsOyBpICs9IDIgKSB7XG5cblx0XHRcdFx0XHRcdFx0cmVuZGVyTGlzdC5wdXNoVXYoIHV2c1sgaSBdLCB1dnNbIGkgKyAxIF0gKTtcblxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKCBnZW9tZXRyeS5pbmRleCAhPT0gbnVsbCApIHtcblxuXHRcdFx0XHRcdFx0dmFyIGluZGljZXMgPSBnZW9tZXRyeS5pbmRleC5hcnJheTtcblxuXHRcdFx0XHRcdFx0aWYgKCBncm91cHMubGVuZ3RoID4gMCApIHtcblxuXHRcdFx0XHRcdFx0XHRmb3IgKCB2YXIgZyA9IDA7IGcgPCBncm91cHMubGVuZ3RoOyBnICsrICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0dmFyIGdyb3VwID0gZ3JvdXBzWyBnIF07XG5cblx0XHRcdFx0XHRcdFx0XHRmb3IgKCB2YXIgaSA9IGdyb3VwLnN0YXJ0LCBsID0gZ3JvdXAuc3RhcnQgKyBncm91cC5jb3VudDsgaSA8IGw7IGkgKz0gMyApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0cmVuZGVyTGlzdC5wdXNoVHJpYW5nbGUoIGluZGljZXNbIGkgXSwgaW5kaWNlc1sgaSArIDEgXSwgaW5kaWNlc1sgaSArIDIgXSApO1xuXG5cdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHRmb3IgKCB2YXIgaSA9IDAsIGwgPSBpbmRpY2VzLmxlbmd0aDsgaSA8IGw7IGkgKz0gMyApIHtcblxuXHRcdFx0XHRcdFx0XHRcdHJlbmRlckxpc3QucHVzaFRyaWFuZ2xlKCBpbmRpY2VzWyBpIF0sIGluZGljZXNbIGkgKyAxIF0sIGluZGljZXNbIGkgKyAyIF0gKTtcblxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdGZvciAoIHZhciBpID0gMCwgbCA9IHBvc2l0aW9ucy5sZW5ndGggLyAzOyBpIDwgbDsgaSArPSAzICkge1xuXG5cdFx0XHRcdFx0XHRcdHJlbmRlckxpc3QucHVzaFRyaWFuZ2xlKCBpLCBpICsgMSwgaSArIDIgKTtcblxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH0gZWxzZSBpZiAoIGdlb21ldHJ5IGluc3RhbmNlb2YgVEhSRUUuR2VvbWV0cnkgKSB7XG5cblx0XHRcdFx0XHR2YXIgdmVydGljZXMgPSBnZW9tZXRyeS52ZXJ0aWNlcztcblx0XHRcdFx0XHR2YXIgZmFjZXMgPSBnZW9tZXRyeS5mYWNlcztcblx0XHRcdFx0XHR2YXIgZmFjZVZlcnRleFV2cyA9IGdlb21ldHJ5LmZhY2VWZXJ0ZXhVdnNbIDAgXTtcblxuXHRcdFx0XHRcdF9ub3JtYWxNYXRyaXguZ2V0Tm9ybWFsTWF0cml4KCBfbW9kZWxNYXRyaXggKTtcblxuXHRcdFx0XHRcdHZhciBtYXRlcmlhbCA9IG9iamVjdC5tYXRlcmlhbDtcblxuXHRcdFx0XHRcdHZhciBpc011bHRpTWF0ZXJpYWwgPSBBcnJheS5pc0FycmF5KCBtYXRlcmlhbCApO1xuXG5cdFx0XHRcdFx0Zm9yICggdmFyIHYgPSAwLCB2bCA9IHZlcnRpY2VzLmxlbmd0aDsgdiA8IHZsOyB2ICsrICkge1xuXG5cdFx0XHRcdFx0XHR2YXIgdmVydGV4ID0gdmVydGljZXNbIHYgXTtcblxuXHRcdFx0XHRcdFx0X3ZlY3RvcjMuY29weSggdmVydGV4ICk7XG5cblx0XHRcdFx0XHRcdGlmICggbWF0ZXJpYWwubW9ycGhUYXJnZXRzID09PSB0cnVlICkge1xuXG5cdFx0XHRcdFx0XHRcdHZhciBtb3JwaFRhcmdldHMgPSBnZW9tZXRyeS5tb3JwaFRhcmdldHM7XG5cdFx0XHRcdFx0XHRcdHZhciBtb3JwaEluZmx1ZW5jZXMgPSBvYmplY3QubW9ycGhUYXJnZXRJbmZsdWVuY2VzO1xuXG5cdFx0XHRcdFx0XHRcdGZvciAoIHZhciB0ID0gMCwgdGwgPSBtb3JwaFRhcmdldHMubGVuZ3RoOyB0IDwgdGw7IHQgKysgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHR2YXIgaW5mbHVlbmNlID0gbW9ycGhJbmZsdWVuY2VzWyB0IF07XG5cblx0XHRcdFx0XHRcdFx0XHRpZiAoIGluZmx1ZW5jZSA9PT0gMCApIGNvbnRpbnVlO1xuXG5cdFx0XHRcdFx0XHRcdFx0dmFyIHRhcmdldCA9IG1vcnBoVGFyZ2V0c1sgdCBdO1xuXHRcdFx0XHRcdFx0XHRcdHZhciB0YXJnZXRWZXJ0ZXggPSB0YXJnZXQudmVydGljZXNbIHYgXTtcblxuXHRcdFx0XHRcdFx0XHRcdF92ZWN0b3IzLnggKz0gKCB0YXJnZXRWZXJ0ZXgueCAtIHZlcnRleC54ICkgKiBpbmZsdWVuY2U7XG5cdFx0XHRcdFx0XHRcdFx0X3ZlY3RvcjMueSArPSAoIHRhcmdldFZlcnRleC55IC0gdmVydGV4LnkgKSAqIGluZmx1ZW5jZTtcblx0XHRcdFx0XHRcdFx0XHRfdmVjdG9yMy56ICs9ICggdGFyZ2V0VmVydGV4LnogLSB2ZXJ0ZXgueiApICogaW5mbHVlbmNlO1xuXG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRyZW5kZXJMaXN0LnB1c2hWZXJ0ZXgoIF92ZWN0b3IzLngsIF92ZWN0b3IzLnksIF92ZWN0b3IzLnogKTtcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGZvciAoIHZhciBmID0gMCwgZmwgPSBmYWNlcy5sZW5ndGg7IGYgPCBmbDsgZiArKyApIHtcblxuXHRcdFx0XHRcdFx0dmFyIGZhY2UgPSBmYWNlc1sgZiBdO1xuXG5cdFx0XHRcdFx0XHRtYXRlcmlhbCA9IGlzTXVsdGlNYXRlcmlhbCA9PT0gdHJ1ZVxuXHRcdFx0XHRcdFx0XHQgPyBvYmplY3QubWF0ZXJpYWxbIGZhY2UubWF0ZXJpYWxJbmRleCBdXG5cdFx0XHRcdFx0XHRcdCA6IG9iamVjdC5tYXRlcmlhbDtcblxuXHRcdFx0XHRcdFx0aWYgKCBtYXRlcmlhbCA9PT0gdW5kZWZpbmVkICkgY29udGludWU7XG5cblx0XHRcdFx0XHRcdHZhciBzaWRlID0gbWF0ZXJpYWwuc2lkZTtcblxuXHRcdFx0XHRcdFx0dmFyIHYxID0gX3ZlcnRleFBvb2xbIGZhY2UuYSBdO1xuXHRcdFx0XHRcdFx0dmFyIHYyID0gX3ZlcnRleFBvb2xbIGZhY2UuYiBdO1xuXHRcdFx0XHRcdFx0dmFyIHYzID0gX3ZlcnRleFBvb2xbIGZhY2UuYyBdO1xuXG5cdFx0XHRcdFx0XHRpZiAoIHJlbmRlckxpc3QuY2hlY2tUcmlhbmdsZVZpc2liaWxpdHkoIHYxLCB2MiwgdjMgKSA9PT0gZmFsc2UgKSBjb250aW51ZTtcblxuXHRcdFx0XHRcdFx0dmFyIHZpc2libGUgPSByZW5kZXJMaXN0LmNoZWNrQmFja2ZhY2VDdWxsaW5nKCB2MSwgdjIsIHYzICk7XG5cblx0XHRcdFx0XHRcdGlmICggc2lkZSAhPT0gVEhSRUUuRG91YmxlU2lkZSApIHtcblxuXHRcdFx0XHRcdFx0XHRpZiAoIHNpZGUgPT09IFRIUkVFLkZyb250U2lkZSAmJiB2aXNpYmxlID09PSBmYWxzZSApIGNvbnRpbnVlO1xuXHRcdFx0XHRcdFx0XHRpZiAoIHNpZGUgPT09IFRIUkVFLkJhY2tTaWRlICYmIHZpc2libGUgPT09IHRydWUgKSBjb250aW51ZTtcblxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRfZmFjZSA9IGdldE5leHRGYWNlSW5Qb29sKCk7XG5cblx0XHRcdFx0XHRcdF9mYWNlLmlkID0gb2JqZWN0LmlkO1xuXHRcdFx0XHRcdFx0X2ZhY2UudjEuY29weSggdjEgKTtcblx0XHRcdFx0XHRcdF9mYWNlLnYyLmNvcHkoIHYyICk7XG5cdFx0XHRcdFx0XHRfZmFjZS52My5jb3B5KCB2MyApO1xuXG5cdFx0XHRcdFx0XHRfZmFjZS5ub3JtYWxNb2RlbC5jb3B5KCBmYWNlLm5vcm1hbCApO1xuXG5cdFx0XHRcdFx0XHRpZiAoIHZpc2libGUgPT09IGZhbHNlICYmICggc2lkZSA9PT0gVEhSRUUuQmFja1NpZGUgfHwgc2lkZSA9PT0gVEhSRUUuRG91YmxlU2lkZSApICkge1xuXG5cdFx0XHRcdFx0XHRcdF9mYWNlLm5vcm1hbE1vZGVsLm5lZ2F0ZSgpO1xuXG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdF9mYWNlLm5vcm1hbE1vZGVsLmFwcGx5TWF0cml4MyggX25vcm1hbE1hdHJpeCApLm5vcm1hbGl6ZSgpO1xuXG5cdFx0XHRcdFx0XHR2YXIgZmFjZVZlcnRleE5vcm1hbHMgPSBmYWNlLnZlcnRleE5vcm1hbHM7XG5cblx0XHRcdFx0XHRcdGZvciAoIHZhciBuID0gMCwgbmwgPSBNYXRoLm1pbiggZmFjZVZlcnRleE5vcm1hbHMubGVuZ3RoLCAzICk7IG4gPCBubDsgbiArKyApIHtcblxuXHRcdFx0XHRcdFx0XHR2YXIgbm9ybWFsTW9kZWwgPSBfZmFjZS52ZXJ0ZXhOb3JtYWxzTW9kZWxbIG4gXTtcblx0XHRcdFx0XHRcdFx0bm9ybWFsTW9kZWwuY29weSggZmFjZVZlcnRleE5vcm1hbHNbIG4gXSApO1xuXG5cdFx0XHRcdFx0XHRcdGlmICggdmlzaWJsZSA9PT0gZmFsc2UgJiYgKCBzaWRlID09PSBUSFJFRS5CYWNrU2lkZSB8fCBzaWRlID09PSBUSFJFRS5Eb3VibGVTaWRlICkgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRub3JtYWxNb2RlbC5uZWdhdGUoKTtcblxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0bm9ybWFsTW9kZWwuYXBwbHlNYXRyaXgzKCBfbm9ybWFsTWF0cml4ICkubm9ybWFsaXplKCk7XG5cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0X2ZhY2UudmVydGV4Tm9ybWFsc0xlbmd0aCA9IGZhY2VWZXJ0ZXhOb3JtYWxzLmxlbmd0aDtcblxuXHRcdFx0XHRcdFx0dmFyIHZlcnRleFV2cyA9IGZhY2VWZXJ0ZXhVdnNbIGYgXTtcblxuXHRcdFx0XHRcdFx0aWYgKCB2ZXJ0ZXhVdnMgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRcdFx0XHRmb3IgKCB2YXIgdSA9IDA7IHUgPCAzOyB1ICsrICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0X2ZhY2UudXZzWyB1IF0uY29weSggdmVydGV4VXZzWyB1IF0gKTtcblxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0X2ZhY2UuY29sb3IgPSBmYWNlLmNvbG9yO1xuXHRcdFx0XHRcdFx0X2ZhY2UubWF0ZXJpYWwgPSBtYXRlcmlhbDtcblxuXHRcdFx0XHRcdFx0X2ZhY2UueiA9ICggdjEucG9zaXRpb25TY3JlZW4ueiArIHYyLnBvc2l0aW9uU2NyZWVuLnogKyB2My5wb3NpdGlvblNjcmVlbi56ICkgLyAzO1xuXHRcdFx0XHRcdFx0X2ZhY2UucmVuZGVyT3JkZXIgPSBvYmplY3QucmVuZGVyT3JkZXI7XG5cblx0XHRcdFx0XHRcdF9yZW5kZXJEYXRhLmVsZW1lbnRzLnB1c2goIF9mYWNlICk7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fVxuXG5cdFx0XHR9IGVsc2UgaWYgKCBvYmplY3QgaW5zdGFuY2VvZiBUSFJFRS5MaW5lICkge1xuXG5cdFx0XHRcdF9tb2RlbFZpZXdQcm9qZWN0aW9uTWF0cml4Lm11bHRpcGx5TWF0cmljZXMoIF92aWV3UHJvamVjdGlvbk1hdHJpeCwgX21vZGVsTWF0cml4ICk7XG5cblx0XHRcdFx0aWYgKCBnZW9tZXRyeSBpbnN0YW5jZW9mIFRIUkVFLkJ1ZmZlckdlb21ldHJ5ICkge1xuXG5cdFx0XHRcdFx0dmFyIGF0dHJpYnV0ZXMgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzO1xuXG5cdFx0XHRcdFx0aWYgKCBhdHRyaWJ1dGVzLnBvc2l0aW9uICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0XHRcdHZhciBwb3NpdGlvbnMgPSBhdHRyaWJ1dGVzLnBvc2l0aW9uLmFycmF5O1xuXG5cdFx0XHRcdFx0XHRmb3IgKCB2YXIgaSA9IDAsIGwgPSBwb3NpdGlvbnMubGVuZ3RoOyBpIDwgbDsgaSArPSAzICkge1xuXG5cdFx0XHRcdFx0XHRcdHJlbmRlckxpc3QucHVzaFZlcnRleCggcG9zaXRpb25zWyBpIF0sIHBvc2l0aW9uc1sgaSArIDEgXSwgcG9zaXRpb25zWyBpICsgMiBdICk7XG5cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYgKCBhdHRyaWJ1dGVzLmNvbG9yICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0XHRcdFx0dmFyIGNvbG9ycyA9IGF0dHJpYnV0ZXMuY29sb3IuYXJyYXk7XG5cblx0XHRcdFx0XHRcdFx0Zm9yICggdmFyIGkgPSAwLCBsID0gY29sb3JzLmxlbmd0aDsgaSA8IGw7IGkgKz0gMyApIHtcblxuXHRcdFx0XHRcdFx0XHRcdHJlbmRlckxpc3QucHVzaENvbG9yKCBjb2xvcnNbIGkgXSwgY29sb3JzWyBpICsgMSBdLCBjb2xvcnNbIGkgKyAyIF0gKTtcblxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYgKCBnZW9tZXRyeS5pbmRleCAhPT0gbnVsbCApIHtcblxuXHRcdFx0XHRcdFx0XHR2YXIgaW5kaWNlcyA9IGdlb21ldHJ5LmluZGV4LmFycmF5O1xuXG5cdFx0XHRcdFx0XHRcdGZvciAoIHZhciBpID0gMCwgbCA9IGluZGljZXMubGVuZ3RoOyBpIDwgbDsgaSArPSAyICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0cmVuZGVyTGlzdC5wdXNoTGluZSggaW5kaWNlc1sgaSBdLCBpbmRpY2VzWyBpICsgMSBdICk7XG5cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdHZhciBzdGVwID0gb2JqZWN0IGluc3RhbmNlb2YgVEhSRUUuTGluZVNlZ21lbnRzID8gMiA6IDE7XG5cblx0XHRcdFx0XHRcdFx0Zm9yICggdmFyIGkgPSAwLCBsID0gKCBwb3NpdGlvbnMubGVuZ3RoIC8gMyApIC0gMTsgaSA8IGw7IGkgKz0gc3RlcCApIHtcblxuXHRcdFx0XHRcdFx0XHRcdHJlbmRlckxpc3QucHVzaExpbmUoIGksIGkgKyAxICk7XG5cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fSBlbHNlIGlmICggZ2VvbWV0cnkgaW5zdGFuY2VvZiBUSFJFRS5HZW9tZXRyeSApIHtcblxuXHRcdFx0XHRcdHZhciB2ZXJ0aWNlcyA9IG9iamVjdC5nZW9tZXRyeS52ZXJ0aWNlcztcblxuXHRcdFx0XHRcdGlmICggdmVydGljZXMubGVuZ3RoID09PSAwICkgY29udGludWU7XG5cblx0XHRcdFx0XHR2MSA9IGdldE5leHRWZXJ0ZXhJblBvb2woKTtcblx0XHRcdFx0XHR2MS5wb3NpdGlvblNjcmVlbi5jb3B5KCB2ZXJ0aWNlc1sgMCBdICkuYXBwbHlNYXRyaXg0KCBfbW9kZWxWaWV3UHJvamVjdGlvbk1hdHJpeCApO1xuXG5cdFx0XHRcdFx0dmFyIHN0ZXAgPSBvYmplY3QgaW5zdGFuY2VvZiBUSFJFRS5MaW5lU2VnbWVudHMgPyAyIDogMTtcblxuXHRcdFx0XHRcdGZvciAoIHZhciB2ID0gMSwgdmwgPSB2ZXJ0aWNlcy5sZW5ndGg7IHYgPCB2bDsgdiArKyApIHtcblxuXHRcdFx0XHRcdFx0djEgPSBnZXROZXh0VmVydGV4SW5Qb29sKCk7XG5cdFx0XHRcdFx0XHR2MS5wb3NpdGlvblNjcmVlbi5jb3B5KCB2ZXJ0aWNlc1sgdiBdICkuYXBwbHlNYXRyaXg0KCBfbW9kZWxWaWV3UHJvamVjdGlvbk1hdHJpeCApO1xuXG5cdFx0XHRcdFx0XHRpZiAoICggdiArIDEgKSAlIHN0ZXAgPiAwICkgY29udGludWU7XG5cblx0XHRcdFx0XHRcdHYyID0gX3ZlcnRleFBvb2xbIF92ZXJ0ZXhDb3VudCAtIDIgXTtcblxuXHRcdFx0XHRcdFx0X2NsaXBwZWRWZXJ0ZXgxUG9zaXRpb25TY3JlZW4uY29weSggdjEucG9zaXRpb25TY3JlZW4gKTtcblx0XHRcdFx0XHRcdF9jbGlwcGVkVmVydGV4MlBvc2l0aW9uU2NyZWVuLmNvcHkoIHYyLnBvc2l0aW9uU2NyZWVuICk7XG5cblx0XHRcdFx0XHRcdGlmICggY2xpcExpbmUoIF9jbGlwcGVkVmVydGV4MVBvc2l0aW9uU2NyZWVuLCBfY2xpcHBlZFZlcnRleDJQb3NpdGlvblNjcmVlbiApID09PSB0cnVlICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFBlcmZvcm0gdGhlIHBlcnNwZWN0aXZlIGRpdmlkZVxuXHRcdFx0XHRcdFx0XHRfY2xpcHBlZFZlcnRleDFQb3NpdGlvblNjcmVlbi5tdWx0aXBseVNjYWxhciggMSAvIF9jbGlwcGVkVmVydGV4MVBvc2l0aW9uU2NyZWVuLncgKTtcblx0XHRcdFx0XHRcdFx0X2NsaXBwZWRWZXJ0ZXgyUG9zaXRpb25TY3JlZW4ubXVsdGlwbHlTY2FsYXIoIDEgLyBfY2xpcHBlZFZlcnRleDJQb3NpdGlvblNjcmVlbi53ICk7XG5cblx0XHRcdFx0XHRcdFx0X2xpbmUgPSBnZXROZXh0TGluZUluUG9vbCgpO1xuXG5cdFx0XHRcdFx0XHRcdF9saW5lLmlkID0gb2JqZWN0LmlkO1xuXHRcdFx0XHRcdFx0XHRfbGluZS52MS5wb3NpdGlvblNjcmVlbi5jb3B5KCBfY2xpcHBlZFZlcnRleDFQb3NpdGlvblNjcmVlbiApO1xuXHRcdFx0XHRcdFx0XHRfbGluZS52Mi5wb3NpdGlvblNjcmVlbi5jb3B5KCBfY2xpcHBlZFZlcnRleDJQb3NpdGlvblNjcmVlbiApO1xuXG5cdFx0XHRcdFx0XHRcdF9saW5lLnogPSBNYXRoLm1heCggX2NsaXBwZWRWZXJ0ZXgxUG9zaXRpb25TY3JlZW4ueiwgX2NsaXBwZWRWZXJ0ZXgyUG9zaXRpb25TY3JlZW4ueiApO1xuXHRcdFx0XHRcdFx0XHRfbGluZS5yZW5kZXJPcmRlciA9IG9iamVjdC5yZW5kZXJPcmRlcjtcblxuXHRcdFx0XHRcdFx0XHRfbGluZS5tYXRlcmlhbCA9IG9iamVjdC5tYXRlcmlhbDtcblxuXHRcdFx0XHRcdFx0XHRpZiAoIG9iamVjdC5tYXRlcmlhbC52ZXJ0ZXhDb2xvcnMgPT09IFRIUkVFLlZlcnRleENvbG9ycyApIHtcblxuXHRcdFx0XHRcdFx0XHRcdF9saW5lLnZlcnRleENvbG9yc1sgMCBdLmNvcHkoIG9iamVjdC5nZW9tZXRyeS5jb2xvcnNbIHYgXSApO1xuXHRcdFx0XHRcdFx0XHRcdF9saW5lLnZlcnRleENvbG9yc1sgMSBdLmNvcHkoIG9iamVjdC5nZW9tZXRyeS5jb2xvcnNbIHYgLSAxIF0gKTtcblxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0X3JlbmRlckRhdGEuZWxlbWVudHMucHVzaCggX2xpbmUgKTtcblxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH1cblxuXHRcdFx0fSBlbHNlIGlmICggb2JqZWN0IGluc3RhbmNlb2YgVEhSRUUuUG9pbnRzICkge1xuXG5cdFx0XHRcdF9tb2RlbFZpZXdQcm9qZWN0aW9uTWF0cml4Lm11bHRpcGx5TWF0cmljZXMoIF92aWV3UHJvamVjdGlvbk1hdHJpeCwgX21vZGVsTWF0cml4ICk7XG5cblx0XHRcdFx0aWYgKCBnZW9tZXRyeSBpbnN0YW5jZW9mIFRIUkVFLkdlb21ldHJ5ICkge1xuXG5cdFx0XHRcdFx0dmFyIHZlcnRpY2VzID0gb2JqZWN0Lmdlb21ldHJ5LnZlcnRpY2VzO1xuXG5cdFx0XHRcdFx0Zm9yICggdmFyIHYgPSAwLCB2bCA9IHZlcnRpY2VzLmxlbmd0aDsgdiA8IHZsOyB2ICsrICkge1xuXG5cdFx0XHRcdFx0XHR2YXIgdmVydGV4ID0gdmVydGljZXNbIHYgXTtcblxuXHRcdFx0XHRcdFx0X3ZlY3RvcjQuc2V0KCB2ZXJ0ZXgueCwgdmVydGV4LnksIHZlcnRleC56LCAxICk7XG5cdFx0XHRcdFx0XHRfdmVjdG9yNC5hcHBseU1hdHJpeDQoIF9tb2RlbFZpZXdQcm9qZWN0aW9uTWF0cml4ICk7XG5cblx0XHRcdFx0XHRcdHB1c2hQb2ludCggX3ZlY3RvcjQsIG9iamVjdCwgY2FtZXJhICk7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fSBlbHNlIGlmICggZ2VvbWV0cnkgaW5zdGFuY2VvZiBUSFJFRS5CdWZmZXJHZW9tZXRyeSApIHtcblxuXHRcdFx0XHRcdHZhciBhdHRyaWJ1dGVzID0gZ2VvbWV0cnkuYXR0cmlidXRlcztcblxuXHRcdFx0XHRcdGlmICggYXR0cmlidXRlcy5wb3NpdGlvbiAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdFx0XHR2YXIgcG9zaXRpb25zID0gYXR0cmlidXRlcy5wb3NpdGlvbi5hcnJheTtcblxuXHRcdFx0XHRcdFx0Zm9yICggdmFyIGkgPSAwLCBsID0gcG9zaXRpb25zLmxlbmd0aDsgaSA8IGw7IGkgKz0gMyApIHtcblxuXHRcdFx0XHRcdFx0XHRfdmVjdG9yNC5zZXQoIHBvc2l0aW9uc1sgaSBdLCBwb3NpdGlvbnNbIGkgKyAxIF0sIHBvc2l0aW9uc1sgaSArIDIgXSwgMSApO1xuXHRcdFx0XHRcdFx0XHRfdmVjdG9yNC5hcHBseU1hdHJpeDQoIF9tb2RlbFZpZXdQcm9qZWN0aW9uTWF0cml4ICk7XG5cblx0XHRcdFx0XHRcdFx0cHVzaFBvaW50KCBfdmVjdG9yNCwgb2JqZWN0LCBjYW1lcmEgKTtcblxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH1cblxuXHRcdFx0fSBlbHNlIGlmICggb2JqZWN0IGluc3RhbmNlb2YgVEhSRUUuU3ByaXRlICkge1xuXG5cdFx0XHRcdF92ZWN0b3I0LnNldCggX21vZGVsTWF0cml4LmVsZW1lbnRzWyAxMiBdLCBfbW9kZWxNYXRyaXguZWxlbWVudHNbIDEzIF0sIF9tb2RlbE1hdHJpeC5lbGVtZW50c1sgMTQgXSwgMSApO1xuXHRcdFx0XHRfdmVjdG9yNC5hcHBseU1hdHJpeDQoIF92aWV3UHJvamVjdGlvbk1hdHJpeCApO1xuXG5cdFx0XHRcdHB1c2hQb2ludCggX3ZlY3RvcjQsIG9iamVjdCwgY2FtZXJhICk7XG5cblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdGlmICggc29ydEVsZW1lbnRzID09PSB0cnVlICkge1xuXG5cdFx0XHRfcmVuZGVyRGF0YS5lbGVtZW50cy5zb3J0KCBwYWludGVyU29ydCApO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIF9yZW5kZXJEYXRhO1xuXG5cdH07XG5cblx0ZnVuY3Rpb24gcHVzaFBvaW50KCBfdmVjdG9yNCwgb2JqZWN0LCBjYW1lcmEgKSB7XG5cblx0XHR2YXIgaW52VyA9IDEgLyBfdmVjdG9yNC53O1xuXG5cdFx0X3ZlY3RvcjQueiAqPSBpbnZXO1xuXG5cdFx0aWYgKCBfdmVjdG9yNC56ID49IC0gMSAmJiBfdmVjdG9yNC56IDw9IDEgKSB7XG5cblx0XHRcdF9zcHJpdGUgPSBnZXROZXh0U3ByaXRlSW5Qb29sKCk7XG5cdFx0XHRfc3ByaXRlLmlkID0gb2JqZWN0LmlkO1xuXHRcdFx0X3Nwcml0ZS54ID0gX3ZlY3RvcjQueCAqIGludlc7XG5cdFx0XHRfc3ByaXRlLnkgPSBfdmVjdG9yNC55ICogaW52Vztcblx0XHRcdF9zcHJpdGUueiA9IF92ZWN0b3I0Lno7XG5cdFx0XHRfc3ByaXRlLnJlbmRlck9yZGVyID0gb2JqZWN0LnJlbmRlck9yZGVyO1xuXHRcdFx0X3Nwcml0ZS5vYmplY3QgPSBvYmplY3Q7XG5cblx0XHRcdF9zcHJpdGUucm90YXRpb24gPSBvYmplY3Qucm90YXRpb247XG5cblx0XHRcdF9zcHJpdGUuc2NhbGUueCA9IG9iamVjdC5zY2FsZS54ICogTWF0aC5hYnMoIF9zcHJpdGUueCAtICggX3ZlY3RvcjQueCArIGNhbWVyYS5wcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWyAwIF0gKSAvICggX3ZlY3RvcjQudyArIGNhbWVyYS5wcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWyAxMiBdICkgKTtcblx0XHRcdF9zcHJpdGUuc2NhbGUueSA9IG9iamVjdC5zY2FsZS55ICogTWF0aC5hYnMoIF9zcHJpdGUueSAtICggX3ZlY3RvcjQueSArIGNhbWVyYS5wcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWyA1IF0gKSAvICggX3ZlY3RvcjQudyArIGNhbWVyYS5wcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWyAxMyBdICkgKTtcblxuXHRcdFx0X3Nwcml0ZS5tYXRlcmlhbCA9IG9iamVjdC5tYXRlcmlhbDtcblxuXHRcdFx0X3JlbmRlckRhdGEuZWxlbWVudHMucHVzaCggX3Nwcml0ZSApO1xuXG5cdFx0fVxuXG5cdH1cblxuXHQvLyBQb29sc1xuXG5cdGZ1bmN0aW9uIGdldE5leHRPYmplY3RJblBvb2woKSB7XG5cblx0XHRpZiAoIF9vYmplY3RDb3VudCA9PT0gX29iamVjdFBvb2xMZW5ndGggKSB7XG5cblx0XHRcdHZhciBvYmplY3QgPSBuZXcgVEhSRUUuUmVuZGVyYWJsZU9iamVjdCgpO1xuXHRcdFx0X29iamVjdFBvb2wucHVzaCggb2JqZWN0ICk7XG5cdFx0XHRfb2JqZWN0UG9vbExlbmd0aCArKztcblx0XHRcdF9vYmplY3RDb3VudCArKztcblx0XHRcdHJldHVybiBvYmplY3Q7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gX29iamVjdFBvb2xbIF9vYmplY3RDb3VudCArKyBdO1xuXG5cdH1cblxuXHRmdW5jdGlvbiBnZXROZXh0VmVydGV4SW5Qb29sKCkge1xuXG5cdFx0aWYgKCBfdmVydGV4Q291bnQgPT09IF92ZXJ0ZXhQb29sTGVuZ3RoICkge1xuXG5cdFx0XHR2YXIgdmVydGV4ID0gbmV3IFRIUkVFLlJlbmRlcmFibGVWZXJ0ZXgoKTtcblx0XHRcdF92ZXJ0ZXhQb29sLnB1c2goIHZlcnRleCApO1xuXHRcdFx0X3ZlcnRleFBvb2xMZW5ndGggKys7XG5cdFx0XHRfdmVydGV4Q291bnQgKys7XG5cdFx0XHRyZXR1cm4gdmVydGV4O1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIF92ZXJ0ZXhQb29sWyBfdmVydGV4Q291bnQgKysgXTtcblxuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0TmV4dEZhY2VJblBvb2woKSB7XG5cblx0XHRpZiAoIF9mYWNlQ291bnQgPT09IF9mYWNlUG9vbExlbmd0aCApIHtcblxuXHRcdFx0dmFyIGZhY2UgPSBuZXcgVEhSRUUuUmVuZGVyYWJsZUZhY2UoKTtcblx0XHRcdF9mYWNlUG9vbC5wdXNoKCBmYWNlICk7XG5cdFx0XHRfZmFjZVBvb2xMZW5ndGggKys7XG5cdFx0XHRfZmFjZUNvdW50ICsrO1xuXHRcdFx0cmV0dXJuIGZhY2U7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gX2ZhY2VQb29sWyBfZmFjZUNvdW50ICsrIF07XG5cblxuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0TmV4dExpbmVJblBvb2woKSB7XG5cblx0XHRpZiAoIF9saW5lQ291bnQgPT09IF9saW5lUG9vbExlbmd0aCApIHtcblxuXHRcdFx0dmFyIGxpbmUgPSBuZXcgVEhSRUUuUmVuZGVyYWJsZUxpbmUoKTtcblx0XHRcdF9saW5lUG9vbC5wdXNoKCBsaW5lICk7XG5cdFx0XHRfbGluZVBvb2xMZW5ndGggKys7XG5cdFx0XHRfbGluZUNvdW50ICsrO1xuXHRcdFx0cmV0dXJuIGxpbmU7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gX2xpbmVQb29sWyBfbGluZUNvdW50ICsrIF07XG5cblx0fVxuXG5cdGZ1bmN0aW9uIGdldE5leHRTcHJpdGVJblBvb2woKSB7XG5cblx0XHRpZiAoIF9zcHJpdGVDb3VudCA9PT0gX3Nwcml0ZVBvb2xMZW5ndGggKSB7XG5cblx0XHRcdHZhciBzcHJpdGUgPSBuZXcgVEhSRUUuUmVuZGVyYWJsZVNwcml0ZSgpO1xuXHRcdFx0X3Nwcml0ZVBvb2wucHVzaCggc3ByaXRlICk7XG5cdFx0XHRfc3ByaXRlUG9vbExlbmd0aCArKztcblx0XHRcdF9zcHJpdGVDb3VudCArKztcblx0XHRcdHJldHVybiBzcHJpdGU7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gX3Nwcml0ZVBvb2xbIF9zcHJpdGVDb3VudCArKyBdO1xuXG5cdH1cblxuXHQvL1xuXG5cdGZ1bmN0aW9uIHBhaW50ZXJTb3J0KCBhLCBiICkge1xuXG5cdFx0aWYgKCBhLnJlbmRlck9yZGVyICE9PSBiLnJlbmRlck9yZGVyICkge1xuXG5cdFx0XHRyZXR1cm4gYS5yZW5kZXJPcmRlciAtIGIucmVuZGVyT3JkZXI7XG5cblx0XHR9IGVsc2UgaWYgKCBhLnogIT09IGIueiApIHtcblxuXHRcdFx0cmV0dXJuIGIueiAtIGEuejtcblxuXHRcdH0gZWxzZSBpZiAoIGEuaWQgIT09IGIuaWQgKSB7XG5cblx0XHRcdHJldHVybiBhLmlkIC0gYi5pZDtcblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdHJldHVybiAwO1xuXG5cdFx0fVxuXG5cdH1cblxuXHRmdW5jdGlvbiBjbGlwTGluZSggczEsIHMyICkge1xuXG5cdFx0dmFyIGFscGhhMSA9IDAsIGFscGhhMiA9IDEsXG5cblx0XHQvLyBDYWxjdWxhdGUgdGhlIGJvdW5kYXJ5IGNvb3JkaW5hdGUgb2YgZWFjaCB2ZXJ0ZXggZm9yIHRoZSBuZWFyIGFuZCBmYXIgY2xpcCBwbGFuZXMsXG5cdFx0Ly8gWiA9IC0xIGFuZCBaID0gKzEsIHJlc3BlY3RpdmVseS5cblxuXHRcdFx0YmMxbmVhciA9IHMxLnogKyBzMS53LFxuXHRcdFx0YmMybmVhciA9IHMyLnogKyBzMi53LFxuXHRcdFx0YmMxZmFyID0gLSBzMS56ICsgczEudyxcblx0XHRcdGJjMmZhciA9IC0gczIueiArIHMyLnc7XG5cblx0XHRpZiAoIGJjMW5lYXIgPj0gMCAmJiBiYzJuZWFyID49IDAgJiYgYmMxZmFyID49IDAgJiYgYmMyZmFyID49IDAgKSB7XG5cblx0XHRcdC8vIEJvdGggdmVydGljZXMgbGllIGVudGlyZWx5IHdpdGhpbiBhbGwgY2xpcCBwbGFuZXMuXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblxuXHRcdH0gZWxzZSBpZiAoICggYmMxbmVhciA8IDAgJiYgYmMybmVhciA8IDAgKSB8fCAoIGJjMWZhciA8IDAgJiYgYmMyZmFyIDwgMCApICkge1xuXG5cdFx0XHQvLyBCb3RoIHZlcnRpY2VzIGxpZSBlbnRpcmVseSBvdXRzaWRlIG9uZSBvZiB0aGUgY2xpcCBwbGFuZXMuXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBUaGUgbGluZSBzZWdtZW50IHNwYW5zIGF0IGxlYXN0IG9uZSBjbGlwIHBsYW5lLlxuXG5cdFx0XHRpZiAoIGJjMW5lYXIgPCAwICkge1xuXG5cdFx0XHRcdC8vIHYxIGxpZXMgb3V0c2lkZSB0aGUgbmVhciBwbGFuZSwgdjIgaW5zaWRlXG5cdFx0XHRcdGFscGhhMSA9IE1hdGgubWF4KCBhbHBoYTEsIGJjMW5lYXIgLyAoIGJjMW5lYXIgLSBiYzJuZWFyICkgKTtcblxuXHRcdFx0fSBlbHNlIGlmICggYmMybmVhciA8IDAgKSB7XG5cblx0XHRcdFx0Ly8gdjIgbGllcyBvdXRzaWRlIHRoZSBuZWFyIHBsYW5lLCB2MSBpbnNpZGVcblx0XHRcdFx0YWxwaGEyID0gTWF0aC5taW4oIGFscGhhMiwgYmMxbmVhciAvICggYmMxbmVhciAtIGJjMm5lYXIgKSApO1xuXG5cdFx0XHR9XG5cblx0XHRcdGlmICggYmMxZmFyIDwgMCApIHtcblxuXHRcdFx0XHQvLyB2MSBsaWVzIG91dHNpZGUgdGhlIGZhciBwbGFuZSwgdjIgaW5zaWRlXG5cdFx0XHRcdGFscGhhMSA9IE1hdGgubWF4KCBhbHBoYTEsIGJjMWZhciAvICggYmMxZmFyIC0gYmMyZmFyICkgKTtcblxuXHRcdFx0fSBlbHNlIGlmICggYmMyZmFyIDwgMCApIHtcblxuXHRcdFx0XHQvLyB2MiBsaWVzIG91dHNpZGUgdGhlIGZhciBwbGFuZSwgdjIgaW5zaWRlXG5cdFx0XHRcdGFscGhhMiA9IE1hdGgubWluKCBhbHBoYTIsIGJjMWZhciAvICggYmMxZmFyIC0gYmMyZmFyICkgKTtcblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGFscGhhMiA8IGFscGhhMSApIHtcblxuXHRcdFx0XHQvLyBUaGUgbGluZSBzZWdtZW50IHNwYW5zIHR3byBib3VuZGFyaWVzLCBidXQgaXMgb3V0c2lkZSBib3RoIG9mIHRoZW0uXG5cdFx0XHRcdC8vIChUaGlzIGNhbid0IGhhcHBlbiB3aGVuIHdlJ3JlIG9ubHkgY2xpcHBpbmcgYWdhaW5zdCBqdXN0IG5lYXIvZmFyIGJ1dCBnb29kXG5cdFx0XHRcdC8vICB0byBsZWF2ZSB0aGUgY2hlY2sgaGVyZSBmb3IgZnV0dXJlIHVzYWdlIGlmIG90aGVyIGNsaXAgcGxhbmVzIGFyZSBhZGRlZC4pXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHQvLyBVcGRhdGUgdGhlIHMxIGFuZCBzMiB2ZXJ0aWNlcyB0byBtYXRjaCB0aGUgY2xpcHBlZCBsaW5lIHNlZ21lbnQuXG5cdFx0XHRcdHMxLmxlcnAoIHMyLCBhbHBoYTEgKTtcblx0XHRcdFx0czIubGVycCggczEsIDEgLSBhbHBoYTIgKTtcblxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblxuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdH1cblxufTtcbiJdfQ==
+2 -406
docs/js/canvas-renderer-and-projector.min.js
··· 1 - "use strict"; 2 - 3 - var bgColor = 16777215;THREE.SpriteCanvasMaterial = function (e) { 4 - THREE.Material.call(this), this.type = "SpriteCanvasMaterial", this.color = new THREE.Color(16777215), this.program = function () {}, this.setValues(e); 5 - }, THREE.SpriteCanvasMaterial.prototype = Object.create(THREE.Material.prototype), THREE.SpriteCanvasMaterial.prototype.constructor = THREE.SpriteCanvasMaterial, THREE.SpriteCanvasMaterial.prototype.isSpriteCanvasMaterial = !0, THREE.SpriteCanvasMaterial.prototype.clone = function () { 6 - var e = new THREE.SpriteCanvasMaterial();return e.copy(this), e.color.copy(this.color), e.program = this.program, e; 7 - }, THREE.CanvasRenderer = function (e) { 8 - function r() { 9 - me.setRGB(0, 0, 0), ve.setRGB(0, 0, 0), ye.setRGB(0, 0, 0);for (var e = 0, r = g.length; e < r; e++) { 10 - var t = g[e], 11 - i = t.color;t.isAmbientLight ? me.add(i) : t.isDirectionalLight ? ve.add(i) : t.isPointLight && ye.add(i); 12 - } 13 - }function t(e, r, t) { 14 - for (var i = 0, o = g.length; i < o; i++) { 15 - var n = g[i];if (Ee.copy(n.color), n.isDirectionalLight) { 16 - var a = xe.setFromMatrixPosition(n.matrixWorld).normalize(), 17 - s = r.dot(a);if (s <= 0) continue;s *= n.intensity, t.add(Ee.multiplyScalar(s)); 18 - } else if (n.isPointLight) { 19 - var a = xe.setFromMatrixPosition(n.matrixWorld), 20 - s = r.dot(xe.subVectors(a, e).normalize());if (s <= 0) continue;if (0 == (s *= 0 == n.distance ? 1 : 1 - Math.min(e.distanceTo(a) / n.distance, 1))) continue;s *= n.intensity, t.add(Ee.multiplyScalar(s)); 21 - } 22 - } 23 - }function i(e, r, t) { 24 - f(t.opacity), d(t.blending);var i = r.scale.x * U, 25 - o = r.scale.y * q, 26 - n = Math.sqrt(i * i + o * o);if (ue.min.set(e.x - n, e.y - n), ue.max.set(e.x + n, e.y + n), t.isSpriteMaterial) { 27 - var a = t.map;if (null !== a) { 28 - var s = fe[a.id];if (void 0 !== s && s.version === a.version || (s = c(a), fe[a.id] = s), void 0 !== s.canvas) { 29 - y(s.canvas);var l = a.image, 30 - p = l.width * a.offset.x, 31 - E = l.height * a.offset.y, 32 - h = l.width * a.repeat.x, 33 - u = l.height * a.repeat.y, 34 - m = i / h, 35 - x = o / u;Z.save(), Z.translate(e.x, e.y), 0 !== t.rotation && Z.rotate(t.rotation), Z.translate(-i / 2, -o / 2), Z.scale(m, x), Z.translate(-p, -E), Z.fillRect(p, E, h, u), Z.restore(); 36 - } 37 - } else y(t.color.getStyle()), Z.save(), Z.translate(e.x, e.y), 0 !== t.rotation && Z.rotate(t.rotation), Z.scale(i, -o), Z.fillRect(-.5, -.5, 1, 1), Z.restore(); 38 - } else t.isSpriteCanvasMaterial ? (v(t.color.getStyle()), y(t.color.getStyle()), Z.save(), Z.translate(e.x, e.y), 0 !== t.rotation && Z.rotate(t.rotation), Z.scale(i, o), t.program(Z), Z.restore()) : t.isPointsMaterial && (y(t.color.getStyle()), Z.save(), Z.translate(e.x, e.y), 0 !== t.rotation && Z.rotate(t.rotation), Z.scale(i * t.size, -o * t.size), Z.fillRect(-.5, -.5, 1, 1), Z.restore()); 39 - }function o(e, r, t, i) { 40 - if (f(i.opacity), d(i.blending), Z.beginPath(), Z.moveTo(e.positionScreen.x, e.positionScreen.y), Z.lineTo(r.positionScreen.x, r.positionScreen.y), i.isLineBasicMaterial) { 41 - if (h(i.linewidth), u(i.linecap), m(i.linejoin), i.vertexColors !== THREE.VertexColors) v(i.color.getStyle());else { 42 - var o = t.vertexColors[0].getStyle(), 43 - n = t.vertexColors[1].getStyle();if (o === n) v(o);else { 44 - try { 45 - var a = Z.createLinearGradient(e.positionScreen.x, e.positionScreen.y, r.positionScreen.x, r.positionScreen.y);a.addColorStop(0, o), a.addColorStop(1, n); 46 - } catch (e) { 47 - a = o; 48 - }v(a); 49 - } 50 - }i.isLineDashedMaterial && x([i.dashSize, i.gapSize]), Z.stroke(), ue.expandByScalar(2 * i.linewidth), i.isLineDashedMaterial && x([]); 51 - } 52 - }function n(e, r, i, o, n, c, E, h) { 53 - if (A.info.render.vertices += 3, A.info.render.faces++, f(h.opacity), d(h.blending), M = e.positionScreen.x, C = e.positionScreen.y, b = r.positionScreen.x, z = r.positionScreen.y, V = i.positionScreen.x, j = i.positionScreen.y, a(M, C, b, z, V, j), (h.isMeshLambertMaterial || h.isMeshPhongMaterial || h.isMeshStandardMaterial) && null === h.map) ce.copy(h.color), pe.copy(h.emissive), h.vertexColors === THREE.FaceColors && ce.multiply(E.color), le.copy(me), Re.copy(e.positionWorld).add(r.positionWorld).add(i.positionWorld).divideScalar(3), t(Re, E.normalModel, le), le.multiply(ce).add(pe), !0 === h.wireframe ? s(le, h.wireframeLinewidth, h.wireframeLinecap, h.wireframeLinejoin) : l(le);else if (h.isMeshBasicMaterial || h.isMeshLambertMaterial || h.isMeshPhongMaterial || h.isMeshStandardMaterial) { 54 - if (null !== h.map) { 55 - var u = h.map.mapping;u === THREE.UVMapping && (L = E.uvs, p(M, C, b, z, V, j, L[o].x, L[o].y, L[n].x, L[n].y, L[c].x, L[c].y, h.map)); 56 - } else null !== h.envMap ? h.envMap.mapping === THREE.SphericalReflectionMapping && (Te.copy(E.vertexNormalsModel[o]).applyMatrix3(ge), O = .5 * Te.x + .5, B = .5 * Te.y + .5, Te.copy(E.vertexNormalsModel[n]).applyMatrix3(ge), P = .5 * Te.x + .5, W = .5 * Te.y + .5, Te.copy(E.vertexNormalsModel[c]).applyMatrix3(ge), N = .5 * Te.x + .5, k = .5 * Te.y + .5, p(M, C, b, z, V, j, O, B, P, W, N, k, h.envMap)) : (le.copy(h.color), h.vertexColors === THREE.FaceColors && le.multiply(E.color), !0 === h.wireframe ? s(le, h.wireframeLinewidth, h.wireframeLinecap, h.wireframeLinejoin) : l(le)); 57 - } else h.isMeshNormalMaterial ? (Te.copy(E.normalModel).applyMatrix3(ge), le.setRGB(Te.x, Te.y, Te.z).multiplyScalar(.5).addScalar(.5), !0 === h.wireframe ? s(le, h.wireframeLinewidth, h.wireframeLinecap, h.wireframeLinejoin) : l(le)) : (le.setRGB(1, 1, 1), !0 === h.wireframe ? s(le, h.wireframeLinewidth, h.wireframeLinecap, h.wireframeLinejoin) : l(le)); 58 - }function a(e, r, t, i, o, n) { 59 - Z.beginPath(), Z.moveTo(e, r), Z.lineTo(t, i), Z.lineTo(o, n), Z.closePath(); 60 - }function s(e, r, t, i) { 61 - h(r), u(t), m(i), v(e.getStyle()), Z.stroke(), ue.expandByScalar(2 * r); 62 - }function l(e) { 63 - y(e.getStyle()), Z.fill(); 64 - }function c(e) { 65 - if (0 === e.version || e instanceof THREE.CompressedTexture || e instanceof THREE.DataTexture) return { canvas: void 0, version: e.version };var r = e.image;if (!1 === r.complete) return { canvas: void 0, version: 0 };var t = e.wrapS === THREE.RepeatWrapping || e.wrapS === THREE.MirroredRepeatWrapping, 66 - i = e.wrapT === THREE.RepeatWrapping || e.wrapT === THREE.MirroredRepeatWrapping, 67 - o = e.wrapS === THREE.MirroredRepeatWrapping, 68 - n = e.wrapT === THREE.MirroredRepeatWrapping, 69 - a = document.createElement("canvas");a.width = r.width * (o ? 2 : 1), a.height = r.height * (n ? 2 : 1);var s = a.getContext("2d");s.setTransform(1, 0, 0, -1, 0, r.height), s.drawImage(r, 0, 0), !0 === o && (s.setTransform(-1, 0, 0, -1, r.width, r.height), s.drawImage(r, -r.width, 0)), !0 === n && (s.setTransform(1, 0, 0, 1, 0, 0), s.drawImage(r, 0, r.height)), !0 === o && !0 === n && (s.setTransform(-1, 0, 0, 1, r.width, 0), s.drawImage(r, -r.width, r.height));var l = "no-repeat";!0 === t && !0 === i ? l = "repeat" : !0 === t ? l = "repeat-x" : !0 === i && (l = "repeat-y");var c = Z.createPattern(a, l);return e.onUpdate && e.onUpdate(e), { canvas: c, version: e.version }; 70 - }function p(e, r, t, i, o, n, a, s, l, p, E, f, d) { 71 - var h = fe[d.id];if (void 0 !== h && h.version === d.version || (h = c(d), fe[d.id] = h), void 0 === h.canvas) return y("rgba( 0, 0, 0, 1)"), void Z.fill();y(h.canvas);var u, 72 - m, 73 - v, 74 - x, 75 - R, 76 - T, 77 - g, 78 - S, 79 - H = d.offset.x / d.repeat.x, 80 - w = d.offset.y / d.repeat.y, 81 - M = d.image.width * d.repeat.x, 82 - C = d.image.height * d.repeat.y;a = (a + H) * M, s = (s + w) * C, l = (l + H) * M, p = (p + w) * C, E = (E + H) * M, f = (f + w) * C, t -= e, i -= r, o -= e, n -= r, l -= a, p -= s, E -= a, f -= s, 0 !== (g = l * f - E * p) && (S = 1 / g, u = (f * t - p * o) * S, m = (f * i - p * n) * S, v = (l * o - E * t) * S, x = (l * n - E * i) * S, R = e - u * a - v * s, T = r - m * a - x * s, Z.save(), Z.transform(u, m, v, x, R, T), Z.fill(), Z.restore()); 83 - }function E(e, r, t) { 84 - var i, 85 - o = r.x - e.x, 86 - n = r.y - e.y, 87 - a = o * o + n * n;0 !== a && (i = t / Math.sqrt(a), o *= i, n *= i, r.x += o, r.y += n, e.x -= o, e.y -= n); 88 - }function f(e) { 89 - ee !== e && (Z.globalAlpha = e, ee = e); 90 - }function d(e) { 91 - re !== e && (e === THREE.NormalBlending ? Z.globalCompositeOperation = "source-over" : e === THREE.AdditiveBlending ? Z.globalCompositeOperation = "lighter" : e === THREE.SubtractiveBlending ? Z.globalCompositeOperation = "darker" : e === THREE.MultiplyBlending && (Z.globalCompositeOperation = "multiply"), re = e); 92 - }function h(e) { 93 - oe !== e && (Z.lineWidth = e, oe = e); 94 - }function u(e) { 95 - ne !== e && (Z.lineCap = e, ne = e); 96 - }function m(e) { 97 - ae !== e && (Z.lineJoin = e, ae = e); 98 - }function v(e) { 99 - te !== e && (Z.strokeStyle = e, te = e); 100 - }function y(e) { 101 - ie !== e && (Z.fillStyle = e, ie = e); 102 - }function x(e) { 103 - se.length !== e.length && (Z.setLineDash(e), se = e); 104 - }console.log("THREE.CanvasRenderer", THREE.REVISION), e = e || {};var R, 105 - T, 106 - g, 107 - S, 108 - H, 109 - w, 110 - M, 111 - C, 112 - b, 113 - z, 114 - V, 115 - j, 116 - L, 117 - O, 118 - B, 119 - P, 120 - W, 121 - N, 122 - k, 123 - A = this, 124 - F = new THREE.Projector(), 125 - D = void 0 !== e.canvas ? e.canvas : document.createElement("canvas"), 126 - G = D.width, 127 - I = D.height, 128 - U = Math.floor(G / 2), 129 - q = Math.floor(I / 2), 130 - J = 0, 131 - K = 0, 132 - Q = G, 133 - X = I, 134 - Y = 1, 135 - Z = D.getContext("2d", { alpha: !0 === e.alpha }), 136 - $ = new THREE.Color(bgColor), 137 - _ = !0 === e.alpha ? 0 : 1, 138 - ee = 1, 139 - re = 0, 140 - te = null, 141 - ie = null, 142 - oe = null, 143 - ne = null, 144 - ae = null, 145 - se = [], 146 - le = new THREE.Color(), 147 - ce = new THREE.Color(), 148 - pe = new THREE.Color(), 149 - Ee = new THREE.Color(), 150 - fe = {}, 151 - de = new THREE.Box2(), 152 - he = new THREE.Box2(), 153 - ue = new THREE.Box2(), 154 - me = new THREE.Color(), 155 - ve = new THREE.Color(), 156 - ye = new THREE.Color(), 157 - xe = new THREE.Vector3(), 158 - Re = new THREE.Vector3(), 159 - Te = new THREE.Vector3(), 160 - ge = new THREE.Matrix3();void 0 === Z.setLineDash && (Z.setLineDash = function () {}), this.domElement = D, this.autoClear = !0, this.sortObjects = !0, this.sortElements = !0, this.info = { render: { vertices: 0, faces: 0 } }, this.getContext = function () { 161 - return Z; 162 - }, this.getContextAttributes = function () { 163 - return Z.getContextAttributes(); 164 - }, this.getPixelRatio = function () { 165 - return Y; 166 - }, this.setPixelRatio = function (e) { 167 - void 0 !== e && (Y = e); 168 - }, this.setSize = function (e, r, t) { 169 - G = e * Y, I = r * Y, D.width = G, D.height = I, U = Math.floor(G / 2), q = Math.floor(I / 2), !1 !== t && (D.style.width = e + "px", D.style.height = r + "px"), de.min.set(-U, -q), de.max.set(U, q), he.min.set(-U, -q), he.max.set(U, q), ee = 1, re = 0, te = null, ie = null, oe = null, ne = null, ae = null, this.setViewport(0, 0, e, r); 170 - }, this.setViewport = function (e, r, t, i) { 171 - J = e * Y, K = r * Y, Q = t * Y, X = i * Y; 172 - }, this.setScissor = function () {}, this.setScissorTest = function () {}, this.setClearColor = function (e, r) { 173 - $.set(e), _ = void 0 !== r ? r : 1, he.min.set(-U, -q), he.max.set(U, q); 174 - }, this.setClearColorHex = function (e, r) { 175 - console.warn("THREE.CanvasRenderer: .setClearColorHex() is being removed. Use .setClearColor() instead."), this.setClearColor(e, r); 176 - }, this.getClearColor = function () { 177 - return $; 178 - }, this.getClearAlpha = function () { 179 - return _; 180 - }, this.getMaxAnisotropy = function () { 181 - return 0; 182 - }, this.clear = function () { 183 - !1 === he.isEmpty() && (he.intersect(de), he.expandByScalar(2), he.min.x = he.min.x + U, he.min.y = -he.min.y + q, he.max.x = he.max.x + U, he.max.y = -he.max.y + q, _ < 1 && Z.clearRect(0 | he.min.x, 0 | he.max.y, he.max.x - he.min.x | 0, he.min.y - he.max.y | 0), _ > 0 && (f(1), d(THREE.NormalBlending), y("rgba(" + Math.floor(255 * $.r) + "," + Math.floor(255 * $.g) + "," + Math.floor(255 * $.b) + "," + _ + ")"), Z.fillRect(0 | he.min.x, 0 | he.max.y, he.max.x - he.min.x | 0, he.min.y - he.max.y | 0)), he.makeEmpty()); 184 - }, this.clearColor = function () {}, this.clearDepth = function () {}, this.clearStencil = function () {}, this.render = function (e, t) { 185 - if (void 0 === t.isCamera) return void console.error("THREE.CanvasRenderer.render: camera is not an instance of THREE.Camera.");var a = e.background;a && a.isColor ? (f(1), d(THREE.NormalBlending), y(a.getStyle()), Z.fillRect(0, 0, G, I)) : !0 === this.autoClear && this.clear(), A.info.render.vertices = 0, A.info.render.faces = 0, Z.setTransform(Q / G, 0, 0, -X / I, J, I - K), Z.translate(U, q), R = F.projectScene(e, t, this.sortObjects, this.sortElements), T = R.elements, g = R.lights, ge.getNormalMatrix(t.matrixWorldInverse), r();for (var s = 0, l = T.length; s < l; s++) { 186 - var c = T[s], 187 - p = c.material;if (void 0 !== p && 0 !== p.opacity) { 188 - if (ue.makeEmpty(), c instanceof THREE.RenderableSprite) S = c, S.x *= U, S.y *= q, i(S, c, p);else if (c instanceof THREE.RenderableLine) S = c.v1, H = c.v2, S.positionScreen.x *= U, S.positionScreen.y *= q, H.positionScreen.x *= U, H.positionScreen.y *= q, ue.setFromPoints([S.positionScreen, H.positionScreen]), !0 === de.intersectsBox(ue) && o(S, H, c, p);else if (c instanceof THREE.RenderableFace) { 189 - if (S = c.v1, H = c.v2, w = c.v3, S.positionScreen.z < -1 || S.positionScreen.z > 1) continue;if (H.positionScreen.z < -1 || H.positionScreen.z > 1) continue;if (w.positionScreen.z < -1 || w.positionScreen.z > 1) continue;S.positionScreen.x *= U, S.positionScreen.y *= q, H.positionScreen.x *= U, H.positionScreen.y *= q, w.positionScreen.x *= U, w.positionScreen.y *= q, p.overdraw > 0 && (E(S.positionScreen, H.positionScreen, p.overdraw), E(H.positionScreen, w.positionScreen, p.overdraw), E(w.positionScreen, S.positionScreen, p.overdraw)), ue.setFromPoints([S.positionScreen, H.positionScreen, w.positionScreen]), !0 === de.intersectsBox(ue) && n(S, H, w, 0, 1, 2, c, p); 190 - }he.union(ue); 191 - } 192 - }Z.setTransform(1, 0, 0, 1, 0, 0); 193 - }; 194 - }, THREE.RenderableObject = function () { 195 - this.id = 0, this.object = null, this.z = 0, this.renderOrder = 0; 196 - }, THREE.RenderableFace = function () { 197 - this.id = 0, this.v1 = new THREE.RenderableVertex(), this.v2 = new THREE.RenderableVertex(), this.v3 = new THREE.RenderableVertex(), this.normalModel = new THREE.Vector3(), this.vertexNormalsModel = [new THREE.Vector3(), new THREE.Vector3(), new THREE.Vector3()], this.vertexNormalsLength = 0, this.color = new THREE.Color(), this.material = null, this.uvs = [new THREE.Vector2(), new THREE.Vector2(), new THREE.Vector2()], this.z = 0, this.renderOrder = 0; 198 - }, THREE.RenderableVertex = function () { 199 - this.position = new THREE.Vector3(), this.positionWorld = new THREE.Vector3(), this.positionScreen = new THREE.Vector4(), this.visible = !0; 200 - }, THREE.RenderableVertex.prototype.copy = function (e) { 201 - this.positionWorld.copy(e.positionWorld), this.positionScreen.copy(e.positionScreen); 202 - }, THREE.RenderableLine = function () { 203 - this.id = 0, this.v1 = new THREE.RenderableVertex(), this.v2 = new THREE.RenderableVertex(), this.vertexColors = [new THREE.Color(), new THREE.Color()], this.material = null, this.z = 0, this.renderOrder = 0; 204 - }, THREE.RenderableSprite = function () { 205 - this.id = 0, this.object = null, this.x = 0, this.y = 0, this.z = 0, this.rotation = 0, this.scale = new THREE.Vector2(), this.material = null, this.renderOrder = 0; 206 - }, THREE.Projector = function () { 207 - function e(t) { 208 - if (!1 !== t.visible) { 209 - if (t instanceof THREE.Light) j.lights.push(t);else if (t instanceof THREE.Mesh || t instanceof THREE.Line || t instanceof THREE.Points) { 210 - if (!1 === t.material.visible) return;if (!0 === t.frustumCulled && !1 === D.intersectsObject(t)) return;r(t); 211 - } else if (t instanceof THREE.Sprite) { 212 - if (!1 === t.material.visible) return;if (!0 === t.frustumCulled && !1 === D.intersectsSprite(t)) return;r(t); 213 - }for (var i = t.children, o = 0, n = i.length; o < n; o++) { 214 - e(i[o]); 215 - } 216 - } 217 - }function r(e) { 218 - p = i(), p.id = e.id, p.object = e, L.setFromMatrixPosition(e.matrixWorld), L.applyMatrix4(k), p.z = L.z, p.renderOrder = e.renderOrder, j.objects.push(p); 219 - }function t(e, r, t) { 220 - var i = 1 / e.w;e.z *= i, e.z >= -1 && e.z <= 1 && (y = s(), y.id = r.id, y.x = e.x * i, y.y = e.y * i, y.z = e.z, y.renderOrder = r.renderOrder, y.object = r, y.rotation = r.rotation, y.scale.x = r.scale.x * Math.abs(y.x - (e.x + t.projectionMatrix.elements[0]) / (e.w + t.projectionMatrix.elements[12])), y.scale.y = r.scale.y * Math.abs(y.y - (e.y + t.projectionMatrix.elements[5]) / (e.w + t.projectionMatrix.elements[13])), y.material = r.material, j.elements.push(y)); 221 - }function i() { 222 - if (E === g) { 223 - var e = new THREE.RenderableObject();return T.push(e), g++, E++, e; 224 - }return T[E++]; 225 - }function o() { 226 - if (d === H) { 227 - var e = new THREE.RenderableVertex();return S.push(e), H++, d++, e; 228 - }return S[d++]; 229 - }function n() { 230 - if (u === M) { 231 - var e = new THREE.RenderableFace();return w.push(e), M++, u++, e; 232 - }return w[u++]; 233 - }function a() { 234 - if (v === b) { 235 - var e = new THREE.RenderableLine();return C.push(e), b++, v++, e; 236 - }return C[v++]; 237 - }function s() { 238 - if (x === V) { 239 - var e = new THREE.RenderableSprite();return z.push(e), V++, x++, e; 240 - }return z[x++]; 241 - }function l(e, r) { 242 - return e.renderOrder !== r.renderOrder ? e.renderOrder - r.renderOrder : e.z !== r.z ? r.z - e.z : e.id !== r.id ? e.id - r.id : 0; 243 - }function c(e, r) { 244 - var t = 0, 245 - i = 1, 246 - o = e.z + e.w, 247 - n = r.z + r.w, 248 - a = -e.z + e.w, 249 - s = -r.z + r.w;return o >= 0 && n >= 0 && a >= 0 && s >= 0 || !(o < 0 && n < 0 || a < 0 && s < 0) && (o < 0 ? t = Math.max(t, o / (o - n)) : n < 0 && (i = Math.min(i, o / (o - n))), a < 0 ? t = Math.max(t, a / (a - s)) : s < 0 && (i = Math.min(i, a / (a - s))), !(i < t) && (e.lerp(r, t), r.lerp(e, 1 - i), !0)); 250 - }var p, 251 - E, 252 - f, 253 - d, 254 - h, 255 - u, 256 - m, 257 - v, 258 - y, 259 - x, 260 - R, 261 - T = [], 262 - g = 0, 263 - S = [], 264 - H = 0, 265 - w = [], 266 - M = 0, 267 - C = [], 268 - b = 0, 269 - z = [], 270 - V = 0, 271 - j = { objects: [], lights: [], elements: [] }, 272 - L = new THREE.Vector3(), 273 - O = new THREE.Vector4(), 274 - B = new THREE.Box3(new THREE.Vector3(-1, -1, -1), new THREE.Vector3(1, 1, 1)), 275 - P = new THREE.Box3(), 276 - W = new Array(3), 277 - N = new THREE.Matrix4(), 278 - k = new THREE.Matrix4(), 279 - A = new THREE.Matrix4(), 280 - F = new THREE.Matrix3(), 281 - D = new THREE.Frustum(), 282 - G = new THREE.Vector4(), 283 - I = new THREE.Vector4();this.projectVector = function (e, r) { 284 - console.warn("THREE.Projector: .projectVector() is now vector.project()."), e.project(r); 285 - }, this.unprojectVector = function (e, r) { 286 - console.warn("THREE.Projector: .unprojectVector() is now vector.unproject()."), e.unproject(r); 287 - }, this.pickingRay = function () { 288 - console.error("THREE.Projector: .pickingRay() is now raycaster.setFromCamera()."); 289 - };var U = function U() { 290 - function e(e) { 291 - T = e, g = T.material, H.getNormalMatrix(T.matrixWorld), v.length = 0, y.length = 0, x.length = 0; 292 - }function r(e) { 293 - var r = e.position, 294 - t = e.positionWorld, 295 - i = e.positionScreen;t.copy(r).applyMatrix4(R), i.copy(t).applyMatrix4(k);var o = 1 / i.w;i.x *= o, i.y *= o, i.z *= o, e.visible = i.x >= -1 && i.x <= 1 && i.y >= -1 && i.y <= 1 && i.z >= -1 && i.z <= 1; 296 - }function t(e, t, i) { 297 - f = o(), f.position.set(e, t, i), r(f); 298 - }function i(e, r, t) { 299 - v.push(e, r, t); 300 - }function s(e, r, t) { 301 - y.push(e, r, t); 302 - }function l(e, r) { 303 - x.push(e, r); 304 - }function p(e, r, t) { 305 - return !0 === e.visible || !0 === r.visible || !0 === t.visible || (W[0] = e.positionScreen, W[1] = r.positionScreen, W[2] = t.positionScreen, B.intersectsBox(P.setFromPoints(W))); 306 - }function E(e, r, t) { 307 - return (t.positionScreen.x - e.positionScreen.x) * (r.positionScreen.y - e.positionScreen.y) - (t.positionScreen.y - e.positionScreen.y) * (r.positionScreen.x - e.positionScreen.x) < 0; 308 - }function d(e, r) { 309 - var t = S[e], 310 - i = S[r];t.positionScreen.copy(t.position).applyMatrix4(A), i.positionScreen.copy(i.position).applyMatrix4(A), !0 === c(t.positionScreen, i.positionScreen) && (t.positionScreen.multiplyScalar(1 / t.positionScreen.w), i.positionScreen.multiplyScalar(1 / i.positionScreen.w), m = a(), m.id = T.id, m.v1.copy(t), m.v2.copy(i), m.z = Math.max(t.positionScreen.z, i.positionScreen.z), m.renderOrder = T.renderOrder, m.material = T.material, T.material.vertexColors === THREE.VertexColors && (m.vertexColors[0].fromArray(y, 3 * e), m.vertexColors[1].fromArray(y, 3 * r)), j.elements.push(m)); 311 - }function u(e, r, t) { 312 - var i = S[e], 313 - o = S[r], 314 - a = S[t];if (!1 !== p(i, o, a) && (g.side === THREE.DoubleSide || !0 === E(i, o, a))) { 315 - h = n(), h.id = T.id, h.v1.copy(i), h.v2.copy(o), h.v3.copy(a), h.z = (i.positionScreen.z + o.positionScreen.z + a.positionScreen.z) / 3, h.renderOrder = T.renderOrder, h.normalModel.fromArray(v, 3 * e), h.normalModel.applyMatrix3(H).normalize();for (var s = 0; s < 3; s++) { 316 - var l = h.vertexNormalsModel[s];l.fromArray(v, 3 * arguments[s]), l.applyMatrix3(H).normalize();h.uvs[s].fromArray(x, 2 * arguments[s]); 317 - }h.vertexNormalsLength = 3, h.material = T.material, j.elements.push(h); 318 - } 319 - }var v = [], 320 - y = [], 321 - x = [], 322 - T = null, 323 - g = null, 324 - H = new THREE.Matrix3();return { setObject: e, projectVertex: r, checkTriangleVisibility: p, checkBackfaceCulling: E, pushVertex: t, pushNormal: i, pushColor: s, pushUv: l, pushLine: d, pushTriangle: u }; 325 - }, 326 - q = new U();this.projectScene = function (r, i, s, p) { 327 - u = 0, v = 0, x = 0, j.elements.length = 0, !0 === r.autoUpdate && r.updateMatrixWorld(), null === i.parent && i.updateMatrixWorld(), N.copy(i.matrixWorldInverse), k.multiplyMatrices(i.projectionMatrix, N), D.setFromMatrix(k), E = 0, j.objects.length = 0, j.lights.length = 0, e(r), !0 === s && j.objects.sort(l);for (var f = j.objects, y = 0, T = f.length; y < T; y++) { 328 - var g = f[y].object, 329 - H = g.geometry;if (q.setObject(g), R = g.matrixWorld, d = 0, g instanceof THREE.Mesh) { 330 - if (H instanceof THREE.BufferGeometry) { 331 - var w = H.attributes, 332 - M = H.groups;if (void 0 === w.position) continue;for (var C = w.position.array, b = 0, z = C.length; b < z; b += 3) { 333 - q.pushVertex(C[b], C[b + 1], C[b + 2]); 334 - }if (void 0 !== w.normal) for (var V = w.normal.array, b = 0, z = V.length; b < z; b += 3) { 335 - q.pushNormal(V[b], V[b + 1], V[b + 2]); 336 - }if (void 0 !== w.uv) for (var B = w.uv.array, b = 0, z = B.length; b < z; b += 2) { 337 - q.pushUv(B[b], B[b + 1]); 338 - }if (null !== H.index) { 339 - var P = H.index.array;if (M.length > 0) for (var W = 0; W < M.length; W++) { 340 - for (var U = M[W], b = U.start, z = U.start + U.count; b < z; b += 3) { 341 - q.pushTriangle(P[b], P[b + 1], P[b + 2]); 342 - } 343 - } else for (var b = 0, z = P.length; b < z; b += 3) { 344 - q.pushTriangle(P[b], P[b + 1], P[b + 2]); 345 - } 346 - } else for (var b = 0, z = C.length / 3; b < z; b += 3) { 347 - q.pushTriangle(b, b + 1, b + 2); 348 - } 349 - } else if (H instanceof THREE.Geometry) { 350 - var J = H.vertices, 351 - K = H.faces, 352 - Q = H.faceVertexUvs[0];F.getNormalMatrix(R);for (var X = g.material, Y = Array.isArray(X), Z = 0, $ = J.length; Z < $; Z++) { 353 - var _ = J[Z];if (L.copy(_), !0 === X.morphTargets) for (var ee = H.morphTargets, re = g.morphTargetInfluences, te = 0, ie = ee.length; te < ie; te++) { 354 - var oe = re[te];if (0 !== oe) { 355 - var ne = ee[te], 356 - ae = ne.vertices[Z];L.x += (ae.x - _.x) * oe, L.y += (ae.y - _.y) * oe, L.z += (ae.z - _.z) * oe; 357 - } 358 - }q.pushVertex(L.x, L.y, L.z); 359 - }for (var se = 0, le = K.length; se < le; se++) { 360 - var ce = K[se];if (void 0 !== (X = !0 === Y ? g.material[ce.materialIndex] : g.material)) { 361 - var pe = X.side, 362 - Ee = S[ce.a], 363 - fe = S[ce.b], 364 - de = S[ce.c];if (!1 !== q.checkTriangleVisibility(Ee, fe, de)) { 365 - var he = q.checkBackfaceCulling(Ee, fe, de);if (pe !== THREE.DoubleSide) { 366 - if (pe === THREE.FrontSide && !1 === he) continue;if (pe === THREE.BackSide && !0 === he) continue; 367 - }h = n(), h.id = g.id, h.v1.copy(Ee), h.v2.copy(fe), h.v3.copy(de), h.normalModel.copy(ce.normal), !1 !== he || pe !== THREE.BackSide && pe !== THREE.DoubleSide || h.normalModel.negate(), h.normalModel.applyMatrix3(F).normalize();for (var ue = ce.vertexNormals, me = 0, ve = Math.min(ue.length, 3); me < ve; me++) { 368 - var ye = h.vertexNormalsModel[me];ye.copy(ue[me]), !1 !== he || pe !== THREE.BackSide && pe !== THREE.DoubleSide || ye.negate(), ye.applyMatrix3(F).normalize(); 369 - }h.vertexNormalsLength = ue.length;var xe = Q[se];if (void 0 !== xe) for (var Re = 0; Re < 3; Re++) { 370 - h.uvs[Re].copy(xe[Re]); 371 - }h.color = ce.color, h.material = X, h.z = (Ee.positionScreen.z + fe.positionScreen.z + de.positionScreen.z) / 3, h.renderOrder = g.renderOrder, j.elements.push(h); 372 - } 373 - } 374 - } 375 - } 376 - } else if (g instanceof THREE.Line) { 377 - if (A.multiplyMatrices(k, R), H instanceof THREE.BufferGeometry) { 378 - var w = H.attributes;if (void 0 !== w.position) { 379 - for (var C = w.position.array, b = 0, z = C.length; b < z; b += 3) { 380 - q.pushVertex(C[b], C[b + 1], C[b + 2]); 381 - }if (void 0 !== w.color) for (var Te = w.color.array, b = 0, z = Te.length; b < z; b += 3) { 382 - q.pushColor(Te[b], Te[b + 1], Te[b + 2]); 383 - }if (null !== H.index) for (var P = H.index.array, b = 0, z = P.length; b < z; b += 2) { 384 - q.pushLine(P[b], P[b + 1]); 385 - } else for (var ge = g instanceof THREE.LineSegments ? 2 : 1, b = 0, z = C.length / 3 - 1; b < z; b += ge) { 386 - q.pushLine(b, b + 1); 387 - } 388 - } 389 - } else if (H instanceof THREE.Geometry) { 390 - var J = g.geometry.vertices;if (0 === J.length) continue;Ee = o(), Ee.positionScreen.copy(J[0]).applyMatrix4(A);for (var ge = g instanceof THREE.LineSegments ? 2 : 1, Z = 1, $ = J.length; Z < $; Z++) { 391 - Ee = o(), Ee.positionScreen.copy(J[Z]).applyMatrix4(A), (Z + 1) % ge > 0 || (fe = S[d - 2], G.copy(Ee.positionScreen), I.copy(fe.positionScreen), !0 === c(G, I) && (G.multiplyScalar(1 / G.w), I.multiplyScalar(1 / I.w), m = a(), m.id = g.id, m.v1.positionScreen.copy(G), m.v2.positionScreen.copy(I), m.z = Math.max(G.z, I.z), m.renderOrder = g.renderOrder, m.material = g.material, g.material.vertexColors === THREE.VertexColors && (m.vertexColors[0].copy(g.geometry.colors[Z]), m.vertexColors[1].copy(g.geometry.colors[Z - 1])), j.elements.push(m))); 392 - } 393 - } 394 - } else if (g instanceof THREE.Points) { 395 - if (A.multiplyMatrices(k, R), H instanceof THREE.Geometry) for (var J = g.geometry.vertices, Z = 0, $ = J.length; Z < $; Z++) { 396 - var _ = J[Z];O.set(_.x, _.y, _.z, 1), O.applyMatrix4(A), t(O, g, i); 397 - } else if (H instanceof THREE.BufferGeometry) { 398 - var w = H.attributes;if (void 0 !== w.position) for (var C = w.position.array, b = 0, z = C.length; b < z; b += 3) { 399 - O.set(C[b], C[b + 1], C[b + 2], 1), O.applyMatrix4(A), t(O, g, i); 400 - } 401 - } 402 - } else g instanceof THREE.Sprite && (O.set(R.elements[12], R.elements[13], R.elements[14], 1), O.applyMatrix4(k), t(O, g, i)); 403 - }return !0 === p && j.elements.sort(l), j; 404 - }; 405 - }; 406 - //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpzL2NhbnZhcy1yZW5kZXJlci1hbmQtcHJvamVjdG9yLm1pbi5qcyJdLCJuYW1lcyI6WyJiZ0NvbG9yIiwiVEhSRUUiLCJTcHJpdGVDYW52YXNNYXRlcmlhbCIsImUiLCJNYXRlcmlhbCIsImNhbGwiLCJ0eXBlIiwiY29sb3IiLCJDb2xvciIsInByb2dyYW0iLCJzZXRWYWx1ZXMiLCJwcm90b3R5cGUiLCJPYmplY3QiLCJjcmVhdGUiLCJjb25zdHJ1Y3RvciIsImlzU3ByaXRlQ2FudmFzTWF0ZXJpYWwiLCJjbG9uZSIsImNvcHkiLCJDYW52YXNSZW5kZXJlciIsInIiLCJtZSIsInNldFJHQiIsInZlIiwieWUiLCJnIiwibGVuZ3RoIiwidCIsImkiLCJpc0FtYmllbnRMaWdodCIsImFkZCIsImlzRGlyZWN0aW9uYWxMaWdodCIsImlzUG9pbnRMaWdodCIsIm8iLCJuIiwiRWUiLCJhIiwieGUiLCJzZXRGcm9tTWF0cml4UG9zaXRpb24iLCJtYXRyaXhXb3JsZCIsIm5vcm1hbGl6ZSIsInMiLCJkb3QiLCJpbnRlbnNpdHkiLCJtdWx0aXBseVNjYWxhciIsInN1YlZlY3RvcnMiLCJkaXN0YW5jZSIsIk1hdGgiLCJtaW4iLCJkaXN0YW5jZVRvIiwiZiIsIm9wYWNpdHkiLCJkIiwiYmxlbmRpbmciLCJzY2FsZSIsIngiLCJVIiwieSIsInEiLCJzcXJ0IiwidWUiLCJzZXQiLCJtYXgiLCJpc1Nwcml0ZU1hdGVyaWFsIiwibWFwIiwiZmUiLCJpZCIsInZlcnNpb24iLCJjIiwiY2FudmFzIiwibCIsImltYWdlIiwicCIsIndpZHRoIiwib2Zmc2V0IiwiRSIsImhlaWdodCIsImgiLCJyZXBlYXQiLCJ1IiwibSIsIloiLCJzYXZlIiwidHJhbnNsYXRlIiwicm90YXRpb24iLCJyb3RhdGUiLCJmaWxsUmVjdCIsInJlc3RvcmUiLCJnZXRTdHlsZSIsInYiLCJpc1BvaW50c01hdGVyaWFsIiwic2l6ZSIsImJlZ2luUGF0aCIsIm1vdmVUbyIsInBvc2l0aW9uU2NyZWVuIiwibGluZVRvIiwiaXNMaW5lQmFzaWNNYXRlcmlhbCIsImxpbmV3aWR0aCIsImxpbmVjYXAiLCJsaW5lam9pbiIsInZlcnRleENvbG9ycyIsIlZlcnRleENvbG9ycyIsImNyZWF0ZUxpbmVhckdyYWRpZW50IiwiYWRkQ29sb3JTdG9wIiwiaXNMaW5lRGFzaGVkTWF0ZXJpYWwiLCJkYXNoU2l6ZSIsImdhcFNpemUiLCJzdHJva2UiLCJleHBhbmRCeVNjYWxhciIsIkEiLCJpbmZvIiwicmVuZGVyIiwidmVydGljZXMiLCJmYWNlcyIsIk0iLCJDIiwiYiIsInoiLCJWIiwiaiIsImlzTWVzaExhbWJlcnRNYXRlcmlhbCIsImlzTWVzaFBob25nTWF0ZXJpYWwiLCJpc01lc2hTdGFuZGFyZE1hdGVyaWFsIiwiY2UiLCJwZSIsImVtaXNzaXZlIiwiRmFjZUNvbG9ycyIsIm11bHRpcGx5IiwibGUiLCJSZSIsInBvc2l0aW9uV29ybGQiLCJkaXZpZGVTY2FsYXIiLCJub3JtYWxNb2RlbCIsIndpcmVmcmFtZSIsIndpcmVmcmFtZUxpbmV3aWR0aCIsIndpcmVmcmFtZUxpbmVjYXAiLCJ3aXJlZnJhbWVMaW5lam9pbiIsImlzTWVzaEJhc2ljTWF0ZXJpYWwiLCJtYXBwaW5nIiwiVVZNYXBwaW5nIiwiTCIsInV2cyIsImVudk1hcCIsIlNwaGVyaWNhbFJlZmxlY3Rpb25NYXBwaW5nIiwiVGUiLCJ2ZXJ0ZXhOb3JtYWxzTW9kZWwiLCJhcHBseU1hdHJpeDMiLCJnZSIsIk8iLCJCIiwiUCIsIlciLCJOIiwiayIsImlzTWVzaE5vcm1hbE1hdGVyaWFsIiwiYWRkU2NhbGFyIiwiY2xvc2VQYXRoIiwiZmlsbCIsIkNvbXByZXNzZWRUZXh0dXJlIiwiRGF0YVRleHR1cmUiLCJjb21wbGV0ZSIsIndyYXBTIiwiUmVwZWF0V3JhcHBpbmciLCJNaXJyb3JlZFJlcGVhdFdyYXBwaW5nIiwid3JhcFQiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJnZXRDb250ZXh0Iiwic2V0VHJhbnNmb3JtIiwiZHJhd0ltYWdlIiwiY3JlYXRlUGF0dGVybiIsIm9uVXBkYXRlIiwiUiIsIlQiLCJTIiwiSCIsInciLCJ0cmFuc2Zvcm0iLCJlZSIsImdsb2JhbEFscGhhIiwicmUiLCJOb3JtYWxCbGVuZGluZyIsImdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiIsIkFkZGl0aXZlQmxlbmRpbmciLCJTdWJ0cmFjdGl2ZUJsZW5kaW5nIiwiTXVsdGlwbHlCbGVuZGluZyIsIm9lIiwibGluZVdpZHRoIiwibmUiLCJsaW5lQ2FwIiwiYWUiLCJsaW5lSm9pbiIsInRlIiwic3Ryb2tlU3R5bGUiLCJpZSIsImZpbGxTdHlsZSIsInNlIiwic2V0TGluZURhc2giLCJsb2ciLCJSRVZJU0lPTiIsIkYiLCJQcm9qZWN0b3IiLCJEIiwiRyIsIkkiLCJmbG9vciIsIkoiLCJLIiwiUSIsIlgiLCJZIiwiYWxwaGEiLCIkIiwiXyIsImRlIiwiQm94MiIsImhlIiwiVmVjdG9yMyIsIk1hdHJpeDMiLCJkb21FbGVtZW50IiwiYXV0b0NsZWFyIiwic29ydE9iamVjdHMiLCJzb3J0RWxlbWVudHMiLCJnZXRDb250ZXh0QXR0cmlidXRlcyIsImdldFBpeGVsUmF0aW8iLCJzZXRQaXhlbFJhdGlvIiwic2V0U2l6ZSIsInN0eWxlIiwic2V0Vmlld3BvcnQiLCJzZXRTY2lzc29yIiwic2V0U2Npc3NvclRlc3QiLCJzZXRDbGVhckNvbG9yIiwic2V0Q2xlYXJDb2xvckhleCIsImNvbnNvbGUiLCJ3YXJuIiwiZ2V0Q2xlYXJDb2xvciIsImdldENsZWFyQWxwaGEiLCJnZXRNYXhBbmlzb3Ryb3B5IiwiY2xlYXIiLCJpc0VtcHR5IiwiaW50ZXJzZWN0IiwiY2xlYXJSZWN0IiwibWFrZUVtcHR5IiwiY2xlYXJDb2xvciIsImNsZWFyRGVwdGgiLCJjbGVhclN0ZW5jaWwiLCJpc0NhbWVyYSIsImVycm9yIiwiYmFja2dyb3VuZCIsImlzQ29sb3IiLCJwcm9qZWN0U2NlbmUiLCJlbGVtZW50cyIsImxpZ2h0cyIsImdldE5vcm1hbE1hdHJpeCIsIm1hdHJpeFdvcmxkSW52ZXJzZSIsIm1hdGVyaWFsIiwiUmVuZGVyYWJsZVNwcml0ZSIsIlJlbmRlcmFibGVMaW5lIiwidjEiLCJ2MiIsInNldEZyb21Qb2ludHMiLCJpbnRlcnNlY3RzQm94IiwiUmVuZGVyYWJsZUZhY2UiLCJ2MyIsIm92ZXJkcmF3IiwidW5pb24iLCJSZW5kZXJhYmxlT2JqZWN0Iiwib2JqZWN0IiwicmVuZGVyT3JkZXIiLCJSZW5kZXJhYmxlVmVydGV4IiwidmVydGV4Tm9ybWFsc0xlbmd0aCIsIlZlY3RvcjIiLCJwb3NpdGlvbiIsIlZlY3RvcjQiLCJ2aXNpYmxlIiwiTGlnaHQiLCJwdXNoIiwiTWVzaCIsIkxpbmUiLCJQb2ludHMiLCJmcnVzdHVtQ3VsbGVkIiwiaW50ZXJzZWN0c09iamVjdCIsIlNwcml0ZSIsImludGVyc2VjdHNTcHJpdGUiLCJjaGlsZHJlbiIsImFwcGx5TWF0cml4NCIsIm9iamVjdHMiLCJhYnMiLCJwcm9qZWN0aW9uTWF0cml4IiwibGVycCIsIkJveDMiLCJBcnJheSIsIk1hdHJpeDQiLCJGcnVzdHVtIiwicHJvamVjdFZlY3RvciIsInByb2plY3QiLCJ1bnByb2plY3RWZWN0b3IiLCJ1bnByb2plY3QiLCJwaWNraW5nUmF5IiwiZnJvbUFycmF5Iiwic2lkZSIsIkRvdWJsZVNpZGUiLCJhcmd1bWVudHMiLCJzZXRPYmplY3QiLCJwcm9qZWN0VmVydGV4IiwiY2hlY2tUcmlhbmdsZVZpc2liaWxpdHkiLCJjaGVja0JhY2tmYWNlQ3VsbGluZyIsInB1c2hWZXJ0ZXgiLCJwdXNoTm9ybWFsIiwicHVzaENvbG9yIiwicHVzaFV2IiwicHVzaExpbmUiLCJwdXNoVHJpYW5nbGUiLCJhdXRvVXBkYXRlIiwidXBkYXRlTWF0cml4V29ybGQiLCJwYXJlbnQiLCJtdWx0aXBseU1hdHJpY2VzIiwic2V0RnJvbU1hdHJpeCIsInNvcnQiLCJnZW9tZXRyeSIsIkJ1ZmZlckdlb21ldHJ5IiwiYXR0cmlidXRlcyIsImdyb3VwcyIsImFycmF5Iiwibm9ybWFsIiwidXYiLCJpbmRleCIsInN0YXJ0IiwiY291bnQiLCJHZW9tZXRyeSIsImZhY2VWZXJ0ZXhVdnMiLCJpc0FycmF5IiwibW9ycGhUYXJnZXRzIiwibW9ycGhUYXJnZXRJbmZsdWVuY2VzIiwibWF0ZXJpYWxJbmRleCIsIkZyb250U2lkZSIsIkJhY2tTaWRlIiwibmVnYXRlIiwidmVydGV4Tm9ybWFscyIsIkxpbmVTZWdtZW50cyIsImNvbG9ycyJdLCJtYXBwaW5ncyI6Ijs7QUFBQSxJQUFJQSxVQUFRLFFBQVosQ0FBcUJDLE1BQU1DLG9CQUFOLEdBQTJCLFVBQVNDLENBQVQsRUFBVztBQUFDRixRQUFNRyxRQUFOLENBQWVDLElBQWYsQ0FBb0IsSUFBcEIsR0FBMEIsS0FBS0MsSUFBTCxHQUFVLHNCQUFwQyxFQUEyRCxLQUFLQyxLQUFMLEdBQVcsSUFBSU4sTUFBTU8sS0FBVixDQUFnQixRQUFoQixDQUF0RSxFQUFnRyxLQUFLQyxPQUFMLEdBQWEsWUFBVSxDQUFFLENBQXpILEVBQTBILEtBQUtDLFNBQUwsQ0FBZVAsQ0FBZixDQUExSDtBQUE0SSxDQUFuTCxFQUFvTEYsTUFBTUMsb0JBQU4sQ0FBMkJTLFNBQTNCLEdBQXFDQyxPQUFPQyxNQUFQLENBQWNaLE1BQU1HLFFBQU4sQ0FBZU8sU0FBN0IsQ0FBek4sRUFBaVFWLE1BQU1DLG9CQUFOLENBQTJCUyxTQUEzQixDQUFxQ0csV0FBckMsR0FBaURiLE1BQU1DLG9CQUF4VCxFQUE2VUQsTUFBTUMsb0JBQU4sQ0FBMkJTLFNBQTNCLENBQXFDSSxzQkFBckMsR0FBNEQsQ0FBQyxDQUExWSxFQUE0WWQsTUFBTUMsb0JBQU4sQ0FBMkJTLFNBQTNCLENBQXFDSyxLQUFyQyxHQUEyQyxZQUFVO0FBQUMsTUFBSWIsSUFBRSxJQUFJRixNQUFNQyxvQkFBVixFQUFOLENBQXFDLE9BQU9DLEVBQUVjLElBQUYsQ0FBTyxJQUFQLEdBQWFkLEVBQUVJLEtBQUYsQ0FBUVUsSUFBUixDQUFhLEtBQUtWLEtBQWxCLENBQWIsRUFBc0NKLEVBQUVNLE9BQUYsR0FBVSxLQUFLQSxPQUFyRCxFQUE2RE4sQ0FBcEU7QUFBc0UsQ0FBN2lCLEVB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LElBQVgsQ0FBZ0J4UCxDQUFoQixDQUFSLEVBQTJCaUQsQ0FBakM7QUFBbUMsR0FBcndJO0FBQXN3SSxDQUFwcHFCIiwiZmlsZSI6ImpzL2NhbnZhcy1yZW5kZXJlci1hbmQtcHJvamVjdG9yLm1pbi5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBiZ0NvbG9yPTE2Nzc3MjE1O1RIUkVFLlNwcml0ZUNhbnZhc01hdGVyaWFsPWZ1bmN0aW9uKGUpe1RIUkVFLk1hdGVyaWFsLmNhbGwodGhpcyksdGhpcy50eXBlPVwiU3ByaXRlQ2FudmFzTWF0ZXJpYWxcIix0aGlzLmNvbG9yPW5ldyBUSFJFRS5Db2xvcigxNjc3NzIxNSksdGhpcy5wcm9ncmFtPWZ1bmN0aW9uKCl7fSx0aGlzLnNldFZhbHVlcyhlKX0sVEhSRUUuU3ByaXRlQ2FudmFzTWF0ZXJpYWwucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoVEhSRUUuTWF0ZXJpYWwucHJvdG90eXBlKSxUSFJFRS5TcHJpdGVDYW52YXNNYXRlcmlhbC5wcm90b3R5cGUuY29uc3RydWN0b3I9VEhSRUUuU3ByaXRlQ2FudmFzTWF0ZXJpYWwsVEhSRUUuU3ByaXRlQ2FudmFzTWF0ZXJpYWwucHJvdG90eXBlLmlzU3ByaXRlQ2FudmFzTWF0ZXJpYWw9ITAsVEhSRUUuU3ByaXRlQ2FudmFzTWF0ZXJpYWwucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIGU9bmV3IFRIUkVFLlNwcml0ZUNhbnZhc01hdGVyaWFsO3JldHVybiBlLmNvcHkodGhpcyksZS5jb2xvci5jb3B5KHRoaXMuY29sb3IpLGUucHJvZ3JhbT10aGlzLnByb2dyYW0sZX0sVEhSRUUuQ2FudmFzUmVuZGVyZXI9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcigpe21lLnNldFJHQigwLDAsMCksdmUuc2V0UkdCKDAsMCwwKSx5ZS5zZXRSR0IoMCwwLDApO2Zvcih2YXIgZT0wLHI9Zy5sZW5ndGg7ZTxyO2UrKyl7dmFyIHQ9Z1tlXSxpPXQuY29sb3I7dC5pc0FtYmllbnRMaWdodD9tZS5hZGQoaSk6dC5pc0RpcmVjdGlvbmFsTGlnaHQ/dmUuYWRkKGkpOnQuaXNQb2ludExpZ2h0JiZ5ZS5hZGQoaSl9fWZ1bmN0aW9uIHQoZSxyLHQpe2Zvcih2YXIgaT0wLG89Zy5sZW5ndGg7aTxvO2krKyl7dmFyIG49Z1tpXTtpZihFZS5jb3B5KG4uY29sb3IpLG4uaXNEaXJlY3Rpb25hbExpZ2h0KXt2YXIgYT14ZS5zZXRGcm9tTWF0cml4UG9zaXRpb24obi5tYXRyaXhXb3JsZCkubm9ybWFsaXplKCkscz1yLmRvdChhKTtpZihzPD0wKWNvbnRpbnVlO3MqPW4uaW50ZW5zaXR5LHQuYWRkKEVlLm11bHRpcGx5U2NhbGFyKHMpKX1lbHNlIGlmKG4uaXNQb2ludExpZ2h0KXt2YXIgYT14ZS5zZXRGcm9tTWF0cml4UG9zaXRpb24obi5tYXRyaXhXb3JsZCkscz1yLmRvdCh4ZS5zdWJWZWN0b3JzKGEsZSkubm9ybWFsaXplKCkpO2lmKHM8PTApY29udGludWU7aWYoMD09KHMqPTA9PW4uZGlzdGFuY2U/MToxLU1hdGgubWluKGUuZGlzdGFuY2VUbyhhKS9uLmRpc3RhbmNlLDEpKSljb250aW51ZTtzKj1uLmludGVuc2l0eSx0LmFkZChFZS5tdWx0aXBseVNjYWxhcihzKSl9fX1mdW5jdGlvbiBpKGUscix0KXtmKHQub3BhY2l0eSksZCh0LmJsZW5kaW5nKTt2YXIgaT1yLnNjYWxlLngqVSxvPXIuc2NhbGUueSpxLG49TWF0aC5zcXJ0KGkqaStvKm8pO2lmKHVlLm1pbi5zZXQoZS54LW4sZS55LW4pLHVlLm1heC5zZXQoZS54K24sZS55K24pLHQuaXNTcHJpdGVNYXRlcmlhbCl7dmFyIGE9dC5tYXA7aWYobnVsbCE9PWEpe3ZhciBzPWZlW2EuaWRdO2lmKHZvaWQgMCE9PXMmJnMudmVyc2lvbj09PWEudmVyc2lvbnx8KHM9YyhhKSxmZVthLmlkXT1zKSx2b2lkIDAhPT1zLmNhbnZhcyl7eShzLmNhbnZhcyk7dmFyIGw9YS5pbWFnZSxwPWwud2lkdGgqYS5vZmZzZXQueCxFPWwuaGVpZ2h0KmEub2Zmc2V0LnksaD1sLndpZHRoKmEucmVwZWF0LngsdT1sLmhlaWdodCphLnJlcGVhdC55LG09aS9oLHg9by91O1ouc2F2ZSgpLFoudHJhbnNsYXRlKGUueCxlLnkpLDAhPT10LnJvdGF0aW9uJiZaLnJvdGF0ZSh0LnJvdGF0aW9uKSxaLnRyYW5zbGF0ZSgtaS8yLC1vLzIpLFouc2NhbGUobSx4KSxaLnRyYW5zbGF0ZSgtcCwtRSksWi5maWxsUmVjdChwLEUsaCx1KSxaLnJlc3RvcmUoKX19ZWxzZSB5KHQuY29sb3IuZ2V0U3R5bGUoKSksWi5zYXZlKCksWi50cmFuc2xhdGUoZS54LGUueSksMCE9PXQucm90YXRpb24mJloucm90YXRlKHQucm90YXRpb24pLFouc2NhbGUoaSwtbyksWi5maWxsUmVjdCgtLjUsLS41LDEsMSksWi5yZXN0b3JlKCl9ZWxzZSB0LmlzU3ByaXRlQ2FudmFzTWF0ZXJpYWw/KHYodC5jb2xvci5nZXRTdHlsZSgpKSx5KHQuY29sb3IuZ2V0U3R5bGUoKSksWi5zYXZlKCksWi50cmFuc2xhdGUoZS54LGUueSksMCE9PXQucm90YXRpb24mJloucm90YXRlKHQucm90YXRpb24pLFouc2NhbGUoaSxvKSx0LnByb2dyYW0oWiksWi5yZXN0b3JlKCkpOnQuaXNQb2ludHNNYXRlcmlhbCYmKHkodC5jb2xvci5nZXRTdHlsZSgpKSxaLnNhdmUoKSxaLnRyYW5zbGF0ZShlLngsZS55KSwwIT09dC5yb3RhdGlvbiYmWi5yb3RhdGUodC5yb3RhdGlvbiksWi5zY2FsZShpKnQuc2l6ZSwtbyp0LnNpemUpLFouZmlsbFJlY3QoLS41LC0uNSwxLDEpLFoucmVzdG9yZSgpKX1mdW5jdGlvbiBvKGUscix0LGkpe2lmKGYoaS5vcGFjaXR5KSxkKGkuYmxlbmRpbmcpLFouYmVnaW5QYXRoKCksWi5tb3ZlVG8oZS5wb3NpdGlvblNjcmVlbi54LGUucG9zaXRpb25TY3JlZW4ueSksWi5saW5lVG8oci5wb3NpdGlvblNjcmVlbi54LHIucG9zaXRpb25TY3JlZW4ueSksaS5pc0xpbmVCYXNpY01hdGVyaWFsKXtpZihoKGkubGluZXdpZHRoKSx1KGkubGluZWNhcCksbShpLmxpbmVqb2luKSxpLnZlcnRleENvbG9ycyE9PVRIUkVFLlZlcnRleENvbG9ycyl2KGkuY29sb3IuZ2V0U3R5bGUoKSk7ZWxzZXt2YXIgbz10LnZlcnRleENvbG9yc1swXS5nZXRTdHlsZSgpLG49dC52ZXJ0ZXhDb2xvcnNbMV0uZ2V0U3R5bGUoKTtpZihvPT09bil2KG8pO2Vsc2V7dHJ5e3ZhciBhPVouY3JlYXRlTGluZWFyR3JhZGllbnQoZS5wb3NpdGlvblNjcmVlbi54LGUucG9zaXRpb25TY3JlZW4ueSxyLnBvc2l0aW9uU2NyZWVuLngsci5wb3NpdGlvblNjcmVlbi55KTthLmFkZENvbG9yU3RvcCgwLG8pLGEuYWRkQ29sb3JTdG9wKDEsbil9Y2F0Y2goZSl7YT1vfXYoYSl9fWkuaXNMaW5lRGFzaGVkTWF0ZXJpYWwmJngoW2kuZGFzaFNpemUsaS5nYXBTaXplXSksWi5zdHJva2UoKSx1ZS5leHBhbmRCeVNjYWxhcigyKmkubGluZXdpZHRoKSxpLmlzTGluZURhc2hlZE1hdGVyaWFsJiZ4KFtdKX19ZnVuY3Rpb24gbihlLHIsaSxvLG4sYyxFLGgpe2lmKEEuaW5mby5yZW5kZXIudmVydGljZXMrPTMsQS5pbmZvLnJlbmRlci5mYWNlcysrLGYoaC5vcGFjaXR5KSxkKGguYmxlbmRpbmcpLE09ZS5wb3NpdGlvblNjcmVlbi54LEM9ZS5wb3NpdGlvblNjcmVlbi55LGI9ci5wb3NpdGlvblNjcmVlbi54LHo9ci5wb3NpdGlvblNjcmVlbi55LFY9aS5wb3NpdGlvblNjcmVlbi54LGo9aS5wb3NpdGlvblNjcmVlbi55LGEoTSxDLGIseixWLGopLChoLmlzTWVzaExhbWJlcnRNYXRlcmlhbHx8aC5pc01lc2hQaG9uZ01hdGVyaWFsfHxoLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWwpJiZudWxsPT09aC5tYXApY2UuY29weShoLmNvbG9yKSxwZS5jb3B5KGguZW1pc3NpdmUpLGgudmVydGV4Q29sb3JzPT09VEhSRUUuRmFjZUNvbG9ycyYmY2UubXVsdGlwbHkoRS5jb2xvciksbGUuY29weShtZSksUmUuY29weShlLnBvc2l0aW9uV29ybGQpLmFkZChyLnBvc2l0aW9uV29ybGQpLmFkZChpLnBvc2l0aW9uV29ybGQpLmRpdmlkZVNjYWxhcigzKSx0KFJlLEUubm9ybWFsTW9kZWwsbGUpLGxlLm11bHRpcGx5KGNlKS5hZGQocGUpLCEwPT09aC53aXJlZnJhbWU/cyhsZSxoLndpcmVmcmFtZUxpbmV3aWR0aCxoLndpcmVmcmFtZUxpbmVjYXAsaC53aXJlZnJhbWVMaW5lam9pbik6bChsZSk7ZWxzZSBpZihoLmlzTWVzaEJhc2ljTWF0ZXJpYWx8fGguaXNNZXNoTGFtYmVydE1hdGVyaWFsfHxoLmlzTWVzaFBob25nTWF0ZXJpYWx8fGguaXNNZXNoU3RhbmRhcmRNYXRlcmlhbClpZihudWxsIT09aC5tYXApe3ZhciB1PWgubWFwLm1hcHBpbmc7dT09PVRIUkVFLlVWTWFwcGluZyYmKEw9RS51dnMscChNLEMsYix6LFYsaixMW29dLngsTFtvXS55LExbbl0ueCxMW25dLnksTFtjXS54LExbY10ueSxoLm1hcCkpfWVsc2UgbnVsbCE9PWguZW52TWFwP2guZW52TWFwLm1hcHBpbmc9PT1USFJFRS5TcGhlcmljYWxSZWZsZWN0aW9uTWFwcGluZyYmKFRlLmNvcHkoRS52ZXJ0ZXhOb3JtYWxzTW9kZWxbb10pLmFwcGx5TWF0cml4MyhnZSksTz0uNSpUZS54Ky41LEI9LjUqVGUueSsuNSxUZS5jb3B5KEUudmVydGV4Tm9ybWFsc01vZGVsW25dKS5hcHBseU1hdHJpeDMoZ2UpLFA9LjUqVGUueCsuNSxXPS41KlRlLnkrLjUsVGUuY29weShFLnZlcnRleE5vcm1hbHNNb2RlbFtjXSkuYXBwbHlNYXRyaXgzKGdlKSxOPS41KlRlLngrLjUsaz0uNSpUZS55Ky41LHAoTSxDLGIseixWLGosTyxCLFAsVyxOLGssaC5lbnZNYXApKToobGUuY29weShoLmNvbG9yKSxoLnZlcnRleENvbG9ycz09PVRIUkVFLkZhY2VDb2xvcnMmJmxlLm11bHRpcGx5KEUuY29sb3IpLCEwPT09aC53aXJlZnJhbWU/cyhsZSxoLndpcmVmcmFtZUxpbmV3aWR0aCxoLndpcmVmcmFtZUxpbmVjYXAsaC53aXJlZnJhbWVMaW5lam9pbik6bChsZSkpO2Vsc2UgaC5pc01lc2hOb3JtYWxNYXRlcmlhbD8oVGUuY29weShFLm5vcm1hbE1vZGVsKS5hcHBseU1hdHJpeDMoZ2UpLGxlLnNldFJHQihUZS54LFRlLnksVGUueikubXVsdGlwbHlTY2FsYXIoLjUpLmFkZFNjYWxhciguNSksITA9PT1oLndpcmVmcmFtZT9zKGxlLGgud2lyZWZyYW1lTGluZXdpZHRoLGgud2lyZWZyYW1lTGluZWNhcCxoLndpcmVmcmFtZUxpbmVqb2luKTpsKGxlKSk6KGxlLnNldFJHQigxLDEsMSksITA9PT1oLndpcmVmcmFtZT9zKGxlLGgud2lyZWZyYW1lTGluZXdpZHRoLGgud2lyZWZyYW1lTGluZWNhcCxoLndpcmVmcmFtZUxpbmVqb2luKTpsKGxlKSl9ZnVuY3Rpb24gYShlLHIsdCxpLG8sbil7Wi5iZWdpblBhdGgoKSxaLm1vdmVUbyhlLHIpLFoubGluZVRvKHQsaSksWi5saW5lVG8obyxuKSxaLmNsb3NlUGF0aCgpfWZ1bmN0aW9uIHMoZSxyLHQsaSl7aChyKSx1KHQpLG0oaSksdihlLmdldFN0eWxlKCkpLFouc3Ryb2tlKCksdWUuZXhwYW5kQnlTY2FsYXIoMipyKX1mdW5jdGlvbiBsKGUpe3koZS5nZXRTdHlsZSgpKSxaLmZpbGwoKX1mdW5jdGlvbiBjKGUpe2lmKDA9PT1lLnZlcnNpb258fGUgaW5zdGFuY2VvZiBUSFJFRS5Db21wcmVzc2VkVGV4dHVyZXx8ZSBpbnN0YW5jZW9mIFRIUkVFLkRhdGFUZXh0dXJlKXJldHVybntjYW52YXM6dm9pZCAwLHZlcnNpb246ZS52ZXJzaW9ufTt2YXIgcj1lLmltYWdlO2lmKCExPT09ci5jb21wbGV0ZSlyZXR1cm57Y2FudmFzOnZvaWQgMCx2ZXJzaW9uOjB9O3ZhciB0PWUud3JhcFM9PT1USFJFRS5SZXBlYXRXcmFwcGluZ3x8ZS53cmFwUz09PVRIUkVFLk1pcnJvcmVkUmVwZWF0V3JhcHBpbmcsaT1lLndyYXBUPT09VEhSRUUuUmVwZWF0V3JhcHBpbmd8fGUud3JhcFQ9PT1USFJFRS5NaXJyb3JlZFJlcGVhdFdyYXBwaW5nLG89ZS53cmFwUz09PVRIUkVFLk1pcnJvcmVkUmVwZWF0V3JhcHBpbmcsbj1lLndyYXBUPT09VEhSRUUuTWlycm9yZWRSZXBlYXRXcmFwcGluZyxhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7YS53aWR0aD1yLndpZHRoKihvPzI6MSksYS5oZWlnaHQ9ci5oZWlnaHQqKG4/MjoxKTt2YXIgcz1hLmdldENvbnRleHQoXCIyZFwiKTtzLnNldFRyYW5zZm9ybSgxLDAsMCwtMSwwLHIuaGVpZ2h0KSxzLmRyYXdJbWFnZShyLDAsMCksITA9PT1vJiYocy5zZXRUcmFuc2Zvcm0oLTEsMCwwLC0xLHIud2lkdGgsci5oZWlnaHQpLHMuZHJhd0ltYWdlKHIsLXIud2lkdGgsMCkpLCEwPT09biYmKHMuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSxzLmRyYXdJbWFnZShyLDAsci5oZWlnaHQpKSwhMD09PW8mJiEwPT09biYmKHMuc2V0VHJhbnNmb3JtKC0xLDAsMCwxLHIud2lkdGgsMCkscy5kcmF3SW1hZ2Uociwtci53aWR0aCxyLmhlaWdodCkpO3ZhciBsPVwibm8tcmVwZWF0XCI7ITA9PT10JiYhMD09PWk/bD1cInJlcGVhdFwiOiEwPT09dD9sPVwicmVwZWF0LXhcIjohMD09PWkmJihsPVwicmVwZWF0LXlcIik7dmFyIGM9Wi5jcmVhdGVQYXR0ZXJuKGEsbCk7cmV0dXJuIGUub25VcGRhdGUmJmUub25VcGRhdGUoZSkse2NhbnZhczpjLHZlcnNpb246ZS52ZXJzaW9ufX1mdW5jdGlvbiBwKGUscix0LGksbyxuLGEscyxsLHAsRSxmLGQpe3ZhciBoPWZlW2QuaWRdO2lmKHZvaWQgMCE9PWgmJmgudmVyc2lvbj09PWQudmVyc2lvbnx8KGg9YyhkKSxmZVtkLmlkXT1oKSx2b2lkIDA9PT1oLmNhbnZhcylyZXR1cm4geShcInJnYmEoIDAsIDAsIDAsIDEpXCIpLHZvaWQgWi5maWxsKCk7eShoLmNhbnZhcyk7dmFyIHUsbSx2LHgsUixULGcsUyxIPWQub2Zmc2V0LngvZC5yZXBlYXQueCx3PWQub2Zmc2V0LnkvZC5yZXBlYXQueSxNPWQuaW1hZ2Uud2lkdGgqZC5yZXBlYXQueCxDPWQuaW1hZ2UuaGVpZ2h0KmQucmVwZWF0Lnk7YT0oYStIKSpNLHM9KHMrdykqQyxsPShsK0gpKk0scD0ocCt3KSpDLEU9KEUrSCkqTSxmPShmK3cpKkMsdC09ZSxpLT1yLG8tPWUsbi09cixsLT1hLHAtPXMsRS09YSxmLT1zLDAhPT0oZz1sKmYtRSpwKSYmKFM9MS9nLHU9KGYqdC1wKm8pKlMsbT0oZippLXAqbikqUyx2PShsKm8tRSp0KSpTLHg9KGwqbi1FKmkpKlMsUj1lLXUqYS12KnMsVD1yLW0qYS14KnMsWi5zYXZlKCksWi50cmFuc2Zvcm0odSxtLHYseCxSLFQpLFouZmlsbCgpLFoucmVzdG9yZSgpKX1mdW5jdGlvbiBFKGUscix0KXt2YXIgaSxvPXIueC1lLngsbj1yLnktZS55LGE9bypvK24qbjswIT09YSYmKGk9dC9NYXRoLnNxcnQoYSksbyo9aSxuKj1pLHIueCs9byxyLnkrPW4sZS54LT1vLGUueS09bil9ZnVuY3Rpb24gZihlKXtlZSE9PWUmJihaLmdsb2JhbEFscGhhPWUsZWU9ZSl9ZnVuY3Rpb24gZChlKXtyZSE9PWUmJihlPT09VEhSRUUuTm9ybWFsQmxlbmRpbmc/Wi5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249XCJzb3VyY2Utb3ZlclwiOmU9PT1USFJFRS5BZGRpdGl2ZUJsZW5kaW5nP1ouZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPVwibGlnaHRlclwiOmU9PT1USFJFRS5TdWJ0cmFjdGl2ZUJsZW5kaW5nP1ouZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPVwiZGFya2VyXCI6ZT09PVRIUkVFLk11bHRpcGx5QmxlbmRpbmcmJihaLmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj1cIm11bHRpcGx5XCIpLHJlPWUpfWZ1bmN0aW9uIGgoZSl7b2UhPT1lJiYoWi5saW5lV2lkdGg9ZSxvZT1lKX1mdW5jdGlvbiB1KGUpe25lIT09ZSYmKFoubGluZUNhcD1lLG5lPWUpfWZ1bmN0aW9uIG0oZSl7YWUhPT1lJiYoWi5saW5lSm9pbj1lLGFlPWUpfWZ1bmN0aW9uIHYoZSl7dGUhPT1lJiYoWi5zdHJva2VTdHlsZT1lLHRlPWUpfWZ1bmN0aW9uIHkoZSl7aWUhPT1lJiYoWi5maWxsU3R5bGU9ZSxpZT1lKX1mdW5jdGlvbiB4KGUpe3NlLmxlbmd0aCE9PWUubGVuZ3RoJiYoWi5zZXRMaW5lRGFzaChlKSxzZT1lKX1jb25zb2xlLmxvZyhcIlRIUkVFLkNhbnZhc1JlbmRlcmVyXCIsVEhSRUUuUkVWSVNJT04pLGU9ZXx8e307dmFyIFIsVCxnLFMsSCx3LE0sQyxiLHosVixqLEwsTyxCLFAsVyxOLGssQT10aGlzLEY9bmV3IFRIUkVFLlByb2plY3RvcixEPXZvaWQgMCE9PWUuY2FudmFzP2UuY2FudmFzOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIiksRz1ELndpZHRoLEk9RC5oZWlnaHQsVT1NYXRoLmZsb29yKEcvMikscT1NYXRoLmZsb29yKEkvMiksSj0wLEs9MCxRPUcsWD1JLFk9MSxaPUQuZ2V0Q29udGV4dChcIjJkXCIse2FscGhhOiEwPT09ZS5hbHBoYX0pLCQ9bmV3IFRIUkVFLkNvbG9yKGJnQ29sb3IpLF89ITA9PT1lLmFscGhhPzA6MSxlZT0xLHJlPTAsdGU9bnVsbCxpZT1udWxsLG9lPW51bGwsbmU9bnVsbCxhZT1udWxsLHNlPVtdLGxlPW5ldyBUSFJFRS5Db2xvcixjZT1uZXcgVEhSRUUuQ29sb3IscGU9bmV3IFRIUkVFLkNvbG9yLEVlPW5ldyBUSFJFRS5Db2xvcixmZT17fSxkZT1uZXcgVEhSRUUuQm94MixoZT1uZXcgVEhSRUUuQm94Mix1ZT1uZXcgVEhSRUUuQm94MixtZT1uZXcgVEhSRUUuQ29sb3IsdmU9bmV3IFRIUkVFLkNvbG9yLHllPW5ldyBUSFJFRS5Db2xvcix4ZT1uZXcgVEhSRUUuVmVjdG9yMyxSZT1uZXcgVEhSRUUuVmVjdG9yMyxUZT1uZXcgVEhSRUUuVmVjdG9yMyxnZT1uZXcgVEhSRUUuTWF0cml4Mzt2b2lkIDA9PT1aLnNldExpbmVEYXNoJiYoWi5zZXRMaW5lRGFzaD1mdW5jdGlvbigpe30pLHRoaXMuZG9tRWxlbWVudD1ELHRoaXMuYXV0b0NsZWFyPSEwLHRoaXMuc29ydE9iamVjdHM9ITAsdGhpcy5zb3J0RWxlbWVudHM9ITAsdGhpcy5pbmZvPXtyZW5kZXI6e3ZlcnRpY2VzOjAsZmFjZXM6MH19LHRoaXMuZ2V0Q29udGV4dD1mdW5jdGlvbigpe3JldHVybiBafSx0aGlzLmdldENvbnRleHRBdHRyaWJ1dGVzPWZ1bmN0aW9uKCl7cmV0dXJuIFouZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKX0sdGhpcy5nZXRQaXhlbFJhdGlvPWZ1bmN0aW9uKCl7cmV0dXJuIFl9LHRoaXMuc2V0UGl4ZWxSYXRpbz1mdW5jdGlvbihlKXt2b2lkIDAhPT1lJiYoWT1lKX0sdGhpcy5zZXRTaXplPWZ1bmN0aW9uKGUscix0KXtHPWUqWSxJPXIqWSxELndpZHRoPUcsRC5oZWlnaHQ9SSxVPU1hdGguZmxvb3IoRy8yKSxxPU1hdGguZmxvb3IoSS8yKSwhMSE9PXQmJihELnN0eWxlLndpZHRoPWUrXCJweFwiLEQuc3R5bGUuaGVpZ2h0PXIrXCJweFwiKSxkZS5taW4uc2V0KC1VLC1xKSxkZS5tYXguc2V0KFUscSksaGUubWluLnNldCgtVSwtcSksaGUubWF4LnNldChVLHEpLGVlPTEscmU9MCx0ZT1udWxsLGllPW51bGwsb2U9bnVsbCxuZT1udWxsLGFlPW51bGwsdGhpcy5zZXRWaWV3cG9ydCgwLDAsZSxyKX0sdGhpcy5zZXRWaWV3cG9ydD1mdW5jdGlvbihlLHIsdCxpKXtKPWUqWSxLPXIqWSxRPXQqWSxYPWkqWX0sdGhpcy5zZXRTY2lzc29yPWZ1bmN0aW9uKCl7fSx0aGlzLnNldFNjaXNzb3JUZXN0PWZ1bmN0aW9uKCl7fSx0aGlzLnNldENsZWFyQ29sb3I9ZnVuY3Rpb24oZSxyKXskLnNldChlKSxfPXZvaWQgMCE9PXI/cjoxLGhlLm1pbi5zZXQoLVUsLXEpLGhlLm1heC5zZXQoVSxxKX0sdGhpcy5zZXRDbGVhckNvbG9ySGV4PWZ1bmN0aW9uKGUscil7Y29uc29sZS53YXJuKFwiVEhSRUUuQ2FudmFzUmVuZGVyZXI6IC5zZXRDbGVhckNvbG9ySGV4KCkgaXMgYmVpbmcgcmVtb3ZlZC4gVXNlIC5zZXRDbGVhckNvbG9yKCkgaW5zdGVhZC5cIiksdGhpcy5zZXRDbGVhckNvbG9yKGUscil9LHRoaXMuZ2V0Q2xlYXJDb2xvcj1mdW5jdGlvbigpe3JldHVybiAkfSx0aGlzLmdldENsZWFyQWxwaGE9ZnVuY3Rpb24oKXtyZXR1cm4gX30sdGhpcy5nZXRNYXhBbmlzb3Ryb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIDB9LHRoaXMuY2xlYXI9ZnVuY3Rpb24oKXshMT09PWhlLmlzRW1wdHkoKSYmKGhlLmludGVyc2VjdChkZSksaGUuZXhwYW5kQnlTY2FsYXIoMiksaGUubWluLng9aGUubWluLngrVSxoZS5taW4ueT0taGUubWluLnkrcSxoZS5tYXgueD1oZS5tYXgueCtVLGhlLm1heC55PS1oZS5tYXgueStxLF88MSYmWi5jbGVhclJlY3QoMHxoZS5taW4ueCwwfGhlLm1heC55LGhlLm1heC54LWhlLm1pbi54fDAsaGUubWluLnktaGUubWF4Lnl8MCksXz4wJiYoZigxKSxkKFRIUkVFLk5vcm1hbEJsZW5kaW5nKSx5KFwicmdiYShcIitNYXRoLmZsb29yKDI1NSokLnIpK1wiLFwiK01hdGguZmxvb3IoMjU1KiQuZykrXCIsXCIrTWF0aC5mbG9vcigyNTUqJC5iKStcIixcIitfK1wiKVwiKSxaLmZpbGxSZWN0KDB8aGUubWluLngsMHxoZS5tYXgueSxoZS5tYXgueC1oZS5taW4ueHwwLGhlLm1pbi55LWhlLm1heC55fDApKSxoZS5tYWtlRW1wdHkoKSl9LHRoaXMuY2xlYXJDb2xvcj1mdW5jdGlvbigpe30sdGhpcy5jbGVhckRlcHRoPWZ1bmN0aW9uKCl7fSx0aGlzLmNsZWFyU3RlbmNpbD1mdW5jdGlvbigpe30sdGhpcy5yZW5kZXI9ZnVuY3Rpb24oZSx0KXtpZih2b2lkIDA9PT10LmlzQ2FtZXJhKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoXCJUSFJFRS5DYW52YXNSZW5kZXJlci5yZW5kZXI6IGNhbWVyYSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuQ2FtZXJhLlwiKTt2YXIgYT1lLmJhY2tncm91bmQ7YSYmYS5pc0NvbG9yPyhmKDEpLGQoVEhSRUUuTm9ybWFsQmxlbmRpbmcpLHkoYS5nZXRTdHlsZSgpKSxaLmZpbGxSZWN0KDAsMCxHLEkpKTohMD09PXRoaXMuYXV0b0NsZWFyJiZ0aGlzLmNsZWFyKCksQS5pbmZvLnJlbmRlci52ZXJ0aWNlcz0wLEEuaW5mby5yZW5kZXIuZmFjZXM9MCxaLnNldFRyYW5zZm9ybShRL0csMCwwLC1YL0ksSixJLUspLFoudHJhbnNsYXRlKFUscSksUj1GLnByb2plY3RTY2VuZShlLHQsdGhpcy5zb3J0T2JqZWN0cyx0aGlzLnNvcnRFbGVtZW50cyksVD1SLmVsZW1lbnRzLGc9Ui5saWdodHMsZ2UuZ2V0Tm9ybWFsTWF0cml4KHQubWF0cml4V29ybGRJbnZlcnNlKSxyKCk7Zm9yKHZhciBzPTAsbD1ULmxlbmd0aDtzPGw7cysrKXt2YXIgYz1UW3NdLHA9Yy5tYXRlcmlhbDtpZih2b2lkIDAhPT1wJiYwIT09cC5vcGFjaXR5KXtpZih1ZS5tYWtlRW1wdHkoKSxjIGluc3RhbmNlb2YgVEhSRUUuUmVuZGVyYWJsZVNwcml0ZSlTPWMsUy54Kj1VLFMueSo9cSxpKFMsYyxwKTtlbHNlIGlmKGMgaW5zdGFuY2VvZiBUSFJFRS5SZW5kZXJhYmxlTGluZSlTPWMudjEsSD1jLnYyLFMucG9zaXRpb25TY3JlZW4ueCo9VSxTLnBvc2l0aW9uU2NyZWVuLnkqPXEsSC5wb3NpdGlvblNjcmVlbi54Kj1VLEgucG9zaXRpb25TY3JlZW4ueSo9cSx1ZS5zZXRGcm9tUG9pbnRzKFtTLnBvc2l0aW9uU2NyZWVuLEgucG9zaXRpb25TY3JlZW5dKSwhMD09PWRlLmludGVyc2VjdHNCb3godWUpJiZvKFMsSCxjLHApO2Vsc2UgaWYoYyBpbnN0YW5jZW9mIFRIUkVFLlJlbmRlcmFibGVGYWNlKXtpZihTPWMudjEsSD1jLnYyLHc9Yy52MyxTLnBvc2l0aW9uU2NyZWVuLno8LTF8fFMucG9zaXRpb25TY3JlZW4uej4xKWNvbnRpbnVlO2lmKEgucG9zaXRpb25TY3JlZW4uejwtMXx8SC5wb3NpdGlvblNjcmVlbi56PjEpY29udGludWU7aWYody5wb3NpdGlvblNjcmVlbi56PC0xfHx3LnBvc2l0aW9uU2NyZWVuLno+MSljb250aW51ZTtTLnBvc2l0aW9uU2NyZWVuLngqPVUsUy5wb3NpdGlvblNjcmVlbi55Kj1xLEgucG9zaXRpb25TY3JlZW4ueCo9VSxILnBvc2l0aW9uU2NyZWVuLnkqPXEsdy5wb3NpdGlvblNjcmVlbi54Kj1VLHcucG9zaXRpb25TY3JlZW4ueSo9cSxwLm92ZXJkcmF3PjAmJihFKFMucG9zaXRpb25TY3JlZW4sSC5wb3NpdGlvblNjcmVlbixwLm92ZXJkcmF3KSxFKEgucG9zaXRpb25TY3JlZW4sdy5wb3NpdGlvblNjcmVlbixwLm92ZXJkcmF3KSxFKHcucG9zaXRpb25TY3JlZW4sUy5wb3NpdGlvblNjcmVlbixwLm92ZXJkcmF3KSksdWUuc2V0RnJvbVBvaW50cyhbUy5wb3NpdGlvblNjcmVlbixILnBvc2l0aW9uU2NyZWVuLHcucG9zaXRpb25TY3JlZW5dKSwhMD09PWRlLmludGVyc2VjdHNCb3godWUpJiZuKFMsSCx3LDAsMSwyLGMscCl9aGUudW5pb24odWUpfX1aLnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCl9fSxUSFJFRS5SZW5kZXJhYmxlT2JqZWN0PWZ1bmN0aW9uKCl7dGhpcy5pZD0wLHRoaXMub2JqZWN0PW51bGwsdGhpcy56PTAsdGhpcy5yZW5kZXJPcmRlcj0wfSxUSFJFRS5SZW5kZXJhYmxlRmFjZT1mdW5jdGlvbigpe3RoaXMuaWQ9MCx0aGlzLnYxPW5ldyBUSFJFRS5SZW5kZXJhYmxlVmVydGV4LHRoaXMudjI9bmV3IFRIUkVFLlJlbmRlcmFibGVWZXJ0ZXgsdGhpcy52Mz1uZXcgVEhSRUUuUmVuZGVyYWJsZVZlcnRleCx0aGlzLm5vcm1hbE1vZGVsPW5ldyBUSFJFRS5WZWN0b3IzLHRoaXMudmVydGV4Tm9ybWFsc01vZGVsPVtuZXcgVEhSRUUuVmVjdG9yMyxuZXcgVEhSRUUuVmVjdG9yMyxuZXcgVEhSRUUuVmVjdG9yM10sdGhpcy52ZXJ0ZXhOb3JtYWxzTGVuZ3RoPTAsdGhpcy5jb2xvcj1uZXcgVEhSRUUuQ29sb3IsdGhpcy5tYXRlcmlhbD1udWxsLHRoaXMudXZzPVtuZXcgVEhSRUUuVmVjdG9yMixuZXcgVEhSRUUuVmVjdG9yMixuZXcgVEhSRUUuVmVjdG9yMl0sdGhpcy56PTAsdGhpcy5yZW5kZXJPcmRlcj0wfSxUSFJFRS5SZW5kZXJhYmxlVmVydGV4PWZ1bmN0aW9uKCl7dGhpcy5wb3NpdGlvbj1uZXcgVEhSRUUuVmVjdG9yMyx0aGlzLnBvc2l0aW9uV29ybGQ9bmV3IFRIUkVFLlZlY3RvcjMsdGhpcy5wb3NpdGlvblNjcmVlbj1uZXcgVEhSRUUuVmVjdG9yNCx0aGlzLnZpc2libGU9ITB9LFRIUkVFLlJlbmRlcmFibGVWZXJ0ZXgucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oZSl7dGhpcy5wb3NpdGlvbldvcmxkLmNvcHkoZS5wb3NpdGlvbldvcmxkKSx0aGlzLnBvc2l0aW9uU2NyZWVuLmNvcHkoZS5wb3NpdGlvblNjcmVlbil9LFRIUkVFLlJlbmRlcmFibGVMaW5lPWZ1bmN0aW9uKCl7dGhpcy5pZD0wLHRoaXMudjE9bmV3IFRIUkVFLlJlbmRlcmFibGVWZXJ0ZXgsdGhpcy52Mj1uZXcgVEhSRUUuUmVuZGVyYWJsZVZlcnRleCx0aGlzLnZlcnRleENvbG9ycz1bbmV3IFRIUkVFLkNvbG9yLG5ldyBUSFJFRS5Db2xvcl0sdGhpcy5tYXRlcmlhbD1udWxsLHRoaXMuej0wLHRoaXMucmVuZGVyT3JkZXI9MH0sVEhSRUUuUmVuZGVyYWJsZVNwcml0ZT1mdW5jdGlvbigpe3RoaXMuaWQ9MCx0aGlzLm9iamVjdD1udWxsLHRoaXMueD0wLHRoaXMueT0wLHRoaXMuej0wLHRoaXMucm90YXRpb249MCx0aGlzLnNjYWxlPW5ldyBUSFJFRS5WZWN0b3IyLHRoaXMubWF0ZXJpYWw9bnVsbCx0aGlzLnJlbmRlck9yZGVyPTB9LFRIUkVFLlByb2plY3Rvcj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7aWYoITEhPT10LnZpc2libGUpe2lmKHQgaW5zdGFuY2VvZiBUSFJFRS5MaWdodClqLmxpZ2h0cy5wdXNoKHQpO2Vsc2UgaWYodCBpbnN0YW5jZW9mIFRIUkVFLk1lc2h8fHQgaW5zdGFuY2VvZiBUSFJFRS5MaW5lfHx0IGluc3RhbmNlb2YgVEhSRUUuUG9pbnRzKXtpZighMT09PXQubWF0ZXJpYWwudmlzaWJsZSlyZXR1cm47aWYoITA9PT10LmZydXN0dW1DdWxsZWQmJiExPT09RC5pbnRlcnNlY3RzT2JqZWN0KHQpKXJldHVybjtyKHQpfWVsc2UgaWYodCBpbnN0YW5jZW9mIFRIUkVFLlNwcml0ZSl7aWYoITE9PT10Lm1hdGVyaWFsLnZpc2libGUpcmV0dXJuO2lmKCEwPT09dC5mcnVzdHVtQ3VsbGVkJiYhMT09PUQuaW50ZXJzZWN0c1Nwcml0ZSh0KSlyZXR1cm47cih0KX1mb3IodmFyIGk9dC5jaGlsZHJlbixvPTAsbj1pLmxlbmd0aDtvPG47bysrKWUoaVtvXSl9fWZ1bmN0aW9uIHIoZSl7cD1pKCkscC5pZD1lLmlkLHAub2JqZWN0PWUsTC5zZXRGcm9tTWF0cml4UG9zaXRpb24oZS5tYXRyaXhXb3JsZCksTC5hcHBseU1hdHJpeDQoaykscC56PUwueixwLnJlbmRlck9yZGVyPWUucmVuZGVyT3JkZXIsai5vYmplY3RzLnB1c2gocCl9ZnVuY3Rpb24gdChlLHIsdCl7dmFyIGk9MS9lLnc7ZS56Kj1pLGUuej49LTEmJmUuejw9MSYmKHk9cygpLHkuaWQ9ci5pZCx5Lng9ZS54KmkseS55PWUueSppLHkuej1lLnoseS5yZW5kZXJPcmRlcj1yLnJlbmRlck9yZGVyLHkub2JqZWN0PXIseS5yb3RhdGlvbj1yLnJvdGF0aW9uLHkuc2NhbGUueD1yLnNjYWxlLngqTWF0aC5hYnMoeS54LShlLngrdC5wcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWzBdKS8oZS53K3QucHJvamVjdGlvbk1hdHJpeC5lbGVtZW50c1sxMl0pKSx5LnNjYWxlLnk9ci5zY2FsZS55Kk1hdGguYWJzKHkueS0oZS55K3QucHJvamVjdGlvbk1hdHJpeC5lbGVtZW50c1s1XSkvKGUudyt0LnByb2plY3Rpb25NYXRyaXguZWxlbWVudHNbMTNdKSkseS5tYXRlcmlhbD1yLm1hdGVyaWFsLGouZWxlbWVudHMucHVzaCh5KSl9ZnVuY3Rpb24gaSgpe2lmKEU9PT1nKXt2YXIgZT1uZXcgVEhSRUUuUmVuZGVyYWJsZU9iamVjdDtyZXR1cm4gVC5wdXNoKGUpLGcrKyxFKyssZX1yZXR1cm4gVFtFKytdfWZ1bmN0aW9uIG8oKXtpZihkPT09SCl7dmFyIGU9bmV3IFRIUkVFLlJlbmRlcmFibGVWZXJ0ZXg7cmV0dXJuIFMucHVzaChlKSxIKyssZCsrLGV9cmV0dXJuIFNbZCsrXX1mdW5jdGlvbiBuKCl7aWYodT09PU0pe3ZhciBlPW5ldyBUSFJFRS5SZW5kZXJhYmxlRmFjZTtyZXR1cm4gdy5wdXNoKGUpLE0rKyx1KyssZX1yZXR1cm4gd1t1KytdfWZ1bmN0aW9uIGEoKXtpZih2PT09Yil7dmFyIGU9bmV3IFRIUkVFLlJlbmRlcmFibGVMaW5lO3JldHVybiBDLnB1c2goZSksYisrLHYrKyxlfXJldHVybiBDW3YrK119ZnVuY3Rpb24gcygpe2lmKHg9PT1WKXt2YXIgZT1uZXcgVEhSRUUuUmVuZGVyYWJsZVNwcml0ZTtyZXR1cm4gei5wdXNoKGUpLFYrKyx4KyssZX1yZXR1cm4gelt4KytdfWZ1bmN0aW9uIGwoZSxyKXtyZXR1cm4gZS5yZW5kZXJPcmRlciE9PXIucmVuZGVyT3JkZXI/ZS5yZW5kZXJPcmRlci1yLnJlbmRlck9yZGVyOmUueiE9PXIuej9yLnotZS56OmUuaWQhPT1yLmlkP2UuaWQtci5pZDowfWZ1bmN0aW9uIGMoZSxyKXt2YXIgdD0wLGk9MSxvPWUueitlLncsbj1yLnorci53LGE9LWUueitlLncscz0tci56K3IudztyZXR1cm4gbz49MCYmbj49MCYmYT49MCYmcz49MHx8IShvPDAmJm48MHx8YTwwJiZzPDApJiYobzwwP3Q9TWF0aC5tYXgodCxvLyhvLW4pKTpuPDAmJihpPU1hdGgubWluKGksby8oby1uKSkpLGE8MD90PU1hdGgubWF4KHQsYS8oYS1zKSk6czwwJiYoaT1NYXRoLm1pbihpLGEvKGEtcykpKSwhKGk8dCkmJihlLmxlcnAocix0KSxyLmxlcnAoZSwxLWkpLCEwKSl9dmFyIHAsRSxmLGQsaCx1LG0sdix5LHgsUixUPVtdLGc9MCxTPVtdLEg9MCx3PVtdLE09MCxDPVtdLGI9MCx6PVtdLFY9MCxqPXtvYmplY3RzOltdLGxpZ2h0czpbXSxlbGVtZW50czpbXX0sTD1uZXcgVEhSRUUuVmVjdG9yMyxPPW5ldyBUSFJFRS5WZWN0b3I0LEI9bmV3IFRIUkVFLkJveDMobmV3IFRIUkVFLlZlY3RvcjMoLTEsLTEsLTEpLG5ldyBUSFJFRS5WZWN0b3IzKDEsMSwxKSksUD1uZXcgVEhSRUUuQm94MyxXPW5ldyBBcnJheSgzKSxOPW5ldyBUSFJFRS5NYXRyaXg0LGs9bmV3IFRIUkVFLk1hdHJpeDQsQT1uZXcgVEhSRUUuTWF0cml4NCxGPW5ldyBUSFJFRS5NYXRyaXgzLEQ9bmV3IFRIUkVFLkZydXN0dW0sRz1uZXcgVEhSRUUuVmVjdG9yNCxJPW5ldyBUSFJFRS5WZWN0b3I0O3RoaXMucHJvamVjdFZlY3Rvcj1mdW5jdGlvbihlLHIpe2NvbnNvbGUud2FybihcIlRIUkVFLlByb2plY3RvcjogLnByb2plY3RWZWN0b3IoKSBpcyBub3cgdmVjdG9yLnByb2plY3QoKS5cIiksZS5wcm9qZWN0KHIpfSx0aGlzLnVucHJvamVjdFZlY3Rvcj1mdW5jdGlvbihlLHIpe2NvbnNvbGUud2FybihcIlRIUkVFLlByb2plY3RvcjogLnVucHJvamVjdFZlY3RvcigpIGlzIG5vdyB2ZWN0b3IudW5wcm9qZWN0KCkuXCIpLGUudW5wcm9qZWN0KHIpfSx0aGlzLnBpY2tpbmdSYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKFwiVEhSRUUuUHJvamVjdG9yOiAucGlja2luZ1JheSgpIGlzIG5vdyByYXljYXN0ZXIuc2V0RnJvbUNhbWVyYSgpLlwiKX07dmFyIFU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe1Q9ZSxnPVQubWF0ZXJpYWwsSC5nZXROb3JtYWxNYXRyaXgoVC5tYXRyaXhXb3JsZCksdi5sZW5ndGg9MCx5Lmxlbmd0aD0wLHgubGVuZ3RoPTB9ZnVuY3Rpb24gcihlKXt2YXIgcj1lLnBvc2l0aW9uLHQ9ZS5wb3NpdGlvbldvcmxkLGk9ZS5wb3NpdGlvblNjcmVlbjt0LmNvcHkocikuYXBwbHlNYXRyaXg0KFIpLGkuY29weSh0KS5hcHBseU1hdHJpeDQoayk7dmFyIG89MS9pLnc7aS54Kj1vLGkueSo9byxpLnoqPW8sZS52aXNpYmxlPWkueD49LTEmJmkueDw9MSYmaS55Pj0tMSYmaS55PD0xJiZpLno+PS0xJiZpLno8PTF9ZnVuY3Rpb24gdChlLHQsaSl7Zj1vKCksZi5wb3NpdGlvbi5zZXQoZSx0LGkpLHIoZil9ZnVuY3Rpb24gaShlLHIsdCl7di5wdXNoKGUscix0KX1mdW5jdGlvbiBzKGUscix0KXt5LnB1c2goZSxyLHQpfWZ1bmN0aW9uIGwoZSxyKXt4LnB1c2goZSxyKX1mdW5jdGlvbiBwKGUscix0KXtyZXR1cm4hMD09PWUudmlzaWJsZXx8ITA9PT1yLnZpc2libGV8fCEwPT09dC52aXNpYmxlfHwoV1swXT1lLnBvc2l0aW9uU2NyZWVuLFdbMV09ci5wb3NpdGlvblNjcmVlbixXWzJdPXQucG9zaXRpb25TY3JlZW4sQi5pbnRlcnNlY3RzQm94KFAuc2V0RnJvbVBvaW50cyhXKSkpfWZ1bmN0aW9uIEUoZSxyLHQpe3JldHVybih0LnBvc2l0aW9uU2NyZWVuLngtZS5wb3NpdGlvblNjcmVlbi54KSooci5wb3NpdGlvblNjcmVlbi55LWUucG9zaXRpb25TY3JlZW4ueSktKHQucG9zaXRpb25TY3JlZW4ueS1lLnBvc2l0aW9uU2NyZWVuLnkpKihyLnBvc2l0aW9uU2NyZWVuLngtZS5wb3NpdGlvblNjcmVlbi54KTwwfWZ1bmN0aW9uIGQoZSxyKXt2YXIgdD1TW2VdLGk9U1tyXTt0LnBvc2l0aW9uU2NyZWVuLmNvcHkodC5wb3NpdGlvbikuYXBwbHlNYXRyaXg0KEEpLGkucG9zaXRpb25TY3JlZW4uY29weShpLnBvc2l0aW9uKS5hcHBseU1hdHJpeDQoQSksITA9PT1jKHQucG9zaXRpb25TY3JlZW4saS5wb3NpdGlvblNjcmVlbikmJih0LnBvc2l0aW9uU2NyZWVuLm11bHRpcGx5U2NhbGFyKDEvdC5wb3NpdGlvblNjcmVlbi53KSxpLnBvc2l0aW9uU2NyZWVuLm11bHRpcGx5U2NhbGFyKDEvaS5wb3NpdGlvblNjcmVlbi53KSxtPWEoKSxtLmlkPVQuaWQsbS52MS5jb3B5KHQpLG0udjIuY29weShpKSxtLno9TWF0aC5tYXgodC5wb3NpdGlvblNjcmVlbi56LGkucG9zaXRpb25TY3JlZW4ueiksbS5yZW5kZXJPcmRlcj1ULnJlbmRlck9yZGVyLG0ubWF0ZXJpYWw9VC5tYXRlcmlhbCxULm1hdGVyaWFsLnZlcnRleENvbG9ycz09PVRIUkVFLlZlcnRleENvbG9ycyYmKG0udmVydGV4Q29sb3JzWzBdLmZyb21BcnJheSh5LDMqZSksbS52ZXJ0ZXhDb2xvcnNbMV0uZnJvbUFycmF5KHksMypyKSksai5lbGVtZW50cy5wdXNoKG0pKX1mdW5jdGlvbiB1KGUscix0KXt2YXIgaT1TW2VdLG89U1tyXSxhPVNbdF07aWYoITEhPT1wKGksbyxhKSYmKGcuc2lkZT09PVRIUkVFLkRvdWJsZVNpZGV8fCEwPT09RShpLG8sYSkpKXtoPW4oKSxoLmlkPVQuaWQsaC52MS5jb3B5KGkpLGgudjIuY29weShvKSxoLnYzLmNvcHkoYSksaC56PShpLnBvc2l0aW9uU2NyZWVuLnorby5wb3NpdGlvblNjcmVlbi56K2EucG9zaXRpb25TY3JlZW4ueikvMyxoLnJlbmRlck9yZGVyPVQucmVuZGVyT3JkZXIsaC5ub3JtYWxNb2RlbC5mcm9tQXJyYXkodiwzKmUpLGgubm9ybWFsTW9kZWwuYXBwbHlNYXRyaXgzKEgpLm5vcm1hbGl6ZSgpO2Zvcih2YXIgcz0wO3M8MztzKyspe3ZhciBsPWgudmVydGV4Tm9ybWFsc01vZGVsW3NdO2wuZnJvbUFycmF5KHYsMyphcmd1bWVudHNbc10pLGwuYXBwbHlNYXRyaXgzKEgpLm5vcm1hbGl6ZSgpO2gudXZzW3NdLmZyb21BcnJheSh4LDIqYXJndW1lbnRzW3NdKX1oLnZlcnRleE5vcm1hbHNMZW5ndGg9MyxoLm1hdGVyaWFsPVQubWF0ZXJpYWwsai5lbGVtZW50cy5wdXNoKGgpfX12YXIgdj1bXSx5PVtdLHg9W10sVD1udWxsLGc9bnVsbCxIPW5ldyBUSFJFRS5NYXRyaXgzO3JldHVybntzZXRPYmplY3Q6ZSxwcm9qZWN0VmVydGV4OnIsY2hlY2tUcmlhbmdsZVZpc2liaWxpdHk6cCxjaGVja0JhY2tmYWNlQ3VsbGluZzpFLHB1c2hWZXJ0ZXg6dCxwdXNoTm9ybWFsOmkscHVzaENvbG9yOnMscHVzaFV2OmwscHVzaExpbmU6ZCxwdXNoVHJpYW5nbGU6dX19LHE9bmV3IFU7dGhpcy5wcm9qZWN0U2NlbmU9ZnVuY3Rpb24ocixpLHMscCl7dT0wLHY9MCx4PTAsai5lbGVtZW50cy5sZW5ndGg9MCwhMD09PXIuYXV0b1VwZGF0ZSYmci51cGRhdGVNYXRyaXhXb3JsZCgpLG51bGw9PT1pLnBhcmVudCYmaS51cGRhdGVNYXRyaXhXb3JsZCgpLE4uY29weShpLm1hdHJpeFdvcmxkSW52ZXJzZSksay5tdWx0aXBseU1hdHJpY2VzKGkucHJvamVjdGlvbk1hdHJpeCxOKSxELnNldEZyb21NYXRyaXgoayksRT0wLGoub2JqZWN0cy5sZW5ndGg9MCxqLmxpZ2h0cy5sZW5ndGg9MCxlKHIpLCEwPT09cyYmai5vYmplY3RzLnNvcnQobCk7Zm9yKHZhciBmPWoub2JqZWN0cyx5PTAsVD1mLmxlbmd0aDt5PFQ7eSsrKXt2YXIgZz1mW3ldLm9iamVjdCxIPWcuZ2VvbWV0cnk7aWYocS5zZXRPYmplY3QoZyksUj1nLm1hdHJpeFdvcmxkLGQ9MCxnIGluc3RhbmNlb2YgVEhSRUUuTWVzaCl7aWYoSCBpbnN0YW5jZW9mIFRIUkVFLkJ1ZmZlckdlb21ldHJ5KXt2YXIgdz1ILmF0dHJpYnV0ZXMsTT1ILmdyb3VwcztpZih2b2lkIDA9PT13LnBvc2l0aW9uKWNvbnRpbnVlO2Zvcih2YXIgQz13LnBvc2l0aW9uLmFycmF5LGI9MCx6PUMubGVuZ3RoO2I8ejtiKz0zKXEucHVzaFZlcnRleChDW2JdLENbYisxXSxDW2IrMl0pO2lmKHZvaWQgMCE9PXcubm9ybWFsKWZvcih2YXIgVj13Lm5vcm1hbC5hcnJheSxiPTAsej1WLmxlbmd0aDtiPHo7Yis9MylxLnB1c2hOb3JtYWwoVltiXSxWW2IrMV0sVltiKzJdKTtpZih2b2lkIDAhPT13LnV2KWZvcih2YXIgQj13LnV2LmFycmF5LGI9MCx6PUIubGVuZ3RoO2I8ejtiKz0yKXEucHVzaFV2KEJbYl0sQltiKzFdKTtpZihudWxsIT09SC5pbmRleCl7dmFyIFA9SC5pbmRleC5hcnJheTtpZihNLmxlbmd0aD4wKWZvcih2YXIgVz0wO1c8TS5sZW5ndGg7VysrKWZvcih2YXIgVT1NW1ddLGI9VS5zdGFydCx6PVUuc3RhcnQrVS5jb3VudDtiPHo7Yis9MylxLnB1c2hUcmlhbmdsZShQW2JdLFBbYisxXSxQW2IrMl0pO2Vsc2UgZm9yKHZhciBiPTAsej1QLmxlbmd0aDtiPHo7Yis9MylxLnB1c2hUcmlhbmdsZShQW2JdLFBbYisxXSxQW2IrMl0pfWVsc2UgZm9yKHZhciBiPTAsej1DLmxlbmd0aC8zO2I8ejtiKz0zKXEucHVzaFRyaWFuZ2xlKGIsYisxLGIrMil9ZWxzZSBpZihIIGluc3RhbmNlb2YgVEhSRUUuR2VvbWV0cnkpe3ZhciBKPUgudmVydGljZXMsSz1ILmZhY2VzLFE9SC5mYWNlVmVydGV4VXZzWzBdO0YuZ2V0Tm9ybWFsTWF0cml4KFIpO2Zvcih2YXIgWD1nLm1hdGVyaWFsLFk9QXJyYXkuaXNBcnJheShYKSxaPTAsJD1KLmxlbmd0aDtaPCQ7WisrKXt2YXIgXz1KW1pdO2lmKEwuY29weShfKSwhMD09PVgubW9ycGhUYXJnZXRzKWZvcih2YXIgZWU9SC5tb3JwaFRhcmdldHMscmU9Zy5tb3JwaFRhcmdldEluZmx1ZW5jZXMsdGU9MCxpZT1lZS5sZW5ndGg7dGU8aWU7dGUrKyl7dmFyIG9lPXJlW3RlXTtpZigwIT09b2Upe3ZhciBuZT1lZVt0ZV0sYWU9bmUudmVydGljZXNbWl07TC54Kz0oYWUueC1fLngpKm9lLEwueSs9KGFlLnktXy55KSpvZSxMLnorPShhZS56LV8ueikqb2V9fXEucHVzaFZlcnRleChMLngsTC55LEwueil9Zm9yKHZhciBzZT0wLGxlPUsubGVuZ3RoO3NlPGxlO3NlKyspe3ZhciBjZT1LW3NlXTtpZih2b2lkIDAhPT0oWD0hMD09PVk/Zy5tYXRlcmlhbFtjZS5tYXRlcmlhbEluZGV4XTpnLm1hdGVyaWFsKSl7dmFyIHBlPVguc2lkZSxFZT1TW2NlLmFdLGZlPVNbY2UuYl0sZGU9U1tjZS5jXTtpZighMSE9PXEuY2hlY2tUcmlhbmdsZVZpc2liaWxpdHkoRWUsZmUsZGUpKXt2YXIgaGU9cS5jaGVja0JhY2tmYWNlQ3VsbGluZyhFZSxmZSxkZSk7aWYocGUhPT1USFJFRS5Eb3VibGVTaWRlKXtpZihwZT09PVRIUkVFLkZyb250U2lkZSYmITE9PT1oZSljb250aW51ZTtpZihwZT09PVRIUkVFLkJhY2tTaWRlJiYhMD09PWhlKWNvbnRpbnVlfWg9bigpLGguaWQ9Zy5pZCxoLnYxLmNvcHkoRWUpLGgudjIuY29weShmZSksaC52My5jb3B5KGRlKSxoLm5vcm1hbE1vZGVsLmNvcHkoY2Uubm9ybWFsKSwhMSE9PWhlfHxwZSE9PVRIUkVFLkJhY2tTaWRlJiZwZSE9PVRIUkVFLkRvdWJsZVNpZGV8fGgubm9ybWFsTW9kZWwubmVnYXRlKCksaC5ub3JtYWxNb2RlbC5hcHBseU1hdHJpeDMoRikubm9ybWFsaXplKCk7Zm9yKHZhciB1ZT1jZS52ZXJ0ZXhOb3JtYWxzLG1lPTAsdmU9TWF0aC5taW4odWUubGVuZ3RoLDMpO21lPHZlO21lKyspe3ZhciB5ZT1oLnZlcnRleE5vcm1hbHNNb2RlbFttZV07eWUuY29weSh1ZVttZV0pLCExIT09aGV8fHBlIT09VEhSRUUuQmFja1NpZGUmJnBlIT09VEhSRUUuRG91YmxlU2lkZXx8eWUubmVnYXRlKCkseWUuYXBwbHlNYXRyaXgzKEYpLm5vcm1hbGl6ZSgpfWgudmVydGV4Tm9ybWFsc0xlbmd0aD11ZS5sZW5ndGg7dmFyIHhlPVFbc2VdO2lmKHZvaWQgMCE9PXhlKWZvcih2YXIgUmU9MDtSZTwzO1JlKyspaC51dnNbUmVdLmNvcHkoeGVbUmVdKTtoLmNvbG9yPWNlLmNvbG9yLGgubWF0ZXJpYWw9WCxoLno9KEVlLnBvc2l0aW9uU2NyZWVuLnorZmUucG9zaXRpb25TY3JlZW4ueitkZS5wb3NpdGlvblNjcmVlbi56KS8zLGgucmVuZGVyT3JkZXI9Zy5yZW5kZXJPcmRlcixqLmVsZW1lbnRzLnB1c2goaCl9fX19fWVsc2UgaWYoZyBpbnN0YW5jZW9mIFRIUkVFLkxpbmUpe2lmKEEubXVsdGlwbHlNYXRyaWNlcyhrLFIpLEggaW5zdGFuY2VvZiBUSFJFRS5CdWZmZXJHZW9tZXRyeSl7dmFyIHc9SC5hdHRyaWJ1dGVzO2lmKHZvaWQgMCE9PXcucG9zaXRpb24pe2Zvcih2YXIgQz13LnBvc2l0aW9uLmFycmF5LGI9MCx6PUMubGVuZ3RoO2I8ejtiKz0zKXEucHVzaFZlcnRleChDW2JdLENbYisxXSxDW2IrMl0pO2lmKHZvaWQgMCE9PXcuY29sb3IpZm9yKHZhciBUZT13LmNvbG9yLmFycmF5LGI9MCx6PVRlLmxlbmd0aDtiPHo7Yis9MylxLnB1c2hDb2xvcihUZVtiXSxUZVtiKzFdLFRlW2IrMl0pO2lmKG51bGwhPT1ILmluZGV4KWZvcih2YXIgUD1ILmluZGV4LmFycmF5LGI9MCx6PVAubGVuZ3RoO2I8ejtiKz0yKXEucHVzaExpbmUoUFtiXSxQW2IrMV0pO2Vsc2UgZm9yKHZhciBnZT1nIGluc3RhbmNlb2YgVEhSRUUuTGluZVNlZ21lbnRzPzI6MSxiPTAsej1DLmxlbmd0aC8zLTE7Yjx6O2IrPWdlKXEucHVzaExpbmUoYixiKzEpfX1lbHNlIGlmKEggaW5zdGFuY2VvZiBUSFJFRS5HZW9tZXRyeSl7dmFyIEo9Zy5nZW9tZXRyeS52ZXJ0aWNlcztpZigwPT09Si5sZW5ndGgpY29udGludWU7RWU9bygpLEVlLnBvc2l0aW9uU2NyZWVuLmNvcHkoSlswXSkuYXBwbHlNYXRyaXg0KEEpO2Zvcih2YXIgZ2U9ZyBpbnN0YW5jZW9mIFRIUkVFLkxpbmVTZWdtZW50cz8yOjEsWj0xLCQ9Si5sZW5ndGg7WjwkO1orKylFZT1vKCksRWUucG9zaXRpb25TY3JlZW4uY29weShKW1pdKS5hcHBseU1hdHJpeDQoQSksKForMSklZ2U+MHx8KGZlPVNbZC0yXSxHLmNvcHkoRWUucG9zaXRpb25TY3JlZW4pLEkuY29weShmZS5wb3NpdGlvblNjcmVlbiksITA9PT1jKEcsSSkmJihHLm11bHRpcGx5U2NhbGFyKDEvRy53KSxJLm11bHRpcGx5U2NhbGFyKDEvSS53KSxtPWEoKSxtLmlkPWcuaWQsbS52MS5wb3NpdGlvblNjcmVlbi5jb3B5KEcpLG0udjIucG9zaXRpb25TY3JlZW4uY29weShJKSxtLno9TWF0aC5tYXgoRy56LEkueiksbS5yZW5kZXJPcmRlcj1nLnJlbmRlck9yZGVyLG0ubWF0ZXJpYWw9Zy5tYXRlcmlhbCxnLm1hdGVyaWFsLnZlcnRleENvbG9ycz09PVRIUkVFLlZlcnRleENvbG9ycyYmKG0udmVydGV4Q29sb3JzWzBdLmNvcHkoZy5nZW9tZXRyeS5jb2xvcnNbWl0pLG0udmVydGV4Q29sb3JzWzFdLmNvcHkoZy5nZW9tZXRyeS5jb2xvcnNbWi0xXSkpLGouZWxlbWVudHMucHVzaChtKSkpfX1lbHNlIGlmKGcgaW5zdGFuY2VvZiBUSFJFRS5Qb2ludHMpe2lmKEEubXVsdGlwbHlNYXRyaWNlcyhrLFIpLEggaW5zdGFuY2VvZiBUSFJFRS5HZW9tZXRyeSlmb3IodmFyIEo9Zy5nZW9tZXRyeS52ZXJ0aWNlcyxaPTAsJD1KLmxlbmd0aDtaPCQ7WisrKXt2YXIgXz1KW1pdO08uc2V0KF8ueCxfLnksXy56LDEpLE8uYXBwbHlNYXRyaXg0KEEpLHQoTyxnLGkpfWVsc2UgaWYoSCBpbnN0YW5jZW9mIFRIUkVFLkJ1ZmZlckdlb21ldHJ5KXt2YXIgdz1ILmF0dHJpYnV0ZXM7aWYodm9pZCAwIT09dy5wb3NpdGlvbilmb3IodmFyIEM9dy5wb3NpdGlvbi5hcnJheSxiPTAsej1DLmxlbmd0aDtiPHo7Yis9MylPLnNldChDW2JdLENbYisxXSxDW2IrMl0sMSksTy5hcHBseU1hdHJpeDQoQSksdChPLGcsaSl9fWVsc2UgZyBpbnN0YW5jZW9mIFRIUkVFLlNwcml0ZSYmKE8uc2V0KFIuZWxlbWVudHNbMTJdLFIuZWxlbWVudHNbMTNdLFIuZWxlbWVudHNbMTRdLDEpLE8uYXBwbHlNYXRyaXg0KGspLHQoTyxnLGkpKX1yZXR1cm4hMD09PXAmJmouZWxlbWVudHMuc29ydChsKSxqfX07Il19 1 + "use strict";var bgColor=16777215;THREE.SpriteCanvasMaterial=function(e){THREE.Material.call(this),this.type="SpriteCanvasMaterial",this.color=new THREE.Color(16777215),this.program=function(){},this.setValues(e)},THREE.SpriteCanvasMaterial.prototype=Object.create(THREE.Material.prototype),THREE.SpriteCanvasMaterial.prototype.constructor=THREE.SpriteCanvasMaterial,THREE.SpriteCanvasMaterial.prototype.isSpriteCanvasMaterial=!0,THREE.SpriteCanvasMaterial.prototype.clone=function(){var e=new THREE.SpriteCanvasMaterial;return e.copy(this),e.color.copy(this.color),e.program=this.program,e},THREE.CanvasRenderer=function(e){function s(e,r,t){v(t.opacity),y(t.blending);var i=r.scale.x*J,o=r.scale.y*K,n=Math.sqrt(i*i+o*o);if(de.min.set(e.x-n,e.y-n),de.max.set(e.x+n,e.y+n),t.isSpriteMaterial){var a=t.map;if(null!==a){var s=ce[a.id];if(void 0!==s&&s.version===a.version||(s=M(a),ce[a.id]=s),void 0!==s.canvas){C(s.canvas);var l=a.image,c=l.width*a.offset.x,p=l.height*a.offset.y,E=l.width*a.repeat.x,d=l.height*a.repeat.y,f=i/E,h=o/d;$.save(),$.translate(e.x,e.y),0!==t.rotation&&$.rotate(t.rotation),$.translate(-i/2,-o/2),$.scale(f,h),$.translate(-c,-p),$.fillRect(c,p,E,d),$.restore()}}else C(t.color.getStyle()),$.save(),$.translate(e.x,e.y),0!==t.rotation&&$.rotate(t.rotation),$.scale(i,-o),$.fillRect(-.5,-.5,1,1),$.restore()}else t.isSpriteCanvasMaterial?(x(t.color.getStyle()),C(t.color.getStyle()),$.save(),$.translate(e.x,e.y),0!==t.rotation&&$.rotate(t.rotation),$.scale(i,o),t.program($),$.restore()):t.isPointsMaterial&&(C(t.color.getStyle()),$.save(),$.translate(e.x,e.y),0!==t.rotation&&$.rotate(t.rotation),$.scale(i*t.size,-o*t.size),$.fillRect(-.5,-.5,1,1),$.restore())}function l(e,r,t,i){if(v(i.opacity),y(i.blending),$.beginPath(),$.moveTo(e.positionScreen.x,e.positionScreen.y),$.lineTo(r.positionScreen.x,r.positionScreen.y),i.isLineBasicMaterial){if(E(i.linewidth),d(i.linecap),f(i.linejoin),i.vertexColors!==THREE.VertexColors)x(i.color.getStyle());else{var o=t.vertexColors[0].getStyle(),n=t.vertexColors[1].getStyle();if(o===n)x(o);else{try{var a=$.createLinearGradient(e.positionScreen.x,e.positionScreen.y,r.positionScreen.x,r.positionScreen.y);a.addColorStop(0,o),a.addColorStop(1,n)}catch(e){a=o}x(a)}}i.isLineDashedMaterial&&R([i.dashSize,i.gapSize]),$.stroke(),de.expandByScalar(2*i.linewidth),i.isLineDashedMaterial&&R([])}}function c(e,r,t,i,o,n,a,s){if(G.info.render.vertices+=3,G.info.render.faces++,v(s.opacity),y(s.blending),z=e.positionScreen.x,V=e.positionScreen.y,j=r.positionScreen.x,L=r.positionScreen.y,O=t.positionScreen.x,B=t.positionScreen.y,l=z,c=V,p=j,E=L,d=O,f=B,$.beginPath(),$.moveTo(l,c),$.lineTo(p,E),$.lineTo(d,f),$.closePath(),(s.isMeshLambertMaterial||s.isMeshPhongMaterial||s.isMeshStandardMaterial)&&null===s.map)ae.copy(s.color),se.copy(s.emissive),s.vertexColors===THREE.FaceColors&&ae.multiply(a.color),ne.copy(fe),ve.copy(e.positionWorld).add(r.positionWorld).add(t.positionWorld).divideScalar(3),function(e,r,t){for(var i=0,o=S.length;i<o;i++){var n=S[i];if(le.copy(n.color),n.isDirectionalLight){var a=me.setFromMatrixPosition(n.matrixWorld).normalize();if((s=r.dot(a))<=0)continue;s*=n.intensity,t.add(le.multiplyScalar(s))}else if(n.isPointLight){var s;if(a=me.setFromMatrixPosition(n.matrixWorld),(s=r.dot(me.subVectors(a,e).normalize()))<=0)continue;if(0==(s*=0==n.distance?1:1-Math.min(e.distanceTo(a)/n.distance,1)))continue;s*=n.intensity,t.add(le.multiplyScalar(s))}}}(ve,a.normalModel,ne),ne.multiply(ae).add(se),!0===s.wireframe?h(ne,s.wireframeLinewidth,s.wireframeLinecap,s.wireframeLinejoin):u(ne);else if(s.isMeshBasicMaterial||s.isMeshLambertMaterial||s.isMeshPhongMaterial||s.isMeshStandardMaterial){if(null!==s.map)s.map.mapping===THREE.UVMapping&&(P=a.uvs,m(z,V,j,L,O,B,P[i].x,P[i].y,P[o].x,P[o].y,P[n].x,P[n].y,s.map));else null!==s.envMap?s.envMap.mapping===THREE.SphericalReflectionMapping&&(ye.copy(a.vertexNormalsModel[i]).applyMatrix3(xe),W=.5*ye.x+.5,N=.5*ye.y+.5,ye.copy(a.vertexNormalsModel[o]).applyMatrix3(xe),k=.5*ye.x+.5,A=.5*ye.y+.5,ye.copy(a.vertexNormalsModel[n]).applyMatrix3(xe),F=.5*ye.x+.5,D=.5*ye.y+.5,m(z,V,j,L,O,B,W,N,k,A,F,D,s.envMap)):(ne.copy(s.color),s.vertexColors===THREE.FaceColors&&ne.multiply(a.color),!0===s.wireframe?h(ne,s.wireframeLinewidth,s.wireframeLinecap,s.wireframeLinejoin):u(ne))}else s.isMeshNormalMaterial?(ye.copy(a.normalModel).applyMatrix3(xe),ne.setRGB(ye.x,ye.y,ye.z).multiplyScalar(.5).addScalar(.5)):ne.setRGB(1,1,1),!0===s.wireframe?h(ne,s.wireframeLinewidth,s.wireframeLinecap,s.wireframeLinejoin):u(ne);var l,c,p,E,d,f}function h(e,r,t,i){E(r),d(t),f(i),x(e.getStyle()),$.stroke(),de.expandByScalar(2*r)}function u(e){C(e.getStyle()),$.fill()}function M(e){if(0===e.version||e instanceof THREE.CompressedTexture||e instanceof THREE.DataTexture)return{canvas:void 0,version:e.version};var r=e.image;if(!1===r.complete)return{canvas:void 0,version:0};var t=e.wrapS===THREE.RepeatWrapping||e.wrapS===THREE.MirroredRepeatWrapping,i=e.wrapT===THREE.RepeatWrapping||e.wrapT===THREE.MirroredRepeatWrapping,o=e.wrapS===THREE.MirroredRepeatWrapping,n=e.wrapT===THREE.MirroredRepeatWrapping,a=document.createElement("canvas");a.width=r.width*(o?2:1),a.height=r.height*(n?2:1);var s=a.getContext("2d");s.setTransform(1,0,0,-1,0,r.height),s.drawImage(r,0,0),!0===o&&(s.setTransform(-1,0,0,-1,r.width,r.height),s.drawImage(r,-r.width,0)),!0===n&&(s.setTransform(1,0,0,1,0,0),s.drawImage(r,0,r.height)),!0===o&&!0===n&&(s.setTransform(-1,0,0,1,r.width,0),s.drawImage(r,-r.width,r.height));var l="no-repeat";!0===t&&!0===i?l="repeat":!0===t?l="repeat-x":!0===i&&(l="repeat-y");var c=$.createPattern(a,l);return e.onUpdate&&e.onUpdate(e),{canvas:c,version:e.version}}function m(e,r,t,i,o,n,a,s,l,c,p,E,d){var f=ce[d.id];if(void 0!==f&&f.version===d.version||(f=M(d),ce[d.id]=f),void 0===f.canvas)return C("rgba( 0, 0, 0, 1)"),void $.fill();C(f.canvas);var h,u,m,v,y,x,R,T,g=d.offset.x/d.repeat.x,S=d.offset.y/d.repeat.y,H=d.image.width*d.repeat.x,w=d.image.height*d.repeat.y;l=(l+g)*H,c=(c+S)*w,p=(p+g)*H,E=(E+S)*w,t-=e,i-=r,o-=e,n-=r,0!=(R=(l-=a=(a+g)*H)*(E-=s=(s+S)*w)-(p-=a)*(c-=s))&&(y=e-(h=(E*t-c*o)*(T=1/R))*a-(m=(l*o-p*t)*T)*s,x=r-(u=(E*i-c*n)*T)*a-(v=(l*n-p*i)*T)*s,$.save(),$.transform(h,u,m,v,y,x),$.fill(),$.restore())}function p(e,r,t){var i,o=r.x-e.x,n=r.y-e.y,a=o*o+n*n;0!==a&&(o*=i=t/Math.sqrt(a),n*=i,r.x+=o,r.y+=n,e.x-=o,e.y-=n)}function v(e){a!==e&&($.globalAlpha=e,a=e)}function y(e){_!==e&&(e===THREE.NormalBlending?$.globalCompositeOperation="source-over":e===THREE.AdditiveBlending?$.globalCompositeOperation="lighter":e===THREE.SubtractiveBlending?$.globalCompositeOperation="darker":e===THREE.MultiplyBlending&&($.globalCompositeOperation="multiply"),_=e)}function E(e){te!==e&&($.lineWidth=e,te=e)}function d(e){ie!==e&&($.lineCap=e,ie=e)}function f(e){oe!==e&&($.lineJoin=e,oe=e)}function x(e){ee!==e&&($.strokeStyle=e,ee=e)}function C(e){re!==e&&($.fillStyle=e,re=e)}function R(e){r.length!==e.length&&($.setLineDash(e),r=e)}console.log("THREE.CanvasRenderer",THREE.REVISION),e=e||{};var T,g,S,H,w,b,z,V,j,L,O,B,P,W,N,k,A,F,D,G=this,I=new THREE.Projector,i=void 0!==e.canvas?e.canvas:document.createElement("canvas"),U=i.width,q=i.height,J=Math.floor(U/2),K=Math.floor(q/2),Q=0,X=0,Y=U,Z=q,o=1,$=i.getContext("2d",{alpha:!0===e.alpha}),t=new THREE.Color(bgColor),n=!0===e.alpha?0:1,a=1,_=0,ee=null,re=null,te=null,ie=null,oe=null,r=[],ne=new THREE.Color,ae=new THREE.Color,se=new THREE.Color,le=new THREE.Color,ce={},pe=new THREE.Box2,Ee=new THREE.Box2,de=new THREE.Box2,fe=new THREE.Color,he=new THREE.Color,ue=new THREE.Color,me=new THREE.Vector3,ve=new THREE.Vector3,ye=new THREE.Vector3,xe=new THREE.Matrix3;void 0===$.setLineDash&&($.setLineDash=function(){}),this.domElement=i,this.autoClear=!0,this.sortObjects=!0,this.sortElements=!0,this.info={render:{vertices:0,faces:0}},this.getContext=function(){return $},this.getContextAttributes=function(){return $.getContextAttributes()},this.getPixelRatio=function(){return o},this.setPixelRatio=function(e){void 0!==e&&(o=e)},this.setSize=function(e,r,t){U=e*o,q=r*o,i.width=U,i.height=q,J=Math.floor(U/2),K=Math.floor(q/2),!1!==t&&(i.style.width=e+"px",i.style.height=r+"px"),pe.min.set(-J,-K),pe.max.set(J,K),Ee.min.set(-J,-K),Ee.max.set(J,K),a=1,_=0,oe=ie=te=re=ee=null,this.setViewport(0,0,e,r)},this.setViewport=function(e,r,t,i){Q=e*o,X=r*o,Y=t*o,Z=i*o},this.setScissor=function(){},this.setScissorTest=function(){},this.setClearColor=function(e,r){t.set(e),n=void 0!==r?r:1,Ee.min.set(-J,-K),Ee.max.set(J,K)},this.setClearColorHex=function(e,r){console.warn("THREE.CanvasRenderer: .setClearColorHex() is being removed. Use .setClearColor() instead."),this.setClearColor(e,r)},this.getClearColor=function(){return t},this.getClearAlpha=function(){return n},this.getMaxAnisotropy=function(){return 0},this.clear=function(){!1===Ee.isEmpty()&&(Ee.intersect(pe),Ee.expandByScalar(2),Ee.min.x=Ee.min.x+J,Ee.min.y=-Ee.min.y+K,Ee.max.x=Ee.max.x+J,Ee.max.y=-Ee.max.y+K,n<1&&$.clearRect(0|Ee.min.x,0|Ee.max.y,Ee.max.x-Ee.min.x|0,Ee.min.y-Ee.max.y|0),0<n&&(v(1),y(THREE.NormalBlending),C("rgba("+Math.floor(255*t.r)+","+Math.floor(255*t.g)+","+Math.floor(255*t.b)+","+n+")"),$.fillRect(0|Ee.min.x,0|Ee.max.y,Ee.max.x-Ee.min.x|0,Ee.min.y-Ee.max.y|0)),Ee.makeEmpty())},this.clearColor=function(){},this.clearDepth=function(){},this.clearStencil=function(){},this.render=function(e,r){if(void 0!==r.isCamera){var t=e.background;t&&t.isColor?(v(1),y(THREE.NormalBlending),C(t.getStyle()),$.fillRect(0,0,U,q)):!0===this.autoClear&&this.clear(),G.info.render.vertices=0,G.info.render.faces=0,$.setTransform(Y/U,0,0,-Z/q,Q,q-X),$.translate(J,K),T=I.projectScene(e,r,this.sortObjects,this.sortElements),g=T.elements,S=T.lights,xe.getNormalMatrix(r.matrixWorldInverse),function(){fe.setRGB(0,0,0),he.setRGB(0,0,0),ue.setRGB(0,0,0);for(var e=0,r=S.length;e<r;e++){var t=S[e],i=t.color;t.isAmbientLight?fe.add(i):t.isDirectionalLight?he.add(i):t.isPointLight&&ue.add(i)}}();for(var i=0,o=g.length;i<o;i++){var n=g[i],a=n.material;if(void 0!==a&&0!==a.opacity){if(de.makeEmpty(),n instanceof THREE.RenderableSprite)(H=n).x*=J,H.y*=K,s(H,n,a);else if(n instanceof THREE.RenderableLine)H=n.v1,w=n.v2,H.positionScreen.x*=J,H.positionScreen.y*=K,w.positionScreen.x*=J,w.positionScreen.y*=K,de.setFromPoints([H.positionScreen,w.positionScreen]),!0===pe.intersectsBox(de)&&l(H,w,n,a);else if(n instanceof THREE.RenderableFace){if(H=n.v1,w=n.v2,b=n.v3,H.positionScreen.z<-1||1<H.positionScreen.z)continue;if(w.positionScreen.z<-1||1<w.positionScreen.z)continue;if(b.positionScreen.z<-1||1<b.positionScreen.z)continue;H.positionScreen.x*=J,H.positionScreen.y*=K,w.positionScreen.x*=J,w.positionScreen.y*=K,b.positionScreen.x*=J,b.positionScreen.y*=K,0<a.overdraw&&(p(H.positionScreen,w.positionScreen,a.overdraw),p(w.positionScreen,b.positionScreen,a.overdraw),p(b.positionScreen,H.positionScreen,a.overdraw)),de.setFromPoints([H.positionScreen,w.positionScreen,b.positionScreen]),!0===pe.intersectsBox(de)&&c(H,w,b,0,1,2,n,a)}Ee.union(de)}}$.setTransform(1,0,0,1,0,0)}else console.error("THREE.CanvasRenderer.render: camera is not an instance of THREE.Camera.")}},THREE.RenderableObject=function(){this.id=0,this.object=null,this.z=0,this.renderOrder=0},THREE.RenderableFace=function(){this.id=0,this.v1=new THREE.RenderableVertex,this.v2=new THREE.RenderableVertex,this.v3=new THREE.RenderableVertex,this.normalModel=new THREE.Vector3,this.vertexNormalsModel=[new THREE.Vector3,new THREE.Vector3,new THREE.Vector3],this.vertexNormalsLength=0,this.color=new THREE.Color,this.material=null,this.uvs=[new THREE.Vector2,new THREE.Vector2,new THREE.Vector2],this.z=0,this.renderOrder=0},THREE.RenderableVertex=function(){this.position=new THREE.Vector3,this.positionWorld=new THREE.Vector3,this.positionScreen=new THREE.Vector4,this.visible=!0},THREE.RenderableVertex.prototype.copy=function(e){this.positionWorld.copy(e.positionWorld),this.positionScreen.copy(e.positionScreen)},THREE.RenderableLine=function(){this.id=0,this.v1=new THREE.RenderableVertex,this.v2=new THREE.RenderableVertex,this.vertexColors=[new THREE.Color,new THREE.Color],this.material=null,this.z=0,this.renderOrder=0},THREE.RenderableSprite=function(){this.id=0,this.object=null,this.x=0,this.y=0,this.z=0,this.rotation=0,this.scale=new THREE.Vector2,this.material=null,this.renderOrder=0},THREE.Projector=function(){function X(e){(r=function(){if(te!==i)return t[te++];var e=new THREE.RenderableObject;return t.push(e),i++,te++,e}()).id=e.id,r.object=e,de.setFromMatrixPosition(e.matrixWorld),de.applyMatrix4(ue),r.z=de.z,r.renderOrder=e.renderOrder,Ee.objects.push(r)}function Y(e,r,t){var i=1/e.w;e.z*=i,-1<=e.z&&e.z<=1&&((o=function(){if(le!==d)return E[le++];var e=new THREE.RenderableSprite;return E.push(e),d++,le++,e}()).id=r.id,o.x=e.x*i,o.y=e.y*i,o.z=e.z,o.renderOrder=r.renderOrder,o.object=r,o.rotation=r.rotation,o.scale.x=r.scale.x*Math.abs(o.x-(e.x+t.projectionMatrix.elements[0])/(e.w+t.projectionMatrix.elements[12])),o.scale.y=r.scale.y*Math.abs(o.y-(e.y+t.projectionMatrix.elements[5])/(e.w+t.projectionMatrix.elements[13])),o.material=r.material,Ee.elements.push(o))}function Z(){if(ie!==a)return pe[ie++];var e=new THREE.RenderableVertex;return pe.push(e),a++,ie++,e}function $(){if(ne!==l)return s[ne++];var e=new THREE.RenderableFace;return s.push(e),l++,ne++,e}function _(){if(se!==p)return c[se++];var e=new THREE.RenderableLine;return c.push(e),p++,se++,e}function ee(e,r){return e.renderOrder!==r.renderOrder?e.renderOrder-r.renderOrder:e.z!==r.z?r.z-e.z:e.id!==r.id?e.id-r.id:0}function re(e,r){var t=0,i=1,o=e.z+e.w,n=r.z+r.w,a=-e.z+e.w,s=-r.z+r.w;return 0<=o&&0<=n&&0<=a&&0<=s||!(o<0&&n<0||a<0&&s<0)&&(o<0?t=Math.max(t,o/(o-n)):n<0&&(i=Math.min(i,o/(o-n))),a<0?t=Math.max(t,a/(a-s)):s<0&&(i=Math.min(i,a/(a-s))),!(i<t||(e.lerp(r,t),r.lerp(e,1-i),0)))}var r,te,n,ie,oe,ne,ae,se,o,le,ce,t=[],i=0,pe=[],a=0,s=[],l=0,c=[],p=0,E=[],d=0,Ee={objects:[],lights:[],elements:[]},de=new THREE.Vector3,fe=new THREE.Vector4,u=new THREE.Box3(new THREE.Vector3(-1,-1,-1),new THREE.Vector3(1,1,1)),m=new THREE.Box3,v=new Array(3),he=new THREE.Matrix4,ue=new THREE.Matrix4,me=new THREE.Matrix4,ve=new THREE.Matrix3,ye=new THREE.Frustum,xe=new THREE.Vector4,Re=new THREE.Vector4;this.projectVector=function(e,r){console.warn("THREE.Projector: .projectVector() is now vector.project()."),e.project(r)},this.unprojectVector=function(e,r){console.warn("THREE.Projector: .unprojectVector() is now vector.unproject()."),e.unproject(r)},this.pickingRay=function(){console.error("THREE.Projector: .pickingRay() is now raycaster.setFromCamera().")};var Te=new function(){function i(e){var r=e.position,t=e.positionWorld,i=e.positionScreen;t.copy(r).applyMatrix4(ce),i.copy(t).applyMatrix4(ue);var o=1/i.w;i.x*=o,i.y*=o,i.z*=o,e.visible=-1<=i.x&&i.x<=1&&-1<=i.y&&i.y<=1&&-1<=i.z&&i.z<=1}function l(e,r,t){return!0===e.visible||!0===r.visible||!0===t.visible||(v[0]=e.positionScreen,v[1]=r.positionScreen,v[2]=t.positionScreen,u.intersectsBox(m.setFromPoints(v)))}function c(e,r,t){return(t.positionScreen.x-e.positionScreen.x)*(r.positionScreen.y-e.positionScreen.y)-(t.positionScreen.y-e.positionScreen.y)*(r.positionScreen.x-e.positionScreen.x)<0}var p=[],o=[],E=[],d=null,f=null,h=new THREE.Matrix3;return{setObject:function(e){f=(d=e).material,h.getNormalMatrix(d.matrixWorld),p.length=0,o.length=0,E.length=0},projectVertex:i,checkTriangleVisibility:l,checkBackfaceCulling:c,pushVertex:function(e,r,t){(n=Z()).position.set(e,r,t),i(n)},pushNormal:function(e,r,t){p.push(e,r,t)},pushColor:function(e,r,t){o.push(e,r,t)},pushUv:function(e,r){E.push(e,r)},pushLine:function(e,r){var t=pe[e],i=pe[r];t.positionScreen.copy(t.position).applyMatrix4(me),i.positionScreen.copy(i.position).applyMatrix4(me),!0===re(t.positionScreen,i.positionScreen)&&(t.positionScreen.multiplyScalar(1/t.positionScreen.w),i.positionScreen.multiplyScalar(1/i.positionScreen.w),(ae=_()).id=d.id,ae.v1.copy(t),ae.v2.copy(i),ae.z=Math.max(t.positionScreen.z,i.positionScreen.z),ae.renderOrder=d.renderOrder,ae.material=d.material,d.material.vertexColors===THREE.VertexColors&&(ae.vertexColors[0].fromArray(o,3*e),ae.vertexColors[1].fromArray(o,3*r)),Ee.elements.push(ae))},pushTriangle:function(e,r,t){var i=pe[e],o=pe[r],n=pe[t];if(!1!==l(i,o,n)&&(f.side===THREE.DoubleSide||!0===c(i,o,n))){(oe=$()).id=d.id,oe.v1.copy(i),oe.v2.copy(o),oe.v3.copy(n),oe.z=(i.positionScreen.z+o.positionScreen.z+n.positionScreen.z)/3,oe.renderOrder=d.renderOrder,oe.normalModel.fromArray(p,3*e),oe.normalModel.applyMatrix3(h).normalize();for(var a=0;a<3;a++){var s=oe.vertexNormalsModel[a];s.fromArray(p,3*arguments[a]),s.applyMatrix3(h).normalize(),oe.uvs[a].fromArray(E,2*arguments[a])}oe.vertexNormalsLength=3,oe.material=d.material,Ee.elements.push(oe)}}}};this.projectScene=function(e,r,t,i){le=se=ne=0,!(Ee.elements.length=0)===e.autoUpdate&&e.updateMatrixWorld(),null===r.parent&&r.updateMatrixWorld(),he.copy(r.matrixWorldInverse),ue.multiplyMatrices(r.projectionMatrix,he),ye.setFromMatrix(ue),te=0,Ee.objects.length=0,Ee.lights.length=0,function e(r){if(!1!==r.visible){if(r instanceof THREE.Light)Ee.lights.push(r);else if(r instanceof THREE.Mesh||r instanceof THREE.Line||r instanceof THREE.Points){if(!1===r.material.visible)return;if(!0===r.frustumCulled&&!1===ye.intersectsObject(r))return;X(r)}else if(r instanceof THREE.Sprite){if(!1===r.material.visible)return;if(!0===r.frustumCulled&&!1===ye.intersectsSprite(r))return;X(r)}for(var t=r.children,i=0,o=t.length;i<o;i++)e(t[i])}}(e),!0===t&&Ee.objects.sort(ee);for(var o=Ee.objects,n=0,a=o.length;n<a;n++){var s=o[n].object,l=s.geometry;if(Te.setObject(s),ce=s.matrixWorld,ie=0,s instanceof THREE.Mesh){if(l instanceof THREE.BufferGeometry){var c=l.attributes,p=l.groups;if(void 0===c.position)continue;for(var E=0,d=(Q=c.position.array).length;E<d;E+=3)Te.pushVertex(Q[E],Q[E+1],Q[E+2]);if(void 0!==c.normal){var f=c.normal.array;for(E=0,d=f.length;E<d;E+=3)Te.pushNormal(f[E],f[E+1],f[E+2])}if(void 0!==c.uv){var h=c.uv.array;for(E=0,d=h.length;E<d;E+=2)Te.pushUv(h[E],h[E+1])}if(null!==l.index){var u=l.index.array;if(0<p.length)for(var m=0;m<p.length;m++){var v=p[m];for(E=v.start,d=v.start+v.count;E<d;E+=3)Te.pushTriangle(u[E],u[E+1],u[E+2])}else for(E=0,d=u.length;E<d;E+=3)Te.pushTriangle(u[E],u[E+1],u[E+2])}else for(E=0,d=Q.length/3;E<d;E+=3)Te.pushTriangle(E,E+1,E+2)}else if(l instanceof THREE.Geometry){var y=l.vertices,x=l.faces,R=l.faceVertexUvs[0];ve.getNormalMatrix(ce);for(var T=s.material,g=Array.isArray(T),S=0,H=y.length;S<H;S++){var w=y[S];if(de.copy(w),!0===T.morphTargets)for(var M=l.morphTargets,C=s.morphTargetInfluences,b=0,z=M.length;b<z;b++){var V=C[b];if(0!==V){var j=M[b].vertices[S];de.x+=(j.x-w.x)*V,de.y+=(j.y-w.y)*V,de.z+=(j.z-w.z)*V}}Te.pushVertex(de.x,de.y,de.z)}for(var L=0,O=x.length;L<O;L++){var B=x[L];if(void 0!==(T=!0===g?s.material[B.materialIndex]:s.material)){var P=T.side,W=pe[B.a],N=pe[B.b],k=pe[B.c];if(!1!==Te.checkTriangleVisibility(W,N,k)){var A=Te.checkBackfaceCulling(W,N,k);if(P!==THREE.DoubleSide){if(P===THREE.FrontSide&&!1===A)continue;if(P===THREE.BackSide&&!0===A)continue}(oe=$()).id=s.id,oe.v1.copy(W),oe.v2.copy(N),oe.v3.copy(k),oe.normalModel.copy(B.normal),!1!==A||P!==THREE.BackSide&&P!==THREE.DoubleSide||oe.normalModel.negate(),oe.normalModel.applyMatrix3(ve).normalize();for(var F=B.vertexNormals,D=0,G=Math.min(F.length,3);D<G;D++){var I=oe.vertexNormalsModel[D];I.copy(F[D]),!1!==A||P!==THREE.BackSide&&P!==THREE.DoubleSide||I.negate(),I.applyMatrix3(ve).normalize()}oe.vertexNormalsLength=F.length;var U=R[L];if(void 0!==U)for(var q=0;q<3;q++)oe.uvs[q].copy(U[q]);oe.color=B.color,oe.material=T,oe.z=(W.positionScreen.z+N.positionScreen.z+k.positionScreen.z)/3,oe.renderOrder=s.renderOrder,Ee.elements.push(oe)}}}}}else if(s instanceof THREE.Line){if(me.multiplyMatrices(ue,ce),l instanceof THREE.BufferGeometry){if(void 0!==(c=l.attributes).position){for(E=0,d=(Q=c.position.array).length;E<d;E+=3)Te.pushVertex(Q[E],Q[E+1],Q[E+2]);if(void 0!==c.color){var J=c.color.array;for(E=0,d=J.length;E<d;E+=3)Te.pushColor(J[E],J[E+1],J[E+2])}if(null!==l.index)for(E=0,d=(u=l.index.array).length;E<d;E+=2)Te.pushLine(u[E],u[E+1]);else{var K=s instanceof THREE.LineSegments?2:1;for(E=0,d=Q.length/3-1;E<d;E+=K)Te.pushLine(E,E+1)}}}else if(l instanceof THREE.Geometry){if(0===(y=s.geometry.vertices).length)continue;(W=Z()).positionScreen.copy(y[0]).applyMatrix4(me);for(K=s instanceof THREE.LineSegments?2:1,S=1,H=y.length;S<H;S++)(W=Z()).positionScreen.copy(y[S]).applyMatrix4(me),0<(S+1)%K||(N=pe[ie-2],xe.copy(W.positionScreen),Re.copy(N.positionScreen),!0===re(xe,Re)&&(xe.multiplyScalar(1/xe.w),Re.multiplyScalar(1/Re.w),(ae=_()).id=s.id,ae.v1.positionScreen.copy(xe),ae.v2.positionScreen.copy(Re),ae.z=Math.max(xe.z,Re.z),ae.renderOrder=s.renderOrder,ae.material=s.material,s.material.vertexColors===THREE.VertexColors&&(ae.vertexColors[0].copy(s.geometry.colors[S]),ae.vertexColors[1].copy(s.geometry.colors[S-1])),Ee.elements.push(ae)))}}else if(s instanceof THREE.Points){if(me.multiplyMatrices(ue,ce),l instanceof THREE.Geometry)for(S=0,H=(y=s.geometry.vertices).length;S<H;S++){w=y[S];fe.set(w.x,w.y,w.z,1),fe.applyMatrix4(me),Y(fe,s,r)}else if(l instanceof THREE.BufferGeometry){if(void 0!==(c=l.attributes).position){var Q;for(E=0,d=(Q=c.position.array).length;E<d;E+=3)fe.set(Q[E],Q[E+1],Q[E+2],1),fe.applyMatrix4(me),Y(fe,s,r)}}}else s instanceof THREE.Sprite&&(fe.set(ce.elements[12],ce.elements[13],ce.elements[14],1),fe.applyMatrix4(ue),Y(fe,s,r))}return!0===i&&Ee.elements.sort(ee),Ee}}; 2 + //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpzL2NhbnZhcy1yZW5kZXJlci1hbmQtcHJvamVjdG9yLm1pbi5qcyJdLCJuYW1lcyI6WyJiZ0NvbG9yIiwiVEhSRUUiLCJTcHJpdGVDYW52YXNNYXRlcmlhbCIsImUiLCJNYXRlcmlhbCIsImNhbGwiLCJ0aGlzIiwidHlwZSIsImNvbG9yIiwiQ29sb3IiLCJwcm9ncmFtIiwic2V0VmFsdWVzIiwicHJvdG90eXBlIiwiT2JqZWN0IiwiY3JlYXRlIiwiY29uc3RydWN0b3IiLCJpc1Nwcml0ZUNhbnZhc01hdGVyaWFsIiwiY2xvbmUiLCJjb3B5IiwiQ2FudmFzUmVuZGVyZXIiLCJpIiwiciIsInQiLCJmIiwib3BhY2l0eSIsImQiLCJibGVuZGluZyIsInNjYWxlIiwieCIsIlUiLCJvIiwieSIsInEiLCJuIiwiTWF0aCIsInNxcnQiLCJ1ZSIsIm1pbiIsInNldCIsIm1heCIsImlzU3ByaXRlTWF0ZXJpYWwiLCJhIiwibWFwIiwicyIsImZlIiwiaWQiLCJ2ZXJzaW9uIiwiYyIsImNhbnZhcyIsImwiLCJpbWFnZSIsInAiLCJ3aWR0aCIsIm9mZnNldCIsIkUiLCJoZWlnaHQiLCJoIiwicmVwZWF0IiwidSIsIm0iLCJaIiwic2F2ZSIsInRyYW5zbGF0ZSIsInJvdGF0aW9uIiwicm90YXRlIiwiZmlsbFJlY3QiLCJyZXN0b3JlIiwiZ2V0U3R5bGUiLCJ2IiwiaXNQb2ludHNNYXRlcmlhbCIsInNpemUiLCJiZWdpblBhdGgiLCJtb3ZlVG8iLCJwb3NpdGlvblNjcmVlbiIsImxpbmVUbyIsImlzTGluZUJhc2ljTWF0ZXJpYWwiLCJsaW5ld2lkdGgiLCJsaW5lY2FwIiwibGluZWpvaW4iLCJ2ZXJ0ZXhDb2xvcnMiLCJWZXJ0ZXhDb2xvcnMiLCJjcmVhdGVMaW5lYXJHcmFkaWVudCIsImFkZENvbG9yU3RvcCIsImlzTGluZURhc2hlZE1hdGVyaWFsIiwiZGFzaFNpemUiLCJnYXBTaXplIiwic3Ryb2tlIiwiZXhwYW5kQnlTY2FsYXIiLCJBIiwiaW5mbyIsInJlbmRlciIsInZlcnRpY2VzIiwiZmFjZXMiLCJNIiwiQyIsImIiLCJ6IiwiViIsImoiLCJjbG9zZVBhdGgiLCJpc01lc2hMYW1iZXJ0TWF0ZXJpYWwiLCJpc01lc2hQaG9uZ01hdGVyaWFsIiwiaXNNZXNoU3RhbmRhcmRNYXRlcmlhbCIsImNlIiwicGUiLCJlbWlzc2l2ZSIsIkZhY2VDb2xvcnMiLCJtdWx0aXBseSIsImxlIiwibWUiLCJSZSIsInBvc2l0aW9uV29ybGQiLCJhZGQiLCJkaXZpZGVTY2FsYXIiLCJnIiwibGVuZ3RoIiwiRWUiLCJpc0RpcmVjdGlvbmFsTGlnaHQiLCJ4ZSIsInNldEZyb21NYXRyaXhQb3NpdGlvbiIsIm1hdHJpeFdvcmxkIiwibm9ybWFsaXplIiwiZG90IiwiaW50ZW5zaXR5IiwibXVsdGlwbHlTY2FsYXIiLCJpc1BvaW50TGlnaHQiLCJzdWJWZWN0b3JzIiwiZGlzdGFuY2UiLCJkaXN0YW5jZVRvIiwibm9ybWFsTW9kZWwiLCJ3aXJlZnJhbWUiLCJ3aXJlZnJhbWVMaW5ld2lkdGgiLCJ3aXJlZnJhbWVMaW5lY2FwIiwid2lyZWZyYW1lTGluZWpvaW4iLCJpc01lc2hCYXNpY01hdGVyaWFsIiwibWFwcGluZyIsIlVWTWFwcGluZyIsIkwiLCJ1dnMiLCJlbnZNYXAiLCJTcGhlcmljYWxSZWZsZWN0aW9uTWFwcGluZyIsIlRlIiwidmVydGV4Tm9ybWFsc01vZGVsIiwiYXBwbHlNYXRyaXgzIiwiZ2UiLCJPIiwiQiIsIlAiLCJXIiwiTiIsImsiLCJpc01lc2hOb3JtYWxNYXRlcmlhbCIsInNldFJHQiIsImFkZFNjYWxhciIsImZpbGwiLCJDb21wcmVzc2VkVGV4dHVyZSIsIkRhdGFUZXh0dXJlIiwiY29tcGxldGUiLCJ3cmFwUyIsIlJlcGVhdFdyYXBwaW5nIiwiTWlycm9yZWRSZXBlYXRXcmFwcGluZyIsIndyYXBUIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiZ2V0Q29udGV4dCIsInNldFRyYW5zZm9ybSIsImRyYXdJbWFnZSIsImNyZWF0ZVBhdHRlcm4iLCJvblVwZGF0ZSIsIlIiLCJUIiwiUyIsIkgiLCJ3IiwidHJhbnNmb3JtIiwiZWUiLCJnbG9iYWxBbHBoYSIsInJlIiwiTm9ybWFsQmxlbmRpbmciLCJnbG9iYWxDb21wb3NpdGVPcGVyYXRpb24iLCJBZGRpdGl2ZUJsZW5kaW5nIiwiU3VidHJhY3RpdmVCbGVuZGluZyIsIk11bHRpcGx5QmxlbmRpbmciLCJvZSIsImxpbmVXaWR0aCIsIm5lIiwibGluZUNhcCIsImFlIiwibGluZUpvaW4iLCJ0ZSIsInN0cm9rZVN0eWxlIiwiaWUiLCJmaWxsU3R5bGUiLCJzZSIsInNldExpbmVEYXNoIiwiY29uc29sZSIsImxvZyIsIlJFVklTSU9OIiwiRiIsIlByb2plY3RvciIsIkQiLCJHIiwiSSIsImZsb29yIiwiSiIsIksiLCJRIiwiWCIsIlkiLCJhbHBoYSIsIiQiLCJfIiwiZGUiLCJCb3gyIiwiaGUiLCJ2ZSIsInllIiwiVmVjdG9yMyIsIk1hdHJpeDMiLCJkb21FbGVtZW50IiwiYXV0b0NsZWFyIiwic29ydE9iamVjdHMiLCJzb3J0RWxlbWVudHMiLCJnZXRDb250ZXh0QXR0cmlidXRlcyIsImdldFBpeGVsUmF0aW8iLCJzZXRQaXhlbFJhdGlvIiwic2V0U2l6ZSIsInN0eWxlIiwic2V0Vmlld3BvcnQiLCJzZXRTY2lzc29yIiwic2V0U2Npc3NvclRlc3QiLCJzZXRDbGVhckNvbG9yIiwic2V0Q2xlYXJDb2xvckhleCIsIndhcm4iLCJnZXRDbGVhckNvbG9yIiwiZ2V0Q2xlYXJBbHBoYSIsImdldE1heEFuaXNvdHJvcHkiLCJjbGVhciIsImlzRW1wdHkiLCJpbnRlcnNlY3QiLCJjbGVhclJlY3QiLCJtYWtlRW1wdHkiLCJjbGVhckNvbG9yIiwiY2xlYXJEZXB0aCIsImNsZWFyU3RlbmNpbCIsImlzQ2FtZXJhIiwiYmFja2dyb3VuZCIsImlzQ29sb3IiLCJwcm9qZWN0U2NlbmUiLCJlbGVtZW50cyIsImxpZ2h0cyIsImdldE5vcm1hbE1hdHJpeCIsIm1hdHJpeFdvcmxkSW52ZXJzZSIsImlzQW1iaWVudExpZ2h0IiwibWF0ZXJpYWwiLCJSZW5kZXJhYmxlU3ByaXRlIiwiUmVuZGVyYWJsZUxpbmUiLCJ2MSIsInYyIiwic2V0RnJvbVBvaW50cyIsImludGVyc2VjdHNCb3giLCJSZW5kZXJhYmxlRmFjZSIsInYzIiwib3ZlcmRyYXciLCJ1bmlvbiIsImVycm9yIiwiUmVuZGVyYWJsZU9iamVjdCIsIm9iamVjdCIsInJlbmRlck9yZGVyIiwiUmVuZGVyYWJsZVZlcnRleCIsInZlcnRleE5vcm1hbHNMZW5ndGgiLCJWZWN0b3IyIiwicG9zaXRpb24iLCJWZWN0b3I0IiwidmlzaWJsZSIsInB1c2giLCJhcHBseU1hdHJpeDQiLCJvYmplY3RzIiwiYWJzIiwicHJvamVjdGlvbk1hdHJpeCIsImxlcnAiLCJCb3gzIiwiQXJyYXkiLCJNYXRyaXg0IiwiRnJ1c3R1bSIsInByb2plY3RWZWN0b3IiLCJwcm9qZWN0IiwidW5wcm9qZWN0VmVjdG9yIiwidW5wcm9qZWN0IiwicGlja2luZ1JheSIsInNldE9iamVjdCIsInByb2plY3RWZXJ0ZXgiLCJjaGVja1RyaWFuZ2xlVmlzaWJpbGl0eSIsImNoZWNrQmFja2ZhY2VDdWxsaW5nIiwicHVzaFZlcnRleCIsInB1c2hOb3JtYWwiLCJwdXNoQ29sb3IiLCJwdXNoVXYiLCJwdXNoTGluZSIsImZyb21BcnJheSIsInB1c2hUcmlhbmdsZSIsInNpZGUiLCJEb3VibGVTaWRlIiwiYXJndW1lbnRzIiwiYXV0b1VwZGF0ZSIsInVwZGF0ZU1hdHJpeFdvcmxkIiwicGFyZW50IiwibXVsdGlwbHlNYXRyaWNlcyIsInNldEZyb21NYXRyaXgiLCJMaWdodCIsIk1lc2giLCJMaW5lIiwiUG9pbnRzIiwiZnJ1c3R1bUN1bGxlZCIsImludGVyc2VjdHNPYmplY3QiLCJTcHJpdGUiLCJpbnRlcnNlY3RzU3ByaXRlIiwiY2hpbGRyZW4iLCJzb3J0IiwiZ2VvbWV0cnkiLCJCdWZmZXJHZW9tZXRyeSIsImF0dHJpYnV0ZXMiLCJncm91cHMiLCJhcnJheSIsIm5vcm1hbCIsInV2IiwiaW5kZXgiLCJzdGFydCIsImNvdW50IiwiR2VvbWV0cnkiLCJmYWNlVmVydGV4VXZzIiwiaXNBcnJheSIsIm1vcnBoVGFyZ2V0cyIsIm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyIsIm1hdGVyaWFsSW5kZXgiLCJGcm9udFNpZGUiLCJCYWNrU2lkZSIsIm5lZ2F0ZSIsInZlcnRleE5vcm1hbHMiLCJMaW5lU2VnbWVudHMiLCJjb2xvcnMiXSwibWFwcGluZ3MiOiJhQUFBLElBQUlBLFFBQVEsU0FBU0MsTUFBTUMscUJBQXFCLFNBQVNDLEdBQUdGLE1BQU1HLFNBQVNDLEtBQUtDLE1BQU1BLEtBQUtDLEtBQUssdUJBQXVCRCxLQUFLRSxNQUFNLElBQUlQLE1BQU1RLE1BQU0sVUFBVUgsS0FBS0ksUUFBUSxhQUFhSixLQUFLSyxVQUFVUixJQUFJRixNQUFNQyxxQkFBcUJVLFVBQVVDLE9BQU9DLE9BQU9iLE1BQU1HLFNBQVNRLFdBQVdYLE1BQU1DLHFCQUFxQlUsVUFBVUcsWUFBWWQsTUFBTUMscUJBQXFCRCxNQUFNQyxxQkFBcUJVLFVBQVVJLHdCQUF1QixFQUFHZixNQUFNQyxxQkFBcUJVLFVBQVVLLE1BQU0sV0FBVyxJQUFJZCxFQUFFLElBQUlGLE1BQU1DLHFCQUFxQixPQUFPQyxFQUFFZSxLQUFLWixNQUFNSCxFQUFFSyxNQUFNVSxLQUFLWixLQUFLRSxPQUFPTCxFQUFFTyxRQUFRSixLQUFLSSxRQUFRUCxHQUFHRixNQUFNa0IsZUFBZSxTQUFTaEIsR0FBOHFCLFNBQVNpQixFQUFFakIsRUFBRWtCLEVBQUVDLEdBQUdDLEVBQUVELEVBQUVFLFNBQVNDLEVBQUVILEVBQUVJLFVBQVUsSUFBSU4sRUFBRUMsRUFBRU0sTUFBTUMsRUFBRUMsRUFBRUMsRUFBRVQsRUFBRU0sTUFBTUksRUFBRUMsRUFBRUMsRUFBRUMsS0FBS0MsS0FBS2YsRUFBRUEsRUFBRVUsRUFBRUEsR0FBRyxHQUFHTSxHQUFHQyxJQUFJQyxJQUFJbkMsRUFBRXlCLEVBQUVLLEVBQUU5QixFQUFFNEIsRUFBRUUsR0FBR0csR0FBR0csSUFBSUQsSUFBSW5DLEVBQUV5QixFQUFF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akgsTUFBTXVULFFBQVEsR0FBR2hPLEdBQUUyTixpQkFBaUI3SixHQUFFbUIsSUFBR0csYUFBYTNLLE1BQU13VSxTQUFTLElBQThCN1EsRUFBRSxFQUFFc0osR0FBMUJOLEVBQUUxRixFQUFFNk0sU0FBU3BPLFVBQWlCd0IsT0FBT3ZELEVBQUVzSixFQUFFdEosSUFBSSxDQUFLdUosRUFBRVAsRUFBRWhKLEdBQUdxRixHQUFFM0csSUFBSTZLLEVBQUV2TCxFQUFFdUwsRUFBRXBMLEVBQUVvTCxFQUFFbkgsRUFBRSxHQUFHaUQsR0FBRW1JLGFBQWE1TCxJQUFHbEUsRUFBRTJILEdBQUUvQixFQUFFOUYsUUFBUSxHQUFHd0osYUFBYTNLLE1BQU0rVCxlQUFlLENBQW9CLFFBQUcsS0FBbEJuSixFQUFFRCxFQUFFcUosWUFBeUJqRCxTQUFhLENBQUEsSUFBSWxMLEVBQVIsSUFBMkJDLEVBQUUsRUFBRUMsR0FBdkJGLEVBQUUrRSxFQUFFbUcsU0FBU21ELE9BQWNoTixPQUFPcEIsRUFBRUMsRUFBRUQsR0FBRyxFQUFFa0QsR0FBRTNHLElBQUl3RCxFQUFFQyxHQUFHRCxFQUFFQyxFQUFFLEdBQUdELEVBQUVDLEVBQUUsR0FBRyxHQUFHa0QsR0FBRW1JLGFBQWE1TCxJQUFHbEUsRUFBRTJILEdBQUUvQixFQUFFOUYsVUFBUzhGLGFBQWFqSCxNQUFNMFQsU0FBUzFLLEdBQUUzRyxJQUFJbUksR0FBRWdGLFNBQVMsSUFBSWhGLEdBQUVnRixTQUFTLElBQUloRixHQUFFZ0YsU0FBUyxJQUFJLEdBQUd4RyxHQUFFbUksYUFBYTlILElBQUdoSSxFQUFFMkgsR0FBRS9CLEVBQUU5RixJQUFJLE9BQU0sSUFBSytCLEdBQUcrQyxHQUFFdUosU0FBU3FFLEtBQUs3USxJQUFHaUQiLCJmaWxlIjoianMvY2FudmFzLXJlbmRlcmVyLWFuZC1wcm9qZWN0b3IubWluLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGJnQ29sb3I9MTY3NzcyMTU7VEhSRUUuU3ByaXRlQ2FudmFzTWF0ZXJpYWw9ZnVuY3Rpb24oZSl7VEhSRUUuTWF0ZXJpYWwuY2FsbCh0aGlzKSx0aGlzLnR5cGU9XCJTcHJpdGVDYW52YXNNYXRlcmlhbFwiLHRoaXMuY29sb3I9bmV3IFRIUkVFLkNvbG9yKDE2Nzc3MjE1KSx0aGlzLnByb2dyYW09ZnVuY3Rpb24oKXt9LHRoaXMuc2V0VmFsdWVzKGUpfSxUSFJFRS5TcHJpdGVDYW52YXNNYXRlcmlhbC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShUSFJFRS5NYXRlcmlhbC5wcm90b3R5cGUpLFRIUkVFLlNwcml0ZUNhbnZhc01hdGVyaWFsLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1USFJFRS5TcHJpdGVDYW52YXNNYXRlcmlhbCxUSFJFRS5TcHJpdGVDYW52YXNNYXRlcmlhbC5wcm90b3R5cGUuaXNTcHJpdGVDYW52YXNNYXRlcmlhbD0hMCxUSFJFRS5TcHJpdGVDYW52YXNNYXRlcmlhbC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgVEhSRUUuU3ByaXRlQ2FudmFzTWF0ZXJpYWw7cmV0dXJuIGUuY29weSh0aGlzKSxlLmNvbG9yLmNvcHkodGhpcy5jb2xvciksZS5wcm9ncmFtPXRoaXMucHJvZ3JhbSxlfSxUSFJFRS5DYW52YXNSZW5kZXJlcj1mdW5jdGlvbihlKXtmdW5jdGlvbiByKCl7bWUuc2V0UkdCKDAsMCwwKSx2ZS5zZXRSR0IoMCwwLDApLHllLnNldFJHQigwLDAsMCk7Zm9yKHZhciBlPTAscj1nLmxlbmd0aDtlPHI7ZSsrKXt2YXIgdD1nW2VdLGk9dC5jb2xvcjt0LmlzQW1iaWVudExpZ2h0P21lLmFkZChpKTp0LmlzRGlyZWN0aW9uYWxMaWdodD92ZS5hZGQoaSk6dC5pc1BvaW50TGlnaHQmJnllLmFkZChpKX19ZnVuY3Rpb24gdChlLHIsdCl7Zm9yKHZhciBpPTAsbz1nLmxlbmd0aDtpPG87aSsrKXt2YXIgbj1nW2ldO2lmKEVlLmNvcHkobi5jb2xvciksbi5pc0RpcmVjdGlvbmFsTGlnaHQpe3ZhciBhPXhlLnNldEZyb21NYXRyaXhQb3NpdGlvbihuLm1hdHJpeFdvcmxkKS5ub3JtYWxpemUoKSxzPXIuZG90KGEpO2lmKHM8PTApY29udGludWU7cyo9bi5pbnRlbnNpdHksdC5hZGQoRWUubXVsdGlwbHlTY2FsYXIocykpfWVsc2UgaWYobi5pc1BvaW50TGlnaHQpe3ZhciBhPXhlLnNldEZyb21NYXRyaXhQb3NpdGlvbihuLm1hdHJpeFdvcmxkKSxzPXIuZG90KHhlLnN1YlZlY3RvcnMoYSxlKS5ub3JtYWxpemUoKSk7aWYoczw9MCljb250aW51ZTtpZigwPT0ocyo9MD09bi5kaXN0YW5jZT8xOjEtTWF0aC5taW4oZS5kaXN0YW5jZVRvKGEpL24uZGlzdGFuY2UsMSkpKWNvbnRpbnVlO3MqPW4uaW50ZW5zaXR5LHQuYWRkKEVlLm11bHRpcGx5U2NhbGFyKHMpKX19fWZ1bmN0aW9uIGkoZSxyLHQpe2YodC5vcGFjaXR5KSxkKHQuYmxlbmRpbmcpO3ZhciBpPXIuc2NhbGUueCpVLG89ci5zY2FsZS55KnEsbj1NYXRoLnNxcnQoaSppK28qbyk7aWYodWUubWluLnNldChlLngtbixlLnktbiksdWUubWF4LnNldChlLngrbixlLnkrbiksdC5pc1Nwcml0ZU1hdGVyaWFsKXt2YXIgYT10Lm1hcDtpZihudWxsIT09YSl7dmFyIHM9ZmVbYS5pZF07aWYodm9pZCAwIT09cyYmcy52ZXJzaW9uPT09YS52ZXJzaW9ufHwocz1jKGEpLGZlW2EuaWRdPXMpLHZvaWQgMCE9PXMuY2FudmFzKXt5KHMuY2FudmFzKTt2YXIgbD1hLmltYWdlLHA9bC53aWR0aCphLm9mZnNldC54LEU9bC5oZWlnaHQqYS5vZmZzZXQueSxoPWwud2lkdGgqYS5yZXBlYXQueCx1PWwuaGVpZ2h0KmEucmVwZWF0LnksbT1pL2gseD1vL3U7Wi5zYXZlKCksWi50cmFuc2xhdGUoZS54LGUueSksMCE9PXQucm90YXRpb24mJloucm90YXRlKHQucm90YXRpb24pLFoudHJhbnNsYXRlKC1pLzIsLW8vMiksWi5zY2FsZShtLHgpLFoudHJhbnNsYXRlKC1wLC1FKSxaLmZpbGxSZWN0KHAsRSxoLHUpLFoucmVzdG9yZSgpfX1lbHNlIHkodC5jb2xvci5nZXRTdHlsZSgpKSxaLnNhdmUoKSxaLnRyYW5zbGF0ZShlLngsZS55KSwwIT09dC5yb3RhdGlvbiYmWi5yb3RhdGUodC5yb3RhdGlvbiksWi5zY2FsZShpLC1vKSxaLmZpbGxSZWN0KC0uNSwtLjUsMSwxKSxaLnJlc3RvcmUoKX1lbHNlIHQuaXNTcHJpdGVDYW52YXNNYXRlcmlhbD8odih0LmNvbG9yLmdldFN0eWxlKCkpLHkodC5jb2xvci5nZXRTdHlsZSgpKSxaLnNhdmUoKSxaLnRyYW5zbGF0ZShlLngsZS55KSwwIT09dC5yb3RhdGlvbiYmWi5yb3RhdGUodC5yb3RhdGlvbiksWi5zY2FsZShpLG8pLHQucHJvZ3JhbShaKSxaLnJlc3RvcmUoKSk6dC5pc1BvaW50c01hdGVyaWFsJiYoeSh0LmNvbG9yLmdldFN0eWxlKCkpLFouc2F2ZSgpLFoudHJhbnNsYXRlKGUueCxlLnkpLDAhPT10LnJvdGF0aW9uJiZaLnJvdGF0ZSh0LnJvdGF0aW9uKSxaLnNjYWxlKGkqdC5zaXplLC1vKnQuc2l6ZSksWi5maWxsUmVjdCgtLjUsLS41LDEsMSksWi5yZXN0b3JlKCkpfWZ1bmN0aW9uIG8oZSxyLHQsaSl7aWYoZihpLm9wYWNpdHkpLGQoaS5ibGVuZGluZyksWi5iZWdpblBhdGgoKSxaLm1vdmVUbyhlLnBvc2l0aW9uU2NyZWVuLngsZS5wb3NpdGlvblNjcmVlbi55KSxaLmxpbmVUbyhyLnBvc2l0aW9uU2NyZWVuLngsci5wb3NpdGlvblNjcmVlbi55KSxpLmlzTGluZUJhc2ljTWF0ZXJpYWwpe2lmKGgoaS5saW5ld2lkdGgpLHUoaS5saW5lY2FwKSxtKGkubGluZWpvaW4pLGkudmVydGV4Q29sb3JzIT09VEhSRUUuVmVydGV4Q29sb3JzKXYoaS5jb2xvci5nZXRTdHlsZSgpKTtlbHNle3ZhciBvPXQudmVydGV4Q29sb3JzWzBdLmdldFN0eWxlKCksbj10LnZlcnRleENvbG9yc1sxXS5nZXRTdHlsZSgpO2lmKG89PT1uKXYobyk7ZWxzZXt0cnl7dmFyIGE9Wi5jcmVhdGVMaW5lYXJHcmFkaWVudChlLnBvc2l0aW9uU2NyZWVuLngsZS5wb3NpdGlvblNjcmVlbi55LHIucG9zaXRpb25TY3JlZW4ueCxyLnBvc2l0aW9uU2NyZWVuLnkpO2EuYWRkQ29sb3JTdG9wKDAsbyksYS5hZGRDb2xvclN0b3AoMSxuKX1jYXRjaChlKXthPW99dihhKX19aS5pc0xpbmVEYXNoZWRNYXRlcmlhbCYmeChbaS5kYXNoU2l6ZSxpLmdhcFNpemVdKSxaLnN0cm9rZSgpLHVlLmV4cGFuZEJ5U2NhbGFyKDIqaS5saW5ld2lkdGgpLGkuaXNMaW5lRGFzaGVkTWF0ZXJpYWwmJngoW10pfX1mdW5jdGlvbiBuKGUscixpLG8sbixjLEUsaCl7aWYoQS5pbmZvLnJlbmRlci52ZXJ0aWNlcys9MyxBLmluZm8ucmVuZGVyLmZhY2VzKyssZihoLm9wYWNpdHkpLGQoaC5ibGVuZGluZyksTT1lLnBvc2l0aW9uU2NyZWVuLngsQz1lLnBvc2l0aW9uU2NyZWVuLnksYj1yLnBvc2l0aW9uU2NyZWVuLngsej1yLnBvc2l0aW9uU2NyZWVuLnksVj1pLnBvc2l0aW9uU2NyZWVuLngsaj1pLnBvc2l0aW9uU2NyZWVuLnksYShNLEMsYix6LFYsaiksKGguaXNNZXNoTGFtYmVydE1hdGVyaWFsfHxoLmlzTWVzaFBob25nTWF0ZXJpYWx8fGguaXNNZXNoU3RhbmRhcmRNYXRlcmlhbCkmJm51bGw9PT1oLm1hcCljZS5jb3B5KGguY29sb3IpLHBlLmNvcHkoaC5lbWlzc2l2ZSksaC52ZXJ0ZXhDb2xvcnM9PT1USFJFRS5GYWNlQ29sb3JzJiZjZS5tdWx0aXBseShFLmNvbG9yKSxsZS5jb3B5KG1lKSxSZS5jb3B5KGUucG9zaXRpb25Xb3JsZCkuYWRkKHIucG9zaXRpb25Xb3JsZCkuYWRkKGkucG9zaXRpb25Xb3JsZCkuZGl2aWRlU2NhbGFyKDMpLHQoUmUsRS5ub3JtYWxNb2RlbCxsZSksbGUubXVsdGlwbHkoY2UpLmFkZChwZSksITA9PT1oLndpcmVmcmFtZT9zKGxlLGgud2lyZWZyYW1lTGluZXdpZHRoLGgud2lyZWZyYW1lTGluZWNhcCxoLndpcmVmcmFtZUxpbmVqb2luKTpsKGxlKTtlbHNlIGlmKGguaXNNZXNoQmFzaWNNYXRlcmlhbHx8aC5pc01lc2hMYW1iZXJ0TWF0ZXJpYWx8fGguaXNNZXNoUGhvbmdNYXRlcmlhbHx8aC5pc01lc2hTdGFuZGFyZE1hdGVyaWFsKWlmKG51bGwhPT1oLm1hcCl7dmFyIHU9aC5tYXAubWFwcGluZzt1PT09VEhSRUUuVVZNYXBwaW5nJiYoTD1FLnV2cyxwKE0sQyxiLHosVixqLExbb10ueCxMW29dLnksTFtuXS54LExbbl0ueSxMW2NdLngsTFtjXS55LGgubWFwKSl9ZWxzZSBudWxsIT09aC5lbnZNYXA/aC5lbnZNYXAubWFwcGluZz09PVRIUkVFLlNwaGVyaWNhbFJlZmxlY3Rpb25NYXBwaW5nJiYoVGUuY29weShFLnZlcnRleE5vcm1hbHNNb2RlbFtvXSkuYXBwbHlNYXRyaXgzKGdlKSxPPS41KlRlLngrLjUsQj0uNSpUZS55Ky41LFRlLmNvcHkoRS52ZXJ0ZXhOb3JtYWxzTW9kZWxbbl0pLmFwcGx5TWF0cml4MyhnZSksUD0uNSpUZS54Ky41LFc9LjUqVGUueSsuNSxUZS5jb3B5KEUudmVydGV4Tm9ybWFsc01vZGVsW2NdKS5hcHBseU1hdHJpeDMoZ2UpLE49LjUqVGUueCsuNSxrPS41KlRlLnkrLjUscChNLEMsYix6LFYsaixPLEIsUCxXLE4sayxoLmVudk1hcCkpOihsZS5jb3B5KGguY29sb3IpLGgudmVydGV4Q29sb3JzPT09VEhSRUUuRmFjZUNvbG9ycyYmbGUubXVsdGlwbHkoRS5jb2xvciksITA9PT1oLndpcmVmcmFtZT9zKGxlLGgud2lyZWZyYW1lTGluZXdpZHRoLGgud2lyZWZyYW1lTGluZWNhcCxoLndpcmVmcmFtZUxpbmVqb2luKTpsKGxlKSk7ZWxzZSBoLmlzTWVzaE5vcm1hbE1hdGVyaWFsPyhUZS5jb3B5KEUubm9ybWFsTW9kZWwpLmFwcGx5TWF0cml4MyhnZSksbGUuc2V0UkdCKFRlLngsVGUueSxUZS56KS5tdWx0aXBseVNjYWxhciguNSkuYWRkU2NhbGFyKC41KSwhMD09PWgud2lyZWZyYW1lP3MobGUsaC53aXJlZnJhbWVMaW5ld2lkdGgsaC53aXJlZnJhbWVMaW5lY2FwLGgud2lyZWZyYW1lTGluZWpvaW4pOmwobGUpKToobGUuc2V0UkdCKDEsMSwxKSwhMD09PWgud2lyZWZyYW1lP3MobGUsaC53aXJlZnJhbWVMaW5ld2lkdGgsaC53aXJlZnJhbWVMaW5lY2FwLGgud2lyZWZyYW1lTGluZWpvaW4pOmwobGUpKX1mdW5jdGlvbiBhKGUscix0LGksbyxuKXtaLmJlZ2luUGF0aCgpLFoubW92ZVRvKGUsciksWi5saW5lVG8odCxpKSxaLmxpbmVUbyhvLG4pLFouY2xvc2VQYXRoKCl9ZnVuY3Rpb24gcyhlLHIsdCxpKXtoKHIpLHUodCksbShpKSx2KGUuZ2V0U3R5bGUoKSksWi5zdHJva2UoKSx1ZS5leHBhbmRCeVNjYWxhcigyKnIpfWZ1bmN0aW9uIGwoZSl7eShlLmdldFN0eWxlKCkpLFouZmlsbCgpfWZ1bmN0aW9uIGMoZSl7aWYoMD09PWUudmVyc2lvbnx8ZSBpbnN0YW5jZW9mIFRIUkVFLkNvbXByZXNzZWRUZXh0dXJlfHxlIGluc3RhbmNlb2YgVEhSRUUuRGF0YVRleHR1cmUpcmV0dXJue2NhbnZhczp2b2lkIDAsdmVyc2lvbjplLnZlcnNpb259O3ZhciByPWUuaW1hZ2U7aWYoITE9PT1yLmNvbXBsZXRlKXJldHVybntjYW52YXM6dm9pZCAwLHZlcnNpb246MH07dmFyIHQ9ZS53cmFwUz09PVRIUkVFLlJlcGVhdFdyYXBwaW5nfHxlLndyYXBTPT09VEhSRUUuTWlycm9yZWRSZXBlYXRXcmFwcGluZyxpPWUud3JhcFQ9PT1USFJFRS5SZXBlYXRXcmFwcGluZ3x8ZS53cmFwVD09PVRIUkVFLk1pcnJvcmVkUmVwZWF0V3JhcHBpbmcsbz1lLndyYXBTPT09VEhSRUUuTWlycm9yZWRSZXBlYXRXcmFwcGluZyxuPWUud3JhcFQ9PT1USFJFRS5NaXJyb3JlZFJlcGVhdFdyYXBwaW5nLGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTthLndpZHRoPXIud2lkdGgqKG8/MjoxKSxhLmhlaWdodD1yLmhlaWdodCoobj8yOjEpO3ZhciBzPWEuZ2V0Q29udGV4dChcIjJkXCIpO3Muc2V0VHJhbnNmb3JtKDEsMCwwLC0xLDAsci5oZWlnaHQpLHMuZHJhd0ltYWdlKHIsMCwwKSwhMD09PW8mJihzLnNldFRyYW5zZm9ybSgtMSwwLDAsLTEsci53aWR0aCxyLmhlaWdodCkscy5kcmF3SW1hZ2Uociwtci53aWR0aCwwKSksITA9PT1uJiYocy5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLHMuZHJhd0ltYWdlKHIsMCxyLmhlaWdodCkpLCEwPT09byYmITA9PT1uJiYocy5zZXRUcmFuc2Zvcm0oLTEsMCwwLDEsci53aWR0aCwwKSxzLmRyYXdJbWFnZShyLC1yLndpZHRoLHIuaGVpZ2h0KSk7dmFyIGw9XCJuby1yZXBlYXRcIjshMD09PXQmJiEwPT09aT9sPVwicmVwZWF0XCI6ITA9PT10P2w9XCJyZXBlYXQteFwiOiEwPT09aSYmKGw9XCJyZXBlYXQteVwiKTt2YXIgYz1aLmNyZWF0ZVBhdHRlcm4oYSxsKTtyZXR1cm4gZS5vblVwZGF0ZSYmZS5vblVwZGF0ZShlKSx7Y2FudmFzOmMsdmVyc2lvbjplLnZlcnNpb259fWZ1bmN0aW9uIHAoZSxyLHQsaSxvLG4sYSxzLGwscCxFLGYsZCl7dmFyIGg9ZmVbZC5pZF07aWYodm9pZCAwIT09aCYmaC52ZXJzaW9uPT09ZC52ZXJzaW9ufHwoaD1jKGQpLGZlW2QuaWRdPWgpLHZvaWQgMD09PWguY2FudmFzKXJldHVybiB5KFwicmdiYSggMCwgMCwgMCwgMSlcIiksdm9pZCBaLmZpbGwoKTt5KGguY2FudmFzKTt2YXIgdSxtLHYseCxSLFQsZyxTLEg9ZC5vZmZzZXQueC9kLnJlcGVhdC54LHc9ZC5vZmZzZXQueS9kLnJlcGVhdC55LE09ZC5pbWFnZS53aWR0aCpkLnJlcGVhdC54LEM9ZC5pbWFnZS5oZWlnaHQqZC5yZXBlYXQueTthPShhK0gpKk0scz0ocyt3KSpDLGw9KGwrSCkqTSxwPShwK3cpKkMsRT0oRStIKSpNLGY9KGYrdykqQyx0LT1lLGktPXIsby09ZSxuLT1yLGwtPWEscC09cyxFLT1hLGYtPXMsMCE9PShnPWwqZi1FKnApJiYoUz0xL2csdT0oZip0LXAqbykqUyxtPShmKmktcCpuKSpTLHY9KGwqby1FKnQpKlMseD0obCpuLUUqaSkqUyxSPWUtdSphLXYqcyxUPXItbSphLXgqcyxaLnNhdmUoKSxaLnRyYW5zZm9ybSh1LG0sdix4LFIsVCksWi5maWxsKCksWi5yZXN0b3JlKCkpfWZ1bmN0aW9uIEUoZSxyLHQpe3ZhciBpLG89ci54LWUueCxuPXIueS1lLnksYT1vKm8rbipuOzAhPT1hJiYoaT10L01hdGguc3FydChhKSxvKj1pLG4qPWksci54Kz1vLHIueSs9bixlLngtPW8sZS55LT1uKX1mdW5jdGlvbiBmKGUpe2VlIT09ZSYmKFouZ2xvYmFsQWxwaGE9ZSxlZT1lKX1mdW5jdGlvbiBkKGUpe3JlIT09ZSYmKGU9PT1USFJFRS5Ob3JtYWxCbGVuZGluZz9aLmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj1cInNvdXJjZS1vdmVyXCI6ZT09PVRIUkVFLkFkZGl0aXZlQmxlbmRpbmc/Wi5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249XCJsaWdodGVyXCI6ZT09PVRIUkVFLlN1YnRyYWN0aXZlQmxlbmRpbmc/Wi5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249XCJkYXJrZXJcIjplPT09VEhSRUUuTXVsdGlwbHlCbGVuZGluZyYmKFouZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPVwibXVsdGlwbHlcIikscmU9ZSl9ZnVuY3Rpb24gaChlKXtvZSE9PWUmJihaLmxpbmVXaWR0aD1lLG9lPWUpfWZ1bmN0aW9uIHUoZSl7bmUhPT1lJiYoWi5saW5lQ2FwPWUsbmU9ZSl9ZnVuY3Rpb24gbShlKXthZSE9PWUmJihaLmxpbmVKb2luPWUsYWU9ZSl9ZnVuY3Rpb24gdihlKXt0ZSE9PWUmJihaLnN0cm9rZVN0eWxlPWUsdGU9ZSl9ZnVuY3Rpb24geShlKXtpZSE9PWUmJihaLmZpbGxTdHlsZT1lLGllPWUpfWZ1bmN0aW9uIHgoZSl7c2UubGVuZ3RoIT09ZS5sZW5ndGgmJihaLnNldExpbmVEYXNoKGUpLHNlPWUpfWNvbnNvbGUubG9nKFwiVEhSRUUuQ2FudmFzUmVuZGVyZXJcIixUSFJFRS5SRVZJU0lPTiksZT1lfHx7fTt2YXIgUixULGcsUyxILHcsTSxDLGIseixWLGosTCxPLEIsUCxXLE4sayxBPXRoaXMsRj1uZXcgVEhSRUUuUHJvamVjdG9yLEQ9dm9pZCAwIT09ZS5jYW52YXM/ZS5jYW52YXM6ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKSxHPUQud2lkdGgsST1ELmhlaWdodCxVPU1hdGguZmxvb3IoRy8yKSxxPU1hdGguZmxvb3IoSS8yKSxKPTAsSz0wLFE9RyxYPUksWT0xLFo9RC5nZXRDb250ZXh0KFwiMmRcIix7YWxwaGE6ITA9PT1lLmFscGhhfSksJD1uZXcgVEhSRUUuQ29sb3IoYmdDb2xvciksXz0hMD09PWUuYWxwaGE/MDoxLGVlPTEscmU9MCx0ZT1udWxsLGllPW51bGwsb2U9bnVsbCxuZT1udWxsLGFlPW51bGwsc2U9W10sbGU9bmV3IFRIUkVFLkNvbG9yLGNlPW5ldyBUSFJFRS5Db2xvcixwZT1uZXcgVEhSRUUuQ29sb3IsRWU9bmV3IFRIUkVFLkNvbG9yLGZlPXt9LGRlPW5ldyBUSFJFRS5Cb3gyLGhlPW5ldyBUSFJFRS5Cb3gyLHVlPW5ldyBUSFJFRS5Cb3gyLG1lPW5ldyBUSFJFRS5Db2xvcix2ZT1uZXcgVEhSRUUuQ29sb3IseWU9bmV3IFRIUkVFLkNvbG9yLHhlPW5ldyBUSFJFRS5WZWN0b3IzLFJlPW5ldyBUSFJFRS5WZWN0b3IzLFRlPW5ldyBUSFJFRS5WZWN0b3IzLGdlPW5ldyBUSFJFRS5NYXRyaXgzO3ZvaWQgMD09PVouc2V0TGluZURhc2gmJihaLnNldExpbmVEYXNoPWZ1bmN0aW9uKCl7fSksdGhpcy5kb21FbGVtZW50PUQsdGhpcy5hdXRvQ2xlYXI9ITAsdGhpcy5zb3J0T2JqZWN0cz0hMCx0aGlzLnNvcnRFbGVtZW50cz0hMCx0aGlzLmluZm89e3JlbmRlcjp7dmVydGljZXM6MCxmYWNlczowfX0sdGhpcy5nZXRDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIFp9LHRoaXMuZ2V0Q29udGV4dEF0dHJpYnV0ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gWi5nZXRDb250ZXh0QXR0cmlidXRlcygpfSx0aGlzLmdldFBpeGVsUmF0aW89ZnVuY3Rpb24oKXtyZXR1cm4gWX0sdGhpcy5zZXRQaXhlbFJhdGlvPWZ1bmN0aW9uKGUpe3ZvaWQgMCE9PWUmJihZPWUpfSx0aGlzLnNldFNpemU9ZnVuY3Rpb24oZSxyLHQpe0c9ZSpZLEk9cipZLEQud2lkdGg9RyxELmhlaWdodD1JLFU9TWF0aC5mbG9vcihHLzIpLHE9TWF0aC5mbG9vcihJLzIpLCExIT09dCYmKEQuc3R5bGUud2lkdGg9ZStcInB4XCIsRC5zdHlsZS5oZWlnaHQ9citcInB4XCIpLGRlLm1pbi5zZXQoLVUsLXEpLGRlLm1heC5zZXQoVSxxKSxoZS5taW4uc2V0KC1VLC1xKSxoZS5tYXguc2V0KFUscSksZWU9MSxyZT0wLHRlPW51bGwsaWU9bnVsbCxvZT1udWxsLG5lPW51bGwsYWU9bnVsbCx0aGlzLnNldFZpZXdwb3J0KDAsMCxlLHIpfSx0aGlzLnNldFZpZXdwb3J0PWZ1bmN0aW9uKGUscix0LGkpe0o9ZSpZLEs9cipZLFE9dCpZLFg9aSpZfSx0aGlzLnNldFNjaXNzb3I9ZnVuY3Rpb24oKXt9LHRoaXMuc2V0U2Npc3NvclRlc3Q9ZnVuY3Rpb24oKXt9LHRoaXMuc2V0Q2xlYXJDb2xvcj1mdW5jdGlvbihlLHIpeyQuc2V0KGUpLF89dm9pZCAwIT09cj9yOjEsaGUubWluLnNldCgtVSwtcSksaGUubWF4LnNldChVLHEpfSx0aGlzLnNldENsZWFyQ29sb3JIZXg9ZnVuY3Rpb24oZSxyKXtjb25zb2xlLndhcm4oXCJUSFJFRS5DYW52YXNSZW5kZXJlcjogLnNldENsZWFyQ29sb3JIZXgoKSBpcyBiZWluZyByZW1vdmVkLiBVc2UgLnNldENsZWFyQ29sb3IoKSBpbnN0ZWFkLlwiKSx0aGlzLnNldENsZWFyQ29sb3IoZSxyKX0sdGhpcy5nZXRDbGVhckNvbG9yPWZ1bmN0aW9uKCl7cmV0dXJuICR9LHRoaXMuZ2V0Q2xlYXJBbHBoYT1mdW5jdGlvbigpe3JldHVybiBffSx0aGlzLmdldE1heEFuaXNvdHJvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gMH0sdGhpcy5jbGVhcj1mdW5jdGlvbigpeyExPT09aGUuaXNFbXB0eSgpJiYoaGUuaW50ZXJzZWN0KGRlKSxoZS5leHBhbmRCeVNjYWxhcigyKSxoZS5taW4ueD1oZS5taW4ueCtVLGhlLm1pbi55PS1oZS5taW4ueStxLGhlLm1heC54PWhlLm1heC54K1UsaGUubWF4Lnk9LWhlLm1heC55K3EsXzwxJiZaLmNsZWFyUmVjdCgwfGhlLm1pbi54LDB8aGUubWF4LnksaGUubWF4LngtaGUubWluLnh8MCxoZS5taW4ueS1oZS5tYXgueXwwKSxfPjAmJihmKDEpLGQoVEhSRUUuTm9ybWFsQmxlbmRpbmcpLHkoXCJyZ2JhKFwiK01hdGguZmxvb3IoMjU1KiQucikrXCIsXCIrTWF0aC5mbG9vcigyNTUqJC5nKStcIixcIitNYXRoLmZsb29yKDI1NSokLmIpK1wiLFwiK18rXCIpXCIpLFouZmlsbFJlY3QoMHxoZS5taW4ueCwwfGhlLm1heC55LGhlLm1heC54LWhlLm1pbi54fDAsaGUubWluLnktaGUubWF4Lnl8MCkpLGhlLm1ha2VFbXB0eSgpKX0sdGhpcy5jbGVhckNvbG9yPWZ1bmN0aW9uKCl7fSx0aGlzLmNsZWFyRGVwdGg9ZnVuY3Rpb24oKXt9LHRoaXMuY2xlYXJTdGVuY2lsPWZ1bmN0aW9uKCl7fSx0aGlzLnJlbmRlcj1mdW5jdGlvbihlLHQpe2lmKHZvaWQgMD09PXQuaXNDYW1lcmEpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcihcIlRIUkVFLkNhbnZhc1JlbmRlcmVyLnJlbmRlcjogY2FtZXJhIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5DYW1lcmEuXCIpO3ZhciBhPWUuYmFja2dyb3VuZDthJiZhLmlzQ29sb3I/KGYoMSksZChUSFJFRS5Ob3JtYWxCbGVuZGluZykseShhLmdldFN0eWxlKCkpLFouZmlsbFJlY3QoMCwwLEcsSSkpOiEwPT09dGhpcy5hdXRvQ2xlYXImJnRoaXMuY2xlYXIoKSxBLmluZm8ucmVuZGVyLnZlcnRpY2VzPTAsQS5pbmZvLnJlbmRlci5mYWNlcz0wLFouc2V0VHJhbnNmb3JtKFEvRywwLDAsLVgvSSxKLEktSyksWi50cmFuc2xhdGUoVSxxKSxSPUYucHJvamVjdFNjZW5lKGUsdCx0aGlzLnNvcnRPYmplY3RzLHRoaXMuc29ydEVsZW1lbnRzKSxUPVIuZWxlbWVudHMsZz1SLmxpZ2h0cyxnZS5nZXROb3JtYWxNYXRyaXgodC5tYXRyaXhXb3JsZEludmVyc2UpLHIoKTtmb3IodmFyIHM9MCxsPVQubGVuZ3RoO3M8bDtzKyspe3ZhciBjPVRbc10scD1jLm1hdGVyaWFsO2lmKHZvaWQgMCE9PXAmJjAhPT1wLm9wYWNpdHkpe2lmKHVlLm1ha2VFbXB0eSgpLGMgaW5zdGFuY2VvZiBUSFJFRS5SZW5kZXJhYmxlU3ByaXRlKVM9YyxTLngqPVUsUy55Kj1xLGkoUyxjLHApO2Vsc2UgaWYoYyBpbnN0YW5jZW9mIFRIUkVFLlJlbmRlcmFibGVMaW5lKVM9Yy52MSxIPWMudjIsUy5wb3NpdGlvblNjcmVlbi54Kj1VLFMucG9zaXRpb25TY3JlZW4ueSo9cSxILnBvc2l0aW9uU2NyZWVuLngqPVUsSC5wb3NpdGlvblNjcmVlbi55Kj1xLHVlLnNldEZyb21Qb2ludHMoW1MucG9zaXRpb25TY3JlZW4sSC5wb3NpdGlvblNjcmVlbl0pLCEwPT09ZGUuaW50ZXJzZWN0c0JveCh1ZSkmJm8oUyxILGMscCk7ZWxzZSBpZihjIGluc3RhbmNlb2YgVEhSRUUuUmVuZGVyYWJsZUZhY2Upe2lmKFM9Yy52MSxIPWMudjIsdz1jLnYzLFMucG9zaXRpb25TY3JlZW4uejwtMXx8Uy5wb3NpdGlvblNjcmVlbi56PjEpY29udGludWU7aWYoSC5wb3NpdGlvblNjcmVlbi56PC0xfHxILnBvc2l0aW9uU2NyZWVuLno+MSljb250aW51ZTtpZih3LnBvc2l0aW9uU2NyZWVuLno8LTF8fHcucG9zaXRpb25TY3JlZW4uej4xKWNvbnRpbnVlO1MucG9zaXRpb25TY3JlZW4ueCo9VSxTLnBvc2l0aW9uU2NyZWVuLnkqPXEsSC5wb3NpdGlvblNjcmVlbi54Kj1VLEgucG9zaXRpb25TY3JlZW4ueSo9cSx3LnBvc2l0aW9uU2NyZWVuLngqPVUsdy5wb3NpdGlvblNjcmVlbi55Kj1xLHAub3ZlcmRyYXc+MCYmKEUoUy5wb3NpdGlvblNjcmVlbixILnBvc2l0aW9uU2NyZWVuLHAub3ZlcmRyYXcpLEUoSC5wb3NpdGlvblNjcmVlbix3LnBvc2l0aW9uU2NyZWVuLHAub3ZlcmRyYXcpLEUody5wb3NpdGlvblNjcmVlbixTLnBvc2l0aW9uU2NyZWVuLHAub3ZlcmRyYXcpKSx1ZS5zZXRGcm9tUG9pbnRzKFtTLnBvc2l0aW9uU2NyZWVuLEgucG9zaXRpb25TY3JlZW4sdy5wb3NpdGlvblNjcmVlbl0pLCEwPT09ZGUuaW50ZXJzZWN0c0JveCh1ZSkmJm4oUyxILHcsMCwxLDIsYyxwKX1oZS51bmlvbih1ZSl9fVouc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKX19LFRIUkVFLlJlbmRlcmFibGVPYmplY3Q9ZnVuY3Rpb24oKXt0aGlzLmlkPTAsdGhpcy5vYmplY3Q9bnVsbCx0aGlzLno9MCx0aGlzLnJlbmRlck9yZGVyPTB9LFRIUkVFLlJlbmRlcmFibGVGYWNlPWZ1bmN0aW9uKCl7dGhpcy5pZD0wLHRoaXMudjE9bmV3IFRIUkVFLlJlbmRlcmFibGVWZXJ0ZXgsdGhpcy52Mj1uZXcgVEhSRUUuUmVuZGVyYWJsZVZlcnRleCx0aGlzLnYzPW5ldyBUSFJFRS5SZW5kZXJhYmxlVmVydGV4LHRoaXMubm9ybWFsTW9kZWw9bmV3IFRIUkVFLlZlY3RvcjMsdGhpcy52ZXJ0ZXhOb3JtYWxzTW9kZWw9W25ldyBUSFJFRS5WZWN0b3IzLG5ldyBUSFJFRS5WZWN0b3IzLG5ldyBUSFJFRS5WZWN0b3IzXSx0aGlzLnZlcnRleE5vcm1hbHNMZW5ndGg9MCx0aGlzLmNvbG9yPW5ldyBUSFJFRS5Db2xvcix0aGlzLm1hdGVyaWFsPW51bGwsdGhpcy51dnM9W25ldyBUSFJFRS5WZWN0b3IyLG5ldyBUSFJFRS5WZWN0b3IyLG5ldyBUSFJFRS5WZWN0b3IyXSx0aGlzLno9MCx0aGlzLnJlbmRlck9yZGVyPTB9LFRIUkVFLlJlbmRlcmFibGVWZXJ0ZXg9ZnVuY3Rpb24oKXt0aGlzLnBvc2l0aW9uPW5ldyBUSFJFRS5WZWN0b3IzLHRoaXMucG9zaXRpb25Xb3JsZD1uZXcgVEhSRUUuVmVjdG9yMyx0aGlzLnBvc2l0aW9uU2NyZWVuPW5ldyBUSFJFRS5WZWN0b3I0LHRoaXMudmlzaWJsZT0hMH0sVEhSRUUuUmVuZGVyYWJsZVZlcnRleC5wcm90b3R5cGUuY29weT1mdW5jdGlvbihlKXt0aGlzLnBvc2l0aW9uV29ybGQuY29weShlLnBvc2l0aW9uV29ybGQpLHRoaXMucG9zaXRpb25TY3JlZW4uY29weShlLnBvc2l0aW9uU2NyZWVuKX0sVEhSRUUuUmVuZGVyYWJsZUxpbmU9ZnVuY3Rpb24oKXt0aGlzLmlkPTAsdGhpcy52MT1uZXcgVEhSRUUuUmVuZGVyYWJsZVZlcnRleCx0aGlzLnYyPW5ldyBUSFJFRS5SZW5kZXJhYmxlVmVydGV4LHRoaXMudmVydGV4Q29sb3JzPVtuZXcgVEhSRUUuQ29sb3IsbmV3IFRIUkVFLkNvbG9yXSx0aGlzLm1hdGVyaWFsPW51bGwsdGhpcy56PTAsdGhpcy5yZW5kZXJPcmRlcj0wfSxUSFJFRS5SZW5kZXJhYmxlU3ByaXRlPWZ1bmN0aW9uKCl7dGhpcy5pZD0wLHRoaXMub2JqZWN0PW51bGwsdGhpcy54PTAsdGhpcy55PTAsdGhpcy56PTAsdGhpcy5yb3RhdGlvbj0wLHRoaXMuc2NhbGU9bmV3IFRIUkVFLlZlY3RvcjIsdGhpcy5tYXRlcmlhbD1udWxsLHRoaXMucmVuZGVyT3JkZXI9MH0sVEhSRUUuUHJvamVjdG9yPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXtpZighMSE9PXQudmlzaWJsZSl7aWYodCBpbnN0YW5jZW9mIFRIUkVFLkxpZ2h0KWoubGlnaHRzLnB1c2godCk7ZWxzZSBpZih0IGluc3RhbmNlb2YgVEhSRUUuTWVzaHx8dCBpbnN0YW5jZW9mIFRIUkVFLkxpbmV8fHQgaW5zdGFuY2VvZiBUSFJFRS5Qb2ludHMpe2lmKCExPT09dC5tYXRlcmlhbC52aXNpYmxlKXJldHVybjtpZighMD09PXQuZnJ1c3R1bUN1bGxlZCYmITE9PT1ELmludGVyc2VjdHNPYmplY3QodCkpcmV0dXJuO3IodCl9ZWxzZSBpZih0IGluc3RhbmNlb2YgVEhSRUUuU3ByaXRlKXtpZighMT09PXQubWF0ZXJpYWwudmlzaWJsZSlyZXR1cm47aWYoITA9PT10LmZydXN0dW1DdWxsZWQmJiExPT09RC5pbnRlcnNlY3RzU3ByaXRlKHQpKXJldHVybjtyKHQpfWZvcih2YXIgaT10LmNoaWxkcmVuLG89MCxuPWkubGVuZ3RoO288bjtvKyspZShpW29dKX19ZnVuY3Rpb24gcihlKXtwPWkoKSxwLmlkPWUuaWQscC5vYmplY3Q9ZSxMLnNldEZyb21NYXRyaXhQb3NpdGlvbihlLm1hdHJpeFdvcmxkKSxMLmFwcGx5TWF0cml4NChrKSxwLno9TC56LHAucmVuZGVyT3JkZXI9ZS5yZW5kZXJPcmRlcixqLm9iamVjdHMucHVzaChwKX1mdW5jdGlvbiB0KGUscix0KXt2YXIgaT0xL2UudztlLnoqPWksZS56Pj0tMSYmZS56PD0xJiYoeT1zKCkseS5pZD1yLmlkLHkueD1lLngqaSx5Lnk9ZS55KmkseS56PWUueix5LnJlbmRlck9yZGVyPXIucmVuZGVyT3JkZXIseS5vYmplY3Q9cix5LnJvdGF0aW9uPXIucm90YXRpb24seS5zY2FsZS54PXIuc2NhbGUueCpNYXRoLmFicyh5LngtKGUueCt0LnByb2plY3Rpb25NYXRyaXguZWxlbWVudHNbMF0pLyhlLncrdC5wcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWzEyXSkpLHkuc2NhbGUueT1yLnNjYWxlLnkqTWF0aC5hYnMoeS55LShlLnkrdC5wcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWzVdKS8oZS53K3QucHJvamVjdGlvbk1hdHJpeC5lbGVtZW50c1sxM10pKSx5Lm1hdGVyaWFsPXIubWF0ZXJpYWwsai5lbGVtZW50cy5wdXNoKHkpKX1mdW5jdGlvbiBpKCl7aWYoRT09PWcpe3ZhciBlPW5ldyBUSFJFRS5SZW5kZXJhYmxlT2JqZWN0O3JldHVybiBULnB1c2goZSksZysrLEUrKyxlfXJldHVybiBUW0UrK119ZnVuY3Rpb24gbygpe2lmKGQ9PT1IKXt2YXIgZT1uZXcgVEhSRUUuUmVuZGVyYWJsZVZlcnRleDtyZXR1cm4gUy5wdXNoKGUpLEgrKyxkKyssZX1yZXR1cm4gU1tkKytdfWZ1bmN0aW9uIG4oKXtpZih1PT09TSl7dmFyIGU9bmV3IFRIUkVFLlJlbmRlcmFibGVGYWNlO3JldHVybiB3LnB1c2goZSksTSsrLHUrKyxlfXJldHVybiB3W3UrK119ZnVuY3Rpb24gYSgpe2lmKHY9PT1iKXt2YXIgZT1uZXcgVEhSRUUuUmVuZGVyYWJsZUxpbmU7cmV0dXJuIEMucHVzaChlKSxiKyssdisrLGV9cmV0dXJuIENbdisrXX1mdW5jdGlvbiBzKCl7aWYoeD09PVYpe3ZhciBlPW5ldyBUSFJFRS5SZW5kZXJhYmxlU3ByaXRlO3JldHVybiB6LnB1c2goZSksVisrLHgrKyxlfXJldHVybiB6W3grK119ZnVuY3Rpb24gbChlLHIpe3JldHVybiBlLnJlbmRlck9yZGVyIT09ci5yZW5kZXJPcmRlcj9lLnJlbmRlck9yZGVyLXIucmVuZGVyT3JkZXI6ZS56IT09ci56P3Iuei1lLno6ZS5pZCE9PXIuaWQ/ZS5pZC1yLmlkOjB9ZnVuY3Rpb24gYyhlLHIpe3ZhciB0PTAsaT0xLG89ZS56K2UudyxuPXIueityLncsYT0tZS56K2UudyxzPS1yLnorci53O3JldHVybiBvPj0wJiZuPj0wJiZhPj0wJiZzPj0wfHwhKG88MCYmbjwwfHxhPDAmJnM8MCkmJihvPDA/dD1NYXRoLm1heCh0LG8vKG8tbikpOm48MCYmKGk9TWF0aC5taW4oaSxvLyhvLW4pKSksYTwwP3Q9TWF0aC5tYXgodCxhLyhhLXMpKTpzPDAmJihpPU1hdGgubWluKGksYS8oYS1zKSkpLCEoaTx0KSYmKGUubGVycChyLHQpLHIubGVycChlLDEtaSksITApKX12YXIgcCxFLGYsZCxoLHUsbSx2LHkseCxSLFQ9W10sZz0wLFM9W10sSD0wLHc9W10sTT0wLEM9W10sYj0wLHo9W10sVj0wLGo9e29iamVjdHM6W10sbGlnaHRzOltdLGVsZW1lbnRzOltdfSxMPW5ldyBUSFJFRS5WZWN0b3IzLE89bmV3IFRIUkVFLlZlY3RvcjQsQj1uZXcgVEhSRUUuQm94MyhuZXcgVEhSRUUuVmVjdG9yMygtMSwtMSwtMSksbmV3IFRIUkVFLlZlY3RvcjMoMSwxLDEpKSxQPW5ldyBUSFJFRS5Cb3gzLFc9bmV3IEFycmF5KDMpLE49bmV3IFRIUkVFLk1hdHJpeDQsaz1uZXcgVEhSRUUuTWF0cml4NCxBPW5ldyBUSFJFRS5NYXRyaXg0LEY9bmV3IFRIUkVFLk1hdHJpeDMsRD1uZXcgVEhSRUUuRnJ1c3R1bSxHPW5ldyBUSFJFRS5WZWN0b3I0LEk9bmV3IFRIUkVFLlZlY3RvcjQ7dGhpcy5wcm9qZWN0VmVjdG9yPWZ1bmN0aW9uKGUscil7Y29uc29sZS53YXJuKFwiVEhSRUUuUHJvamVjdG9yOiAucHJvamVjdFZlY3RvcigpIGlzIG5vdyB2ZWN0b3IucHJvamVjdCgpLlwiKSxlLnByb2plY3Qocil9LHRoaXMudW5wcm9qZWN0VmVjdG9yPWZ1bmN0aW9uKGUscil7Y29uc29sZS53YXJuKFwiVEhSRUUuUHJvamVjdG9yOiAudW5wcm9qZWN0VmVjdG9yKCkgaXMgbm93IHZlY3Rvci51bnByb2plY3QoKS5cIiksZS51bnByb2plY3Qocil9LHRoaXMucGlja2luZ1JheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoXCJUSFJFRS5Qcm9qZWN0b3I6IC5waWNraW5nUmF5KCkgaXMgbm93IHJheWNhc3Rlci5zZXRGcm9tQ2FtZXJhKCkuXCIpfTt2YXIgVT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7VD1lLGc9VC5tYXRlcmlhbCxILmdldE5vcm1hbE1hdHJpeChULm1hdHJpeFdvcmxkKSx2Lmxlbmd0aD0wLHkubGVuZ3RoPTAseC5sZW5ndGg9MH1mdW5jdGlvbiByKGUpe3ZhciByPWUucG9zaXRpb24sdD1lLnBvc2l0aW9uV29ybGQsaT1lLnBvc2l0aW9uU2NyZWVuO3QuY29weShyKS5hcHBseU1hdHJpeDQoUiksaS5jb3B5KHQpLmFwcGx5TWF0cml4NChrKTt2YXIgbz0xL2kudztpLngqPW8saS55Kj1vLGkueio9byxlLnZpc2libGU9aS54Pj0tMSYmaS54PD0xJiZpLnk+PS0xJiZpLnk8PTEmJmkuej49LTEmJmkuejw9MX1mdW5jdGlvbiB0KGUsdCxpKXtmPW8oKSxmLnBvc2l0aW9uLnNldChlLHQsaSkscihmKX1mdW5jdGlvbiBpKGUscix0KXt2LnB1c2goZSxyLHQpfWZ1bmN0aW9uIHMoZSxyLHQpe3kucHVzaChlLHIsdCl9ZnVuY3Rpb24gbChlLHIpe3gucHVzaChlLHIpfWZ1bmN0aW9uIHAoZSxyLHQpe3JldHVybiEwPT09ZS52aXNpYmxlfHwhMD09PXIudmlzaWJsZXx8ITA9PT10LnZpc2libGV8fChXWzBdPWUucG9zaXRpb25TY3JlZW4sV1sxXT1yLnBvc2l0aW9uU2NyZWVuLFdbMl09dC5wb3NpdGlvblNjcmVlbixCLmludGVyc2VjdHNCb3goUC5zZXRGcm9tUG9pbnRzKFcpKSl9ZnVuY3Rpb24gRShlLHIsdCl7cmV0dXJuKHQucG9zaXRpb25TY3JlZW4ueC1lLnBvc2l0aW9uU2NyZWVuLngpKihyLnBvc2l0aW9uU2NyZWVuLnktZS5wb3NpdGlvblNjcmVlbi55KS0odC5wb3NpdGlvblNjcmVlbi55LWUucG9zaXRpb25TY3JlZW4ueSkqKHIucG9zaXRpb25TY3JlZW4ueC1lLnBvc2l0aW9uU2NyZWVuLngpPDB9ZnVuY3Rpb24gZChlLHIpe3ZhciB0PVNbZV0saT1TW3JdO3QucG9zaXRpb25TY3JlZW4uY29weSh0LnBvc2l0aW9uKS5hcHBseU1hdHJpeDQoQSksaS5wb3NpdGlvblNjcmVlbi5jb3B5KGkucG9zaXRpb24pLmFwcGx5TWF0cml4NChBKSwhMD09PWModC5wb3NpdGlvblNjcmVlbixpLnBvc2l0aW9uU2NyZWVuKSYmKHQucG9zaXRpb25TY3JlZW4ubXVsdGlwbHlTY2FsYXIoMS90LnBvc2l0aW9uU2NyZWVuLncpLGkucG9zaXRpb25TY3JlZW4ubXVsdGlwbHlTY2FsYXIoMS9pLnBvc2l0aW9uU2NyZWVuLncpLG09YSgpLG0uaWQ9VC5pZCxtLnYxLmNvcHkodCksbS52Mi5jb3B5KGkpLG0uej1NYXRoLm1heCh0LnBvc2l0aW9uU2NyZWVuLnosaS5wb3NpdGlvblNjcmVlbi56KSxtLnJlbmRlck9yZGVyPVQucmVuZGVyT3JkZXIsbS5tYXRlcmlhbD1ULm1hdGVyaWFsLFQubWF0ZXJpYWwudmVydGV4Q29sb3JzPT09VEhSRUUuVmVydGV4Q29sb3JzJiYobS52ZXJ0ZXhDb2xvcnNbMF0uZnJvbUFycmF5KHksMyplKSxtLnZlcnRleENvbG9yc1sxXS5mcm9tQXJyYXkoeSwzKnIpKSxqLmVsZW1lbnRzLnB1c2gobSkpfWZ1bmN0aW9uIHUoZSxyLHQpe3ZhciBpPVNbZV0sbz1TW3JdLGE9U1t0XTtpZighMSE9PXAoaSxvLGEpJiYoZy5zaWRlPT09VEhSRUUuRG91YmxlU2lkZXx8ITA9PT1FKGksbyxhKSkpe2g9bigpLGguaWQ9VC5pZCxoLnYxLmNvcHkoaSksaC52Mi5jb3B5KG8pLGgudjMuY29weShhKSxoLno9KGkucG9zaXRpb25TY3JlZW4ueitvLnBvc2l0aW9uU2NyZWVuLnorYS5wb3NpdGlvblNjcmVlbi56KS8zLGgucmVuZGVyT3JkZXI9VC5yZW5kZXJPcmRlcixoLm5vcm1hbE1vZGVsLmZyb21BcnJheSh2LDMqZSksaC5ub3JtYWxNb2RlbC5hcHBseU1hdHJpeDMoSCkubm9ybWFsaXplKCk7Zm9yKHZhciBzPTA7czwzO3MrKyl7dmFyIGw9aC52ZXJ0ZXhOb3JtYWxzTW9kZWxbc107bC5mcm9tQXJyYXkodiwzKmFyZ3VtZW50c1tzXSksbC5hcHBseU1hdHJpeDMoSCkubm9ybWFsaXplKCk7aC51dnNbc10uZnJvbUFycmF5KHgsMiphcmd1bWVudHNbc10pfWgudmVydGV4Tm9ybWFsc0xlbmd0aD0zLGgubWF0ZXJpYWw9VC5tYXRlcmlhbCxqLmVsZW1lbnRzLnB1c2goaCl9fXZhciB2PVtdLHk9W10seD1bXSxUPW51bGwsZz1udWxsLEg9bmV3IFRIUkVFLk1hdHJpeDM7cmV0dXJue3NldE9iamVjdDplLHByb2plY3RWZXJ0ZXg6cixjaGVja1RyaWFuZ2xlVmlzaWJpbGl0eTpwLGNoZWNrQmFja2ZhY2VDdWxsaW5nOkUscHVzaFZlcnRleDp0LHB1c2hOb3JtYWw6aSxwdXNoQ29sb3I6cyxwdXNoVXY6bCxwdXNoTGluZTpkLHB1c2hUcmlhbmdsZTp1fX0scT1uZXcgVTt0aGlzLnByb2plY3RTY2VuZT1mdW5jdGlvbihyLGkscyxwKXt1PTAsdj0wLHg9MCxqLmVsZW1lbnRzLmxlbmd0aD0wLCEwPT09ci5hdXRvVXBkYXRlJiZyLnVwZGF0ZU1hdHJpeFdvcmxkKCksbnVsbD09PWkucGFyZW50JiZpLnVwZGF0ZU1hdHJpeFdvcmxkKCksTi5jb3B5KGkubWF0cml4V29ybGRJbnZlcnNlKSxrLm11bHRpcGx5TWF0cmljZXMoaS5wcm9qZWN0aW9uTWF0cml4LE4pLEQuc2V0RnJvbU1hdHJpeChrKSxFPTAsai5vYmplY3RzLmxlbmd0aD0wLGoubGlnaHRzLmxlbmd0aD0wLGUociksITA9PT1zJiZqLm9iamVjdHMuc29ydChsKTtmb3IodmFyIGY9ai5vYmplY3RzLHk9MCxUPWYubGVuZ3RoO3k8VDt5Kyspe3ZhciBnPWZbeV0ub2JqZWN0LEg9Zy5nZW9tZXRyeTtpZihxLnNldE9iamVjdChnKSxSPWcubWF0cml4V29ybGQsZD0wLGcgaW5zdGFuY2VvZiBUSFJFRS5NZXNoKXtpZihIIGluc3RhbmNlb2YgVEhSRUUuQnVmZmVyR2VvbWV0cnkpe3ZhciB3PUguYXR0cmlidXRlcyxNPUguZ3JvdXBzO2lmKHZvaWQgMD09PXcucG9zaXRpb24pY29udGludWU7Zm9yKHZhciBDPXcucG9zaXRpb24uYXJyYXksYj0wLHo9Qy5sZW5ndGg7Yjx6O2IrPTMpcS5wdXNoVmVydGV4KENbYl0sQ1tiKzFdLENbYisyXSk7aWYodm9pZCAwIT09dy5ub3JtYWwpZm9yKHZhciBWPXcubm9ybWFsLmFycmF5LGI9MCx6PVYubGVuZ3RoO2I8ejtiKz0zKXEucHVzaE5vcm1hbChWW2JdLFZbYisxXSxWW2IrMl0pO2lmKHZvaWQgMCE9PXcudXYpZm9yKHZhciBCPXcudXYuYXJyYXksYj0wLHo9Qi5sZW5ndGg7Yjx6O2IrPTIpcS5wdXNoVXYoQltiXSxCW2IrMV0pO2lmKG51bGwhPT1ILmluZGV4KXt2YXIgUD1ILmluZGV4LmFycmF5O2lmKE0ubGVuZ3RoPjApZm9yKHZhciBXPTA7VzxNLmxlbmd0aDtXKyspZm9yKHZhciBVPU1bV10sYj1VLnN0YXJ0LHo9VS5zdGFydCtVLmNvdW50O2I8ejtiKz0zKXEucHVzaFRyaWFuZ2xlKFBbYl0sUFtiKzFdLFBbYisyXSk7ZWxzZSBmb3IodmFyIGI9MCx6PVAubGVuZ3RoO2I8ejtiKz0zKXEucHVzaFRyaWFuZ2xlKFBbYl0sUFtiKzFdLFBbYisyXSl9ZWxzZSBmb3IodmFyIGI9MCx6PUMubGVuZ3RoLzM7Yjx6O2IrPTMpcS5wdXNoVHJpYW5nbGUoYixiKzEsYisyKX1lbHNlIGlmKEggaW5zdGFuY2VvZiBUSFJFRS5HZW9tZXRyeSl7dmFyIEo9SC52ZXJ0aWNlcyxLPUguZmFjZXMsUT1ILmZhY2VWZXJ0ZXhVdnNbMF07Ri5nZXROb3JtYWxNYXRyaXgoUik7Zm9yKHZhciBYPWcubWF0ZXJpYWwsWT1BcnJheS5pc0FycmF5KFgpLFo9MCwkPUoubGVuZ3RoO1o8JDtaKyspe3ZhciBfPUpbWl07aWYoTC5jb3B5KF8pLCEwPT09WC5tb3JwaFRhcmdldHMpZm9yKHZhciBlZT1ILm1vcnBoVGFyZ2V0cyxyZT1nLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyx0ZT0wLGllPWVlLmxlbmd0aDt0ZTxpZTt0ZSsrKXt2YXIgb2U9cmVbdGVdO2lmKDAhPT1vZSl7dmFyIG5lPWVlW3RlXSxhZT1uZS52ZXJ0aWNlc1taXTtMLngrPShhZS54LV8ueCkqb2UsTC55Kz0oYWUueS1fLnkpKm9lLEwueis9KGFlLnotXy56KSpvZX19cS5wdXNoVmVydGV4KEwueCxMLnksTC56KX1mb3IodmFyIHNlPTAsbGU9Sy5sZW5ndGg7c2U8bGU7c2UrKyl7dmFyIGNlPUtbc2VdO2lmKHZvaWQgMCE9PShYPSEwPT09WT9nLm1hdGVyaWFsW2NlLm1hdGVyaWFsSW5kZXhdOmcubWF0ZXJpYWwpKXt2YXIgcGU9WC5zaWRlLEVlPVNbY2UuYV0sZmU9U1tjZS5iXSxkZT1TW2NlLmNdO2lmKCExIT09cS5jaGVja1RyaWFuZ2xlVmlzaWJpbGl0eShFZSxmZSxkZSkpe3ZhciBoZT1xLmNoZWNrQmFja2ZhY2VDdWxsaW5nKEVlLGZlLGRlKTtpZihwZSE9PVRIUkVFLkRvdWJsZVNpZGUpe2lmKHBlPT09VEhSRUUuRnJvbnRTaWRlJiYhMT09PWhlKWNvbnRpbnVlO2lmKHBlPT09VEhSRUUuQmFja1NpZGUmJiEwPT09aGUpY29udGludWV9aD1uKCksaC5pZD1nLmlkLGgudjEuY29weShFZSksaC52Mi5jb3B5KGZlKSxoLnYzLmNvcHkoZGUpLGgubm9ybWFsTW9kZWwuY29weShjZS5ub3JtYWwpLCExIT09aGV8fHBlIT09VEhSRUUuQmFja1NpZGUmJnBlIT09VEhSRUUuRG91YmxlU2lkZXx8aC5ub3JtYWxNb2RlbC5uZWdhdGUoKSxoLm5vcm1hbE1vZGVsLmFwcGx5TWF0cml4MyhGKS5ub3JtYWxpemUoKTtmb3IodmFyIHVlPWNlLnZlcnRleE5vcm1hbHMsbWU9MCx2ZT1NYXRoLm1pbih1ZS5sZW5ndGgsMyk7bWU8dmU7bWUrKyl7dmFyIHllPWgudmVydGV4Tm9ybWFsc01vZGVsW21lXTt5ZS5jb3B5KHVlW21lXSksITEhPT1oZXx8cGUhPT1USFJFRS5CYWNrU2lkZSYmcGUhPT1USFJFRS5Eb3VibGVTaWRlfHx5ZS5uZWdhdGUoKSx5ZS5hcHBseU1hdHJpeDMoRikubm9ybWFsaXplKCl9aC52ZXJ0ZXhOb3JtYWxzTGVuZ3RoPXVlLmxlbmd0aDt2YXIgeGU9UVtzZV07aWYodm9pZCAwIT09eGUpZm9yKHZhciBSZT0wO1JlPDM7UmUrKyloLnV2c1tSZV0uY29weSh4ZVtSZV0pO2guY29sb3I9Y2UuY29sb3IsaC5tYXRlcmlhbD1YLGguej0oRWUucG9zaXRpb25TY3JlZW4ueitmZS5wb3NpdGlvblNjcmVlbi56K2RlLnBvc2l0aW9uU2NyZWVuLnopLzMsaC5yZW5kZXJPcmRlcj1nLnJlbmRlck9yZGVyLGouZWxlbWVudHMucHVzaChoKX19fX19ZWxzZSBpZihnIGluc3RhbmNlb2YgVEhSRUUuTGluZSl7aWYoQS5tdWx0aXBseU1hdHJpY2VzKGssUiksSCBpbnN0YW5jZW9mIFRIUkVFLkJ1ZmZlckdlb21ldHJ5KXt2YXIgdz1ILmF0dHJpYnV0ZXM7aWYodm9pZCAwIT09dy5wb3NpdGlvbil7Zm9yKHZhciBDPXcucG9zaXRpb24uYXJyYXksYj0wLHo9Qy5sZW5ndGg7Yjx6O2IrPTMpcS5wdXNoVmVydGV4KENbYl0sQ1tiKzFdLENbYisyXSk7aWYodm9pZCAwIT09dy5jb2xvcilmb3IodmFyIFRlPXcuY29sb3IuYXJyYXksYj0wLHo9VGUubGVuZ3RoO2I8ejtiKz0zKXEucHVzaENvbG9yKFRlW2JdLFRlW2IrMV0sVGVbYisyXSk7aWYobnVsbCE9PUguaW5kZXgpZm9yKHZhciBQPUguaW5kZXguYXJyYXksYj0wLHo9UC5sZW5ndGg7Yjx6O2IrPTIpcS5wdXNoTGluZShQW2JdLFBbYisxXSk7ZWxzZSBmb3IodmFyIGdlPWcgaW5zdGFuY2VvZiBUSFJFRS5MaW5lU2VnbWVudHM/MjoxLGI9MCx6PUMubGVuZ3RoLzMtMTtiPHo7Yis9Z2UpcS5wdXNoTGluZShiLGIrMSl9fWVsc2UgaWYoSCBpbnN0YW5jZW9mIFRIUkVFLkdlb21ldHJ5KXt2YXIgSj1nLmdlb21ldHJ5LnZlcnRpY2VzO2lmKDA9PT1KLmxlbmd0aCljb250aW51ZTtFZT1vKCksRWUucG9zaXRpb25TY3JlZW4uY29weShKWzBdKS5hcHBseU1hdHJpeDQoQSk7Zm9yKHZhciBnZT1nIGluc3RhbmNlb2YgVEhSRUUuTGluZVNlZ21lbnRzPzI6MSxaPTEsJD1KLmxlbmd0aDtaPCQ7WisrKUVlPW8oKSxFZS5wb3NpdGlvblNjcmVlbi5jb3B5KEpbWl0pLmFwcGx5TWF0cml4NChBKSwoWisxKSVnZT4wfHwoZmU9U1tkLTJdLEcuY29weShFZS5wb3NpdGlvblNjcmVlbiksSS5jb3B5KGZlLnBvc2l0aW9uU2NyZWVuKSwhMD09PWMoRyxJKSYmKEcubXVsdGlwbHlTY2FsYXIoMS9HLncpLEkubXVsdGlwbHlTY2FsYXIoMS9JLncpLG09YSgpLG0uaWQ9Zy5pZCxtLnYxLnBvc2l0aW9uU2NyZWVuLmNvcHkoRyksbS52Mi5wb3NpdGlvblNjcmVlbi5jb3B5KEkpLG0uej1NYXRoLm1heChHLnosSS56KSxtLnJlbmRlck9yZGVyPWcucmVuZGVyT3JkZXIsbS5tYXRlcmlhbD1nLm1hdGVyaWFsLGcubWF0ZXJpYWwudmVydGV4Q29sb3JzPT09VEhSRUUuVmVydGV4Q29sb3JzJiYobS52ZXJ0ZXhDb2xvcnNbMF0uY29weShnLmdlb21ldHJ5LmNvbG9yc1taXSksbS52ZXJ0ZXhDb2xvcnNbMV0uY29weShnLmdlb21ldHJ5LmNvbG9yc1taLTFdKSksai5lbGVtZW50cy5wdXNoKG0pKSl9fWVsc2UgaWYoZyBpbnN0YW5jZW9mIFRIUkVFLlBvaW50cyl7aWYoQS5tdWx0aXBseU1hdHJpY2VzKGssUiksSCBpbnN0YW5jZW9mIFRIUkVFLkdlb21ldHJ5KWZvcih2YXIgSj1nLmdlb21ldHJ5LnZlcnRpY2VzLFo9MCwkPUoubGVuZ3RoO1o8JDtaKyspe3ZhciBfPUpbWl07Ty5zZXQoXy54LF8ueSxfLnosMSksTy5hcHBseU1hdHJpeDQoQSksdChPLGcsaSl9ZWxzZSBpZihIIGluc3RhbmNlb2YgVEhSRUUuQnVmZmVyR2VvbWV0cnkpe3ZhciB3PUguYXR0cmlidXRlcztpZih2b2lkIDAhPT13LnBvc2l0aW9uKWZvcih2YXIgQz13LnBvc2l0aW9uLmFycmF5LGI9MCx6PUMubGVuZ3RoO2I8ejtiKz0zKU8uc2V0KENbYl0sQ1tiKzFdLENbYisyXSwxKSxPLmFwcGx5TWF0cml4NChBKSx0KE8sZyxpKX19ZWxzZSBnIGluc3RhbmNlb2YgVEhSRUUuU3ByaXRlJiYoTy5zZXQoUi5lbGVtZW50c1sxMl0sUi5lbGVtZW50c1sxM10sUi5lbGVtZW50c1sxNF0sMSksTy5hcHBseU1hdHJpeDQoayksdChPLGcsaSkpfXJldHVybiEwPT09cCYmai5lbGVtZW50cy5zb3J0KGwpLGp9fTsiXX0=
+2 -154
docs/js/global.js
··· 1 - "use strict"; 2 - 3 - window.xhr = function (reqContent, url) { 4 - var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; 5 - var callback = arguments[3]; 6 - 7 - return new Promise(function (resolve, reject) { 8 - if (typeof options == "function") callback = options; 9 - if (typeof options == "function") options = {}; 10 - if (options.type == undefined) options.type = "POST"; 11 - if (options.contentType == undefined) options.contentType = "json"; 12 - var xhr = new XMLHttpRequest(); 13 - xhr.open(options.type, url, true); 14 - if (options.type == "GET") { 15 - xhr.send(); 16 - } else if (options.contentType == "form") { 17 - xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 18 - xhr.send("data=" + JSON.stringify(reqContent)); 19 - } else if (options.contentType == "json") { 20 - xhr.setRequestHeader("Content-type", "application/json"); 21 - xhr.send(JSON.stringify(reqContent)); 22 - } else if (options.contentType == "none") { 23 - xhr.send(reqContent); 24 - // for file uploads (multipart/form-data) 25 - } else if (options.contentType) { 26 - xhr.setRequestHeader("Content-type", options.contentType); 27 - xhr.send(reqContent); 28 - } 29 - xhr.onreadystatechange = function () { 30 - if (this.readyState == 4) { 31 - var res = JSON.parse(this.responseText); 32 - var err = null; 33 - if (!String(this.status).startsWith("2")) { 34 - console.error("HTTP error " + this.status); 35 - err = this.status; 36 - } 37 - if (err) reject(err);else resolve(res); 38 - if (callback) callback(res, err); 39 - } 40 - }; 41 - // resolve(5); 42 - }); 43 - }; 44 - 45 - var YTapiKey = "AIzaSyBnQnpboWUfWyR8aW6HuQV5MAlxZ5FQ090"; 46 - 47 - (function Video() { 48 - var maxResults = 6; 49 - 50 - var url = "https://www.googleapis.com/youtube/v3/playlistItems" + "?key=" + YTapiKey + "&part=snippet" + "&maxResults=" + maxResults + "&playlistId="; 51 - var personalURL = url + "UUy6jcAF6fZGttRvihyQixbA"; 52 - var commissionsURL = url + "PL84-DNDSU8p5WP6jA7hvOCV9dIKBNjdCS"; 53 - var personal = xhr(null, personalURL, { type: "GET" }); 54 - var commissions = xhr(null, commissionsURL, { type: "GET" }); 55 - Promise.all([personal, commissions]).then(function (results) { 56 - console.log("==--==--==--> YouTube Personal + Commissions"); 57 - console.log(results); 58 - // combine video and commission responses 59 - var items = results[0].items.concat(results[1].items); 60 - items.sort(function (a, b) { 61 - var dateA = new Date(a.snippet.publishedAt); 62 - var dateB = new Date(b.snippet.publishedAt); 63 - return dateB - dateA; // sort by date ascending 64 - }); 65 - items = items.splice(0, maxResults); 66 - for (var i = 0; i < items.length; i++) { 67 - var url = items[i].snippet.resourceId.videoId; 68 - var img = items[i].snippet.thumbnails.high.url; 69 - var title = items[i].snippet.title; 70 - var item = document.querySelector("section.video .thumbnails a.item:nth-child(" + (i + 1) + ")"); 71 - item.setAttribute("href", "https://www.youtube.com/watch?v=" + url); 72 - item.querySelector("img").setAttribute("src", img); 73 - } 74 - document.querySelector("section.video").classList.remove("hidden"); 75 - }, function (err) { 76 - throw Error("Could not fetch YouTube playlistItems"); 77 - console.log(err); 78 - }); 79 - })(); 80 - 81 - (function Synctan() { 82 - var maxResults = 6; 83 - 84 - var url = "https://www.googleapis.com/youtube/v3/playlistItems" + "?key=" + YTapiKey + "&part=snippet" + "&maxResults=" + maxResults + "&playlistId=UUoMimPRPeR28TM3_0cinjVQ"; 85 - xhr(null, url, { type: "GET" }).then(function (result) { 86 - console.log("==--==--==-->YouTube Synctan"); 87 - console.log(result); 88 - var items = result.items; 89 - for (var i = 0; i < items.length; i++) { 90 - var url = items[i].snippet.resourceId.videoId; 91 - var img = items[i].snippet.thumbnails.high.url; 92 - var title = items[i].snippet.title; 93 - var item = document.querySelector("section.synctan .thumbnails a.item:nth-child(" + (i + 1) + ")"); 94 - item.setAttribute("href", "https://www.youtube.com/watch?v=" + url); 95 - item.querySelector("img").setAttribute("src", img); 96 - } 97 - document.querySelector("section.synctan").classList.remove("hidden"); 98 - }, function (err) { 99 - throw Error("Could not fetch YouTube playlistItems"); 100 - console.log(err); 101 - }); 102 - })(); 103 - 104 - (function Lacuna() { 105 - var maxResults = 8; 106 - 107 - // Lacuna 108 - var clientID = "6ibYZTmF5qnpvp88S9V3werVrC18WCdC"; 109 - var url = "https://api.soundcloud.com/users/247370320/tracks" + "?limit=" + maxResults + "&client_id=" + clientID; 110 - xhr(null, url, { type: "GET" }).then(function (tracks) { 111 - console.log("==--==--==--> SoundCloud Lacuna"); 112 - console.log(tracks); 113 - for (var i = 0; i < 6; i++) { 114 - var url = tracks[i].permalink_url; 115 - var img = tracks[i].artwork_url.replace("large", "t300x300"); 116 - var item = document.querySelector("section.lacuna .thumbnails a.item:nth-child(" + (i + 1) + ")"); 117 - item.setAttribute("href", url); 118 - item.querySelector("img").setAttribute("src", img); 119 - } 120 - document.querySelector("section.lacuna").classList.remove("hidden"); 121 - }, function (err) { 122 - throw Error("Could not fetch SoundCloud tracks"); 123 - console.log(err); 124 - }); 125 - })(); 126 - 127 - // discord/email popups 128 - document.addEventListener("click", function (e) { 129 - function hideAllInputs() { 130 - var inputs = document.querySelectorAll("a.has-popup input"); 131 - for (var i = 0; i < inputs.length; i++) { 132 - inputs[i].classList.add("hidden"); 133 - } 134 - } 135 - var hasClassHasPopup = e.target.classList.contains("has-popup"); 136 - var hasClassPopup = e.target.classList.contains("popup"); 137 - if (hasClassHasPopup || hasClassPopup) { 138 - var input = e.target.querySelector("input"); 139 - if (e.target.classList.contains("popup")) input = e.target; 140 - var clickedInput = e.target.classList.contains("popup"); 141 - var inputIsHidden = input.classList.contains("hidden"); 142 - if (inputIsHidden) { 143 - hideAllInputs(); 144 - input.select(); 145 - input.classList.remove("hidden"); 146 - } else if (!clickedInput) { 147 - input.classList.add("hidden"); 148 - } 149 - } else { 150 - // clicked anywhere 151 - hideAllInputs(); 152 - } 153 - }); 154 - //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpzL2dsb2JhbC5qcyJdLCJuYW1lcyI6WyJ3aW5kb3ciLCJ4aHIiLCJyZXFDb250ZW50IiwidXJsIiwib3B0aW9ucyIsImNhbGxiYWNrIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJ0eXBlIiwidW5kZWZpbmVkIiwiY29udGVudFR5cGUiLCJYTUxIdHRwUmVxdWVzdCIsIm9wZW4iLCJzZW5kIiwic2V0UmVxdWVzdEhlYWRlciIsIkpTT04iLCJzdHJpbmdpZnkiLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZWFkeVN0YXRlIiwicmVzIiwicGFyc2UiLCJyZXNwb25zZVRleHQiLCJlcnIiLCJTdHJpbmciLCJzdGF0dXMiLCJzdGFydHNXaXRoIiwiY29uc29sZSIsImVycm9yIiwiWVRhcGlLZXkiLCJWaWRlbyIsIm1heFJlc3VsdHMiLCJwZXJzb25hbFVSTCIsImNvbW1pc3Npb25zVVJMIiwicGVyc29uYWwiLCJjb21taXNzaW9ucyIsImFsbCIsInRoZW4iLCJyZXN1bHRzIiwibG9nIiwiaXRlbXMiLCJjb25jYXQiLCJzb3J0IiwiYSIsImIiLCJkYXRlQSIsIkRhdGUiLCJzbmlwcGV0IiwicHVibGlzaGVkQXQiLCJkYXRlQiIsInNwbGljZSIsImkiLCJsZW5ndGgiLCJyZXNvdXJjZUlkIiwidmlkZW9JZCIsImltZyIsInRodW1ibmFpbHMiLCJoaWdoIiwidGl0bGUiLCJpdGVtIiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwic2V0QXR0cmlidXRlIiwiY2xhc3NMaXN0IiwicmVtb3ZlIiwiRXJyb3IiLCJTeW5jdGFuIiwicmVzdWx0IiwiTGFjdW5hIiwiY2xpZW50SUQiLCJ0cmFja3MiLCJwZXJtYWxpbmtfdXJsIiwiYXJ0d29ya191cmwiLCJyZXBsYWNlIiwiYWRkRXZlbnRMaXN0ZW5lciIsImUiLCJoaWRlQWxsSW5wdXRzIiwiaW5wdXRzIiwicXVlcnlTZWxlY3RvckFsbCIsImFkZCIsImhhc0NsYXNzSGFzUG9wdXAiLCJ0YXJnZXQiLCJjb250YWlucyIsImhhc0NsYXNzUG9wdXAiLCJpbnB1dCIsImNsaWNrZWRJbnB1dCIsImlucHV0SXNIaWRkZW4iLCJzZWxlY3QiXSwibWFwcGluZ3MiOiI7O0FBQUFBLE9BQU9DLEdBQVAsR0FBYSxVQUFDQyxVQUFELEVBQWFDLEdBQWIsRUFBNkM7QUFBQSxRQUEzQkMsT0FBMkIsdUVBQWpCLEVBQWlCO0FBQUEsUUFBYkMsUUFBYTs7QUFDdEQsV0FBTyxJQUFJQyxPQUFKLENBQVksVUFBQ0MsT0FBRCxFQUFVQyxNQUFWLEVBQXFCO0FBQ3BDLFlBQUksT0FBT0osT0FBUCxJQUFrQixVQUF0QixFQUFrQ0MsV0FBV0QsT0FBWDtBQUNsQyxZQUFJLE9BQU9BLE9BQVAsSUFBa0IsVUFBdEIsRUFBa0NBLFVBQVUsRUFBVjtBQUNsQyxZQUFJQSxRQUFRSyxJQUFSLElBQWdCQyxTQUFwQixFQUFzQ04sUUFBUUssSUFBUixHQUFlLE1BQWY7QUFDdEMsWUFBSUwsUUFBUU8sV0FBUixJQUF1QkQsU0FBM0IsRUFBc0NOLFFBQVFPLFdBQVIsR0FBc0IsTUFBdEI7QUFDdEMsWUFBSVYsTUFBTSxJQUFJVyxjQUFKLEVBQVY7QUFDQVgsWUFBSVksSUFBSixDQUFTVCxRQUFRSyxJQUFqQixFQUF1Qk4sR0FBdkIsRUFBNEIsSUFBNUI7QUFDQSxZQUFJQyxRQUFRSyxJQUFSLElBQWdCLEtBQXBCLEVBQTJCO0FBQ3ZCUixnQkFBSWEsSUFBSjtBQUNILFNBRkQsTUFFTyxJQUFJVixRQUFRTyxXQUFSLElBQXVCLE1BQTNCLEVBQW1DO0FBQ3RDVixnQkFBSWMsZ0JBQUosQ0FBcUIsY0FBckIsRUFBcUMsbUNBQXJDO0FBQ0FkLGdCQUFJYSxJQUFKLENBQVMsVUFBUUUsS0FBS0MsU0FBTCxDQUFlZixVQUFmLENBQWpCO0FBQ0gsU0FITSxNQUdBLElBQUlFLFFBQVFPLFdBQVIsSUFBdUIsTUFBM0IsRUFBbUM7QUFDdENWLGdCQUFJYyxnQkFBSixDQUFxQixjQUFyQixFQUFxQyxrQkFBckM7QUFDQWQsZ0JBQUlhLElBQUosQ0FBU0UsS0FBS0Ms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VCxFQUFFTSxNQUFGLENBQVNwQixhQUFULENBQXVCLE9BQXZCLENBQVo7QUFDQSxZQUFJYyxFQUFFTSxNQUFGLENBQVNsQixTQUFULENBQW1CbUIsUUFBbkIsQ0FBNEIsT0FBNUIsQ0FBSixFQUEwQ0UsUUFBUVQsRUFBRU0sTUFBVjtBQUMxQyxZQUFJSSxlQUFlVixFQUFFTSxNQUFGLENBQVNsQixTQUFULENBQW1CbUIsUUFBbkIsQ0FBNEIsT0FBNUIsQ0FBbkI7QUFDQSxZQUFJSSxnQkFBZ0JGLE1BQU1yQixTQUFOLENBQWdCbUIsUUFBaEIsQ0FBeUIsUUFBekIsQ0FBcEI7QUFDQSxZQUFJSSxhQUFKLEVBQW1CO0FBQ2ZWO0FBQ0FRLGtCQUFNRyxNQUFOO0FBQ0FILGtCQUFNckIsU0FBTixDQUFnQkMsTUFBaEIsQ0FBdUIsUUFBdkI7QUFDSCxTQUpELE1BSU8sSUFBSSxDQUFDcUIsWUFBTCxFQUFtQjtBQUN0QkQsa0JBQU1yQixTQUFOLENBQWdCZ0IsR0FBaEIsQ0FBb0IsUUFBcEI7QUFDSDtBQUNKLEtBWkQsTUFZTztBQUNIO0FBQ0FIO0FBQ0g7QUFDSixDQXpCRCIsImZpbGUiOiJqcy9nbG9iYWwuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ3aW5kb3cueGhyID0gKHJlcUNvbnRlbnQsIHVybCwgb3B0aW9ucyA9IHt9LCBjYWxsYmFjaykgPT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PSBcImZ1bmN0aW9uXCIpIGNhbGxiYWNrID0gb3B0aW9ucztcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zID09IFwiZnVuY3Rpb25cIikgb3B0aW9ucyA9IHt9O1xuICAgICAgICBpZiAob3B0aW9ucy50eXBlID09IHVuZGVmaW5lZCkgICAgICAgIG9wdGlvbnMudHlwZSA9IFwiUE9TVFwiO1xuICAgICAgICBpZiAob3B0aW9ucy5jb250ZW50VHlwZSA9PSB1bmRlZmluZWQpIG9wdGlvbnMuY29udGVudFR5cGUgPSBcImpzb25cIjtcbiAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICB4aHIub3BlbihvcHRpb25zLnR5cGUsIHVybCwgdHJ1ZSk7XG4gICAgICAgIGlmIChvcHRpb25zLnR5cGUgPT0gXCJHRVRcIikge1xuICAgICAgICAgICAgeGhyLnNlbmQoKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLmNvbnRlbnRUeXBlID09IFwiZm9ybVwiKSB7XG4gICAgICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtdHlwZVwiLCBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiKTtcbiAgICAgICAgICAgIHhoci5zZW5kKFwiZGF0YT1cIitKU09OLnN0cmluZ2lmeShyZXFDb250ZW50KSk7XG4gICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5jb250ZW50VHlwZSA9PSBcImpzb25cIikge1xuICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LXR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIpO1xuICAgICAgICAgICAgeGhyLnNlbmQoSlNPTi5zdHJpbmdpZnkocmVxQ29udGVudCkpO1xuICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMuY29udGVudFR5cGUgPT0gXCJub25lXCIpIHtcbiAgICAgICAgICAgIHhoci5zZW5kKHJlcUNvbnRlbnQpO1xuICAgICAgICAgICAgLy8gZm9yIGZpbGUgdXBsb2FkcyAobXVsdGlwYXJ0L2Zvcm0tZGF0YSlcbiAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLmNvbnRlbnRUeXBlKSB7XG4gICAgICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtdHlwZVwiLCBvcHRpb25zLmNvbnRlbnRUeXBlKTtcbiAgICAgICAgICAgIHhoci5zZW5kKHJlcUNvbnRlbnQpO1xuICAgICAgICB9XG4gICAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gNCkge1xuICAgICAgICAgICAgICAgIGxldCByZXMgPSBKU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICBsZXQgZXJyID0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAoIVN0cmluZyh0aGlzLnN0YXR1cykuc3RhcnRzV2l0aChcIjJcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkhUVFAgZXJyb3IgXCIrdGhpcy5zdGF0dXMpO1xuICAgICAgICAgICAgICAgICAgICBlcnIgPSB0aGlzLnN0YXR1cztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGVycikgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgZWxzZSByZXNvbHZlKHJlcyk7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSBjYWxsYmFjayhyZXMsIGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIC8vIHJlc29sdmUoNSk7XG4gICAgfSk7XG59XG5cbnZhciBZVGFwaUtleSA9IFwiQUl6YVN5Qm5RbnBib1dVZld5UjhhVzZIdVFWNU1BbHhaNUZRMDkwXCI7XG5cbihmdW5jdGlvbiBWaWRlbygpIHtcbiAgICB2YXIgbWF4UmVzdWx0cyA9IDY7XG5cbiAgICB2YXIgdXJsID0gXCJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS95b3V0dWJlL3YzL3BsYXlsaXN0SXRlbXNcIlxuICAgICtcIj9rZXk9XCIrWVRhcGlLZXlcbiAgICArXCImcGFydD1zbmlwcGV0XCJcbiAgICArXCImbWF4UmVzdWx0cz1cIittYXhSZXN1bHRzXG4gICAgK1wiJnBsYXlsaXN0SWQ9XCI7XG4gICAgdmFyIHBlcnNvbmFsVVJMID0gdXJsK1wiVVV5NmpjQUY2ZlpHdHRSdmloeVFpeGJBXCI7XG4gICAgdmFyIGNvbW1pc3Npb25zVVJMID0gdXJsK1wiUEw4NC1ETkRTVThwNVdQNmpBN2h2T0NWOWRJS0JOamRDU1wiO1xuICAgIHZhciBwZXJzb25hbCA9IHhocihudWxsLCBwZXJzb25hbFVSTCwge3R5cGU6IFwiR0VUXCJ9KTtcbiAgICB2YXIgY29tbWlzc2lvbnMgPSB4aHIobnVsbCwgY29tbWlzc2lvbnNVUkwsIHt0eXBlOiBcIkdFVFwifSk7XG4gICAgUHJvbWlzZS5hbGwoW3BlcnNvbmFsLCBjb21taXNzaW9uc10pLnRoZW4oKHJlc3VsdHMpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coXCI9PS0tPT0tLT09LS0+IFlvdVR1YmUgUGVyc29uYWwgKyBDb21taXNzaW9uc1wiKTtcbiAgICAgICAgY29uc29sZS5sb2cocmVzdWx0cyk7XG4gICAgICAgIC8vIGNvbWJpbmUgdmlkZW8gYW5kIGNvbW1pc3Npb24gcmVzcG9uc2VzXG4gICAgICAgIHZhciBpdGVtcyA9IHJlc3VsdHNbMF0uaXRlbXMuY29uY2F0KHJlc3VsdHNbMV0uaXRlbXMpO1xuICAgICAgICBpdGVtcy5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtcbiAgICAgICAgICAgIHZhciBkYXRlQSA9IG5ldyBEYXRlKGEuc25pcHBldC5wdWJsaXNoZWRBdCk7XG4gICAgICAgICAgICB2YXIgZGF0ZUIgPSBuZXcgRGF0ZShiLnNuaXBwZXQucHVibGlzaGVkQXQpO1xuICAgICAgICAgICAgcmV0dXJuIGRhdGVCIC0gZGF0ZUE7IC8vIHNvcnQgYnkgZGF0ZSBhc2NlbmRpbmdcbiAgICAgICAgfSk7XG4gICAgICAgIGl0ZW1zID0gaXRlbXMuc3BsaWNlKDAsIG1heFJlc3VsdHMpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgdXJsID0gaXRlbXNbaV0uc25pcHBldC5yZXNvdXJjZUlkLnZpZGVvSWQ7XG4gICAgICAgICAgICB2YXIgaW1nID0gaXRlbXNbaV0uc25pcHBldC50aHVtYm5haWxzLmhpZ2gudXJsO1xuICAgICAgICAgICAgdmFyIHRpdGxlID0gaXRlbXNbaV0uc25pcHBldC50aXRsZTtcbiAgICAgICAgICAgIHZhciBpdGVtID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcInNlY3Rpb24udmlkZW8gLnRodW1ibmFpbHMgYS5pdGVtOm50aC1jaGlsZChcIisoaSsxKStcIilcIik7XG4gICAgICAgICAgICBpdGVtLnNldEF0dHJpYnV0ZShcImhyZWZcIiwgXCJodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PVwiK3VybCk7XG4gICAgICAgICAgICBpdGVtLnF1ZXJ5U2VsZWN0b3IoXCJpbWdcIikuc2V0QXR0cmlidXRlKFwic3JjXCIsIGltZyk7XG4gICAgICAgIH1cbiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcInNlY3Rpb24udmlkZW9cIikuY2xhc3NMaXN0LnJlbW92ZShcImhpZGRlblwiKTtcblxuICAgIH0sIChlcnIpID0+IHtcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJDb3VsZCBub3QgZmV0Y2ggWW91VHViZSBwbGF5bGlzdEl0ZW1zXCIpO1xuICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgIH0pO1xuXG59KSgpO1xuXG4oZnVuY3Rpb24gU3luY3RhbigpIHtcbiAgICB2YXIgbWF4UmVzdWx0cyA9IDY7XG5cbiAgICB2YXIgdXJsID0gXCJodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS95b3V0dWJlL3YzL3BsYXlsaXN0SXRlbXNcIlxuICAgICtcIj9rZXk9XCIrWVRhcGlLZXlcbiAgICArXCImcGFydD1zbmlwcGV0XCJcbiAgICArXCImbWF4UmVzdWx0cz1cIittYXhSZXN1bHRzXG4gICAgK1wiJnBsYXlsaXN0SWQ9VVVvTWltUFJQZVIyOFRNM18wY2lualZRXCI7XG4gICAgeGhyKG51bGwsIHVybCwge3R5cGU6IFwiR0VUXCJ9KS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coXCI9PS0tPT0tLT09LS0+WW91VHViZSBTeW5jdGFuXCIpO1xuICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgICAgICB2YXIgaXRlbXMgPSByZXN1bHQuaXRlbXM7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciB1cmwgPSBpdGVtc1tpXS5zbmlwcGV0LnJlc291cmNlSWQudmlkZW9JZDtcbiAgICAgICAgICAgIHZhciBpbWcgPSBpdGVtc1tpXS5zbmlwcGV0LnRodW1ibmFpbHMuaGlnaC51cmw7XG4gICAgICAgICAgICB2YXIgdGl0bGUgPSBpdGVtc1tpXS5zbmlwcGV0LnRpdGxlO1xuICAgICAgICAgICAgdmFyIGl0ZW0gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwic2VjdGlvbi5zeW5jdGFuIC50aHVtYm5haWxzIGEuaXRlbTpudGgtY2hpbGQoXCIrKGkrMSkrXCIpXCIpO1xuICAgICAgICAgICAgaXRlbS5zZXRBdHRyaWJ1dGUoXCJocmVmXCIsIFwiaHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj1cIit1cmwpO1xuICAgICAgICAgICAgaXRlbS5xdWVyeVNlbGVjdG9yKFwiaW1nXCIpLnNldEF0dHJpYnV0ZShcInNyY1wiLCBpbWcpO1xuICAgICAgICB9XG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJzZWN0aW9uLnN5bmN0YW5cIikuY2xhc3NMaXN0LnJlbW92ZShcImhpZGRlblwiKTtcbiAgICB9LCAoZXJyKSA9PiB7XG4gICAgICAgIHRocm93IEVycm9yKFwiQ291bGQgbm90IGZldGNoIFlvdVR1YmUgcGxheWxpc3RJdGVtc1wiKTtcbiAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICB9KTtcblxufSkoKTtcblxuKGZ1bmN0aW9uIExhY3VuYSgpIHtcbiAgICB2YXIgbWF4UmVzdWx0cyA9IDg7XG5cbiAgICAvLyBMYWN1bmFcbiAgICB2YXIgY2xpZW50SUQgPSBcIjZpYllaVG1GNXFucHZwODhTOVYzd2VyVnJDMThXQ2RDXCI7XG4gICAgdmFyIHVybCA9IFwiaHR0cHM6Ly9hcGkuc291bmRjbG91ZC5jb20vdXNlcnMvMjQ3MzcwMzIwL3RyYWNrc1wiXG4gICAgK1wiP2xpbWl0PVwiK21heFJlc3VsdHNcbiAgICArXCImY2xpZW50X2lkPVwiK2NsaWVudElEO1xuICAgIHhocihudWxsLCB1cmwsIHt0eXBlOiBcIkdFVFwifSkudGhlbigodHJhY2tzKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiPT0tLT09LS09PS0tPiBTb3VuZENsb3VkIExhY3VuYVwiKTtcbiAgICAgICAgY29uc29sZS5sb2codHJhY2tzKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA2OyBpKyspIHtcbiAgICAgICAgICAgIHZhciB1cmwgPSB0cmFja3NbaV0ucGVybWFsaW5rX3VybDtcbiAgICAgICAgICAgIHZhciBpbWcgPSB0cmFja3NbaV0uYXJ0d29ya191cmwucmVwbGFjZShcImxhcmdlXCIsIFwidDMwMHgzMDBcIik7XG4gICAgICAgICAgICB2YXIgaXRlbSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJzZWN0aW9uLmxhY3VuYSAudGh1bWJuYWlscyBhLml0ZW06bnRoLWNoaWxkKFwiKyhpKzEpK1wiKVwiKTtcbiAgICAgICAgICAgIGl0ZW0uc2V0QXR0cmlidXRlKFwiaHJlZlwiLCB1cmwpO1xuICAgICAgICAgICAgaXRlbS5xdWVyeVNlbGVjdG9yKFwiaW1nXCIpLnNldEF0dHJpYnV0ZShcInNyY1wiLCBpbWcpO1xuICAgICAgICB9XG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJzZWN0aW9uLmxhY3VuYVwiKS5jbGFzc0xpc3QucmVtb3ZlKFwiaGlkZGVuXCIpO1xuICAgIH0sIChlcnIpID0+IHtcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJDb3VsZCBub3QgZmV0Y2ggU291bmRDbG91ZCB0cmFja3NcIik7XG4gICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgfSk7XG5cbn0pKCk7XG5cbi8vIGRpc2NvcmQvZW1haWwgcG9wdXBzXG5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24oZSkge1xuICAgIGZ1bmN0aW9uIGhpZGVBbGxJbnB1dHMoKSB7XG4gICAgICAgIHZhciBpbnB1dHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiYS5oYXMtcG9wdXAgaW5wdXRcIik7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5wdXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpbnB1dHNbaV0uY2xhc3NMaXN0LmFkZChcImhpZGRlblwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgaGFzQ2xhc3NIYXNQb3B1cCA9IGUudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucyhcImhhcy1wb3B1cFwiKTtcbiAgICB2YXIgaGFzQ2xhc3NQb3B1cCA9IGUudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucyhcInBvcHVwXCIpO1xuICAgIGlmIChoYXNDbGFzc0hhc1BvcHVwIHx8IGhhc0NsYXNzUG9wdXApIHtcbiAgICAgICAgdmFyIGlucHV0ID0gZS50YXJnZXQucXVlcnlTZWxlY3RvcihcImlucHV0XCIpO1xuICAgICAgICBpZiAoZS50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKFwicG9wdXBcIikpIGlucHV0ID0gZS50YXJnZXQ7XG4gICAgICAgIHZhciBjbGlja2VkSW5wdXQgPSBlLnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoXCJwb3B1cFwiKTtcbiAgICAgICAgdmFyIGlucHV0SXNIaWRkZW4gPSBpbnB1dC5jbGFzc0xpc3QuY29udGFpbnMoXCJoaWRkZW5cIik7XG4gICAgICAgIGlmIChpbnB1dElzSGlkZGVuKSB7XG4gICAgICAgICAgICBoaWRlQWxsSW5wdXRzKCk7XG4gICAgICAgICAgICBpbnB1dC5zZWxlY3QoKTtcbiAgICAgICAgICAgIGlucHV0LmNsYXNzTGlzdC5yZW1vdmUoXCJoaWRkZW5cIik7XG4gICAgICAgIH0gZWxzZSBpZiAoIWNsaWNrZWRJbnB1dCkge1xuICAgICAgICAgICAgaW5wdXQuY2xhc3NMaXN0LmFkZChcImhpZGRlblwiKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGNsaWNrZWQgYW55d2hlcmVcbiAgICAgICAgaGlkZUFsbElucHV0cygpO1xuICAgIH1cbn0pO1xuIl19 1 + "use strict";function xhr(t,s){var r=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{},i=arguments[3];return new Promise(function(n,o){"function"==typeof r&&(i=r),"function"==typeof r&&(r={}),null==r.type&&(r.type="POST"),null==r.contentType&&(r.contentType="json");var e=new XMLHttpRequest;e.open(r.type,s,!0),"GET"==r.type?e.send():"form"==r.contentType?(e.setRequestHeader("Content-type","application/x-www-form-urlencoded"),e.send("data="+JSON.stringify(t))):"json"==r.contentType?(e.setRequestHeader("Content-type","application/json"),e.send(JSON.stringify(t))):"none"==r.contentType?e.send(t):r.contentType&&(e.setRequestHeader("Content-type",r.contentType),e.send(t)),e.onreadystatechange=function(){if(4==this.readyState){var e=JSON.parse(this.responseText),t=null;String(this.status).startsWith("2")||(console.error("HTTP error "+this.status),t=this.status),t?o(t):n(e),i&&i(e,t)}}})}window.xhr=xhr;var YTapiKey="AIzaSyBnQnpboWUfWyR8aW6HuQV5MAlxZ5FQ090";!function(){var e="https://www.googleapis.com/youtube/v3/playlistItems?key="+YTapiKey+"&part=snippet&maxResults=6&playlistId=",t=e+"PL84-DNDSU8p5WP6jA7hvOCV9dIKBNjdCS",n=xhr(null,e+"UUy6jcAF6fZGttRvihyQixbA",{type:"GET"}),o=xhr(null,t,{type:"GET"});Promise.all([n,o]).then(function(e){console.log("==--==--==--\x3e YouTube Personal + Commissions"),console.log(e);var t=e[0].items.concat(e[1].items);t.sort(function(e,t){var n=new Date(e.snippet.publishedAt);return new Date(t.snippet.publishedAt)-n}),t=t.splice(0,6);for(var n=0;n<t.length;n++){var o=t[n].snippet.resourceId.videoId,s=t[n].snippet.thumbnails.high.url,r=(t[n].snippet.title,document.querySelector("section.video .thumbnails a.item:nth-child("+(n+1)+")"));r.setAttribute("href","https://www.youtube.com/watch?v="+o),r.querySelector("img").setAttribute("src",s)}document.querySelector("section.video").classList.remove("hidden")},function(e){throw Error("Could not fetch YouTube playlistItems")})}(),xhr(null,"https://www.googleapis.com/youtube/v3/playlistItems?key="+YTapiKey+"&part=snippet&maxResults=6&playlistId=UUoMimPRPeR28TM3_0cinjVQ",{type:"GET"}).then(function(e){console.log("==--==--==--\x3eYouTube Synctan"),console.log(e);for(var t=e.items,n=0;n<t.length;n++){var o=t[n].snippet.resourceId.videoId,s=t[n].snippet.thumbnails.high.url,r=(t[n].snippet.title,document.querySelector("section.synctan .thumbnails .item:nth-child("+(n+1)+")"));r.setAttribute("href","https://www.youtube.com/watch?v="+o),r.querySelector("img").setAttribute("src",s)}document.querySelector("section.synctan").classList.remove("hidden")},function(e){throw Error("Could not fetch YouTube playlistItems")}),xhr(null,"https://api.soundcloud.com/users/247370320/tracks?limit=8&client_id=6ibYZTmF5qnpvp88S9V3werVrC18WCdC",{type:"GET"}).then(function(e){console.log("==--==--==--\x3e SoundCloud Lacuna"),console.log(e);for(var t=0;t<6;t++){var n=e[t].permalink_url,o=e[t].artwork_url.replace("large","t300x300"),s=document.querySelector("section.lacuna .thumbnails .item:nth-child("+(t+1)+")");s.setAttribute("href",n),s.querySelector("img").setAttribute("src",o)}document.querySelector("section.lacuna").classList.remove("hidden")},function(e){throw Error("Could not fetch SoundCloud tracks")}),fetch("https://api.github.com/graphql",{body:JSON.stringify({query:'\n query {\n user(login:"SpectralKH") {\n pinnedRepositories(first:6) {\n edges {\n node {\n description\n homepageUrl\n url\n name\n }\n }\n }\n }\n }\n '}),headers:{Authorization:"bearer 54269bc991628928680662193cad6c4203672f66","Content-Type":"application/x-www-form-urlencoded"},method:"POST"}).then(function(e){e.json().then(function(e){console.log("==--==--==--\x3e GitHub"),console.log(e.data);for(var t=e.data.user.pinnedRepositories.edges,n=0;n<6;n++){var o=t[n].node,s=o.description,r=o.homepageUrl,i=o.name,c=o.url,l=document.querySelector("section.github .cards .item:nth-child("+(n+1)+")");l.querySelector("p.title").innerHTML=i,l.querySelector("p.description").innerHTML=s,c&&(l.querySelector("a.repo-url").setAttribute("href",c),l.querySelector("a.repo-url").classList.remove("hidden")),r&&(l.querySelector("a.repo-website").setAttribute("href",r),l.querySelector("a.repo-website").classList.remove("hidden"))}document.querySelector("section.github").classList.remove("hidden")})}),document.addEventListener("click",function(e){function t(){for(var e=document.querySelectorAll("a.has-popup input"),t=0;t<e.length;t++)e[t].classList.add("hidden")}var n=e.target.classList.contains("has-popup"),o=e.target.classList.contains("popup");if(n||o){var s=e.target.querySelector("input");e.target.classList.contains("popup")&&(s=e.target);var r=e.target.classList.contains("popup");s.classList.contains("hidden")?(t(),s.select(),s.classList.remove("hidden")):r||s.classList.add("hidden")}else t()}); 2 + //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpzL2dsb2JhbC5qcyJdLCJuYW1lcyI6WyJ4aHIiLCJyZXFDb250ZW50IiwidXJsIiwib3B0aW9ucyIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsImNhbGxiYWNrIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJ0eXBlIiwiY29udGVudFR5cGUiLCJvcGVuIiwiWE1MSHR0cFJlcXVlc3QiLCJKU09OIiwic3RyaW5naWZ5Iiwic2VuZCIsInNldFJlcXVlc3RIZWFkZXIiLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJ0aGlzIiwicmVzcG9uc2VUZXh0IiwiU3RyaW5nIiwic3RhdHVzIiwic3RhcnRzV2l0aCIsImVyciIsInJlYWR5U3RhdGUiLCJyZXMiLCJjb25zb2xlIiwiZXJyb3IiLCJ3aW5kb3ciLCJZVGFwaUtleSIsIlZpZGVvIiwiY29tbWlzc2lvbnNVUkwiLCJwZXJzb25hbCIsImNvbW1pc3Npb25zIiwiYWxsIiwidGhlbiIsInJlc3VsdHMiLCJsb2ciLCJpdGVtcyIsImNvbmNhdCIsInNvcnQiLCJhIiwiYiIsImRhdGVBIiwiRGF0ZSIsInNuaXBwZXQiLCJwdWJsaXNoZWRBdCIsInNwbGljZSIsImkiLCJyZXNvdXJjZUlkIiwidmlkZW9JZCIsImltZyIsInRodW1ibmFpbHMiLCJoaWdoIiwiaXRlbSIsInRpdGxlIiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwic2V0QXR0cmlidXRlIiwiY2xhc3NMaXN0IiwicmVtb3ZlIiwiRXJyb3IiLCJ0cmFja3MiLCJwZXJtYWxpbmtfdXJsIiwiYXJ0d29ya191cmwiLCJyZXBsYWNlIiwiZmV0Y2giLCJib2R5IiwibWV0aG9kIiwiaGVhZGVycyIsInJlcG9VcmwiLCJyZXBvV2Vic2l0ZSIsInJlc3VsdCIsImRhdGEiLCJ1c2VyIiwicGlubmVkUmVwb3NpdG9yaWVzIiwiZWRnZXMiLCJyZXBvIiwicmVwb3MiLCJub2RlIiwiZGVzY3JpcHRpb24iLCJob21lcGFnZVVybCIsIm5hbWUiLCJhZGRFdmVudExpc3RlbmVyIiwiaW5wdXRzIiwicXVlcnlTZWxlY3RvckFsbCIsImFkZCIsImlubmVySFRNTCIsImhhc0NsYXNzSGFzUG9wdXAiLCJ0YXJnZXQiLCJoYXNDbGFzc1BvcHVwIiwiY29udGFpbnMiLCJpbnB1dCIsImNsaWNrZWRJbnB1dCIsImhpZGVBbGxJbnB1dHMiLCJlIiwic2VsZWN0Il0sIm1hcHBpbmdzIjoiYUFBQSxTQUFTQSxJQUFLQyxFQUFZQyxHQUE2QixJQUF4QkMsRUFBd0IsRUFBQUMsVUFBQUMsYUFBQUMsSUFBQUYsVUFBQSxHQUFBQSxVQUFBLEdBQWQsR0FBSUcsRUFBVUgsVUFBQSxHQUNyRCxPQUFPLElBQUlJLFFBQVEsU0FBQ0MsRUFBU0MsR0FETFIsbUJBQVpELElBQXlDTSxFQUFBSixHQUFBLG1CQUFBQSxJQUFBQSxFQUFBLElBQUFHLE1BQVZDLEVBQVVJLE9BQUFSLEVBQUFRLEtBQUEsUUFLeEJMLE1BQXZCSCxFQUFRUyxjQUEwQlQsRUFBUVMsWUFBYyxRQUo5RCxJQUFBWixFQUFXUSxJQUFBQSxlQUNUUixFQUFJYSxLQUFBVixFQUFPQSxLQUFZRCxHQUFBLEdBQ25CLE9BQUFDLEVBQU9BLEtBQ1hILEVBQUlHLE9BQ3VCRyxRQUF2QkgsRUFBUVMsYUFDWlosRUFBSUEsaUJBQVVjLGVBQWQscUNBQ0FkLEVBQUlhLEtBQUtWLFFBQVRZLEtBQUFDLFVBQUFmLEtBQzJCLFFBQXZCRSxFQUFBUyxhQUNGWixFQUFJaUIsaUJBQUosZUFBQSxvQkFERmpCLEVBQUFpQixLQUVXZCxLQUFBQSxVQUFRUyxLQUNJLFFBQWpCTSxFQUFBQSxZQUNKbEIsRUFBSWlCLEtBQUtoQixHQUVMaUIsRUFBQUEsY0FDSmxCLEVBQUlpQixpQkFBVUQsZUFBZGIsRUFBQVMsYUFGS1osRUFBQWlCLEtBR0lkLElBRVRILEVBQUFtQixtQkFBQSxXQUZLLEdBR1lQLEdBSFpRLEtBR0lqQixXQUFRUyxDQUNqQlosSUFBSWtCLEVBQUFBLEtBQUFBLE1BQWlCRSxLQUFBQyxjQUNqQkosRUFBS2hCLEtBQ1Zx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QUFtQk8sRUFBRU4sT0FBTzlCLFVBQVVnQyxTQUFTLGFBQy9DRCxFQUFnQkssRUFBRU4sT0FBTzlCLFVBQVVnQyxTQUFTLFNBQ2hELEdBQUlILEdBQW9CRSxFQUFlLENBQ3JDLElBQUlFLEVBQVFHLEVBQUVOLE9BQU9oQyxjQUFjLFNBQy9Cc0MsRUFBRU4sT0FBTzlCLFVBQVVnQyxTQUFTLFdBQVVDLEVBQVFHLEVBQUVOLFFBQ3BELElBQUlJLEVBQWVFLEVBQUVOLE9BQU85QixVQUFVZ0MsU0FBUyxTQUMzQkMsRUFBTWpDLFVBQVVnQyxTQUFTLFdBRTNDRyxJQUNBRixFQUFNSSxTQUNOSixFQUFNakMsVUFBVUMsT0FBTyxXQUNiaUMsR0FDVkQsRUFBTWpDLFVBQVUyQixJQUFJLGVBSXRCUSIsImZpbGUiOiJqcy9nbG9iYWwuanMiLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiB4aHIgKHJlcUNvbnRlbnQsIHVybCwgb3B0aW9ucyA9IHt9LCBjYWxsYmFjaykge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykgY2FsbGJhY2sgPSBvcHRpb25zXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSBvcHRpb25zID0ge31cbiAgICBpZiAob3B0aW9ucy50eXBlID09IHVuZGVmaW5lZCkgb3B0aW9ucy50eXBlID0gJ1BPU1QnXG4gICAgaWYgKG9wdGlvbnMuY29udGVudFR5cGUgPT0gdW5kZWZpbmVkKSBvcHRpb25zLmNvbnRlbnRUeXBlID0gJ2pzb24nXG4gICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpXG4gICAgeGhyLm9wZW4ob3B0aW9ucy50eXBlLCB1cmwsIHRydWUpXG4gICAgaWYgKG9wdGlvbnMudHlwZSA9PSAnR0VUJykge1xuICAgICAgeGhyLnNlbmQoKVxuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5jb250ZW50VHlwZSA9PSAnZm9ybScpIHtcbiAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCdDb250ZW50LXR5cGUnLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJylcbiAgICAgIHhoci5zZW5kKCdkYXRhPScgKyBKU09OLnN0cmluZ2lmeShyZXFDb250ZW50KSlcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuY29udGVudFR5cGUgPT0gJ2pzb24nKSB7XG4gICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcignQ29udGVudC10eXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKVxuICAgICAgeGhyLnNlbmQoSlNPTi5zdHJpbmdpZnkocmVxQ29udGVudCkpXG4gICAgfSBlbHNlIGlmIChvcHRpb25zLmNvbnRlbnRUeXBlID09ICdub25lJykge1xuICAgICAgeGhyLnNlbmQocmVxQ29udGVudClcbiAgICAgIC8vIGZvciBmaWxlIHVwbG9hZHMgKG11bHRpcGFydC9mb3JtLWRhdGEpXG4gICAgfSBlbHNlIGlmIChvcHRpb25zLmNvbnRlbnRUeXBlKSB7XG4gICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcignQ29udGVudC10eXBlJywgb3B0aW9ucy5jb250ZW50VHlwZSlcbiAgICAgIHhoci5zZW5kKHJlcUNvbnRlbnQpXG4gICAgfVxuICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IDQpIHtcbiAgICAgICAgbGV0IHJlcyA9IEpTT04ucGFyc2UodGhpcy5yZXNwb25zZVRleHQpXG4gICAgICAgIGxldCBlcnIgPSBudWxsXG4gICAgICAgIGlmICghU3RyaW5nKHRoaXMuc3RhdHVzKS5zdGFydHNXaXRoKCcyJykpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdIVFRQIGVycm9yICcgKyB0aGlzLnN0YXR1cylcbiAgICAgICAgICBlcnIgPSB0aGlzLnN0YXR1c1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnIpIHJlamVjdChlcnIpXG4gICAgICAgIGVsc2UgcmVzb2x2ZShyZXMpXG4gICAgICAgIGlmIChjYWxsYmFjaykgY2FsbGJhY2socmVzLCBlcnIpXG4gICAgICB9XG4gICAgfVxuICAgIC8vIHJlc29sdmUoNSk7XG4gIH0pXG59XG53aW5kb3cueGhyID0geGhyXG5cbnZhciBZVGFwaUtleSA9ICdBSXphU3lCblFucGJvV1VmV3lSOGFXNkh1UVY1TUFseFo1RlEwOTAnO1xuXG4oZnVuY3Rpb24gVmlkZW8gKCkge1xuICB2YXIgbWF4UmVzdWx0cyA9IDZcblxuICB2YXIgdXJsID0gJ2h0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3lvdXR1YmUvdjMvcGxheWxpc3RJdGVtcycgK1xuICAgICc/a2V5PScgKyBZVGFwaUtleSArXG4gICAgJyZwYXJ0PXNuaXBwZXQnICtcbiAgICAnJm1heFJlc3VsdHM9JyArIG1heFJlc3VsdHMgK1xuICAgICcmcGxheWxpc3RJZD0nXG4gIHZhciBwZXJzb25hbFVSTCA9IHVybCArICdVVXk2amNBRjZmWkd0dFJ2aWh5UWl4YkEnXG4gIHZhciBjb21taXNzaW9uc1VSTCA9IHVybCArICdQTDg0LURORFNVOHA1V1A2akE3aHZPQ1Y5ZElLQk5qZENTJ1xuICB2YXIgcGVyc29uYWwgPSB4aHIobnVsbCwgcGVyc29uYWxVUkwsIHsgdHlwZTogJ0dFVCcgfSlcbiAgdmFyIGNvbW1pc3Npb25zID0geGhyKG51bGwsIGNvbW1pc3Npb25zVVJMLCB7IHR5cGU6ICdHRVQnIH0pXG4gIFByb21pc2UuYWxsKFtwZXJzb25hbCwgY29tbWlzc2lvbnNdKS50aGVuKChyZXN1bHRzKSA9PiB7XG4gICAgY29uc29sZS5sb2coJz09LS09PS0tPT0tLT4gWW91VHViZSBQZXJzb25hbCArIENvbW1pc3Npb25zJylcbiAgICBjb25zb2xlLmxvZyhyZXN1bHRzKVxuICAgIC8vIGNvbWJpbmUgdmlkZW8gYW5kIGNvbW1pc3Npb24gcmVzcG9uc2VzXG4gICAgdmFyIGl0ZW1zID0gcmVzdWx0c1swXS5pdGVtcy5jb25jYXQocmVzdWx0c1sxXS5pdGVtcylcbiAgICBpdGVtcy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICB2YXIgZGF0ZUEgPSBuZXcgRGF0ZShhLnNuaXBwZXQucHVibGlzaGVkQXQpXG4gICAgICB2YXIgZGF0ZUIgPSBuZXcgRGF0ZShiLnNuaXBwZXQucHVibGlzaGVkQXQpXG4gICAgICByZXR1cm4gZGF0ZUIgLSBkYXRlQSAvLyBzb3J0IGJ5IGRhdGUgYXNjZW5kaW5nXG4gICAgfSlcbiAgICBpdGVtcyA9IGl0ZW1zLnNwbGljZSgwLCBtYXhSZXN1bHRzKVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB1cmwgPSBpdGVtc1tpXS5zbmlwcGV0LnJlc291cmNlSWQudmlkZW9JZFxuICAgICAgdmFyIGltZyA9IGl0ZW1zW2ldLnNuaXBwZXQudGh1bWJuYWlscy5oaWdoLnVybFxuICAgICAgdmFyIHRpdGxlID0gaXRlbXNbaV0uc25pcHBldC50aXRsZVxuICAgICAgdmFyIGl0ZW0gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdzZWN0aW9uLnZpZGVvIC50aHVtYm5haWxzIGEuaXRlbTpudGgtY2hpbGQoJyArIChpICsgMSkgKyAnKScpXG4gICAgICBpdGVtLnNldEF0dHJpYnV0ZSgnaHJlZicsICdodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PScgKyB1cmwpXG4gICAgICBpdGVtLnF1ZXJ5U2VsZWN0b3IoJ2ltZycpLnNldEF0dHJpYnV0ZSgnc3JjJywgaW1nKVxuICAgIH1cbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdzZWN0aW9uLnZpZGVvJykuY2xhc3NMaXN0LnJlbW92ZSgnaGlkZGVuJylcbiAgfSwgKGVycikgPT4ge1xuICAgIHRocm93IEVycm9yKCdDb3VsZCBub3QgZmV0Y2ggWW91VHViZSBwbGF5bGlzdEl0ZW1zJylcbiAgICBjb25zb2xlLmxvZyhlcnIpXG4gIH0pXG59KSgpO1xuXG4oZnVuY3Rpb24gU3luY3RhbiAoKSB7XG4gIHZhciBtYXhSZXN1bHRzID0gNlxuXG4gIHZhciB1cmwgPSAnaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20veW91dHViZS92My9wbGF5bGlzdEl0ZW1zJyArXG4gICAgJz9rZXk9JyArIFlUYXBpS2V5ICtcbiAgICAnJnBhcnQ9c25pcHBldCcgK1xuICAgICcmbWF4UmVzdWx0cz0nICsgbWF4UmVzdWx0cyArXG4gICAgJyZwbGF5bGlzdElkPVVVb01pbVBSUGVSMjhUTTNfMGNpbmpWUSdcbiAgeGhyKG51bGwsIHVybCwgeyB0eXBlOiAnR0VUJyB9KS50aGVuKChyZXN1bHQpID0+IHtcbiAgICBjb25zb2xlLmxvZygnPT0tLT09LS09PS0tPllvdVR1YmUgU3luY3RhbicpXG4gICAgY29uc29sZS5sb2cocmVzdWx0KVxuICAgIHZhciBpdGVtcyA9IHJlc3VsdC5pdGVtc1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB1cmwgPSBpdGVtc1tpXS5zbmlwcGV0LnJlc291cmNlSWQudmlkZW9JZFxuICAgICAgdmFyIGltZyA9IGl0ZW1zW2ldLnNuaXBwZXQudGh1bWJuYWlscy5oaWdoLnVybFxuICAgICAgdmFyIHRpdGxlID0gaXRlbXNbaV0uc25pcHBldC50aXRsZVxuICAgICAgdmFyIGl0ZW0gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdzZWN0aW9uLnN5bmN0YW4gLnRodW1ibmFpbHMgLml0ZW06bnRoLWNoaWxkKCcgKyAoaSArIDEpICsgJyknKVxuICAgICAgaXRlbS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCAnaHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj0nICsgdXJsKVxuICAgICAgaXRlbS5xdWVyeVNlbGVjdG9yKCdpbWcnKS5zZXRBdHRyaWJ1dGUoJ3NyYycsIGltZylcbiAgICB9XG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3Rvcignc2VjdGlvbi5zeW5jdGFuJykuY2xhc3NMaXN0LnJlbW92ZSgnaGlkZGVuJylcbiAgfSwgKGVycikgPT4ge1xuICAgIHRocm93IEVycm9yKCdDb3VsZCBub3QgZmV0Y2ggWW91VHViZSBwbGF5bGlzdEl0ZW1zJylcbiAgICBjb25zb2xlLmxvZyhlcnIpXG4gIH0pXG59KSgpO1xuXG4oZnVuY3Rpb24gTGFjdW5hICgpIHtcbiAgdmFyIG1heFJlc3VsdHMgPSA4XG5cbiAgLy8gTGFjdW5hXG4gIHZhciBjbGllbnRJRCA9ICc2aWJZWlRtRjVxbnB2cDg4UzlWM3dlclZyQzE4V0NkQydcbiAgdmFyIHVybCA9ICdodHRwczovL2FwaS5zb3VuZGNsb3VkLmNvbS91c2Vycy8yNDczNzAzMjAvdHJhY2tzJyArXG4gICAgJz9saW1pdD0nICsgbWF4UmVzdWx0cyArXG4gICAgJyZjbGllbnRfaWQ9JyArIGNsaWVudElEXG4gIHhocihudWxsLCB1cmwsIHsgdHlwZTogJ0dFVCcgfSkudGhlbigodHJhY2tzKSA9PiB7XG4gICAgY29uc29sZS5sb2coJz09LS09PS0tPT0tLT4gU291bmRDbG91ZCBMYWN1bmEnKVxuICAgIGNvbnNvbGUubG9nKHRyYWNrcylcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDY7IGkrKykge1xuICAgICAgdmFyIHVybCA9IHRyYWNrc1tpXS5wZXJtYWxpbmtfdXJsXG4gICAgICB2YXIgaW1nID0gdHJhY2tzW2ldLmFydHdvcmtfdXJsLnJlcGxhY2UoJ2xhcmdlJywgJ3QzMDB4MzAwJylcbiAgICAgIHZhciBpdGVtID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcignc2VjdGlvbi5sYWN1bmEgLnRodW1ibmFpbHMgLml0ZW06bnRoLWNoaWxkKCcgKyAoaSArIDEpICsgJyknKVxuICAgICAgaXRlbS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCB1cmwpXG4gICAgICBpdGVtLnF1ZXJ5U2VsZWN0b3IoJ2ltZycpLnNldEF0dHJpYnV0ZSgnc3JjJywgaW1nKVxuICAgIH1cbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdzZWN0aW9uLmxhY3VuYScpLmNsYXNzTGlzdC5yZW1vdmUoJ2hpZGRlbicpXG4gIH0sIChlcnIpID0+IHtcbiAgICB0aHJvdyBFcnJvcignQ291bGQgbm90IGZldGNoIFNvdW5kQ2xvdWQgdHJhY2tzJylcbiAgICBjb25zb2xlLmxvZyhlcnIpXG4gIH0pXG59KSgpO1xuXG4oZnVuY3Rpb24gR2l0SHViICgpIHtcbiAgLy8gR2l0SHViIEFQSVxuICBmZXRjaCgnaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9ncmFwaHFsJywge1xuICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIHF1ZXJ5OiBgXG4gICAgICAgICAgcXVlcnkge1xuICAgICAgICAgICAgICB1c2VyKGxvZ2luOlwiU3BlY3RyYWxLSFwiKSB7XG4gICAgICAgICAgICAgIHBpbm5lZFJlcG9zaXRvcmllcyhmaXJzdDo2KSB7XG4gICAgICAgICAgICAgICAgICBlZGdlcyB7XG4gICAgICAgICAgICAgICAgICBub2RlIHtcbiAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvblxuICAgICAgICAgICAgICAgICAgICAgIGhvbWVwYWdlVXJsXG4gICAgICAgICAgICAgICAgICAgICAgdXJsXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICBgXG4gICAgfSksXG4gICAgaGVhZGVyczoge1xuICAgICAgQXV0aG9yaXphdGlvbjogJ2JlYXJlciA1NDI2OWJjOTkxNjI4OTI4NjgwNicgKyAnNjIxOTNjYWQ2YzQyMDM2NzJmNjYnLFxuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnXG4gICAgfSxcbiAgICBtZXRob2Q6ICdQT1NUJ1xuICB9KS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgIHJlc3BvbnNlLmpzb24oKS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKCc9PS0tPT0tLT09LS0+IEdpdEh1YicpXG4gICAgICBjb25zb2xlLmxvZyhyZXN1bHQuZGF0YSlcbiAgICAgIGNvbnN0IHJlcG9zID0gcmVzdWx0LmRhdGEudXNlci5waW5uZWRSZXBvc2l0b3JpZXMuZWRnZXNcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHJlcG8gPSByZXBvc1tpXS5ub2RlXG4gICAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gcmVwby5kZXNjcmlwdGlvblxuICAgICAgICBjb25zdCByZXBvV2Vic2l0ZSA9IHJlcG8uaG9tZXBhZ2VVcmxcbiAgICAgICAgY29uc3QgbmFtZSA9IHJlcG8ubmFtZVxuICAgICAgICBjb25zdCByZXBvVXJsID0gcmVwby51cmxcbiAgICAgICAgLy8gY29uc3QgaW1nID0gdHJhY2tzW2ldLmFydHdvcmtfdXJsLnJlcGxhY2UoJ2xhcmdlJywgJ3QzMDB4MzAwJylcbiAgICAgICAgY29uc3QgaXRlbSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ3NlY3Rpb24uZ2l0aHViIC5jYXJkcyAuaXRlbTpudGgtY2hpbGQoJyArIChpICsgMSkgKyAnKScpXG4gICAgICAgIC8vIGl0ZW0uc2V0QXR0cmlidXRlKCdocmVmJywgdXJsKVxuICAgICAgICBpdGVtLnF1ZXJ5U2VsZWN0b3IoJ3AudGl0bGUnKS5pbm5lckhUTUwgPSBuYW1lXG4gICAgICAgIGl0ZW0ucXVlcnlTZWxlY3RvcigncC5kZXNjcmlwdGlvbicpLmlubmVySFRNTCA9IGRlc2NyaXB0aW9uXG4gICAgICAgIGlmIChyZXBvVXJsKSB7XG4gICAgICAgICAgaXRlbS5xdWVyeVNlbGVjdG9yKCdhLnJlcG8tdXJsJykuc2V0QXR0cmlidXRlKCdocmVmJywgcmVwb1VybClcbiAgICAgICAgICBpdGVtLnF1ZXJ5U2VsZWN0b3IoJ2EucmVwby11cmwnKS5jbGFzc0xpc3QucmVtb3ZlKCdoaWRkZW4nKVxuICAgICAgICB9XG4gICAgICAgIGlmIChyZXBvV2Vic2l0ZSkge1xuICAgICAgICAgIGl0ZW0ucXVlcnlTZWxlY3RvcignYS5yZXBvLXdlYnNpdGUnKS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCByZXBvV2Vic2l0ZSlcbiAgICAgICAgICBpdGVtLnF1ZXJ5U2VsZWN0b3IoJ2EucmVwby13ZWJzaXRlJykuY2xhc3NMaXN0LnJlbW92ZSgnaGlkZGVuJylcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3Rvcignc2VjdGlvbi5naXRodWInKS5jbGFzc0xpc3QucmVtb3ZlKCdoaWRkZW4nKVxuICAgIH0pXG4gIH0pXG59KSgpXG5cbi8vIGRpc2NvcmQvZW1haWwgcG9wdXBzXG5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uIChlKSB7XG4gIGZ1bmN0aW9uIGhpZGVBbGxJbnB1dHMgKCkge1xuICAgIHZhciBpbnB1dHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdhLmhhcy1wb3B1cCBpbnB1dCcpXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbnB1dHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlucHV0c1tpXS5jbGFzc0xpc3QuYWRkKCdoaWRkZW4nKVxuICAgIH1cbiAgfVxuICB2YXIgaGFzQ2xhc3NIYXNQb3B1cCA9IGUudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnaGFzLXBvcHVwJylcbiAgdmFyIGhhc0NsYXNzUG9wdXAgPSBlLnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ3BvcHVwJylcbiAgaWYgKGhhc0NsYXNzSGFzUG9wdXAgfHwgaGFzQ2xhc3NQb3B1cCkge1xuICAgIHZhciBpbnB1dCA9IGUudGFyZ2V0LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JylcbiAgICBpZiAoZS50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdwb3B1cCcpKSBpbnB1dCA9IGUudGFyZ2V0XG4gICAgdmFyIGNsaWNrZWRJbnB1dCA9IGUudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygncG9wdXAnKVxuICAgIHZhciBpbnB1dElzSGlkZGVuID0gaW5wdXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdoaWRkZW4nKVxuICAgIGlmIChpbnB1dElzSGlkZGVuKSB7XG4gICAgICBoaWRlQWxsSW5wdXRzKClcbiAgICAgIGlucHV0LnNlbGVjdCgpXG4gICAgICBpbnB1dC5jbGFzc0xpc3QucmVtb3ZlKCdoaWRkZW4nKVxuICAgIH0gZWxzZSBpZiAoIWNsaWNrZWRJbnB1dCkge1xuICAgICAgaW5wdXQuY2xhc3NMaXN0LmFkZCgnaGlkZGVuJylcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gY2xpY2tlZCBhbnl3aGVyZVxuICAgIGhpZGVBbGxJbnB1dHMoKVxuICB9XG59KVxuIl19
-180
docs/js/home.js
··· 1 - "use strict"; 2 - 3 - // YouTube API 4 - function start() { 5 - gapi.client.init({ 6 - "apiKey": "AIzaSyBnQnpboWUfWyR8aW6HuQV5MAlxZ5FQ090", 7 - "discoveryDocs": ["https://www.googleapis.com/discovery/v1/apis/youtube/v3/rest"] 8 - }).then(function () { 9 - 10 - // SYNCTAN 11 - // API request details 12 - var requestSynctan = gapi.client.youtube.playlistItems.list({ 13 - part: "snippet", 14 - playlistId: "UUoMimPRPeR28TM3_0cinjVQ", 15 - maxResults: 8 16 - }); 17 - // Perform API request, process response 18 - requestSynctan.execute(function (response) { 19 - var nthChild, 20 - arrayLength = response.result.items.length; 21 - for (var i = 0; i < arrayLength; i++) { 22 - nthChild = i + 1; 23 - $("section.synctan .item:nth-child(" + nthChild + ")").attr("href", "https://www.youtube.com/watch?v=" + response.result.items[i].snippet.resourceId.videoId); 24 - $("section.synctan .item:nth-child(" + nthChild + ") div.img").attr("style", 'background-image: url("' + response.result.items[i].snippet.thumbnails.high.url + '")').siblings(".title").html(response.result.items[i].snippet.title); 25 - } 26 - }); 27 - 28 - // TRAP UNITED 29 - // API request details 30 - var requestTrapUnited = gapi.client.youtube.search.list({ 31 - part: "snippet", 32 - channelId: "UC0kHs8aHGQEtQODjt9XHjfQ", 33 - type: "video", 34 - publishedBefore: "2017-05-14T00:00:00Z", 35 - order: "date", 36 - maxResults: 8 37 - }); 38 - // Perform API request, process response 39 - requestTrapUnited.execute(function (response) { 40 - var nthChild, 41 - arrayLength = response.result.items.length; 42 - for (var i = 0; i < arrayLength; i++) { 43 - nthChild = i + 1; 44 - $("section.trap-united .item:nth-child(" + nthChild + ")").attr("href", "https://www.youtube.com/watch?v=" + response.result.items[i].id.videoId); 45 - $("section.trap-united .item:nth-child(" + nthChild + ") div.img").attr("style", 'background-image: url("' + response.result.items[i].snippet.thumbnails.high.url + '")').siblings(".title").html(response.result.items[i].snippet.title); 46 - } 47 - }); 48 - 49 - // VIDEO (personal) 50 - // API request details 51 - var requestVideo = gapi.client.youtube.playlistItems.list({ 52 - part: "snippet", 53 - playlistId: "UUy6jcAF6fZGttRvihyQixbA", 54 - maxResults: 8 55 - }); 56 - var requestCommissions = gapi.client.youtube.playlistItems.list({ 57 - part: "snippet", 58 - playlistId: "PL84-DNDSU8p5WP6jA7hvOCV9dIKBNjdCS", 59 - maxResults: 8 60 - }); 61 - // Perform API request, process response 62 - var videoResponse, commissionResponse; 63 - requestVideo.execute(function (response) { 64 - videoResponse = response; 65 - processResponses(); 66 - }); 67 - requestCommissions.execute(function (response) { 68 - commissionResponse = response; 69 - processResponses(); 70 - }); 71 - function processResponses() { 72 - if (videoResponse && commissionResponse) { 73 - // combine video and commission responses 74 - resultItems = videoResponse.result.items.concat(commissionResponse.result.items); 75 - resultItems.sort(function (a, b) { 76 - var dateA = new Date(a.snippet.publishedAt); 77 - var dateB = new Date(b.snippet.publishedAt); 78 - return dateB - dateA; // sort by date ascending 79 - }); 80 - resultItems = resultItems.splice(0, 8); 81 - // insert into page 82 - var nthChild; 83 - for (var i = 0; i < resultItems.length; i++) { 84 - nthChild = i + 1; 85 - $("section.video .item:nth-child(" + nthChild + ") div.img").attr("style", 'background-image: url("' + resultItems[i].snippet.thumbnails.high.url + '")').siblings(".title").html(resultItems[i].snippet.title).parent().attr("href", "https://www.youtube.com/watch?v=" + resultItems[i].snippet.resourceId.videoId); 86 - } 87 - } 88 - } 89 - }); 90 - } 91 - gapi.load("client", start); 92 - 93 - // SoundCloud API 94 - SC.initialize({ 95 - client_id: "6ibYZTmF5qnpvp88S9V3werVrC18WCdC" //change 96 - }); 97 - SC.get("/users/247370320/tracks", { limit: 8 }).then(function (tracks) { 98 - for (var i = 0; i < tracks.length; i++) { 99 - nthChild = i + 1; 100 - // coverSrc = JSON.stringify(tracks[i].artwork_url.replace("large", "t300x300")); 101 - $("section.lacuna .item:nth-child(" + nthChild + ") div.img").attr("style", 'background-image: url("' + tracks[i].artwork_url.replace("large", "t300x300") + '")').parent().attr("href", tracks[i].permalink_url); 102 - } 103 - }); 104 - 105 - // Responsive YT thumbnails/SC covers 106 - function resizeStuff() { 107 - var newHeight = $("section.adjust-height .item").width() / 16 * 9; 108 - $("section.adjust-height .item").css("height", newHeight + "px"); 109 - 110 - var newHeight = $("section:not(.adjust-height) .item").width(); 111 - $("section:not(.adjust-height) .item").css("height", newHeight + "px"); 112 - } 113 - resizeStuff(); 114 - $(window).resize(resizeStuff); 115 - 116 - // Image hover overlap/z-index fix 117 - var high = 3; 118 - $(".item").hover(function () { 119 - $(this).css({ "z-index": high }); 120 - high++; 121 - }); 122 - 123 - // Chevron scroller 124 - var spacerHeight; 125 - $(".chevron").on("click", function () { 126 - spacerHeight = $(".spacer").height(); 127 - console.log(spacerHeight); 128 - window.scroll({ top: spacerHeight, left: 0, behavior: "smooth" }); 129 - }); 130 - 131 - // Discord link popup 132 - $("body").on("click", function (e) { 133 - // Stop if input field was clicked 134 - if (!$(e.target).hasClass("popup-input")) { 135 - // If icon was clicked 136 - if ($(e.target).hasClass("discord")) { 137 - // Select text if hidden 138 - if ($(e.target).children(".popup").hasClass("hidden")) { 139 - $(e.target).children(".popup").children("input").select(); 140 - } 141 - // Toggle visibility 142 - $(e.target).children(".popup").toggleClass("hidden"); 143 - } 144 - // If hidden and icon was not clicked 145 - if (!$(".discord .popup").hasClass("hidden") && !$(e.target).hasClass("discord")) { 146 - // Hide 147 - $(".discord .popup").addClass("hidden"); 148 - } 149 - } 150 - }); 151 - // Email link popup 152 - $("body").on("click", function (e) { 153 - // Stop if input field was clicked 154 - if (!$(e.target).hasClass("popup-input")) { 155 - // If icon was clicked 156 - if ($(e.target).hasClass("email")) { 157 - // Select text if hidden 158 - if ($(e.target).children(".popup").hasClass("hidden")) { 159 - $(e.target).children(".popup").children("input").select(); 160 - } 161 - // Toggle visibility 162 - $(e.target).children(".popup").toggleClass("hidden"); 163 - } 164 - // If hidden and icon was not clicked 165 - if (!$(".email .popup").hasClass("hidden") && !$(e.target).hasClass("email")) { 166 - // Hide 167 - $(".email .popup").addClass("hidden"); 168 - } 169 - } 170 - }); 171 - 172 - // Social media links anchor 173 - function smlAnchor() { 174 - var sml = $(".personal-links"); // social media links 175 - var sasml = $(".spacer").height() - sml.height(); // space above social media links 176 - if (sasml < window.pageYOffset) sml.css("position", "fixed").css("top", "0px");else sml.css("position", "").css("top", ""); 177 - } 178 - $(window).scroll(smlAnchor); 179 - $(window).resize(smlAnchor); 180 - //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpzL2hvbWUuanMiXSwibmFtZXMiOlsic3RhcnQiLCJnYXBpIiwiY2xpZW50IiwiaW5pdCIsInRoZW4iLCJyZXF1ZXN0U3luY3RhbiIsInlvdXR1YmUiLCJwbGF5bGlzdEl0ZW1zIiwibGlzdCIsInBhcnQiLCJwbGF5bGlzdElkIiwibWF4UmVzdWx0cyIsImV4ZWN1dGUiLCJyZXNwb25zZSIsIm50aENoaWxkIiwiYXJyYXlMZW5ndGgiLCJyZXN1bHQiLCJpdGVtcyIsImxlbmd0aCIsImkiLCIkIiwiYXR0ciIsInNuaXBwZXQiLCJyZXNvdXJjZUlkIiwidmlkZW9JZCIsInRodW1ibmFpbHMiLCJoaWdoIiwidXJsIiwic2libGluZ3MiLCJodG1sIiwidGl0bGUiLCJyZXF1ZXN0VHJhcFVuaXRlZCIsInNlYXJjaCIsImNoYW5uZWxJZCIsInR5cGUiLCJwdWJsaXNoZWRCZWZvcmUiLCJvcmRlciIsImlkIiwicmVxdWVzdFZpZGVvIiwicmVxdWVzdENvbW1pc3Npb25zIiwidmlkZW9SZXNwb25zZSIsImNvbW1pc3Npb25SZXNwb25zZSIsInByb2Nlc3NSZXNwb25zZXMiLCJyZXN1bHRJdGVtcyIsImNvbmNhdCIsInNvcnQiLCJhIiwiYiIsImRhdGVBIiwiRGF0ZSIsInB1Ymxpc2hlZEF0IiwiZGF0ZUIiLCJzcGxpY2UiLCJwYXJlbnQiLCJsb2FkIiwiU0MiLCJpbml0aWFsaXplIiwiY2xpZW50X2lkIiwiZ2V0IiwibGltaXQiLCJ0cmFja3MiLCJhcnR3b3JrX3VybCIsInJlcGxhY2UiLCJwZXJtYWxpbmtfdXJsIiwicmVzaXplU3R1ZmYiLCJuZXdIZWlnaHQiLCJ3aWR0aCIsImNzcyIsIndpbmRvdyIsInJlc2l6ZSIsImhvdmVyIiwic3BhY2VySGVpZ2h0Iiwib24iLCJoZWlnaHQiLCJjb25zb2xlIiwibG9nIiwic2Nyb2xsIiwidG9wIiwibGVmdCIsImJlaGF2aW9yIiwiZSIsInRhcmdldCIsImhhc0NsYXNzIiwiY2hpbGRyZW4iLCJzZWxlY3QiLCJ0b2dnbGVD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L2hvbWUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBZb3VUdWJlIEFQSVxuZnVuY3Rpb24gc3RhcnQoKSB7XG5cdGdhcGkuY2xpZW50LmluaXQoe1xuXHRcdFwiYXBpS2V5XCI6IFwiQUl6YVN5Qm5RbnBib1dVZld5UjhhVzZIdVFWNU1BbHhaNUZRMDkwXCIsXG5cdFx0XCJkaXNjb3ZlcnlEb2NzXCI6IFtcImh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2Rpc2NvdmVyeS92MS9hcGlzL3lvdXR1YmUvdjMvcmVzdFwiXVxuXHR9KS50aGVuKGZ1bmN0aW9uKCkge1xuXG5cdFx0Ly8gU1lOQ1RBTlxuXHRcdC8vIEFQSSByZXF1ZXN0IGRldGFpbHNcblx0XHR2YXIgcmVxdWVzdFN5bmN0YW4gPSBnYXBpLmNsaWVudC55b3V0dWJlLnBsYXlsaXN0SXRlbXMubGlzdCh7XG5cdFx0XHRwYXJ0OiBcInNuaXBwZXRcIixcblx0XHRcdHBsYXlsaXN0SWQ6IFwiVVVvTWltUFJQZVIyOFRNM18wY2lualZRXCIsXG5cdFx0XHRtYXhSZXN1bHRzOiA4XG5cdFx0fSk7XG5cdFx0Ly8gUGVyZm9ybSBBUEkgcmVxdWVzdCwgcHJvY2VzcyByZXNwb25zZVxuXHRcdHJlcXVlc3RTeW5jdGFuLmV4ZWN1dGUoZnVuY3Rpb24ocmVzcG9uc2UpIHtcblx0XHRcdHZhciBudGhDaGlsZCwgYXJyYXlMZW5ndGggPSByZXNwb25zZS5yZXN1bHQuaXRlbXMubGVuZ3RoO1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheUxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdG50aENoaWxkID0gaSsxO1xuXHRcdFx0XHQkKFwic2VjdGlvbi5zeW5jdGFuIC5pdGVtOm50aC1jaGlsZChcIitudGhDaGlsZCtcIilcIilcblx0XHRcdFx0XHQuYXR0cihcImhyZWZcIiwgXCJodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PVwiK3Jlc3BvbnNlLnJlc3VsdC5pdGVtc1tpXS5zbmlwcGV0LnJlc291cmNlSWQudmlkZW9JZCk7XG5cdFx0XHRcdCQoXCJzZWN0aW9uLnN5bmN0YW4gLml0ZW06bnRoLWNoaWxkKFwiK250aENoaWxkK1wiKSBkaXYuaW1nXCIpXG5cdFx0XHRcdFx0LmF0dHIoXCJzdHlsZVwiLCAnYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiJytyZXNwb25zZS5yZXN1bHQuaXRlbXNbaV0uc25pcHBldC50aHVtYm5haWxzLmhpZ2gudXJsKydcIiknKVxuXHRcdFx0XHRcdC5zaWJsaW5ncyhcIi50aXRsZVwiKS5odG1sKHJlc3BvbnNlLnJlc3VsdC5pdGVtc1tpXS5zbmlwcGV0LnRpdGxlKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdC8vIFRSQVAgVU5JVEVEXG5cdFx0Ly8gQVBJIHJlcXVlc3QgZGV0YWlsc1xuXHRcdHZhciByZXF1ZXN0VHJhcFVuaXRlZCA9IGdhcGkuY2xpZW50LnlvdXR1YmUuc2VhcmNoLmxpc3Qoe1xuXHRcdFx0cGFydDogXCJzbmlwcGV0XCIsXG4gICAgICAgICAgICBjaGFubmVsSWQ6IFwiVUMwa0hzOGFIR1FFdFFPRGp0OVhIamZRXCIsXG4gICAgICAgICAgICB0eXBlOiBcInZpZGVvXCIsXG4gICAgICAgICAgICBwdWJsaXNoZWRCZWZvcmU6IFwiMjAxNy0wNS0xNFQwMDowMDowMFpcIixcbiAgICAgICAgICAgIG9yZGVyOiBcImRhdGVcIixcblx0XHRcdG1heFJlc3VsdHM6IDgsXG5cdFx0fSk7XG5cdFx0Ly8gUGVyZm9ybSBBUEkgcmVxdWVzdCwgcHJvY2VzcyByZXNwb25zZVxuXHRcdHJlcXVlc3RUcmFwVW5pdGVkLmV4ZWN1dGUoZnVuY3Rpb24ocmVzcG9uc2UpIHtcblx0XHRcdHZhciBudGhDaGlsZCwgYXJyYXlMZW5ndGggPSByZXNwb25zZS5yZXN1bHQuaXRlbXMubGVuZ3RoO1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheUxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdG50aENoaWxkID0gaSsxO1xuXHRcdFx0XHQkKFwic2VjdGlvbi50cmFwLXVuaXRlZCAuaXRlbTpudGgtY2hpbGQoXCIrbnRoQ2hpbGQrXCIpXCIpXG5cdFx0XHRcdFx0LmF0dHIoXCJocmVmXCIsIFwiaHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj1cIityZXNwb25zZS5yZXN1bHQuaXRlbXNbaV0uaWQudmlkZW9JZCk7XG5cdFx0XHRcdCQoXCJzZWN0aW9uLnRyYXAtdW5pdGVkIC5pdGVtOm50aC1jaGlsZChcIitudGhDaGlsZCtcIikgZGl2LmltZ1wiKVxuXHRcdFx0XHRcdC5hdHRyKFwic3R5bGVcIiwgJ2JhY2tncm91bmQtaW1hZ2U6IHVybChcIicrcmVzcG9uc2UucmVzdWx0Lml0ZW1zW2ldLnNuaXBwZXQudGh1bWJuYWlscy5oaWdoLnVybCsnXCIpJylcblx0XHRcdFx0XHQuc2libGluZ3MoXCIudGl0bGVcIikuaHRtbChyZXNwb25zZS5yZXN1bHQuaXRlbXNbaV0uc25pcHBldC50aXRsZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHQvLyBWSURFTyAocGVyc29uYWwpXG5cdFx0Ly8gQVBJIHJlcXVlc3QgZGV0YWlsc1xuXHRcdHZhciByZXF1ZXN0VmlkZW8gPSBnYXBpLmNsaWVudC55b3V0dWJlLnBsYXlsaXN0SXRlbXMubGlzdCh7XG5cdFx0XHRwYXJ0OiBcInNuaXBwZXRcIixcblx0XHRcdHBsYXlsaXN0SWQ6IFwiVVV5NmpjQUY2ZlpHdHRSdmloeVFpeGJBXCIsXG5cdFx0XHRtYXhSZXN1bHRzOiA4XG5cdFx0fSk7XG5cdFx0dmFyIHJlcXVlc3RDb21taXNzaW9ucyA9IGdhcGkuY2xpZW50LnlvdXR1YmUucGxheWxpc3RJdGVtcy5saXN0KHtcblx0XHRcdHBhcnQ6IFwic25pcHBldFwiLFxuXHRcdFx0cGxheWxpc3RJZDogXCJQTDg0LURORFNVOHA1V1A2akE3aHZPQ1Y5ZElLQk5qZENTXCIsXG5cdFx0XHRtYXhSZXN1bHRzOiA4XG5cdFx0fSk7XG5cdFx0Ly8gUGVyZm9ybSBBUEkgcmVxdWVzdCwgcHJvY2VzcyByZXNwb25zZVxuICAgICAgICB2YXIgdmlkZW9SZXNwb25zZSwgY29tbWlzc2lvblJlc3BvbnNlO1xuXHRcdHJlcXVlc3RWaWRlby5leGVjdXRlKGZ1bmN0aW9uKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICB2aWRlb1Jlc3BvbnNlID0gcmVzcG9uc2U7XG4gICAgICAgICAgICBwcm9jZXNzUmVzcG9uc2VzKCk7XG5cdFx0fSk7XG4gICAgICAgIHJlcXVlc3RDb21taXNzaW9ucy5leGVjdXRlKGZ1bmN0aW9uKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICBjb21taXNzaW9uUmVzcG9uc2UgPSByZXNwb25zZTtcbiAgICAgICAgICAgIHByb2Nlc3NSZXNwb25zZXMoKTtcblx0XHR9KTtcbiAgICAgICAgZnVuY3Rpb24gcHJvY2Vzc1Jlc3BvbnNlcygpIHtcbiAgICAgICAgICAgIGlmICh2aWRlb1Jlc3BvbnNlICYmIGNvbW1pc3Npb25SZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIC8vIGNvbWJpbmUgdmlkZW8gYW5kIGNvbW1pc3Npb24gcmVzcG9uc2VzXG4gICAgICAgICAgICAgICAgcmVzdWx0SXRlbXMgPSB2aWRlb1Jlc3BvbnNlLnJlc3VsdC5pdGVtcy5jb25jYXQoY29tbWlzc2lvblJlc3BvbnNlLnJlc3VsdC5pdGVtcyk7XG4gICAgICAgICAgICAgICAgcmVzdWx0SXRlbXMuc29ydChmdW5jdGlvbihhLCBiKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkYXRlQSA9IG5ldyBEYXRlKGEuc25pcHBldC5wdWJsaXNoZWRBdCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkYXRlQiA9IG5ldyBEYXRlKGIuc25pcHBldC5wdWJsaXNoZWRBdCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRlQiAtIGRhdGVBOyAvLyBzb3J0IGJ5IGRhdGUgYXNjZW5kaW5nXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0SXRlbXMgPSByZXN1bHRJdGVtcy5zcGxpY2UoMCwgOCk7XG4gICAgICAgICAgICAgICAgLy8gaW5zZXJ0IGludG8gcGFnZVxuICAgICAgICAgICAgICAgIHZhciBudGhDaGlsZDtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdEl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgXHRudGhDaGlsZCA9IGkrMTtcbiAgICAgICAgICAgICAgICBcdCQoXCJzZWN0aW9uLnZpZGVvIC5pdGVtOm50aC1jaGlsZChcIitudGhDaGlsZCtcIikgZGl2LmltZ1wiKVxuICAgICAgICAgICAgICAgIFx0XHQuYXR0cihcInN0eWxlXCIsICdiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCInK3Jlc3VsdEl0ZW1zW2ldLnNuaXBwZXQudGh1bWJuYWlscy5oaWdoLnVybCsnXCIpJylcbiAgICAgICAgICAgICAgICBcdFx0LnNpYmxpbmdzKFwiLnRpdGxlXCIpLmh0bWwocmVzdWx0SXRlbXNbaV0uc25pcHBldC50aXRsZSlcbiAgICAgICAgICAgICAgICBcdFx0LnBhcmVudCgpLmF0dHIoXCJocmVmXCIsIFwiaHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj1cIityZXN1bHRJdGVtc1tpXS5zbmlwcGV0LnJlc291cmNlSWQudmlkZW9JZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cblx0fSk7XG59XG5nYXBpLmxvYWQoXCJjbGllbnRcIiwgc3RhcnQpO1xuXG4vLyBTb3VuZENsb3VkIEFQSVxuU0MuaW5pdGlhbGl6ZSh7XG5cdGNsaWVudF9pZDogXCI2aWJZWlRtRjVxbnB2cDg4UzlWM3dlclZyQzE4V0NkQ1wiIC8vY2hhbmdlXG59KTtcblNDLmdldChcIi91c2Vycy8yNDczNzAzMjAvdHJhY2tzXCIsIHtsaW1pdDogOH0pLnRoZW4oZnVuY3Rpb24odHJhY2tzKSB7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdHJhY2tzLmxlbmd0aDsgaSsrKSB7XG5cdFx0bnRoQ2hpbGQgPSBpKzE7XG5cdFx0Ly8gY292ZXJTcmMgPSBKU09OLnN0cmluZ2lmeSh0cmFja3NbaV0uYXJ0d29ya191cmwucmVwbGFjZShcImxhcmdlXCIsIFwidDMwMHgzMDBcIikpO1xuXHRcdCQoXCJzZWN0aW9uLmxhY3VuYSAuaXRlbTpudGgtY2hpbGQoXCIrbnRoQ2hpbGQrXCIpIGRpdi5pbWdcIilcblx0XHRcdC5hdHRyKFwic3R5bGVcIiwgJ2JhY2tncm91bmQtaW1hZ2U6IHVybChcIicrdHJhY2tzW2ldLmFydHdvcmtfdXJsLnJlcGxhY2UoXCJsYXJnZVwiLCBcInQzMDB4MzAwXCIpKydcIiknKVxuXHRcdFx0LnBhcmVudCgpLmF0dHIoXCJocmVmXCIsIHRyYWNrc1tpXS5wZXJtYWxpbmtfdXJsKTtcblx0fVxufSk7XG5cbi8vIFJlc3BvbnNpdmUgWVQgdGh1bWJuYWlscy9TQyBjb3ZlcnNcbmZ1bmN0aW9uIHJlc2l6ZVN0dWZmKCkge1xuXHR2YXIgbmV3SGVpZ2h0ID0gJChcInNlY3Rpb24uYWRqdXN0LWhlaWdodCAuaXRlbVwiKS53aWR0aCgpIC8gMTYgKiA5O1xuXHQkKFwic2VjdGlvbi5hZGp1c3QtaGVpZ2h0IC5pdGVtXCIpLmNzcyhcImhlaWdodFwiLCBuZXdIZWlnaHQrXCJweFwiKTtcblxuXHR2YXIgbmV3SGVpZ2h0ID0gJChcInNlY3Rpb246bm90KC5hZGp1c3QtaGVpZ2h0KSAuaXRlbVwiKS53aWR0aCgpO1xuXHQkKFwic2VjdGlvbjpub3QoLmFkanVzdC1oZWlnaHQpIC5pdGVtXCIpLmNzcyhcImhlaWdodFwiLCBuZXdIZWlnaHQrXCJweFwiKTtcbn1cbnJlc2l6ZVN0dWZmKCk7XG4kKHdpbmRvdykucmVzaXplKHJlc2l6ZVN0dWZmKTtcblxuLy8gSW1hZ2UgaG92ZXIgb3ZlcmxhcC96LWluZGV4IGZpeFxudmFyIGhpZ2ggPSAzO1xuJChcIi5pdGVtXCIpLmhvdmVyKGZ1bmN0aW9uKCkge1xuXHQkKHRoaXMpLmNzcyh7XCJ6LWluZGV4XCI6IGhpZ2h9KTtcblx0aGlnaCsrO1xufSk7XG5cbi8vIENoZXZyb24gc2Nyb2xsZXJcbnZhciBzcGFjZXJIZWlnaHQ7XG4kKFwiLmNoZXZyb25cIikub24oXCJjbGlja1wiLCBmdW5jdGlvbigpIHtcblx0c3BhY2VySGVpZ2h0ID0gJChcIi5zcGFjZXJcIikuaGVpZ2h0KCk7XG5cdGNvbnNvbGUubG9nKHNwYWNlckhlaWdodCk7XG5cdHdpbmRvdy5zY3JvbGwoeyB0b3A6IHNwYWNlckhlaWdodCwgbGVmdDogMCwgYmVoYXZpb3I6IFwic21vb3RoXCIgfSk7XG59KTtcblxuLy8gRGlzY29yZCBsaW5rIHBvcHVwXG4kKFwiYm9keVwiKS5vbihcImNsaWNrXCIsIGZ1bmN0aW9uKGUpIHtcblx0Ly8gU3RvcCBpZiBpbnB1dCBmaWVsZCB3YXMgY2xpY2tlZFxuXHRpZiAoISQoZS50YXJnZXQpLmhhc0NsYXNzKFwicG9wdXAtaW5wdXRcIikpIHtcblx0XHQvLyBJZiBpY29uIHdhcyBjbGlja2VkXG5cdFx0aWYgKCQoZS50YXJnZXQpLmhhc0NsYXNzKFwiZGlzY29yZFwiKSkge1xuXHRcdFx0Ly8gU2VsZWN0IHRleHQgaWYgaGlkZGVuXG5cdFx0XHRpZiAoJChlLnRhcmdldCkuY2hpbGRyZW4oXCIucG9wdXBcIikuaGFzQ2xhc3MoXCJoaWRkZW5cIikpIHtcblx0XHRcdFx0JChlLnRhcmdldCkuY2hpbGRyZW4oXCIucG9wdXBcIikuY2hpbGRyZW4oXCJpbnB1dFwiKS5zZWxlY3QoKTtcblx0XHRcdH1cblx0XHRcdC8vIFRvZ2dsZSB2aXNpYmlsaXR5XG5cdFx0XHQkKGUudGFyZ2V0KS5jaGlsZHJlbihcIi5wb3B1cFwiKS50b2dnbGVDbGFzcyhcImhpZGRlblwiKTtcblx0XHR9XG5cdFx0Ly8gSWYgaGlkZGVuIGFuZCBpY29uIHdhcyBub3QgY2xpY2tlZFxuXHRcdGlmICghJChcIi5kaXNjb3JkIC5wb3B1cFwiKS5oYXNDbGFzcyhcImhpZGRlblwiKSAmJiAhJChlLnRhcmdldCkuaGFzQ2xhc3MoXCJkaXNjb3JkXCIpKSB7XG5cdFx0XHQvLyBIaWRlXG5cdFx0XHQkKFwiLmRpc2NvcmQgLnBvcHVwXCIpLmFkZENsYXNzKFwiaGlkZGVuXCIpO1xuXHRcdH1cblx0fVxufSk7XG4vLyBFbWFpbCBsaW5rIHBvcHVwXG4kKFwiYm9keVwiKS5vbihcImNsaWNrXCIsIGZ1bmN0aW9uKGUpIHtcblx0Ly8gU3RvcCBpZiBpbnB1dCBmaWVsZCB3YXMgY2xpY2tlZFxuXHRpZiAoISQoZS50YXJnZXQpLmhhc0NsYXNzKFwicG9wdXAtaW5wdXRcIikpIHtcblx0XHQvLyBJZiBpY29uIHdhcyBjbGlja2VkXG5cdFx0aWYgKCQoZS50YXJnZXQpLmhhc0NsYXNzKFwiZW1haWxcIikpIHtcblx0XHRcdC8vIFNlbGVjdCB0ZXh0IGlmIGhpZGRlblxuXHRcdFx0aWYgKCQoZS50YXJnZXQpLmNoaWxkcmVuKFwiLnBvcHVwXCIpLmhhc0NsYXNzKFwiaGlkZGVuXCIpKSB7XG5cdFx0XHRcdCQoZS50YXJnZXQpLmNoaWxkcmVuKFwiLnBvcHVwXCIpLmNoaWxkcmVuKFwiaW5wdXRcIikuc2VsZWN0KCk7XG5cdFx0XHR9XG5cdFx0XHQvLyBUb2dnbGUgdmlzaWJpbGl0eVxuXHRcdFx0JChlLnRhcmdldCkuY2hpbGRyZW4oXCIucG9wdXBcIikudG9nZ2xlQ2xhc3MoXCJoaWRkZW5cIik7XG5cdFx0fVxuXHRcdC8vIElmIGhpZGRlbiBhbmQgaWNvbiB3YXMgbm90IGNsaWNrZWRcblx0XHRpZiAoISQoXCIuZW1haWwgLnBvcHVwXCIpLmhhc0NsYXNzKFwiaGlkZGVuXCIpICYmICEkKGUudGFyZ2V0KS5oYXNDbGFzcyhcImVtYWlsXCIpKSB7XG5cdFx0XHQvLyBIaWRlXG5cdFx0XHQkKFwiLmVtYWlsIC5wb3B1cFwiKS5hZGRDbGFzcyhcImhpZGRlblwiKTtcblx0XHR9XG5cdH1cbn0pO1xuXG4vLyBTb2NpYWwgbWVkaWEgbGlua3MgYW5jaG9yXG5mdW5jdGlvbiBzbWxBbmNob3IoKSB7XG4gICAgdmFyIHNtbCA9ICQoXCIucGVyc29uYWwtbGlua3NcIik7IC8vIHNvY2lhbCBtZWRpYSBsaW5rc1xuICAgIHZhciBzYXNtbCA9ICQoXCIuc3BhY2VyXCIpLmhlaWdodCgpIC0gc21sLmhlaWdodCgpOyAvLyBzcGFjZSBhYm92ZSBzb2NpYWwgbWVkaWEgbGlua3NcbiAgICBpZiAoc2FzbWwgPCB3aW5kb3cucGFnZVlPZmZzZXQpIHNtbC5jc3MoXCJwb3NpdGlvblwiLCBcImZpeGVkXCIpLmNzcyhcInRvcFwiLCBcIjBweFwiKTtcbiAgICBlbHNlIHNtbC5jc3MoXCJwb3NpdGlvblwiLCBcIlwiKS5jc3MoXCJ0b3BcIiwgXCJcIik7XG59XG4kKHdpbmRvdykuc2Nyb2xsKHNtbEFuY2hvcik7XG4kKHdpbmRvdykucmVzaXplKHNtbEFuY2hvcik7XG4iXX0=