{"product_id":"custom-uv-dtf-transfer-stickers-vinyl-stickers-custom","title":"Custom UV DTF Transfer stickers - vinyl stickers custom","description":"\u003cdiv id=\"artetribe-uv-dtf-preview-embed\" class=\"artetribe-uv-dtf-preview-embed\" aria-label=\"UV DTF transfer preview\"\u003e\n  \u003csection class=\"artetribe-uv-dtf-preview-embed__benefits\" aria-label=\"UV DTF transfer benefits\"\u003e\n    \u003carticle\u003e\n      \u003cspan class=\"artetribe-uv-dtf-preview-embed__benefit-icon\" aria-hidden=\"true\"\u003e\u003csvg viewbox=\"0 0 80 80\" role=\"presentation\"\u003e\u003cg fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"\u003e\u003cpath stroke=\"#ff9151\" d=\"M2.58 32.8c3.1-4.12 13.67-6.43 15.68-1.09 2.53 6.72-8.76 9.65-9.35 6.79-.92-4.5 16.81-4.6 14.87 8-1.47 9.52-13.93 12.13-22 10M32.27 36.77c-1-1-3.74-.67-4.81 2.16-1.39 3.67.43 5.39 2.22 5.39 4 0 5.54-6.9 4.89-6.9s-1.66 6 1.36 5.74c3.77-.28 10.55-16.88 6.39-16.88s-6.43 16.25-.24 16.18 11.37-16.63 7.35-16.63c-3.45 0-5.59 14.57-1.07 14.34 2-.1 2.85-3.88 2.85-3.88a3.06 3.06 0 0 0 3.05-.65c-.94 1.73-.94 5.59 2 5.59 4.28 0 5.2-6.2 2.72-7.86-2.13-1.42-4.18 1.1-2.16 2.44 1.51 1 6 .18 6 .18M10.53 49.43c0-.19.71-9.38 1.87-17.05M26.94 49.27S54 44.56 72 44.49\"\u003e\u003c\/path\u003e\u003cg fill=\"#fff\" stroke=\"#98a8b0\" stroke-linecap=\"butt\"\u003e\u003cpath d=\"M45 65h33V15H50\"\u003e\u003c\/path\u003e\u003cpath d=\"m44.94 18-5.68 48a2.12 2.12 0 0 0 1.68 2.35l1.14.23a2.12 2.12 0 0 0 2.45-1.49L56 22\"\u003e\u003c\/path\u003e\u003cpath fill=\"none\" d=\"M50.5 15C43 15 43 24 51 24c7 0 7-5 0-5\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003c\/g\u003e\u003c\/svg\u003e\u003c\/span\u003e\n      \u003ch3\u003eEasily transfer your design\u003c\/h3\u003e\n      \u003cp\u003eOur transfer tape holds your design together so that it's easy to apply.\u003c\/p\u003e\n    \u003c\/article\u003e\n    \u003carticle\u003e\n      \u003cspan class=\"artetribe-uv-dtf-preview-embed__benefit-icon\" aria-hidden=\"true\"\u003e\u003csvg viewbox=\"0 0 80 80\" role=\"presentation\"\u003e\u003cg fill=\"#fff\" stroke=\"#98a8b0\" stroke-miterlimit=\"10\" stroke-width=\"2\"\u003e\u003crect x=\"9\" y=\"8\" width=\"20\" height=\"63\" rx=\"4\"\u003e\u003c\/rect\u003e\u003crect x=\"30.5\" y=\"29.5\" width=\"20\" height=\"63\" rx=\"4\" transform=\"rotate(90 40.5 61)\"\u003e\u003c\/rect\u003e\u003cpath d=\"M68.22 40.44 62.38 30a4 4 0 0 0-5.44-1.55L11.18 53.91c.28 2.55.47 5.13.56 7.71.62 0 1.23.07 1.85.12a4.7 4.7 0 0 1 1.55-.28 2.52 2.52 0 0 1 .94-.82c2.3-2.74 5.75-1.67 8 .94a12.37 12.37 0 0 1 2.64 6.6l40-22.29a4 4 0 0 0 1.5-5.45Z\"\u003e\u003c\/path\u003e\u003cpath d=\"m50.9 18.25-10.36-6a4 4 0 0 0-5.47 1.44l-23.8 40.72c.28 2.39.44 4.8.47 7.21.62 0 1.23.07 1.85.12a4.7 4.7 0 0 1 1.55-.28 2.52 2.52 0 0 1 .94-.82c2.3-2.74 5.75-1.67 8 .94a12.24 12.24 0 0 1 2.59 6.2l25.66-44.06a4 4 0 0 0-1.43-5.47Z\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003crect x=\"9\" y=\"8\" width=\"20\" height=\"63\" rx=\"4\" fill=\"#fff\" stroke=\"#ff9151\" stroke-linejoin=\"round\" stroke-width=\"2.01\"\u003e\u003c\/rect\u003e\u003ccircle cx=\"19\" cy=\"61\" r=\"2\" fill=\"#ff9151\"\u003e\u003c\/circle\u003e\u003c\/svg\u003e\u003c\/span\u003e\n      \u003ch3\u003eFull color printing\u003c\/h3\u003e\n      \u003cp\u003eThick, durable vinyl protects your transfer stickers from scratching, rain \u0026amp; sunlight.\u003c\/p\u003e\n    \u003c\/article\u003e\n    \u003carticle\u003e\n      \u003cspan class=\"artetribe-uv-dtf-preview-embed__benefit-icon\" aria-hidden=\"true\"\u003e\u003csvg viewbox=\"0 0 80 80\" role=\"presentation\"\u003e\u003cg fill=\"#fff\" stroke=\"#98a8b0\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"\u003e\u003crect x=\"17\" y=\"10\" width=\"29\" height=\"60\" rx=\"4\"\u003e\u003c\/rect\u003e\u003cpath d=\"M46 22 63 35 46 48zM46 48l17 13-17 9z\"\u003e\u003c\/path\u003e\u003c\/g\u003e\u003ccircle cx=\"31.5\" cy=\"20\" r=\"2.5\" fill=\"#ff9151\"\u003e\u003c\/circle\u003e\u003cpath d=\"M31.5 17.5v-5M29 20h-5M34 20h5\" fill=\"none\" stroke=\"#ff9151\" stroke-linecap=\"round\" stroke-width=\"2\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\u003c\/span\u003e\n      \u003ch3\u003eReady for smooth surfaces\u003c\/h3\u003e\n      \u003cp\u003eCheck the look on glass, coated metal, car windows and other hard surfaces.\u003c\/p\u003e\n    \u003c\/article\u003e\n  \u003c\/section\u003e\n\n  \u003csection class=\"artetribe-uv-dtf-preview-embed__tool\" aria-labelledby=\"artetribe-uv-dtf-preview-title\"\u003e\n    \u003cdiv class=\"artetribe-uv-dtf-preview-embed__heading\"\u003e\n      \u003cdiv\u003e\n\u003ch2 id=\"artetribe-uv-dtf-preview-title\"\u003ePreview your UV DTF transfer\u003c\/h2\u003e\n\u003cp\u003eUpload, position and peel your artwork before ordering.\u003c\/p\u003e\n\u003c\/div\u003e\n      \u003cp class=\"artetribe-uv-dtf-preview-embed__hint\"\u003eClick any film corner, then drag toward the opposite corner.\u003c\/p\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"artetribe-uv-dtf-preview-embed__frame\"\u003e\n      \u003cdiv class=\"artetribe-uv-dtf-preview-embed__loading\" data-preview-loading\u003eLoading preview...\u003c\/div\u003e\n      \u003ciframe class=\"artetribe-uv-dtf-preview-embed__iframe\" data-preview-frame title=\"ArteTribe UV DTF transfer preview\" loading=\"lazy\"\u003e\u003c\/iframe\u003e\n      \u003cscript type=\"text\/plain\" data-preview-source\u003ePCFkb2N0eXBlIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KPGhlYWQ+CiAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgogIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsaW5pdGlhbC1zY2FsZT0xIj4KICA8dGl0bGU+QXJ0ZVRyaWJlIFVWIERURiBQcmV2aWV3PC90aXRsZT4KICA8c3R5bGU+CiAgICA6cm9vdHstLWNhbnZhczojZWFmMWY3Oy0tc3VyZmFjZTojZWFmMWY3Oy0td2hpdGU6I2ZmZjstLWluazojMTgyMTJiOy0tbXV0ZWQ6IzY0NzE3ZDstLW11dGVkLTI6Izk4YTViMDstLWxpbmU6cmdiYSgyMCw0NSw2NiwuMTApOy0tYmx1ZTojMDg3YWI1Oy0tYmx1ZTI6IzA2NmQ5ZjstLWRhbmdlcjojYjQyMzE4Oy0tc3VjY2VzczojMTQ3NzQ0Oy0td2FybmluZzojYjU0NzA4Oy0tcjoxNnB4Oy0tc2hhZG93OjAgMTJweCA0MHB4IHJnYmEoMTgsNDgsNzAsLjEyKX0KICAgICp7Ym94LXNpemluZzpib3JkZXItYm94fWh0bWwsYm9keXttYXJnaW46MDttaW4taGVpZ2h0OjEwMCU7YmFja2dyb3VuZDp2YXIoLS1jYW52YXMpO2NvbG9yOnZhcigtLWluayk7Zm9udC1mYW1pbHk6aW5oZXJpdCxBcmlhbCxzYW5zLXNlcmlmOy13ZWJraXQtZm9udC1zbW9vdGhpbmc6YW50aWFsaWFzZWR9YnV0dG9uLGlucHV0e2ZvbnQ6aW5oZXJpdH1idXR0b257Y3Vyc29yOnBvaW50ZXJ9YnV0dG9uOmZvY3VzLXZpc2libGUsaW5wdXQ6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjNweCBzb2xpZCByZ2JhKDgsMTIyLDE4MSwuMjQpO291dGxpbmUtb2Zmc2V0OjJweH0uZmlsbTpmb2N1cywuZmlsbTpmb2N1cy12aXNpYmxle291dGxpbmU6bm9uZX0uZmlsbTpmb2N1cy12aXNpYmxlIC5maWxtLWJhc2V7c3Ryb2tlOnJnYmEoOCwxMjIsMTgxLC43Mik7c3Ryb2tlLXdpZHRoOjEuNn06OnNlbGVjdGlvbntiYWNrZ3JvdW5kOnJnYmEoOCwxMjIsMTgxLC4xOCk7Y29sb3I6dmFyKC0taW5rKX0KICAgIC5hcHB7bWF4LXdpZHRoOjE0MDBweDttYXJnaW46YXV0bztwYWRkaW5nOjE0cHh9LndvcmtzcGFjZXtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOm1pbm1heCgwLDFmcikgMzcycHg7bWluLWhlaWdodDo2NTBweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6dmFyKC0tcik7b3ZlcmZsb3c6aGlkZGVuO2JhY2tncm91bmQ6dmFyKC0tc3VyZmFjZSk7Ym94LXNoYWRvdzp2YXIoLS1zaGFkb3cpfQogICAgLnN0YWdle3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6Z3JpZDtwbGFjZS1pdGVtczpjZW50ZXI7bWluLXdpZHRoOjA7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6NjRweCAyNHB4IDU0cHg7YmFja2dyb3VuZDp2YXIoLS1zdXJmYWNlKX0uY2FudmFzLXdyYXB7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6bWluKDEwMCUsNzAwcHgpO2FzcGVjdC1yYXRpbzoxfS5wcmV2aWV3LWNhbnZhc3tkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCV9LmZpbG0tZmxpZ2h0e3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjA7ei1pbmRleDozO3BvaW50ZXItZXZlbnRzOm5vbmU7d2lsbC1jaGFuZ2U6dHJhbnNmb3JtfS5maWxte3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt0b3A6MDtvdmVyZmxvdzp2aXNpYmxlO3BvaW50ZXItZXZlbnRzOmF1dG87dG91Y2gtYWN0aW9uOm5vbmU7Y3Vyc29yOmdyYWI7dHJhbnNmb3JtLW9yaWdpbjowIDA7d2lsbC1jaGFuZ2U6dHJhbnNmb3JtfS5maWxtOmFjdGl2ZXtjdXJzb3I6Z3JhYmJpbmd9LmZpbG0uaXMtaGlkZGVue2Rpc3BsYXk6bm9uZX0KICAgIC5ub3RpY2V7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDo1O2xlZnQ6MjBweDt0b3A6MTZweDttYXgtd2lkdGg6MzcwcHg7cGFkZGluZzo5cHggMTFweDtib3JkZXI6MXB4IHNvbGlkICNlY2Q3YTA7Ym9yZGVyLXJhZGl1czoxMHB4O2JhY2tncm91bmQ6I2ZmZjllOTtjb2xvcjojNzk1MjBiO2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjEuNDV9LnN0YWdlLW5vdGV7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDo1O2xlZnQ6MjBweDtib3R0b206MTZweDtwYWRkaW5nOjhweCAxMXB4O2JvcmRlci1yYWRpdXM6MTBweDtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6dmFyKC0tbXV0ZWQpO2ZvbnQtc2l6ZToxMnB4O2JveC1zaGFkb3c6MCA3cHggMThweCByZ2JhKDIzLDMyLDUxLC4wOCl9CiAgICAuZmlsbS1tYXRlcmlhbHtvcGFjaXR5OjF9LmZpbG0tYmFzZXtmaWxsOnVybCgjZmlsbUZpbGwpO3N0cm9rZTpyZ2JhKDkxLDEyNCwxNDgsLjQ1KTtzdHJva2Utd2lkdGg6MS4xNTt2ZWN0b3ItZWZmZWN0Om5vbi1zY2FsaW5nLXN0cm9rZX0uZmlsbS1zaGVlbntmaWxsOnVybCgjZmlsbVNoZWVuKTtvcGFjaXR5Oi42NDttaXgtYmxlbmQtbW9kZTpzY3JlZW59LmZpbG0tZmxhcHtmaWxsOnVybCgjZmxhcEZpbGwpO3N0cm9rZTpyZ2JhKDc4LDExNiwxNDQsLjM4KTtzdHJva2Utd2lkdGg6Ljk7ZmlsdGVyOnVybCgjZmxhcERlcHRoKTt2ZWN0b3ItZWZmZWN0Om5vbi1zY2FsaW5nLXN0cm9rZX0uZmlsbS1iYWNre2ZpbGw6dXJsKCNmbGFwQmFjayk7b3BhY2l0eTouNDI7bWl4LWJsZW5kLW1vZGU6c2NyZWVufS5mbGFwLWNhdXN0aWN7ZmlsbDp1cmwoI2NhdXN0aWNGaWxsKTtvcGFjaXR5Oi40NDttaXgtYmxlbmQtbW9kZTpzY3JlZW59LmZvbGQtc2hhZG93e2ZpbGw6bm9uZTtzdHJva2U6cmdiYSgzOSw1OSw3NCwuMTMpO3N0cm9rZS13aWR0aDo3O2ZpbHRlcjp1cmwoI3NvZnRGb2xkKX0uZm9sZC1saW5le2ZpbGw6bm9uZTtzdHJva2U6cmdiYSgyNTUsMjU1LDI1NSwuODgpO3N0cm9rZS13aWR0aDoyLjQ7ZmlsdGVyOnVybCgjdGhpbkdsb3cpfS5mb2xkLWVkZ2V7ZmlsbDpub25lO3N0cm9rZTpyZ2JhKDY2LDEwNSwxMzQsLjQ2KTtzdHJva2Utd2lkdGg6LjcyfS5maWxtLXdyaW5rbGV7ZmlsbDpub25lO3N0cm9rZTpyZ2JhKDI1NSwyNTUsMjU1LC41NCk7c3Ryb2tlLXdpZHRoOjEuMTU7ZmlsdGVyOnVybCgjdGhpbkdsb3cpO29wYWNpdHk6LjcyfS5maWxtLXdyaW5rbGUtLWNvb2x7c3Ryb2tlOnJnYmEoMTEyLDE1NywxODQsLjI1KTtzdHJva2Utd2lkdGg6Ljg7b3BhY2l0eTouNTZ9LmNvcm5lci1jdWV7ZmlsbDp1cmwoI2Nvcm5lckN1ZUZpbGwpO3N0cm9rZTpyZ2JhKDcyLDExMywxNDIsLjQ0KTtzdHJva2Utd2lkdGg6Ljc1O29wYWNpdHk6MDtwb2ludGVyLWV2ZW50czpub25lfS5jb3JuZXItY3VlLmlzLXZpc2libGV7b3BhY2l0eTouNjJ9CiAgICAucGFuZWx7bWluLXdpZHRoOjA7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC45NCk7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkIHZhcigtLWxpbmUpO292ZXJmbG93OmF1dG87c2Nyb2xsYmFyLWNvbG9yOiM5YWFiYmIgdHJhbnNwYXJlbnQ7c2Nyb2xsYmFyLXdpZHRoOnRoaW59LmJsb2Nre3BhZGRpbmc6MTFweCAxNnB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHZhcigtLWxpbmUpfS5ibG9jazpsYXN0LWNoaWxke2JvcmRlcjowfS5sYWJlbHtkaXNwbGF5OmJsb2NrO21hcmdpbjowIDAgOHB4O2NvbG9yOnZhcigtLW11dGVkKTtmb250LXNpemU6MTBweDtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjA2ZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfS51cGxvYWQtcm93LC5hY3Rpb24tcm93e2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtnYXA6OHB4fS5idG57ZGlzcGxheTpncmlkO3BsYWNlLWl0ZW1zOmNlbnRlcjttaW4taGVpZ2h0OjQwcHg7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6OXB4IDEycHg7YmFja2dyb3VuZDpyZ2JhKDgsMTIyLDE4MSwuMDkpO2NvbG9yOnZhcigtLWJsdWUpO2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxLjI1O3RyYW5zaXRpb246YmFja2dyb3VuZC1jb2xvciAuMThzIGVhc2UsdHJhbnNmb3JtIC4xOHMgZWFzZSxib3gtc2hhZG93IC4xOHMgZWFzZX0uYnRuOmhvdmVye2JhY2tncm91bmQ6cmdiYSg4LDEyMiwxODEsLjE0KX0uYnRuOmFjdGl2ZXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgxcHgpfS5idG4ucHJpbWFyeSwuYnRuLmJsdWV7YmFja2dyb3VuZDp2YXIoLS1ibHVlKTtjb2xvcjojZmZmfS51cGxvYWQtcm93IC5idG4ucHJpbWFyeXtib3gtc2hhZG93OjAgNXB4IDE2cHggcmdiYSg4LDEyMiwxODEsLjI2KX0uYnRuLnByaW1hcnk6aG92ZXIsLmJ0bi5ibHVlOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tYmx1ZTIpfS5idG46ZGlzYWJsZWR7Y3Vyc29yOm5vdC1hbGxvd2VkO29wYWNpdHk6LjQ4O3RyYW5zZm9ybTpub25lO2JveC1zaGFkb3c6bm9uZX0uZmlsZXtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7aGVpZ2h0OjFweDtvcGFjaXR5OjA7cG9pbnRlci1ldmVudHM6bm9uZX0uc3RhdHVze21pbi1oZWlnaHQ6MTZweDttYXJnaW46NnB4IDAgMDtjb2xvcjp2YXIoLS1tdXRlZC0yKTtmb250LXNpemU6MTAuNXB4O2xpbmUtaGVpZ2h0OjEuNH0uc3RhdHVzLmVycm9ye2NvbG9yOnZhcigtLWRhbmdlcil9LnN0YXR1cy5zdWNjZXNze2NvbG9yOnZhcigtLXN1Y2Nlc3MpfQogICAgLnN1cmZhY2Vze2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtnYXA6NnB4O3BhZGRpbmc6NHB4O2JvcmRlci1yYWRpdXM6MTJweDtiYWNrZ3JvdW5kOnJnYmEoMjAsNDUsNjYsLjA3KX0uc3VyZmFjZXtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjQycHggMWZyO2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6N3B4O21pbi1oZWlnaHQ6NTBweDtwYWRkaW5nOjVweDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjlweDtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOnZhcigtLW11dGVkKTt0ZXh0LWFsaWduOmxlZnR9LnN1cmZhY2U6aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC41OCk7Y29sb3I6dmFyKC0taW5rKX0uc3VyZmFjZVthcmlhLXByZXNzZWQ9InRydWUiXXtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6dmFyKC0tYmx1ZSk7Ym94LXNoYWRvdzowIDJweCA4cHggcmdiYSgyMCw0NSw2NiwuMTIpfS5zdXJmYWNlIGltZ3t3aWR0aDo0MnB4O2hlaWdodDozNnB4O29iamVjdC1maXQ6Y29udGFpbn0uc3VyZmFjZSBzcGFue2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjcwMH0KICAgIC5jb250cm9se21hcmdpbi10b3A6OXB4fS5jb250cm9sLWhlYWR7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2dhcDoxMnB4O21hcmdpbi1ib3R0b206M3B4O2NvbG9yOnZhcigtLW11dGVkKTtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo3MDB9LnZhbHVle2NvbG9yOnZhcigtLWluayk7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5yYW5nZXt3aWR0aDoxMDAlO2hlaWdodDoyOHB4O2FwcGVhcmFuY2U6bm9uZTtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2N1cnNvcjpwb2ludGVyfS5yYW5nZTo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2t7aGVpZ2h0OjNweDtib3JkZXItcmFkaXVzOjJweDtiYWNrZ3JvdW5kOnJnYmEoMjAsNDUsNjYsLjE0KX0ucmFuZ2U6Oi13ZWJraXQtc2xpZGVyLXRodW1ie3dpZHRoOjE4cHg7aGVpZ2h0OjE4cHg7bWFyZ2luLXRvcDotNy41cHg7YXBwZWFyYW5jZTpub25lO2JvcmRlci1yYWRpdXM6NTAlO2JhY2tncm91bmQ6I2ZmZjtib3gtc2hhZG93OjAgMCAwIC41cHggcmdiYSgwLDAsMCwuMDgpLDAgMnB4IDZweCByZ2JhKDAsMCwwLC4yMil9LnJhbmdlOjotbW96LXJhbmdlLXRyYWNre2hlaWdodDozcHg7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czoycHg7YmFja2dyb3VuZDpyZ2JhKDIwLDQ1LDY2LC4xNCl9LnJhbmdlOjotbW96LXJhbmdlLXRodW1ie3dpZHRoOjE4cHg7aGVpZ2h0OjE4cHg7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czo1MCU7YmFja2dyb3VuZDojZmZmO2JveC1zaGFkb3c6MCAwIDAgLjVweCByZ2JhKDAsMCwwLC4wOCksMCAycHggNnB4IHJnYmEoMCwwLDAsLjIyKX0udHdve2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtnYXA6MTJweH0ucmVzZXR7d2lkdGg6MTAwJTttYXJnaW4tdG9wOjlweH0uc2NlbmUtcm93e2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0byAzMHB4IDFmciAxZnI7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHh9LmNvbG9ye3dpZHRoOjI4cHg7aGVpZ2h0OjI4cHg7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czo1MCU7cGFkZGluZzowO292ZXJmbG93OmhpZGRlbjtiYWNrZ3JvdW5kOm5vbmV9LmNvbG9yOjotd2Via2l0LWNvbG9yLXN3YXRjaC13cmFwcGVye3BhZGRpbmc6MH0uY29sb3I6Oi13ZWJraXQtY29sb3Itc3dhdGNoe2JvcmRlcjoxcHggc29saWQgcmdiYSgyMCw0NSw2NiwuMTIpO2JvcmRlci1yYWRpdXM6NTAlfS5wcm9kdWN0aW9uIHB7bWFyZ2luOjAgMCA5cHg7Y29sb3I6dmFyKC0tbXV0ZWQpO2ZvbnQtc2l6ZToxMXB4O2xpbmUtaGVpZ2h0OjEuNDV9LmhpbnR7bWFyZ2luOjdweCAwIDA7Y29sb3I6dmFyKC0tbXV0ZWQtMik7Zm9udC1zaXplOjEwLjVweDtsaW5lLWhlaWdodDoxLjR9Lm1vYmlsZS1oYW5kbGV7ZGlzcGxheTpub25lfQogICAgQG1lZGlhKG1heC13aWR0aDo3NjBweCl7LmFwcHtwYWRkaW5nOjB9LndvcmtzcGFjZXtkaXNwbGF5OmJsb2NrO21pbi1oZWlnaHQ6MDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjA7Ym94LXNoYWRvdzpub25lfS5zdGFnZXttaW4taGVpZ2h0OjQ2MHB4O3BhZGRpbmc6NjRweCAxMHB4IDUycHh9LmNhbnZhcy13cmFwe3dpZHRoOm1pbigxMDAlLDU2MHB4KX0ubm90aWNle2xlZnQ6MTBweDtyaWdodDoxMHB4O3RvcDoxMHB4O21heC13aWR0aDpub25lfS5zdGFnZS1ub3Rle2xlZnQ6MTBweDtib3R0b206MTBweH0ucGFuZWx7cG9zaXRpb246cmVsYXRpdmU7Ym9yZGVyOjA7Ym9yZGVyLXRvcDoxcHggc29saWQgdmFyKC0tbGluZSk7bWF4LWhlaWdodDpub25lfS5tb2JpbGUtaGFuZGxle2Rpc3BsYXk6YmxvY2s7d2lkdGg6NDRweDtoZWlnaHQ6NHB4O21hcmdpbjo5cHggYXV0byAxcHg7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czo0cHg7YmFja2dyb3VuZDpyZ2JhKDIwLDQ1LDY2LC4xOCl9LmJsb2Nre3BhZGRpbmc6MTBweCAxMnB4fS5zdXJmYWNle2dyaWQtdGVtcGxhdGUtY29sdW1uczozOHB4IDFmcn0uc3VyZmFjZSBpbWd7d2lkdGg6MzhweDtoZWlnaHQ6MzRweH0udHdve2dhcDo5cHh9LnNjZW5lLXJvd3tncmlkLXRlbXBsYXRlLWNvbHVtbnM6YXV0byAzMHB4IDFmciAxZnJ9LmJ0bnttaW4taGVpZ2h0OjM2cHg7cGFkZGluZzo4cHg7Zm9udC1zaXplOjEycHh9fQogICAgQG1lZGlhKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246bm8tcHJlZmVyZW5jZSl7LmJ0biwuc3VyZmFjZXt0cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgLjE4cyBlYXNlLGJvcmRlci1jb2xvciAuMThzIGVhc2UsYm94LXNoYWRvdyAuMThzIGVhc2V9fQogIDwvc3R5bGU+CjwvaGVhZD4KPGJvZHk+CiAgPG1haW4gY2xhc3M9ImFwcCI+CiAgICA8c2VjdGlvbiBjbGFzcz0id29ya3NwYWNlIiBhcmlhLWxhYmVsPSJVViBEVEYgdHJhbnNmZXIgcHJldmlldyI+CiAgICAgIDxkaXYgY2xhc3M9InN0YWdlIj4KICAgICAgICA8ZGl2IGNsYXNzPSJub3RpY2UiPlByZXZpZXcgY29sb3JzIGFuZCBwbGFjZW1lbnQgYXJlIGlsbHVzdHJhdGl2ZS4gQ29uZmlybSBmaW5hbCBzaXplIGFuZCBhcnR3b3JrIGJlZm9yZSBwcm9kdWN0aW9uLjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImNhbnZhcy13cmFwIiBpZD0iY2FudmFzV3JhcCI+CiAgICAgICAgICA8Y2FudmFzIGNsYXNzPSJwcmV2aWV3LWNhbnZhcyIgaWQ9InByZXZpZXciIHdpZHRoPSI5NDUiIGhlaWdodD0iOTQ1IiBhcmlhLWxhYmVsPSJVViBEVEYgdHJhbnNmZXIgcHJldmlldyBjYW52YXMiPjwvY2FudmFzPgogICAgICAgICAgPGRpdiBjbGFzcz0iZmlsbS1mbGlnaHQiIGlkPSJmaWxtRmxpZ2h0Ij4KICAgICAgICAgICAgPHN2ZyBjbGFzcz0iZmlsbSBpcy1oaWRkZW4iIGlkPSJmaWxtIiB2aWV3Qm94PSIwIDAgMTAwIDEwMCIgcm9sZT0iYnV0dG9uIiB0YWJpbmRleD0iMCIgYXJpYS1sYWJlbD0iUGVlbCB0aGUgY2xlYXIgdHJhbnNmZXIgZmlsbSI+CiAgICAgICAgICAgICAgPGRlZnM+CiAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9ImFkaGVyZWRDbGlwIj48cGF0aCBpZD0iYWRoZXJlZENsaXBQYXRoIj48L3BhdGg+PC9jbGlwUGF0aD4KICAgICAgICAgICAgICAgIDxsaW5lYXJHcmFkaWVudCBpZD0iZmlsbUZpbGwiIHgxPSIwIiB5MT0iMCIgeDI9IjEiIHkyPSIxIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiNmZmYiIHN0b3Atb3BhY2l0eT0iLjMiLz48c3RvcCBvZmZzZXQ9Ii4yOCIgc3RvcC1jb2xvcj0iI2RmZjJmYiIgc3RvcC1vcGFjaXR5PSIuMDkiLz48c3RvcCBvZmZzZXQ9Ii42NyIgc3RvcC1jb2xvcj0iI2ZmZiIgc3RvcC1vcGFjaXR5PSIuMDUiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNiOWQ5ZWMiIHN0b3Atb3BhY2l0eT0iLjIiLz48L2xpbmVhckdyYWRpZW50PgogICAgICAgICAgICAgICAgPGxpbmVhckdyYWRpZW50IGlkPSJmaWxtU2hlZW4iIHgxPSIwIiB5MT0iMCIgeDI9IjEiIHkyPSIxIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiNmZmYiIHN0b3Atb3BhY2l0eT0iMCIvPjxzdG9wIG9mZnNldD0iLjM4IiBzdG9wLWNvbG9yPSIjZmZmIiBzdG9wLW9wYWNpdHk9IjAiLz48c3RvcCBvZmZzZXQ9Ii41IiBzdG9wLWNvbG9yPSIjZmZmIiBzdG9wLW9wYWNpdHk9Ii41NCIvPjxzdG9wIG9mZnNldD0iLjU5IiBzdG9wLWNvbG9yPSIjZDhlZWY5IiBzdG9wLW9wYWNpdHk9Ii4xMiIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2ZmZiIgc3RvcC1vcGFjaXR5PSIwIi8+PC9saW5lYXJHcmFkaWVudD4KICAgICAgICAgICAgICAgIDxsaW5lYXJHcmFkaWVudCBpZD0iZmxhcEZpbGwiIHgxPSIwIiB5MT0iMCIgeDI9IjEiIHkyPSIxIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM5ZmM4ZGYiIHN0b3Atb3BhY2l0eT0iLjIiLz48c3RvcCBvZmZzZXQ9Ii4yMiIgc3RvcC1jb2xvcj0iI2ZmZiIgc3RvcC1vcGFjaXR5PSIuNzIiLz48c3RvcCBvZmZzZXQ9Ii41MSIgc3RvcC1jb2xvcj0iI2MyZTFmMSIgc3RvcC1vcGFjaXR5PSIuMjIiLz48c3RvcCBvZmZzZXQ9Ii43NiIgc3RvcC1jb2xvcj0iI2ZmZiIgc3RvcC1vcGFjaXR5PSIuNjIiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiM4OWJiZDgiIHN0b3Atb3BhY2l0eT0iLjI4Ii8+PC9saW5lYXJHcmFkaWVudD4KICAgICAgICAgICAgICAgIDxsaW5lYXJHcmFkaWVudCBpZD0iZmxhcEJhY2siIHgxPSIwIiB5MT0iMSIgeDI9IjEiIHkyPSIwIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM5MWJlZDgiIHN0b3Atb3BhY2l0eT0iLjA4Ii8+PHN0b3Agb2Zmc2V0PSIuNDIiIHN0b3AtY29sb3I9IiNmZmYiIHN0b3Atb3BhY2l0eT0iLjY4Ii8+PHN0b3Agb2Zmc2V0PSIuNTgiIHN0b3AtY29sb3I9IiNmZmYiIHN0b3Atb3BhY2l0eT0iLjE0Ii8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjYWFjZmU0IiBzdG9wLW9wYWNpdHk9Ii4xOCIvPjwvbGluZWFyR3JhZGllbnQ+CiAgICAgICAgICAgICAgICA8bGluZWFyR3JhZGllbnQgaWQ9ImNhdXN0aWNGaWxsIiB4MT0iMCIgeTE9IjAiIHgyPSIxIiB5Mj0iMCI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjZmZmIiBzdG9wLW9wYWNpdHk9IjAiLz48c3RvcCBvZmZzZXQ9Ii40NCIgc3RvcC1jb2xvcj0iI2ZmZiIgc3RvcC1vcGFjaXR5PSIuMTIiLz48c3RvcCBvZmZzZXQ9Ii41IiBzdG9wLWNvbG9yPSIjZmZmIiBzdG9wLW9wYWNpdHk9Ii44NiIvPjxzdG9wIG9mZnNldD0iLjU3IiBzdG9wLWNvbG9yPSIjYjlkZWYyIiBzdG9wLW9wYWNpdHk9Ii4xOCIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2ZmZiIgc3RvcC1vcGFjaXR5PSIwIi8+PC9saW5lYXJHcmFkaWVudD4KICAgICAgICAgICAgICAgIDxyYWRpYWxHcmFkaWVudCBpZD0iY29ybmVyQ3VlRmlsbCIgY3g9IjM1JSIgY3k9IjM1JSIgcj0iNzIlIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiNmZmYiIHN0b3Atb3BhY2l0eT0iLjg4Ii8+PHN0b3Agb2Zmc2V0PSIuNyIgc3RvcC1jb2xvcj0iI2Q1ZWFmNiIgc3RvcC1vcGFjaXR5PSIuNDYiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiM5MWJlZDgiIHN0b3Atb3BhY2l0eT0iLjE4Ii8+PC9yYWRpYWxHcmFkaWVudD4KICAgICAgICAgICAgICAgIDxmaWx0ZXIgaWQ9InNvZnRGb2xkIiB4PSItMzAlIiB5PSItMzAlIiB3aWR0aD0iMTYwJSIgaGVpZ2h0PSIxNjAlIj48ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIzLjQiLz48L2ZpbHRlcj4KICAgICAgICAgICAgICAgIDxmaWx0ZXIgaWQ9InRoaW5HbG93IiB4PSItMzAlIiB5PSItMzAlIiB3aWR0aD0iMTYwJSIgaGVpZ2h0PSIxNjAlIj48ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIuNTUiLz48L2ZpbHRlcj4KICAgICAgICAgICAgICAgIDxmaWx0ZXIgaWQ9ImZsYXBEZXB0aCIgeD0iLTM1JSIgeT0iLTM1JSIgd2lkdGg9IjE3MCUiIGhlaWdodD0iMTcwJSI+PGZlRHJvcFNoYWRvdyBkeD0iMCIgZHk9IjUiIHN0ZERldmlhdGlvbj0iNSIgZmxvb2QtY29sb3I9IiMzMTU0NmMiIGZsb29kLW9wYWNpdHk9Ii4xNyIvPjwvZmlsdGVyPgogICAgICAgICAgICAgIDwvZGVmcz4KICAgICAgICAgICAgICA8ZyBpZD0iZmlsbU1hdGVyaWFsIiBjbGFzcz0iZmlsbS1tYXRlcmlhbCI+CiAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9InVybCgjYWRoZXJlZENsaXApIj48cGF0aCBpZD0iYWRoZXJlZEZpbG0iIGNsYXNzPSJmaWxtLWJhc2UiPjwvcGF0aD48cGF0aCBpZD0iYWRoZXJlZFNoZWVuIiBjbGFzcz0iZmlsbS1zaGVlbiI+PC9wYXRoPjwvZz4KICAgICAgICAgICAgICAgIDxwYXRoIGlkPSJjb250YWN0U2hhZG93IiBjbGFzcz0iZm9sZC1zaGFkb3ciPjwvcGF0aD48cGF0aCBpZD0icGVlbGVkRmxhcCIgY2xhc3M9ImZpbG0tZmxhcCI+PC9wYXRoPjxwYXRoIGlkPSJwZWVsZWRCYWNrIiBjbGFzcz0iZmlsbS1iYWNrIj48L3BhdGg+PHBhdGggaWQ9ImZsYXBDYXVzdGljIiBjbGFzcz0iZmxhcC1jYXVzdGljIj48L3BhdGg+CiAgICAgICAgICAgICAgICA8cGF0aCBpZD0iZmlsbVdyaW5rbGVBIiBjbGFzcz0iZmlsbS13cmlua2xlIj48L3BhdGg+PHBhdGggaWQ9ImZpbG1Xcmlua2xlQiIgY2xhc3M9ImZpbG0td3JpbmtsZSBmaWxtLXdyaW5rbGUtLWNvb2wiPjwvcGF0aD48cGF0aCBpZD0iZmlsbVdyaW5rbGVDIiBjbGFzcz0iZmlsbS13cmlua2xlIj48L3BhdGg+CiAgICAgICAgICAgICAgICA8cGF0aCBpZD0iZm9sZEhpZ2hsaWdodCIgY2xhc3M9ImZvbGQtbGluZSI+PC9wYXRoPjxwYXRoIGlkPSJmb2xkRWRnZSIgY2xhc3M9ImZvbGQtZWRnZSI+PC9wYXRoPjxwYXRoIGlkPSJjb3JuZXJDdWUiIGNsYXNzPSJjb3JuZXItY3VlIj48L3BhdGg+CiAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InN0YWdlLW5vdGUiIGlkPSJzdGFnZU5vdGUiPlVwbG9hZCBhcnR3b3JrIHRvIHJlcGxhY2UgdGhlIHNhbXBsZSBzdGlja2VyPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8YXNpZGUgY2xhc3M9InBhbmVsIiBhcmlhLWxhYmVsPSJQcmV2aWV3IGNvbnRyb2xzIj4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJtb2JpbGUtaGFuZGxlIiBhcmlhLWxhYmVsPSJQcmV2aWV3IGNvbnRyb2xzIj48L2J1dHRvbj4KICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ1cGxvYWQtcm93Ij48bGFiZWwgY2xhc3M9ImJ0biBwcmltYXJ5IiBmb3I9ImFydHdvcmsiIHN0eWxlPSJkaXNwbGF5OmdyaWQ7cGxhY2UtaXRlbXM6Y2VudGVyIj5VcGxvYWQgWW91ciBJbWFnZTwvbGFiZWw+PGJ1dHRvbiBjbGFzcz0iYnRuIiBpZD0icmVtb3ZlQmciIGRpc2FibGVkPkF1dG8gUmVtb3ZlIEJhY2tncm91bmQ8L2J1dHRvbj48L2Rpdj4KICAgICAgICAgIDxpbnB1dCBjbGFzcz0iZmlsZSIgaWQ9ImFydHdvcmsiIHR5cGU9ImZpbGUiIGFjY2VwdD0iaW1hZ2UvcG5nLGltYWdlL2pwZWcsaW1hZ2Uvd2VicCI+PHAgY2xhc3M9InN0YXR1cyIgaWQ9InN0YXR1cyIgYXJpYS1saXZlPSJwb2xpdGUiPlBORywgSlBHIG9yIFdlYlAuIFRyYW5zcGFyZW50IFBORyByZWNvbW1lbmRlZC48L3A+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2siPjxzcGFuIGNsYXNzPSJsYWJlbCI+UHJldmlldyBzdXJmYWNlPC9zcGFuPjxkaXYgY2xhc3M9InN1cmZhY2VzIiBpZD0ic3VyZmFjZXMiPjwvZGl2PjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJsYWJlbCI+QXJ0d29yayBwbGFjZW1lbnQ8L3NwYW4+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9sIj48ZGl2IGNsYXNzPSJjb250cm9sLWhlYWQiPjxzcGFuPlNpemU8L3NwYW4+PHNwYW4gY2xhc3M9InZhbHVlIiBpZD0ic2NhbGVPdXQiPjEwMCU8L3NwYW4+PC9kaXY+PGlucHV0IGNsYXNzPSJyYW5nZSIgaWQ9InNjYWxlIiB0eXBlPSJyYW5nZSIgbWluPSI1NSIgbWF4PSIxNjAiIHZhbHVlPSIxMDAiPjwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0idHdvIj48ZGl2IGNsYXNzPSJjb250cm9sIj48ZGl2IGNsYXNzPSJjb250cm9sLWhlYWQiPjxzcGFuPkhvcml6b250YWw8L3NwYW4+PHNwYW4gY2xhc3M9InZhbHVlIiBpZD0ieE91dCI+MDwvc3Bhbj48L2Rpdj48aW5wdXQgY2xhc3M9InJhbmdlIiBpZD0ieCIgdHlwZT0icmFuZ2UiIG1pbj0iLTEwMCIgbWF4PSIxMDAiIHZhbHVlPSIwIj48L2Rpdj48ZGl2IGNsYXNzPSJjb250cm9sIj48ZGl2IGNsYXNzPSJjb250cm9sLWhlYWQiPjxzcGFuPlZlcnRpY2FsPC9zcGFuPjxzcGFuIGNsYXNzPSJ2YWx1ZSIgaWQ9InlPdXQiPjA8L3NwYW4+PC9kaXY+PGlucHV0IGNsYXNzPSJyYW5nZSIgaWQ9InkiIHR5cGU9InJhbmdlIiBtaW49Ii0xMDAiIG1heD0iMTAwIiB2YWx1ZT0iMCI+PC9kaXY+PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9sIj48ZGl2IGNsYXNzPSJjb250cm9sLWhlYWQiPjxzcGFuPlJvdGF0aW9uPC9zcGFuPjxzcGFuIGNsYXNzPSJ2YWx1ZSIgaWQ9InJvdGF0aW9uT3V0Ij4wwrA8L3NwYW4+PC9kaXY+PGlucHV0IGNsYXNzPSJyYW5nZSIgaWQ9InJvdGF0aW9uIiB0eXBlPSJyYW5nZSIgbWluPSItMjUiIG1heD0iMjUiIHZhbHVlPSIwIj48L2Rpdj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9ImJ0biByZXNldCIgaWQ9InJlc2V0Ij5SZXNldCBQbGFjZW1lbnQ8L2J1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJibG9jayI+PGRpdiBjbGFzcz0ic2NlbmUtcm93Ij48c3BhbiBjbGFzcz0ibGFiZWwiIHN0eWxlPSJtYXJnaW46MCI+U2NlbmU8L3NwYW4+PGlucHV0IGNsYXNzPSJjb2xvciIgaWQ9ImJhY2tncm91bmQiIHR5cGU9ImNvbG9yIiB2YWx1ZT0iI2U3ZjNmYiI+PGJ1dHRvbiBjbGFzcz0iYnRuIiBpZD0icmVzZXRGaWxtIj5SZXNldCBGaWxtPC9idXR0b24+PGJ1dHRvbiBjbGFzcz0iYnRuIiBpZD0ic2F2ZSI+U2F2ZSBJbWFnZTwvYnV0dG9uPjwvZGl2PjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIHByb2R1Y3Rpb24iPjxzcGFuIGNsYXNzPSJsYWJlbCI+UHJvZHVjdGlvbjwvc3Bhbj48cD5Eb3dubG9hZCBhIGNvbXBsZXRlIHByZXZpZXcgcGFjayBmb3IgY3VzdG9tZXItc2VydmljZSBjb25maXJtYXRpb24sIG9yIGF0dGFjaCB0aGUgYXJ0d29yayBhbmQgc2V0dGluZ3MgdG8gdGhpcyBvcmRlci48L3A+PGRpdiBjbGFzcz0iYWN0aW9uLXJvdyI+PGJ1dHRvbiBjbGFzcz0iYnRuIiBpZD0iZG93bmxvYWQiIGRpc2FibGVkPkRvd25sb2FkIFBhY2s8L2J1dHRvbj48YnV0dG9uIGNsYXNzPSJidG4gYmx1ZSIgaWQ9ImF0dGFjaCIgZGlzYWJsZWQ+QXR0YWNoIHRvIE9yZGVyPC9idXR0b24+PC9kaXY+PHAgY2xhc3M9ImhpbnQiIGlkPSJwcm9kdWN0aW9uU3RhdHVzIiBhcmlhLWxpdmU9InBvbGl0ZSI+VXBsb2FkIGFydHdvcmsgYmVmb3JlIGV4cG9ydGluZyBvciBhdHRhY2hpbmcuPC9wPjwvZGl2PgogICAgICA8L2FzaWRlPgogICAgPC9zZWN0aW9uPgogIDwvbWFpbj4KICA8c2NyaXB0PgogICgoKT0+ewogICAgJ3VzZSBzdHJpY3QnOwogICAgY29uc3QgQVNTRVRTPXtsYXB0b3A6Jy9jZG4vc2hvcC9maWxlcy9DdXN0b21fbGFwdG9wX3N0aWNrZXJzLnBuZycsY2FyOicvY2RuL3Nob3AvZmlsZXMvYXJ0ZXRyaWJlLUN1c3RvbVVWRFRGVHJhbnNmZXJzLnBuZycsY3VwOicvY2RuL3Nob3AvZmlsZXMvY3VwLnBuZycsaGVsbWV0OicvY2RuL3Nob3AvZmlsZXMvQ3VzdG9tX0hlbG1ldF9TdGlja2Vycy5wbmcnfTsKICAgIGNvbnN0IGNhcnJpZXJzPXsKICAgICAgbGFwdG9wOntsYWJlbDonTGFwdG9wJyxzcmM6QVNTRVRTLmxhcHRvcCxjbGVhbjpbNDQ1LDI2MCwyODIsMzAwXSxhcnQ6WzU4NSw0MTQsMTg4LDE4OCwwXSxmaWxtOls1ODUsNDE0LDI1NSwyNzIsMF0sc3VyZmFjZTpbWzI2OSwxOTJdLFs4NjYsMjE2XSxbOTE0LDY5M10sWzMwOSw3NTNdXSxwbGFuZTpbNjAwLDQwMF0scGxhY2VtZW50OlszMDAsMjAwLDIxMCwxODBdfSwKICAgICAgY2FyOntsYWJlbDonQ2FyIHdpbmRvdycsc3JjOkFTU0VUUy5jYXIsY2xlYW46WzY0MiwzMTAsMTQwLDEwOV0sY2xlYW5Nb2RlOidyZWFyLXdpbmRvdy1nbGFzcycsYXJ0Ols3MDksMzYxLDkwLDkwLDBdLGZpbG06WzcwOSwzNjEsMTMwLDEyMiwwXX0sCiAgICAgIGN1cDp7bGFiZWw6J0dsYXNzJyxzcmM6QVNTRVRTLmN1cCxjbGVhbjpbMjcwLDI0MCw0MTAsMzkwXSxjbGVhbk1vZGU6J2dsYXNzLXN1cmZhY2UnLGFydDpbNDc1LDQzMywyMzIsMjMyLDBdLGZpbG06WzQ3NSw0MzMsMzc1LDM2MCwwXX0sCiAgICAgIGhlbG1ldDp7bGFiZWw6J0hlbG1ldCcsc3JjOkFTU0VUUy5oZWxtZXQsY2xlYW46WzQxNiwxOTgsNDYwLDQzMl0sY2xlYW5Nb2RlOidob3Jpem9udGFsLXNoZWxsJyxhcnQ6WzYxMCw0MDgsMjIwLDIyMCwwXSxmaWxtOls2MTAsNDA4LDM1NSwzNjAsMF19CiAgICB9OwogICAgY29uc3Qgc3RhdGU9e2NhcnJpZXI6J2xhcHRvcCcsaW1hZ2VzOnt9LGNsZWFuZWQ6e30sYXJ0Om51bGwsYXJ0Qm91bmRzOm51bGwsb3JpZ2luYWw6bnVsbCxvcmlnaW5hbEZpbGU6bnVsbCxwcm9jZXNzZWRGaWxlOm51bGwsYmFja2dyb3VuZFJlbW92ZWQ6ZmFsc2Usc2NhbGU6MTAwLHg6MCx5OjAscm90YXRpb246MCxiZzonI2U3ZjNmYid9OwogICAgY29uc3QgcGVlbD17cGhhc2U6J3NlYWxlZCcscHJvZ3Jlc3M6MCxjb3JuZXI6bnVsbCxob3ZlckNvcm5lcjpudWxsLGRyYWdnaW5nOmZhbHNlLG1vdmVkOmZhbHNlLGFuaW1hdGlvbjowLHJlbGVhc2VYOjAscmVsZWFzZVk6MCxyZWxlYXNlUm90YXRpb246MCxwb2ludGVyU2FtcGxlczpbXSxzdGFydFByb2dyZXNzOjAsc3RhcnRQb2ludGVyOm51bGwsZ2VvbWV0cnk6bnVsbCxxdWFkOm51bGwsd2lkdGg6MTAwLGhlaWdodDoxMDB9OwogICAgY29uc3QgcmVkdWNlTW90aW9uPW1hdGNoTWVkaWEoJyhwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpJykubWF0Y2hlczsKICAgIGNvbnN0ICQ9cz0+ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzKSxjYW52YXM9JCgnI3ByZXZpZXcnKSxjdHg9Y2FudmFzLmdldENvbnRleHQoJzJkJyx7YWxwaGE6ZmFsc2V9KTsKICAgIGNvbnN0IHVpPXtmaWxlOiQoJyNhcnR3b3JrJyksc3RhdHVzOiQoJyNzdGF0dXMnKSxyZW1vdmU6JCgnI3JlbW92ZUJnJyksc2F2ZTokKCcjc2F2ZScpLGRvd25sb2FkOiQoJyNkb3dubG9hZCcpLGF0dGFjaDokKCcjYXR0YWNoJykscHJvZDokKCcjcHJvZHVjdGlvblN0YXR1cycpLG5vdGU6JCgnI3N0YWdlTm90ZScpLHN1cmZhY2VzOiQoJyNzdXJmYWNlcycpLHNjYWxlOiQoJyNzY2FsZScpLHg6JCgnI3gnKSx5OiQoJyN5Jykscm90YXRpb246JCgnI3JvdGF0aW9uJyksYmc6JCgnI2JhY2tncm91bmQnKSx3cmFwOiQoJyNjYW52YXNXcmFwJyksZmlsbTokKCcjZmlsbScpLGZsaWdodDokKCcjZmlsbUZsaWdodCcpLG1hdGVyaWFsOiQoJyNmaWxtTWF0ZXJpYWwnKSxjbGlwOiQoJyNhZGhlcmVkQ2xpcFBhdGgnKSxhZGhlcmVkOiQoJyNhZGhlcmVkRmlsbScpLHNoZWVuOiQoJyNhZGhlcmVkU2hlZW4nKSxzaGFkb3c6JCgnI2NvbnRhY3RTaGFkb3cnKSxmbGFwOiQoJyNwZWVsZWRGbGFwJyksYmFjazokKCcjcGVlbGVkQmFjaycpLGNhdXN0aWM6JCgnI2ZsYXBDYXVzdGljJyksd3JpbmtsZUE6JCgnI2ZpbG1Xcmlua2xlQScpLHdyaW5rbGVCOiQoJyNmaWxtV3JpbmtsZUInKSx3cmlua2xlQzokKCcjZmlsbVdyaW5rbGVDJyksaGlnaGxpZ2h0OiQoJyNmb2xkSGlnaGxpZ2h0JyksZWRnZTokKCcjZm9sZEVkZ2UnKSxjdWU6JCgnI2Nvcm5lckN1ZScpLHJlc2V0RmlsbTokKCcjcmVzZXRGaWxtJyl9OwogICAgY29uc3Qgc3RhdHVzPSh0ZXh0LHR5cGU9JycpPT57dWkuc3RhdHVzLnRleHRDb250ZW50PXRleHQ7dWkuc3RhdHVzLmNsYXNzTmFtZT0nc3RhdHVzICcrdHlwZX07CiAgICBjb25zdCBsb2FkSW1hZ2U9c3JjPT5uZXcgUHJvbWlzZSgocmVzb2x2ZSxyZWplY3QpPT57Y29uc3QgaW09bmV3IEltYWdlKCk7aW0ub25sb2FkPSgpPT5yZXNvbHZlKGltKTtpbS5vbmVycm9yPXJlamVjdDtpbS5zcmM9c3JjfSk7CiAgICBjb25zdCBjbGFtcD0odixtaW49MCxtYXg9MSk9Pk1hdGgubWF4KG1pbixNYXRoLm1pbihtYXgsdikpOwogICAgY29uc3QgcG9pbnQ9dj0+YCR7dlswXS50b0ZpeGVkKDIpfSAke3ZbMV0udG9GaXhlZCgyKX1gOwogICAgY29uc3Qgc2V0UGF0aD0oZWwsZCk9PmVsLnNldEF0dHJpYnV0ZSgnZCcsZCk7CiAgICBmdW5jdGlvbiBidWlsZFN1cmZhY2VCdXR0b25zKCl7dWkuc3VyZmFjZXMuaW5uZXJIVE1MPU9iamVjdC5lbnRyaWVzKGNhcnJpZXJzKS5tYXAoKFtrZXksY10pPT5gPGJ1dHRvbiBjbGFzcz0ic3VyZmFjZSIgZGF0YS1jYXJyaWVyPSIke2tleX0iIGFyaWEtcHJlc3NlZD0iJHtrZXk9PT1zdGF0ZS5jYXJyaWVyfSI+PGltZyBzcmM9IiR7Yy5zcmN9IiBhbHQ9IiI+PHNwYW4+JHtjLmxhYmVsfTwvc3Bhbj48L2J1dHRvbj5gKS5qb2luKCcnKTt1aS5zdXJmYWNlcy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsZT0+e2NvbnN0IGI9ZS50YXJnZXQuY2xvc2VzdCgnW2RhdGEtY2Fycmllcl0nKTtpZighYilyZXR1cm47c3RhdGUuY2Fycmllcj1iLmRhdGFzZXQuY2Fycmllcjt1aS5zdXJmYWNlcy5xdWVyeVNlbGVjdG9yQWxsKCcuc3VyZmFjZScpLmZvckVhY2goeD0+eC5zZXRBdHRyaWJ1dGUoJ2FyaWEtcHJlc3NlZCcsU3RyaW5nKHg9PT1iKSkpO3Jlc2V0UGxhY2VtZW50KCk7cmVzZXRQZWVsKCk7cmVuZGVyKCl9KX0KICAgIGFzeW5jIGZ1bmN0aW9uIHByZXBhcmVDYXJyaWVycygpe2F3YWl0IFByb21pc2UuYWxsKE9iamVjdC5lbnRyaWVzKGNhcnJpZXJzKS5tYXAoYXN5bmMoW2tleSxjXSk9Pntjb25zdCBpbT1hd2FpdCBsb2FkSW1hZ2UoYy5zcmMpO3N0YXRlLmltYWdlc1trZXldPWltO2NvbnN0IG9mZj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtvZmYud2lkdGg9OTQ1O29mZi5oZWlnaHQ9OTQ1O2NvbnN0IG9jPW9mZi5nZXRDb250ZXh0KCcyZCcpO29jLmRyYXdJbWFnZShpbSwwLDAsOTQ1LDk0NSk7Y2xlYW5TdGlja2VyKG9jLGMuY2xlYW4sYy5jbGVhbk1vZGUpO3N0YXRlLmNsZWFuZWRba2V5XT1vZmZ9KSk7cmVuZGVyKCl9CiAgICBmdW5jdGlvbiBjbGVhblN0aWNrZXIob2MsW3gseSx3LGhdLG1vZGU9J2hvcml6b250YWwnKXsKICAgICAgY29uc3Qgc3JjPW9jLmdldEltYWdlRGF0YSgwLDAsOTQ1LDk0NSksZHN0PW9jLmNyZWF0ZUltYWdlRGF0YSh3LGgpLGQ9ZHN0LmRhdGEscz1zcmMuZGF0YTsKICAgICAgY29uc3QgcGl4ZWw9KHB4LHB5LGspPT5zWyhNYXRoLm1heCgwLE1hdGgubWluKDk0NCxweSkpKjk0NStNYXRoLm1heCgwLE1hdGgubWluKDk0NCxweCkpKSo0K2tdOwogICAgICBjb25zdCBzYW1wbGU9KHB4LHB5LGspPT57bGV0IHRvdGFsPTA7Zm9yKGxldCBuPS0yO248PTI7bisrKXRvdGFsKz1waXhlbChweCtuLHB5LGspO3JldHVybiB0b3RhbC81fTsKICAgICAgaWYobW9kZT09PSdyZWFyLXdpbmRvdy1nbGFzcycpewogICAgICAgIGNvbnN0IGF2ZXJhZ2U9KHgxLHgyLHB5LGspPT57bGV0IHRvdGFsPTAsY291bnQ9MDtmb3IobGV0IHB4PXgxO3B4PD14MjtweCs9Myl7Y29uc3QgYWxwaGE9cGl4ZWwocHgscHksMyksbHVtPShwaXhlbChweCxweSwwKStwaXhlbChweCxweSwxKStwaXhlbChweCxweSwyKSkvMztpZihhbHBoYT4yMjAmJmx1bT45NSl7dG90YWwrPXBpeGVsKHB4LHB5LGspO2NvdW50Kyt9fXJldHVybiBjb3VudD90b3RhbC9jb3VudDpwaXhlbCh4MSxweSxrKX07CiAgICAgICAgZm9yKGxldCB5eT0wO3l5PGg7eXkrKylmb3IobGV0IHh4PTA7eHg8dzt4eCsrKXsKICAgICAgICAgIGNvbnN0IGd4PXgreHgsZ3k9eSt5eSxzaT0oZ3kqOTQ1K2d4KSo0LGRpPSh5eSp3K3h4KSo0LGx1bT0oc1tzaV0rc1tzaSsxXStzW3NpKzJdKS8zOwogICAgICAgICAgaWYobHVtPDgyKXtmb3IobGV0IGs9MDtrPDQ7aysrKWRbZGkra109c1tzaStrXTtjb250aW51ZX0KICAgICAgICAgIGZvcihsZXQgaz0wO2s8MztrKyspewogICAgICAgICAgICBjb25zdCBsZWZ0PWF2ZXJhZ2UoNDg2LDU3MCxneSxrKSxyaWdodD1hdmVyYWdlKDU0OCw2MTYsZ3ksayksdD14eC9NYXRoLm1heCgxLHctMSk7CiAgICAgICAgICAgIGRbZGkra109TWF0aC5yb3VuZChsZWZ0KiguNzIrLjE4KnQpK3JpZ2h0KiguMjgtLjE4KnQpKTsKICAgICAgICAgIH0KICAgICAgICAgIGRbZGkrM109c1tzaSszXTsKICAgICAgICB9CiAgICAgICAgb2MucHV0SW1hZ2VEYXRhKGRzdCx4LHkpO3JldHVybjsKICAgICAgfQogICAgICBpZihtb2RlPT09J2dsYXNzLXN1cmZhY2UnKXsKICAgICAgICBjb25zdCBlZGdlPTEyLHJlYWQ9KHB4LHB5LGspPT5zYW1wbGUoTWF0aC5yb3VuZChweCksTWF0aC5yb3VuZChweSksayk7CiAgICAgICAgZm9yKGxldCB5eT0wO3l5PGg7eXkrKylmb3IobGV0IHh4PTA7eHg8dzt4eCsrKXsKICAgICAgICAgIGNvbnN0IHY9eXkvTWF0aC5tYXgoMSxoLTEpLGd4PXgreHgsZ3k9eSt5eSxzaT0oZ3kqOTQ1K2d4KSo0LGRpPSh5eSp3K3h4KSo0OwogICAgICAgICAgZm9yKGxldCBrPTA7azw0O2srKyl7CiAgICAgICAgICAgIGNvbnN0IHRvcD1yZWFkKGd4LHktZWRnZSxrKSxib3R0b209cmVhZChneCx5K2grZWRnZSxrKSx2ZXJ0aWNhbD10b3AqKDEtdikrYm90dG9tKnY7CiAgICAgICAgICAgIGRbZGkra109TWF0aC5yb3VuZChjbGFtcCh2ZXJ0aWNhbCwwLDI1NSkpOwogICAgICAgICAgfQogICAgICAgICAgaWYoc1tzaSszXTwxOClkW2RpKzNdPXNbc2krM107CiAgICAgICAgfQogICAgICAgIG9jLnB1dEltYWdlRGF0YShkc3QseCx5KTtyZXR1cm47CiAgICAgIH0KICAgICAgaWYobW9kZT09PSdob3Jpem9udGFsLXNoZWxsJyl7CiAgICAgICAgY29uc3QgYmFzaXM9KHB4LHB5KT0+e2NvbnN0IHU9KHB4LTUyMCkvMzgwLHY9KHB5LTM1MCkvMzAwO3JldHVyblsxLHUsdix1KnUsdSp2LHYqdl19OwogICAgICAgIGNvbnN0IHNvbHZlPShtYXRyaXgsdmVjdG9yKT0+e2NvbnN0IG09bWF0cml4Lm1hcCgocm93LGkpPT5bLi4ucm93LHZlY3RvcltpXV0pLG49dmVjdG9yLmxlbmd0aDtmb3IobGV0IGk9MDtpPG47aSsrKXtsZXQgcGl2b3Q9aTtmb3IobGV0IHI9aSsxO3I8bjtyKyspaWYoTWF0aC5hYnMobVtyXVtpXSk+TWF0aC5hYnMobVtwaXZvdF1baV0pKXBpdm90PXI7W21baV0sbVtwaXZvdF1dPVttW3Bpdm90XSxtW2ldXTtjb25zdCBkaXY9bVtpXVtpXXx8MWUtODtmb3IobGV0IGM9aTtjPD1uO2MrKyltW2ldW2NdLz1kaXY7Zm9yKGxldCByPTA7cjxuO3IrKylpZihyIT09aSl7Y29uc3QgZj1tW3JdW2ldO2ZvcihsZXQgYz1pO2M8PW47YysrKW1bcl1bY10tPWYqbVtpXVtjXX19cmV0dXJuIG0ubWFwKHJvdz0+cm93W25dKX07CiAgICAgICAgY29uc3QgZml0cz1bMCwxLDJdLm1hcChjaGFubmVsPT57Y29uc3QgYT1BcnJheS5mcm9tKHtsZW5ndGg6Nn0sKCk9PkFycmF5KDYpLmZpbGwoMCkpLGI9QXJyYXkoNikuZmlsbCgwKTtmb3IobGV0IHB5PTg2O3B5PD02NDA7cHkrPTE0KWZvcihsZXQgcHg9MTY1O3B4PD04NTA7cHgrPTE0KXtpZihweD40MTAmJnB5PjE4NSYmcHk8NjI1KWNvbnRpbnVlO2NvbnN0IGFscGhhPXBpeGVsKHB4LHB5LDMpLGx1bT0ocGl4ZWwocHgscHksMCkrcGl4ZWwocHgscHksMSkrcGl4ZWwocHgscHksMikpLzM7aWYoYWxwaGE8MjIwfHxsdW08MTc1KWNvbnRpbnVlO2NvbnN0IHE9YmFzaXMocHgscHkpO2ZvcihsZXQgaT0wO2k8NjtpKyspe2JbaV0rPXFbaV0qcGl4ZWwocHgscHksY2hhbm5lbCk7Zm9yKGxldCBqPTA7ajw2O2orKylhW2ldW2pdKz1xW2ldKnFbal19fXJldHVybiBzb2x2ZShhLGIpfSk7CiAgICAgICAgY29uc3QgcHJlZGljdD0ocHgscHksayk9PmJhc2lzKHB4LHB5KS5yZWR1Y2UoKHN1bSx2YWx1ZSxpKT0+c3VtK3ZhbHVlKmZpdHNba11baV0sMCk7CiAgICAgICAgY29uc3QgbmVhck91dHNpZGU9KHB4LHB5KT0+e2ZvcihsZXQgbj0xO248PTg7bisrKWlmKHBpeGVsKHB4K24scHksMyk8MTgpcmV0dXJuIHRydWU7cmV0dXJuIGZhbHNlfTsKICAgICAgICBmb3IobGV0IHl5PTA7eXk8aDt5eSsrKWZvcihsZXQgeHg9MDt4eDx3O3h4KyspewogICAgICAgICAgY29uc3QgZ3g9eCt4eCxneT15K3l5LHNpPShneSo5NDUrZ3gpKjQsZGk9KHl5KncreHgpKjQsYWxwaGE9c1tzaSszXSxsdW09KHNbc2ldK3Nbc2krMV0rc1tzaSsyXSkvMzsKICAgICAgICAgIGlmKGFscGhhPDE4fHwobHVtPDE0NSYmbmVhck91dHNpZGUoZ3gsZ3kpKSl7Zm9yKGxldCBrPTA7azw0O2srKylkW2RpK2tdPXNbc2kra107Y29udGludWV9CiAgICAgICAgICBjb25zdCBibGVuZD1jbGFtcChNYXRoLm1pbih4eC8xMix5eS8xOCwoaC0xLXl5KS8xNCkpOwogICAgICAgICAgZm9yKGxldCBrPTA7azwzO2srKylkW2RpK2tdPU1hdGgucm91bmQoc1tzaStrXSooMS1ibGVuZCkrY2xhbXAocHJlZGljdChneCxneSxrKSwwLDI1NSkqYmxlbmQpOwogICAgICAgICAgZFtkaSszXT1hbHBoYTsKICAgICAgICB9CiAgICAgICAgb2MucHV0SW1hZ2VEYXRhKGRzdCx4LHkpO3JldHVybjsKICAgICAgfQogICAgICBjb25zdCBvZmZzZXQ9MTAsbGVmdD1NYXRoLm1heCgwLHgtb2Zmc2V0KSxyaWdodD1NYXRoLm1pbig5NDQseCt3K29mZnNldCk7CiAgICAgIGZvcihsZXQgeXk9MDt5eTxoO3l5KyspZm9yKGxldCB4eD0wO3h4PHc7eHgrKyl7CiAgICAgICAgY29uc3QgdD14eC9NYXRoLm1heCgxLHctMSksZGk9KHl5KncreHgpKjQscHk9eSt5eTsKICAgICAgICBmb3IobGV0IGs9MDtrPDQ7aysrKWRbZGkra109TWF0aC5yb3VuZChzYW1wbGUobGVmdCxweSxrKSooMS10KStzYW1wbGUocmlnaHQscHksaykqdCk7CiAgICAgIH0KICAgICAgb2MucHV0SW1hZ2VEYXRhKGRzdCx4LHkpOwogICAgfQogICAgZnVuY3Rpb24gcm91bmRlZFJlY3QoYyx4LHksdyxoLHIpe2MuYmVnaW5QYXRoKCk7Yy5yb3VuZFJlY3QoeCx5LHcsaCxNYXRoLm1pbihyLHcvMixoLzIpKX0KICAgIGZ1bmN0aW9uIHByb2plY3RpdmVQb2ludChxLHUsdil7Y29uc3QgZHgxPXFbMV1bMF0tcVsyXVswXSxkeDI9cVszXVswXS1xWzJdWzBdLGR5MT1xWzFdWzFdLXFbMl1bMV0sZHkyPXFbM11bMV0tcVsyXVsxXSxzeD1xWzBdWzBdLXFbMV1bMF0rcVsyXVswXS1xWzNdWzBdLHN5PXFbMF1bMV0tcVsxXVsxXStxWzJdWzFdLXFbM11bMV0sZGVuPWR4MSpkeTItZHgyKmR5MSxnPU1hdGguYWJzKGRlbik8MWUtOD8wOihzeCpkeTItZHgyKnN5KS9kZW4saD1NYXRoLmFicyhkZW4pPDFlLTg\/MDooZHgxKnN5LXN4KmR5MSkvZGVuLGE9cVsxXVswXS1xWzBdWzBdK2cqcVsxXVswXSxiPXFbM11bMF0tcVswXVswXStoKnFbM11bMF0sZD1xWzFdWzFdLXFbMF1bMV0rZypxWzFdWzFdLGU9cVszXVsxXS1xWzBdWzFdK2gqcVszXVsxXSx6PWcqdStoKnYrMTtyZXR1cm5bKGEqdStiKnYrcVswXVswXSkveiwoZCp1K2UqditxWzBdWzFdKS96XX0KICAgIGZ1bmN0aW9uIHBsYWNlbWVudFF1YWQoY2ZnLGFzcGVjdCxwYWQ9MCl7Y29uc3QgW3BsYW5lVyxwbGFuZUhdPWNmZy5wbGFuZSxbYmFzZVgsYmFzZVksbWF4VyxtYXhIXT1jZmcucGxhY2VtZW50LGZpdEFzcGVjdD1NYXRoLm1heCguMDUsYXNwZWN0fHwxKSxmaXQ9TWF0aC5taW4obWF4Vy9maXRBc3BlY3QsbWF4SCksdz0oZml0KmZpdEFzcGVjdCtwYWQqMikqc3RhdGUuc2NhbGUvMTAwLGg9KGZpdCtwYWQqMikqc3RhdGUuc2NhbGUvMTAwLGN4PWJhc2VYK3N0YXRlLngsY3k9YmFzZVkrc3RhdGUueSxyPXN0YXRlLnJvdGF0aW9uKk1hdGguUEkvMTgwLGNvcz1NYXRoLmNvcyhyKSxzaW49TWF0aC5zaW4ociksY29ybmVycz1bWy13LzIsLWgvMl0sW3cvMiwtaC8yXSxbdy8yLGgvMl0sWy13LzIsaC8yXV07cmV0dXJuIGNvcm5lcnMubWFwKChbeCx5XSk9Pntjb25zdCBweD1jeCt4KmNvcy15KnNpbixweT1jeSt4KnNpbit5KmNvcztyZXR1cm4gcHJvamVjdGl2ZVBvaW50KGNmZy5zdXJmYWNlLHB4L3BsYW5lVyxweS9wbGFuZUgpfSl9CiAgICBmdW5jdGlvbiBkcmF3UGVyc3BlY3RpdmVFbXB0eShjLGNmZyl7Y29uc3QgcT1wbGFjZW1lbnRRdWFkKGNmZyw0LzMpLGNlbnRlcj1xLnJlZHVjZSgoc3VtLHApPT5bc3VtWzBdK3BbMF0vNCxzdW1bMV0rcFsxXS80XSxbMCwwXSksYW5nbGU9TWF0aC5hdGFuMihxWzFdWzFdLXFbMF1bMV0scVsxXVswXS1xWzBdWzBdKTtjLnNhdmUoKTtjLnNldExpbmVEYXNoKFsxMCw4XSk7Yy5saW5lV2lkdGg9MjtjLnN0cm9rZVN0eWxlPScjODVhNmJkJztjLmJlZ2luUGF0aCgpO2MubW92ZVRvKC4uLnFbMF0pO2ZvcihsZXQgaT0xO2k8cS5sZW5ndGg7aSsrKWMubGluZVRvKC4uLnFbaV0pO2MuY2xvc2VQYXRoKCk7Yy5zdHJva2UoKTtjLnNldExpbmVEYXNoKFtdKTtjLnRyYW5zbGF0ZSguLi5jZW50ZXIpO2Mucm90YXRlKGFuZ2xlKTtjLmZpbGxTdHlsZT0nIzUyNjE3Nic7Yy50ZXh0QWxpZ249J2NlbnRlcic7Yy50ZXh0QmFzZWxpbmU9J21pZGRsZSc7Yy5mb250PSc3MDAgMTVweCBBcmlhbCxzYW5zLXNlcmlmJztjLmZpbGxUZXh0KCdVUExPQUQgQVJUV09SSycsMCwyKTtjLnJlc3RvcmUoKX0KICAgIGZ1bmN0aW9uIGRyYXdFbXB0eShjLGNmZyl7Y29uc3QgW2N4LGN5LGZ3LGZoXT1jZmcuZmlsbTtpZihjZmcuc3VyZmFjZSl7ZHJhd1BlcnNwZWN0aXZlRW1wdHkoYyxjZmcpO3JldHVybn1jb25zdCBsYXllcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKSxib3hXPU1hdGgubWluKDIxMCxmdy0xNiksYm94SD1NYXRoLm1pbigxNjAsZmgtMTYpLGx4PShmdy1ib3hXKS8yLGx5PShmaC1ib3hIKS8yO2xheWVyLndpZHRoPU1hdGguY2VpbChmdyk7bGF5ZXIuaGVpZ2h0PU1hdGguY2VpbChmaCk7Y29uc3QgbGM9bGF5ZXIuZ2V0Q29udGV4dCgnMmQnKTtsYy5zZXRMaW5lRGFzaChbMTIsMTBdKTtsYy5saW5lV2lkdGg9MjtsYy5zdHJva2VTdHlsZT0nIzg1YTZiZCc7cm91bmRlZFJlY3QobGMsbHgsbHksYm94Vyxib3hILE1hdGgubWluKDE4LGJveFcqLjEyKSk7bGMuc3Ryb2tlKCk7bGMuc2V0TGluZURhc2goW10pO2xjLmZpbGxTdHlsZT0nIzUyNjE3Nic7bGMudGV4dEFsaWduPSdjZW50ZXInO2xjLnRleHRCYXNlbGluZT0nbWlkZGxlJztsYy5mb250PWA3MDAgJHtNYXRoLm1heCgxMCxNYXRoLm1pbigxOCxib3hXKi4wODYpKX1weCBBcmlhbCxzYW5zLXNlcmlmYDtsYy5maWxsVGV4dCgnVVBMT0FEIEFSVFdPUksnLGZ3LzIsZmgvMisyKTtjLnNhdmUoKTtjLnRyYW5zbGF0ZShjeCtzdGF0ZS54LGN5K3N0YXRlLnkpO2Mucm90YXRlKHN0YXRlLnJvdGF0aW9uKk1hdGguUEkvMTgwKTtjLnNjYWxlKHN0YXRlLnNjYWxlLzEwMCxzdGF0ZS5zY2FsZS8xMDApO2MuZHJhd0ltYWdlKGxheWVyLC1mdy8yLC1maC8yLGZ3LGZoKTtjLnJlc3RvcmUoKX0KICAgIGZ1bmN0aW9uIGRyYXdJbWFnZVRyaWFuZ2xlKGMsaW1nLHMwLHMxLHMyLGQwLGQxLGQyKXtjb25zdCBkZW49czBbMF0qKHMxWzFdLXMyWzFdKStzMVswXSooczJbMV0tczBbMV0pK3MyWzBdKihzMFsxXS1zMVsxXSk7aWYoTWF0aC5hYnMoZGVuKTwuMDAxKXJldHVybjtjb25zdCBhPShkMFswXSooczFbMV0tczJbMV0pK2QxWzBdKihzMlsxXS1zMFsxXSkrZDJbMF0qKHMwWzFdLXMxWzFdKSkvZGVuLGNjPShkMFswXSooczJbMF0tczFbMF0pK2QxWzBdKihzMFswXS1zMlswXSkrZDJbMF0qKHMxWzBdLXMwWzBdKSkvZGVuLGU9KGQwWzBdKihzMVswXSpzMlsxXS1zMlswXSpzMVsxXSkrZDFbMF0qKHMyWzBdKnMwWzFdLXMwWzBdKnMyWzFdKStkMlswXSooczBbMF0qczFbMV0tczFbMF0qczBbMV0pKS9kZW4sYj0oZDBbMV0qKHMxWzFdLXMyWzFdKStkMVsxXSooczJbMV0tczBbMV0pK2QyWzFdKihzMFsxXS1zMVsxXSkpL2RlbixkPShkMFsxXSooczJbMF0tczFbMF0pK2QxWzFdKihzMFswXS1zMlswXSkrZDJbMV0qKHMxWzBdLXMwWzBdKSkvZGVuLGY9KGQwWzFdKihzMVswXSpzMlsxXS1zMlswXSpzMVsxXSkrZDFbMV0qKHMyWzBdKnMwWzFdLXMwWzBdKnMyWzFdKStkMlsxXSooczBbMF0qczFbMV0tczFbMF0qczBbMV0pKS9kZW47Yy5zYXZlKCk7Yy5iZWdpblBhdGgoKTtjLm1vdmVUbyguLi5kMCk7Yy5saW5lVG8oLi4uZDEpO2MubGluZVRvKC4uLmQyKTtjLmNsb3NlUGF0aCgpO2MuY2xpcCgpO2Muc2V0VHJhbnNmb3JtKGEsYixjYyxkLGUsZik7Yy5kcmF3SW1hZ2UoaW1nLDAsMCk7Yy5yZXN0b3JlKCl9CiAgICBmdW5jdGlvbiB0cmFuc2Zvcm1lZFBvaW50KHAsY3gsY3kpe2NvbnN0IHM9c3RhdGUuc2NhbGUvMTAwLHI9c3RhdGUucm90YXRpb24qTWF0aC5QSS8xODAseD0ocFswXS1jeCkqcyx5PShwWzFdLWN5KSpzO3JldHVybltjeCtzdGF0ZS54K3gqTWF0aC5jb3MocikteSpNYXRoLnNpbihyKSxjeStzdGF0ZS55K3gqTWF0aC5zaW4ocikreSpNYXRoLmNvcyhyKV19CiAgICBmdW5jdGlvbiBkcmF3SW1hZ2VJblF1YWQoYyxpbWcscSxjb2xzPTEyLHJvd3M9MTIpe2ZvcihsZXQgeT0wO3k8cm93czt5KyspZm9yKGxldCB4PTA7eDxjb2xzO3grKyl7Y29uc3QgdTA9eC9jb2xzLHUxPSh4KzEpL2NvbHMsdjA9eS9yb3dzLHYxPSh5KzEpL3Jvd3MsczAwPVt1MCppbWcud2lkdGgsdjAqaW1nLmhlaWdodF0sczEwPVt1MSppbWcud2lkdGgsdjAqaW1nLmhlaWdodF0sczExPVt1MSppbWcud2lkdGgsdjEqaW1nLmhlaWdodF0sczAxPVt1MCppbWcud2lkdGgsdjEqaW1nLmhlaWdodF0sZDAwPXByb2plY3RpdmVQb2ludChxLHUwLHYwKSxkMTA9cHJvamVjdGl2ZVBvaW50KHEsdTEsdjApLGQxMT1wcm9qZWN0aXZlUG9pbnQocSx1MSx2MSksZDAxPXByb2plY3RpdmVQb2ludChxLHUwLHYxKTtkcmF3SW1hZ2VUcmlhbmdsZShjLGltZyxzMDAsczEwLHMxMSxkMDAsZDEwLGQxMSk7ZHJhd0ltYWdlVHJpYW5nbGUoYyxpbWcsczAwLHMxMSxzMDEsZDAwLGQxMSxkMDEpfX0KICAgIGZ1bmN0aW9uIGFydExheW91dChjZmcpe2NvbnN0IFssICx3LGhdPWNmZy5hcnQsWywsZncsZmhdPWNmZy5maWxtLGltPXN0YXRlLmFydCxiPXN0YXRlLmFydEJvdW5kc3x8e3g6MCx5OjAsdzppbS53aWR0aCxoOmltLmhlaWdodH0scmF0aW89TWF0aC5taW4ody9iLncsaC9iLmgpLGR3PWIudypyYXRpbyxkaD1iLmgqcmF0aW87cmV0dXJue2IsZHcsZGgsZncsZmgsYXg6KGZ3LWR3KS8yLGF5OihmaC1kaCkvMn19CiAgICBmdW5jdGlvbiBkcmF3QXJ0d29yayhjLGNmZyl7aWYoIXN0YXRlLmFydClyZXR1cm47Y29uc3QgW2Z4LGZ5XT1jZmcuZmlsbSxsPWFydExheW91dChjZmcpO2lmKGNmZy5zdXJmYWNlKXtjb25zdCBjcm9wcGVkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO2Nyb3BwZWQud2lkdGg9TWF0aC5tYXgoMSxNYXRoLmNlaWwobC5iLncpKTtjcm9wcGVkLmhlaWdodD1NYXRoLm1heCgxLE1hdGguY2VpbChsLmIuaCkpO2Nyb3BwZWQuZ2V0Q29udGV4dCgnMmQnKS5kcmF3SW1hZ2Uoc3RhdGUuYXJ0LGwuYi54LGwuYi55LGwuYi53LGwuYi5oLDAsMCxjcm9wcGVkLndpZHRoLGNyb3BwZWQuaGVpZ2h0KTtjb25zdCBxPXBsYWNlbWVudFF1YWQoY2ZnLGwuYi53L2wuYi5oKTtkcmF3SW1hZ2VJblF1YWQoYyxjcm9wcGVkLHEpO3JldHVybn1jb25zdCBsYXllcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtsYXllci53aWR0aD1NYXRoLmNlaWwobC5mdyk7bGF5ZXIuaGVpZ2h0PU1hdGguY2VpbChsLmZoKTtsYXllci5nZXRDb250ZXh0KCcyZCcpLmRyYXdJbWFnZShzdGF0ZS5hcnQsbC5iLngsbC5iLnksbC5iLncsbC5iLmgsbC5heCxsLmF5LGwuZHcsbC5kaCk7Yy5zYXZlKCk7Yy50cmFuc2xhdGUoZngrc3RhdGUueCxmeStzdGF0ZS55KTtjLnJvdGF0ZShzdGF0ZS5yb3RhdGlvbipNYXRoLlBJLzE4MCk7Yy5zY2FsZShzdGF0ZS5zY2FsZS8xMDAsc3RhdGUuc2NhbGUvMTAwKTtjLmRyYXdJbWFnZShsYXllciwtbC5mdy8yLC1sLmZoLzIsbC5mdyxsLmZoKTtjLnJlc3RvcmUoKX0KICAgIGZ1bmN0aW9uIGZpbG1RdWFkKGNmZyxsKXtjb25zdCBbZngsZnldPWNmZy5maWxtLHBhZD04LGxlZnQ9bC5heC1wYWQsdG9wPWwuYXktcGFkLHJpZ2h0PWwuYXgrbC5kdytwYWQsYm90dG9tPWwuYXkrbC5kaCtwYWQ7aWYoY2ZnLnN1cmZhY2UpcmV0dXJuIHBsYWNlbWVudFF1YWQoY2ZnLGwuYi53L2wuYi5oLHBhZCk7Y29uc3QgcG9pbnRzPVtbZngtbC5mdy8yK2xlZnQsZnktbC5maC8yK3RvcF0sW2Z4LWwuZncvMityaWdodCxmeS1sLmZoLzIrdG9wXSxbZngtbC5mdy8yK3JpZ2h0LGZ5LWwuZmgvMitib3R0b21dLFtmeC1sLmZ3LzIrbGVmdCxmeS1sLmZoLzIrYm90dG9tXV07cmV0dXJuIHBvaW50cy5tYXAocD0+dHJhbnNmb3JtZWRQb2ludChwLGZ4LGZ5KSl9CiAgICBmdW5jdGlvbiBzb2x2ZUxpbmVhcihhLGIpe2NvbnN0IG49Yi5sZW5ndGgsbT1hLm1hcCgocm93LGkpPT5bLi4ucm93LGJbaV1dKTtmb3IobGV0IGk9MDtpPG47aSsrKXtsZXQgcGl2b3Q9aTtmb3IobGV0IHI9aSsxO3I8bjtyKyspaWYoTWF0aC5hYnMobVtyXVtpXSk+TWF0aC5hYnMobVtwaXZvdF1baV0pKXBpdm90PXI7W21baV0sbVtwaXZvdF1dPVttW3Bpdm90XSxtW2ldXTtjb25zdCBkaXY9bVtpXVtpXXx8MWUtOTtmb3IobGV0IGM9aTtjPD1uO2MrKyltW2ldW2NdLz1kaXY7Zm9yKGxldCByPTA7cjxuO3IrKylpZihyIT09aSl7Y29uc3QgZj1tW3JdW2ldO2ZvcihsZXQgYz1pO2M8PW47YysrKW1bcl1bY10tPWYqbVtpXVtjXX19cmV0dXJuIG0ubWFwKHJvdz0+cm93W25dKX0KICAgIGZ1bmN0aW9uIGhvbW9ncmFwaHkodyxoLHEpe2NvbnN0IHNyYz1bWzAsMF0sW3csMF0sW3csaF0sWzAsaF1dLGE9W10sYj1bXTtmb3IobGV0IGk9MDtpPDQ7aSsrKXtjb25zdCBbeCx5XT1zcmNbaV0sW1gsWV09cVtpXTthLnB1c2goW3gseSwxLDAsMCwwLC1YKngsLVgqeV0pO2IucHVzaChYKTthLnB1c2goWzAsMCwwLHgseSwxLC1ZKngsLVkqeV0pO2IucHVzaChZKX1jb25zdCBbQSxCLEMsRCxFLEYsRyxIXT1zb2x2ZUxpbmVhcihhLGIpO3JldHVybmBtYXRyaXgzZCgke0F9LCR7RH0sMCwke0d9LCR7Qn0sJHtFfSwwLCR7SH0sMCwwLDEsMCwke0N9LCR7Rn0sMCwxKWB9CiAgICBmdW5jdGlvbiBtYWtlR2VvbWV0cnkodyxoKXtjb25zdCByZWN0PVtbMCwwXSxbdywwXSxbdyxoXSxbMCxoXV0sY29ybmVycz17dGw6e25hbWU6J1RvcC1sZWZ0JyxzdGFydDpyZWN0WzBdLG9wcG9zaXRlOnJlY3RbMl0sZWRnZUE6WzEsMF0sZWRnZUI6WzAsMV0saGFuZDoxfSx0cjp7bmFtZTonVG9wLXJpZ2h0JyxzdGFydDpyZWN0WzFdLG9wcG9zaXRlOnJlY3RbM10sZWRnZUE6Wy0xLDBdLGVkZ2VCOlswLDFdLGhhbmQ6LTF9LGJyOntuYW1lOidCb3R0b20tcmlnaHQnLHN0YXJ0OnJlY3RbMl0sb3Bwb3NpdGU6cmVjdFswXSxlZGdlQTpbLTEsMF0sZWRnZUI6WzAsLTFdLGhhbmQ6MX0sYmw6e25hbWU6J0JvdHRvbS1sZWZ0JyxzdGFydDpyZWN0WzNdLG9wcG9zaXRlOnJlY3RbMV0sZWRnZUE6WzEsMF0sZWRnZUI6WzAsLTFdLGhhbmQ6LTF9fSxhZGQ9KGEsYik9PlthWzBdK2JbMF0sYVsxXStiWzFdXSxzY2FsZT0odixuKT0+W3ZbMF0qbix2WzFdKm5dLHN1Yj0oYSxiKT0+W2FbMF0tYlswXSxhWzFdLWJbMV1dLGRvdD0oYSxiKT0+YVswXSpiWzBdK2FbMV0qYlsxXSxsZW49dj0+TWF0aC5oeXBvdCh2WzBdLHZbMV0pLG5vcm09dj0+e2NvbnN0IG49bGVuKHYpfHwxO3JldHVyblt2WzBdL24sdlsxXS9uXX0scG9seT1wPT5wLmxlbmd0aD9gTSAke3AubWFwKHBvaW50KS5qb2luKCcgTCAnKX0gWmA6Jyc7CiAgICAgIGZ1bmN0aW9uIGNsaXAocG9seWdvbix2YWx1ZSxwb3NpdGl2ZSl7Y29uc3Qgb3V0PVtdO2ZvcihsZXQgaT0wO2k8cG9seWdvbi5sZW5ndGg7aSsrKXtjb25zdCBjdXI9cG9seWdvbltpXSxuZXh0PXBvbHlnb25bKGkrMSklcG9seWdvbi5sZW5ndGhdLGN2PXZhbHVlKGN1ciksbnY9dmFsdWUobmV4dCksY2k9cG9zaXRpdmU\/Y3Y+PS0uMDAxOmN2PD0uMDAxLG5pPXBvc2l0aXZlP252Pj0tLjAwMTpudjw9LjAwMTtpZihjaSlvdXQucHVzaChjdXIpO2lmKGNpIT09bmkpe2NvbnN0IHQ9Y3YvKGN2LW52KTtvdXQucHVzaChbY3VyWzBdKyhuZXh0WzBdLWN1clswXSkqdCxjdXJbMV0rKG5leHRbMV0tY3VyWzFdKSp0XSl9fXJldHVybiBvdXR9CiAgICAgIGZ1bmN0aW9uIGludGVyc2VjdGlvbnModmFsdWUpe2NvbnN0IGhpdHM9W107Zm9yKGxldCBpPTA7aTxyZWN0Lmxlbmd0aDtpKyspe2NvbnN0IGE9cmVjdFtpXSxiPXJlY3RbKGkrMSklcmVjdC5sZW5ndGhdLGF2PXZhbHVlKGEpLGJ2PXZhbHVlKGIpO2lmKE1hdGguYWJzKGF2KTwuMDAxKWhpdHMucHVzaChhKTtpZihhdipidjwwKXtjb25zdCB0PWF2Lyhhdi1idik7aGl0cy5wdXNoKFthWzBdKyhiWzBdLWFbMF0pKnQsYVsxXSsoYlsxXS1hWzFdKSp0XSl9fXJldHVybiBoaXRzLmZpbHRlcigocCxpKT0+aGl0cy5maW5kSW5kZXgodj0+TWF0aC5oeXBvdChwWzBdLXZbMF0scFsxXS12WzFdKTwuMDUpPT09aSl9CiAgICAgIGZ1bmN0aW9uIGN1ZShpZCxzaXplPU1hdGgubWluKHcsaCkqLjE3KXtjb25zdCBjPWNvcm5lcnNbaWRdLGE9YWRkKGMuc3RhcnQsc2NhbGUoYy5lZGdlQSxzaXplKSksYj1hZGQoYy5zdGFydCxzY2FsZShjLmVkZ2VCLHNpemUpKSxjcm93bj1hZGQoYy5zdGFydCxzY2FsZShhZGQoYy5lZGdlQSxjLmVkZ2VCKSxzaXplKi4zOCkpO3JldHVybmBNICR7cG9pbnQoYy5zdGFydCl9IEwgJHtwb2ludChhKX0gUSAke3BvaW50KGNyb3duKX0gJHtwb2ludChiKX0gWmB9CiAgICAgIGZ1bmN0aW9uIGJ1aWxkKGlkLHByb2dyZXNzKXtjb25zdCBjPWNvcm5lcnNbaWRdLHRyYXZlbD1zdWIoYy5vcHBvc2l0ZSxjLnN0YXJ0KSxkaXJlY3Rpb249bm9ybSh0cmF2ZWwpLG5vcm1hbD1bLWRpcmVjdGlvblsxXSxkaXJlY3Rpb25bMF1dLHRvdGFsPWxlbih0cmF2ZWwpLGRpc3RhbmNlPXRvdGFsKmNsYW1wKHByb2dyZXNzLC4wMTIsLjk5OCksdmFsdWU9cD0+ZG90KHN1YihwLGMuc3RhcnQpLGRpcmVjdGlvbiktZGlzdGFuY2UsYWRoZXJlZD1jbGlwKHJlY3QsdmFsdWUsdHJ1ZSkscGVlbGVkPWNsaXAocmVjdCx2YWx1ZSxmYWxzZSksZm9sZD1pbnRlcnNlY3Rpb25zKHZhbHVlKS5zb3J0KChhLGIpPT5kb3QoYSxub3JtYWwpLWRvdChiLG5vcm1hbCkpLGxpZnQ9Mys5Kk1hdGguc2luKHByb2dyZXNzKk1hdGguUEkpLHJlZmxlY3Rpb249MS44NC0uMjQqcHJvZ3Jlc3MsdHJhbnNmb3JtPXA9Pntjb25zdCBkZXB0aD1NYXRoLm1heCgwLGRpc3RhbmNlLWRvdChzdWIocCxjLnN0YXJ0KSxkaXJlY3Rpb24pKSxyYXRpbz1jbGFtcChkZXB0aC9NYXRoLm1heChkaXN0YW5jZSwxKSksZm9sZE92ZXI9c2NhbGUoZGlyZWN0aW9uLGRlcHRoKnJlZmxlY3Rpb24pLGJyb2FkPU1hdGguc2luKHJhdGlvKk1hdGguUEkpKmxpZnQsZmluZT1NYXRoLnNpbihyYXRpbypNYXRoLlBJKjIuNCkqTWF0aC5zaW4ocHJvZ3Jlc3MqTWF0aC5QSSkqMS44O3JldHVybiBhZGQocCxhZGQoZm9sZE92ZXIsc2NhbGUobm9ybWFsLGMuaGFuZCooYnJvYWQrZmluZSkpKSl9LGZsYXA9cGVlbGVkLm1hcCh0cmFuc2Zvcm0pO2xldCBmb2xkUGF0aD0nJyx3cmlua2xlcz1bJycsJycsJyddO2lmKGZvbGQubGVuZ3RoPj0yKXtjb25zdCBhPWZvbGRbMF0sYj1mb2xkW2ZvbGQubGVuZ3RoLTFdLG9uZT1hZGQoYSxzY2FsZShzdWIoYixhKSwuMzQpKSx0d289YWRkKGEsc2NhbGUoc3ViKGIsYSksLjY3KSksYm93PXNjYWxlKGRpcmVjdGlvbiwxLjUrMy41Kk1hdGguc2luKHByb2dyZXNzKk1hdGguUEkpKTtmb2xkUGF0aD1gTSAke3BvaW50KGEpfSBDICR7cG9pbnQoYWRkKG9uZSxib3cpKX0gJHtwb2ludChhZGQodHdvLGJvdykpfSAke3BvaW50KGIpfWA7Y29uc3QgaGVsZD10cmFuc2Zvcm0oYy5zdGFydCksZjI1PWFkZChhLHNjYWxlKHN1YihiLGEpLC4yNSkpLGY1Mj1hZGQoYSxzY2FsZShzdWIoYixhKSwuNTIpKSxmNzg9YWRkKGEsc2NhbGUoc3ViKGIsYSksLjc4KSksdG93YXJkPW5vcm0oc3ViKGhlbGQsZjUyKSksY3Jvc3M9Wy10b3dhcmRbMV0sdG93YXJkWzBdXSxzdHJlbmd0aD01KzkqTWF0aC5zaW4ocHJvZ3Jlc3MqTWF0aC5QSSk7d3JpbmtsZXM9W2BNICR7cG9pbnQoZjI1KX0gUSAke3BvaW50KGFkZChhZGQoZjI1LHNjYWxlKHRvd2FyZCxsZW4oc3ViKGhlbGQsZjI1KSkqLjU1KSksc2NhbGUoY3Jvc3MsYy5oYW5kKnN0cmVuZ3RoKSkpfSAke3BvaW50KGFkZChoZWxkLHNjYWxlKGNyb3NzLGMuaGFuZCo1KSkpfWAsYE0gJHtwb2ludChmNTIpfSBRICR7cG9pbnQoYWRkKGFkZChmNTIsc2NhbGUodG93YXJkLGxlbihzdWIoaGVsZCxmNTIpKSouNDgpKSxzY2FsZShjcm9zcywtYy5oYW5kKnN0cmVuZ3RoKi40NSkpKX0gJHtwb2ludChhZGQoaGVsZCxzY2FsZShjcm9zcywtYy5oYW5kKjgpKSl9YCxgTSAke3BvaW50KGY3OCl9IFEgJHtwb2ludChhZGQoYWRkKGY3OCxzY2FsZSh0b3dhcmQsbGVuKHN1YihoZWxkLGY3OCkpKi40MikpLHNjYWxlKGNyb3NzLGMuaGFuZCpzdHJlbmd0aCouNykpKX0gJHtwb2ludChhZGQoaGVsZCxzY2FsZShjcm9zcyxjLmhhbmQqMTEpKSl9YF19cmV0dXJue2FkaGVyZWQ6cG9seShhZGhlcmVkKSxmbGFwOnBvbHkoZmxhcCksZm9sZDpmb2xkUGF0aCx3cmlua2xlcyxkaXJlY3Rpb24sdG90YWwsY29ybmVyOmN9fQogICAgICByZXR1cm57Y29ybmVycyxidWlsZCxjdWUsc3ViLGRvdH07CiAgICB9CiAgICBmdW5jdGlvbiBmdWxsRmlsbVBhdGgoKXtjb25zdCByPU1hdGgubWluKHBlZWwud2lkdGgscGVlbC5oZWlnaHQpKi4wNDUsdz1wZWVsLndpZHRoLGg9cGVlbC5oZWlnaHQ7cmV0dXJuYE0gJHtyfSAwIEggJHt3LXJ9IFEgJHt3fSAwICR7d30gJHtyfSBWICR7aC1yfSBRICR7d30gJHtofSAke3ctcn0gJHtofSBIICR7cn0gUSAwICR7aH0gMCAke2gtcn0gViAke3J9IFEgMCAwICR7cn0gMCBaYH0KICAgIGZ1bmN0aW9uIHNldEZpbG1HZW9tZXRyeSgpe2NvbnN0IGZ1bGw9ZnVsbEZpbG1QYXRoKCksZz1wZWVsLmNvcm5lciYmcGVlbC5wcm9ncmVzcz4uMDA0P3BlZWwuZ2VvbWV0cnkuYnVpbGQocGVlbC5jb3JuZXIscGVlbC5wcm9ncmVzcyk6bnVsbDtzZXRQYXRoKHVpLmFkaGVyZWQsZnVsbCk7c2V0UGF0aCh1aS5zaGVlbixgTSAwICR7KC1wZWVsLmhlaWdodCouMTIpLnRvRml4ZWQoMil9IEwgJHsocGVlbC53aWR0aCouMikudG9GaXhlZCgyKX0gJHsoLXBlZWwuaGVpZ2h0Ki4xMikudG9GaXhlZCgyKX0gTCAke3BlZWwud2lkdGgudG9GaXhlZCgyKX0gJHsocGVlbC5oZWlnaHQqMS4wNikudG9GaXhlZCgyKX0gTCAkeyhwZWVsLndpZHRoKi43OCkudG9GaXhlZCgyKX0gJHsocGVlbC5oZWlnaHQqMS4wNikudG9GaXhlZCgyKX0gWmApO3NldFBhdGgodWkuY2xpcCxnP2cuYWRoZXJlZDpmdWxsKTtpZihnKXtzZXRQYXRoKHVpLnNoYWRvdyxnLmZvbGQpO3NldFBhdGgodWkuZmxhcCxnLmZsYXApO3NldFBhdGgodWkuYmFjayxnLmZsYXApO3NldFBhdGgodWkuY2F1c3RpYyxnLmZsYXApO3NldFBhdGgodWkud3JpbmtsZUEsZy53cmlua2xlc1swXSk7c2V0UGF0aCh1aS53cmlua2xlQixnLndyaW5rbGVzWzFdKTtzZXRQYXRoKHVpLndyaW5rbGVDLGcud3JpbmtsZXNbMl0pO3NldFBhdGgodWkuaGlnaGxpZ2h0LGcuZm9sZCk7c2V0UGF0aCh1aS5lZGdlLGcuZm9sZCl9ZWxzZVt1aS5zaGFkb3csdWkuZmxhcCx1aS5iYWNrLHVpLmNhdXN0aWMsdWkud3JpbmtsZUEsdWkud3JpbmtsZUIsdWkud3JpbmtsZUMsdWkuaGlnaGxpZ2h0LHVpLmVkZ2VdLmZvckVhY2goZWw9PnNldFBhdGgoZWwsJycpKTtjb25zdCBjdWU9cGVlbC5waGFzZT09PSdzZWFsZWQnP3BlZWwuaG92ZXJDb3JuZXI6cGVlbC5jb3JuZXI7c2V0UGF0aCh1aS5jdWUsY3VlP3BlZWwuZ2VvbWV0cnkuY3VlKGN1ZSk6JycpO3VpLmN1ZS5jbGFzc0xpc3QudG9nZ2xlKCdpcy12aXNpYmxlJyxwZWVsLnBoYXNlPT09J3NlYWxlZCcmJkJvb2xlYW4ocGVlbC5ob3ZlckNvcm5lcikpO3VpLmZsaWdodC5zdHlsZS50cmFuc2Zvcm1PcmlnaW49YCR7cGVlbC5xdWFkP3BlZWwucXVhZC5yZWR1Y2UoKG4scCk9Pm4rcFswXSwwKS80OjB9cHggJHtwZWVsLnF1YWQ\/cGVlbC5xdWFkLnJlZHVjZSgobixwKT0+bitwWzFdLDApLzQ6MH1weGA7dWkuZmxpZ2h0LnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlKCR7cGVlbC5yZWxlYXNlWH1weCwke3BlZWwucmVsZWFzZVl9cHgpIHJvdGF0ZSgke3BlZWwucmVsZWFzZVJvdGF0aW9ufWRlZylgfQogICAgZnVuY3Rpb24gc3luY0ZpbG0oKXtpZighc3RhdGUuYXJ0fHxwZWVsLnBoYXNlPT09J3JlbW92ZWQnKXt1aS5maWxtLmNsYXNzTGlzdC5hZGQoJ2lzLWhpZGRlbicpO3JldHVybn1jb25zdCBjZmc9Y2FycmllcnNbc3RhdGUuY2Fycmllcl0sbD1hcnRMYXlvdXQoY2ZnKSxxPWZpbG1RdWFkKGNmZyxsKSxzY2FsZT11aS53cmFwLmNsaWVudFdpZHRoLzk0NSxxdWFkPXEubWFwKHA9PltwWzBdKnNjYWxlLHBbMV0qc2NhbGVdKSx3aWR0aD0obC5kdysxNikqc2NhbGUsaGVpZ2h0PShsLmRoKzE2KSpzY2FsZTtwZWVsLnF1YWQ9cXVhZDtwZWVsLndpZHRoPWwuZHcrMTY7cGVlbC5oZWlnaHQ9bC5kaCsxNjtwZWVsLmdlb21ldHJ5PW1ha2VHZW9tZXRyeShwZWVsLndpZHRoLHBlZWwuaGVpZ2h0KTt1aS5maWxtLmNsYXNzTGlzdC5yZW1vdmUoJ2lzLWhpZGRlbicpO3VpLmZpbG0uc2V0QXR0cmlidXRlKCd2aWV3Qm94JyxgMCAwICR7cGVlbC53aWR0aH0gJHtwZWVsLmhlaWdodH1gKTt1aS5maWxtLnN0eWxlLndpZHRoPXdpZHRoKydweCc7dWkuZmlsbS5zdHlsZS5oZWlnaHQ9aGVpZ2h0KydweCc7dWkuZmlsbS5zdHlsZS50cmFuc2Zvcm09aG9tb2dyYXBoeSh3aWR0aCxoZWlnaHQscXVhZCk7c2V0RmlsbUdlb21ldHJ5KCl9CiAgICBmdW5jdGlvbiByZW5kZXIoKXtjdHguZmlsbFN0eWxlPXN0YXRlLmJnO2N0eC5maWxsUmVjdCgwLDAsOTQ1LDk0NSk7Y29uc3QgYmFzZT1zdGF0ZS5jbGVhbmVkW3N0YXRlLmNhcnJpZXJdO2lmKGJhc2UpY3R4LmRyYXdJbWFnZShiYXNlLDAsMCk7aWYoc3RhdGUuYXJ0KWRyYXdBcnR3b3JrKGN0eCxjYXJyaWVyc1tzdGF0ZS5jYXJyaWVyXSk7ZWxzZSBkcmF3RW1wdHkoY3R4LGNhcnJpZXJzW3N0YXRlLmNhcnJpZXJdKTtzeW5jRmlsbSgpfQogICAgZnVuY3Rpb24gcmVzZXRQbGFjZW1lbnQoKXtzdGF0ZS5zY2FsZT0xMDA7c3RhdGUueD0wO3N0YXRlLnk9MDtzdGF0ZS5yb3RhdGlvbj0wO2Zvcihjb25zdCBrIG9mIFsnc2NhbGUnLCd4JywneScsJ3JvdGF0aW9uJ10pdWlba10udmFsdWU9c3RhdGVba107dXBkYXRlT3V0cHV0cygpfQogICAgZnVuY3Rpb24gY2FuY2VsUGVlbCgpe2NhbmNlbEFuaW1hdGlvbkZyYW1lKHBlZWwuYW5pbWF0aW9uKTtwZWVsLmFuaW1hdGlvbj0wfQogICAgZnVuY3Rpb24gcmVzZXRQZWVsKCl7Y2FuY2VsUGVlbCgpO09iamVjdC5hc3NpZ24ocGVlbCx7cGhhc2U6J3NlYWxlZCcscHJvZ3Jlc3M6MCxjb3JuZXI6bnVsbCxob3ZlckNvcm5lcjpudWxsLGRyYWdnaW5nOmZhbHNlLG1vdmVkOmZhbHNlLHJlbGVhc2VYOjAscmVsZWFzZVk6MCxyZWxlYXNlUm90YXRpb246MCxwb2ludGVyU2FtcGxlczpbXX0pO3VpLm5vdGUudGV4dENvbnRlbnQ9c3RhdGUuYXJ0PydDbGljayBhbnkgZmlsbSBjb3JuZXIgdG8gbGlmdCBpdCwgdGhlbiBkcmFnIGRpYWdvbmFsbHknOidVcGxvYWQgYXJ0d29yayB0byByZXBsYWNlIHRoZSBzYW1wbGUgc3RpY2tlcic7cmVuZGVyKCl9CiAgICBmdW5jdGlvbiB1cGRhdGVPdXRwdXRzKCl7JCgnI3NjYWxlT3V0JykudGV4dENvbnRlbnQ9c3RhdGUuc2NhbGUrJyUnOyQoJyN4T3V0JykudGV4dENvbnRlbnQ9U3RyaW5nKHN0YXRlLngpOyQoJyN5T3V0JykudGV4dENvbnRlbnQ9U3RyaW5nKHN0YXRlLnkpOyQoJyNyb3RhdGlvbk91dCcpLnRleHRDb250ZW50PXN0YXRlLnJvdGF0aW9uKyfCsCd9CiAgICBmdW5jdGlvbiBtYXJrRGlydHkoKXt1aS5wcm9kLnRleHRDb250ZW50PSdTZXR0aW5ncyBjaGFuZ2VkLiBBdHRhY2ggYWdhaW4gYmVmb3JlIGFkZGluZyB0byBjYXJ0Lic7dWkucHJvZC5zdHlsZS5jb2xvcj0nI2I1NDcwOCc7cGFyZW50LnBvc3RNZXNzYWdlKHt0eXBlOidhcnRldHJpYmU6cHJvZHVjdGlvbi1jb25maWctZGlydHknfSxsb2NhdGlvbi5vcmlnaW4pfQogICAgZnVuY3Rpb24gbmVhcmVzdFNjcmVlbkNvcm5lcihlKXtjb25zdCBib3g9dWkud3JhcC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxwPVtlLmNsaWVudFgtYm94LmxlZnQsZS5jbGllbnRZLWJveC50b3BdO3JldHVybiBPYmplY3Qua2V5cyhwZWVsLmdlb21ldHJ5LmNvcm5lcnMpLnJlZHVjZSgoYmVzdCxpZCxpKT0+e2NvbnN0IHE9cGVlbC5xdWFkW2ldLGRpc3RhbmNlPU1hdGguaHlwb3QocFswXS1xWzBdLHBbMV0tcVsxXSk7cmV0dXJuIWJlc3R8fGRpc3RhbmNlPGJlc3QuZGlzdGFuY2U\/e2lkLGRpc3RhbmNlLHBvaW50OnB9OmJlc3R9LG51bGwpfQogICAgZnVuY3Rpb24gc2NyZWVuRGlyZWN0aW9uKCl7Y29uc3QgaWRzPVsndGwnLCd0cicsJ2JyJywnYmwnXSxpPWlkcy5pbmRleE9mKHBlZWwuY29ybmVyKSxqPShpKzIpJTQsYT1wZWVsLnF1YWRbaV0sYj1wZWVsLnF1YWRbal0sZHg9YlswXS1hWzBdLGR5PWJbMV0tYVsxXSxuPU1hdGguaHlwb3QoZHgsZHkpfHwxO3JldHVybntkaXI6W2R4L24sZHkvbl0sdG90YWw6bn19CiAgICBmdW5jdGlvbiBhbmltYXRlUGVlbCh0YXJnZXQsZHVyYXRpb24sZG9uZSxlYXNpbmc9J3Ntb290aCcpe2NhbmNlbFBlZWwoKTtjb25zdCBmcm9tPXBlZWwucHJvZ3Jlc3MsZGlzdGFuY2U9dGFyZ2V0LWZyb207aWYocmVkdWNlTW90aW9uKXtwZWVsLnByb2dyZXNzPXRhcmdldDtkb25lPy4oKTtyZW5kZXIoKTtyZXR1cm59Y29uc3Qgc3RhcnQ9cGVyZm9ybWFuY2Uubm93KCk7cGVlbC5waGFzZT10YXJnZXQ+ZnJvbT8ncGVlbGluZyc6J3Jlc2V0dGluZyc7ZnVuY3Rpb24gZnJhbWUobm93KXtjb25zdCB0PWNsYW1wKChub3ctc3RhcnQpL2R1cmF0aW9uKSxlPWVhc2luZz09PSdsaW5lYXInP3Q6dGFyZ2V0PmZyb20\/MS1NYXRoLnBvdygxLXQsMyk6dCp0KigzLTIqdCk7cGVlbC5wcm9ncmVzcz1mcm9tK2Rpc3RhbmNlKmU7c2V0RmlsbUdlb21ldHJ5KCk7aWYodDwxKXBlZWwuYW5pbWF0aW9uPXJlcXVlc3RBbmltYXRpb25GcmFtZShmcmFtZSk7ZWxzZXtwZWVsLnByb2dyZXNzPXRhcmdldDtkb25lPy4oKTtzZXRGaWxtR2VvbWV0cnkoKX19cGVlbC5hbmltYXRpb249cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZyYW1lKX0KICAgIGZ1bmN0aW9uIHJlY29yZFNhbXBsZShlKXtjb25zdCBub3c9cGVyZm9ybWFuY2Uubm93KCk7cGVlbC5wb2ludGVyU2FtcGxlcy5wdXNoKHt4OmUuY2xpZW50WCx5OmUuY2xpZW50WSx0aW1lOm5vd30pO3doaWxlKHBlZWwucG9pbnRlclNhbXBsZXMubGVuZ3RoPjImJm5vdy1wZWVsLnBvaW50ZXJTYW1wbGVzWzBdLnRpbWU+MTIwKXBlZWwucG9pbnRlclNhbXBsZXMuc2hpZnQoKTtpZihwZWVsLnBvaW50ZXJTYW1wbGVzLmxlbmd0aD44KXBlZWwucG9pbnRlclNhbXBsZXMuc2hpZnQoKX0KICAgIGZ1bmN0aW9uIHBvaW50ZXJWZWxvY2l0eSgpe2lmKHBlZWwucG9pbnRlclNhbXBsZXMubGVuZ3RoPDIpcmV0dXJue3g6MCx5OjB9O2NvbnN0IGE9cGVlbC5wb2ludGVyU2FtcGxlc1swXSxiPXBlZWwucG9pbnRlclNhbXBsZXMuYXQoLTEpLHM9TWF0aC5tYXgoLjAxNiwoYi50aW1lLWEudGltZSkvMTAwMCk7cmV0dXJue3g6KGIueC1hLngpL3MseTooYi55LWEueSkvc319CiAgICBmdW5jdGlvbiBsYXVuY2hWZWxvY2l0eShtZWFzdXJlZCl7Y29uc3QgZD1zY3JlZW5EaXJlY3Rpb24oKS5kaXIscz1NYXRoLmh5cG90KG1lYXN1cmVkLngsbWVhc3VyZWQueSksZm9yd2FyZD1tZWFzdXJlZC54KmRbMF0rbWVhc3VyZWQueSpkWzFdO2lmKHM8MTIwfHxmb3J3YXJkPDcwKXJldHVybnt4OmRbMF0qMzAwLHk6ZFsxXSozMDB9O2NvbnN0IHNwZWVkPWNsYW1wKHMqLjU4LDE0MCw3NjApLG14PW1lYXN1cmVkLngvcyxteT1tZWFzdXJlZC55L3MsYng9bXgqLjg2K2RbMF0qLjE0LGJ5PW15Ki44NitkWzFdKi4xNCxuPU1hdGguaHlwb3QoYngsYnkpfHwxO3JldHVybnt4OmJ4L24qc3BlZWQseTpieS9uKnNwZWVkfX0KICAgIGZ1bmN0aW9uIHJlbGVhc2VGaWxtKGluaXRpYWwpe2lmKHJlZHVjZU1vdGlvbil7cGVlbC5waGFzZT0ncmVtb3ZlZCc7cmVuZGVyKCk7cmV0dXJufWxldCBwcmV2aW91cz1wZXJmb3JtYW5jZS5ub3coKSxlbGFwc2VkPTAsdmVsb2NpdHk9ey4uLmluaXRpYWx9LGFuZ3VsYXI9cGVlbC5nZW9tZXRyeS5jb3JuZXJzW3BlZWwuY29ybmVyXS5oYW5kKmNsYW1wKDI0K01hdGguaHlwb3QoaW5pdGlhbC54LGluaXRpYWwueSkqLjA1NSwyOCwxMDgpO3BlZWwucGhhc2U9J3JlbGVhc2VkJztmdW5jdGlvbiBmcmFtZShub3cpe2NvbnN0IGR0PU1hdGgubWluKC4wMzIsTWF0aC5tYXgoLjAwMSwobm93LXByZXZpb3VzKS8xMDAwKSk7cHJldmlvdXM9bm93O2VsYXBzZWQrPWR0O2NvbnN0IHZkPU1hdGguZXhwKC0uOSpkdCk7dmVsb2NpdHkueCo9dmQ7dmVsb2NpdHkueT12ZWxvY2l0eS55KnZkKzEyODAqZHQ7cGVlbC5yZWxlYXNlWCs9dmVsb2NpdHkueCpkdDtwZWVsLnJlbGVhc2VZKz12ZWxvY2l0eS55KmR0O2FuZ3VsYXIqPU1hdGguZXhwKC0xLjA1KmR0KTtwZWVsLnJlbGVhc2VSb3RhdGlvbis9YW5ndWxhcipkdDtzZXRGaWxtR2VvbWV0cnkoKTtjb25zdCByPXVpLmZpbG0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdj11aS53cmFwLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG91dHNpZGU9ci5yaWdodDx2LmxlZnR8fHIubGVmdD52LnJpZ2h0fHxyLmJvdHRvbTx2LnRvcHx8ci50b3A+di5ib3R0b207aWYob3V0c2lkZXx8ZWxhcHNlZD40LjIpe3BlZWwucGhhc2U9J3JlbW92ZWQnO3JlbmRlcigpfWVsc2UgcGVlbC5hbmltYXRpb249cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZyYW1lKX1wZWVsLmFuaW1hdGlvbj1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnJhbWUpfQogICAgZnVuY3Rpb24gY29tcGxldGVQZWVsKG1lYXN1cmVkPXt4OjAseTowfSl7aWYoIXBlZWwuY29ybmVyKXBlZWwuY29ybmVyPSdibCc7Y29uc3QgdmVsb2NpdHk9bGF1bmNoVmVsb2NpdHkobWVhc3VyZWQpLHJlbWFpbmluZz0oMS1wZWVsLnByb2dyZXNzKSpzY3JlZW5EaXJlY3Rpb24oKS50b3RhbCxkdXJhdGlvbj1jbGFtcChyZW1haW5pbmcvTWF0aC5tYXgoTWF0aC5oeXBvdCh2ZWxvY2l0eS54LHZlbG9jaXR5LnkpLDEpKjEwMDAsMjIwLDEyNTApO2FuaW1hdGVQZWVsKC45OTgsZHVyYXRpb24sKCk9PnJlbGVhc2VGaWxtKHZlbG9jaXR5KSwnbGluZWFyJyl9CiAgICB1aS5maWxtLmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJyxlPT57aWYocGVlbC5waGFzZT09PSdyZW1vdmVkJylyZXNldFBlZWwoKTtjYW5jZWxQZWVsKCk7Y29uc3QgbmVhcmVzdD1uZWFyZXN0U2NyZWVuQ29ybmVyKGUpO2lmKHBlZWwucGhhc2U9PT0nc2VhbGVkJ3x8KHBlZWwucGhhc2U9PT0nbGlmdGVkJyYmbmVhcmVzdC5pZCE9PXBlZWwuY29ybmVyKSl7cGVlbC5jb3JuZXI9bmVhcmVzdC5pZDtwZWVsLnByb2dyZXNzPTA7cGVlbC5waGFzZT0nc2VhbGVkJ31wZWVsLmRyYWdnaW5nPXRydWU7cGVlbC5tb3ZlZD1mYWxzZTtwZWVsLnN0YXJ0UG9pbnRlcj1bZS5jbGllbnRYLGUuY2xpZW50WV07cGVlbC5zdGFydFByb2dyZXNzPXBlZWwucHJvZ3Jlc3M7cGVlbC5wb2ludGVyU2FtcGxlcz1bXTtyZWNvcmRTYW1wbGUoZSk7dWkuZmlsbS5zZXRQb2ludGVyQ2FwdHVyZShlLnBvaW50ZXJJZCk7c2V0RmlsbUdlb21ldHJ5KCl9KTsKICAgIHVpLmZpbG0uYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcm1vdmUnLGU9PntpZighcGVlbC5kcmFnZ2luZyl7aWYocGVlbC5waGFzZT09PSdzZWFsZWQnKXtjb25zdCBuPW5lYXJlc3RTY3JlZW5Db3JuZXIoZSk7cGVlbC5ob3ZlckNvcm5lcj1uLmRpc3RhbmNlPDgwP24uaWQ6bnVsbDtzZXRGaWxtR2VvbWV0cnkoKX1yZXR1cm59cmVjb3JkU2FtcGxlKGUpO2NvbnN0IGR4PWUuY2xpZW50WC1wZWVsLnN0YXJ0UG9pbnRlclswXSxkeT1lLmNsaWVudFktcGVlbC5zdGFydFBvaW50ZXJbMV07aWYoTWF0aC5oeXBvdChkeCxkeSk+NSlwZWVsLm1vdmVkPXRydWU7Y29uc3Qgcz1zY3JlZW5EaXJlY3Rpb24oKSxwcm9qZWN0ZWQ9KGR4KnMuZGlyWzBdK2R5KnMuZGlyWzFdKS9zLnRvdGFsO3BlZWwucHJvZ3Jlc3M9Y2xhbXAocGVlbC5zdGFydFByb2dyZXNzK3Byb2plY3RlZCwuMDEyLC45OTgpO3BlZWwucGhhc2U9cGVlbC5wcm9ncmVzczw9LjA1NT8nbGlmdGVkJzoncGVlbGluZyc7c2V0RmlsbUdlb21ldHJ5KCl9KTsKICAgIGZ1bmN0aW9uIGVuZERyYWcoZSl7aWYoIXBlZWwuZHJhZ2dpbmcpcmV0dXJuO3JlY29yZFNhbXBsZShlKTtjb25zdCB2ZWxvY2l0eT1wb2ludGVyVmVsb2NpdHkoKTtwZWVsLmRyYWdnaW5nPWZhbHNlO2lmKHVpLmZpbG0uaGFzUG9pbnRlckNhcHR1cmUoZS5wb2ludGVySWQpKXVpLmZpbG0ucmVsZWFzZVBvaW50ZXJDYXB0dXJlKGUucG9pbnRlcklkKTtpZighcGVlbC5tb3ZlZCl7aWYocGVlbC5wcm9ncmVzczwuMDIpYW5pbWF0ZVBlZWwoLjA0NSwyMjAsKCk9PntwZWVsLnBoYXNlPSdsaWZ0ZWQnO3VpLm5vdGUudGV4dENvbnRlbnQ9J0Nvcm5lciBsaWZ0ZWQuIENsaWNrIGFnYWluIG9yIGRyYWcgdG93YXJkIHRoZSBvcHBvc2l0ZSBjb3JuZXIuJ30pO2Vsc2UgY29tcGxldGVQZWVsKCk7cmV0dXJufWlmKHBlZWwucHJvZ3Jlc3M+PS41OCljb21wbGV0ZVBlZWwodmVsb2NpdHkpO2Vsc2UgYW5pbWF0ZVBlZWwoLjA0NSwzMjAsKCk9PntwZWVsLnBoYXNlPSdsaWZ0ZWQnfSl9CiAgICB1aS5maWxtLmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJ1cCcsZW5kRHJhZyk7dWkuZmlsbS5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVyY2FuY2VsJyxlbmREcmFnKTt1aS5maWxtLmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJsZWF2ZScsKCk9PntpZighcGVlbC5kcmFnZ2luZyYmcGVlbC5waGFzZT09PSdzZWFsZWQnKXtwZWVsLmhvdmVyQ29ybmVyPW51bGw7c2V0RmlsbUdlb21ldHJ5KCl9fSk7dWkuZmlsbS5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJyxlPT57aWYoZS5rZXkhPT0nRW50ZXInJiZlLmtleSE9PScgJylyZXR1cm47ZS5wcmV2ZW50RGVmYXVsdCgpO2lmKHBlZWwucGhhc2U9PT0ncmVtb3ZlZCcpcmVzZXRQZWVsKCk7ZWxzZSBpZihwZWVsLnBoYXNlPT09J3NlYWxlZCcpe3BlZWwuY29ybmVyPSdibCc7YW5pbWF0ZVBlZWwoLjA0NSwyMjAsKCk9PntwZWVsLnBoYXNlPSdsaWZ0ZWQnfSl9ZWxzZSBjb21wbGV0ZVBlZWwoKX0pO3VpLnJlc2V0RmlsbS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycscmVzZXRQZWVsKTthZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLHN5bmNGaWxtKTsKICAgIGFzeW5jIGZ1bmN0aW9uIGZpbGVUb0ltYWdlKGZpbGUpe2NvbnN0IHVybD1VUkwuY3JlYXRlT2JqZWN0VVJMKGZpbGUpO3RyeXtyZXR1cm4gYXdhaXQgbG9hZEltYWdlKHVybCl9ZmluYWxseXtVUkwucmV2b2tlT2JqZWN0VVJMKHVybCl9fQogICAgZnVuY3Rpb24gYXJ0d29ya0JvdW5kcyhpbSl7Y29uc3Qgb2ZmPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpLGxpbWl0PTEyMDAscj1NYXRoLm1pbigxLGxpbWl0L01hdGgubWF4KGltLndpZHRoLGltLmhlaWdodCkpO29mZi53aWR0aD1NYXRoLm1heCgxLE1hdGgucm91bmQoaW0ud2lkdGgqcikpO29mZi5oZWlnaHQ9TWF0aC5tYXgoMSxNYXRoLnJvdW5kKGltLmhlaWdodCpyKSk7Y29uc3QgYz1vZmYuZ2V0Q29udGV4dCgnMmQnLHt3aWxsUmVhZEZyZXF1ZW50bHk6dHJ1ZX0pO2MuZHJhd0ltYWdlKGltLDAsMCxvZmYud2lkdGgsb2ZmLmhlaWdodCk7Y29uc3QgZD1jLmdldEltYWdlRGF0YSgwLDAsb2ZmLndpZHRoLG9mZi5oZWlnaHQpLmRhdGE7bGV0IHgwPW9mZi53aWR0aCx5MD1vZmYuaGVpZ2h0LHgxPS0xLHkxPS0xO2ZvcihsZXQgeT0wO3k8b2ZmLmhlaWdodDt5KyspZm9yKGxldCB4PTA7eDxvZmYud2lkdGg7eCsrKWlmKGRbKHkqb2ZmLndpZHRoK3gpKjQrM10+MTIpe3gwPU1hdGgubWluKHgwLHgpO3kwPU1hdGgubWluKHkwLHkpO3gxPU1hdGgubWF4KHgxLHgpO3kxPU1hdGgubWF4KHkxLHkpfWlmKHgxPDApcmV0dXJue3g6MCx5OjAsdzppbS53aWR0aCxoOmltLmhlaWdodH07cmV0dXJue3g6eDAvcix5OnkwL3IsdzooeDEteDArMSkvcixoOih5MS15MCsxKS9yfX0KICAgIHVpLmZpbGUuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJyxhc3luYygpPT57Y29uc3QgZmlsZT11aS5maWxlLmZpbGVzJiZ1aS5maWxlLmZpbGVzWzBdO2lmKCFmaWxlKXJldHVybjtpZighL15pbWFnZVwvKHBuZ3xqcGVnfHdlYnApJC8udGVzdChmaWxlLnR5cGUpKXtzdGF0dXMoJ0Nob29zZSBhIFBORywgSlBHIG9yIFdlYlAgaW1hZ2UuJywnZXJyb3InKTtyZXR1cm59dHJ5e3N0YXR1cygnUHJlcGFyaW5nIHlvdXIgYXJ0d29yay4uLicpO3N0YXRlLm9yaWdpbmFsRmlsZT1maWxlO3N0YXRlLm9yaWdpbmFsPWF3YWl0IGZpbGVUb0ltYWdlKGZpbGUpO3N0YXRlLmFydD1zdGF0ZS5vcmlnaW5hbDtzdGF0ZS5hcnRCb3VuZHM9YXJ0d29ya0JvdW5kcyhzdGF0ZS5hcnQpO3N0YXRlLnByb2Nlc3NlZEZpbGU9bnVsbDtzdGF0ZS5iYWNrZ3JvdW5kUmVtb3ZlZD1mYWxzZTt1aS5yZW1vdmUuZGlzYWJsZWQ9ZmFsc2U7dWkucmVtb3ZlLnRleHRDb250ZW50PSdBdXRvIFJlbW92ZSBCYWNrZ3JvdW5kJzt1aS5kb3dubG9hZC5kaXNhYmxlZD1mYWxzZTt1aS5hdHRhY2guZGlzYWJsZWQ9ZmFsc2U7dWkucHJvZC50ZXh0Q29udGVudD0nUmVhZHkgdG8gZXhwb3J0IG9yIGF0dGFjaCB0byB0aGlzIHByb2R1Y3QuJzt1aS5wcm9kLnN0eWxlLmNvbG9yPScnO3Jlc2V0UGxhY2VtZW50KCk7cmVzZXRQZWVsKCk7c3RhdHVzKCdBcnR3b3JrIGxvYWRlZC4gQ2xpY2sgYW55IGZpbG0gY29ybmVyIHRvIHRlc3QgdGhlIHBlZWwuJywnc3VjY2VzcycpfWNhdGNoKGUpe3N0YXR1cygnVGhlIGFydHdvcmsgY291bGQgbm90IGJlIG9wZW5lZC4gVHJ5IGFub3RoZXIgZmlsZS4nLCdlcnJvcicpfX0pOwogICAgZnVuY3Rpb24gcmVtb3ZlQmFja2dyb3VuZChzb3VyY2Upe2NvbnN0IG9mZj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKSxtYXg9MTQwMCxyYXRpbz1NYXRoLm1pbigxLG1heC9NYXRoLm1heChzb3VyY2Uud2lkdGgsc291cmNlLmhlaWdodCkpO29mZi53aWR0aD1NYXRoLm1heCgxLE1hdGgucm91bmQoc291cmNlLndpZHRoKnJhdGlvKSk7b2ZmLmhlaWdodD1NYXRoLm1heCgxLE1hdGgucm91bmQoc291cmNlLmhlaWdodCpyYXRpbykpO2NvbnN0IGM9b2ZmLmdldENvbnRleHQoJzJkJyx7d2lsbFJlYWRGcmVxdWVudGx5OnRydWV9KTtjLmRyYXdJbWFnZShzb3VyY2UsMCwwLG9mZi53aWR0aCxvZmYuaGVpZ2h0KTtjb25zdCBpbWc9Yy5nZXRJbWFnZURhdGEoMCwwLG9mZi53aWR0aCxvZmYuaGVpZ2h0KSxkPWltZy5kYXRhLGNvcm5lcnM9W1swLDBdLFtvZmYud2lkdGgtMSwwXSxbMCxvZmYuaGVpZ2h0LTFdLFtvZmYud2lkdGgtMSxvZmYuaGVpZ2h0LTFdXSxhdmc9WzAsMCwwXTtmb3IoY29uc3QgW3gseV0gb2YgY29ybmVycyl7Y29uc3QgaT0oeSpvZmYud2lkdGgreCkqNDthdmdbMF0rPWRbaV0vNDthdmdbMV0rPWRbaSsxXS80O2F2Z1syXSs9ZFtpKzJdLzR9Zm9yKGxldCBpPTA7aTxkLmxlbmd0aDtpKz00KXtjb25zdCBkaXN0PU1hdGguaHlwb3QoZFtpXS1hdmdbMF0sZFtpKzFdLWF2Z1sxXSxkW2krMl0tYXZnWzJdKTtkW2krM109ZGlzdDwyND8wOmRpc3Q8NzI\/TWF0aC5yb3VuZCgyNTUqKGRpc3QtMjQpLzQ4KTpkW2krM119Yy5wdXRJbWFnZURhdGEoaW1nLDAsMCk7cmV0dXJuIG9mZn0KICAgIHVpLnJlbW92ZS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsYXN5bmMoKT0+e2lmKCFzdGF0ZS5vcmlnaW5hbClyZXR1cm47aWYoc3RhdGUuYmFja2dyb3VuZFJlbW92ZWQpe3N0YXRlLmFydD1zdGF0ZS5vcmlnaW5hbDtzdGF0ZS5hcnRCb3VuZHM9YXJ0d29ya0JvdW5kcyhzdGF0ZS5hcnQpO3N0YXRlLnByb2Nlc3NlZEZpbGU9bnVsbDtzdGF0ZS5iYWNrZ3JvdW5kUmVtb3ZlZD1mYWxzZTt1aS5yZW1vdmUudGV4dENvbnRlbnQ9J0F1dG8gUmVtb3ZlIEJhY2tncm91bmQnO3Jlc2V0UGVlbCgpO21hcmtEaXJ0eSgpO3N0YXR1cygnT3JpZ2luYWwgYXJ0d29yayByZXN0b3JlZC4nLCdzdWNjZXNzJyk7cmV0dXJufXVpLnJlbW92ZS5kaXNhYmxlZD10cnVlO3VpLnJlbW92ZS50ZXh0Q29udGVudD0nUmVtb3ZpbmcuLi4nO2F3YWl0IG5ldyBQcm9taXNlKHI9PnNldFRpbWVvdXQociwzMCkpO2NvbnN0IG9mZj1yZW1vdmVCYWNrZ3JvdW5kKHN0YXRlLm9yaWdpbmFsKTtzdGF0ZS5hcnQ9b2ZmO3N0YXRlLmFydEJvdW5kcz1hcnR3b3JrQm91bmRzKHN0YXRlLmFydCk7Y29uc3QgYmxvYj1hd2FpdCBuZXcgUHJvbWlzZShyPT5vZmYudG9CbG9iKHIsJ2ltYWdlL3BuZycpKTtzdGF0ZS5wcm9jZXNzZWRGaWxlPW5ldyBGaWxlKFtibG9iXSwnYXJ0ZXRyaWJlLXByb2Nlc3NlZC1hcnR3b3JrLnBuZycse3R5cGU6J2ltYWdlL3BuZyd9KTtzdGF0ZS5iYWNrZ3JvdW5kUmVtb3ZlZD10cnVlO3VpLnJlbW92ZS50ZXh0Q29udGVudD0nUmVzdG9yZSBPcmlnaW5hbCc7dWkucmVtb3ZlLmRpc2FibGVkPWZhbHNlO3Jlc2V0UGVlbCgpO21hcmtEaXJ0eSgpO3N0YXR1cygnQmFja2dyb3VuZCByZW1vdmVkLiBDaGVjayB0aGUgcHJldmlldyBiZWZvcmUgb3JkZXJpbmcuJywnc3VjY2VzcycpfSk7CiAgICBmb3IoY29uc3Qga2V5IG9mIFsnc2NhbGUnLCd4JywneScsJ3JvdGF0aW9uJ10pdWlba2V5XS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsKCk9PntzdGF0ZVtrZXldPU51bWJlcih1aVtrZXldLnZhbHVlKTt1cGRhdGVPdXRwdXRzKCk7cmVzZXRQZWVsKCk7aWYoc3RhdGUuYXJ0KW1hcmtEaXJ0eSgpfSk7CiAgICAkKCcjcmVzZXQnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsKCk9PntyZXNldFBsYWNlbWVudCgpO3Jlc2V0UGVlbCgpO2lmKHN0YXRlLmFydCltYXJrRGlydHkoKX0pO3VpLmJnLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywoKT0+e3N0YXRlLmJnPXVpLmJnLnZhbHVlO3JlbmRlcigpfSk7CiAgICBjb25zdCBjYW52YXNCbG9iPSh0eXBlPSdpbWFnZS9wbmcnLHF1YWxpdHk9Ljk2KT0+bmV3IFByb21pc2Uocj0+Y2FudmFzLnRvQmxvYihyLHR5cGUscXVhbGl0eSkpOwogICAgZnVuY3Rpb24gc2F2ZUJsb2IoYmxvYixuYW1lKXtjb25zdCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTthLmhyZWY9VVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTthLmRvd25sb2FkPW5hbWU7YS5jbGljaygpO3NldFRpbWVvdXQoKCk9PlVSTC5yZXZva2VPYmplY3RVUkwoYS5ocmVmKSwxMDAwKX0KICAgIHVpLnNhdmUuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLGFzeW5jKCk9PnNhdmVCbG9iKGF3YWl0IGNhbnZhc0Jsb2IoKSwnYXJ0ZXRyaWJlLXV2LWR0Zi1wcmV2aWV3LnBuZycpKTsKICAgIGZ1bmN0aW9uIGNyYzMyKGJ5dGVzKXtsZXQgYz0tMTtmb3IoY29uc3QgYiBvZiBieXRlcyl7Y149Yjtmb3IobGV0IGs9MDtrPDg7aysrKWM9KGM+Pj4xKV4oKGMmMSk\/MHhlZGI4ODMyMDowKX1yZXR1cm4oY14tMSk+Pj4wfQogICAgZnVuY3Rpb24gemlwU3RvcmUoZmlsZXMpe2NvbnN0IGVuYz1uZXcgVGV4dEVuY29kZXIoKSxwYXJ0cz1bXSxjZW50cmFsPVtdO2xldCBvZmZzZXQ9MDtjb25zdCB1MTY9bj0+bmV3IFVpbnQ4QXJyYXkoW24mMjU1LG4+Pj44JjI1NV0pLHUzMj1uPT5uZXcgVWludDhBcnJheShbbiYyNTUsbj4+PjgmMjU1LG4+Pj4xNiYyNTUsbj4+PjI0JjI1NV0pO2Zvcihjb25zdCBmIG9mIGZpbGVzKXtjb25zdCBuYW1lPWVuYy5lbmNvZGUoZi5uYW1lKSxkYXRhPWYuZGF0YSxjcmM9Y3JjMzIoZGF0YSksaGVhZD1bdTMyKDB4MDQwMzRiNTApLHUxNigyMCksdTE2KDApLHUxNigwKSx1MTYoMCksdTE2KDApLHUzMihjcmMpLHUzMihkYXRhLmxlbmd0aCksdTMyKGRhdGEubGVuZ3RoKSx1MTYobmFtZS5sZW5ndGgpLHUxNigwKSxuYW1lXTtwYXJ0cy5wdXNoKC4uLmhlYWQsZGF0YSk7Y2VudHJhbC5wdXNoKHUzMigweDAyMDE0YjUwKSx1MTYoMjApLHUxNigyMCksdTE2KDApLHUxNigwKSx1MTYoMCksdTE2KDApLHUzMihjcmMpLHUzMihkYXRhLmxlbmd0aCksdTMyKGRhdGEubGVuZ3RoKSx1MTYobmFtZS5sZW5ndGgpLHUxNigwKSx1MTYoMCksdTE2KDApLHUxNigwKSx1MzIoMCksdTMyKG9mZnNldCksbmFtZSk7b2Zmc2V0Kz1oZWFkLnJlZHVjZSgobixhKT0+bithLmxlbmd0aCwwKStkYXRhLmxlbmd0aH1jb25zdCBjc2l6ZT1jZW50cmFsLnJlZHVjZSgobixhKT0+bithLmxlbmd0aCwwKTtyZXR1cm4gbmV3IEJsb2IoWy4uLnBhcnRzLC4uLmNlbnRyYWwsdTMyKDB4MDYwNTRiNTApLHUxNigwKSx1MTYoMCksdTE2KGZpbGVzLmxlbmd0aCksdTE2KGZpbGVzLmxlbmd0aCksdTMyKGNzaXplKSx1MzIob2Zmc2V0KSx1MTYoMCldLHt0eXBlOidhcHBsaWNhdGlvbi96aXAnfSl9CiAgICBmdW5jdGlvbiBjb25maWcoKXtjb25zdCBjPWNhcnJpZXJzW3N0YXRlLmNhcnJpZXJdO3JldHVybntjb25maWd1cmF0aW9uSWQ6J1VWLScrRGF0ZS5ub3coKS50b1N0cmluZygzNikudG9VcHBlckNhc2UoKSxwcm9kdWN0OidDdXN0b20gVVYgRFRGIFRyYW5zZmVycycsY3JlYXRlZEF0Om5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxwcm9kdWN0aW9uOntwcmV2aWV3U3VyZmFjZTp7a2V5OnN0YXRlLmNhcnJpZXIsbGFiZWw6Yy5sYWJlbH0sc2NhbGVQZXJjZW50OnN0YXRlLnNjYWxlLGhvcml6b250YWxPZmZzZXQ6c3RhdGUueCx2ZXJ0aWNhbE9mZnNldDpzdGF0ZS55LHJvdGF0aW9uRGVncmVlczpzdGF0ZS5yb3RhdGlvbixiYWNrZ3JvdW5kOnN0YXRlLmJnLGJhY2tncm91bmRSZW1vdmVkOnN0YXRlLmJhY2tncm91bmRSZW1vdmVkfSxub3RlOidQcmV2aWV3IHBsYWNlbWVudCBpcyBpbGx1c3RyYXRpdmUuIENvbmZpcm0gZmluYWwgc2l6ZSBiZWZvcmUgcHJvZHVjdGlvbi4nfX0KICAgIGFzeW5jIGZ1bmN0aW9uIGJ1aWxkRmlsZXMoKXtjb25zdCBjZmc9Y29uZmlnKCkscHJldmlldz1hd2FpdCBjYW52YXNCbG9iKCkscHJldmlld0ZpbGU9bmV3IEZpbGUoW3ByZXZpZXddLGNmZy5jb25maWd1cmF0aW9uSWQrJy1wcmV2aWV3LnBuZycse3R5cGU6J2ltYWdlL3BuZyd9KTtyZXR1cm57Y2ZnLHByZXZpZXdGaWxlLGFydHdvcmtGaWxlOnN0YXRlLm9yaWdpbmFsRmlsZSxwcm9jZXNzZWRGaWxlOnN0YXRlLnByb2Nlc3NlZEZpbGV9fQogICAgdWkuZG93bmxvYWQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLGFzeW5jKCk9Pnt1aS5kb3dubG9hZC5kaXNhYmxlZD10cnVlO3VpLmRvd25sb2FkLnRleHRDb250ZW50PSdQcmVwYXJpbmcuLi4nO3RyeXtjb25zdCBmPWF3YWl0IGJ1aWxkRmlsZXMoKSxlbmM9bmV3IFRleHRFbmNvZGVyKCksaXRlbXM9W3tuYW1lOidjb25maWd1cmF0aW9uLmpzb24nLGRhdGE6ZW5jLmVuY29kZShKU09OLnN0cmluZ2lmeShmLmNmZyxudWxsLDIpKX0se25hbWU6J3N1bW1hcnkudHh0JyxkYXRhOmVuYy5lbmNvZGUoYEFydGVUcmliZSBVViBEVEYgUHJldmlld1xuQ29uZmlndXJhdGlvbjogJHtmLmNmZy5jb25maWd1cmF0aW9uSWR9XG5TdXJmYWNlOiAke2YuY2ZnLnByb2R1Y3Rpb24ucHJldmlld1N1cmZhY2UubGFiZWx9XG5TY2FsZTogJHtzdGF0ZS5zY2FsZX0lXG5PZmZzZXQ6ICR7c3RhdGUueH0sICR7c3RhdGUueX1cblJvdGF0aW9uOiAke3N0YXRlLnJvdGF0aW9ufSBkZWdyZWVzXG5CYWNrZ3JvdW5kIHJlbW92ZWQ6ICR7c3RhdGUuYmFja2dyb3VuZFJlbW92ZWQ\/J1llcyc6J05vJ31cbmApfSx7bmFtZTpmLnByZXZpZXdGaWxlLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShhd2FpdCBmLnByZXZpZXdGaWxlLmFycmF5QnVmZmVyKCkpfSx7bmFtZTonb3JpZ2luYWwtJytzdGF0ZS5vcmlnaW5hbEZpbGUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KGF3YWl0IHN0YXRlLm9yaWdpbmFsRmlsZS5hcnJheUJ1ZmZlcigpKX1dO2lmKGYucHJvY2Vzc2VkRmlsZSlpdGVtcy5wdXNoKHtuYW1lOmYucHJvY2Vzc2VkRmlsZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoYXdhaXQgZi5wcm9jZXNzZWRGaWxlLmFycmF5QnVmZmVyKCkpfSk7c2F2ZUJsb2IoemlwU3RvcmUoaXRlbXMpLGYuY2ZnLmNvbmZpZ3VyYXRpb25JZCsnLXByb2R1Y3Rpb24tcGFjay56aXAnKTt1aS5wcm9kLnRleHRDb250ZW50PSdQcm9kdWN0aW9uIHBhY2sgZG93bmxvYWRlZC4nO3VpLnByb2Quc3R5bGUuY29sb3I9JyMwNjc2NDcnfWNhdGNoKGUpe3VpLnByb2QudGV4dENvbnRlbnQ9J1RoZSBwcm9kdWN0aW9uIHBhY2sgY291bGQgbm90IGJlIGNyZWF0ZWQuIFRyeSBhZ2Fpbi4nO3VpLnByb2Quc3R5bGUuY29sb3I9JyNiNDIzMTgnfWZpbmFsbHl7dWkuZG93bmxvYWQuZGlzYWJsZWQ9ZmFsc2U7dWkuZG93bmxvYWQudGV4dENvbnRlbnQ9J0Rvd25sb2FkIFBhY2snfX0pOwogICAgdWkuYXR0YWNoLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJyxhc3luYygpPT57dWkuYXR0YWNoLmRpc2FibGVkPXRydWU7dWkuYXR0YWNoLnRleHRDb250ZW50PSdBdHRhY2hpbmcuLi4nO3RyeXtjb25zdCBmPWF3YWl0IGJ1aWxkRmlsZXMoKTtwYXJlbnQucG9zdE1lc3NhZ2Uoe3R5cGU6J2FydGV0cmliZTphdHRhY2gtcHJvZHVjdGlvbi1jb25maWcnLGNvbmZpZzpmLmNmZyxhcnR3b3JrRmlsZTpmLmFydHdvcmtGaWxlLHByZXZpZXdGaWxlOmYucHJldmlld0ZpbGUscHJvY2Vzc2VkRmlsZTpmLnByb2Nlc3NlZEZpbGV9LGxvY2F0aW9uLm9yaWdpbil9Y2F0Y2goZSl7dWkuYXR0YWNoLmRpc2FibGVkPWZhbHNlO3VpLmF0dGFjaC50ZXh0Q29udGVudD0nQXR0YWNoIHRvIE9yZGVyJzt1aS5wcm9kLnRleHRDb250ZW50PSdUaGUgZmlsZXMgY291bGQgbm90IGJlIHByZXBhcmVkLiBUcnkgYWdhaW4uJzt1aS5wcm9kLnN0eWxlLmNvbG9yPScjYjQyMzE4J319KTsKICAgIGFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLGU9PntpZihlLm9yaWdpbiE9PWxvY2F0aW9uLm9yaWdpbnx8IWUuZGF0YXx8ZS5kYXRhLnR5cGUhPT0nYXJ0ZXRyaWJlOm9yZGVyLWF0dGFjaG1lbnQtcmVzdWx0JylyZXR1cm47dWkuYXR0YWNoLmRpc2FibGVkPWZhbHNlO3VpLmF0dGFjaC50ZXh0Q29udGVudD0nQXR0YWNoIHRvIE9yZGVyJzt1aS5wcm9kLnRleHRDb250ZW50PWUuZGF0YS5zdWNjZXNzPydBdHRhY2hlZCB0byB0aGlzIHByb2R1Y3QuIENob29zZSBzaXplIGFuZCBxdWFudGl0eSwgdGhlbiBhZGQgdG8gY2FydC4nOidDb3VsZCBub3QgYXR0YWNoIGZpbGVzLiBSZWZyZXNoIHRoZSBwcm9kdWN0IHBhZ2UgYW5kIHRyeSBhZ2Fpbi4nO3VpLnByb2Quc3R5bGUuY29sb3I9ZS5kYXRhLnN1Y2Nlc3M\/JyMwNjc2NDcnOicjYjQyMzE4J30pOwogICAgYnVpbGRTdXJmYWNlQnV0dG9ucygpO3ByZXBhcmVDYXJyaWVycygpLmNhdGNoKCgpPT5zdGF0dXMoJ1ByZXZpZXcgc3VyZmFjZXMgY291bGQgbm90IGJlIGxvYWRlZC4gUmVmcmVzaCB0aGUgcGFnZS4nLCdlcnJvcicpKTt1cGRhdGVPdXRwdXRzKCk7cmVuZGVyKCk7CiAgfSkoKTsKICA8L3NjcmlwdD4KPC9ib2R5Pgo8L2h0bWw+Cg==\u003c\/script\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003csection class=\"artetribe-uv-dtf-preview-embed__guide\" aria-labelledby=\"artetribe-uv-dtf-guide-title\"\u003e\n    \u003cdiv class=\"artetribe-uv-dtf-preview-embed__gallery\" aria-label=\"UV DTF transfer examples\"\u003e\n      \u003cimg class=\"artetribe-uv-dtf-preview-embed__gallery-main\" src=\"\/cdn\/shop\/files\/Custom_UV_DTF_Transfer_stickers-1.jpg\" alt=\"Clear transfer film being peeled from a finished UV DTF design\" loading=\"lazy\" decoding=\"async\"\u003e\n      \u003cimg src=\"\/cdn\/shop\/files\/Custom_UV_DTF_Transfer_stickers-2.jpg\" alt=\"UV DTF transfer applied to a glass container\" loading=\"lazy\" decoding=\"async\"\u003e\n      \u003cimg src=\"\/cdn\/shop\/files\/Custom_UV_DTF_Transfer_stickers-3.jpg\" alt=\"Custom transfer applied to a smooth coated surface\" loading=\"lazy\" decoding=\"async\"\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"artetribe-uv-dtf-preview-embed__guide-copy\"\u003e\n      \u003ch2 id=\"artetribe-uv-dtf-guide-title\"\u003ePreview the transfer before ordering\u003c\/h2\u003e\n      \u003cp\u003eUpload your artwork and check its placement on a real-use surface. The model stays fixed while the clear carrier film lifts independently, just like the application step.\u003c\/p\u003e\n      \u003col\u003e\n        \u003cli\u003e\n\u003cspan\u003e01\u003c\/span\u003e\u003cdiv\u003e\n\u003cstrong\u003eUpload artwork\u003c\/strong\u003e\u003cp\u003eA transparent PNG gives the cleanest edge and the most accurate preview.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/li\u003e\n        \u003cli\u003e\n\u003cspan\u003e02\u003c\/span\u003e\u003cdiv\u003e\n\u003cstrong\u003ePosition and peel\u003c\/strong\u003e\u003cp\u003eChoose a surface, adjust the artwork and drag a film corner diagonally.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/li\u003e\n        \u003cli\u003e\n\u003cspan\u003e03\u003c\/span\u003e\u003cdiv\u003e\n\u003cstrong\u003eConfirm or order\u003c\/strong\u003e\u003cp\u003eDownload the production pack for support review, or attach the files to your order.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/li\u003e\n      \u003c\/ol\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\u003c\/div\u003e\n\n\u003cstyle\u003e\n  #artetribe-uv-dtf-preview-embed{--at-ink:#18212b;--at-muted:#64717d;--at-line:rgba(20,45,66,.12);--at-blue:#087ab5;--at-blue-hover:#066d9f;--at-pale:#eaf1f7;--at-accent:#ff9151;width:min(1240px,calc(100% - 32px));margin:48px auto 72px;color:var(--at-ink);font-family:inherit}\n  #artetribe-uv-dtf-preview-embed *{box-sizing:border-box}\n  #artetribe-uv-dtf-preview-embed h2,#artetribe-uv-dtf-preview-embed h3,#artetribe-uv-dtf-preview-embed p{margin-top:0}\n  #artetribe-uv-dtf-preview-embed .artetribe-uv-dtf-preview-embed__benefits{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:clamp(30px,5vw,72px);margin-bottom:44px;padding:30px clamp(18px,5vw,72px);border-block:1px solid var(--at-line)}\n  #artetribe-uv-dtf-preview-embed .artetribe-uv-dtf-preview-embed__benefits article{display:grid;grid-template-rows:80px auto auto;justify-items:center;text-align:center}\n  #artetribe-uv-dtf-preview-embed .artetribe-uv-dtf-preview-embed__benefit-icon{display:block;width:80px;height:80px;margin-bottom:14px}\n  #artetribe-uv-dtf-preview-embed .artetribe-uv-dtf-preview-embed__benefit-icon svg{display:block;width:100%;height:100%}\n  #artetribe-uv-dtf-preview-embed .artetribe-uv-dtf-preview-embed__benefits h3{margin-bottom:9px;font:inherit;font-size:20px;font-weight:800;line-height:1.2}\n  #artetribe-uv-dtf-preview-embed .artetribe-uv-dtf-preview-embed__benefits p{max-width:360px;margin-bottom:0;color:var(--at-muted);font-size:14px;line-height:1.55}\n  #artetribe-uv-dtf-preview-embed .artetribe-uv-dtf-preview-embed__tool{margin-bottom:68px}\n  #artetribe-uv-dtf-preview-embed .artetribe-uv-dtf-preview-embed__heading{display:grid;gap:4px;max-width:720px;margin-bottom:18px}\n  #artetribe-uv-dtf-preview-embed .artetribe-uv-dtf-preview-embed__heading h2,#artetribe-uv-dtf-preview-embed .artetribe-uv-dtf-preview-embed__guide h2{margin-bottom:7px;font:inherit;font-size:clamp(28px,3vw,42px);font-weight:900;line-height:1.02;letter-spacing:-.035em;text-transform:uppercase}\n  #artetribe-uv-dtf-preview-embed .artetribe-uv-dtf-preview-embed__heading p{margin-bottom:0;color:var(--at-muted);font-size:15px;line-height:1.55}\n  #artetribe-uv-dtf-preview-embed .artetribe-uv-dtf-preview-embed__hint{max-width:none;color:#37516d;font-size:13px}\n  #artetribe-uv-dtf-preview-embed .artetribe-uv-dtf-preview-embed__frame{position:relative;min-height:860px;border:1px solid var(--at-line);border-radius:16px;overflow:hidden;background:var(--at-pale);box-shadow:0 22px 54px rgba(58,91,123,.12)}\n  #artetribe-uv-dtf-preview-embed .artetribe-uv-dtf-preview-embed__iframe{display:block;width:100%;height:860px;border:0;opacity:0;background:var(--at-pale)}\n  #artetribe-uv-dtf-preview-embed.is-loaded .artetribe-uv-dtf-preview-embed__iframe{opacity:1}\n  #artetribe-uv-dtf-preview-embed .artetribe-uv-dtf-preview-embed__loading{position:absolute;inset:0;display:grid;place-items:center;color:var(--at-muted);font-size:14px}\n  #artetribe-uv-dtf-preview-embed.is-loaded .artetribe-uv-dtf-preview-embed__loading{display:none}\n  #artetribe-uv-dtf-preview-embed .artetribe-uv-dtf-preview-embed__guide{display:grid;grid-template-columns:minmax(0,1.08fr) minmax(380px,.92fr);align-items:center;gap:clamp(42px,6vw,76px)}\n  #artetribe-uv-dtf-preview-embed .artetribe-uv-dtf-preview-embed__gallery{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));grid-template-rows:2fr 1fr;gap:12px;aspect-ratio:1.18\/1;min-height:0}\n  #artetribe-uv-dtf-preview-embed .artetribe-uv-dtf-preview-embed__gallery img{display:block;width:100%;height:100%;min-height:0;border-radius:14px;object-fit:cover;background:var(--at-pale)}\n  #artetribe-uv-dtf-preview-embed .artetribe-uv-dtf-preview-embed__gallery-main{grid-column:1\/3}\n  #artetribe-uv-dtf-preview-embed .artetribe-uv-dtf-preview-embed__guide-copy\u003ep{margin-bottom:22px;color:var(--at-muted);font-size:15px;line-height:1.65}\n  #artetribe-uv-dtf-preview-embed ol{list-style:none;margin:0;padding:0;border-top:1px solid var(--at-line)}\n  #artetribe-uv-dtf-preview-embed li{display:grid;grid-template-columns:32px 1fr;gap:10px;padding:13px 0;border-bottom:1px solid var(--at-line)}\n  #artetribe-uv-dtf-preview-embed li\u003espan{color:var(--at-blue);font-size:12px;font-weight:850}\n  #artetribe-uv-dtf-preview-embed li strong{display:block;margin-bottom:3px;font-size:14px}\n  #artetribe-uv-dtf-preview-embed li p{margin:0;color:var(--at-muted);font-size:12px;line-height:1.5}\n  #artetribe-uv-dtf-preview-embed.is-viewport-breakout{width:100vw;max-width:none;margin-left:calc(50% - 50vw);padding-inline:14px}\n  @media(max-width:900px){#artetribe-uv-dtf-preview-embed .artetribe-uv-dtf-preview-embed__benefits{gap:24px;padding-inline:22px}#artetribe-uv-dtf-preview-embed .artetribe-uv-dtf-preview-embed__benefits h3{font-size:18px}#artetribe-uv-dtf-preview-embed .artetribe-uv-dtf-preview-embed__guide{grid-template-columns:1fr;gap:36px}#artetribe-uv-dtf-preview-embed .artetribe-uv-dtf-preview-embed__gallery{aspect-ratio:1.28\/1}}\n  @media(max-width:760px){#artetribe-uv-dtf-preview-embed{width:100%;margin:30px auto 52px}#artetribe-uv-dtf-preview-embed .artetribe-uv-dtf-preview-embed__benefits{grid-template-columns:1fr;gap:30px;margin-inline:14px;margin-bottom:34px;padding:26px 8px}#artetribe-uv-dtf-preview-embed .artetribe-uv-dtf-preview-embed__benefit-icon{width:70px;height:70px}#artetribe-uv-dtf-preview-embed .artetribe-uv-dtf-preview-embed__benefits article{grid-template-rows:70px auto auto}#artetribe-uv-dtf-preview-embed .artetribe-uv-dtf-preview-embed__heading{padding-inline:14px}#artetribe-uv-dtf-preview-embed .artetribe-uv-dtf-preview-embed__hint{margin-top:4px}#artetribe-uv-dtf-preview-embed .artetribe-uv-dtf-preview-embed__frame{min-height:1120px;border-radius:0;border-inline:0;box-shadow:none}#artetribe-uv-dtf-preview-embed .artetribe-uv-dtf-preview-embed__iframe{height:1120px}#artetribe-uv-dtf-preview-embed .artetribe-uv-dtf-preview-embed__guide{padding-inline:14px}#artetribe-uv-dtf-preview-embed .artetribe-uv-dtf-preview-embed__gallery{gap:8px;aspect-ratio:1.12\/1}#artetribe-uv-dtf-preview-embed .artetribe-uv-dtf-preview-embed__gallery img{border-radius:10px}#artetribe-uv-dtf-preview-embed .artetribe-uv-dtf-preview-embed__guide h2{font-size:32px}}\n\u003c\/style\u003e\n\n\u003cscript\u003e\n(()=\u003e{\n  const root=document.getElementById('artetribe-uv-dtf-preview-embed');\n  if(!root||root.dataset.previewReady==='true')return;\n  const productPath=location.pathname.replace(\/\\\/+$\/,'').toLowerCase();\n  if(!productPath.includes('uv-dtf')){root.remove();return}\n  root.dataset.previewReady='true';\n  const productInfo=root.closest('product-info,.product__info,.product__info-container,.product__info-wrapper,.product-info,.product-info__wrapper,[data-product-info],[id*=\"ProductInfo\"]');\n  const owningSection=root.closest('.shopify-section,[id^=\"shopify-section-\"]');\n  if((productInfo||root.getBoundingClientRect().width\u003c760)\u0026\u0026owningSection\u0026\u0026owningSection.parentElement)owningSection.insertAdjacentElement('afterend',root);\n  if(root.getBoundingClientRect().width\u003cMath.min(760,innerWidth*.72))root.classList.add('is-viewport-breakout');\n  const frame=root.querySelector('[data-preview-frame]'),source=root.querySelector('[data-preview-source]'),loading=root.querySelector('[data-preview-loading]');\n  const findProductForm=()=\u003eArray.from(document.querySelectorAll('form[action*=\"\/cart\/add\"]')).filter(f=\u003e!f.classList.contains('shopify-payment-terms')).map(form=\u003e({form,score:(owningSection\u0026\u0026owningSection.contains(form)?100:0)+(form.classList.contains('shopify-product-form')?30:0)+(form.querySelector('[name=\"quantity\"]')?20:0)+(form.querySelector('[name=\"add\"],[type=\"submit\"]')?10:0)})).sort((a,b)=\u003eb.score-a.score)[0]?.form||null;\n  const clearFields=()=\u003edocument.querySelectorAll('[data-artetribe-uv-dtf-property]').forEach(f=\u003ef.remove());\n  const textField=(form,name,value)=\u003e{if(value===null||value===undefined||value==='')return;const i=document.createElement('input');i.type='hidden';i.name=`properties[${name}]`;i.value=String(value);i.dataset.artetribeUvDtfProperty='true';form.appendChild(i)};\n  const fileField=(form,name,file)=\u003e{if(!file)return;const i=document.createElement('input');i.type='file';i.name=`properties[${name}]`;i.hidden=true;i.dataset.artetribeUvDtfProperty='true';const t=new DataTransfer();t.items.add(file);i.files=t.files;if(!i.files||i.files.length!==1)throw new Error(name+' could not be attached.');form.appendChild(i)};\n  const reply=(success,configurationId='',diagnostic='')=\u003eframe.contentWindow\u0026\u0026frame.contentWindow.postMessage({type:'artetribe:order-attachment-result',success,configurationId,diagnostic},location.origin);\n  addEventListener('message',event=\u003e{if(event.origin!==location.origin||event.source!==frame.contentWindow||!event.data)return;if(event.data.type==='artetribe:production-config-dirty'){clearFields();return}if(event.data.type!=='artetribe:attach-production-config')return;const form=findProductForm(),{config,artworkFile,previewFile,processedFile}=event.data;if(!form||!config||!artworkFile||!previewFile){clearFields();reply(false,'','Product form or required files were not found.');return}try{clearFields();form.enctype='multipart\/form-data';const p=config.production||{};textField(form,'UV DTF Preview Configuration',config.configurationId);textField(form,'Preview Surface',p.previewSurface?.label);textField(form,'Artwork Scale',`${p.scalePercent}%`);textField(form,'Artwork Position',`${p.horizontalOffset}, ${p.verticalOffset}`);textField(form,'Artwork Rotation',`${p.rotationDegrees} degrees`);textField(form,'Background Removed',p.backgroundRemoved?'Yes':'No');fileField(form,'Artwork',artworkFile);fileField(form,'Processed Artwork',processedFile);fileField(form,'UV DTF Preview',previewFile);reply(true,config.configurationId)}catch(error){clearFields();reply(false,'',error instanceof Error?error.message:String(error));console.error('ArteTribe UV DTF files could not be attached.',error)}});\n  try{const encoded=source.textContent.replace(\/\\s+\/g,''),bytes=Uint8Array.from(atob(encoded),c=\u003ec.charCodeAt(0)),doc=new TextDecoder().decode(bytes);frame.addEventListener('load',()=\u003eroot.classList.add('is-loaded'),{once:true});frame.srcdoc=doc;source.remove()}catch(error){if(loading)loading.textContent='The preview could not be loaded. Refresh the page.';console.error('ArteTribe UV DTF preview failed to initialize.',error)}\n})();\n\u003c\/script\u003e\n","brand":"ArteTribe","offers":[{"title":"Deposit","offer_id":49026630221924,"sku":null,"price":30.0,"currency_code":"USD","in_stock":true},{"title":"Remaining balance","offer_id":49026630254692,"sku":null,"price":1.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0572\/0627\/6196\/files\/artetribe-CustomUVDTFTransfers.png?v=1787107798","url":"https:\/\/artetribe.co\/ja\/products\/custom-uv-dtf-transfer-stickers-vinyl-stickers-custom","provider":"ArteTribe","version":"1.0","type":"link"}