{"id":392561,"date":"2026-08-03T14:35:12","date_gmt":"2026-08-03T17:35:12","guid":{"rendered":"https:\/\/mkt.estrategia.com\/med\/ato-final-enamed\/cadastro\/"},"modified":"2026-09-13T09:47:02","modified_gmt":"2026-09-13T12:47:02","slug":"cadastro","status":"publish","type":"page","link":"https:\/\/mkt.estrategia.com\/med\/ato-final-enamed\/cadastro\/","title":{"rendered":"Inscri\u00e7\u00e3o \u00b7 Ato Final ENAMED"},"content":{"rendered":"\n<style id=\"lp-divi-reset\">#main-header,#main-footer,#footer-info,#et-secondary-nav,header.et-l,.et_pb_section_0_tb_header,#wpadminbar,#top-header,#et-top-navigation,#et-secondary-menu,#footer-widgets,#footer-bottom,#et-main-area > footer,.mobile_nav,.mobile_menu_bar,#et_mobile_nav_menu,#et-info,.main_title,.post-meta,.et_post_meta_wrapper,.nav_container,.et_search_outer{display:none !important}html,body{margin:0 !important;padding:0 !important;overflow-x:hidden !important;overflow-y:auto !important;scroll-behavior:auto !important;-webkit-overflow-scrolling:touch !important;height:auto !important;background:#030a09 !important}.et_smooth_scroll_disabled #page-container,.et_smooth_scroll_disabled,#page-container,#et-main-area,#et-boc{overflow:visible !important;height:auto !important}#page-container{background:#030a09 !important}#page-container,#et-main-area,#primary-content,#main-content,#main-content > .container,#content-area,#left-area,article.type-page,.entry-content,.et_pb_section,.et_pb_row,.et_pb_column,.et_pb_text,.et_pb_text_inner,.et_pb_module{width:100% !important;max-width:none !important;margin:0 !important;padding:0 !important;float:none !important;background:transparent !important;box-shadow:none !important}#content-area.clearfix,#main-content > .container.clearfix{display:block !important}.entry-content > p:empty{display:none !important}.entry-content > p{margin:0 !important;padding:0 !important}.entry-content > br{display:none !important}#page-container .container::before,#page-container .container::after,.entry-content .container::before,.entry-content .container::after,#left-area .container::before,#left-area .container::after,article.type-page .container::before,article.type-page .container::after{display:none !important;content:none !important;background:transparent !important;width:0 !important;height:0 !important}\n\/* ============ CADASTRO ELEVADO (KV + pitch; grid pra reordenar no mobile) ============ *\/\n.auth-card.cad-rich{padding:0;overflow:hidden;display:grid;grid-template-columns:1.02fr 1fr;\n  grid-template-areas:\"kv panel\" \"lead panel\" \"benef panel\";align-items:start}\n.auth-overlay .auth-card.cad-rich{width:min(940px,94vw)}\n.cad-kv{grid-area:kv;width:100%;aspect-ratio:1\/1;overflow:hidden;background:#062227}\n.cad-kv img{width:100%;height:100%;object-fit:cover;object-position:center top;display:block}\n.cad-lead{grid-area:lead;background:#0b4147;color:#fff;padding:22px 30px 4px}\n.cad-benef-wrap{grid-area:benef;background:#0b4147;color:#fff;padding:8px 30px 26px;display:flex;flex-direction:column;gap:14px}\n.cad-panel{grid-area:panel;background:var(--card);align-self:stretch;display:flex;flex-direction:column;justify-content:center}\n.cad-panel .auth-body{padding:26px 32px 32px}\n.cad-kicker{font-size:11px;font-weight:800;letter-spacing:.13em;text-transform:uppercase;color:#ffd36b;margin-bottom:8px}\n.cad-h{font-size:23px;line-height:1.16;margin:0 0 8px;font-weight:800;color:#fff;font-family:'Poppins',var(--font)}\n.cad-sub{font-size:14px;line-height:1.5;color:rgba(255,255,255,.86);margin:0}\n.cad-benef{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:9px}\n.cad-benef li{font-size:13.5px;padding-left:23px;position:relative;color:rgba(255,255,255,.93)}\n.cad-benef li::before{content:'\\2713';position:absolute;left:0;top:0;color:#ffd36b;font-weight:800}\n.cad-urg{font-size:12.5px;font-weight:700;line-height:1.45;color:#fff;background:rgba(255,255,255,.1);padding:11px 14px;border-radius:11px}\n@media(max-width:760px){\n  .auth-card.cad-rich{grid-template-columns:1fr;grid-template-areas:\"kv\" \"lead\" \"panel\" \"benef\"}\n  .auth-overlay .auth-card.cad-rich{width:min(520px,94vw)}\n  .cad-kv{aspect-ratio:10\/9}\n  .cad-panel{justify-content:flex-start}\n  .cad-lead{padding:20px 24px 4px}\n  .cad-benef-wrap{padding:16px 24px 24px}\n  .cad-panel .auth-body{padding:22px 24px 26px}\n}\n\n\n\/* ===== AF-CAD-SEM-PITCH:13-09 \u2014 cartao sem o pitch da jornada (so KV + formulario).\n   Some junto com o modo Gabarito: sem a classe, o grid de 3 faixas volta intacto. ===== *\/\n.auth-card.cad-rich.cad-so-form{grid-template-columns:1fr;grid-template-areas:\"kv\" \"panel\"}\n.auth-overlay .auth-card.cad-rich.cad-so-form{width:min(500px,92vw)}\n\/* 1080\/995 = o KV ate o \"2026\". O rodape com \"A partir de 26\/08\" fica de fora,\n   e como a moldura e mais larga que alta o cover escala pela largura: zero\n   corte lateral, a foto inteira aparece. *\/\n.cad-rich.cad-so-form .cad-kv{aspect-ratio:1080\/995;align-self:start;min-height:0}\n.cad-rich.cad-so-form .cad-panel .auth-body{padding:26px 32px 32px}\n@media(max-width:760px){\n  .cad-rich.cad-so-form .cad-panel .auth-body{padding:22px 22px 26px}\n}\n\n\/* fix scroll mobile iOS v2 (audit 21\/08): !important pra vencer o tema, e no iOS antigo (sem clip) forcamos overflow-y auto no html pra o scroll acontecer no html (nao no body, que trava). *\/\nhtml{overflow-x:clip !important}\nbody{overflow-x:visible !important;overflow-y:visible !important}\n.auth-overlay{min-height:100dvh}\n<\/style>\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Poppins:wght@400;600;700;800&#038;family=Figtree:wght@400;500;600;700;800&#038;display=swap\" rel=\"stylesheet\">\n<style id=\"af-css\">:root{--bg:#0A1220;--bg-2:#0E1930;--bg-3:#131F3A;--ink:#F4F0E6;--ink-dim:#B8C0D0;--ink-mute:#7C8698;--amber:#F2B04A;--amber-strong:#E89A1F;--amber-soft:rgba(242,176,74,.12);--green:#4CC38A;--red:#E5675C;--blue:#2F7FC0;--line:rgba(244,240,230,.09);--card:#101B33;--card-2:#0C1526;--radius:16px;--radius-sm:10px;--shadow:0 18px 50px rgba(2,6,16,.55);--font:'Poppins',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif}*{margin:0;padding:0;box-sizing:border-box}html{scroll-behavior:smooth}body{font-family:var(--font);background:var(--bg);color:var(--ink);line-height:1.6;overflow-x:hidden;-webkit-font-smoothing:antialiased}img{max-width:100%;display:block}a{color:inherit;text-decoration:none}button{font-family:inherit;cursor:pointer;border:none;background:none;color:inherit}input,select,textarea{font-family:inherit;font-size:16px}::selection{background:var(--amber);color:#0A1220}.stage-bg{position:fixed;top:0;right:0;bottom:0;left:0;z-index:-2;background:radial-gradient(1200px 600px at 78% -10%,rgba(242,176,74,.10),transparent 60%),radial-gradient(900px 500px at 12% 8%,rgba(47,127,192,.10),transparent 55%),radial-gradient(1000px 800px at 50% 115%,rgba(242,176,74,.06),transparent 60%),var(--bg)}.stage-bg::after{content:\"\";position:absolute;top:0;right:0;bottom:0;left:0;opacity:.35;background-image:linear-gradient(rgba(244,240,230,.025) 1px,transparent 1px),linear-gradient(90deg,rgba(244,240,230,.025) 1px,transparent 1px);background-size:56px 56px;mask-image:radial-gradient(ellipse 90% 70% at 50% 0%,#000 30%,transparent 75%)}h1,h2,h3{line-height:1.15;font-weight:800;letter-spacing:-.02em}.kicker{font-size:11px;font-weight:700;letter-spacing:.22em;text-transform:uppercase;color:var(--amber);display:flex;align-items:center;gap:10px}.kicker.center{justify-content:center}.wrap{width:min(1120px,92%);margin:0 auto}.btn{display:inline-flex;align-items:center;justify-content:center;gap:10px;font-weight:700;font-size:15px;padding:16px 30px;border-radius:999px;transition:transform .18s ease,box-shadow .18s ease,background .18s ease;white-space:nowrap}.btn-amber{background:linear-gradient(180deg,var(--amber),var(--amber-strong));color:#20150A;box-shadow:0 10px 30px rgba(242,176,74,.28)}.btn-amber:hover{transform:translateY(-2px);box-shadow:0 16px 40px rgba(242,176,74,.4)}.btn-ghost{border:1px solid var(--line);color:var(--ink-dim)}.btn-ghost:hover{border-color:var(--amber);color:var(--amber)}.btn-sm{padding:10px 20px;font-size:13.5px}.btn[disabled]{opacity:.45;cursor:not-allowed;transform:none!important}.card{background:linear-gradient(180deg,var(--card),var(--card-2));border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow)}.pill{display:inline-flex;align-items:center;gap:8px;padding:7px 16px;border-radius:999px;border:1px solid var(--line);background:rgba(16,27,51,.7);font-size:12.5px;font-weight:600;color:var(--ink-dim)}.pill .dot{width:7px;height:7px;border-radius:50%;background:var(--green);box-shadow:0 0 10px var(--green);animation:pulse 2s infinite}@keyframes pulse{50%{opacity:.4}}.topbar{position:sticky;top:0;z-index:50;backdrop-filter:blur(14px);background:rgba(10,18,32,.82);border-bottom:1px solid var(--line)}.topbar .wrap{display:flex;align-items:center;justify-content:space-between;padding:14px 0}.brand{display:flex;flex-direction:column;align-items:flex-start;gap:7px}.brand-logo{height:30px;width:auto;display:block}.brand b{font-size:15px;letter-spacing:.01em}.brand small{display:block;font-size:9.5px;letter-spacing:.26em;color:var(--amber);font-weight:700;text-transform:uppercase}.hero{position:relative;padding:84px 0 70px;text-align:center}.hero::before{content:\"\";position:absolute;left:50%;top:-40px;transform:translateX(-50%);width:640px;height:520px;background:radial-gradient(closest-side,rgba(242,176,74,.16),transparent);pointer-events:none;filter:blur(4px)}.hero .pill{margin-bottom:26px}.hero h1{font-size:clamp(34px,5.4vw,60px);max-width:900px;margin:0 auto 8px}.hero h1 .glow{color:var(--amber);text-shadow:0 0 42px rgba(242,176,74,.45)}.hero .sub{font-size:clamp(16px,2vw,19px);color:var(--ink-dim);max-width:680px;margin:18px auto 34px}.hero-ctas{display:flex;gap:14px;justify-content:center;flex-wrap:wrap;margin-bottom:44px}.prova-switch{display:inline-flex;background:var(--card-2);border:1px solid var(--line);border-radius:999px;padding:5px;gap:4px;margin-bottom:30px}.prova-switch button{padding:10px 26px;border-radius:999px;font-weight:700;font-size:14px;color:var(--ink-mute);transition:.2s}.prova-switch button.on{background:var(--amber);color:#20150A}.count{display:flex;gap:14px;justify-content:center;flex-wrap:wrap}.count .unit{min-width:86px;padding:16px 10px;border-radius:var(--radius-sm);background:linear-gradient(180deg,var(--card),var(--card-2));border:1px solid var(--line)}.count .n{font-size:34px;font-weight:800;color:var(--amber);font-variant-numeric:tabular-nums;line-height:1}.count .l{font-size:10.5px;letter-spacing:.18em;text-transform:uppercase;color:var(--ink-mute);margin-top:8px}.count-label{margin-top:14px;font-size:13px;color:var(--ink-mute)}.bancas{border-block:1px solid var(--line);padding:18px 0;background:rgba(12,21,38,.5)}.bancas .wrap{display:flex;gap:34px;justify-content:center;flex-wrap:wrap;font-size:13px;font-weight:700;letter-spacing:.1em;color:var(--ink-mute);text-transform:uppercase}.ato{padding:96px 0;position:relative}.ato-head{max-width:720px;margin-bottom:52px}.ato-head.center{margin-inline:auto;text-align:center}.ato-num{font-size:88px;font-weight:800;color:transparent;-webkit-text-stroke:1.5px rgba(242,176,74,.28);line-height:1;position:absolute;top:64px;right:4%;user-select:none;pointer-events:none}.ato h2{font-size:clamp(26px,3.6vw,40px);margin-top:16px}.ato h2 em{font-style:normal;color:var(--amber)}.ato .lead{color:var(--ink-dim);margin-top:14px;font-size:16.5px}.eventos{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:16px}.evento{padding:26px 22px;border-radius:var(--radius);border:1px solid var(--line);background:linear-gradient(180deg,var(--card),var(--card-2));transition:.25s;position:relative;overflow:hidden}.evento:hover{transform:translateY(-4px);border-color:rgba(242,176,74,.4)}.evento .ic{width:44px;height:44px;border-radius:12px;background:var(--amber-soft);color:var(--amber);display:grid;place-items:center;margin-bottom:16px}.evento h3{font-size:16.5px;margin-bottom:8px}.evento p{font-size:13.5px;color:var(--ink-dim)}.evento .tagpts{position:absolute;top:16px;right:16px;font-size:10.5px;font-weight:800;color:var(--amber);letter-spacing:.08em}.score-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:18px;margin-top:10px}.score-card{padding:30px 26px;border-radius:var(--radius);border:1px solid var(--line);background:linear-gradient(180deg,var(--card),var(--card-2));position:relative;overflow:hidden}.score-card::after{content:\"\";position:absolute;top:auto;right:0;bottom:0;left:0;height:3px;background:linear-gradient(90deg,var(--amber),transparent)}.score-card .big{font-size:44px;font-weight:800;color:var(--amber);line-height:1}.score-card .big small{font-size:16px;color:var(--ink-mute);font-weight:600}.score-card h3{font-size:17px;margin:10px 0 8px}.score-card p{font-size:13.5px;color:var(--ink-dim)}.mec-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:14px;margin-top:34px}.mec{display:flex;gap:14px;align-items:flex-start;padding:18px;border-radius:var(--radius-sm);background:rgba(16,27,51,.5);border:1px solid var(--line);font-size:13.5px;color:var(--ink-dim)}.mec svg{flex:none;color:var(--amber);margin-top:2px}.mec b{color:var(--ink)}.premios{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:16px;margin-top:34px}.premio{text-align:center;padding:28px 20px;border-radius:var(--radius);border:1px solid rgba(242,176,74,.25);background:linear-gradient(180deg,rgba(242,176,74,.08),transparent 70%),linear-gradient(180deg,var(--card),var(--card-2))}.premio .pos{font-size:11px;font-weight:800;letter-spacing:.2em;color:var(--amber);text-transform:uppercase}.premio .what{font-size:21px;font-weight:800;margin-top:8px}.premio-note{margin-top:14px;font-size:12px;color:var(--ink-mute);text-align:center}.cal-tabs{display:flex;gap:8px;margin-bottom:26px;flex-wrap:wrap}.cal-tabs button{padding:11px 26px;border-radius:999px;border:1px solid var(--line);font-weight:700;font-size:14px;color:var(--ink-mute);transition:.2s}.cal-tabs button.on{background:var(--amber);border-color:var(--amber);color:#20150A}.semana-label{font-size:12px;font-weight:800;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-mute);margin:30px 0 12px}.aula-row{display:flex;align-items:center;gap:18px;padding:15px 20px;border-radius:var(--radius-sm);border:1px solid var(--line);background:rgba(16,27,51,.45);margin-bottom:8px;transition:.2s}.aula-row:hover{border-color:rgba(242,176,74,.35);background:rgba(16,27,51,.8)}.aula-row .data{flex:none;width:64px;text-align:center;font-weight:800;color:var(--amber);font-size:15px;line-height:1.2}.aula-row .data small{display:block;font-size:10px;letter-spacing:.14em;color:var(--ink-mute);font-weight:700}.aula-row .titulo{flex:1;font-weight:600;font-size:14.5px}.aula-row .hora{flex:none;font-size:12.5px;color:var(--ink-mute);font-variant-numeric:tabular-nums}.aula-row .tipo{flex:none;font-size:10px;font-weight:800;letter-spacing:.1em;padding:5px 12px;border-radius:999px;text-transform:uppercase}.tipo-marco{background:var(--amber-soft);color:var(--amber)}.tipo-aula{background:rgba(47,127,192,.14);color:#7FB4DE}.tipo-prova{background:rgba(76,195,138,.14);color:var(--green)}.regras{padding:30px 34px;margin-top:34px}.regras ol{counter-reset:r;list-style:none;display:grid;gap:13px}.regras li{position:relative;padding-left:40px;font-size:14px;color:var(--ink-dim);line-height:1.55}.regras li b{color:var(--ink)}.regras li::before{counter-increment:r;content:counter(r);position:absolute;left:0;top:1px;width:26px;height:26px;border-radius:50%;background:var(--amber-soft);color:var(--amber);font-weight:800;font-size:12px;display:grid;place-items:center}.tl-card{padding:16px 34px 22px;margin-bottom:26px}.tl-nota{border-top:1px solid var(--line);margin-top:6px;padding-top:18px;font-size:13.5px;color:var(--amber);font-weight:600}.painel-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(148px,1fr));gap:10px}.painel-item{padding:16px 12px;border:1px solid var(--line);border-radius:12px;background:rgba(16,27,51,.5);text-align:center;transition:.2s}.painel-item:hover{border-color:rgba(242,176,74,.4)}.painel-item b{display:block;font-size:13.5px;margin-bottom:4px}.painel-item span{font-size:11.5px;color:var(--ink-mute);line-height:1.4;display:block}.painel-nota{text-align:center;font-size:13px;color:var(--ink-dim);margin-top:16px}.prof-strip{margin-top:38px;padding-top:30px;border-top:1px solid var(--line)}.prof-strip>p{color:var(--ink-dim);font-size:14px;margin-top:12px}.prof-chips{display:flex;gap:8px;flex-wrap:wrap;margin-top:14px}.prof-chips span{padding:8px 16px;border:1px solid var(--line);border-radius:999px;font-size:12.5px;font-weight:600;color:var(--ink-dim)}.prof-nota{font-size:12.5px;color:var(--ink-mute);margin-top:16px}.field .hint{font-size:11.5px;color:var(--ink-mute);margin-top:6px;line-height:1.5}.onboard{padding:26px 30px;margin-bottom:26px;border-color:rgba(242,176,74,.4)}.onboard .ob-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:12px;margin:16px 0 18px}.onboard .ob-item{padding:14px 16px;border:1px solid var(--line);border-radius:12px;background:rgba(10,18,32,.5);font-size:13px;color:var(--ink-dim)}.onboard .ob-item b{display:block;color:var(--ink);margin-bottom:4px;font-size:13.5px}.onboard .ob-item .n{display:inline-grid;place-items:center;width:22px;height:22px;border-radius:50%;background:var(--amber-soft);color:var(--amber);font-weight:800;font-size:11px;margin-bottom:8px}.onboard .ob-acts{display:flex;gap:12px;flex-wrap:wrap;align-items:center}.onboard-rec{padding:0;overflow:hidden;border-color:var(--line)}.onboard-rec summary{cursor:pointer;list-style:none;padding:15px 30px;font-size:12px;font-weight:800;letter-spacing:.1em;text-transform:uppercase;color:var(--amber);transition:color .16s}.onboard-rec summary::-webkit-details-marker{display:none}.onboard-rec summary::before{content:'\u25b8';display:inline-block;width:14px}.onboard-rec[open] summary::before{content:'\u25be'}.onboard-rec summary:hover{color:var(--ink)}.onboard-rec .ob-grid{margin:6px 30px 18px}.onboard-rec .ob-acts{padding:0 30px 22px}.conf-passos{margin:22px 0}.conf-passos .passo h3{font-size:14.5px}.conf-passos .passo p{font-size:13px}.conf-passos .passo .btn{margin-top:10px}.social-strip{display:flex;align-items:baseline;gap:18px;flex-wrap:wrap;margin-bottom:36px}.social-strip .huge{font-size:clamp(56px,8vw,96px);font-weight:800;color:var(--amber);line-height:1;text-shadow:0 0 60px rgba(242,176,74,.3)}.social-strip p{font-size:17px;color:var(--ink-dim);max-width:380px}.aprovados{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:12px}.aprovado{padding:18px 20px;border-radius:var(--radius-sm);border:1px solid var(--line);background:rgba(16,27,51,.5);font-size:13px}.aprovado .lugar{font-size:10px;font-weight:800;letter-spacing:.16em;color:var(--amber);text-transform:uppercase}.aprovado b{display:block;margin:4px 0 2px;font-size:14px}.aprovado span{color:var(--ink-mute);font-size:12.5px}.faq{max-width:760px;margin:0 auto}.faq details{border:1px solid var(--line);border-radius:var(--radius-sm);background:rgba(16,27,51,.5);margin-bottom:10px;overflow:hidden}.faq summary{padding:18px 22px;font-weight:600;font-size:15px;cursor:pointer;list-style:none;display:flex;justify-content:space-between;align-items:center;gap:14px}.faq summary::-webkit-details-marker{display:none}.faq summary::after{content:\"+\";font-size:22px;color:var(--amber);flex:none;transition:.2s}.faq details[open] summary::after{transform:rotate(45deg)}.faq .a{padding:0 22px 20px;color:var(--ink-dim);font-size:14px}.final-cta{text-align:center;padding:110px 0;position:relative}.final-cta::before{content:\"\";position:absolute;left:50%;bottom:0;transform:translateX(-50%);width:800px;height:420px;background:radial-gradient(closest-side,rgba(242,176,74,.14),transparent);pointer-events:none}.final-cta h2{font-size:clamp(28px,4.4vw,48px);max-width:760px;margin:0 auto 16px}.final-cta p{color:var(--ink-dim);margin-bottom:34px}footer{border-top:1px solid var(--line);padding:34px 0;font-size:12px;color:var(--ink-mute);text-align:center}.rv{opacity:0;transform:translateY(16px);transition:opacity .4s ease,transform .4s ease}.rv.in{opacity:1;transform:none}@media (prefers-reduced-motion:reduce){.rv{opacity:1;transform:none;transition:none}}.auth-wrap{min-height:100vh;display:grid;place-items:center;padding:60px 4%}.auth-card{width:min(560px,100%);padding:44px 40px;border-radius:20px;background:linear-gradient(180deg,var(--card),var(--card-2));border:1px solid var(--line);box-shadow:var(--shadow)}.auth-card h1{font-size:26px;margin:14px 0 6px}.auth-card .sub{font-size:14px;color:var(--ink-dim);margin-bottom:30px}.field{margin-bottom:18px}.field label{display:block;font-size:12.5px;font-weight:700;letter-spacing:.04em;color:var(--ink-dim);margin-bottom:8px}.field input,.field select{width:100%;padding:14px 16px;border-radius:12px;border:1px solid var(--line);background:rgba(10,18,32,.7);color:var(--ink);outline:none;transition:.2s}.field input:focus,.field select:focus{border-color:var(--amber);box-shadow:0 0 0 3px rgba(242,176,74,.15)}.field .err{display:none;font-size:12px;color:var(--red);margin-top:6px}.field.invalid input{border-color:var(--red)}.field.invalid .err{display:block}.radio-cards{display:grid;grid-template-columns:1fr 1fr;gap:10px}.radio-cards.three{grid-template-columns:repeat(3,1fr)}.radio-card{position:relative}.radio-card input{position:absolute;opacity:0;top:0;right:0;bottom:0;left:0;cursor:pointer}.radio-card .face{display:flex;align-items:center;justify-content:center;min-height:52px;height:100%;padding:10px 12px;border-radius:12px;border:1px solid var(--line);text-align:center;font-size:13.5px;font-weight:600;color:var(--ink-dim);transition:.2s;cursor:pointer}.radio-card input:checked + .face{border-color:var(--amber);background:var(--amber-soft);color:var(--amber)}.form-note{font-size:12px;color:var(--ink-mute);margin-top:16px;text-align:center}.auth-alt{text-align:center;margin-top:22px;font-size:13.5px;color:var(--ink-mute)}.auth-alt a{color:var(--amber);font-weight:600}.auth-erro{background:rgba(217,86,74,.1);border:1px solid rgba(217,86,74,.5);color:var(--red);font-size:13.5px;font-weight:600;padding:11px 14px;border-radius:12px;margin-bottom:14px;line-height:1.5}.auth-card.com-marca{padding:0;overflow:hidden}.auth-card.com-marca .auth-body{padding:30px 40px 38px}.auth-brand{position:relative;overflow:hidden;padding:28px 40px 24px;color:#fff;background:linear-gradient(135deg,#03565D 0%,#04737B 45%,#058C95 100%)}.auth-brand .ab-logo{height:26px;width:auto;display:block;margin-bottom:16px}.auth-brand .ab-mark{font-family:'Poppins',var(--font);font-weight:800;font-size:31px;line-height:1;letter-spacing:.015em;color:#fff}.auth-brand .ab-sub{font-size:11.5px;letter-spacing:.3em;font-weight:700;color:rgba(255,255,255,.82);margin-top:8px}.auth-fatos{display:flex;gap:8px;flex-wrap:wrap;margin:-14px 0 26px}.auth-fatos span{font-size:11.5px;font-weight:700;color:var(--amber);background:var(--amber-soft);padding:5px 11px;border-radius:99px;white-space:nowrap}@media (max-width:560px){.auth-card.com-marca .auth-body{padding:24px 22px 30px}.auth-brand{padding:22px 22px 20px}.auth-brand .ab-mark{font-size:26px}}.app{display:grid;grid-template-columns:250px 1fr;min-height:100vh}.sidebar{border-right:1px solid var(--line);background:rgba(12,21,38,.65);display:flex;flex-direction:column;padding:26px 18px;position:sticky;top:0;height:100vh}.sidebar .brand{margin-bottom:34px;padding:0 8px}.side-label{font-size:10px;font-weight:800;letter-spacing:.24em;color:var(--ink-mute);text-transform:uppercase;padding:0 12px;margin-bottom:10px}.nav-item{display:flex;align-items:center;gap:12px;padding:12px 14px;border-radius:12px;font-size:14px;font-weight:600;color:var(--ink-dim);transition:.18s;margin-bottom:4px;width:100%;text-align:left}.nav-item svg{flex:none}.nav-item:hover{background:rgba(242,176,74,.07);color:var(--ink)}.nav-item.on{background:linear-gradient(180deg,var(--amber),var(--amber-strong));color:#20150A}.nav-item .badge{margin-left:auto;font-size:10px;font-weight:800;background:var(--amber-soft);color:var(--amber);padding:3px 9px;border-radius:8px;line-height:1.3;text-align:center}.nav-item.on .badge{background:rgba(32,21,10,.18);color:#20150A}.side-foot{margin-top:auto;border-top:1px solid var(--line);padding-top:18px}.jornada-bar{padding:0 8px;margin-bottom:16px}.jornada-bar .row{display:flex;justify-content:space-between;font-size:10.5px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-mute);margin-bottom:8px}.jornada-bar .row b{color:var(--amber)}.jornada-track{height:5px;border-radius:99px;background:rgba(244,240,230,.08);overflow:hidden}.jornada-fill{height:100%;border-radius:99px;background:linear-gradient(90deg,var(--amber),var(--amber-strong));transition:width .6s ease}.user-chip{display:flex;align-items:center;gap:10px;padding:8px}.user-chip .av{width:36px;height:36px;border-radius:50%;background:var(--amber-soft);color:var(--amber);display:grid;place-items:center;font-weight:800;font-size:13px;flex:none}.user-chip b{font-size:13px;display:block;line-height:1.3}.user-chip small{font-size:11px;color:var(--ink-mute)}.user-chip .out{margin-left:auto;color:var(--ink-mute);padding:6px;display:inline-flex;align-items:center}.user-chip .out+.out{margin-left:0}.user-chip .out:hover{color:var(--ink)}.user-chip #btnSair:hover{color:var(--red)}.main{padding:44px clamp(20px,4vw,56px);max-width:1160px;margin-left:auto;margin-right:auto;width:100%}.af-welcome{padding:0;overflow:hidden;margin-bottom:8px;display:grid;grid-template-columns:230px 1fr}.af-welcome .afw-media{position:relative;background:#0b1a1c;min-height:100%}.af-welcome .afw-media img{position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;display:block}.af-welcome .afw-badge{position:absolute;left:12px;bottom:12px;background:var(--amber);color:#fff;font-weight:800;font-size:11.5px;letter-spacing:.02em;padding:5px 11px;border-radius:99px;box-shadow:0 6px 16px rgba(5,140,149,.35)}.af-welcome .afw-body{padding:20px 26px}.af-welcome .afw-body h3{font-size:18px;margin:0 0 6px;color:var(--ink)}.af-welcome .afw-body p{font-size:13.5px;color:var(--ink-dim);line-height:1.55;margin:0 0 14px}.af-welcome .afw-nota{font-size:12px;color:var(--ink-mute);margin-top:10px}@media (max-width:620px){.af-welcome{grid-template-columns:1fr}.af-welcome .afw-media{min-height:0;height:158px}.af-welcome .afw-body{padding:18px 20px 22px}}.page-head{display:flex;align-items:flex-start;justify-content:space-between;gap:20px;flex-wrap:wrap;margin-bottom:34px}.page-head h1{font-size:clamp(24px,3vw,32px);margin-top:8px}.page-head .desc{color:var(--ink-dim);font-size:14.5px;max-width:560px;margin-top:10px}.pts-chip{flex:none;display:inline-flex;align-items:center;gap:8px;padding:10px 18px;border-radius:999px;border:1px solid rgba(242,176,74,.35);background:var(--amber-soft);font-size:12.5px;font-weight:800;color:var(--amber);letter-spacing:.04em}.ofensiva-card{display:grid;grid-template-columns:auto 1fr auto;gap:30px;align-items:center;padding:30px 34px;margin-bottom:30px}.ofensiva-card .flame{text-align:center}.ofensiva-card .flame .n{font-size:56px;font-weight:800;color:var(--amber);line-height:1}.ofensiva-card .flame .l{font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-mute);font-weight:700}.ofensiva-card h3{font-size:12px;letter-spacing:.18em;text-transform:uppercase;color:var(--ink-mute);margin-bottom:8px}.ofensiva-card .msg{font-size:14.5px;color:var(--ink-dim)}.progress{height:7px;border-radius:99px;background:rgba(244,240,230,.08);overflow:hidden;margin-top:14px}.progress .fill{height:100%;border-radius:99px;background:linear-gradient(90deg,var(--amber),var(--amber-strong));transition:width .6s ease}.progress-note{font-size:12px;color:var(--ink-mute);margin-top:8px}.rank-pts{text-align:right}.rank-pts .n{font-size:38px;font-weight:800;color:var(--amber);line-height:1}.rank-pts .n small{font-size:15px;color:var(--ink-mute);font-weight:600}.rank-pts .l{font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-mute);font-weight:700}.checkin-grid{display:grid;grid-template-columns:330px 1fr;gap:18px;align-items:start}.cal-card{padding:22px 20px}.cal-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.cal-head b{font-size:15px}.cal-nav{width:34px;height:34px;border-radius:50%;border:1px solid var(--line);display:grid;place-items:center;color:var(--ink-dim);transition:.15s}.cal-nav:hover{border-color:var(--amber);color:var(--amber)}.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:3px;text-align:center}.cal-dow{font-size:9px;font-weight:800;letter-spacing:.12em;color:var(--ink-mute);padding:7px 0;text-transform:uppercase}.cal-day{position:relative;aspect-ratio:1;display:grid;place-items:center;font-size:13px;font-weight:600;border-radius:10px;color:var(--ink-mute);border:1px solid transparent}.cal-day.has{color:var(--ink);background:rgba(16,27,51,.65);border-color:var(--line);cursor:pointer;transition:.15s}.cal-day.has:hover{border-color:rgba(242,176,74,.5)}.cal-day.today{border-color:var(--amber)}.cal-day.sel{background:var(--amber);border-color:var(--amber);color:#20150A}.cal-day .dot{position:absolute;bottom:4px;left:50%;transform:translateX(-50%);width:5px;height:5px;border-radius:50%}.cal-day.sel .dot{background:#20150A}.dot-ok{background:var(--green)}.dot-miss{background:var(--red)}.dot-next{background:rgba(244,240,230,.35)}.cal-legend{display:flex;gap:13px;justify-content:center;margin-top:14px;padding-top:12px;border-top:1px solid var(--line);font-size:11px;color:var(--ink-mute);flex-wrap:wrap}.cal-legend i{width:7px;height:7px;border-radius:50%;display:inline-block;margin-right:5px}.cal-legend .hoje-i{width:9px;height:9px;background:transparent;border:1.5px solid var(--amber)}.day-panel{display:grid;grid-template-columns:repeat(auto-fit,minmax(290px,1fr));gap:16px}.day-empty{padding:24px 26px;border-radius:var(--radius);border:1px solid var(--line);background:rgba(16,27,51,.5);color:var(--ink-dim);font-size:14px}.ev-card{overflow:hidden;display:flex;flex-direction:column;padding:0}.ev-thumb{position:relative;aspect-ratio:16\/9;overflow:hidden;background:radial-gradient(120% 160% at 80% -20%,rgba(242,176,74,.35),transparent 55%),linear-gradient(135deg,#16234233,#0C1526),var(--bg-3)}.ev-thumb img{width:100%;height:100%;object-fit:cover;display:block}.ev-thumb::after{content:\"\";position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(180deg,transparent 40%,rgba(10,18,32,.72))}.ev-thumb .fall{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;color:rgba(242,176,74,.5)}.ev-badge{position:absolute;left:14px;bottom:12px;z-index:2;display:inline-flex;gap:8px;align-items:center;background:rgba(10,18,32,.88);border:1px solid rgba(244,240,230,.14);padding:7px 15px;border-radius:999px;font-size:10px;font-weight:800;letter-spacing:.14em;color:var(--ink);text-transform:uppercase}.ev-badge svg{color:var(--amber)}.ev-body{padding:20px 22px 22px;display:flex;flex-direction:column;gap:11px;flex:1}.ev-when{font-size:10.5px;letter-spacing:.16em;font-weight:800;color:var(--ink-mute);text-transform:uppercase}.ev-body h3{font-size:16px;line-height:1.3}.ev-cta{align-self:flex-start}.ev-ctas{display:flex;flex-wrap:wrap;gap:10px;align-items:center}.ev-cta-off{opacity:.45;cursor:default;pointer-events:none}.aulas-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(330px,1fr));gap:18px;margin-bottom:8px}.ev-card.ev-today{border-color:var(--amber);box-shadow:0 0 0 1px var(--amber)}.ev-badge-hoje{left:auto;right:12px;background:var(--amber);color:#0A1220}.mrow .t .sub{color:var(--ink-mute);font-weight:400;font-size:12.5px}.mrow .acts{display:flex;gap:8px;flex:none}.btn-ico{width:34px;height:34px;flex:none;border:1px solid var(--line);border-radius:9px;display:inline-flex;align-items:center;justify-content:center;color:var(--ink-dim);transition:.18s}.btn-ico:hover{border-color:var(--amber);color:var(--amber)}.btn-ico.off{opacity:.4;pointer-events:none}.mrow.hoje{border-color:rgba(242,176,74,.55)}.row-form{border:1px solid var(--line);border-top:none;border-radius:0 0 14px 14px;padding:14px 18px;margin:-10px 0 12px;background:rgba(12,21,38,.55)}.cal-big .cal-grid{gap:6px}.cal-day.big{aspect-ratio:auto;min-height:66px;display:flex;flex-direction:column;align-items:center;justify-content:flex-start;gap:2px;padding:9px 4px 14px;border-radius:10px}.cal-day.big .n{font-weight:700;line-height:1}.cal-day.big .lbl{font-size:8.5px;line-height:1.15;color:var(--ink-dim);font-weight:600}.cal-day.big.sel .lbl{color:#20150A}.trilha{position:relative;padding-left:24px;margin-bottom:10px}.trilha::before{content:\"\";position:absolute;left:6px;top:12px;bottom:12px;width:2px;background:var(--line)}.tr-item{position:relative;margin-bottom:12px}.tr-dot{position:absolute;left:-23px;top:24px;width:12px;height:12px;border-radius:50%;background:var(--ink-mute);border:2px solid var(--bg)}.tr-item.ok .tr-dot{background:var(--green)}.tr-item.miss .tr-dot{background:var(--red)}.tr-item.now .tr-dot{background:var(--amber);box-shadow:0 0 14px rgba(242,176,74,.8)}.tr-card{display:flex;gap:16px;padding:14px 16px;border:1px solid var(--line);border-radius:14px;background:rgba(16,27,51,.5)}.tr-item.now .tr-card{border-color:rgba(242,176,74,.55);background:linear-gradient(180deg,var(--card),var(--card-2))}.tr-item.ok .tr-card{opacity:.72}.tr-item.ok .tr-card:hover{opacity:1}.tr-data{flex:none;width:56px;text-align:center;font-weight:800;color:var(--amber);font-size:24px;line-height:1;padding-top:4px}.tr-data small{display:block;font-size:9.5px;letter-spacing:.16em;color:var(--ink-mute);font-weight:700;margin-top:4px}.tr-data em{display:block;font-style:normal;font-size:8.5px;letter-spacing:.14em;font-weight:800;color:#20150A;background:var(--amber);border-radius:5px;padding:2px 0;margin-top:6px;text-transform:uppercase}.tr-item.ok .tr-data{color:var(--green)}.tr-item.next .tr-data{color:var(--ink-dim)}.tr-thumb{flex:none;width:118px;border-radius:9px;overflow:hidden;background:var(--card-2);align-self:flex-start;aspect-ratio:16\/9;position:relative}.tr-thumb img{width:100%;height:100%;object-fit:cover}.tr-thumb .fall{display:grid;place-items:center;height:100%;color:var(--ink-mute)}.tr-thumb.sim-thumb{display:grid;place-items:center;background:var(--amber-soft);color:var(--amber)}.tr-item.tr-sim .tr-card{cursor:default}.tr-item.tr-sim .tr-card:hover{border-color:var(--line)}.tr-main{flex:1;min-width:0}.tr-when{font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-mute);font-weight:700}.tr-main>b{font-size:14.5px;display:block;margin:3px 0 8px}.tr-foot{display:flex;gap:10px;align-items:center;flex-wrap:wrap;justify-content:space-between}.tr-main .row-form{border:none;border-top:1px solid var(--line);border-radius:0;padding:12px 0 0;margin:12px 0 0;background:none}@media (max-width:640px){.tr-thumb{width:86px}}@media (max-width:480px){.tr-thumb{display:none}}.ev-div{border-top:1px solid var(--line);margin:4px 0}.ev-note{font-size:12.5px;color:var(--ink-dim);line-height:1.55}.ev-kicker{font-size:9.5px;font-weight:800;letter-spacing:.18em;color:var(--ink-mute);text-transform:uppercase}.ev-missao{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}.aula-card{padding:22px 24px;margin-bottom:12px;display:grid;grid-template-columns:70px 1fr auto;gap:20px;align-items:center}.aula-card .data{text-align:center;font-weight:800;color:var(--amber);font-size:17px;line-height:1.2}.aula-card .data small{display:block;font-size:10px;letter-spacing:.14em;color:var(--ink-mute);font-weight:700}.aula-card .info h3{font-size:15.5px;margin-bottom:5px}.aula-card .info .meta{font-size:12.5px;color:var(--ink-mute);display:flex;gap:14px;flex-wrap:wrap}.aula-card .info .meta .tipo{font-size:10px;font-weight:800;letter-spacing:.1em;padding:3px 10px;border-radius:999px;text-transform:uppercase}.aula-actions{display:flex;flex-direction:column;gap:8px;align-items:stretch;min-width:210px}.checkin-form{display:flex;gap:8px}.checkin-form input{flex:1;min-width:0;padding:10px 14px;border-radius:10px;border:1px solid var(--line);background:rgba(10,18,32,.7);color:var(--ink);font-size:13px;outline:none}.checkin-form input:focus{border-color:var(--amber)}.state-tag{display:inline-flex;align-items:center;gap:8px;justify-content:center;font-size:12px;font-weight:700;padding:9px 14px;border-radius:10px}.state-ok{background:rgba(76,195,138,.13);color:var(--green)}.state-miss{background:rgba(229,103,92,.12);color:var(--red)}.state-wait{background:rgba(244,240,230,.06);color:var(--ink-mute)}.aula-card.done{border-color:rgba(76,195,138,.3)}.aula-card.today{border-color:rgba(242,176,74,.5);box-shadow:0 0 0 1px rgba(242,176,74,.3),var(--shadow)}.hoje-flag{font-size:10px;font-weight:800;letter-spacing:.14em;color:var(--amber);text-transform:uppercase}.hero-missao{display:grid;grid-template-columns:minmax(220px,360px) 1fr;overflow:hidden;padding:0;border-color:rgba(242,176,74,.45);box-shadow:0 0 0 1px rgba(242,176,74,.25),var(--shadow);margin-bottom:8px}.hero-missao .ev-thumb{aspect-ratio:auto;min-height:200px;height:100%}.hero-missao .hm-body{padding:26px 30px;display:flex;flex-direction:column;gap:12px;justify-content:center}.hero-missao .hm-kicker{font-size:10.5px;font-weight:800;letter-spacing:.2em;color:var(--amber);text-transform:uppercase}.hero-missao h3{font-size:20px;line-height:1.25}.hero-missao .hm-note{font-size:13.5px;color:var(--ink-dim)}.hero-missao .btn{align-self:flex-start}.hero-missao.done{border-color:rgba(76,195,138,.4);box-shadow:0 0 0 1px rgba(76,195,138,.2),var(--shadow)}.sec-h{display:flex;align-items:center;gap:10px;font-size:11px;font-weight:800;letter-spacing:.18em;text-transform:uppercase;color:var(--ink-mute);margin:28px 0 12px}.sec-h .cnt{background:var(--amber-soft);color:var(--amber);border-radius:999px;padding:2px 10px;font-size:10.5px;letter-spacing:.05em}.sec-h .cnt.g{background:rgba(76,195,138,.12);color:var(--green)}.mrow{display:flex;align-items:center;gap:16px;padding:13px 18px;border:1px solid var(--line);border-radius:12px;background:rgba(16,27,51,.5);margin-bottom:8px;transition:.15s}.mrow:hover{border-color:rgba(242,176,74,.35)}.mrow .data{flex:none;width:52px;text-align:center;font-weight:800;color:var(--amber);font-size:14px;line-height:1.15}.mrow .data small{display:block;font-size:9px;letter-spacing:.12em;color:var(--ink-mute);font-weight:700}.mrow .t{flex:1;font-weight:600;font-size:14px;min-width:0}.mrow .res{flex:none;font-size:12.5px;font-weight:700;color:var(--green)}.mrow.done{opacity:.72}.mrow.done:hover{opacity:1;border-color:rgba(76,195,138,.35)}.mrow.done .data{color:var(--green)}.prox-nota{font-size:12.5px;color:var(--ink-mute);margin:-2px 0 8px;padding:0 4px;line-height:1.5}@media (max-width:560px){.mrow{flex-wrap:wrap;gap:12px 14px;padding:14px 16px}.mrow .t{flex:1 1 0}.mrow > .btn{flex:1 0 100%;justify-content:center}}.tag-late{color:var(--red);font-weight:800}.tag-done{color:var(--green);font-weight:800}.quiz-box{padding:30px 32px}.quiz-box .qhead{font-size:11px;font-weight:800;letter-spacing:.18em;color:var(--amber);text-transform:uppercase;margin-bottom:10px}.quiz-q{margin-bottom:26px;padding-bottom:26px;border-bottom:1px solid var(--line)}.quiz-q:last-of-type{border-bottom:none}.quiz-q .enun{font-size:15px;margin-bottom:14px;color:var(--ink)}.quiz-opts{display:flex;gap:10px}.quiz-opts button{padding:10px 28px;border-radius:10px;border:1px solid var(--line);font-weight:700;font-size:13.5px;color:var(--ink-dim);transition:.15s}.quiz-opts button:hover{border-color:var(--amber);color:var(--amber)}.quiz-opts button.sel{background:var(--amber-soft);border-color:var(--amber);color:var(--amber)}.quiz-opts button.hit{background:rgba(76,195,138,.15);border-color:var(--green);color:var(--green)}.quiz-opts button.errado{background:rgba(229,103,92,.13);border-color:var(--red);color:var(--red)}.quiz-q .enun{white-space:pre-wrap}.quiz-opts.mult{flex-direction:column;align-items:stretch}.quiz-opts.mult button{display:flex;align-items:flex-start;gap:12px;text-align:left;padding:12px 16px;font-weight:500;font-size:14px;line-height:1.5}.quiz-opts.mult button .lt{flex:none;width:26px;height:26px;border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:12.5px;font-weight:800;border:1px solid var(--line);color:var(--ink-dim);margin-top:-1px}.quiz-opts.mult button.sel .lt{border-color:var(--amber);color:var(--amber)}.quiz-opts.mult button.hit .lt{border-color:var(--green);color:var(--green)}.quiz-opts.mult button.errado .lt{border-color:var(--red);color:var(--red)}.quiz-coment{margin-top:14px;border:1px solid var(--line);border-radius:12px;overflow:hidden}.quiz-coment summary{cursor:pointer;padding:11px 16px;font-size:12px;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:var(--amber);list-style:none}.quiz-coment summary::before{content:'\u25b8 '}.quiz-coment[open] summary::before{content:'\u25be '}.quiz-coment summary::-webkit-details-marker{display:none}.quiz-coment .cbody{padding:4px 16px 16px;font-size:14px;line-height:1.65;color:var(--ink-dim);white-space:pre-wrap;word-break:break-word}.quiz-result{padding:20px;border-radius:12px;background:var(--amber-soft);border:1px solid rgba(242,176,74,.3);font-size:14.5px;margin-top:8px}.quiz-result b{color:var(--amber)}.quiz-status{position:sticky;bottom:14px;z-index:5;margin-top:10px;padding:12px 18px;border-radius:12px;border:1px solid var(--line);background:var(--card-2);box-shadow:0 8px 24px rgba(0,0,0,.35);font-size:13px;font-weight:600;color:var(--ink-dim);text-align:center}.quiz-status b{color:var(--amber)}.quiz-status b.ok{color:var(--green)}.qnav{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:22px}.qnav .qn{width:34px;height:34px;border-radius:9px;border:1px solid var(--line);font-size:12.5px;font-weight:700;color:var(--ink-dim);display:grid;place-items:center;background:var(--card-2);transition:.15s;padding:0}.qnav .qn:hover{border-color:var(--amber);color:var(--amber)}.qnav .qn.ok{background:rgba(76,195,138,.13);border-color:rgba(76,195,138,.4);color:var(--green)}.qnav .qn.err{background:rgba(229,103,92,.12);border-color:rgba(229,103,92,.4);color:var(--red)}.qnav .qn.cur{outline:2px solid var(--amber);outline-offset:1.5px;color:var(--ink)}.qctrl{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-top:24px;flex-wrap:wrap}.qline{font-size:13px;color:var(--ink-mute)}.qline b{color:var(--amber)}.qline b.ok{color:var(--green)}.quiz-coment .cbody a{color:var(--amber);text-decoration:underline;word-break:break-all}.sim-chips{display:flex;gap:8px;flex-wrap:wrap;margin:14px 0}.sim-chips span{padding:7px 14px;border-radius:999px;border:1px solid var(--line);font-size:12px;font-weight:700;color:var(--ink-dim);background:var(--amber-soft)}.sim-quando{display:inline-flex;align-items:center;gap:16px;background:var(--amber-soft);border:1px solid rgba(5,140,149,.28);border-radius:16px;padding:15px 22px;text-align:left;vertical-align:top}.sim-quando .sq-ico{flex:none;width:46px;height:46px;border-radius:12px;background:var(--amber);color:#fff;display:grid;place-items:center}.sim-quando .sq-label{font-size:10px;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-mute)}.sim-quando .sq-dia{font-size:22px;font-weight:800;color:var(--ink);line-height:1.15;margin-top:2px}.sim-quando .sq-hora{font-size:13px;color:var(--ink-dim);font-weight:600;margin-top:2px}.sim-bloqueado{margin-top:24px;background:var(--line)!important;color:var(--ink-mute)!important;box-shadow:none!important;cursor:not-allowed;pointer-events:none;font-weight:700}@media (max-width:480px){.sim-quando{gap:12px;padding:13px 16px}.sim-quando .sq-dia{font-size:18px}}.sim-regras{list-style:none;display:grid;gap:10px}.sim-regras li{position:relative;padding-left:26px;font-size:14px;color:var(--ink-dim);line-height:1.55}.sim-regras li::before{content:\"\";position:absolute;left:2px;top:7px;width:8px;height:8px;border-radius:50%;background:var(--amber)}.sim-regras li b{color:var(--ink)}.prova-layout{display:grid;grid-template-columns:240px 1fr;gap:18px;align-items:start}.prova-side{position:sticky;top:20px}.prova-timer{display:flex;align-items:center;justify-content:center;gap:8px;padding:16px;font-size:26px;font-weight:800;font-variant-numeric:tabular-nums;border-bottom:1px solid var(--line)}.prova-timer.urgente{color:var(--red);animation:pulse 1s infinite}.qmap{display:grid;grid-template-columns:repeat(5,1fr);gap:6px;padding:14px 16px;max-height:320px;overflow-y:auto}.qmap button{position:relative;aspect-ratio:1;border:1px solid var(--line);border-radius:8px;font-size:11.5px;font-weight:700;color:var(--ink-mute);transition:.12s}.qmap button:hover{border-color:var(--amber)}.qmap button.respondida{background:var(--amber-soft);border-color:var(--amber);color:var(--amber)}.qmap button.atual{outline:2px solid var(--amber);outline-offset:1px;color:var(--ink)}.qmap button.marcada::after{content:\"\";position:absolute;top:3px;right:3px;width:6px;height:6px;border-radius:50%;background:var(--blue)}.prova-meta{padding:12px 16px;font-size:12px;font-weight:600;color:var(--ink-mute);text-align:center;border-top:1px solid var(--line)}.prova-area{font-size:10.5px;font-weight:800;letter-spacing:.16em;text-transform:uppercase;color:var(--blue);margin-bottom:8px}.prova-nav{display:flex;justify-content:space-between;gap:10px;margin-top:20px;flex-wrap:wrap}.prova-nav .marc-on{border-color:var(--blue);color:var(--blue)}.prova-protegida{-webkit-user-select:none;user-select:none}.sim-demo-note{margin-top:16px;padding:13px 18px;border:1px dashed var(--line);border-radius:12px;font-size:13px;color:var(--ink-mute);text-align:center}.sim-demo-note a{color:var(--amber);font-weight:700;text-decoration:underline}@media (max-width:920px){.prova-layout{grid-template-columns:1fr}.prova-side{position:static}.qmap{max-height:180px}}.passos{counter-reset:passo}.passo{display:flex;gap:18px;padding:20px 0;border-bottom:1px solid var(--line)}.passo:last-child{border-bottom:none}.passo::before{counter-increment:passo;content:counter(passo);flex:none;width:34px;height:34px;border-radius:50%;background:var(--amber-soft);color:var(--amber);font-weight:800;font-size:14px;display:grid;place-items:center}.passo h3{font-size:15px;margin-bottom:4px}.passo p{font-size:13.5px;color:var(--ink-dim)}.locked-card{text-align:center;padding:60px 30px}.locked-card .ic{width:64px;height:64px;border-radius:18px;background:var(--amber-soft);color:var(--amber);display:grid;place-items:center;margin:0 auto 20px}.locked-card p{color:var(--ink-mute);font-size:14.5px;max-width:420px;margin:0 auto}.pos-card{display:grid;grid-template-columns:auto 1fr;gap:34px;align-items:center;padding:32px 36px;margin-bottom:26px}.pos-card .pos{font-size:60px;font-weight:800;color:var(--amber);line-height:1}.pos-card .pos small{font-size:16px;color:var(--ink-mute);font-weight:600}.pos-breakdown{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-top:18px}.pb{padding:14px 16px;border-radius:12px;background:rgba(10,18,32,.55);border:1px solid var(--line)}.pb .row{display:flex;justify-content:space-between;font-size:12px;font-weight:700;margin-bottom:8px}.pb .row span:last-child{color:var(--ink-mute);font-variant-numeric:tabular-nums}.rank-table{width:100%;border-collapse:collapse;font-size:14px}.rank-table th{font-size:10.5px;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-mute);text-align:left;padding:12px 16px;border-bottom:1px solid var(--line);font-weight:800}.rank-table td{padding:13px 16px;border-bottom:1px solid var(--line)}.rank-table tr:last-child td{border-bottom:none}.rank-table .pts{text-align:right;font-weight:700;font-variant-numeric:tabular-nums}.rank-table tr.me td{background:var(--amber-soft);font-weight:700}.rank-table tr.me td:first-child{border-radius:10px 0 0 10px}.rank-table tr.me td:last-child{border-radius:0 10px 10px 0}.rank-gap td{text-align:center;color:var(--ink-mute);font-size:12px;padding:8px}.medal{display:inline-grid;place-items:center;width:26px;height:26px;border-radius:50%;font-size:11.5px;font-weight:800;background:rgba(244,240,230,.07);color:var(--ink-dim)}.medal.g{background:var(--amber);color:#20150A}.medal.s{background:#C6CDD9;color:#1A2233}.medal.b{background:#B0793F;color:#20150A}.aviso{padding:22px 26px;margin-bottom:12px}.aviso .a-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:8px}.aviso .a-data{font-size:10.5px;font-weight:800;letter-spacing:.16em;color:var(--ink-mute);text-transform:uppercase}.aviso .a-novo{font-size:9.5px;font-weight:800;letter-spacing:.12em;background:var(--amber);color:#20150A;padding:3px 10px;border-radius:999px;text-transform:uppercase}.aviso h3{font-size:16.5px;margin-bottom:6px}.aviso p{font-size:14px;color:var(--ink-dim)}.aviso .a-cta{margin-top:14px}.canal-pills{display:flex;gap:8px;margin-bottom:18px;flex-wrap:wrap}.canal-pills button{padding:9px 20px;border-radius:999px;border:1px solid var(--line);font-weight:700;font-size:13px;color:var(--ink-mute);transition:.2s}.canal-pills button.on{background:var(--amber);border-color:var(--amber);color:#20150A}.composer{padding:20px 22px;margin-bottom:18px}.composer textarea{width:100%;min-height:74px;resize:vertical;padding:12px 14px;border-radius:12px;border:1px solid var(--line);background:rgba(10,18,32,.7);color:var(--ink);outline:none;font-size:14px;font-family:inherit}.composer textarea:focus{border-color:var(--amber)}.composer .c-foot{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-top:10px;font-size:11.5px;color:var(--ink-mute);flex-wrap:wrap}.post{padding:20px 24px;margin-bottom:12px}.post.pin{border-color:rgba(242,176,74,.4)}.post .p-head{display:flex;align-items:center;gap:10px;margin-bottom:10px}.post .p-av{width:34px;height:34px;border-radius:50%;background:var(--amber-soft);color:var(--amber);display:grid;place-items:center;font-weight:800;font-size:12px;flex:none}.post .p-nome{font-size:13.5px;font-weight:700}.post .p-meta{font-size:11px;color:var(--ink-mute)}.post .p-pin{margin-left:auto;font-size:9.5px;font-weight:800;letter-spacing:.12em;color:var(--amber);text-transform:uppercase;border:1px solid rgba(242,176,74,.4);padding:3px 10px;border-radius:999px;flex:none}.post .p-body{font-size:14px;color:var(--ink);white-space:pre-wrap;line-height:1.6;overflow-wrap:anywhere}.post .p-actions{display:flex;gap:8px;align-items:center;margin-top:14px;flex-wrap:wrap}.react{padding:6px 14px;border-radius:999px;border:1px solid var(--line);font-size:12.5px;color:var(--ink-dim);transition:.15s}.react:hover{border-color:var(--amber)}.react.on{background:var(--amber-soft);border-color:rgba(242,176,74,.5);color:var(--amber)}.p-link{font-size:12px;color:var(--ink-mute);margin-left:auto}.p-link:hover{color:var(--red)}.coms{margin-top:14px;border-top:1px solid var(--line);padding-top:12px;display:flex;flex-direction:column;gap:10px}.com{display:flex;gap:10px;font-size:13px}.com .p-av{width:26px;height:26px;font-size:10px}.com .c-b{background:rgba(10,18,32,.55);border:1px solid var(--line);border-radius:10px;padding:8px 12px;flex:1}.com .c-b b{font-size:12px;display:block;margin-bottom:2px}.com-form{display:flex;gap:8px;margin-top:12px}.com-form input{flex:1;min-width:0;padding:10px 14px;border-radius:10px;border:1px solid var(--line);background:rgba(10,18,32,.7);color:var(--ink);font-size:13px;outline:none}.com-form input:focus{border-color:var(--amber)}.demo-banner{background:rgba(47,127,192,.12);border:1px solid rgba(47,127,192,.3);border-radius:var(--radius-sm);padding:12px 18px;font-size:12.5px;color:#9CC4E4;margin-bottom:26px}.demo-banner b{color:#CBE2F4}.toast{position:fixed;bottom:26px;left:50%;transform:translateX(-50%) translateY(20px);background:var(--card);border:1px solid rgba(242,176,74,.4);color:var(--ink);padding:14px 26px;border-radius:12px;font-size:14px;font-weight:600;opacity:0;pointer-events:none;transition:.3s;z-index:100005;box-shadow:var(--shadow)}.toast.show{opacity:1;transform:translateX(-50%) translateY(0)}@media (max-width:920px){.app{grid-template-columns:1fr}.checkin-grid{grid-template-columns:1fr}.hero-missao{grid-template-columns:1fr}.hero-missao .ev-thumb{aspect-ratio:16\/9;min-height:0;height:auto}.sidebar{position:fixed;top:auto;right:0;bottom:0;left:0;height:auto;flex-direction:row;align-items:center;padding:10px 12px;border-right:none;border-top:1px solid var(--line);z-index:60;background:rgba(10,18,32,.96);backdrop-filter:blur(14px)}.sidebar .brand,.side-label,.side-foot{display:none}.sidebar nav{display:flex;width:100%;justify-content:space-around}.nav-item{flex-direction:column;gap:4px;font-size:10px;padding:8px 6px;margin:0}.nav-item .badge{display:none}.main{padding-bottom:120px;max-width:100%}.ofensiva-card{grid-template-columns:1fr;text-align:center;gap:18px}.rank-pts{text-align:center}.aula-card{grid-template-columns:56px 1fr}.aula-actions{grid-column:1\/-1;min-width:0}.pos-card{grid-template-columns:1fr;text-align:center}.pos-breakdown{grid-template-columns:1fr}.radio-cards.three{grid-template-columns:1fr}.ato-num{display:none}}.auth-overlay{position:relative;width:100%;min-height:100vh;display:flex;justify-content:center;align-items:flex-start;padding:24px 4% calc(24px + env(safe-area-inset-bottom));background:var(--bg)}.auth-overlay .auth-card{margin:0 auto;width:min(560px,92vw)}.auth-overlay .field input,.auth-overlay .field select{background:#fff;color:var(--ink);border-color:var(--line)}.auth-overlay .field input:focus{border-color:var(--amber)}html{-webkit-tap-highlight-color:transparent}body{overscroll-behavior-y:contain}.btn,.nav-item,.quiz-opts button,.qmap button,.btn-ico,.qnav .qn{touch-action:manipulation}.btn:active,.quiz-opts button:active,.btn-ico:active,.qnav .qn:active{transform:scale(.97)}.nav-item{transition:background .18s,color .18s,transform .12s}.nav-item:active{transform:scale(.96)}@keyframes viewIn{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}.view-anim{animation:viewIn .22s ease}@media (max-width:920px){.sidebar{padding-bottom:calc(10px + env(safe-area-inset-bottom))}.checkin-form input,.field input,.field select{font-size:16px}.main{padding-top:20px}}.sim-guard{position:fixed;top:0;left:0;right:0;bottom:0;width:100%;height:100%;z-index:100002;display:grid;place-items:center;background:rgba(14,42,46,.55);padding:20px}.sim-guard .sg-card{background:var(--card);border:1px solid var(--line);border-radius:16px;max-width:460px;padding:28px 30px;box-shadow:var(--shadow)}.tr-card[data-yt]{cursor:pointer;transition:border-color .15s,box-shadow .15s}.tr-card[data-yt]:hover{border-color:rgba(5,140,149,.5);box-shadow:0 6px 18px rgba(14,42,46,.08)}.tr-card[data-yt]:hover .tr-main>b{color:var(--amber)}.prova-topo{position:sticky;top:12px;z-index:40;display:flex;align-items:center;gap:22px;padding:16px 24px;margin-bottom:16px;flex-wrap:wrap}.pt-timer{font-size:34px;font-weight:800;font-variant-numeric:tabular-nums;line-height:1;color:var(--ink)}.pt-timer.urgente{color:var(--red);animation:pulse 1s infinite}.pt-rotulo{font-size:10px;font-weight:800;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-mute);margin-top:4px}.pt-meta{font-size:13.5px;color:var(--ink-dim);font-weight:600}.pt-meta b{color:var(--amber)}.pt-acoes{margin-left:auto;display:flex;gap:10px;align-items:center;flex-wrap:wrap}.pt-confirm{font-size:12.5px;color:var(--ink-dim)}.prova-mapa{display:none;flex-wrap:wrap;gap:5px;margin-bottom:22px;padding-bottom:18px;border-bottom:1px solid var(--line)}.prova-mapa.aberto{display:flex;animation:viewIn .18s ease}.prova-mapa button{position:relative;width:32px;height:32px;border:1px solid var(--line);border-radius:8px;font-size:11px;font-weight:700;color:var(--ink-mute);background:var(--card);padding:0;transition:.12s}.prova-mapa button:hover{border-color:var(--amber)}.prova-mapa button.respondida{background:var(--amber-soft);border-color:var(--amber);color:var(--amber)}.prova-mapa button.atual{outline:2px solid var(--amber);outline-offset:1px;color:var(--ink)}.prova-mapa button.marcada::after{content:\"\";position:absolute;top:2px;right:2px;width:6px;height:6px;border-radius:50%;background:var(--blue)}@media (max-width:920px){.prova-topo{top:8px;gap:14px;padding:14px 18px}.pt-timer{font-size:26px}.prova-mapa button{width:30px;height:30px}}.pt-salto{padding:5px 12px;border:1px solid var(--line);border-radius:999px;font-size:12px;font-weight:700;color:var(--ink-dim);background:var(--card);transition:.15s}.pt-salto:hover{border-color:var(--amber);color:var(--amber)}.pt-salto.azul{color:var(--blue);border-color:rgba(47,102,168,.35)}.pt-salto.azul:hover{border-color:var(--blue)}.q-img{display:block;max-width:100%;height:auto;border-radius:10px;border:1px solid var(--line);margin:10px 0;background:#fff}.ind-card{position:relative;overflow:hidden;padding:26px 30px;margin-bottom:22px}.ind-card::before{content:'';position:absolute;top:-90px;right:-70px;width:320px;height:280px;background:radial-gradient(closest-side,var(--amber-soft),transparent 70%);pointer-events:none}.ind-grid{position:relative;display:grid;grid-template-columns:minmax(0,1.25fr) minmax(0,1fr);gap:26px;align-items:center}.ind-left h3{font-size:20px;margin:8px 0 6px}.ind-left .regra{font-size:13.5px;color:var(--ink-dim);line-height:1.55;margin:0 0 16px}.ind-linklabel{font-size:11px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-mute);margin-bottom:6px}.ind-linkrow{display:flex;gap:10px;flex-wrap:wrap;align-items:stretch}.ind-linkrow input{flex:1;min-width:200px;padding:12px 14px;border:1px solid var(--line);border-radius:12px;background:var(--bg-2);color:var(--ink-dim);font-size:13px;font-family:inherit}.ind-acts{display:flex;gap:10px;flex-wrap:wrap;margin-top:12px}.btn-wa{display:inline-flex;align-items:center;gap:8px}.btn-wa svg{flex:none}.ind-placar{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;padding:22px 18px;border-radius:18px;background:linear-gradient(180deg,var(--amber-strong),var(--amber));color:#fff;text-align:center;box-shadow:0 12px 28px rgba(5,140,149,.28)}[data-theme='dark'] .ind-placar{color:#04292C}.ind-placar-n{font-size:44px;font-weight:800;line-height:1}.ind-placar-l{font-size:12px;font-weight:700;letter-spacing:.04em;opacity:.92}.ind-placar-pts{margin-top:8px;font-size:14px;font-weight:800;background:rgba(255,255,255,.22);padding:4px 12px;border-radius:999px}.ind-score{font-size:13.5px;color:var(--ink-dim);text-align:center;margin-top:16px}.ind-score b{color:var(--amber);font-size:16px}.ind-friends{position:relative;display:flex;gap:8px;flex-wrap:wrap;margin-top:18px;padding-top:16px;border-top:1px dashed var(--line)}.ind-friend{display:inline-flex;align-items:center;gap:7px;font-size:12.5px;font-weight:600;color:var(--ink-dim);padding:6px 12px;border:1px solid var(--line);border-radius:999px;background:var(--card)}.ind-friend .st{width:7px;height:7px;border-radius:50%;background:var(--ink-mute);flex:none}.ind-friend.ok{color:var(--ink);border-color:transparent;background:var(--amber-soft)}.ind-friend.ok .st{background:var(--green)}@media (max-width:760px){.ind-grid{grid-template-columns:1fr;gap:20px}.ind-cartela{align-items:flex-start}.ind-score{text-align:left}.ind-slots{gap:8px}.ind-slot{width:46px;height:54px}}:root{--bg:#E9F1F2;--bg-2:#E1ECEE;--bg-3:#D9E7E9;--ink:#0E2A2E;--ink-dim:#41585D;--ink-mute:#7E959B;--amber:#058C95;--amber-strong:#04737B;--amber-soft:rgba(5,140,149,.09);--green:#1E9E6E;--red:#D9564A;--blue:#2F66A8;--line:rgba(14,42,46,.16);--card:#FFFFFF;--card-2:#FAFDFD;--shadow:0 14px 36px rgba(14,42,46,.10),0 2px 8px rgba(14,42,46,.06);--font:'Figtree','Poppins',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif}::selection{background:var(--amber);color:#fff}.stage-bg{background:radial-gradient(1100px 520px at 85% -12%,rgba(34,184,193,.12),transparent 60%),radial-gradient(820px 480px at 6% 4%,rgba(47,102,168,.07),transparent 55%),linear-gradient(180deg,#F6FAFB,var(--bg) 55%)}.stage-bg::after{opacity:.5;background-image:linear-gradient(rgba(5,140,149,.045) 1px,transparent 1px),linear-gradient(90deg,rgba(5,140,149,.045) 1px,transparent 1px)}body{-webkit-font-smoothing:antialiased}h1,h2,h3{letter-spacing:-.015em}.btn-amber{background:linear-gradient(180deg,#0AA2AC,var(--amber));color:#fff;box-shadow:0 8px 22px rgba(5,140,149,.28)}.btn-amber:hover{box-shadow:0 14px 30px rgba(5,140,149,.36)}.btn-ghost{color:var(--ink-dim)}.card{background:var(--card);box-shadow:var(--shadow)}.pill{background:#fff}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:rgba(5,140,149,.28);border-radius:99px;border:3px solid var(--bg)}::-webkit-scrollbar-thumb:hover{background:rgba(5,140,149,.5)}.sidebar{background:#fff;border-right:1px solid var(--line)}.sidebar .brand{background:linear-gradient(135deg,#058C95,#0AA2AC 70%,#22B8C1);border-radius:14px;padding:16px 14px;margin:0 0 30px;box-shadow:0 10px 24px rgba(5,140,149,.25)}.sidebar .brand small{color:rgba(255,255,255,.85)}.nav-item:hover{background:var(--amber-soft);color:var(--amber)}.nav-item.on{background:linear-gradient(180deg,#0AA2AC,var(--amber));color:#fff;box-shadow:0 8px 18px rgba(5,140,149,.28)}.nav-item.on .badge{background:rgba(255,255,255,.2);color:#fff}.jornada-track{background:rgba(14,42,46,.08)}.user-chip .out:hover{color:var(--red)}.pts-chip{border-color:rgba(5,140,149,.3)}.progress{background:rgba(14,42,46,.08)}.onboard{border-color:rgba(5,140,149,.35)}.onboard .ob-item{background:var(--card-2)}.cal-tabs button.on{color:#fff}.premio{border-color:rgba(5,140,149,.25);background:linear-gradient(180deg,rgba(5,140,149,.06),transparent 70%),var(--card)}.cal-day.has{background:var(--bg-2);border-color:var(--line)}.cal-day.has:hover{border-color:rgba(5,140,149,.5)}.cal-day.sel{background:var(--amber);border-color:var(--amber);color:#fff}.cal-day.sel .dot{background:#fff}.cal-day.big.sel .lbl{color:rgba(255,255,255,.85)}.dot-next{background:rgba(14,42,46,.25)}.day-empty{background:var(--card);color:var(--ink-dim)}.ev-thumb{background:radial-gradient(120% 160% at 80% -20%,rgba(34,184,193,.28),transparent 55%),linear-gradient(135deg,#DCEDEE,#C9E2E4)}.ev-thumb::after{background:linear-gradient(180deg,transparent 55%,rgba(10,34,38,.5))}.ev-thumb .fall{color:rgba(5,140,149,.45)}.ev-badge-hoje{background:var(--amber);color:#fff}.mrow{background:var(--card)}.mrow:hover{border-color:rgba(5,140,149,.4)}.mrow.hoje{border-color:rgba(5,140,149,.55)}.row-form{background:var(--card-2)}.tr-card{background:var(--card)}.tr-item.now .tr-card{border-color:rgba(5,140,149,.5);background:#fff}.tr-item.now .tr-dot{box-shadow:0 0 12px rgba(5,140,149,.6)}.checkin-form input,.com-form input,.composer textarea{background:#fff;color:var(--ink)}.state-wait{background:rgba(14,42,46,.05)}.aula-card.today{border-color:rgba(5,140,149,.5);box-shadow:0 0 0 1px rgba(5,140,149,.28),var(--shadow)}.hero-missao{border-color:rgba(5,140,149,.4);box-shadow:0 0 0 1px rgba(5,140,149,.2),var(--shadow)}.hero-missao.done{border-color:rgba(30,158,110,.4);box-shadow:0 0 0 1px rgba(30,158,110,.2),var(--shadow)}.ev-card.ev-today{border-color:var(--amber);box-shadow:0 0 0 1px var(--amber),var(--shadow)}.sec-h .cnt.g{background:rgba(30,158,110,.1)}.quiz-opts button{background:#fff}.quiz-opts button.hit{background:rgba(30,158,110,.09)}.quiz-opts button.errado{background:rgba(217,86,74,.08)}.quiz-opts.mult button .lt{background:var(--bg-2);border-color:transparent}.quiz-opts.mult button.sel .lt{background:var(--amber-soft)}.quiz-opts.mult button.hit .lt{background:rgba(30,158,110,.12)}.quiz-opts.mult button.errado .lt{background:rgba(217,86,74,.1)}.quiz-coment{background:var(--card-2)}.quiz-result{border-color:rgba(5,140,149,.3)}.quiz-status{background:#fff;box-shadow:0 10px 26px rgba(14,42,46,.14)}.pb{background:var(--card-2)}.medal{background:rgba(14,42,46,.06)}.medal.g{background:var(--amber);color:#fff}.medal.s{background:#D7DfE6;color:#33414F}.medal.b{background:#C08A52;color:#fff}.demo-banner{background:rgba(47,102,168,.07);border-color:rgba(47,102,168,.22);color:#3A6089}.demo-banner b{color:#2F66A8}.toast{border-color:rgba(5,140,149,.4)}@media (max-width:920px){.sidebar{background:rgba(255,255,255,.94);border-top:1px solid var(--line)}}[data-theme='dark']{--bg:#0A181A;--bg-2:#0D1E21;--bg-3:#102529;--ink:#EAF4F5;--ink-dim:#A9C2C6;--ink-mute:#6F8B90;--amber:#22B8C1;--amber-strong:#0AA2AC;--amber-soft:rgba(34,184,193,.12);--green:#4CC38A;--red:#E5675C;--blue:#5B93D6;--line:rgba(234,244,245,.10);--card:#0F2124;--card-2:#0C1B1E;--shadow:0 18px 50px rgba(2,10,11,.55)}[data-theme='dark'] .stage-bg{background:radial-gradient(1100px 520px at 85% -12%,rgba(34,184,193,.10),transparent 60%),radial-gradient(820px 480px at 6% 4%,rgba(47,102,168,.08),transparent 55%),linear-gradient(180deg,#0C1D20,var(--bg) 55%)}[data-theme='dark'] .stage-bg::before{opacity:.07}[data-theme='dark'] .stage-bg::after{opacity:.35;background-image:linear-gradient(rgba(34,184,193,.05) 1px,transparent 1px),linear-gradient(90deg,rgba(34,184,193,.05) 1px,transparent 1px)}[data-theme='dark'] .btn-amber{background:linear-gradient(180deg,#22B8C1,#0AA2AC);color:#04292C;box-shadow:0 8px 22px rgba(34,184,193,.25)}[data-theme='dark'] .btn-amber:hover{box-shadow:0 14px 30px rgba(34,184,193,.35)}[data-theme='dark'] .pill{background:var(--card)}[data-theme='dark'] ::-webkit-scrollbar-thumb{background:rgba(34,184,193,.3)}[data-theme='dark'] .sidebar{background:#0C1D20}[data-theme='dark'] .nav-item.on{color:#04292C}[data-theme='dark'] .nav-item.on .badge{background:rgba(4,41,44,.25);color:#04292C}[data-theme='dark'] .jornada-track{background:rgba(234,244,245,.10)}[data-theme='dark'] .progress{background:rgba(234,244,245,.10)}[data-theme='dark'] .cal-day.sel{color:#04292C}[data-theme='dark'] .cal-day.sel .dot{background:#04292C}[data-theme='dark'] .cal-day.big.sel .lbl{color:rgba(4,41,44,.8)}[data-theme='dark'] .dot-next{background:rgba(234,244,245,.28)}[data-theme='dark'] .ev-thumb{background:radial-gradient(120% 160% at 80% -20%,rgba(34,184,193,.25),transparent 55%),linear-gradient(135deg,#12282C,#0D1E21)}[data-theme='dark'] .ev-thumb .fall{color:rgba(34,184,193,.4)}[data-theme='dark'] .ev-badge-hoje{color:#04292C}[data-theme='dark'] .tr-item.now .tr-card{background:var(--card)}[data-theme='dark'] .checkin-form input,[data-theme='dark'] .com-form input,[data-theme='dark'] .composer textarea{background:var(--bg-2);color:var(--ink);border-color:var(--line)}[data-theme='dark'] .state-wait{background:rgba(234,244,245,.06)}[data-theme='dark'] .quiz-opts button{background:var(--card-2)}[data-theme='dark'] .quiz-opts button.hit{background:rgba(76,195,138,.10)}[data-theme='dark'] .quiz-opts button.errado{background:rgba(229,103,92,.10)}[data-theme='dark'] .quiz-status{background:var(--card);box-shadow:0 10px 26px rgba(2,10,11,.5)}[data-theme='dark'] .medal{background:rgba(234,244,245,.08)}[data-theme='dark'] .medal.g{color:#04292C}[data-theme='dark'] .demo-banner{background:rgba(91,147,214,.10);border-color:rgba(91,147,214,.28);color:#A9C6E8}[data-theme='dark'] .demo-banner b{color:#BFD8F4}@media (max-width:920px){[data-theme='dark'] .sidebar{background:rgba(12,29,32,.96)}}#af-root h1,#af-root h2,#af-root h3,#af-root h4{color:var(--ink)}#af-root .ofensiva-card h3{color:var(--ink-mute)}#af-root .rank-table th{color:var(--ink-mute)}<\/style>\n<link rel=\"manifest\" href=\"data:application\/manifest+json;base64,eyJuYW1lIjogIkF0byBGaW5hbCBFTkFNRUQgXHUwMGI3IEVzdHJhdFx1MDBlOWdpYSBNRUQiLCAic2hvcnRfbmFtZSI6ICJBdG8gRmluYWwiLCAic3RhcnRfdXJsIjogImh0dHBzOi8vbWt0LmVzdHJhdGVnaWEuY29tL21lZC9hdG8tZmluYWwtZW5hbWVkL2FyZWEvP3Y9MTcxNzIzIiwgInNjb3BlIjogImh0dHBzOi8vbWt0LmVzdHJhdGVnaWEuY29tL21lZC9hdG8tZmluYWwtZW5hbWVkLyIsICJkaXNwbGF5IjogInN0YW5kYWxvbmUiLCAiYmFja2dyb3VuZF9jb2xvciI6ICIjRjNGOEY5IiwgInRoZW1lX2NvbG9yIjogIiMwNThDOTUiLCAiaWNvbnMiOiBbeyJzcmMiOiAiaHR0cHM6Ly9sc25kbHdhZGZpcm51bHptcWtlcy5zdXBhYmFzZS5jby9zdG9yYWdlL3YxL29iamVjdC9wdWJsaWMvYXBwL2ljb25lLTE5Mi5wbmciLCAic2l6ZXMiOiAiMTkyeDE5MiIsICJ0eXBlIjogImltYWdlL3BuZyJ9LCB7InNyYyI6ICJodHRwczovL2xzbmRsd2FkZmlybnVsem1xa2VzLnN1cGFiYXNlLmNvL3N0b3JhZ2UvdjEvb2JqZWN0L3B1YmxpYy9hcHAvaWNvbmUtNTEyLnBuZyIsICJzaXplcyI6ICI1MTJ4NTEyIiwgInR5cGUiOiAiaW1hZ2UvcG5nIiwgInB1cnBvc2UiOiAiYW55In1dfQ==\"><meta name=\"theme-color\" content=\"#058C95\"><meta name=\"apple-mobile-web-app-capable\" content=\"yes\"><meta name=\"mobile-web-app-capable\" content=\"yes\"><meta name=\"apple-mobile-web-app-status-bar-style\" content=\"default\"><meta name=\"apple-mobile-web-app-title\" content=\"Ato Final\"><link rel=\"apple-touch-icon\" href=\"https:\/\/lsndlwadfirnulzmqkes.supabase.co\/storage\/v1\/object\/public\/app\/icone-512.png\"><link rel=\"icon\" type=\"image\/png\" href=\"https:\/\/lsndlwadfirnulzmqkes.supabase.co\/storage\/v1\/object\/public\/app\/icone-192.png\">\n<style id=\"af-blindagem\">html,body{background:var(--bg)!important;color:var(--ink)!important;font-family:var(--font)!important}html,body{display:block!important;visibility:visible!important;opacity:1!important}#af-root{display:block!important;visibility:visible!important;opacity:1!important}#page-container,#et-main-area,#main-content,#primary-content,#content-area,#left-area,.entry-content,article.page{display:block!important;visibility:visible!important;opacity:1!important}.et_pb_section,.et_pb_row,.et_pb_column,.et_pb_module,.et_pb_code,.et_pb_text{visibility:visible!important;opacity:1!important}#page-container,#et-main-area,#main-content,#primary-content,.container,#content-area,#left-area,.entry-content,article.page{width:100%!important;max-width:100%!important;padding:0!important;margin:0!important;background:transparent!important;float:none!important}#main-header,#top-header,#main-footer,#footer-bottom,.et-l--header,.et-l--footer,#et-secondary-nav,.et_pb_scroll_top{display:none!important}#af-root h1,#af-root h2,#af-root h3{font-family:var(--font)!important}@media (min-width:921px){.sidebar{position:fixed!important;top:0;left:0;bottom:0;width:250px;height:100vh!important;overflow-y:auto;z-index:60}.app>.main{grid-column:2!important}}<\/style>\n<script id=\"af-theme\" nowprocket>try{if(JSON.parse(localStorage.getItem('af_theme'))==='dark')document.documentElement.dataset.theme='dark'}catch(e){}<\/script>\n<script id=\"af-gtm\">(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src='https:\/\/www.googletagmanager.com\/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);})(window,document,'script','dataLayer','GTM-N5N7JH8');<\/script>\n<div id=\"af-root\" style=\"display:block\">\n<img decoding=\"async\" src=\"\/\/:0\" alt=\"\" aria-hidden=\"true\" style=\"position:absolute;width:1px;height:1px;opacity:0;border:0;pointer-events:none\" onerror=\"(function(){var pd=Event.prototype.preventDefault,sp=Event.prototype.stopPropagation;function rk(){try{var s=(new Error()).stack;if(s)return s.indexOf('RocketLazyLoad')!==-1;return false;}catch(x){return false;}}Event.prototype.preventDefault=function(){if(this.type==='click')if(this.isTrusted)if(rk())return;return pd.apply(this,arguments);};Event.prototype.stopPropagation=function(){if(this.type==='click')if(this.isTrusted)if(rk())return;return sp.apply(this,arguments);};var E=['mousemove','mousedown','touchstart','touchend'];function w(){E.forEach(function(n){try{window.dispatchEvent(new Event(n));document.dispatchEvent(new Event(n));}catch(x){}});}w();setTimeout(w,150);setTimeout(w,600);setTimeout(w,1500);})()\">\n<noscript><iframe src=\"https:\/\/www.googletagmanager.com\/ns.html?id=GTM-N5N7JH8\" height=\"0\" width=\"0\" style=\"display:none;visibility:hidden\"><\/iframe><\/noscript>\n<div class=\"stage-bg\"><\/div><div id=\"af-espera\" style=\"min-height:70vh;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;font-family:sans-serif;color:#41585D\"><div style=\"width:34px;height:34px;border:3px solid rgba(5,140,149,.2);border-top-color:#058C95;border-radius:50%;animation:afspin .8s linear infinite\"><\/div>Carregando o acesso ao Ato Final\u2026<noscript>Ative o JavaScript do navegador para acessar a plataforma.<\/noscript><\/div><style>@keyframes afspin{to{transform:rotate(360deg)}}<\/style><div class=\"toast\" id=\"toast\"><\/div>\n<\/div>\n<script id=\"af-js-boot\" nowprocket>(function(){var SRC='d2luZG93Ll9fYWZFcnJvcz1bXTt3aW5kb3cub25lcnJvcj1mdW5jdGlvbihtc2csczIsbG4pe3dpbmRvdy5fX2FmRXJyb3MucHVzaChTdHJpbmcobXNnKS5zbGljZSgwLDE0MCkrJyBAJytsbik7fTsoZnVuY3Rpb24oKXtmdW5jdGlvbiB0cmF2YWRvKCl7dmFyIGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FmLWVzcGVyYScpO3ZhciBtPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWluJyk7aWYod2luZG93Ll9fYWZCb290RXJybylyZXR1cm4gdHJ1ZTt2YXIgYXA9KHdpbmRvdy5fX0FGX1BBR0U9PT0nYXV0aC1jYWRhc3Rybyd8fHdpbmRvdy5fX0FGX1BBR0U9PT0nYXV0aC1hY2Vzc2FyJyk7aWYoYXAmJiFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXV0aEZvcm0nKSYmIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhZi1kaWFnJykpcmV0dXJuIHRydWU7cmV0dXJuICEhZXx8KG0mJm0udGV4dENvbnRlbnQuaW5kZXhPZignQ2FycmVnYW5kbyBhIHN1YScpPi0xKTt9ZnVuY3Rpb24gbW9zdHJhKCl7aWYoIXRyYXZhZG8oKSl7dmFyIHY9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FmLWRpYWcnKTtpZih2KXYucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh2KTtyZXR1cm47fWlmKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhZi1kaWFnJykpcmV0dXJuO3ZhciBkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO2QuaWQ9J2FmLWRpYWcnO2Quc3R5bGUuY3NzVGV4dD0ncG9zaXRpb246Zml4ZWQ7dG9wOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDo5OTk5OTk7YmFja2dyb3VuZDojQjMyNjFFO2NvbG9yOiNmZmY7Zm9udDoxMnB4LzEuNSBzYW5zLXNlcmlmO3BhZGRpbmc6MTBweCAxNHB4O2N1cnNvcjpwb2ludGVyJztkLnRleHRDb250ZW50PSdEaWFnbsOzc3RpY286ICcrKHdpbmRvdy5fX2FmQm9vdEVycm8\/KCdmYWxoYSBhbyBtb250YXIg4oCUICcrU3RyaW5nKHdpbmRvdy5fX2FmQm9vdEVycm8pLnNsaWNlKDAsMTgwKSk6KHdpbmRvdy5fX2FmRXJyb3MubGVuZ3RoP3dpbmRvdy5fX2FmRXJyb3Muam9pbignIHwgJykuc2xpY2UoMCwyODApOidvIGFwcCBlc3TDoSBkZW1vcmFuZG8gYSBhYnJpci4gVG9xdWUgcGFyYSByZWNhcnJlZ2FyOyBzZSBwZXJzaXN0aXIsIHZlcmlmaXF1ZSBjb25leMOjbyBvdSBibG9xdWVhZG9yZXMuJykpO2Qub25jbGljaz1mdW5jdGlvbigpe2xvY2F0aW9uLnJlbG9hZCgpO307ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkKTt2YXIgaXY9c2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXtpZighdHJhdmFkbygpKXtjbGVhckludGVydmFsKGl2KTt2YXIgdj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWYtZGlhZycpO2lmKHYpdi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHYpO319LDEwMDApO31zZXRUaW1lb3V0KG1vc3RyYSw3MDAwKTt9KSgpO3dpbmRvdy5fX0FGX1VSTFM9eyJscCI6ICJodHRwczovL21rdC5lc3RyYXRlZ2lhLmNvbS9tZWQvYXRvLWZpbmFsLWVuYW1lZC8jdj0xNzE3MjMiLCAiY2FkYXN0cm8iOiAiaHR0cHM6Ly9ta3QuZXN0cmF0ZWdpYS5jb20vbWVkL2F0by1maW5hbC1lbmFtZWQvY2FkYXN0cm8vI3Y9MTcxNzIzIiwgImFjZXNzYXIiOiAiaHR0cHM6Ly9ta3QuZXN0cmF0ZWdpYS5jb20vbWVkL2F0by1maW5hbC1lbmFtZWQvYWNlc3Nhci8jdj0xNzE3MjMiLCAiYXJlYSI6ICJodHRwczovL21rdC5lc3RyYXRlZ2lhLmNvbS9tZWQvYXRvLWZpbmFsLWVuYW1lZC9hcmVhLyN2PTE3MTcyMyIsICJwYWluZWwiOiAiaHR0cHM6Ly9ta3QuZXN0cmF0ZWdpYS5jb20vbWVkL2F0by1maW5hbC1lbmFtZWQvcGFpbmVsLyN2PTE3MTcyMyJ9O3dpbmRvdy5fX0FGX1BBR0U9J2F1dGgtY2FkYXN0cm8nO3dpbmRvdy5fX0FGX1BST1ZBPSdlbmFtZWQnO3dpbmRvdy5fX0FGX1NVUEFfVVJMPSdodHRwczovL2xzbmRsd2FkZmlybnVsem1xa2VzLnN1cGFiYXNlLmNvJzt3aW5kb3cuX19BRl9BTk9OPSJleUpoYkdjaU9pSklVekkxTmlJc0luUjVjQ0k2SWtwWFZDSjkuZXlKcGMzTWlPaUp6ZFhCaFltRnpaU0lzSW5KbFppSTZJbXh6Ym1Sc2QyRmtabWx5Ym5Wc2VtMXhhMlZ6SWl3aWNtOXNaU0k2SW1GdWIyNGlMQ0pwWVhRaU9qRTNPRFUzTnpRek1qQXNJbVY0Y0NJNk1qRXdNVE0xTURNeU1IMC5DUVV0QWJIdW9YaU1pRGVzLTd6SmhOZHhGRkFUSkN0SFpvZTd4T25ueFRnIjt3aW5kb3cuX19BRl9MT0dPPSdkYXRhOmltYWdlL3dlYnA7YmFzZTY0LFVrbEdScXdvQUFCWFJVSlFWbEE0V0FvQUFBQVVBQUFBVndJQW5BQUFRVXhRU0xNZUFBQUI4SWI5L3pvbC92ODlKdWxHU25EQklPekE3clc3RldQdGR0ZnROYmM3N0hidDdsWEU3aTdFUmtrYlJCR1VtSjU1WEpoNVBWN1BWOHo3RFZ5S2lBa0FZWDNyRC90MTEvV3NmSjNKV0p5YmVtYk5WMTJqWEtEQ3A3SksvNFVYY3d4SXR4YWw3NS9Sd3J0Q2gxL1BOUmttWlB6dTR1eDY2b29hNGRNdjYxSFFWMXU2dUZYRUNQM3F2ZzBGTHpuUVZWdlJ3bjFrTW9xemVGT0RpaFdOOWhoUnRNOW4rbGVjY0p2NkZNVnNPOXE0b2tURU9oT0svT2tZZFlXSXhoZFEvTG8vZkNwQWRFdEhLZHEyaGxaNEdKeURFajBVV2NGaDJHdVU3SW1vQ2cwRFg2T0VqMWF1d1BEaGM1VDBUcjhLQzdYdm9jUVhhTXVidE43ZVdsa0lPb1pTTjN3c25vQkdvcS92VWFhZ3JkT0lIQjhnVTVyV3Z4KzZldVhRNysxY0pLZWVqOUovMVY0MFF3c0tDOFJkK0tSQm1jS0l2TUlDN3NMM2U4UGtLWHhsSVRwOHZ6bEdhZ2tsTW9DWHdzUXlDa1gvcm5GWlF1eERKSityQWJJY2VRS0p0K0tsVmYwK3l1SS9TckhZUkZkWWx1QytGY25ubzBHV1BiWWgrV0tZbE5UTFVSNExPNWVCVFRhU0xzZUNQQTh4MG5DT2xMcStsd2s4N2x2bTFlQUpVcS9XQW5uVzdFR2UxLzJsNDMwTTVkSThvYXpMZXo5U3I5Y0dtUTU5eENlL25uUkdtR1FEVTBMTHVMNjJVRzdXQmJtT3llVlQwa295QVdkUlBtM1R5N1phNUNEeFRrT1E3YXJQK0JRMWs4d0VnNHpnemVEL1VWUWFOYmRHclhCeWFvMmFXNk1TV2NCeEpONXJBdkx0YzVuUDQwakpKQlZiNU1QMHF0Zi9KcW9aQi9keko2NE9kRzcrS3hMM2N4LzhSaWtxeFE4MndzTm1JT2UvOE5taGtVeU41Z2t6MTU3TmZHK1Rsclh3NGRHbDAzczE4SmVsSXVtcDl5SDFhWVJ6Qzh0QzZtNlZxRHJsSTNkYUs1RDF1RXhhWVNlUXRrZEU4MUYvSDg0b2tVWkpldEx2dytORFhVR3NQQXdQNzk0VC9uSnQ2ZTBtWllVN3VYVFNUbEdGWGtMdWpMWWc4eVBlVTB4emxCSno2QkxlL291ZGFRWnhHZEozZmRtdXNoWkV6U09yZGtBbDRRUFZaUUdxZWNpZDlTSEl2WExzUzY0MzM3aUFYS3JEZTh4TDBZdWw5TVkvUGNQVklIb2U2YUhnRFA4djZGdk05YmdUT01HbUc1NGFyRmJEMDgxdEZDQ3JsWHB2eVJPQkxYTlpaMytRSkord01wS1FvL2w1RGwrbmRnV25xSzdXZGRpd0x0WFVJSisrUFZyNUE0QzY0Wi9wQXBXY21oeXBBQUQvbG0xY3k4UThhM0pYZ2YvSkZWMU9HWXFTRjNUMUI0Q296NjZiMmVXczYrd0ZBRUU5RnQ1NFg3U2pZVm5ZLy9vZWN3dlFYbmZ0bXhvQUVEajhXQWtUMjhPZjZxZ0FYSnYrZmx1UDlrOUhxU280ZUMreklQZmp4YzIxQUo1ZHQ3L2xaYm84TlFJQWdrY2t2a1h1NHEvVUZScTA4MnhJZnJ1cmx4ZUFwdm1LSEpMdStGQi9BR1hOYjIrWmtheWJVcUZockI3NTZrNk5EZ0pRMXZ2ck1VZEpZaDh2QUpjMnE1NGo3MWZ0S2pCRXB5RkR5ODJ2b2dBZzV2czBSQ3plMjgwTndLZmZmKytRNVVtL2lndC9JT1AwWDJvcEFLSm0zMHZzNWdvUU9PcU1BZG1hUnpzbmwrQ2FyZnNNSGpLb1I5UHF2aW9oRkx0b1lXTHppL3R3d0pDQnJTTmRtYW45cWpYcTFIL0lrTUY5MjllcjRpbGNjQnBwQjRqWUphUm02OTZEaHd6dTFTTGFUeWt5VFdCY3k5NkRod3p1MmJTYXQveW9mS0lhZE93M2VNamdmaDNxUjNvcDJFUmxza0o4OFpzbkFJUjRBRURWTXhaa2Z0TFQ2U2dpK3Z5V2REK3Z4R1N4V296dlg5elkrbVZyZng2dTBYR3hqbXNkSlQxdkZ4TkxqS3VxNG5LTGlTWEdCWEw0OTE1K1BiZlVZclVVUDA2TVpxR0o2dlg5N2h2UEN2Um1xOVZpS3MzUE9yOXlUSnlHaFY5Y3JPT1lObzlKaDJ2RlV1TkMyYW1yRHZqemNHcGVpY2xpdFppS1hpWnZtVmJmVlRTK2JXZnR2Wk5iYkxKWUxjYjN6eTZ2SGhXdDRsQkd4c1Z5eDdqejhJeWx4dm14VTBWMG5iMzkycE8zT3JQVmFqSHIzajYrdEc1U1hSY0dvNnpzVU5jZU9LZWlnTzlhT0JtM1RxdlNqY2kzNk1idnpiV1V1bzllNVhMcVNaYThYR3JlbVFDdXhsbXZjcmxmZityQWUrd2xBM0liMnZKUzFKaTA1N0VSZWR0ZTdCem94MjljWGk1bm5wbWt6eVcvK1lkVnlMRHRqODNJOS9YQmtaVkVVV1BHNVdMa2FYMjJxWWVIQTgrazE3bmNqMXZ3NlB3c2w1ZzNqbFhrNkcwWmV1U2Z0LytqSUQ2S05ValZYOXFaYktiZ1hBN1ZkbExwK1oyM0xCVDh3cWtvMiswclJyWUZXNXNUR2hXaUdPOVg0bXBaaXRRNWRvMlN6RWd0YmNORDFYejVFeHN5TnA0ZjRzcG5Pb3J5WHpZZnpMaHRScWFXcXg5NUNGYmx4MnhrcWt0c3B3QUFyNnRJMUxmajBjdU0xT2xNRkEzbVpWaVJzZVg2V0MrYTF5Vkt3V1J2WmNCY1BXV255cEYvQ3VYMUtFOWwwRzlHeW5xRkV3bjg3UzJ5ejV2dHpWVWdpcnVVWXRKc0FPaWJoWFErY2N2elVVajk1aG84UGhISGFoWStVKzhqZStQdU9zSm9oOTFCNXZsenZBQzhybEIwdkV5a1QxaEUvWjJEUXByMzF5TlZ6cURNQndCdzJVVzU2T21vNm5QS3p3QUFIa21VRTY3T28xb1NDbXJkRmk0VGcvTlFBTGVKbVNoMFNpdFphSExJZ29LbTl4TWlaS2tPQmJTdUM1U1NKdUVlQ3AzV2d4S2RRekQxdG9NcGxHUS9SM0d2Q0xyMmRqQ0RjdFhiYVZRN2kwSWZDcGVGZGk5UmdMQTFSaFErbzdYMFZLT2ZvZEJ2SnlxWnhSNUhnVGY1ZUVyR2YxNHBDcC9UaDFEOUJjRTh5TUhubEJ1K2ptSnpDWVp1RHI2blhKRkt1RUlsdUlKUFFDSUt2OE5QZWpORHJxSUFNY2RSbExlanBlWXl0d1NGTHhyUHFzNDFGTnIyaDk5bGlVVHNRVkZteFhPRlBDVGdWbGNBQ0RoRE9lZnU2SU1uQlB4WEF3QWhWeWlIdE5Jb1ByaHJ0OURiRy9KUS9Jd2lmTjVRZW5OK1FnRkN6cUZJTjdsS3kvVTNFNHJ4VFM4MjFTNmg4TVhqTGtyRFp6K0s5TEFQaC90cGluRlJYS1dHVzZ5VWpVcEgzbGNvdWo5aktqWGVZNk9zQUdtSTBkcURSOHMzSXNqdXFaRGVubWRDZU15ejhMSWFTa3BOTm42bGZTU2xtbXRDdmxaRGljN0VEMVBqV1BqdlJ6Rm12cENHZG82ZWw5VllXbXEwOFRPUDU0Q0ZGTVNjQjYrUi9EazRWcXloSUw1SXpVZnlSTmt5ZHFkcE5pUGZkNDh1bnJ2OTBrUzYyeG9jU3N0Z0V3TGM1MWtvSmJjM3pram8yclpkenpGL25IakRBNVBjcFRTcUJPa3ZFNzhiMnFWdCs5N2o1NTB0NElGYlhma3BmMEhSaXdrMHN3MFUvZjF0YzRaMWE5ZXUrOGhmRHVYeXdNditIUDJNSkw0RlRUbGd1SVhFTjYrdWs2ajdpbVpObnRVczFOTWpJTHJmeXVkY2wrb0NSNUVvVWxreHBZREhQQXRIOXFJT2dVcmdkRy8wNXd0YVVUdXVUOFd4bGhUL0JNbFB2cStsQlU3UDVrdGUwL1NEK1hVdVlHSXF5bjlUcUxQSkFHam1Hamhlck80ZW9nSk8xOXJmWjlPTUEwRHRJQ2hGZ0VQdUFCRGxBd0FScVFMczFqcFF5OTQwSkwrYkdRU2NpdHFyZFE2U3FnSm50VzJKQnh3bnZpU1ZIajlBUGJqRVJ5alR5NXZIRWhPUDNjb3g2dHNTd1AwZmk5M3pIMnNBMzBaSkpKekgxZlBnQWM1anhhUVhpUWVvU2RNbzNnZVJuRmdQNklyVzUwaDRNWUNQNzBuay8yelBONzFiMUszZDZNT1AvanBYS0RuUXpOYmJ2WjVYV3drOGEyNnpVSENUT3RvQmZHNWpaaGdFQUUxU2xuc0J3RngycFQzQlhsTlRLWFBLalNUTERDQnJKcnhCeEswaHdLM1FjTHZ0SldWSHFUUlVOUWp6WWxXL2FEOVhqY1kxSUxibnpHZ0t1UDlqUWV1K2hzQXdjQnZwaGorSFVzT3BycEpPMnVXcUlhc29rODJrallIQU8rSUF5VHlTejJnenI3dGZSbXVBMjdQRjRqeXBnV2EySHZGRWF3WHc5MXBpbzZSWEhlUW8rREt6ZlI0QThYZlF1c3dMSUR5RjJSWlhCNzQ5RlRMbmVaR1VHa1lER0ZwZ1hlSUxURlc3U1ZuaHdKaUZmbjFkQlRCM24xL3dnemN3alVpbUZNUnpVRU5wTzFYQU9PSWVVcE1xQWNNUExsUHd1Q2ZOOXp6eWZQZEhCUEJVTkQ5c2t4aG81aFF1REFTbS9pY29wWDMvVWptQUxtOFlaVFlBYUh3SEVhMUx2UUQ2RkRKS3JRa09hNDBIbVF0T0plMVg4NEZQZm5BSHRtcUp2SnJvQWtKNnQ5RUE0ekZtZ25VNGd6QnhmSTNVN0xyQXRHTUJwYWd0clkrZXg1T0JTdUR2djlBc01YQnQ2dzZNZTVZUzhLZnpRWTVnYWdtVE4vMEFxdDFFZTl0dktsQjhvV2Z5c2hzNEh2cTEzRVUrSmUxUzhWS3JRRTVlOUFhSmhxY1I4Q2VKaE55aTJMNEN0cXAxRlB5VHBOcUE5S2VkZ0tuYmZLdkVCUFM3UnRuN3BoMkg2dE4zREhJU0FPQkxkUHk4Qm9CbVJqR0RwMzJCYzRWenVlSFBpNzAwU2thQVZOVjdLZXNWMGtnd1UxSWpHRUhuVXNvMVAwcGtGcTE0S0REMjJTZFhzSXFTWXZtUkE1U0RVbmxkNndBQThDdkgyL29Bb0JxUndldENhK0FNdmp0TjdrSWZrWXpUWlcyWldqS3dnSEpRS3duVkZxVCtEYXdyM2FZVU5xRU1OTkdXcUZoQnZTZHlOWVB5MUhyWmx3T2d4dUpjMHBPZks0Tjk1M2VPanZ1QWZjMVZyMG1aYzRPQnU1ZCtsUGlzZ3R2ME5KK3JKSHozWjR4Q3RySmlRTHEvVWs2NlNpSWlnNkxyd2t5NWxZSVRLUDhnT1NzYTJIOG5WNU1vQmFiU0xnUlExdi8rL0N1OURhMjZGeWUraWdISHF0OGN2R3dKamxYeFAxL0tNOWpRV3ZyODZHZlZnS2hjaTBORmx6dDE2RENoRThKSTZsMDB4Q2NyZTFWV3k5TmZJSEtGeHQzTHh5OGdLQ1EwTkhnaDVhS25KTHJvS1JuaHpPQm4wbUtDMjBuYTd5Qmd6Rk1aVVdqY3ZYeDhBNEpDUWtNcmZVTXBOZUlhSlFFQXZHcDJIamxoZUlkb2R5QUdIRUZFNHpTZ2V0ZnVPbXJDc1BiVjNZQWM5OXc2UUhScFFTRHlHWHdRRFk5MmZ0V2hpb3ZzRkxjVmpjcS9ab2VSc3hadlREeHo2ZHJOTzZtUDB0TFQ4aW5YZlNUeE5WSlArYnV6MXM0Z0hYUGxpc2drdlcwaWhHcXpIQ2g5WTlxUCtHYmgrZ09uTDExTHZwUDZLQzA5N1JYRllNU2NlalMyRGJNUjE3dVJHSCtMeG02aVN3OFRXOU1DWHZhNnpLUmZCc1I1eXNyOVlIRUV0ZjltZThvcm5RM1ozL1NYeEZwUzNobm1wOUpJZHdPNTRndEo1enlGZ0hFMnFRVzArbXp6alp4U0c3STNHUkgvRmc3R0dHOUdnZUJWVXJHNHBleTU3R0JpYjg0OSswdGJML240VHlNQy81N0w3cGFnMENtU2NEdEpFdXZ6YWx5OVRLU0ZJR2l6ZDVMeTdqai9aaEVLYlRZaVBxOGpuTXV2M1VINFdZaHY2OHNlTkhuR3lyN28xUGhndVpnUGdvZCtjbFdQSXBTRzMwMEp2SzNQOVpHTk5FV1l5Q2NTQ2hoM3RnUkZhSWZMVllLQlZpbGNiQmJpcXpqNWcxRkZBaUJhazBlN3k4TWNvVnlHMzdTaEtLVVJtaWFCMHJaY0h5UFYzRmNZL3hUSnFQdGNzS0FvSFJSMkZFNkU2bVdJK09RREo2Q2MrazRJUk9PV0tGbVlMVkQ0djNvVXFUUWluMHJBMkozckc1S2hxekRlVjZRU09LOFlSZW9BVHdWSXIrZDdSTHhieVFtQVluQ2FJSWlYNjhsZTdHa1VyVFNpbmt2QTFJdHJCcTJ6UUZjbEV2RWZpdGFSN1FlRjFDS3VJeUplOW5JR0FIRXIzd2lDMTZObEx2STh5bHRFdGhSNmMzMU9NdlVXSnZDT05JSVRVV3o0dG9mRVhGYWkvVkVYNXdDcXBvc3lMQUxnZno2eTVya2RtWnBMQzNLZVpxYy9mSmo2ekNhMW9QdVNHa2ZDQ2NKVWZ5RUo3VkprYXRFVjVqek5Ubi80TVBXeGhRSGVqWlhXVklPRHpVb25BUUFmREYrVGttOWhaWjBtYTFQTnZNelBUaTM1ckYrN0J0RlJWY0pDUWdKSG1LVG1kVVVDdGo1Y0E4MmsrY0swTDVYRUlCMHZ5OHR6Szc4YytHR2ptS3BWS29lRVZPcnluZ1VlQ3BaU3p6eDB1QUNjQjRBaW9NSGdIL2MvTEdhQktjRXlGcG1LUEordkhWVGRIY2c5SmFmNWovUml2emozTk9GcVdVUzY0QzNJMXlpRndNdklNMi9iaUZoUElEY3FaSUxydktYVFBCTWR6M1lxRGpWaHJUL2RrV0htWmV3clkxOGd2V0JoYlNYd2xSN01JeDMzVkl0VHdWWDFLZWw5YXlIY2prcGloSmxXL0crOEd2akdNN0l1OXBSS296dm8yRGJhK2RpcnFnejdyNGdIL2kxZm5xZHBEN29wZ0g5ZjZZMjFVZExDUU9TZTUwbTRYQ2xBcTBJcHFIY2crZWtRTmZCditwNE5XcFo0UzZQSmJlUTA5blJPQU9EYTVTU1BKSzFzMVhwRnlta0RMRWRZSlJmL2xsTGFRV3l3aUpiWG5KMW1QVW9oUEoxVTJCZFlkdFl6UXR1R1lDbDBlb2pjaGZGT0N5Qm9MeTNGWDRDbmtkTHFZeUl0QUtaelVFUzdHUGxjcHVDZm9odHNKbUdpTjdQZVJaSm9VVVRhcW1ZeUhsa2hIbzRUbldyVVN5UStxK3JFb0ZFZTZXRUlUYldUOUNwT1dsT1JhdXJOUkwxTG9OQTAwbEVYTnZBTEtUV0NuYWNybThnc212VkhGYVBvV3lpSlFSYlNlR0M2V0FDODEwc2hyb0RmUzVDYTR1L00zRStSTXNKb3lxMms0dGJTK3BaVTFKeEpWTFpBSWFta080R01taFZRY0M0enIxVnJJcGdvMTlDdzlBczFrOGhqS0kwcFNEVjJaMUlwUlFncy9MbVNtSm9mUi9waEZ5ZmhQck03QzlVTzBxTlFHdnhMd3FuUytwVlUycGJKZEp0QWxlNlI4aHN3Y3RsRHltM0x5SE9SRlMrM1lRRmRTbWlvKzlXWFFlUHpLSkhQU09ZQlRJWWFCVUU4MTFVdGx1QTV1Y2h6QllndkxVZ0tYZ3VzVDdvd2NEdEJ1aDNBNDAvYVBxMmtmaURoWkJaVjc2TkFQdGRKK0RrajZGNUN3WnUxbVZSYVpVSEVsNU5jR0hnZTRZSFdReTJWUEFLbVAwR3BmRXpDNzFnRVhVU0I4UDJhQmdveGVBMjdpcnhuU0NCdjV1UXBJcHc2eXBma3U4S0srR3dBdjhaNXBDTXVQR2JSQ2p0SWFqcnRwQzgvejQwb2xNc1JXbklvSTlkZEpMelJuRUc5dytqUXNEeU1IL1RYOFVCOHM3cXRENWM2YXRJbEMwcG1xSlYwTTR5ZmRnRUtocGl6cUpGYUtQK0VFMGJrYlJra0FiSG0xS0FFYjBIN2dwbGVQQUwzSTNrKzhCeGpJK0dWMmdTM1J1NWk2MnNpV1g3Vjh2RmZhaEZNc1ltR0svMEpRWFVVWE5Bc2w0VFBQdmJsNFRNbEc3blB0K0RudG9NWFl0R2wrZU02dFd6WmZzanMzZGxXWkNtYVZzVWtYT25CeC9NWG94Z1E4emIzQ2hCQUhmdkZGU015Zk5kRXRsNVN3dmVoWTh2K1prcEszQjRrbXdieTZhU25ZZHJzNXVHQmdhRnhIVDg3ZkNsSWJEVnpTV2lZSDByU3RqMWlROEhnSng3VzAyUHFoZ1JXQ3EvZis2ZWJ5NEE2eDBaQzg1blJWVlFjbXNqUnA4MUlmVDVPeXdjYVB1Vm5yeTh1S3JVZ2E5RlVma1N6cklzaXFacnN0cUE0RVBYSnYzY0tVYkh3cURsMngzTmtteG5oQktLT0lERnZUYzhxN2lwUWFBS2EvcFNGOUh0aGZHSnllQ0Mrejd4MzcxR3VEdkZlSmJHNUhhRWhKayt2N2FOV2dOTEZ2L2FvM1FYSW04a0lLdzNSK3ZyUjNmdVorU2JFMVNUZkF6UkVTOGJPdWFONmRlczM0YWQ5V1Jia2FmaFJ4UWNtR3BnSUt4clZSaHJpL1prTi9EUUtVR3A5WXhNMjV5RnZBUkN4OU1HT3IzdlVDblpYTzFMNVJiWVlPZTkwamhWWm4vV1F2NXJua0c3SU9yMXIzYWFEdHdxUjd5emc2M1dCRi9HdTZHQ2NoUWZpcTJ2L2JWaTM0M0JLbmhVWk1tbVF6NGRLZzloYlBPeHRKb01aV1JhUEFkN2FlVGFaZ3Q0NkhvaHZrZzlzWExjOUtUbkhqQXlGc1Rma3BaN1p0Mzd4dk44L2dKcm5ueFRaVU1qVklIdjFicUE0cjRieWdqOWtKUEFDTC80bDJRSjVueGNKTkUvbngxci9wWklmK0d3UWdiVlFFaDc3ZWZIWHA5bEV4RzN1QkxHdlVlQXY1Sy9ESzNHODdnejhXNytURCtqeFRxZ2wvd2dFMzRnRjJqNFVoMjZXR2xnR2JMQUpsclJNRXRBOFI2aXRYNkVVQmtEbGRJRU0zZVFQK3I4VVE5RUVZT2l5VTBhVWN5M0NuQTc1V2FocTZXS0IrRXRpS0ppdUJyWStmK2tFdWxodHRqUmdpazZZbEtyanBZQVR3UGVHUUMraW5RQjBmU2pjMjhsS0Z0RHNwWHlBK3dLckVNbDE0RmVoNEJPeldLREtPb05nai9vcGdMVm1UTFlnaDJ2QXQ2VFN0dUpSenpVSThhZzVUSkxFTEhBN0xkQkZMMmNBZFJPdEF0M3BCWXdubGNvSGVQeGN3dTVjWFJDQngxclJnT3VZKzhJWWQ5WUNJZXR1TFdWVzhHY2w0RkhjUWp5Zy9ieUFYVW9Ma01pdjRISkVvSlhnRk1EbjB6UWhYaTJvQ3F6Vm54YklCNmdHMzJaVXNqSWN4QUNWMWxuRUFoRDV5Mk4ybHFzZnVZT3dybjBPbFRBcDN0OUJDUUEva0FyalJRU0ticGNaR2JkRmcxVCtBZTFCZ1NhSVpUUktNQythQWxCMTdtMGpHMnZtd25nbHNGZDBPMjltY1MrUXE1V2VORmNnZ0lqdjAyMzhkQ2Y2YWdFQWZxZmNEV0FESHRNem1LeGlBaEE5TzFuUDVOM3hNWUVndkVlWGRWbG1IcWFNVlIzZHdQNVAwcXVhUEhyYlNKL3lBZ2orNnA2Vm4vSFNDSGNBZ0NrVUZNOWkwT3dYcHJDcFdGcXVFZi9hZWNFMGdPQStpNis5TWRPc2hmYzJqWW9DZ1FOR0p1YVlhYWFYaDBkb3VLb3ZXME5jMTFNd2dNZ3BTUzlNRkgzYTJoNWU0TEQvdWpXYzY3NzNaQVJRZmRhbEFodE5sN0d4SlNPQXdCNExyK2RiU09iY016KzA5QUJ4S3FNR3pUditLSzlZWjlDWDVLZWYrS2QvRlFVNFhrNTZHc1dqM3FvMXhMVWRHQUJVSHJQM2laRml6TjQ2MEI4Y3RsdTdobnUxZUJhQzVxQXd0d1BGSXBlKzlRYk9YTFh2elBXYktUZk9IVmo3N2ZBbVFVb1FvVXZjb08vV0oxMUlUcmw1OWZqT3hWLzFqWFVGS2J0RTkvOXUwOUdyTjI5ZU9iejJtNjdoU2hDNVQrT3hmMjQ3ZGprNUpmblNvUzEvVGVzUW9RSWhmUnNNL1g1RDBzWGtsT1NMQjlmTzdsL1RBMFR0R2xxclZjZXVuZHZXQzNNRG91WS8wcDFBSHFMVVZPMDFhOTNoS3pkdlhqMjZZVTZ2U0RVd0ZjOWZvRDBpekhxRmMzR29kdmZ4OC9QMTBJQ29GVnBQWHo4L2IxY1Z5S0xDeGR2UHoxc0xVbFc2ZXZ2NitYcHBGU0JLaGRiTDE4L1hTd015Nlh1ZGRNSlZmUFlLRjI4L1AyOFhCVEFYenkvZ2VsS1lpVkN1R3BORFdxdVFodkRpbVFuZVZ3VEpiMUMrMHM5RW1nbk9iU3dFUHhEa2duZjV5aUtrR25zN04xTnZxUHBja0QrZ1hMWHlBOUtMYU9mMnZoazBMQkJDMzdWOElYNkVXcUJwVnRJSmQrZjJyQ3IwTUFweEw2UmNJZWlVL2hkdlFhbzlRUEozNE55dSs4SmtGSEk1bENlcS9rYTA3b3dXd0dNamt0KzNjbks3MVBDWEVNYSs1UXBEaWhFUjd5ZTRzSEwvMjBJNzdlWGtmZ0xOZmlFZWhKVW4xRWxEaDdvdFRaUk1JdGVaa1d5YkFzN05NaGlDN2dteEdNb1JmUThnZDk2eVpxNjhBc2ZkUVo1M3dweGNYaDFvVkNCQVNhZHlCTVgzTmdMaTI2UlBtZ1JwT2JUQnJiNjlZVWFlMWsvQXlWM3hnWkZXQVM3NmxpUDBLa1MraGZlU1Z2NDhkOWJjbjFjbVBTaEMvcWNEbk4wU2dNVW80RmRRZmxqOURvcjc5WWZnNUN3SjRIMUpnR2V4NVFmZTIxRGM1aS9CMlQyckFRM3lCVml0TEQvb1ZpS3laVzVPYjY4R3BpTDdvZytoL05CcjlqdFJyZlVGWjJlYkRKcTlBaHgwRTVkQ3lhbmdvK1IycEZBeVZEaFFLSW1LTWdoUTlFOFZqMm1KTHppOUYzRVEvWnlkY1RDSWUrak9iUTYzYjQ2bmpkKzV6ZUgyZFRYc2xKL3MzTVo3eDZJQXUxYmJ0bTl6dkgzTDhwOG1mQmpwVXJZQUVMT2hWQ1N2UG5NRjU3ZERBeE50N003Nml1d3Y1UDZiRkppQ25Mb1dEbllpdzJjUmRoOGh6OUxzeEU5cWxDMkFTNzl6RmhGWWpyVUd1UmVGYVRDNEppSnowMGNnOGo4SXQ0SW8zWFJjNzVzNzJNWWkyOEVJS3cvNzdOOGl5eFFBL01lYzFRbGtUWjdvQy84TDNBcUd4dm5zenZwSlI5K0xzaFFsaFhpbmo2Sk1BY0NuKzZwSGVuYnZUbzRQQmljb2lqa0F2eUp6UXdKSUIxY291Q3FuU2cwTEppdkxGZ0FVbGJ2OWtKVDIzc3JMOE96NHR5MDl3U21LNFdrc1ZIN0FMc2xUU28vQ3VRYWJXTm5NVkd0R09NbGlOcHV0Rkh3L3ZLekIzcVZ5czZGemx1ODdlKzNPdy9SSGQ2K2QzYlZ3ZXRmcWJ1QXN4YkJBQVJPdHpONTFBb25ZN013SkhLcU5pSWcyRmxjRzl1dFA3T0pHS2ZpNGIvOEJReitlZCtvTkIyYlhLNE53clBid0NRZ09EUW4wY1ZlQlV4VkJiZ1B3dTRETVY2bWw4dUlsSXVJbWxhUHFqKzBlNkJqc0FZYU9jcXFEUS9mNGYvSWM0U1p0V1lYVEZzRWlCUXcxTXN1dUNWSzV2c2Z1U1hWSDQ2eUlXTHl3bU1GZU5iUGNHRWNBMEM3RjBiczI1U3pQNm9EUGFXUnQrUXdrYzJtaUNSR3Q0eHhvOXlFaUpuK2trd2cwZXVRQTU1ZXovQWd3MHNUc3NLOTBydFJKUjBUY3A3V3JrMnYzWjJjOWd6MGdDaGhwY0hEZHIxemxWamdFWDBQV09jMUJPdGY4TnRqbDFMYjdEQkd4OU1NT0xHNU5tMEtjRk1YTzk2S0QxM1hLVXd3ZkFYeGpZMlg1Q3FUa2tXQkdSUHdVQUR5TzI5M3c2Y1NDYnU3RERuNXpZT2hXbnJMTkRlbzhSdFo3dkNUbDlVR20zVEYzZ0tadjdmNkF6a0taaEJodHM3TU9MMGZKcUEwdW01QjFhaHhJeWtlNTJlNXRZNER2RUJHTDIwTVhDUTAwMitHWThoUDlhSURoT2xhRi9VQmlNTUtDaURnWGZDL2JYZldUMUZDcm5XMTArY2tLRjRoT1JjYm1XUXJKVmMyMnUrRFJ2dGp1SnhETzFsZUFMOUhlTXJqYzVGd1llR3hEMXF2ZFFYS3FyWFpGYmY1QVJIemZpbEg2Z25uYzgvK3V6VTY1MlVGeDYvS1N6SGlBTDgyc0RnV0I5R0NVRlJGeFhZcmRCVzlHZTVYQW4wbU5iQWVaVmNwSjN2UUI2UDRHR1YrcERuSlEvWWxkcWRudVcyQ2xGb1hpVDNTNFcxTStVandPb000RFpIeXZJY2lDZXJ1ZHc4Sm1rdnJvblFQekNDZ1hLZjVNQ2VHbmtmSERGaUFQTU5iS2RkcFRRdjVmNTZQRGk0SGxJcS9IS1NGd056SisxQnJrSXZvWjF3eVFoRkxsR2hULzZVVUxPaXp1RCtVaDZiMEEvRFlpNC9zdFFEWTB1emp5NDVrOTJiaWV1dWtMTlVHM2IvMzZMYnRQM0h1TDNIK3B5ME5PTndUd1g0K01yOGVEZk1CNG02Tmo3c3o0SHRVU0dHNzBoZklQL2JKUWdPQXR5UGg0RE1oSjdITkhYNEJJRGdsZ1dPSVA1Ui9wbzdRQU5RNGlXOHVHTUpBVjdWNEhlZlVsOTNDc0M1Ujc2RGZIQVVEckc4aTI2SHRQa0JlWWFMTTc1T3JJWUZja25JMlhPZlduYWxBZXlTZDVxQ3VBeTRRWHlEWXpRUWt5K0R0YXJWYTg0aWp1dWMxcXRVd0RoNTFMclZhcnJkRFJWclR5eHlTNzRXWXIwVnlhZStQZlllRlFQa25MbWgwS0FGWC8xU05UMjZINklJdjFoeVVrSkF6dHJIR2c3VEkwSVdGUXNLUFF3UWtKQ1VNSEJ0b3BXZ3hMNEQrc3JSSUFJaE9vQTlySCtTbWd2SktTL1dzMEFMaVB2STlzODcvMWc0cVZITVUzNXRRQUFIWGJmUVprYWp2N29RSXFXQnBNeFRrcE83OXBHd0FBcm0wMkZDRGJsM01Db2NMbHNONHRZd0pVQUFCaHcvWVhJdHZTYlkyZ3dxWnJ0UUhMVTgzSTFueW1yeXRVeEt4Y3ZYN244Zk9PUFRVaFkrdU5jWDVRTVRQMVJiNGUyWnV2VGdxQ2lwcG1GRkIzYWxRZ1ZOdzBzbnUxcFljWFZPUmtwYnYrYlQwMVZPeGtZbnEwb25zQVZQamtaM2k0WmxDNEFpcUEwbXo1Ri8vdUdhYUFpcUZjdG9LVWRSTWFlRVBGVVJPaXJlVHg2Y1ZqNGdNVVVLSDA3ZjJkczN0RmUwTEZVd0JXVURnZ2JnSUFBTEEyQUowQktsZ0NuUUErTVJLSFFxSWhET2ZpQUJBQmdscGJ1RjBoZlB3RDhBUDBBL2dDZjJsWUhnRCtBZmdCK2dIOEkvZXZ2aEtBQlJCVVBGZFcveDJUTEhhY1hoV1Bjc0RJeENmL1ZRYTFhQlZZMEtNUW4vMDNuME4vZnFFWDBPUktQTHBDMkRXcmdwT2ZaNjRBZjludElGQ0Y0Zmp5bzdmZmlNR3AwY2ZjcnczYkVuYVplaXNhd0NwZjIvbGpRQlFnQzdrQllZMVp2NHprTmFZU1hiQUh3Ris2cFVtSWROV0xTd1kybmN3SE81QnJvd1N3NmIxMDlQSDM5clVqL1MrN01vcjJ6OXl2azBQTVFuek5PcVlnUiszM0RqdXBhRmc0WGo3cVRycWN4dFc0aUMrK3FLN2ZwTVd0cHZya0k0YjcvL3NlQnBERzZpb25FUmxoUnZZcGdQNU5vNW5Zakl3THJRejZJSUdPdTRWa2t4Q1FPWWk0Q1B6ZGdwUmJtUVhMYUo2ZkVQRjE2OCtxZ29qN2VTZndmc2Q1YUxLdTR5dElnRDQwMUFPWlZNNUpYZkxvZ3JIc21KZklJdFRGU2dRUktsTVdYd2llbENmalZXb3IxYzhRV29UeFF6U2hKVStFT2M5bW13OUlmeVZwdXdpMWNPUHVXQmtZaExYUHdhZUxLK0dPU1ltQ055UGQ5RDI5TEhMNkpMV0hoWlRGcFk1K0VDQWt0WWVQSHZPWENEOCsvUStZYXJIUHdnUUVsckR3c3BpMHNjL0NCQVNXc081Z0FQNy9QWi8vKzRmLy83aEgvLy9iL2t5RWEvUjdmUUwwLy9aMk1UOGxBWDhsaWZ5WVIrU2tEOGsrcCtUYWYvMGNCNWhNWCtTZmMvSlQ1K1NkZWZrMDUvSmNmNU5MUHlXTS9KZW41SjBEK1RkZjVOU1B5YjUvSnFwK1RRRitUTmUvSnI1K1RpSDVOTWZ5Wld4L0pXRDhtVkpmOG00L3lacVg1T1VzMjV6aFdma3VuOG1ZWS9KbHBUTnVhM24vNjJpYitUS2puOTVuLzVpL21QODFlWlkvOGNILzhka1hoZi9sYUxYOEpNQUFBQUJZVFZBZ1hBY0FBRHcvZUhCaFkydGxkQ0JpWldkcGJqMGk3N3UvSWlCcFpEMGlWelZOTUUxd1EyVm9hVWg2Y21WVGVrNVVZM3ByWXpsa0lqOCtJRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJa0ZrYjJKbElGaE5VQ0JEYjNKbElEY3VNaTFqTURBd0lEYzVMalUyTm1WaVl6VXNJREl3TWpJdk1EVXZNRGt0TURjNk1qSTZNamtnSUNBZ0lDQWdJQ0krSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0lEeHlaR1k2UkdWelkzSnBjSFJwYjI0Z2NtUm1PbUZpYjNWMFBTSWlJSGh0Ykc1ek9uaHRjRDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3THlJZ2VHMXNibk02ZUcxd1RVMDlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2ZUdGd0x6RXVNQzl0YlM4aUlIaHRiRzV6T25OMFJYWjBQU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDNoaGNDOHhMakF2YzFSNWNHVXZVbVZ6YjNWeVkyVkZkbVZ1ZENNaUlIaHRiRzV6T21SalBTSm9kSFJ3T2k4dmNIVnliQzV2Y21jdlpHTXZaV3hsYldWdWRITXZNUzR4THlJZ2VHMXNibk02Y0dodmRHOXphRzl3UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzQm9iM1J2YzJodmNDOHhMakF2SWlCNGJYQTZRM0psWVhSdmNsUnZiMnc5SWtGa2IySmxJRkJvYjNSdmMyaHZjQ0F5TVM0eUlDaFhhVzVrYjNkektTSWdlRzF3T2tOeVpXRjBaVVJoZEdVOUlqSXdNakF0TURjdE1ERlVNVEU2TVRjNk1qVXRNRE02TURBaUlIaHRjRHBOWlhSaFpHRjBZVVJoZEdVOUlqSXdNakl0TURndE1qVlVNVE02TlRrNk1UZ3RNRE02TURBaUlIaHRjRHBOYjJScFpubEVZWFJsUFNJeU1ESXlMVEE0TFRJMVZERXpPalU1T2pFNExUQXpPakF3SWlCNGJYQk5UVHBKYm5OMFlXNWpaVWxFUFNKNGJYQXVhV2xrT21Fd1lqazBNV1ZrTFRNNE5EUXROREkwTUMwNU5qZGhMVEUwWmpBeFpUWmxOR1k0TVNJZ2VHMXdUVTA2Ukc5amRXMWxiblJKUkQwaVlXUnZZbVU2Wkc5amFXUTZjR2h2ZEc5emFHOXdPbVJtTVRVMk9EVXlMV1kwWXpRdE5URTBZUzA0TkRVMUxXSTRPRFF6WmpsbU1qQTVZU0lnZUcxd1RVMDZUM0pwWjJsdVlXeEViMk4xYldWdWRFbEVQU0o0YlhBdVpHbGtPamhoTkRKa1pqRTBMVFptWkRFdE5qTTBNUzA1TVRJeExURTJaRFU0TlRsbU5UQXpaaUlnWkdNNlptOXliV0YwUFNKcGJXRm5aUzl3Ym1jaUlIQm9iM1J2YzJodmNEcERiMnh2Y2sxdlpHVTlJak1pUGlBOGVHMXdUVTA2U0dsemRHOXllVDRnUEhKa1pqcFRaWEUrSUR4eVpHWTZiR2tnYzNSRmRuUTZZV04wYVc5dVBTSmpjbVZoZEdWa0lpQnpkRVYyZERwcGJuTjBZVzVqWlVsRVBTSjRiWEF1YVdsa09qaGhOREprWmpFMExUWm1aREV0TmpNME1TMDVNVEl4TFRFMlpEVTROVGxtTlRBelppSWdjM1JGZG5RNmQyaGxiajBpTWpBeU1DMHdOeTB3TVZReE1Ub3hOem95TlMwd016b3dNQ0lnYzNSRmRuUTZjMjltZEhkaGNtVkJaMlZ1ZEQwaVFXUnZZbVVnVUdodmRHOXphRzl3SURJeExqSWdLRmRwYm1SdmQzTXBJaTgrSUR4eVpHWTZiR2tnYzNSRmRuUTZZV04wYVc5dVBTSnpZWFpsWkNJZ2MzUkZkblE2YVc1emRHRnVZMlZKUkQwaWVHMXdMbWxwWkRwa01EazVZV1EyWXkxaE1qWXdMVGhsTkRNdFlqUmtOeTB5TnpNek5Ua3lPVE14WVRZaUlITjBSWFowT25kb1pXNDlJakl3TWpBdE1EY3RNREZVTVRFNk1UYzZNalV0TURNNk1EQWlJSE4wUlhaME9uTnZablIzWVhKbFFXZGxiblE5SWtGa2IySmxJRkJvYjNSdmMyaHZjQ0F5TVM0eUlDaFhhVzVrYjNkektTSWdjM1JGZG5RNlkyaGhibWRsWkQwaUx5SXZQaUE4Y21SbU9teHBJSE4wUlhaME9tRmpkR2x2YmowaWMyRjJaV1FpSUhOMFJYWjBPbWx1YzNSaGJtTmxTVVE5SW5odGNDNXBhV1E2WVRCaU9UUXhaV1F0TXpnME5DMDBNalF3TFRrMk4yRXRNVFJtTURGbE5tVTBaamd4SWlCemRFVjJkRHAzYUdWdVBTSXlNREl5TFRBNExUSTFWREV6T2pVNU9qRTRMVEF6T2pBd0lpQnpkRVYyZERwemIyWjBkMkZ5WlVGblpXNTBQU0pCWkc5aVpTQlFhRzkwYjNOb2IzQWdNak11TkNBb1YybHVaRzkzY3lraUlITjBSWFowT21Ob1lXNW5aV1E5SWk4aUx6NGdQQzl5WkdZNlUyVnhQaUE4TDNodGNFMU5Pa2hwYzNSdmNuaytJRHh3YUc5MGIzTm9iM0E2Ukc5amRXMWxiblJCYm1ObGMzUnZjbk0rSUR4eVpHWTZRbUZuUGlBOGNtUm1PbXhwUG1Ga2IySmxPbVJ2WTJsa09uQm9iM1J2YzJodmNEb3haVGcyWW1ZeU5pMHpZemsyTFdSaE5Ea3RPR0UxT1MxaE9EVXhaall6TUdWaU9HSThMM0prWmpwc2FUNGdQSEprWmpwc2FUNTRiWEF1Wkdsa09tTTRNemd4TWpsaUxUVTVZekl0WTJJME9TMWhPREpqTFdFMFlXVmtZbU5sTjJaaE16d3ZjbVJtT214cFBpQThMM0prWmpwQ1lXYytJRHd2Y0dodmRHOXphRzl3T2tSdlkzVnRaVzUwUVc1alpYTjBiM0p6UGlBOEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0Z1BDOXlaR1k2VWtSR1BpQThMM2c2ZUcxd2JXVjBZVDRnUEQ5NGNHRmphMlYwSUdWdVpEMGljaUkvUGc9PSc7Ci8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBBIExJR0EgTUVEIMK3IEFUTyBGSU5BTCAyMDI2IMK3IHByb3TDs3RpcG8gZnJvbnQtZW5kCiAgIERhZG9zIGRlbW8gZW0gbG9jYWxTdG9yYWdlIChwcmVmaXhvIGFmXykuIFRvZG8gYWNlc3NvIGEgZGFkb3MKICAgcGFzc2EgcGVsbyBvYmpldG8gYHN0b3JlYDogYSBmYXNlIDIgdHJvY2EgZXNzYXMgZnVuw6fDtWVzIHBvcgogICBjaGFtYWRhcyBTdXBhYmFzZSBzZW0gbWV4ZXIgbm8gcmVzdG8gZG8gYXBwIChwYWRyw6NvIERlc2FmaW8gMjEpLgogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyogcG9seWZpbGwgZGUgU3RyaW5nLnByb3RvdHlwZS5wYWRTdGFydCAoaU9TPDEwL0Nocm9tZTw1Nyk6IHVzYWRvIG5vIGNvdW50ZG93bgogICBkYSBMUCBlIG5vIGNyb27DtG1ldHJvIGRvIHNpbXVsYWRvOyBzZW0gZWxlLCBUeXBlRXJyb3IgZW0gYXBhcmVsaG8gYW50aWdvCiAgIHRyYXZhdmEgbyB0aWNrLiBBdWRpdG9yaWEgMTEvMDguICovCmlmICghU3RyaW5nLnByb3RvdHlwZS5wYWRTdGFydCkgewogIFN0cmluZy5wcm90b3R5cGUucGFkU3RhcnQgPSBmdW5jdGlvbihsZW4sIHBhZCl7CiAgICB2YXIgcyA9IFN0cmluZyh0aGlzKTsgcGFkID0gcGFkID09PSB1bmRlZmluZWQgPyAnICcgOiBTdHJpbmcocGFkKTsKICAgIGlmIChzLmxlbmd0aCA+PSBsZW4gfHwgIXBhZCkgcmV0dXJuIHM7CiAgICB2YXIgZmlsbCA9ICcnOyB3aGlsZSAoZmlsbC5sZW5ndGggPCBsZW4gLSBzLmxlbmd0aCkgZmlsbCArPSBwYWQ7CiAgICByZXR1cm4gZmlsbC5zbGljZSgwLCBsZW4gLSBzLmxlbmd0aCkgKyBzOwogIH07Cn0KCi8qIC0tLS0tLS0tLS0tLS0tLS0gam9ybmFkYXMgLS0tLS0tLS0tLS0tLS0tLSAqLwovLyBDYWxlbmTDoXJpbyBFTkFNRUQ6IG9maWNpYWwsIGV4dHJhw61kbyBkYXMgcMOhZ2luYXMgZG8gV1AKLy8gKGF0by1maW5hbC1yZXNpZGVuY2lhLW1lZGljYS0yMDI2ICsgb2JzZXJ2YXRvcmlvLWVuYW1lZCkgZW0gMjkvMDcvMjAyNi4KLy8gQ2FsZW5kw6FyaW8gUmV2YWxpZGEgMjAyNi4yOiBQUk9WSVPDk1JJTywgZXNwZWxoYSBhIGVzdHJ1dHVyYSBkYSBlZGnDp8OjbwovLyAyMDI2LjEuIEF0dWFsaXphciBxdWFuZG8gbyBJTkVQIGNvbmZpcm1hciBhcyBkYXRhcy4KdmFyIEpPUk5BREFTID0gewogIGVuYW1lZDogewogICAgbm9tZTogJ0VOQU1FRCAyMDI2JywKICAgIGxpZ2E6ICdBdG8gRmluYWwgwrcgRU5BTUVEJywKICAgIGluaWNpbzogJzIwMjYtMDgtMjYnLCAgIC8vIGEgam9ybmFkYSBjb21lw6dhIG5hIEF1bGEgSW5hdWd1cmFsICgyNi8wOCwgMTloKTsgbyAxwrogY2hlY2staW4gc2VndWUgbmEgUHJlbW9uacOnw6NvICgzMC8wOCkKICAgIHByb3ZhOiAnMjAyNi0wOS0xMycsCiAgICBwcm92aXNvcmlvOiBmYWxzZSwKICAgIHBhcnRpY2lwYW50ZXM6IDE0ODIsCiAgICAvLyBUw610dWxvcyBlIGxpbmtzIG9maWNpYWlzIGRvIGUtbWFpbCBkYSBjb29yZGVuYcOnw6NvICgyOS8wNy8yMDI2KQogICAgLy8gZW4wMCAoc2VtYW5hIDAgPSBBYmVydHVyYSk6IFNFTSBwYWxhdnJhLWNoYXZlIGUgU0VNIHF1ZXN0w7VlcyDigJQgbsOjbyBlbnRyYQogICAgLy8gbmEgcsOpZ3VhIGRlIHBvbnRvcyAocHJlc2Vuw6dhIHNlZ3VlIDEzIGF1bGFzIMOXIDQwKS4gTyBsaW5rIGRvIFlvdVR1YmUKICAgIC8vIMOpIFBMQUNFSE9MREVSIChyZXBldGlkbyBkYSBQcmVtb25pw6fDo28pIGF0w6kgYSBsaXZlIG9maWNpYWwgc2VyIGNyaWFkYS4KICAgIGV2ZW50b3M6IFsKICAgICAgeyBpZDonZW4wMCcsIGRhdGE6JzIwMjYtMDgtMjYnLCBob3JhOicxOTowMCcsIHRpdHVsbzonQXVsYSBJbmF1Z3VyYWwgwrcgVHVkbyBzb2JyZSBvIEF0byBGaW5hbCBFTkFNRUQgMjAyNicsICAgICAgdGlwbzonYXVsYScsICBzZW1hbmE6MCwgcXVpejpmYWxzZSwgeXQ6J2h0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9eUppa1lRSi1JNEkmbGlzdD1QTGIySUVvdEtjWUlVJmluZGV4PTE2JyB9LAogICAgICB7IGlkOidlbjAxJywgZGF0YTonMjAyNi0wOC0zMCcsIGhvcmE6JzA4OjAwIMOgcyAxNjowMCcsIHRpdHVsbzonUHJlbW9uacOnw6NvIEVOQU1FRCAyMDI2JywgICAgICAgICAgICAgICAgICAgICAgICAgIHRpcG86J21hcmNvJywgc2VtYW5hOjEsIHF1aXo6dHJ1ZSwgIHl0OidodHRwczovL3lvdXR1YmUuY29tL2xpdmUvRldXZW5iSDZJOW8nIH0sCiAgICAgIHsgaWQ6J2VuMDInLCBkYXRhOicyMDI2LTA4LTMxJywgaG9yYTonMTk6MDAgw6BzIDIxOjMwJywgdGl0dWxvOidIb3JhIGRhIFZlcmRhZGUgwrcgR2luZWNvbG9naWEnLCAgICAgICAgICAgICAgICAgICB0aXBvOidhdWxhJywgIHNlbWFuYToxLCBxdWl6OnRydWUsICB5dDonaHR0cHM6Ly95b3V0dWJlLmNvbS9saXZlL244cjJXMjBueGxjJyB9LAogICAgICB7IGlkOidlbjAzJywgZGF0YTonMjAyNi0wOS0wMScsIGhvcmE6JzE5OjAwIMOgcyAyMTozMCcsIHRpdHVsbzonSG9yYSBkYSBWZXJkYWRlIMK3IFBlZGlhdHJpYSBQYXJ0ZSBJJywgICAgICAgICAgICAgdGlwbzonYXVsYScsICBzZW1hbmE6MSwgcXVpejp0cnVlLCAgeXQ6J2h0dHBzOi8veW91dHViZS5jb20vbGl2ZS9YMjdZUFZqVnA2NCcgfSwKICAgICAgeyBpZDonZW4wNCcsIGRhdGE6JzIwMjYtMDktMDInLCBob3JhOicxOTowMCDDoHMgMjE6MzAnLCB0aXR1bG86J0hvcmEgZGEgVmVyZGFkZSDCtyBDaXJ1cmdpYSBQYXJ0ZSBJJywgICAgICAgICAgICAgIHRpcG86J2F1bGEnLCAgc2VtYW5hOjEsIHF1aXo6dHJ1ZSwgIHl0OidodHRwczovL3lvdXR1YmUuY29tL2xpdmUvZE1JdGN5cGFleUUnIH0sCiAgICAgIHsgaWQ6J2VuMDUnLCBkYXRhOicyMDI2LTA5LTAzJywgaG9yYTonMTk6MDAgw6BzIDIzOjAwJywgdGl0dWxvOidIb3JhIGRhIFZlcmRhZGUgwrcgQ2zDrW5pY2EgTcOpZGljYSBQYXJ0ZSBJJywgICAgICAgIHRpcG86J2F1bGEnLCAgc2VtYW5hOjEsIHF1aXo6dHJ1ZSwgIHl0OidodHRwczovL3lvdXR1YmUuY29tL2xpdmUvRjFWUTBpb2hNNmsnIH0sCiAgICAgIHsgaWQ6J2VuMDYnLCBkYXRhOicyMDI2LTA5LTA0JywgaG9yYTonMTk6MDAgw6BzIDIxOjMwJywgdGl0dWxvOidIb3JhIGRhIFZlcmRhZGUgwrcgTWVkaWNpbmEgUHJldmVudGl2YSBQYXJ0ZSBJJywgICB0aXBvOidhdWxhJywgIHNlbWFuYToxLCBxdWl6OnRydWUsICB5dDonaHR0cHM6Ly95b3V0dWJlLmNvbS9saXZlL1ZwLXpCSFZidkdFJyB9LAogICAgICB7IGlkOidlbjA3JywgZGF0YTonMjAyNi0wOS0wNicsIGhvcmE6JzE0OjAwIMOgcyAxOTowMCcsIHRpdHVsbzonU2ltdWxhZG8gRklOQUwgRU5BTUVEIDIwMjYnLCAgICAgICAgICAgICAgICAgICAgICB0aXBvOidtYXJjbycsIHNlbWFuYToyLCBxdWl6OmZhbHNlLCB5dDonaHR0cHM6Ly95b3V0dWJlLmNvbS9saXZlL1llM2lRanludGRFJyB9LAogICAgICB7IGlkOidlbjA4JywgZGF0YTonMjAyNi0wOS0wNycsIGhvcmE6JzE5OjAwIMOgcyAyMTozMCcsIHRpdHVsbzonSG9yYSBkYSBWZXJkYWRlIMK3IE9ic3RldHLDrWNpYScsICAgICAgICAgICAgICAgICAgIHRpcG86J2F1bGEnLCAgc2VtYW5hOjIsIHF1aXo6dHJ1ZSwgIHl0OidodHRwczovL3lvdXR1YmUuY29tL2xpdmUvbnFNSG12REh2TDgnIH0sCiAgICAgIHsgaWQ6J2VuMDknLCBkYXRhOicyMDI2LTA5LTA4JywgaG9yYTonMTk6MDAgw6BzIDIxOjMwJywgdGl0dWxvOidIb3JhIGRhIFZlcmRhZGUgwrcgUGVkaWF0cmlhIFBhcnRlIElJJywgICAgICAgICAgICB0aXBvOidhdWxhJywgIHNlbWFuYToyLCBxdWl6OnRydWUsICB5dDonaHR0cHM6Ly95b3V0dWJlLmNvbS9saXZlLzMyaXlNWWtKSy1BJyB9LAogICAgICB7IGlkOidlbjEwJywgZGF0YTonMjAyNi0wOS0wOScsIGhvcmE6JzE5OjAwIMOgcyAyMTozMCcsIHRpdHVsbzonSG9yYSBkYSBWZXJkYWRlIMK3IENpcnVyZ2lhIFBhcnRlIElJJywgICAgICAgICAgICAgdGlwbzonYXVsYScsICBzZW1hbmE6MiwgcXVpejp0cnVlLCAgeXQ6J2h0dHBzOi8veW91dHViZS5jb20vbGl2ZS91OU1nTkpadU5HOCcgfSwKICAgICAgeyBpZDonZW4xMScsIGRhdGE6JzIwMjYtMDktMTAnLCBob3JhOicxOTowMCDDoHMgMjM6MDAnLCB0aXR1bG86J0hvcmEgZGEgVmVyZGFkZSDCtyBDbMOtbmljYSBNw6lkaWNhIFBhcnRlIElJJywgICAgICAgdGlwbzonYXVsYScsICBzZW1hbmE6MiwgcXVpejp0cnVlLCAgeXQ6J2h0dHBzOi8veW91dHViZS5jb20vbGl2ZS9lWjh6VXBzQkViUScgfSwKICAgICAgeyBpZDonZW4xMicsIGRhdGE6JzIwMjYtMDktMTEnLCBob3JhOicxOTowMCDDoHMgMjE6MzAnLCB0aXR1bG86J0hvcmEgZGEgVmVyZGFkZSDCtyBNZWRpY2luYSBQcmV2ZW50aXZhIFBhcnRlIElJJywgIHRpcG86J2F1bGEnLCAgc2VtYW5hOjIsIHF1aXo6dHJ1ZSwgIHl0OidodHRwczovL3lvdXR1YmUuY29tL2xpdmUvdWlDM09nQVE0MUUnIH0sCiAgICAgIHsgaWQ6J2VuMTMnLCBkYXRhOicyMDI2LTA5LTEyJywgaG9yYTonMDg6MDAgw6BzIDE2OjAwJywgdGl0dWxvOidSZXZpc8OjbyBkZSBWw6lzcGVyYSBFTkFNRUQgMjAyNiDCtyBhbyB2aXZvJywgICAgICAgIHRpcG86J21hcmNvJywgc2VtYW5hOjIsIHF1aXo6dHJ1ZSwgIHl0OidodHRwczovL3lvdXR1YmUuY29tL2xpdmUvV3hhMmpyQkxfWWMnIH0sCiAgICAgIHsgaWQ6J2VuMTQnLCBkYXRhOicyMDI2LTA5LTEzJywgaG9yYTonYSBwYXJ0aXIgZGFzIDE2OjAwJywgdGl0dWxvOidHYWJhcml0byBFTkFNRUQgMjAyNicsICAgICAgICAgICAgICAgICAgICAgICAgdGlwbzoncHJvdmEnLCBzZW1hbmE6MiwgcXVpejpmYWxzZSwgeXQ6J2h0dHBzOi8veW91dHViZS5jb20vbGl2ZS9feklWVUJROFRKOCcgfQogICAgXSwKICAgIHNpbXVsYWRvSWQ6ICdlbjA3JwogIH0sCiAgcmV2YWxpZGE6IHsKICAgIG5vbWU6ICdSZXZhbGlkYSBJTkVQIDIwMjYuMicsCiAgICBsaWdhOiAnQXRvIEZpbmFsIMK3IFJldmFsaWRhJywKICAgIGluaWNpbzogJzIwMjYtMDgtMjYnLAogICAgcHJvdmE6ICcyMDI2LTA5LTEzJywKICAgIHByb3Zpc29yaW86IGZhbHNlLAogICAgcGFydGljaXBhbnRlczogNzQzLAogICAgLy8gQ2FsZW5kw6FyaW8gb2ZpY2lhbCAoSWdvciwgMTIvMDgpLiBSb2RhIG5hIE1FU01BIGphbmVsYSBkbyBFTkFNRUQgKDI2LzA44oCTMTMvMDkpLAogICAgLy8gSG9yYSBkYSBWZXJkYWRlIMOgcyAxMmguIFJldmlzw6NvIGRlIFbDqXNwZXJhIChydjEzKSBlIEdhYmFyaXRvIChydjE0KSBzw6NvCiAgICAvLyBDT01QQVJUSUxIQURPUyBFTkFNRUQrUmV2YWxpZGEuIOKaoO+4jyB5dCBkYSBBYmVydHVyYSAocnYwMCwgMjYvMDggMjBoKSBQRU5ERU5URS4KICAgIGV2ZW50b3M6IFsKICAgICAgeyBpZDoncnYwMCcsIGRhdGE6JzIwMjYtMDgtMjYnLCBob3JhOicyMDowMCcsIHRpdHVsbzonQXVsYSBJbmF1Z3VyYWwgwrcgVHVkbyBzb2JyZSBvIEF0byBGaW5hbCBSZXZhbGlkYSBJTkVQIDIwMjYuMicsIHRpcG86J2F1bGEnLCBzZW1hbmE6MCwgcXVpejpmYWxzZSwgeXQ6JycgfSwKICAgICAgeyBpZDoncnYwMScsIGRhdGE6JzIwMjYtMDgtMzAnLCBob3JhOicwODowMCDDoHMgMTY6MDAnLCB0aXR1bG86J1ByZW1vbmnDp8OjbyBSZXZhbGlkYSBJTkVQIDIwMjYuMicsICAgICAgICAgICAgICAgICAgdGlwbzonbWFyY28nLCBzZW1hbmE6MSwgcXVpejp0cnVlLCAgeXQ6J2h0dHBzOi8veW91dHViZS5jb20vbGl2ZS9MNWhkRk9wb2xxZycgfSwKICAgICAgeyBpZDoncnYwMicsIGRhdGE6JzIwMjYtMDgtMzEnLCBob3JhOicxMjowMCDDoHMgMTQ6MzAnLCB0aXR1bG86J0hvcmEgZGEgVmVyZGFkZSDCtyBHaW5lY29sb2dpYScsICAgICAgICAgICAgICAgICAgICB0aXBvOidhdWxhJywgIHNlbWFuYToxLCBxdWl6OnRydWUsICB5dDonaHR0cHM6Ly95b3V0dWJlLmNvbS9saXZlLzN0Y1dSWUFnSTlzJyB9LAogICAgICB7IGlkOidydjAzJywgZGF0YTonMjAyNi0wOS0wMScsIGhvcmE6JzEyOjAwIMOgcyAxNDozMCcsIHRpdHVsbzonSG9yYSBkYSBWZXJkYWRlIMK3IFBlZGlhdHJpYSBQYXJ0ZSBJJywgICAgICAgICAgICAgIHRpcG86J2F1bGEnLCAgc2VtYW5hOjEsIHF1aXo6dHJ1ZSwgIHl0OidodHRwczovL3lvdXR1YmUuY29tL2xpdmUvaHB5YmhPZmtoOEknIH0sCiAgICAgIHsgaWQ6J3J2MDQnLCBkYXRhOicyMDI2LTA5LTAyJywgaG9yYTonMTI6MDAgw6BzIDE0OjMwJywgdGl0dWxvOidIb3JhIGRhIFZlcmRhZGUgwrcgQ2lydXJnaWEgUGFydGUgSScsICAgICAgICAgICAgICAgdGlwbzonYXVsYScsICBzZW1hbmE6MSwgcXVpejp0cnVlLCAgeXQ6J2h0dHBzOi8veW91dHViZS5jb20vbGl2ZS9HUVRIYzlPb3ZDVScgfSwKICAgICAgeyBpZDoncnYwNScsIGRhdGE6JzIwMjYtMDktMDMnLCBob3JhOicxMjowMCDDoHMgMTY6MDAnLCB0aXR1bG86J0hvcmEgZGEgVmVyZGFkZSDCtyBDbMOtbmljYSBNw6lkaWNhIFBhcnRlIEknLCAgICAgICAgIHRpcG86J2F1bGEnLCAgc2VtYW5hOjEsIHF1aXo6dHJ1ZSwgIHl0OidodHRwczovL3lvdXR1YmUuY29tL2xpdmUvQzRtWEZGZ1NNbEknIH0sCiAgICAgIHsgaWQ6J3J2MDYnLCBkYXRhOicyMDI2LTA5LTA0JywgaG9yYTonMTI6MDAgw6BzIDE0OjMwJywgdGl0dWxvOidIb3JhIGRhIFZlcmRhZGUgwrcgTWVkaWNpbmEgUHJldmVudGl2YSBQYXJ0ZSBJJywgICAgdGlwbzonYXVsYScsICBzZW1hbmE6MSwgcXVpejp0cnVlLCAgeXQ6J2h0dHBzOi8veW91dHViZS5jb20vbGl2ZS9VcWd5YjlDaEtjdycgfSwKICAgICAgeyBpZDoncnYwNycsIGRhdGE6JzIwMjYtMDktMDYnLCBob3JhOicxNDowMCDDoHMgMTk6MDAnLCB0aXR1bG86J1NpbXVsYWRvIEZpbmFsIFJldmFsaWRhIElORVAgMjAyNi4yJywgICAgICAgICAgICAgIHRpcG86J21hcmNvJywgc2VtYW5hOjIsIHF1aXo6ZmFsc2UsIHl0OidodHRwczovL3lvdXR1YmUuY29tL2xpdmUvY19HcW5hOVhIeU0nIH0sCiAgICAgIHsgaWQ6J3J2MDgnLCBkYXRhOicyMDI2LTA5LTA3JywgaG9yYTonMTI6MDAgw6BzIDE0OjMwJywgdGl0dWxvOidIb3JhIGRhIFZlcmRhZGUgwrcgT2JzdGV0csOtY2lhJywgICAgICAgICAgICAgICAgICAgIHRpcG86J2F1bGEnLCAgc2VtYW5hOjIsIHF1aXo6dHJ1ZSwgIHl0OidodHRwczovL3lvdXR1YmUuY29tL2xpdmUvX0tCQUJGVUZSTlknIH0sCiAgICAgIHsgaWQ6J3J2MDknLCBkYXRhOicyMDI2LTA5LTA4JywgaG9yYTonMTI6MDAgw6BzIDE0OjMwJywgdGl0dWxvOidIb3JhIGRhIFZlcmRhZGUgwrcgUGVkaWF0cmlhIFBhcnRlIElJJywgICAgICAgICAgICAgdGlwbzonYXVsYScsICBzZW1hbmE6MiwgcXVpejp0cnVlLCAgeXQ6J2h0dHBzOi8veW91dHViZS5jb20vbGl2ZS85LXFySV9veXZQYycgfSwKICAgICAgeyBpZDoncnYxMCcsIGRhdGE6JzIwMjYtMDktMDknLCBob3JhOicxMjowMCDDoHMgMTQ6MzAnLCB0aXR1bG86J0hvcmEgZGEgVmVyZGFkZSDCtyBDaXJ1cmdpYSBQYXJ0ZSBJSScsICAgICAgICAgICAgICB0aXBvOidhdWxhJywgIHNlbWFuYToyLCBxdWl6OnRydWUsICB5dDonaHR0cHM6Ly95b3V0dWJlLmNvbS9saXZlLzc3RUh1LWlPYkxjJyB9LAogICAgICB7IGlkOidydjExJywgZGF0YTonMjAyNi0wOS0xMCcsIGhvcmE6JzEyOjAwIMOgcyAxNjowMCcsIHRpdHVsbzonSG9yYSBkYSBWZXJkYWRlIMK3IENsw61uaWNhIE3DqWRpY2EgUGFydGUgSUknLCAgICAgICAgdGlwbzonYXVsYScsICBzZW1hbmE6MiwgcXVpejp0cnVlLCAgeXQ6J2h0dHBzOi8veW91dHViZS5jb20vbGl2ZS9FNmVTckxnMWxJMCcgfSwKICAgICAgeyBpZDoncnYxMicsIGRhdGE6JzIwMjYtMDktMTEnLCBob3JhOicxMjowMCDDoHMgMTQ6MzAnLCB0aXR1bG86J0hvcmEgZGEgVmVyZGFkZSDCtyBNZWRpY2luYSBQcmV2ZW50aXZhIFBhcnRlIElJJywgICB0aXBvOidhdWxhJywgIHNlbWFuYToyLCBxdWl6OnRydWUsICB5dDonaHR0cHM6Ly95b3V0dWJlLmNvbS9saXZlL2diMHR6ZE5NZlkwJyB9LAogICAgICB7IGlkOidydjEzJywgZGF0YTonMjAyNi0wOS0xMicsIGhvcmE6JzA4OjAwIMOgcyAxNjowMCcsIHRpdHVsbzonUmV2aXPDo28gZGUgVsOpc3BlcmEgRU5BTUVEIGUgUmV2YWxpZGEgSU5FUCDCtyBhbyB2aXZvJywgdGlwbzonbWFyY28nLCBzZW1hbmE6MiwgcXVpejp0cnVlLCB5dDonaHR0cHM6Ly95b3V0dWJlLmNvbS9saXZlL1VycVp0WUVNbXhBJyB9LAogICAgICB7IGlkOidydjE0JywgZGF0YTonMjAyNi0wOS0xMycsIGhvcmE6J2EgcGFydGlyIGRhcyAxNjowMCcsIHRpdHVsbzonR2FiYXJpdG8gRU5BTUVEIGUgUmV2YWxpZGEgSU5FUCAyMDI2LjInLCAgICAgICB0aXBvOidwcm92YScsIHNlbWFuYToyLCBxdWl6OmZhbHNlLCB5dDonaHR0cHM6Ly95b3V0dWJlLmNvbS9saXZlL29JY2xjX216ejFZJyB9CiAgICBdLAogICAgc2ltdWxhZG9JZDogJ3J2MDcnCiAgfQp9OwoKLyogQSBKT1JOQURBIChlc3R1ZG8pIHZhbGUgMi4wMDAgcHRzLiBJbmRpY2HDp8OjbyB2aXJvdSBCw5ROVVMgU0VNIFRFVE8gZW0gY2ltYQogICBkaXNzbyAoMTEvMDgpIOKAlCBuw6NvIGjDoSBtYWlzIHVtICJ0b3RhbCIgZml4by4gKi8KdmFyIFBPTlRPUyA9IHsgcHJlc2VuY2E6IDUyMCwgbWlzc29lczogNzgwLCBzaW11bGFkbzogNzAwLCBqb3JuYWRhOiAyMDAwIH07Ci8qIMOhdG9tb3MgRVhBVE9TIGRhIHLDqWd1YSAoZGVjaXPDo28gMDQvMDgpOiBzZW0gcG9udG8gcXVlYnJhZG8gZW0gbHVnYXIgbmVuaHVtICovCnZhciBQVF9BVUxBID0gNDAsIFBUX0FVTEFfUkVUUk8gPSAzMDsgICAgICAgICAgICAgICAgICAvLyA3NSUgZXhhdG8gbm8gcmV0cm9hdGl2bwp2YXIgUFRfRElBID0gNjUsIFBUX0RJQV9QSVNPID0gMjYsIFBUX0RJQV9BQ0VSVE9TID0gMzk7IC8vIHBpc28gNDAlIGV4YXRvCnZhciBQVF9TSU1fQUNFUlRPID0gNzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2ltdWxhZG86IDcgcG9yIGFjZXJ0bwovKiBpbmRpY2HDp8O1ZXMgKHJldmlzw6NvIDExLzA4LCBkZWNpc8OjbyBkbyBJZ29yKTogMjAgcHRzIHBvciBhbWlnbyBxdWUgc2UgSU5TQ1JFVkUKICAgcGVsbyBzZXUgbGluayDigJQgQVVUT03DgVRJQ08gbm8gY2FkYXN0cm8gKG7Do28gZXhpZ2UgbWFpcyBwYXJ0aWNpcGFyKSBlIFNFTSBURVRPCiAgICgicXVhbnRvIG1haXMgaW5kaWNhciwgbWVsaG9yIikuIELDtG51cyBlbSBjaW1hIGRvcyAyLjAwMC4gTsODTyBlbnRyYSBubwogICBkZXNlbXBhdGUuICovCnZhciBQVF9JTkQgPSAyMDsKdmFyIERFTU9fS0VZV09SRCA9ICcnOyAvLyBwcm9kdcOnw6NvOiBuw6NvIGV4aXN0ZSBjaGF2ZSBkZW1vOyB2YWxpZGHDp8OjbyDDqSBubyBzZXJ2aWRvcgovKiByZXNwb3N0YXMgcGFyY2lhaXMgZGUgdW0gZXZlbnRvIChwcm9kdcOnw6NvOiBjb250YWRhcyBkbyBDQUNIRSBkbyBzZXJ2aWRvcikgKi8KZnVuY3Rpb24gblJlc3Bvc3Rhc0V2ZW50byhldklkKXsKICB2YXIgcXMgPSBDQUNIRS5xdWVzdG9lc1tldklkXSB8fCBbXTsKICB2YXIgbiA9IDA7CiAgcXMuZm9yRWFjaChmdW5jdGlvbihxKXsgaWYgKENBQ0hFLnJlc3Bvc3Rhc1txLmlkXSkgbisrOyB9KTsKICByZXR1cm4gbjsKfQovKiBFdmVudG9zIGNvbSBjaGVjay1pbiAocHJlc2Vuw6dhKTogdG9kb3MgTUVOT1MgYSBBYmVydHVyYSAoc2VtYW5hIDApIGUgbwogICBTaW11bGFkby4gRGVyaXZhZG8gZGEgam9ybmFkYSBhdGl2YSBwcmEgZnVuY2lvbmFyIGVtIHF1YWxxdWVyIHZlcnRpY2FsCiAgIChFTkFNRUQgdXNhIGVuKiwgUmV2YWxpZGEgdXNhIHJ2KikuICovCmZ1bmN0aW9uIGV2ZW50b3NDb21DaGF2ZShwcm92YSl7CiAgdmFyIGogPSBKT1JOQURBU1twcm92YV0gfHwgSk9STkFEQVMuZW5hbWVkOwogIHZhciBvdXQgPSBbXTsKICBqLmV2ZW50b3MuZm9yRWFjaChmdW5jdGlvbihlKXsgaWYgKGUuc2VtYW5hICE9PSAwICYmIGUuaWQgIT09IGouc2ltdWxhZG9JZCkgb3V0LnB1c2goZS5pZCk7IH0pOwogIHJldHVybiBvdXQ7Cn0KdmFyIFRFTV9DSEFWRSA9IGV2ZW50b3NDb21DaGF2ZSgod2luZG93Ll9fQUZfUFJPVkEgPT09ICdyZXZhbGlkYScpID8gJ3JldmFsaWRhJyA6ICdlbmFtZWQnKTsKCi8qIFByZWZpeG8gZGUgbG9jYWxTdG9yYWdlL2Nvb2tpZSBwb3IgdmVydGljYWw6IEVOQU1FRCBlIFJldmFsaWRhIG1vcmFtIG5vIE1FU01PCiAgIGRvbcOtbmlvIChta3QuZXN0cmF0ZWdpYS5jb20pLCBvbmRlIG8gbG9jYWxTdG9yYWdlIMOpIENPTVBBUlRJTEhBRE8uIFNlbSBpc3NvLCBhCiAgIHNlc3PDo28gZGUgdW0gYWx1bm8gZG8gRU5BTUVEIHZhemFyaWEgKGNvbSBkYWRvcyBxdWVicmFkb3MpIHByYSDDoXJlYSBkbyBSZXZhbGlkYS4KICAgRU5BTUVEIG1hbnTDqW0gbyBwcmVmaXhvIGhpc3TDs3JpY28gJ2FmXycgKG7Do28gZGVzbG9nYSBuaW5ndcOpbSBqw6EgbG9nYWRvKTsKICAgUmV2YWxpZGEgdXNhICdhZl9ydl8nLiAqLwp2YXIgTFNQID0gKHdpbmRvdy5fX0FGX1BST1ZBID09PSAncmV2YWxpZGEnKSA\/ICdhZl9ydl8nIDogJ2FmXyc7CgovKiBNT0RPIERFIFZBTElEQcOHw4NPIGRhIGNvb3JkZW5hw6fDo28g4oCUIERFU0xJR0FSIE5PIExBTsOHQU1FTlRPIChmYWxzZSkuCiAgIENvbSB0cnVlOiBob2plID0gMzAvMDggKGRpYSBkYSBlc3RyZWlhKSwgcXVlc3TDtWVzIGRlIFRPRE9TIG9zIGRpYXMKICAgbGliZXJhZGFzLCBTaW11bGFkbyBhYmVydG8gcGFyYSBwcmVlbmNoZXIgZSBnYWJhcml0byBsaWJlcmFkbyBhcMOzcyBvCiAgIGVudmlvLCBjb20gYm90w6NvIGRlIHJlZmF6ZXIuIFVtIGJhbm5lciBhdmlzYSBxdWUgw6kgYW1iaWVudGUgZGUgdGVzdGUuICovCnZhciBNT0RPX1ZBTElEQUNBTyA9IGZhbHNlOyAgLy8gTEFOw4dBTUVOVE8gMTAvMDg6IGJsb3F1ZWlvcyByZWFpcyBwcm9zIGFsdW5vcwoKLyogVklTw4NPIERPIENPT1JERU5BRE9SIChsYW7Dp2FtZW50byAxMC8wOCk6IENQRnMgZGVzdGEgbGlzdGEgZW54ZXJnYW0gYQogICBwbGF0YWZvcm1hIGNvbXBsZXRhIGFudGVzIGRhIGVzdHJlaWEgKHRyaWxoYSwgcXVlc3TDtWVzLCBzaW11bGFkbykgc2VtCiAgIGFicmlyIG5hZGEgcHJvcyBhbHVub3MuIFPDsyBWSVNVQUxJWkHDh8ODTzogbyBzZXJ2aWRvciBtYW50w6ltIGFzIHJlZ3JhcwogICByZWFpcyBlIHJlY3VzYSBhw6fDtWVzIGZvcmEgZGUgaG9yYS4gKi8KdmFyIENQRlNfQ09PUkQgPSBbXTsKZnVuY3Rpb24gbW9kb1ByZXZpZXcoKXsKICBpZiAoTU9ET19WQUxJREFDQU8pIHJldHVybiB0cnVlOwogIHRyeSB7IHJldHVybiAhIShDQUNIRS51c2VyICYmIENQRlNfQ09PUkQuaW5kZXhPZihDQUNIRS51c2VyLmNwZikgPiAtMSk7IH0gY2F0Y2goZSl7IHJldHVybiBmYWxzZTsgfQp9CgovKiBBdGFsaG9zIGRlIG9wZXJhw6fDo28gKD9ob2plLCA\/c2ltZHVyLCA\/c2ltcmVzZXQgZSBvIGF0YWxobyBkZSBkZW1vIGRvIFNpbXVsYWRvKQogICBzw7MgZnVuY2lvbmFtIGVtIG5hdmVnYWRvciBxdWUgasOhIHBhc3NvdSBwZWxvIGdhdGUgZG8gYWRtaW4gKGFmX2FkbWluX29rKS4gKi8KZnVuY3Rpb24gaXNPcGVyYWNhbygpeyB0cnkgeyByZXR1cm4gISFsb2NhbFN0b3JhZ2UuZ2V0SXRlbShMU1ArJ2FkbWluX29rJyk7IH0gY2F0Y2goZSl7IHJldHVybiBmYWxzZTsgfSB9CgovKiBRdWl6emVzIGRlbW86IDUgcXVlc3TDtWVzIENlcnRvL0VycmFkbyBwb3IgYXVsYSAocGFkcsOjbyBkbyBDSikuCiAgIENvbnRlw7pkbyBpbHVzdHJhdGl2bywgbyB0aW1lIGRlIHByb2Zlc3NvcmVzIHN1YnN0aXR1aSBuYSBmYXNlIDIuICovCnZhciBRVUlaX0JBTksgPSB7CiAgZW4wMjogWwogICAgeyBxOidObyByYXN0cmVhbWVudG8gZG8gY8OibmNlciBkZSBjb2xvIHV0ZXJpbm8sIGEgY2l0b2xvZ2lhIG9uY8OzdGljYSBkZXZlIHNlciBpbmljaWFkYSBhb3MgMjUgYW5vcyBlbSBtdWxoZXJlcyBxdWUgasOhIHRpdmVyYW0gYXRpdmlkYWRlIHNleHVhbC4nLCByOidDJyB9LAogICAgeyBxOidBIGNhbmRpZMOtYXNlIHZ1bHZvdmFnaW5hbCBkZSByZXBldGnDp8OjbyDDqSB0cmF0YWRhIGNvbSBtZXRyb25pZGF6b2wgb3JhbCBlbSBkb3NlIMO6bmljYS4nLCByOidFJyB9LAogICAgeyBxOidOYSBkb2Vuw6dhIGluZmxhbWF0w7NyaWEgcMOpbHZpY2EsIG8gdHJhdGFtZW50byBhbWJ1bGF0b3JpYWwgw6kgYWNlaXTDoXZlbCBlbSBxdWFkcm9zIGxldmVzLCBzZW0gc2luYWlzIGRlIGFic2Nlc3NvLicsIHI6J0MnIH0sCiAgICB7IHE6J08gYW50aWNvbmNlcGNpb25hbCBjb21iaW5hZG8gw6kgbyBtw6l0b2RvIGRlIGVzY29saGEgZW0gbXVsaGVyZXMgY29tIGVueGFxdWVjYSBjb20gYXVyYS4nLCByOidFJyB9LAogICAgeyBxOidBIHPDrW5kcm9tZSBkb3Mgb3bDoXJpb3MgcG9saWPDrXN0aWNvcyBleGlnZSwgcGVsbyBjcml0w6lyaW8gZGUgUm90dGVyZGFtLCBhIHByZXNlbsOnYSBzaW11bHTDom5lYSBkb3MgdHLDqnMgY3JpdMOpcmlvcyBkaWFnbsOzc3RpY29zLicsIHI6J0UnIH0KICBdLAogIGVuMDU6IFsKICAgIHsgcTonTmEgY2V0b2FjaWRvc2UgZGlhYsOpdGljYSwgYSBpbnN1bGluYSBzw7MgZGV2ZSBzZXIgaW5pY2lhZGEgYXDDs3MgY29ycmXDp8OjbyBkZSBwb3TDoXNzaW8gc8OpcmljbyBhYmFpeG8gZGUgMywzIG1FcS9MLicsIHI6J0MnIH0sCiAgICB7IHE6J0EgcG5ldW1vbmlhIGFkcXVpcmlkYSBuYSBjb211bmlkYWRlIGNvbSBDVVJCLTY1IGlndWFsIGEgemVybyBleGlnZSBpbnRlcm5hw6fDo28gaG9zcGl0YWxhci4nLCByOidFJyB9LAogICAgeyBxOidObyBpbmZhcnRvIGFndWRvIGRvIG1pb2PDoXJkaW8gY29tIHN1cHJhIGRlIFNULCBvIHRlbXBvIHBvcnRhLWJhbMOjbyBpZGVhbCDDqSBkZSBhdMOpIDkwIG1pbnV0b3MuJywgcjonQycgfSwKICAgIHsgcTonQSBkb2Vuw6dhIHJlbmFsIGNyw7RuaWNhIMOpIGRlZmluaWRhIHBvciBhbHRlcmHDp8O1ZXMgZXN0cnV0dXJhaXMgb3UgZnVuY2lvbmFpcyBtYW50aWRhcyBwb3IgbWFpcyBkZSAzIG1lc2VzLicsIHI6J0MnIH0sCiAgICB7IHE6J08gdHJhdGFtZW50byBkZSBwcmltZWlyYSBsaW5oYSBkYSBoaXBlcnRlbnPDo28gZW0gbmVncm9zIG7Do28gZGlhYsOpdGljb3MgcHJpb3JpemEgaW5pYmlkb3JlcyBkYSBFQ0EuJywgcjonRScgfQogIF0KfTsKZnVuY3Rpb24gcXVpekRvRXZlbnRvKGV2KXsKICB2YXIgYWRtID0gbnVsbDsgLy8gcHJvZHXDp8OjbzogcXVlc3TDtWVzIHbDqm0gU8OTIGRvIGJhbmNvCiAgcmV0dXJuIChDQUNIRS5xdWVzdG9lc1tldi5pZF0gfHwgW10pOwp9CgovKiAtLS0tLS0tLS0tLS0tLS0tIFNpbXVsYWRvIEZpbmFsIElOLVBMQVRGT1JNIC0tLS0tLS0tLS0tLS0tLS0KICAgTW9kZWxvIHJlcGxpY2FkbyBkbyBTaW11bGFkbyBFTkFNRUQgUkVBTCBkYSBwbGF0YWZvcm1hIGRvIE1FRAogICAocXVlc3Rpb25zX2RiLnNlbGxhYmxlX3N0dWRlbnRfZXhhbXMgbm8gQXRoZW5hOiAxMDAgcXVlc3TDtWVzIGRlCiAgIDQgYWx0ZXJuYXRpdmFzIEHigJNELCA1aCBkZSBwcm92YSwgamFuZWxhIGNvbSBpbsOtY2lvL2ZpbSBlIGdhYmFyaXRvCiAgIGxpYmVyYWRvIHPDsyBubyBlbmNlcnJhbWVudG8pICsgcmVncmFzIGRhIHBsYXRhZm9ybWEgZG8gQXRvIEZpbmFsCiAgIChyZXBvIGFyZWEtcGFydGljaXBhbnRlLWVuYW1lZCk6IGxvYmJ5IGNvbSBkZWNsYXJhw6fDo28gZGUgZmFpci1wbGF5LAogICBjcm9uw7RtZXRybyBzZW0gcGF1c2EsIG5hdmVnYWRvciBkZSBxdWVzdMO1ZXMsIG1hcmNhciBwYXJhIHJldmlzYXIsCiAgIGF1dG9zYXZlLCB0ZW50YXRpdmEgw7puaWNhLCBhbnRpLWPDs3BpYSwgZ2FiYXJpdG8gY29tZW50YWRvIHJldGlkbwogICBhdMOpIG8gZmltIGRhIGphbmVsYS4gUXVlc3TDtWVzIERFTU9OU1RSQVRJVkFTIGF0w6kgb3MgcHJvZmVzc29yZXMKICAgZW50cmVnYXJlbSAoYSBhYmEgU0lNVUxBRE8gZGEgcGxhbmlsaGEgYWluZGEgdGVtIG8gY29udGXDumRvIGRvIENKKS4gKi8KdmFyIFNJTV9DRkcgPSB7CiAgZW5hbWVkOiAgIHsgcXVlc3RvZXM6MTAwLCBkdXJhY2FvTWluOjMwMCwgaG9yYUFicmU6JzE0OjAwJywgaG9yYUZlY2hhOicxOTowMCcgfSwKICByZXZhbGlkYTogeyBxdWVzdG9lczoxMDAsIGR1cmFjYW9NaW46MzAwLCBob3JhQWJyZTonMTQ6MDAnLCBob3JhRmVjaGE6JzE5OjAwJyB9Cn07CnZhciBTSU1fQVJFQVMgPSBbJ0Nsw61uaWNhIE3DqWRpY2EnLCdDaXJ1cmdpYScsJ1BlZGlhdHJpYScsJ0dpbmVjb2xvZ2lhIGUgT2JzdGV0csOtY2lhJywnTWVkaWNpbmEgUHJldmVudGl2YSddOwpmdW5jdGlvbiBzaW11bGFkb1F1ZXN0b2VzKHByb3ZhKXsKICAvLyAyMCBxdWVzdMO1ZXMgcG9yIGdyYW5kZSDDoXJlYSAoZGlzdHJpYnVpw6fDo28gb2ZpY2lhbCBkbyBFTkFNRUQpCiAgdmFyIGNmZyA9IFNJTV9DRkdbcHJvdmFdIHx8IFNJTV9DRkcuZW5hbWVkOwogIHZhciBsZXRyYXMgPSBbJ0EnLCdCJywnQycsJ0QnXTsKICB2YXIgb3V0ID0gW107CiAgZm9yICh2YXIgaT0wO2k8Y2ZnLnF1ZXN0b2VzO2krKyl7CiAgICB2YXIgYXJlYSA9IFNJTV9BUkVBU1tNYXRoLmZsb29yKGkgLyAoY2ZnLnF1ZXN0b2VzIC8gU0lNX0FSRUFTLmxlbmd0aCkpXSB8fCBTSU1fQVJFQVNbMF07CiAgICBvdXQucHVzaCh7CiAgICAgIGFyZWE6IGFyZWEsCiAgICAgIHE6ICdRdWVzdMOjbyBkZW1vbnN0cmF0aXZhICcrKGkrMSkrJyDCtyAnK2FyZWErJy4gTm8gcHJvamV0byBmaW5hbCwgZW50cmEgYXF1aSB1bSBjYXNvIGNsw61uaWNvIGNvbXBsZXRvIG5vIHBhZHLDo28gSU5FUC9FTkFNRUQgZWxhYm9yYWRvIHBlbG9zIHByb2Zlc3NvcmVzOiBhcHJlc2VudGHDp8OjbyBkbyBwYWNpZW50ZSwgZGFkb3MgZGUgZXhhbWUgZSBhIHBlcmd1bnRhLicsCiAgICAgIGFsdHM6IGxldHJhcy5tYXAoZnVuY3Rpb24obCl7IHJldHVybiB7IGw6bCwgdDonQWx0ZXJuYXRpdmEgZGVtb25zdHJhdGl2YSAnK2wrJyBkYSBxdWVzdMOjbyAnKyhpKzEpKycuJyB9OyB9KSwKICAgICAgcjogbGV0cmFzW2kgJSA0XSwKICAgICAgYzogJ0NvbWVudMOhcmlvIGRlbW9uc3RyYXRpdm8gZG8gcHJvZmVzc29yIHBhcmEgYSBxdWVzdMOjbyAnKyhpKzEpKycgKCcrYXJlYSsnKTogZnVuZGFtZW50YcOnw6NvIGRhIGFsdGVybmF0aXZhIGNvcnJldGEgZSBwb3IgcXVlIGFzIGRlbWFpcyBlc3TDo28gZXJyYWRhcy4nCiAgICB9KTsKICB9CiAgcmV0dXJuIG91dDsKfQoKLyogUmFua2luZyBkZW1vIHBvciBwcm92YSAqLwp2YXIgUkFOS19ERU1PID0gewogIGVuYW1lZDogWydNaWNoYWVsIEYuJywnUGF0csOtY2lhIEcuJywnSm\/Do28gUC4nLCdnYWJyaWVsYSBmLicsJ1ZpY3TDs3JpYSBMLicsJ0Jyw6F1bGlvIFMuJywnSnVsaWFuYSBGLicsJ0NyaXN0aWFuIFIuJywnQ2FtaWxseSBNLicsJ0x1YW5hIFIuJywnUmVuYXRvIEEuJywnQmlhbmNhIFQuJywnRmVsaXBlIE4uJywnQWxpbmUgQy4nLCdEaWVnbyBNLiddLAogIHJldmFsaWRhOiBbJ1llc2VuaWEgUi4nLCdDYXJsb3MgVi4nLCdNYXLDrWEgUC4nLCdKb25hdGhhbiBPLicsJ0RhbmllbGEgUS4nLCdMdWlzIEYuJywnQW5kcmVhIE0uJywnUGVkcm8gSC4nLCdSb3NhIEUuJywnTWlndWVsIEEuJywnQ2FtaWxhIEQuJywnSm9zw6kgTC4nLCdQYW9sYSBTLicsJ0l2w6FuIEcuJywnS2FyZW4gQi4nXQp9OwoKLyogU2xpZGVzIGRhcyBhdWxhczogY29sZSBvIGxpbmsgZG8gRHJpdmUgZGUgY2FkYSBhdWxhIHF1YW5kbyBvIHRpbWUgZW52aWFyLgogICBDaGF2ZSA9IGlkIGRvIGV2ZW50byAoSk9STkFEQVMgYWNpbWEpLiBBdWxhIHNlbSBsaW5rIG1vc3RyYSAiU2xpZGVzIGVtIGJyZXZlIi4gKi8KdmFyIFNMSURFUyA9IHsKICBlbjAwOicnLCBlbjAxOicnLCBlbjAyOicnLCBlbjAzOicnLCBlbjA0OicnLCBlbjA1OicnLCBlbjA2OicnLCBlbjA3OicnLAogIGVuMDg6JycsIGVuMDk6JycsIGVuMTA6JycsIGVuMTE6JycsIGVuMTI6JycsIGVuMTM6JycsIGVuMTQ6JycsCiAgcnYwMTonJywgcnYwMjonJywgcnYwMzonJywgcnYwNDonJywgcnYwNTonJywgcnYwNjonJywgcnYwNzonJywKICBydjA4OicnLCBydjA5OicnLCBydjEwOicnLCBydjExOicnLCBydjEyOicnLCBydjEzOicnLCBydjE0OicnCn07CgovKiBBVUxBIElOQVVHVVJBTCBubyBZb3VUdWJlOiAiQWJlcnR1cmEgQXRvIEZpbmFsIEVOQU1FRCAyMDI2IiAobGluayBvZmljaWFsIGRvCiAgIElnb3IsIDExLzA4KS4gU3Vic3RpdHVpdSBhIHBsYXlsaXN0IGdlbsOpcmljYSBuYSBzZcOnw6NvICJQcsOzeGltYSB0cmFuc21pc3PDo28iCiAgIGRvIEluw61jaW86IG1hbmRhciBvIGFsdW5vIHBybyB2w61kZW8gZGEgZXN0cmVpYSBkZWl4YSBlbGUgYSB1bSB0b3F1ZSBkbwogICAiRGVmaW5pciBsZW1icmV0ZSIgTkFUSVZPIGRvIFlvdVR1YmUsIHF1ZSDDqSBvIHF1ZSBhIGdlbnRlIHF1ZXIgKGEgcGxheWxpc3QKICAgZXhpZ2lhIGNhw6dhciBhIGF1bGEgY2VydGEgYW50ZXMpLiBNZXNtbyBsaW5rIG5vIGNhbXBvIHl0IGRvIGVuMDAuICovCnZhciBZVF9BQkVSVFVSQSA9ICdodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PXlKaWtZUUotSTRJJmxpc3Q9UExiMklFb3RLY1lJVSZpbmRleD0xNic7CgovKiBWw61kZW8gZGUgYm9hcy12aW5kYXMgKCJjb21lY2UgcG9yIGFxdWkiKSBkbyBJbsOtY2lvIOKAlCBlbWJlZCBQT1IgUFJPVkEuCiAgIFZhemlvID0gbyBjYXJkIE7Dg08gYXBhcmVjZSAobGlnYSBzb3ppbmhvIHF1YW5kbyBhIHByb3ZhIGdhbmhhIHVtIGVtYmVkKS4KICAgRU5BTUVEOiB2w61kZW8gb2ZpY2lhbCBubyBQYW5kYSBWaWRlbyAoSWdvciwgMTMvMDgpLiBSZXZhbGlkYTogYWluZGEgc2VtIHbDrWRlby4gKi8KdmFyIFZJREVPX0JWX1BPUl9QUk9WQSA9IHsKICBlbmFtZWQ6ICdodHRwczovL3BsYXllci12ei03MjhjZGE4MC0yZWYudHYucGFuZGF2aWRlby5jb20uYnIvZW1iZWQvP3Y9NzNjMDZiMTEtNGRkMC00MmRiLWIxYzQtZmU0YThiM2M3N2UzJywKICByZXZhbGlkYTogJycKfTsKCi8qIFBSw4pNSU9TIHJldGlyYWRvcyBURU1QT1JBUklBTUVOVEUgKHBlZGlkbyBkbyBJZ29yLCAxMS8wOCkgZW5xdWFudG8gYSByZWdyYSBkZQogICBpbmRpY2HDp8OjbyDDlyByYW5raW5nIMOpIGFjZXJ0YWRhLiBSZWxpZ2FyID0gdHJ1ZSAodm9sdGEgbyBjYXJkIE5vdGVib29rL1RhYmxldC8KICAgS2l0ICsgbyBzb3J0ZWlvIGRlIEtpdHMgbm8gcm9kYXDDqSBkYXMgZmFpeGFzKS4gKi8KdmFyIE1PU1RSQVJfUFJFTUlPUyA9IGZhbHNlOwoKLyogQlEgTUVEIGRlIFBvcnRhcyBBYmVydGFzIChCUSBncsOhdGlzIGVtIGFnb3N0by8yNik6IGNhcmQgcHLDqS1qb3JuYWRhIG5vIEluw61jaW8gKi8KdmFyIEJRTUVEX1VSTCA9ICdodHRwczovL21rdC5lc3RyYXRlZ2lhLmNvbS9tZWQvYnEtbWVkLXBvcnRhcy1hYmVydGFzLz91dG1fc291cmNlPWF0b2ZpbmFsJnV0bV9tZWRpdW09YXJlYS1kby1hbHVubyZ1dG1fY2FtcGFpZ249YnFtZWQtcG9ydGFzLWFiZXJ0YXMnOwoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIFBST0RVw4fDg08gwrcgY2FtYWRhIGRlIGRhZG9zIFN1cGFiYXNlIChhdG8tZmluYWwtZW5hbWVkKQogICBPIGZyb250IHJvZGEgbm8gV1AgY29tIGEgQU5PTiBLRVk7IHNlZ3JlZG9zIGUgdmFsaWRhw6fDo28gdml2ZW0KICAgbmFzIFJQQ3MgU0VDVVJJVFkgREVGSU5FUiAoZGIvMDAwMSArIGRiLzAwMDIpLiBBIHNlc3PDo28gw6kgbyBDUEYKICAgZW0gbG9jYWxTdG9yYWdlIChhZl9jcGYsIHBhZHLDo28gQm9sw6NvKTsgbyBib290IGhpZHJhdGEgbyBDQUNIRQogICB2aWEgZXN0YWRvX3BhcnRpY2lwYW50ZSBlIG9zIHJlbmRlcnMgY29udGludWFtIFPDjU5DUk9OT1MuCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoKCi8qIFJlc2dhdGUgZGUgY2xpcXVlIChwcm9kdcOnw6NvKTogc2UgYWxndW0gc2NyaXB0IGRvIHRlbWEgKGRlbGF5LUpTIGRvIFdQCiAgIFJvY2tldCBldGMuKSBlbmdvbGlyIG8gY2xpcXVlIG51bSBsaW5rIGludGVybm8sIG5hdmVnYW1vcyBtZXNtbyBhc3NpbS4KICAgU2UgYSBuYXZlZ2HDp8OjbyBwYWRyw6NvIGFjb250ZWNlciwgYSBww6FnaW5hIGRlc2NhcnJlZ2EgZSBvIHRpbWVyIG1vcnJlLiAqLwpkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKGUpewogIGlmIChlLmJ1dHRvbiAhPT0gMCB8fCBlLm1ldGFLZXkgfHwgZS5jdHJsS2V5IHx8IGUuc2hpZnRLZXkgfHwgZS5hbHRLZXkpIHJldHVybjsKICB2YXIgYSA9IGUudGFyZ2V0ICYmIGUudGFyZ2V0LmNsb3Nlc3QgPyBlLnRhcmdldC5jbG9zZXN0KCdhW2hyZWZdJykgOiBudWxsOwogIGlmICghYSB8fCBhLnRhcmdldCA9PT0gJ19ibGFuaycpIHJldHVybjsKICB2YXIgaHJlZiA9IGEuZ2V0QXR0cmlidXRlKCdocmVmJykgfHwgJyc7CiAgaWYgKCFocmVmIHx8IGhyZWYuY2hhckF0KDApID09PSAnIycgfHwgL15qYXZhc2NyaXB0Oi9pLnRlc3QoaHJlZikpIHJldHVybjsKICB0cnkgeyBpZiAoYS5vcmlnaW4gJiYgYS5vcmlnaW4gIT09IGxvY2F0aW9uLm9yaWdpbikgcmV0dXJuOyB9IGNhdGNoKHgpe30KICB2YXIgZGVzdGlubyA9IGEuaHJlZjsKICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7IGxvY2F0aW9uLmhyZWYgPSBkZXN0aW5vOyB9LCAzNTApOwp9LCB0cnVlKTsKZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihlKXsKICBpZiAoIWUuaXNUcnVzdGVkKSByZXR1cm47CiAgdmFyIGIgPSBlLnRhcmdldCAmJiBlLnRhcmdldC5jbG9zZXN0ID8gZS50YXJnZXQuY2xvc2VzdCgnYnV0dG9uW3R5cGU9InN1Ym1pdCJdJykgOiBudWxsOwogIGlmICghYiB8fCAhYi5mb3JtIHx8IGIuZGlzYWJsZWQpIHJldHVybjsKICB2YXIgZiA9IGIuZm9ybSwgdDAgPSBEYXRlLm5vdygpOwogIHNldFRpbWVvdXQoZnVuY3Rpb24oKXsKICAgIC8vIG8gc3VibWl0IHJlYWwgREVTVEUgY2xpcXVlIHJvZG91PyAoY29tcGFyYXIgY29tIG8gaW5zdGFudGUgZG8gY2xpcXVlOwogICAgLy8gYSB2ZXJzw6NvIGFudGlnYSBjb21wYXJhdmEgY29tICJhZ29yYSIgZSByZS1kaXNwYXJhdmEgVE9ETyBzdWJtaXQg4oCUIFJQQwogICAgLy8gZHVwbGEgZW0gY2FkYSBsb2dpbi9jYWRhc3RybywgbWFzY2FyYWRhIHBlbGEgaWRlbXBvdMOqbmNpYSBkbyBzZXJ2aWRvcikKICAgIGlmICgoZi5fX3VsdGltb1N1Ym1pdCB8fCAwKSA+PSB0MCkgcmV0dXJuOwogICAgaWYgKCFmLmlzQ29ubmVjdGVkKSByZXR1cm47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmx1eG8gasOhIGNvbmNsdWl1IGUgcmVtb3ZldSBvIGZvcm0KICAgIGlmIChmLmNoZWNrVmFsaWRpdHkgJiYgIWYuY2hlY2tWYWxpZGl0eSgpKSByZXR1cm47ICAgICAgIC8vIGNhbXBvIGZhbHRhbmRvOiBvIGJhbMOjbyBkbyBuYXZlZ2Fkb3IgZ3VpYQogICAgZi5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnc3VibWl0JywgeyBidWJibGVzOiB0cnVlLCBjYW5jZWxhYmxlOiB0cnVlIH0pKTsKICB9LCA0MDApOwp9LCB0cnVlKTsKCgovKiAtLS0tLS0tLS0tIGxlbWJyZXRlcyBkZSBhdWxhICguaWNzOiBHb29nbGUvQXBwbGUvT3V0bG9vaykgLS0tLS0tLS0tLSAqLwp2YXIgSUNPX1NJTk8gPSAnPHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj48cGF0aCBkPSJNMTggOGE2IDYgMCAxMC0xMiAwYzAgNy0zIDktMyA5aDE4cy0zLTItMy05Ii8+PHBhdGggZD0iTTEzLjcgMjFhMiAyIDAgMDEtMy40IDAiLz48L3N2Zz4nOwp2YXIgSUNPX1dBID0gJzxzdmcgd2lkdGg9IjE0IiBoZWlnaHQ9IjE0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9ImN1cnJlbnRDb2xvciIgYXJpYS1oaWRkZW49InRydWUiPjxwYXRoIGQ9Ik0xMiAyYTEwIDEwIDAgMDAtOC42IDE1LjFMMiAyMmw1LTEuM0ExMCAxMCAwIDEwMTIgMnptMCAxOC4yYy0xLjUgMC0zLS40LTQuMy0xLjJsLS4zLS4yLTMgLjguOC0yLjktLjItLjNBOC4yIDguMiAwIDExMTIgMjAuMnptNC42LTYuMWMtLjMtLjEtMS41LS43LTEuNy0uOC0uMi0uMS0uNC0uMS0uNi4xLS4yLjMtLjcuOC0uOCAxLS4xLjItLjMuMi0uNS4xYTYuNyA2LjcgMCAwMS0zLjMtMi45Yy0uMy0uNCAwLS41LjEtLjdsLjQtLjVjLjEtLjIuMS0uMyAwLS41bC0uOC0xLjljLS4yLS41LS40LS40LS42LS40aC0uNWMtLjIgMC0uNS4xLS43LjMtLjkuOS0xLjEgMi4yLS4yIDMuN2ExMSAxMSAwIDAwNC4zIDRjLjYuMyAxLjUuNyAyLjQuNi44LS4xIDEuNi0uNiAxLjktMS4yLjItLjUuMi0xIC4xLTEuMS0uMS0uMi0uMy0uMi0uNS0uM3oiLz48L3N2Zz4nOwoKLyogLS0tLS0tLS0tLSBhcHAgaW5zdGFsw6F2ZWwgKFBXQSkgLS0tLS0tLS0tLQogICBDYXJkIGRlIGluc3RhbGHDp8OjbyByZW1vdmlkbyBkbyBJbsOtY2lvIGEgcGVkaWRvIGRvIElnb3IgKDA2LzA4KS4gTyBtYW5pZmVzdAogICBzZWd1ZSBuYXMgcMOhZ2luYXMgKGluc3RhbMOhdmVsIHBlbG8gbWVudSBkbyBuYXZlZ2Fkb3IpOyBvIGxpc3RlbmVyIGFiYWl4bwogICBjb250aW51YSBzdXByaW1pbmRvIG8gYmFubmVyIGF1dG9tw6F0aWNvIGRlIGluc3RhbGHDp8OjbyBkbyBDaHJvbWUuICovCndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdiZWZvcmVpbnN0YWxscHJvbXB0JywgZnVuY3Rpb24oZSl7IGUucHJldmVudERlZmF1bHQoKTsgfSk7CgoKLyogLS0tLS0tLS0tLSBndWFyZGEgZG8gU2ltdWxhZG86IGF2aXNvIGFvIHNhaXIgZGEgcHJvdmEgLS0tLS0tLS0tLSAqLwp2YXIgcHJvdmFBdGl2YSA9IGZhbHNlOwpmdW5jdGlvbiBwcm92YUJlZm9yZVVubG9hZChlKXsgZS5wcmV2ZW50RGVmYXVsdCgpOyBlLnJldHVyblZhbHVlID0gJyc7IH0KZnVuY3Rpb24gbGlnYXJHdWFyZGFQcm92YSgpewogIHByb3ZhQXRpdmEgPSB0cnVlOwogIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdiZWZvcmV1bmxvYWQnLCBwcm92YUJlZm9yZVVubG9hZCk7Cn0KZnVuY3Rpb24gZGVzbGlnYXJHdWFyZGFQcm92YSgpewogIHByb3ZhQXRpdmEgPSBmYWxzZTsKICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignYmVmb3JldW5sb2FkJywgcHJvdmFCZWZvcmVVbmxvYWQpOwp9CmZ1bmN0aW9uIGd1YXJkYVByb3ZhTW9kYWwocHJvc3NlZ3Vpcil7CiAgdmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgZWwuY2xhc3NOYW1lID0gJ3NpbS1ndWFyZCc7CiAgZWwuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9InNnLWNhcmQiPicrCiAgICAnPGRpdiBjbGFzcz0ia2lja2VyIiBzdHlsZT0ibWFyZ2luLWJvdHRvbToxMnB4Ij5TaW11bGFkbyBlbSBhbmRhbWVudG88L2Rpdj4nKwogICAgJzxwIHN0eWxlPSJmb250LXNpemU6MTQuNXB4O2xpbmUtaGVpZ2h0OjEuNjtjb2xvcjp2YXIoLS1pbmstZGltKTttYXJnaW4tYm90dG9tOjhweCI+Vm9jw6ogZXN0w6Egbm8gbWVpbyBkbyBTaW11bGFkbyBGaW5hbC4gU2Ugc2FpciBkZXN0YSB0ZWxhLCA8YiBzdHlsZT0iY29sb3I6dmFyKC0taW5rKSI+byBjcm9uw7RtZXRybyBjb250aW51YSBjb3JyZW5kbzwvYj4gZSBhIHByb3ZhIHNlZ3VlIHZhbGVuZG86IGFzIHJlc3Bvc3RhcyBkYWRhcyBhdMOpIGFxdWkgZmljYW0gc2FsdmFzIG5hIHN1YSBjb250YS48L3A+JysKICAgICc8cCBzdHlsZT0iZm9udC1zaXplOjEzcHg7Y29sb3I6dmFyKC0taW5rLW11dGUpO21hcmdpbi1ib3R0b206MThweCI+U2FpYSBhcGVuYXMgc2UgZm9yIG5lY2Vzc8OhcmlvLiBQYXJhIGVudmlhciBhIHByb3ZhLCB1c2UgbyBib3TDo28gRmluYWxpemFyIHNpbXVsYWRvLjwvcD4nKwogICAgJzxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtnYXA6MTBweDtmbGV4LXdyYXA6d3JhcCI+JysKICAgICc8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWFtYmVyIGJ0bi1zbSIgaWQ9InNnRmljYXIiPkNvbnRpbnVhciBhIHByb3ZhPC9idXR0b24+JysKICAgICc8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWdob3N0IGJ0bi1zbSIgaWQ9InNnU2FpciI+U2FpciBtZXNtbyBhc3NpbTwvYnV0dG9uPjwvZGl2PjwvZGl2Pic7CiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlbCk7CiAgZWwucXVlcnlTZWxlY3RvcignI3NnRmljYXInKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCl7IGVsLnJlbW92ZSgpOyB9KTsKICBlbC5xdWVyeVNlbGVjdG9yKCcjc2dTYWlyJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpewogICAgZWwucmVtb3ZlKCk7IGRlc2xpZ2FyR3VhcmRhUHJvdmEoKTsgcHJvc3NlZ3VpcigpOwogIH0pOwp9CgovKiBVUkxzIGRhIGVzdHJ1dHVyYSBkZSBww6FnaW5hcyBubyBXUCAocGFkcsOjbyBCb2zDo286IGEgVVJMIG11ZGEgYW8gbmF2ZWdhcikgKi8KdmFyIEFGX1VSTFMgPSB3aW5kb3cuX19BRl9VUkxTIHx8IHsgbHA6Jy4vJywgY2FkYXN0cm86JyNjYWRhc3RybycsIGFjZXNzYXI6JyMnLCBhcmVhOicjJyB9OwoKLyogVkVSVElDQUwgKG11bHRpLW5pY2hvKTogbyBwdWJsaWNhZG9yIGluamV0YSBfX0FGX1BST1ZBIHBvciBkZXBsb3kuIEVOQU1FRCBlCiAgIFJldmFsaWRhIHJvZGFtIG8gTUVTTU8gYnVuZGxlLCBjYWRhIHVtIG5hIHN1YSBVUkwgZSBubyBzZXUgU3VwYWJhc2UuIFNlbQogICBpbmplw6fDo28gKGFycXVpdm8gbG9jYWwpLCBjYWkgbm8gRU5BTUVELiAqLwp2YXIgQUZfUFJPVkEgPSAod2luZG93Ll9fQUZfUFJPVkEgPT09ICdyZXZhbGlkYScpID8gJ3JldmFsaWRhJyA6ICdlbmFtZWQnOwovKiBLViBkbyBjYWRhc3RybyAoZWRpY2FvIGNpcnVyZ2ljYSAyMC8wOCwgc28gRU5BTUVEKSAqLwp2YXIgQ0FEX0tWX1BPUl9QUk9WQSA9IHsgZW5hbWVkOiAnaHR0cHM6Ly9ta3QuZXN0cmF0ZWdpYS5jb20vbWVkL3dwLWNvbnRlbnQvdXBsb2Fkcy9zaXRlcy82LzIwMjYvMDgvYXRvLWZpbmFsLWVuYW1lZC1jb21wYXJ0aWxoYXIud2VicCcgfTsKdmFyIENBRF9LViA9IENBRF9LVl9QT1JfUFJPVkFbQUZfUFJPVkFdIHx8ICcnOwovKiBNYXJjYSBwb3IgcHJvdmE6IHPDsyBvIHLDs3R1bG8gY3VydG8gdXNhZG8gbmFzIGZyYXNlcyBkZSBVSSAodMOtdHVsb3MgZSBkYXRhcwogICBkYXMgYXVsYXMgasOhIHbDqm0gcHJvbnRvcyBkZSBKT1JOQURBU1twcm92YV0pLiAqLwp2YXIgQlJBTkQgPSB7CiAgZW5hbWVkOiAgIHsgY3VydGE6J0VOQU1FRCcsICAgc3ViOidFTkFNRUQgwrcgMjAyNicsICAgICAgICAgIHRhZzonQXRvIEZpbmFsIMK3IEVOQU1FRCAyMDI2JywgICAgICAgICAgICAgIGluYXVnOidQcmVtb25pw6fDo28gRU5BTUVEIDIwMjYnIH0sCiAgcmV2YWxpZGE6IHsgY3VydGE6J1JldmFsaWRhJywgc3ViOidSZXZhbGlkYSDCtyBJTkVQIDIwMjYuMicsIHRhZzonQXRvIEZpbmFsIMK3IFJldmFsaWRhIElORVAgMjAyNi4yJywgICAgICBpbmF1ZzonUHJlbW9uacOnw6NvIFJldmFsaWRhIElORVAgMjAyNi4yJyB9Cn07CnZhciBBRl9CUkFORCA9IEJSQU5EW0FGX1BST1ZBXSB8fCBCUkFORC5lbmFtZWQ7CgovKiBJbmRpY2HDp8OjbzogY2FwdHVyYSA\/cmVmPSBlbSBRVUFMUVVFUiBww6FnaW5hIGUgZ3VhcmRhIGF0w6kgbyBjYWRhc3RybyAqLwp0cnkgewogIHZhciBfbXJlZiA9IGxvY2F0aW9uLnNlYXJjaC5tYXRjaCgvWz8mXXJlZj0oW2EtejAtOV17NiwxNn0pL2kpOwogIGlmIChfbXJlZikgbG9jYWxTdG9yYWdlLnNldEl0ZW0oTFNQKydyZWYnLCBfbXJlZlsxXS50b0xvd2VyQ2FzZSgpKTsKfSBjYXRjaChlKXt9Ci8qIFN1cGFiYXNlIHBvciBkZXBsb3k6IG8gcHVibGljYWRvciBpbmpldGEgX19BRl9TVVBBX1VSTC9fX0FGX0FOT04gY29uZm9ybWUgbwogICB2ZXJ0aWNhbCAoRU5BTUVEIGUgUmV2YWxpZGEgdMOqbSBQUk9KRVRPUyBTRVBBUkFET1MpLiBGYWxsYmFjayA9IEVOQU1FRCwgcHJvCiAgIGFycXVpdm8gbG9jYWwgYWJyaXIgc2VtIGNvbmZpZy4gKi8KdmFyIFNVUEFfVVJMID0gd2luZG93Ll9fQUZfU1VQQV9VUkwgfHwgJ2h0dHBzOi8vbHNuZGx3YWRmaXJudWx6bXFrZXMuc3VwYWJhc2UuY28nOwp2YXIgU1VQQV9BTk9OID0gd2luZG93Ll9fQUZfQU5PTiB8fCAnZXlKaGJHY2lPaUpJVXpJMU5pSXNJblI1Y0NJNklrcFhWQ0o5LmV5SnBjM01pT2lKemRYQmhZbUZ6WlNJc0luSmxaaUk2SW14emJtUnNkMkZrWm1seWJuVnNlbTF4YTJWeklpd2ljbTlzWlNJNkltRnViMjRpTENKcFlYUWlPakUzT0RVM056UXpNakFzSW1WNGNDSTZNakV3TVRNMU1ETXlNSDAuQ1FVdEFiSHVvWGlNaURlcy03ekpoTmR4RkZBVEpDdEhab2U3eE9ubnhUZyc7CgovKiA9PT0gQ1JNOiBlc3BlbGhvIGRhIGluc2NyaWNhbyBwcm8gU0ZNQyB2aWEgVmVyc28gKGFkbWluLWFqYXgpLiBOYW8gYmxvcXVlaWEgbyBmbHV4byBkbyBhbHVuby4KICAgZG9uZSgpIG5hdmVnYSBuYSBob3JhIChsb2NhdGlvbi5ocmVmKSAtPiBvIFBPU1QgdGVtIHF1ZSBzYWlyIFNJTkNST05PIGNvbSBrZWVwYWxpdmU7CiAgIHBvciBpc3NvIGEgZ2VvIHJlc29sdmUgbm8gYm9vdCAocGFkcmFvIGRvIGZvcm0gY2xhc3NpY28pLCBuYW8gbm8gc3VibWl0LiA9PT0gKi8KdmFyIF9fYWZTZm1jVmVyc28gPSAzOwp2YXIgX19hZlNmbWNHZW8gPSB7IGNpdHk6ICcnLCByZWdpb246ICcnIH07CnRyeSB7CiAgZmV0Y2goJ2h0dHBzOi8vZXh0cmVtZS1pcC1sb29rdXAuY29tL2pzb24vP2tleT1rcmZHSHpyNzA1VVRoTW9qeDNhUCcpCiAgICAudGhlbihmdW5jdGlvbihyKXsgcmV0dXJuIHIuanNvbigpOyB9KQogICAgLnRoZW4oZnVuY3Rpb24oZCl7CiAgICAgIF9fYWZTZm1jR2VvLmNpdHkgPSAoZCAmJiBkLmNpdHkpID8gZC5jaXR5IDogJyc7CiAgICAgIF9fYWZTZm1jR2VvLnJlZ2lvbiA9IChkICYmIGQucmVnaW9uKSA\/IGQucmVnaW9uIDogJyc7CiAgICB9KQogICAgLmNhdGNoKGZ1bmN0aW9uKCl7fSk7Cn0gY2F0Y2goZSl7fQpmdW5jdGlvbiBhZlNmbWNVdG0oKXsKICB2YXIgb3V0ID0geyB1dG1fc291cmNlOicnLCB1dG1fbWVkaXVtOicnLCB1dG1fY2FtcGFpZ246JycsIHV0bV90ZXJtOicnLCB1dG1fY29udGVudDonJyB9OwogIHZhciBrcyA9IE9iamVjdC5rZXlzKG91dCk7CiAgdmFyIGFueSA9IGZhbHNlOwogIHRyeSB7CiAgICB2YXIgcXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpOwogICAga3MuZm9yRWFjaChmdW5jdGlvbihrKXsgdmFyIHYgPSBxcy5nZXQoayk7IGlmICh2KSB7IG91dFtrXSA9IHY7IGFueSA9IHRydWU7IH0gfSk7CiAgfSBjYXRjaChlKXt9CiAgaWYgKGFueSkgcmV0dXJuIG91dDsKICB2YXIgcmF3ID0gbnVsbDsKICB0cnkgewogICAgdmFyIHJvdyA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOyAnKS5maW5kKGZ1bmN0aW9uKHIpeyByZXR1cm4gci5pbmRleE9mKCdlc3RyYXRlZ2lhX3V0bT0nKSA9PT0gMDsgfSk7CiAgICBpZiAocm93KSByYXcgPSBkZWNvZGVVUklDb21wb25lbnQocm93LnN1YnN0cmluZyhyb3cuaW5kZXhPZignPScpICsgMSkpOwogIH0gY2F0Y2goZSl7fQogIGlmICghcmF3KSB7IHRyeSB7IHJhdyA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXN0cmF0ZWdpYV91dG0nKTsgfSBjYXRjaChlKXt9IH0KICBpZiAocmF3KSB7CiAgICB0cnkgewogICAgICB2YXIgcCA9IEpTT04ucGFyc2UocmF3KTsKICAgICAgaWYgKHAgJiYgcC50cyAmJiBwLnYgJiYgKERhdGUubm93KCkgLSBwLnRzKSA8PSA0OCozNmU1KSB7CiAgICAgICAga3MuZm9yRWFjaChmdW5jdGlvbihrKXsgaWYgKHAudltrXSkgb3V0W2tdID0gcC52W2tdOyB9KTsKICAgICAgfQogICAgfSBjYXRjaChlKXt9CiAgfQogIHJldHVybiBvdXQ7Cn0KZnVuY3Rpb24gYWZTZm1jRW52aWFyKCl7CiAgdmFyIGcgPSBmdW5jdGlvbihpZCl7IHZhciBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsgcmV0dXJuIChlbCAmJiBlbC52YWx1ZSkgPyBlbC52YWx1ZSA6ICcnOyB9OwogIHZhciB1dG0gPSBhZlNmbWNVdG0oKTsKICB2YXIgYXJlYSA9ICcnOwogIHRyeSB7IGFyZWEgPSAod2luZG93Ll9fQUZfVVJMUyAmJiB3aW5kb3cuX19BRl9VUkxTLmFyZWEpID8gd2luZG93Ll9fQUZfVVJMUy5hcmVhLnNwbGl0KCc\/JylbMF0gOiAnJzsgfSBjYXRjaChlKXt9CiAgdmFyIGYgPSB7CiAgICBOb21lX0NvbXBsZXRvOiBnKCdmTm9tZScpLAogICAgRW1haWw6IGcoJ2ZFbWFpbCcpLAogICAgVGVsZWZvbmU6IGcoJ2ZXaGF0cycpLAogICAgQW5vX2RlX0Zvcm1hdHVyYTogZygnZk1vbWVudG8nKSwKICAgIFBhZ2luYV9PcmlnZW06IHdpbmRvdy5sb2NhdGlvbi5ocmVmLAogICAgdXRtX3NvdXJjZTogdXRtLnV0bV9zb3VyY2UsIHV0bV9tZWRpdW06IHV0bS51dG1fbWVkaXVtLCB1dG1fY2FtcGFpZ246IHV0bS51dG1fY2FtcGFpZ24sCiAgICB1dG1fdGVybTogdXRtLnV0bV90ZXJtLCB1dG1fY29udGVudDogdXRtLnV0bV9jb250ZW50LAogICAgY2hhdmVfZGU6ICcwMV9FTUVEX0xFQURTX1RPVEFJUycsCiAgICBtaWQ6ICc1MTUwMDkwMTgnLAogICAgQ29yaW5nYV8wMjogYXJlYSwKICAgIEludGVyZXNzZV9Db25jdXJzbzogJ2VtZWQnLAogICAgd2VsY29tZTogJ29mZicsCiAgICBJbnRlcmVzc2VfQXJlYTogJ0VNRURfQXJlYScsCiAgICBDb3JpbmdhXzAxOiAnbGFuZGluZy1wYWdlJywKICAgIE1vZG9fZGVfZW50cmFkYTogJ2xhbmRpbmctcGFnZScsCiAgICBJbnRlcmVzc2VfRXZlbnRvOiAod2luZG93Ll9fQUZfUFJPVkEgPT09ICdyZXZhbGlkYScpID8gJ0F0byBGaW5hbCBSZXZhbGlkYSBJTkVQIDIwMjYuMicgOiAnQXRvIEZpbmFsIEVOQU1FRCAyMDI2JywKICAgIGRldl96YXBwOiAnb2ZmJywKICAgIENpZGFkZV9kZV9PcmlnZW1fZG9fSVA6ICcnLAogICAgRXN0YWRvX2RlX09yaWdlbV9kb19JUDogJycKICB9OwogIGlmICghZi5FbWFpbCkgcmV0dXJuOwogIGYuQ2lkYWRlX2RlX09yaWdlbV9kb19JUCA9IF9fYWZTZm1jR2VvLmNpdHk7CiAgZi5Fc3RhZG9fZGVfT3JpZ2VtX2RvX0lQID0gX19hZlNmbWNHZW8ucmVnaW9uOwogIHZhciBsZWFkID0gT2JqZWN0LmtleXMoZikubWFwKGZ1bmN0aW9uKGspeyByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KGspICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KGZba10pOyB9KS5qb2luKCcmJyk7CiAgdmFyIGNvcnBvID0gJ2FjdGlvbj1hamF4X3N1Ym1pdF9mb3JtX25ldyZsZWFkPScgKyBlbmNvZGVVUklDb21wb25lbnQobGVhZCk7CiAgZmV0Y2goJ2h0dHBzOi8vbWt0LmVzdHJhdGVnaWEuY29tL21lZC93cC1hZG1pbi9hZG1pbi1hamF4LnBocCcsIHsKICAgIG1ldGhvZDogJ1BPU1QnLAogICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD1VVEYtOCcgfSwKICAgIGJvZHk6IGNvcnBvLAogICAga2VlcGFsaXZlOiB0cnVlCiAgfSkuY2F0Y2goZnVuY3Rpb24oKXt9KTsKfQovKiBFdmVudG8gZGUgY29udmVyc2FvIHBybyBHVE0gKEdUTS1ONU43Skg4KTogYSBiYXRlcmlhIGRlIExlYWQgKE1ldGEgUGl4ZWwsIEdBNAogICBnZW5lcmF0ZV9sZWFkLCBCaW5nKSBkaXNwYXJhIG5vIGV2ZW50byBjdXN0b21pemFkbyAnZm9ybV9zdWJtaXQnIGVtIHF1YWxxdWVyIHBhZ2luYQogICBkbyBta3QuIFJlcGxpY2EgZG8gcHVzaEZvcm1TdWJtaXRUb0RhdGFMYXllciBkbyBmb3JtIGNsYXNzaWNvICsgdXNlckRhdGEuKiAoY2FkZWlhCiAgIHByaW1hcmlhIGRvIGFkdmFuY2VkIG1hdGNoaW5nKSArIGlucHV0cyBvY3VsdG9zICNlbWFpbC8jZmlyc3RfbmFtZS8jcGhvbmUgKGNhZGVpYSBkZQogICBmYWxsYmFjayBkb3MgbWFjcm9zKS4gZG9uZSgpIG5hdmVnYSBuYSBob3JhLCBlbnRhbyBzZWd1cmFtb3MgYSBuYXZlZ2FjYW8gbm8KICAgZXZlbnRDYWxsYmFjayBjb20gdGV0byBkZSA5MDBtcyBwcm9zIHBpeGVscyBzYWlyZW0uICovCmZ1bmN0aW9uIGFmR3RtTGVhZChjYil7CiAgdmFyIGZpbSA9IGZhbHNlOwogIHZhciBnbyA9IGZ1bmN0aW9uKCl7IGlmIChmaW0pIHJldHVybjsgZmltID0gdHJ1ZTsgdHJ5IHsgY2IoKTsgfSBjYXRjaChlKXt9IH07CiAgdHJ5IHsKICAgIHZhciBnID0gZnVuY3Rpb24oaWQpeyB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7IHJldHVybiAoZWwgJiYgZWwudmFsdWUpID8gZWwudmFsdWUgOiAnJzsgfTsKICAgIHZhciBub21lID0gZygnZk5vbWUnKSwgZW1haWwgPSBnKCdmRW1haWwnKSwgdGVsID0gZygnZldoYXRzJyk7CiAgICB2YXIgcGFydGVzID0gbm9tZS50cmltKCkuc3BsaXQoL1xzKy8pOwogICAgdmFyIHByaW1laXJvID0gcGFydGVzLmxlbmd0aCA\/IHBhcnRlc1swXS50b0xvd2VyQ2FzZSgpIDogJyc7CiAgICB2YXIgdWx0aW1vID0gcGFydGVzLmxlbmd0aCA+IDEgPyBwYXJ0ZXNbcGFydGVzLmxlbmd0aCAtIDFdLnRvTG93ZXJDYXNlKCkgOiAnJzsKICAgIHZhciBtayA9IGZ1bmN0aW9uKGlkLCB2YWwpewogICAgICBpZiAoIXZhbCkgcmV0dXJuOwogICAgICB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7CiAgICAgIGlmICghZWwpIHsgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpOyBlbC50eXBlID0gJ2hpZGRlbic7IGVsLmlkID0gaWQ7IGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZWwpOyB9CiAgICAgIGVsLnZhbHVlID0gdmFsOwogICAgfTsKICAgIG1rKCdmaXJzdF9uYW1lJywgbm9tZSk7IG1rKCdlbWFpbCcsIGVtYWlsKTsgbWsoJ3Bob25lJywgdGVsKTsKICAgIHdpbmRvdy5kYXRhTGF5ZXIgPSB3aW5kb3cuZGF0YUxheWVyIHx8IFtdOwogICAgd2luZG93LmRhdGFMYXllci5wdXNoKHsKICAgICAgZXZlbnQ6ICdmb3JtX3N1Ym1pdCcsCiAgICAgIGV2ZW50TW9kZWw6IHsKICAgICAgICBmb3JtX2lkOiAnZm9ybXNfbGF5b3V0JywKICAgICAgICBmb3JtX25hbWU6IG51bGwsCiAgICAgICAgZm9ybV9kZXN0aW5hdGlvbjogd2luZG93LmxvY2F0aW9uLmhyZWYsCiAgICAgICAgZm9ybV9sZW5ndGg6IDUsCiAgICAgICAgZm9ybV9zdWJtaXRfdGV4dDogJ0luc2NyZXZlciBlIGVudHJhcicsCiAgICAgICAgZW1haWw6IGVtYWlsCiAgICAgIH0sCiAgICAgIHVzZXJEYXRhOiB7IGVtYWlsOiBlbWFpbC50b0xvd2VyQ2FzZSgpLCBmaXJzdE5hbWU6IHByaW1laXJvLCBsYXN0TmFtZTogdWx0aW1vLCBwaG9uZTogdGVsIH0sCiAgICAgIGVtYWlsOiBlbWFpbCwKICAgICAgZXZlbnRDYWxsYmFjazogZ28sCiAgICAgIGV2ZW50VGltZW91dDogNzAwCiAgICB9KTsKICB9IGNhdGNoKGUpeyBnbygpOyB9CiAgc2V0VGltZW91dChnbywgOTAwKTsKfQpmdW5jdGlvbiBzYlJwYyhmbiwgYm9keSl7CiAgcmV0dXJuIGZldGNoKFNVUEFfVVJMICsgJy9yZXN0L3YxL3JwYy8nICsgZm4sIHsKICAgIG1ldGhvZDogJ1BPU1QnLAogICAgaGVhZGVyczogeyAnYXBpa2V5JzogU1VQQV9BTk9OLCAnQXV0aG9yaXphdGlvbic6ICdCZWFyZXIgJyArIFNVUEFfQU5PTiwgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LAogICAgYm9keTogSlNPTi5zdHJpbmdpZnkoYm9keSB8fCB7fSkKICB9KS50aGVuKGZ1bmN0aW9uKHIpeyByZXR1cm4gci5qc29uKCk7IH0pOwp9CmZ1bmN0aW9uIHNiU2VsZWN0KHBhdGgpewogIHJldHVybiBmZXRjaChTVVBBX1VSTCArICcvcmVzdC92MS8nICsgcGF0aCwgewogICAgaGVhZGVyczogeyAnYXBpa2V5JzogU1VQQV9BTk9OLCAnQXV0aG9yaXphdGlvbic6ICdCZWFyZXIgJyArIFNVUEFfQU5PTiB9CiAgfSkudGhlbihmdW5jdGlvbihyKXsgcmV0dXJuIHIuanNvbigpOyB9KTsKfQoKLyogY2FjaGUgaGlkcmF0YWRvIG5vIGJvb3Q7IG9zIHJlbmRlcnMgbGVlbSBkYXF1aSBkZSBmb3JtYSBzw61uY3JvbmEgKi8KdmFyIENBQ0hFID0gewogIHVzZXI6IG51bGwsICAgICAgICAgIC8vIHtub21lLCBlbWFpbCwgcHJvdmEsIGNwZn0KICBjaGVja2luczoge30sICAgICAgICAvLyBldklkIC0+IHthb192aXZvLCB0c30KICByZXNwb3N0YXM6IHt9LCAgICAgICAvLyBxdWVzdGFvX2lkIC0+IHtldmVudG9faWQsIGxldHJhLCBhY2VydG91LCBjb3JyZXRhLCBjb21lbnRhcmlvfQogIHF1ZXN0b2VzOiB7fSwgICAgICAgIC8vIGV2SWQgLT4gW3tpZCwgb3JkZW0sIGFyZWEsIHEsIGFsdHN9XQogIHNpbVJlczogbnVsbCwgICAgICAgIC8vIHthY2VydG9zLCB0b3RhbCwgcmVzcG9zdGFzfQogIHNpbVByb2c6IG51bGwsICAgICAgIC8vIHtpbmljaWFkb19lbSwgcmVzcG9zdGFzLCBtYXJjYWRhc30KICByYW5raW5nOiBudWxsCn07Ci8qIFNlc3PDo28gUkVTSUxJRU5URTogbyBTYWZhcmkgZG8gaVBob25lIChtb2RvIHByaXZhZG8gLyBibG9xdWVpbyBkZSBjb29raWVzKQogICBwb2RlIHJlY3VzYXIgbyBsb2NhbFN0b3JhZ2UuIFNlbSBmYWxsYmFjaywgYSBzZXNzw6NvIG1vcnJlIG5hIHRyb2NhIGRlCiAgIHDDoWdpbmEgZSBvIGFsdW5vIGZpY2EgcHJlc28gbm8gbGHDp28gYWNlc3NhciDihpIgw6FyZWEg4oaSIGFjZXNzYXIuICovCnZhciBfc2Vzc2FvTWVtID0gbnVsbDsKZnVuY3Rpb24gX2Nvb2tpZUdldChuKXsKICB2YXIgbSA9IGRvY3VtZW50LmNvb2tpZS5tYXRjaCgnKF58OyApJyArIG4gKyAnPShbXjtdKiknKTsKICByZXR1cm4gbSA\/IGRlY29kZVVSSUNvbXBvbmVudChtWzJdKSA6IG51bGw7Cn0KZnVuY3Rpb24gX2Nvb2tpZVNldChuLCB2LCBkaWFzKXsKICB0cnkgewogICAgZG9jdW1lbnQuY29va2llID0gbiArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2KSArICc7cGF0aD0vbWVkL2F0by1maW5hbC1lbmFtZWQvO21heC1hZ2U9JyArCiAgICAgIChkaWFzID8gZGlhcyAqIDg2NDAwIDogMCkgKyAnO1NhbWVTaXRlPUxheCcgKyAobG9jYXRpb24ucHJvdG9jb2wgPT09ICdodHRwczonID8gJztTZWN1cmUnIDogJycpOwogIH0gY2F0Y2goZSl7fQp9CmZ1bmN0aW9uIHNlc3Nhb1NldChjcGYpewogIF9zZXNzYW9NZW0gPSBjcGY7CiAgdHJ5IHsgbG9jYWxTdG9yYWdlLnNldEl0ZW0oTFNQKydjcGYnLCBjcGYpOyB9IGNhdGNoKGUpe30KICBfY29va2llU2V0KExTUCsnY3BmJywgY3BmLCAzMCk7Cn0KZnVuY3Rpb24gc2Vzc2FvTGltcGEoKXsKICBfc2Vzc2FvTWVtID0gbnVsbDsKICB0cnkgeyBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShMU1ArJ2NwZicpOyB9IGNhdGNoKGUpe30KICBfY29va2llU2V0KExTUCsnY3BmJywgJycsIDApOwp9CmZ1bmN0aW9uIGNwZlNhbHZvKCl7CiAgdmFyIHYgPSBudWxsOwogIHRyeSB7IHYgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShMU1ArJ2NwZicpOyB9IGNhdGNoKGUpe30KICBpZiAoIXYpIHYgPSBfY29va2llR2V0KExTUCsnY3BmJyk7CiAgaWYgKCF2KSB2ID0gX3Nlc3Nhb01lbTsKICBpZiAodikgeyBfc2Vzc2FvTWVtID0gdjsgdHJ5IHsgbG9jYWxTdG9yYWdlLnNldEl0ZW0oTFNQKydjcGYnLCB2KTsgfSBjYXRjaChlKXt9IH0KICByZXR1cm4gdjsKfQpmdW5jdGlvbiBhcm1hemVuYW1lbnRvT2soKXsKICB0cnkgeyBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnX190JywgJzEnKTsgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ19fdCcpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaChlKXsgcmV0dXJuIGZhbHNlOyB9Cn0KCmZ1bmN0aW9uIGhpZHJhdGFyKCl7CiAgdmFyIGNwZiA9IGNwZlNhbHZvKCk7CiAgaWYgKCFjcGYpIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpOwogIHJldHVybiBQcm9taXNlLmFsbChbCiAgICBzYlJwYygnZXN0YWRvX3BhcnRpY2lwYW50ZScsIHsgcF9jcGY6IGNwZiB9KSwKICAgIHNiU2VsZWN0KCdxdWl6X3F1ZXN0b2VzP3NlbGVjdD1pZCxldmVudG9faWQsb3JkZW0sYXJlYSxlbnVuY2lhZG8sYWx0ZXJuYXRpdmFzJm9yZGVyPW9yZGVtJykKICBdKS50aGVuKGZ1bmN0aW9uKHJlcyl7CiAgICB2YXIgZXN0ID0gcmVzWzBdLCBxcyA9IHJlc1sxXTsKICAgIGlmICghZXN0IHx8IGVzdC5zdGF0dXMgIT09ICdvaycpIHJldHVybiBmYWxzZTsKICAgIENBQ0hFLnVzZXIgPSB7IG5vbWU6IGVzdC5ub21lLCBlbWFpbDogZXN0LmVtYWlsLCBwcm92YTogZXN0LnByb3ZhLCBjcGY6IGNwZiB9OwogICAgQ0FDSEUucmVmQ29kZSA9IGVzdC5yZWZfY29kZSB8fCAnJzsKICAgIENBQ0hFLmluZGljYWNvZXMgPSBlc3QuaW5kaWNhY29lcyB8fCB7IHZhbGlkYXM6IDAsIHBlbmRlbnRlczogMCwgbGlzdGE6IFtdIH07CiAgICBDQUNIRS5jaGVja2lucyA9IHt9OwogICAgT2JqZWN0LmtleXMoZXN0LmNoZWNraW5zIHx8IHt9KS5mb3JFYWNoKGZ1bmN0aW9uKGV2KXsKICAgICAgQ0FDSEUuY2hlY2tpbnNbZXZdID0geyBhb1Zpdm86IGVzdC5jaGVja2luc1tldl0uYW9fdml2bywgdHM6IGVzdC5jaGVja2luc1tldl0udHMgKiAxMDAwIH07CiAgICB9KTsKICAgIENBQ0hFLnJlc3Bvc3RhcyA9IHt9OwogICAgKGVzdC5yZXNwb3N0YXMgfHwgW10pLmZvckVhY2goZnVuY3Rpb24ocil7IENBQ0hFLnJlc3Bvc3Rhc1tyLnF1ZXN0YW9faWRdID0gcjsgfSk7CiAgICBDQUNIRS5zaW1SZXMgPSBlc3Quc2ltdWxhZG9fcmVzdWx0IHx8IG51bGw7CiAgICBDQUNIRS5zaW1Qcm9nID0gZXN0LnNpbXVsYWRvX3Byb2dyZXNzIHx8IG51bGw7CiAgICBDQUNIRS5xdWVzdG9lcyA9IHt9OwogICAgKEFycmF5LmlzQXJyYXkocXMpID8gcXMgOiBbXSkuZm9yRWFjaChmdW5jdGlvbihyb3cpewogICAgICAoQ0FDSEUucXVlc3RvZXNbcm93LmV2ZW50b19pZF0gPSBDQUNIRS5xdWVzdG9lc1tyb3cuZXZlbnRvX2lkXSB8fCBbXSkucHVzaCh7CiAgICAgICAgaWQ6IHJvdy5pZCwgb3JkZW06IHJvdy5vcmRlbSwgYXJlYTogcm93LmFyZWEsIHE6IHJvdy5lbnVuY2lhZG8sIGFsdHM6IHJvdy5hbHRlcm5hdGl2YXMKICAgICAgfSk7CiAgICB9KTsKICAgIHJldHVybiB0cnVlOwogIH0pOwp9CgovKiBzdG9yZTogTUVTTUEgaW50ZXJmYWNlIHPDrW5jcm9uYSBkbyBwcm90w7N0aXBvLCBzZXJ2aWRhIHBlbG8gQ0FDSEUgKi8KdmFyIHN0b3JlID0gewogIF9rOiBmdW5jdGlvbihrKXsgcmV0dXJuIExTUCArIGs7IH0sCiAgZ2V0OiBmdW5jdGlvbihrLCBmYil7IHRyeSB7IHZhciB2ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5fayhrKSk7IHJldHVybiB2ID8gSlNPTi5wYXJzZSh2KSA6IChmYj09PXVuZGVmaW5lZD8gbnVsbDogZmIpOyB9IGNhdGNoKGUpeyByZXR1cm4gKGZiPT09dW5kZWZpbmVkPyBudWxsOiBmYik7IH0gfSwKICBzZXQ6IGZ1bmN0aW9uKGssIHYpeyB0cnkgeyBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLl9rKGspLCBKU09OLnN0cmluZ2lmeSh2KSk7IH0gY2F0Y2goZSl7fSB9LAoKICBzZXNzaW9uOiBmdW5jdGlvbigpeyByZXR1cm4gY3BmU2Fsdm8oKTsgfSwKICBsb2dvdXQ6IGZ1bmN0aW9uKCl7IHNlc3Nhb0xpbXBhKCk7IH0sCiAgbWU6IGZ1bmN0aW9uKCl7IHJldHVybiBDQUNIRS51c2VyOyB9LAoKICBjaGVja2luczogZnVuY3Rpb24oKXsgcmV0dXJuIENBQ0hFLmNoZWNraW5zOyB9LAoKICAvLyBtaXNzw6NvICJjdW1wcmlkYSIgPSBUT0RBUyBhcyBxdWVzdMO1ZXMgZG8gZGlhIHJlc3BvbmRpZGFzIG5vIHNlcnZpZG9yCiAgbWlzc29lczogZnVuY3Rpb24oKXsKICAgIHZhciBvdXQgPSB7fTsKICAgIE9iamVjdC5rZXlzKENBQ0hFLnF1ZXN0b2VzKS5mb3JFYWNoKGZ1bmN0aW9uKGV2KXsKICAgICAgdmFyIHFzID0gQ0FDSEUucXVlc3RvZXNbZXZdOwogICAgICBpZiAoIXFzLmxlbmd0aCkgcmV0dXJuOwogICAgICB2YXIgcmVzcCA9IHFzLmZpbHRlcihmdW5jdGlvbihxKXsgcmV0dXJuIENBQ0hFLnJlc3Bvc3Rhc1txLmlkXTsgfSk7CiAgICAgIGlmIChyZXNwLmxlbmd0aCA9PT0gcXMubGVuZ3RoKSB7CiAgICAgICAgb3V0W2V2XSA9IHsKICAgICAgICAgIGFjZXJ0b3M6IHJlc3AuZmlsdGVyKGZ1bmN0aW9uKHEpeyByZXR1cm4gQ0FDSEUucmVzcG9zdGFzW3EuaWRdLmFjZXJ0b3U7IH0pLmxlbmd0aCwKICAgICAgICAgIHRvdGFsOiBxcy5sZW5ndGgsCiAgICAgICAgICB0czogMAogICAgICAgIH07CiAgICAgIH0KICAgIH0pOwogICAgcmV0dXJuIG91dDsKICB9LAoKICAvLyBub3RhICUgZG8gU2ltdWxhZG8gRmluYWwgKHJlc3VsdGFkbyBkbyBzZXJ2aWRvcikKICBzaW11bGFkbzogZnVuY3Rpb24oKXsKICAgIGlmICghQ0FDSEUuc2ltUmVzIHx8ICFDQUNIRS5zaW1SZXMudG90YWwpIHJldHVybiBudWxsOwogICAgcmV0dXJuIHsgbm90YTogTWF0aC5yb3VuZCgxMDAgKiBDQUNIRS5zaW1SZXMuYWNlcnRvcyAvIENBQ0hFLnNpbVJlcy50b3RhbCkgfTsKICB9Cn07CgovKiAtLS0tLS0tLS0tLS0tLS0tIHV0aWxpZGFkZXMgLS0tLS0tLS0tLS0tLS0tLSAqLwpmdW5jdGlvbiAkKHMsIGVsKXsgcmV0dXJuIChlbHx8ZG9jdW1lbnQpLnF1ZXJ5U2VsZWN0b3Iocyk7IH0KZnVuY3Rpb24gJCQocywgZWwpeyByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoKGVsfHxkb2N1bWVudCkucXVlcnlTZWxlY3RvckFsbChzKSk7IH0KLyogZXNjIGVzY2FwYSBUQU1Cw4lNIGFzcGFzICgiICcpOiBhIHZhcmlhbnRlIGFudGlnYSB0ZXh0Q29udGVudC0+aW5uZXJIVE1MIHPDswogICBlc2NhcGF2YSAmIDwgPiwgZW50w6NvIFVSTC9ub21lIGludGVycG9sYWRvIGRlbnRybyBkZSB1bSBhdHJpYnV0byAoc3JjPSIuLiIsCiAgIGhyZWY9Ii4uIikgcG9kaWEgcXVlYnJhciBvIGF0cmlidXRvIGUgcGxhbnRhciBvbi4uLj0gKFhTUyB2aWEgbWlkaWFIVE1MIGUgdmlhCiAgIGxldHJhIGRlIGFsdGVybmF0aXZhKS4gQXVkaXRvcmlhIDExLzA4LiAqLwpmdW5jdGlvbiBlc2Mocyl7IHJldHVybiBTdHJpbmcocz09bnVsbD8nJzpzKS5yZXBsYWNlKC9bJjw+IiddL2csIGZ1bmN0aW9uKGMpewogIHJldHVybiB7JyYnOicmYW1wOycsJzwnOicmbHQ7JywnPic6JyZndDsnLCciJzonJnF1b3Q7JywiJyI6JyYjMzk7J31bY107IH0pOyB9CmZ1bmN0aW9uIHRvYXN0KG1zZyl7IHZhciB0PSQoJyN0b2FzdCcpOyBpZighdCkgcmV0dXJuOyB0LnRleHRDb250ZW50PW1zZzsgdC5jbGFzc0xpc3QuYWRkKCdzaG93Jyk7IGNsZWFyVGltZW91dCh0b2FzdC5fdCk7IHRvYXN0Ll90PXNldFRpbWVvdXQoZnVuY3Rpb24oKXsgdC5jbGFzc0xpc3QucmVtb3ZlKCdzaG93Jyk7IH0sIDMyMDApOyB9CmZ1bmN0aW9uIGRhdGFCUihpc28peyB2YXIgcD1pc28uc3BsaXQoJy0nKTsgcmV0dXJuIHBbMl0rJy8nK3BbMV07IH0KdmFyIE1FU0VTID0gWydKQU4nLCdGRVYnLCdNQVInLCdBQlInLCdNQUknLCdKVU4nLCdKVUwnLCdBR08nLCdTRVQnLCdPVVQnLCdOT1YnLCdERVonXTsKdmFyIE1FU0VTX0ZVTEwgPSBbJ0phbmVpcm8nLCdGZXZlcmVpcm8nLCdNYXLDp28nLCdBYnJpbCcsJ01haW8nLCdKdW5obycsJ0p1bGhvJywnQWdvc3RvJywnU2V0ZW1icm8nLCdPdXR1YnJvJywnTm92ZW1icm8nLCdEZXplbWJybyddOwovKiBhY2VpdGEgL2xpdmUvSUQsIHlvdXR1LmJlL0lELCAvZW1iZWQvSUQgRSB3YXRjaD92PUlEIChhIEF1bGEgSW5hdWd1cmFsIHZlaW8KICAgbm8gZm9ybWF0byB3YXRjaD92PSwgcXVlIGNhw61hIGVtICJ3YXRjaCIgZSBxdWVicmF2YSBhIHRodW1iKSAqLwpmdW5jdGlvbiB5dFRodW1iKHVybCl7CiAgaWYgKCF1cmwpIHJldHVybiBudWxsOwogIHZhciBtID0gdXJsLm1hdGNoKC9bPyZddj0oW1x3LV17Nix9KS8pIHx8IHVybC5tYXRjaCgvXC8oPzpsaXZlfGVtYmVkKVwvKFtcdy1dezYsfSkvKSB8fCB1cmwubWF0Y2goL3lvdXR1XC5iZVwvKFtcdy1dezYsfSkvKTsKICB2YXIgaWQgPSBtID8gbVsxXSA6IHVybC5zcGxpdCgnLycpLnBvcCgpLnNwbGl0KCc\/JylbMF07CiAgcmV0dXJuICdodHRwczovL2kueXRpbWcuY29tL3ZpLycraWQrJy9ocWRlZmF1bHQuanBnJzsKfQpmdW5jdGlvbiBkaWFNZXMoaXNvKXsgdmFyIHA9aXNvLnNwbGl0KCctJyk7IHJldHVybiB7IGQ6cFsyXSwgbTpNRVNFU1twYXJzZUludChwWzFdLDEwKS0xXSB9OyB9CmZ1bmN0aW9uIGRpYXMoYSwgYil7IHJldHVybiBNYXRoLnJvdW5kKChuZXcgRGF0ZShiKydUMTI6MDA6MDAnKSAtIG5ldyBEYXRlKGErJ1QxMjowMDowMCcpKSAvIDg2NDAwMDAwKTsgfQoKLyogRGF0YSBzaW11bGFkYSBkbyBwcm90w7N0aXBvOiBmb3JhIGRhIGphbmVsYSBkYSBqb3JuYWRhLCBvIHBhaW5lbCB1c2EgdW1hCiAgIGRhdGEgZGVtbyBubyBtZWlvIGRhIDLCqiBzZW1hbmEgcGFyYSBkYXIgdmlkYSDDoCBkZW1vbnN0cmHDp8Ojby4KICAgU29icmVzY3JldmEgY29tID9ob2plPUFBQUEtTU0tREQgbmEgVVJMLiAqLwpmdW5jdGlvbiBob2plSVNPKGpvcm5hZGEpewogIC8vIFBST0RVw4fDg086IHNlbXByZSBhIGRhdGEgcmVhbCBlbSBCUlQgKG8gc2Vydmlkb3IgcmV2YWxpZGEgdG9kYXMgYXMgZGF0YXMpCiAgdmFyIGlzbyA9IG5ldyBEYXRlKCkudG9Mb2NhbGVEYXRlU3RyaW5nKCdzdicsIHsgdGltZVpvbmU6ICdBbWVyaWNhL1Nhb19QYXVsbycgfSk7CiAgcmV0dXJuIHsgaXNvOiBpc28sIHNpbXVsYWRhOiBmYWxzZSB9Owp9CgovKiAtLS0tLS0tLS0tLS0tLS0tIHBvbnR1YcOnw6NvIC0tLS0tLS0tLS0tLS0tLS0gKi8KZnVuY3Rpb24gY2FsY1BvbnRvcyh1c2VyKXsKICB2YXIgaiA9IEpPUk5BREFTW3VzZXIucHJvdmFdOwogIHZhciBob2plID0gaG9qZUlTTyhqKS5pc287CiAgdmFyIGNoZWNrcyA9IHN0b3JlLmNoZWNraW5zKHVzZXIuZW1haWwpOwogIHZhciBtaXNzID0gc3RvcmUubWlzc29lcyh1c2VyLmVtYWlsKTsKICB2YXIgc2ltID0gc3RvcmUuc2ltdWxhZG8odXNlci5lbWFpbCk7CgogIHZhciBldlBhc3NhZG9zID0gai5ldmVudG9zLmZpbHRlcihmdW5jdGlvbihlKXsgcmV0dXJuIGUuZGF0YSA8PSBob2plOyB9KTsKICB2YXIgbkNoZWNrcyA9IE9iamVjdC5rZXlzKGNoZWNrcykubGVuZ3RoOwogIHZhciBwdHNQcmVzID0gMDsKICBqLmV2ZW50b3MuZm9yRWFjaChmdW5jdGlvbihlKXsKICAgIHZhciBjID0gY2hlY2tzW2UuaWRdOwogICAgaWYgKCFjKSByZXR1cm47CiAgICBwdHNQcmVzICs9ICgodHlwZW9mIGMgPT09ICdvYmplY3QnICYmIGMuYW9WaXZvID09PSBmYWxzZSkgPyBQVF9BVUxBX1JFVFJPIDogUFRfQVVMQSk7CiAgfSk7CgogIHZhciBxdWl6emVzID0gai5ldmVudG9zLmZpbHRlcihmdW5jdGlvbihlKXsgcmV0dXJuIGUucXVpejsgfSk7CiAgdmFyIHB0c01pc3MgPSAwLCBuTWlzcyA9IDA7CiAgcXVpenplcy5mb3JFYWNoKGZ1bmN0aW9uKGUpeyB2YXIgbSA9IG1pc3NbZS5pZF07IGlmIChtKXsgbk1pc3MrKzsgcHRzTWlzcyArPSBQVF9ESUFfUElTTyArIE1hdGgucm91bmQoUFRfRElBX0FDRVJUT1MgKiBtLmFjZXJ0b3MgLyBtLnRvdGFsKTsgfSB9KTsKCiAgdmFyIHB0c1NpbSA9IENBQ0hFLnNpbVJlcyA\/IFBUX1NJTV9BQ0VSVE8gKiBDQUNIRS5zaW1SZXMuYWNlcnRvcyA6IDA7CiAgdmFyIHB0c0luZCA9IFBUX0lORCAqICgoQ0FDSEUuaW5kaWNhY29lcyAmJiBDQUNIRS5pbmRpY2Fjb2VzLnZhbGlkYXMpIHx8IDApOyAgLy8gc2VtIHRldG8KCiAgLy8gb2ZlbnNpdmE6IGRpYXMtZXZlbnRvIGNvbnNlY3V0aXZvcyBjb20gY2hlY2staW4sIGNvbnRhbmRvIGRlIHRyw6FzIHByYQogIC8vIGZyZW50ZSDigJQgc8OzIHNvYnJlIGV2ZW50b3MgQ09NIGNoYXZlIChlbjAwIEluYXVndXJhbCBlIGVuMDcgU2ltdWxhZG8gbsOjbwogIC8vIHTDqm0gY2hlY2staW4gZSBuw6NvIHBvZGVtIHF1ZWJyYXIgYSBzZXF1w6puY2lhKQogIHZhciBzZXEgPSAwOwogIHZhciBldlN0cmVhayA9IGV2UGFzc2Fkb3MuZmlsdGVyKGZ1bmN0aW9uKGUpeyByZXR1cm4gVEVNX0NIQVZFLmluZGV4T2YoZS5pZCkgPiAtMTsgfSk7CiAgZm9yICh2YXIgaSA9IGV2U3RyZWFrLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICBpZiAoY2hlY2tzW2V2U3RyZWFrW2ldLmlkXSkgc2VxKys7IGVsc2UgYnJlYWs7CiAgfQoKICByZXR1cm4gewogICAgcHJlc2VuY2E6IHB0c1ByZXMsIG1pc3NvZXM6IHB0c01pc3MsIHNpbXVsYWRvOiBwdHNTaW0sIGluZGljYWNhbzogcHRzSW5kLAogICAgdG90YWw6IHB0c1ByZXMgKyBwdHNNaXNzICsgcHRzU2ltICsgcHRzSW5kLAogICAgbkNoZWNrczogbkNoZWNrcywgbkV2ZW50b3M6IFRFTV9DSEFWRS5sZW5ndGgsIG5FdlBhc3NhZG9zOiBldlBhc3NhZG9zLmxlbmd0aCwKICAgIG5NaXNzOiBuTWlzcywgblF1aXp6ZXM6IHF1aXp6ZXMubGVuZ3RoLCBvZmVuc2l2YTogc2VxLCBzaW06IHNpbQogIH07Cn0KZnVuY3Rpb24gZm10UHRzKG4peyByZXR1cm4gU3RyaW5nKE1hdGgucm91bmQobikpOyB9CgovKiBUZXh0byDihpIgSFRNTCBkYXMgcXVlc3TDtWVzL2NvbWVudMOhcmlvczogZXNjYXBhLCB0cmFuc2Zvcm1hIFVSTCBkZSBJTUFHRU0KICAgKHdlYnAvcG5nL2pwZy9naWYg4oCUIGV4LjogbcOtZGlhIGRvIFdQIGNvbSBhcyBpbWFnZW5zIGRhcyBxdWVzdMO1ZXMpIGVtIDxpbWc+CiAgIHJlc3BvbnNpdmEgZSBkZW1haXMgVVJMcyBlbSBsaW5rIGNsaWPDoXZlbC4gKi8KZnVuY3Rpb24gbWlkaWFIVE1MKHR4dCl7CiAgaWYgKCF0eHQpIHJldHVybiAnJzsKICByZXR1cm4gZXNjKHR4dCkucmVwbGFjZSgvaHR0cHM\/OlwvXC9bXlxzPF0rL2csIGZ1bmN0aW9uKHUpewogICAgdmFyIGZpbSA9ICcnOwogICAgdmFyIG0gPSB1Lm1hdGNoKC9bKS4sOzpdKyQvKTsKICAgIGlmIChtKXsgZmltID0gbVswXTsgdSA9IHUuc2xpY2UoMCwgdS5sZW5ndGggLSBmaW0ubGVuZ3RoKTsgfQogICAgaWYgKC9cLih3ZWJwfHBuZ3xqcGU\/Z3xnaWYpKFw\/W15cc10qKT8kL2kudGVzdCh1KSkKICAgICAgcmV0dXJuICc8aW1nIGNsYXNzPSJxLWltZyIgc3JjPSInK3UrJyIgYWx0PSJJbWFnZW0gZGEgcXVlc3TDo28iIGxvYWRpbmc9ImxhenkiPicrZmltOwogICAgcmV0dXJuICc8YSBocmVmPSInK3UrJyIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIiPicrdSsnPC9hPicrZmltOwogIH0pOwp9CgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgTEFORElORwogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KZnVuY3Rpb24gaW5pdExhbmRpbmcoKXsKICAvLyByZXZlYWwgb24gc2Nyb2xsIOKAlCBDT00gZ3VhcmRhOiBJbnRlcnNlY3Rpb25PYnNlcnZlciBzw7MgZXhpc3RlIGEgcGFydGlyIGRlCiAgLy8gaU9TIDEyLjIvQ2hyb21lIDUxOyBzZW0gYSBndWFyZGEsIGVtIGFwYXJlbGhvIG1haXMgYW50aWdvIGEgMcKqIGxpbmhhIGFxdWkKICAvLyBsYW7Dp2F2YSBlIGEgTFAgaW50ZWlyYSBmaWNhdmEgZW0gYnJhbmNvICgzOCBzZcOnw7VlcyAucnYgcHJlc2FzIGVtIG9wYWNpdHk6MCkKICAvLyBzZW0gbmVtIG8gZGlhZ27Ds3N0aWNvLiBBZ29yYSBvIGZhbGxiYWNrIHNpbXBsZXNtZW50ZSByZXZlbGEgdHVkby4KICBpZiAodHlwZW9mIEludGVyc2VjdGlvbk9ic2VydmVyID09PSAnZnVuY3Rpb24nKSB7CiAgICB2YXIgaW8gPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24oZXMpewogICAgICBlcy5mb3JFYWNoKGZ1bmN0aW9uKGUpeyBpZiAoZS5pc0ludGVyc2VjdGluZyl7IGUudGFyZ2V0LmNsYXNzTGlzdC5hZGQoJ2luJyk7IGlvLnVub2JzZXJ2ZShlLnRhcmdldCk7IH0gfSk7CiAgICB9LCB7IHRocmVzaG9sZDogMC4wMSwgcm9vdE1hcmdpbjogJzBweCAwcHggMjUlIDBweCcgfSk7CiAgICAkJCgnLnJ2JykuZm9yRWFjaChmdW5jdGlvbihlbCwgaSl7IGVsLnN0eWxlLnRyYW5zaXRpb25EZWxheSA9IChpJTYpKjYwKydtcyc7IGlvLm9ic2VydmUoZWwpOyB9KTsKICB9IGVsc2UgewogICAgJCQoJy5ydicpLmZvckVhY2goZnVuY3Rpb24oZWwpeyBlbC5jbGFzc0xpc3QuYWRkKCdpbicpOyB9KTsKICB9CgogIC8vIGRlZmF1bHQgZG8gdG9nZ2xlIHNlZ3VlIG8gdmVydGljYWwgcHVibGljYWRvIChMUCBkbyBSZXZhbGlkYSBhYnJlIG5vIFJldmFsaWRhKQogIHZhciBwcm92YVNlbCA9IEFGX1BST1ZBOwoKICAvLyBjb3VudGRvd246IG1pcmEgYSBQUsOTWElNQSB0cmFuc21pc3PDo28gZnV0dXJhIChhIEF1bGEgSW5hdWd1cmFsIGFudGVjZWRlIGEKICAvLyBqb3JuYWRhKSwgY29tIGEgaG9yYSBkZSBpbsOtY2lvIGV4dHJhw61kYSBkbyBjYW1wbyBob3JhIGRlIGNhZGEgZXZlbnRvCiAgZnVuY3Rpb24gcHJveGltb0V2ZW50byhqKXsKICAgIHZhciBhZ29yYSA9IG5ldyBEYXRlKCk7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGouZXZlbnRvcy5sZW5ndGg7IGkrKyl7CiAgICAgIHZhciBlID0gai5ldmVudG9zW2ldOwogICAgICB2YXIgbSA9IChlLmhvcmEgfHwgJycpLm1hdGNoKC8oXGR7MSwyfSk6KFxkezJ9KS8pOwogICAgICB2YXIgYWx2byA9IG5ldyBEYXRlKGUuZGF0YSArICdUJyArICgnMCcrKG0\/bVsxXTonMDgnKSkuc2xpY2UoLTIpICsgJzonICsgKG0\/bVsyXTonMDAnKSArICc6MDAtMDM6MDAnKTsKICAgICAgaWYgKGFsdm8gPiBhZ29yYSkgcmV0dXJuIHsgZXY6IGUsIGFsdm86IGFsdm8gfTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KICBmdW5jdGlvbiB0aWNrKCl7CiAgICB2YXIgaiA9IEpPUk5BREFTW3Byb3ZhU2VsXTsKICAgIHZhciBweCA9IHByb3hpbW9FdmVudG8oaik7CiAgICB2YXIgYWx2byA9IHB4ID8gcHguYWx2byA6IG5ldyBEYXRlKGouaW5pY2lvICsgJ1QwODowMDowMC0wMzowMCcpOwogICAgdmFyIGRpZmYgPSBNYXRoLm1heCgwLCBhbHZvIC0gbmV3IERhdGUoKSk7CiAgICB2YXIgZCA9IE1hdGguZmxvb3IoZGlmZi84NjQwMDAwMCksIGggPSBNYXRoLmZsb29yKGRpZmYvMzYwMDAwMCklMjQsCiAgICAgICAgbSA9IE1hdGguZmxvb3IoZGlmZi82MDAwMCklNjAsIHMgPSBNYXRoLmZsb29yKGRpZmYvMTAwMCklNjA7CiAgICAkKCcjY2QtZCcpLnRleHRDb250ZW50ID0gU3RyaW5nKGQpLnBhZFN0YXJ0KDIsJzAnKTsKICAgICQoJyNjZC1oJykudGV4dENvbnRlbnQgPSBTdHJpbmcoaCkucGFkU3RhcnQoMiwnMCcpOwogICAgJCgnI2NkLW0nKS50ZXh0Q29udGVudCA9IFN0cmluZyhtKS5wYWRTdGFydCgyLCcwJyk7CiAgICAkKCcjY2QtcycpLnRleHRDb250ZW50ID0gU3RyaW5nKHMpLnBhZFN0YXJ0KDIsJzAnKTsKICAgICQoJyNjb3VudExhYmVsJykudGV4dENvbnRlbnQgPSAncGFyYSBhIHByw7N4aW1hIHRyYW5zbWlzc8OjbzogJyArCiAgICAgIChweCA\/IHB4LmV2LnRpdHVsbyA6IGouZXZlbnRvc1swXS50aXR1bG8pOwogIH0KICBzZXRJbnRlcnZhbCh0aWNrLCAxMDAwKTsgdGljaygpOwoKICAkJCgnI3Byb3ZhU3dpdGNoIGJ1dHRvbicpLmZvckVhY2goZnVuY3Rpb24oYil7CiAgICBiLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXsKICAgICAgJCQoJyNwcm92YVN3aXRjaCBidXR0b24nKS5mb3JFYWNoKGZ1bmN0aW9uKHgpeyB4LmNsYXNzTGlzdC5yZW1vdmUoJ29uJyk7IH0pOwogICAgICBiLmNsYXNzTGlzdC5hZGQoJ29uJyk7IHByb3ZhU2VsID0gYi5kYXRhc2V0LnByb3ZhOyB0aWNrKCk7CiAgICAgIHZhciBjYWxCdG4gPSAkKCcuY2FsLXRhYnMgYnV0dG9uW2RhdGEtY2FsPSInK3Byb3ZhU2VsKyciXScpOyBpZiAoY2FsQnRuKSBjYWxCdG4uY2xpY2soKTsKICAgIH0pOwogIH0pOwoKICAvLyBjYWxlbmTDoXJpbwogIGZ1bmN0aW9uIHJlbmRlckNhbChwcm92YSl7CiAgICB2YXIgaiA9IEpPUk5BREFTW3Byb3ZhXTsKICAgIHZhciBodG1sID0gJyc7CiAgICBpZiAoai5wcm92aXNvcmlvKSBodG1sICs9ICc8ZGl2IGNsYXNzPSJkZW1vLWJhbm5lciI+PGI+RGF0YXMgcHJvdmlzw7NyaWFzLjwvYj4gQSBwcm9ncmFtYcOnw6NvIG9maWNpYWwgZG8gUmV2YWxpZGEgSU5FUCAyMDI2LjIgc2Vyw6EgY29uZmlybWFkYSBhcMOzcyBhIHB1YmxpY2HDp8OjbyBkbyBlZGl0YWwuIEEgZXN0cnV0dXJhIGFiYWl4byBlc3BlbGhhIGEgZWRpw6fDo28gMjAyNi4xLjwvZGl2Pic7CiAgICBbMCwxLDJdLmZvckVhY2goZnVuY3Rpb24oc2VtKXsKICAgICAgdmFyIGV2cyA9IGouZXZlbnRvcy5maWx0ZXIoZnVuY3Rpb24oZSl7IHJldHVybiBlLnNlbWFuYSA9PT0gc2VtOyB9KTsKICAgICAgaWYgKCFldnMubGVuZ3RoKSByZXR1cm47CiAgICAgIHZhciByb3R1bG8gPSBzZW09PT0wID8gJ0FiZXJ0dXJhJyA6IChzZW09PT0xPycxwqogc2VtYW5hJzonMsKqIHNlbWFuYScpOwogICAgICB2YXIgZmFpeGEgPSBldnNbMF0uZGF0YSA9PT0gZXZzW2V2cy5sZW5ndGgtMV0uZGF0YQogICAgICAgID8gZGF0YUJSKGV2c1swXS5kYXRhKQogICAgICAgIDogZGF0YUJSKGV2c1swXS5kYXRhKSsnIGEgJytkYXRhQlIoZXZzW2V2cy5sZW5ndGgtMV0uZGF0YSk7CiAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9InNlbWFuYS1sYWJlbCI+Jytyb3R1bG8rJyDCtyAnK2ZhaXhhKyc8L2Rpdj4nOwogICAgICBldnMuZm9yRWFjaChmdW5jdGlvbihlKXsKICAgICAgICB2YXIgZG0gPSBkaWFNZXMoZS5kYXRhKTsKICAgICAgICB2YXIgdGlwb0NscyA9IGUudGlwbz09PSdtYXJjbycgPyAndGlwby1tYXJjbycgOiBlLnRpcG89PT0ncHJvdmEnID8gJ3RpcG8tcHJvdmEnIDogJ3RpcG8tYXVsYSc7CiAgICAgICAgdmFyIHRpcG9UeHQgPSBlLnRpcG89PT0nbWFyY28nID8gJ01hcmNvJyA6IGUudGlwbz09PSdwcm92YScgPyAnRGlhIGRhIHByb3ZhJyA6ICdBdWxhJzsKICAgICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJhdWxhLXJvdyBydiBpbiI+PGRpdiBjbGFzcz0iZGF0YSI+JytkbS5kKyc8c21hbGw+JytkbS5tKyc8L3NtYWxsPjwvZGl2PicrCiAgICAgICAgICAnPGRpdiBjbGFzcz0idGl0dWxvIj4nK2VzYyhlLnRpdHVsbykrJzwvZGl2PicrCiAgICAgICAgICAnPGEgY2xhc3M9ImhvcmEiIGhyZWY9IicrQUZfVVJMUy5jYWRhc3RybysnIiB0aXRsZT0iSW5zY3JldmEtc2UgZ3JhdHVpdGFtZW50ZSBwYXJhIGFzc2lzdGlyIiBzdHlsZT0iY29sb3I6dmFyKC0tYW1iZXIpO2ZvbnQtd2VpZ2h0OjYwMCI+UXVlcm8gYXNzaXN0aXI8L2E+JysKICAgICAgICAgICc8ZGl2IGNsYXNzPSJob3JhIj4nK2VzYyhlLmhvcmEpKyc8L2Rpdj4nKwogICAgICAgICAgJzxzcGFuIGNsYXNzPSJ0aXBvICcrdGlwb0NscysnIj4nK3RpcG9UeHQrJzwvc3Bhbj48L2Rpdj4nOwogICAgICB9KTsKICAgIH0pOwogICAgJCgnI2NhbEJvZHknKS5pbm5lckhUTUwgPSBodG1sOwogIH0KICAkJCgnLmNhbC10YWJzIGJ1dHRvbicpLmZvckVhY2goZnVuY3Rpb24oYil7CiAgICBiLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXsKICAgICAgJCQoJy5jYWwtdGFicyBidXR0b24nKS5mb3JFYWNoKGZ1bmN0aW9uKHgpeyB4LmNsYXNzTGlzdC5yZW1vdmUoJ29uJyk7IH0pOwogICAgICBiLmNsYXNzTGlzdC5hZGQoJ29uJyk7IHJlbmRlckNhbChiLmRhdGFzZXQuY2FsKTsKICAgIH0pOwogIH0pOwogIC8vIHNpbmNyb25pemEgdG9nZ2xlIGRlIHByb3ZhICsgY2FsZW5kw6FyaW8gY29tIG8gdmVydGljYWwgcHVibGljYWRvCiAgJCQoJyNwcm92YVN3aXRjaCBidXR0b24nKS5mb3JFYWNoKGZ1bmN0aW9uKHgpeyB4LmNsYXNzTGlzdC50b2dnbGUoJ29uJywgeC5kYXRhc2V0LnByb3ZhID09PSBwcm92YVNlbCk7IH0pOwogICQkKCcuY2FsLXRhYnMgYnV0dG9uJykuZm9yRWFjaChmdW5jdGlvbih4KXsgeC5jbGFzc0xpc3QudG9nZ2xlKCdvbicsIHguZGF0YXNldC5jYWwgPT09IHByb3ZhU2VsKTsgfSk7CiAgcmVuZGVyQ2FsKHByb3ZhU2VsKTsKfQoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIENBREFTVFJPIC8gQUNFU1NBUgogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KZnVuY3Rpb24gbWFza1doYXRzKGlucHV0KXsKICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGZ1bmN0aW9uKCl7CiAgICB2YXIgdiA9IGlucHV0LnZhbHVlLnJlcGxhY2UoL1xEL2csJycpLnNsaWNlKDAsMTEpOwogICAgaWYgKHYubGVuZ3RoID4gNikgaW5wdXQudmFsdWUgPSAnKCcrdi5zbGljZSgwLDIpKycpICcrdi5zbGljZSgyLDcpKyctJyt2LnNsaWNlKDcpOwogICAgZWxzZSBpZiAodi5sZW5ndGggPiAyKSBpbnB1dC52YWx1ZSA9ICcoJyt2LnNsaWNlKDAsMikrJykgJyt2LnNsaWNlKDIpOwogICAgZWxzZSBpbnB1dC52YWx1ZSA9IHY7CiAgfSk7Cn0KZnVuY3Rpb24gbWFza0NwZihpbnB1dCl7CiAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBmdW5jdGlvbigpewogICAgdmFyIHYgPSBpbnB1dC52YWx1ZS5yZXBsYWNlKC9cRC9nLCcnKS5zbGljZSgwLDExKTsKICAgIHZhciBvdXQgPSB2OwogICAgaWYgKHYubGVuZ3RoID4gOSkgb3V0ID0gdi5zbGljZSgwLDMpKycuJyt2LnNsaWNlKDMsNikrJy4nK3Yuc2xpY2UoNiw5KSsnLScrdi5zbGljZSg5KTsKICAgIGVsc2UgaWYgKHYubGVuZ3RoID4gNikgb3V0ID0gdi5zbGljZSgwLDMpKycuJyt2LnNsaWNlKDMsNikrJy4nK3Yuc2xpY2UoNik7CiAgICBlbHNlIGlmICh2Lmxlbmd0aCA+IDMpIG91dCA9IHYuc2xpY2UoMCwzKSsnLicrdi5zbGljZSgzKTsKICAgIGlucHV0LnZhbHVlID0gb3V0OwogIH0pOwp9CmZ1bmN0aW9uIGNwZlZhbGlkbyhjKXsKICBjID0gYy5yZXBsYWNlKC9cRC9nLCcnKTsKICBpZiAoYy5sZW5ndGggIT09IDExKSByZXR1cm4gZmFsc2U7CiAgaWYgKC9eKFxkKVwxezEwfSQvLnRlc3QoYykpIHJldHVybiBmYWxzZTsKICBmb3IgKHZhciB0ID0gOTsgdCA8IDExOyB0KyspIHsKICAgIHZhciBkID0gMDsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdDsgaSsrKSBkICs9IHBhcnNlSW50KGMuY2hhckF0KGkpLDEwKSAqICgodCsxKSAtIGkpOwogICAgZCA9ICgoMTAqZCkgJSAxMSkgJSAxMDsKICAgIGlmIChkICE9PSBwYXJzZUludChjLmNoYXJBdCh0KSwxMCkpIHJldHVybiBmYWxzZTsKICB9CiAgcmV0dXJuIHRydWU7Cn0KZnVuY3Rpb24gc2V0SW52YWxpZChmLCBvbil7IHZhciBlbCA9ICQoJ1tkYXRhLWY9IicrZisnIl0nKTsgaWYgKGVsKSBlbC5jbGFzc0xpc3QudG9nZ2xlKCdpbnZhbGlkJywgISFvbik7IH0KCi8qIGluaXRDYWRhc3Ryby9pbml0QWNlc3Nhci9pbml0Q29uZmlybWFjYW8gUkVNT1ZJRE9TIG5hIGF1ZGl0b3JpYSBkZSAxMS8wODoKICAgZXJhbSBvIHByb3TDs3RpcG8gZW0gbG9jYWxTdG9yYWdlIChzdG9yZS5hZGRVc2VyL2ZpbmRVc2VyQnlDcGYvbG9naW4pLCBww6FnaW5hcwogICBjYWRhc3Ryby5odG1sL2FjZXNzYXIuaHRtbC9jb25maXJtYWNhby5odG1sIHF1ZSBOw4NPIHPDo28gcHVibGljYWRhcyDigJQgcHJvZHXDp8OjbwogICB1c2EgcmVuZGVyQXV0aCAoYXV0aC1jYWRhc3Ryby9hdXRoLWFjZXNzYXIpIGNvbnRyYSBvIFN1cGFiYXNlLiBGaWNhdmFtIG5vCiAgIGJ1bmRsZSBkZSB0b2RvIGFsdW5vIHNlbSBudW5jYSByb2Rhci4gKi8KCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICDDgVJFQSBERSBNRU1CUk9TCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKiAtLS0tLS0tLS0tIEFVVEggZGUgcHJvZHXDp8OjbyAodW1hIHDDoWdpbmEgc8OzOiBhY2Vzc2FyICsgY2FkYXN0cm8pIC0tLS0tLS0tLS0gKi8KZnVuY3Rpb24gY3BmRFYoYyl7CiAgdmFyIGQgPSAoY3x8JycpLnJlcGxhY2UoL1xEL2csJycpOwogIGlmIChkLmxlbmd0aCAhPT0gMTEgfHwgL14oXGQpXDF7MTB9JC8udGVzdChkKSkgcmV0dXJuIGZhbHNlOwogIHZhciBzPTAsaTsgZm9yKGk9MDtpPDk7aSsrKSBzKz0oK2RbaV0pKigxMC1pKTsgdmFyIHYxPShzKjEwKSUxMTsgaWYodjE9PT0xMCl2MT0wOwogIHM9MDsgZm9yKGk9MDtpPDEwO2krKykgcys9KCtkW2ldKSooMTEtaSk7IHZhciB2Mj0ocyoxMCklMTE7IGlmKHYyPT09MTApdjI9MDsKICByZXR1cm4gdjE9PT0rZFs5XSAmJiB2Mj09PStkWzEwXTsKfQovKiBNb21lbnRvIG5hIGdyYWR1YcOnw6NvICgxMS8wOCk6IE1FU01BIHBlcmd1bnRhIGUgTUVTTUFTIG9ww6fDtWVzIGRhIHBlc3F1aXNhCiAgIEJRIE1FRCBGUkVFIG5vIFR5cGVmb3JtIChyTlBRQmZyZywgY2FtcG8gcTJfc3RhZ2UpIOKAlCBvIGRhZG8gZG8gY2FkYXN0cm8KICAgY3J1emEgMToxIGNvbSBvIGRhIHBlc3F1aXNhLiBHcmF2YWRvIGVtIHBhcnRpY2lwYW50ZXMubW9tZW50byAocF9tb21lbnRvKS4gKi8KLyogTyBww7pibGljbyBkZSBjYWRhIHByb3ZhIMOpIERJRkVSRU5URSwgZW50w6NvIGFzIG9ww6fDtWVzIG11ZGFtIHBvciB2ZXJ0aWNhbAogICAoZXNwZWxobyBkbyBzcGxpdCBSZXNpZMOqbmNpYSDDlyBSZXZhbGlkYSBkbyBmb3JtKTogRU5BTUVEIHVzYSBxMl9zdGFnZSAoYW5vIGRlCiAgIGdyYWR1YcOnw6NvKTsgUmV2YWxpZGEgdXNhIHFyX3N0YWdlIChncmFkdWHDp8OjbyBubyBleHRlcmlvciAvIHJldmFsaWRhw6fDo28pLiAqLwp2YXIgTU9NRU5UT1NfUE9SX1BST1ZBID0gewogIGVuYW1lZDogWwogICAgJ0VzdG91IG5vIDHCuiBvdSBubyAywrogYW5vIGRhIGdyYWR1YcOnw6NvJywKICAgICdFc3RvdSBubyAzwrogb3Ugbm8gNMK6IGFubyBkYSBncmFkdWHDp8OjbycsCiAgICAnRXN0b3Ugbm8gNcK6IGFubyBkYSBncmFkdWHDp8OjbycsCiAgICAnRXN0b3Ugbm8gNsK6IGFubyBkYSBncmFkdWHDp8OjbycsCiAgICAnU291IG3DqWRpY28gZm9ybWFkbycsCiAgICAnTsOjbyBzb3UgbcOpZGljbyBuZW0gZXN0dWRhbnRlIGRlIE1lZGljaW5hJwogIF0sCiAgcmV2YWxpZGE6IFsKICAgICdBaW5kYSBlc3RvdSBuYSBncmFkdWHDp8OjbyBkZSBNZWRpY2luYSBubyBleHRlcmlvcicsCiAgICAnU291IGZvcm1hZG8gbm8gZXh0ZXJpb3IsIG1hcyBhaW5kYSBuw6NvIHJldmFsaWRlaSBtZXUgZGlwbG9tYScsCiAgICAnSsOhIHJldmFsaWRlaSBtZXUgZGlwbG9tYScsCiAgICAnTsOjbyBzb3UgbcOpZGljbyBuZW0gZXN0dWRhbnRlIGRlIE1lZGljaW5hJwogIF0KfTsKdmFyIE1PTUVOVE9TX0dSQUQgPSBNT01FTlRPU19QT1JfUFJPVkFbQUZfUFJPVkFdIHx8IE1PTUVOVE9TX1BPUl9QUk9WQS5lbmFtZWQ7CgovKiBBRi1HQUJBUklUTy1DQURBU1RSTzoxMy0wOSAqLwpmdW5jdGlvbiBhdXRoR2FiYXJpdG8oKXsKICB0cnkgewogICAgdmFyIERJQSA9ICcyMDI2LTA5LTEzJywgQUJSRSA9ICcyMDI2LTA5LTEzVDE1OjMwOjAwLTAzOjAwJywgTElWRSA9ICcyMDI2LTA5LTEzVDE2OjAwOjAwLTAzOjAwJzsKICAgIHZhciBob2plID0gbmV3IERhdGUoRGF0ZS5ub3coKSAtIDMgKiAzNjAwMDAwKS50b0lTT1N0cmluZygpLnNsaWNlKDAsIDEwKTsKICAgIGlmIChob2plICE9PSBESUEpIHJldHVybiBudWxsOwogICAgdmFyIGFicml1ID0gRGF0ZS5ub3coKSA+PSBuZXcgRGF0ZShBQlJFKS5nZXRUaW1lKCk7CiAgICB2YXIgbm9BciAgPSBEYXRlLm5vdygpID49IG5ldyBEYXRlKExJVkUpLmdldFRpbWUoKTsKICAgIHJldHVybiB7CiAgICAgIGtpY2tlcjogbm9BciA\/ICdBY29udGVjZW5kbyBhZ29yYScgOiAnSG9qZSwgYSBwYXJ0aXIgZGFzIDE2aCcsCiAgICAgIGgxOiBub0FyID8gJ08gR2FiYXJpdG8gZXN0w6Egbm8gYXInIDogJ0dhYmFyaXRvIGRlIGhvamUsIGFvIHZpdm8gw6BzIDE2aCcsCiAgICAgIHN1Yjogbm9BcgogICAgICAgID8gJ09zIHByb2Zlc3NvcmVzIGVzdMOjbyBjb3JyaWdpbmRvIGEgcHJvdmEgZGUgaG9qZSBhbyB2aXZvLCBxdWVzdMOjbyBwb3IgcXVlc3TDo28uIEVudHJlIHBhcmEgYWNvbXBhbmhhciwgbWFyY2FyIG8gc2V1IGNhcnTDo28tcmVzcG9zdGEgZSB2ZXIgcXVhbnRhcyB2b2PDqiBhY2VydG91LicKICAgICAgICA6ICdPcyBwcm9mZXNzb3JlcyBjb3JyaWdlbSBhIHByb3ZhIGRlIGhvamUgYW8gdml2bywgcXVlc3TDo28gcG9yIHF1ZXN0w6NvLCBhIHBhcnRpciBkYXMgMTZoLiBFbnRyZSBhZ29yYSBwYXJhIGFjb21wYW5oYXIgZSBtYXJjYXIgbyBzZXUgY2FydMOjby1yZXNwb3N0YSBhc3NpbSBxdWUgYSBjb3JyZcOnw6NvIGNvbWXDp2FyLicsCiAgICAgIGNoaXBzOiBbJ0NvcnJlw6fDo28gY29tZW50YWRhIGFvIHZpdm8nLCAnU2V1IGNhcnTDo28tcmVzcG9zdGEnLCAnUmFua2luZyBkZSBhY2VydG9zJywgJ0dyYXR1aXRvJ10sCiAgICAgIGN0YTogYWJyaXUgPyAnRW50cmFyIGUgcHJlZW5jaGVyIG8gZ2FiYXJpdG8nIDogJ0VudHJhciBlIGFjb21wYW5oYXIgbyBHYWJhcml0bycKICAgIH07CiAgfSBjYXRjaCAoZSkgeyByZXR1cm4gbnVsbDsgfQp9CgpmdW5jdGlvbiByZW5kZXJBdXRoKG1vZG8pewogIG1vZG8gPSBtb2RvIHx8ICdhY2Vzc2FyJzsKICB2YXIgZXNwID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FmLWVzcGVyYScpOwogIGlmIChlc3ApIGVzcC5yZW1vdmUoKTsKICB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXV0aFZpZXcnKSB8fCAoZnVuY3Rpb24oKXsKICAgIHZhciBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7IGQuaWQgPSAnYXV0aFZpZXcnOyBkLmNsYXNzTmFtZSA9ICdhdXRoLW92ZXJsYXknOwogICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkKTsgcmV0dXJuIGQ7CiAgfSkoKTsKICB2YXIgYWNlc3NhciA9IG1vZG8gPT09ICdhY2Vzc2FyJzsKICB2YXIgRyA9IGFjZXNzYXIgPyBudWxsIDogYXV0aEdhYmFyaXRvKCk7ICAgLyogQUYtR0FCQVJJVE8tQ0FEQVNUUk86MTMtMDkgKi8KICAvLyBsb2dvIGVtYnV0aWRvIHBlbG8gcHVibGljYWRvciAoX19BRl9MT0dPKTsgbm8gYXJxdWl2byBsb2NhbCBhIHBhc3RhIGRlCiAgLy8gYXNzZXRzIGZpY2EgdW0gbsOtdmVsIGFjaW1hOyBzZSBuYWRhIHJlc29sdmVyLCBvIG9uZXJyb3IgdGlyYSBvIDxpbWc+CiAgdmFyIGxvZ28gPSB3aW5kb3cuX19BRl9MT0dPIHx8ICcuLi9hc3NldHMvbG9nby1lc3RyYXRlZ2lhLW1lZC1icmFuY28ud2VicCc7CiAgdmFyIGJyYW5kSFRNTCA9ICc8ZGl2IGNsYXNzPSJhdXRoLWJyYW5kIj4nKwogICAgJzxpbWcgY2xhc3M9ImFiLWxvZ28iIHNyYz0iJytsb2dvKyciIGFsdD0iRXN0cmF0w6lnaWEgTUVEIiBvbmVycm9yPSJ0aGlzLnJlbW92ZSgpIj4nKwogICAgJzxkaXYgY2xhc3M9ImFiLW1hcmsiPkFUTyBGSU5BTDwvZGl2PicrCiAgICAnPGRpdiBjbGFzcz0iYWItc3ViIj4nK0FGX0JSQU5ELnN1YisnPC9kaXY+JysKICAgICc8L2Rpdj4nOwogIHZhciBib2R5SFRNTCA9ICc8ZGl2IGNsYXNzPSJhdXRoLWJvZHkiPicrCiAgICAoRyA\/ICc8ZGl2IHN0eWxlPSJmb250OjgwMCAxMS41cHggRmlndHJlZSxzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi4wOWVtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjojMDQ3MzdCO21hcmdpbi1ib3R0b206NnB4Ij4nK0cua2lja2VyKyc8L2Rpdj4nIDogJycpKyc8aDE+JysoRyA\/IEcuaDEgOiAoYWNlc3NhciA\/ICdBY2Vzc2FyIG1pbmhhIMOhcmVhJyA6ICdJbnNjcmnDp8OjbyBncmF0dWl0YScpKSsnPC9oMT4nKwogICAgJzxwIGNsYXNzPSJzdWIiPicrKEcgPyBHLnN1YiA6IChhY2Vzc2FyCiAgICAgID8gJ0RpZ2l0ZSBvIENQRiB1c2FkbyBuYSBpbnNjcmnDp8OjbyBwYXJhIGVudHJhciBubyBzZXUgcGFpbmVsLicKICAgICAgOiAnUHJlZW5jaGEgZSBqw6EgZW50cmUgbmEgc3VhIMOhcmVhLiBMZXZhIG1lbm9zIGRlIDEgbWludXRvLicpKSsnPC9wPicrCiAgICAvKiBBVEFMSE86IGJvYSBwYXJ0ZSBkZSBxdWVtIHBlZ2EgbyBmb2xkZXIgSkEgcGFydGljaXBvdSBkbyBBdG8gRmluYWwuCiAgICAgICBPYnJpZ2FyIGVzc2EgcGVzc29hIGEgcmVkaWdpdGFyIG5vbWUsIGUtbWFpbCwgV2hhdHNBcHAgZSBzaXR1YWNhbyBkZXBvaXMKICAgICAgIGRlIDVoIGRlIHByb3ZhIGUgYXRyaXRvIHB1cm8uICovCiAgICAoRyA\/ICc8YSBocmVmPSInK0FGX1VSTFMuYWNlc3NhcisnIiBzdHlsZT0iZGlzcGxheTpibG9jazttYXJnaW46MnB4IDAgMTZweDtwYWRkaW5nOjExcHggMTRweDsnCiAgICAgICArICdib3JkZXI6MS41cHggc29saWQgIzA1OEM5NTtib3JkZXItcmFkaXVzOjExcHg7YmFja2dyb3VuZDpyZ2JhKDUsMTQwLDE0OSwuMDgpOycKICAgICAgICsgJ2NvbG9yOiMwNDczN0I7Zm9udC13ZWlnaHQ6NzAwO2ZvbnQtc2l6ZToxMy41cHg7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dGV4dC1hbGlnbjpjZW50ZXIiPicKICAgICAgICsgJ0rDoSBwYXJ0aWNpcG91IGRvIEF0byBGaW5hbD8gRW50cmFyIHPDsyBjb20gbyBDUEY8L2E+JyA6ICcnKSsKICAgIChHID8gJzxkaXYgY2xhc3M9ImF1dGgtZmF0b3MiPicrRy5jaGlwcy5tYXAoZnVuY3Rpb24oYyl7IHJldHVybiAnPHNwYW4+JytjKyc8L3NwYW4+JzsgfSkuam9pbignJykrJzwvZGl2PicgOiAnJykrCiAgICAnPGZvcm0gaWQ9ImF1dGhGb3JtIj4nKwogICAgKGFjZXNzYXIgPyAnJyA6CiAgICAgICc8ZGl2IGNsYXNzPSJmaWVsZCI+PGxhYmVsPk5vbWUgY29tcGxldG88L2xhYmVsPjxpbnB1dCBpZD0iZk5vbWUiIHR5cGU9InRleHQiIGF1dG9jb21wbGV0ZT0ibmFtZSIgcmVxdWlyZWQ+PC9kaXY+JysKICAgICAgJzxkaXYgY2xhc3M9ImZpZWxkIj48bGFiZWw+RS1tYWlsPC9sYWJlbD48aW5wdXQgaWQ9ImZFbWFpbCIgdHlwZT0iZW1haWwiIGF1dG9jb21wbGV0ZT0iZW1haWwiIHJlcXVpcmVkPjwvZGl2PicrCiAgICAgICc8ZGl2IGNsYXNzPSJmaWVsZCI+PGxhYmVsPldoYXRzQXBwIChjb20gREREKTwvbGFiZWw+PGlucHV0IGlkPSJmV2hhdHMiIHR5cGU9InRlbCIgYXV0b2NvbXBsZXRlPSJ0ZWwiIHBsYWNlaG9sZGVyPSIoMTEpIDk5OTk5LTk5OTkiIHJlcXVpcmVkPjwvZGl2PicrCiAgICAgICc8ZGl2IGNsYXNzPSJmaWVsZCI+PGxhYmVsPlF1YWwgYSBzdWEgc2l0dWHDp8OjbyBhdHVhbD88L2xhYmVsPicrCiAgICAgICc8c2VsZWN0IGlkPSJmTW9tZW50byIgcmVxdWlyZWQ+JysKICAgICAgJzxvcHRpb24gdmFsdWU9IiIgZGlzYWJsZWQgc2VsZWN0ZWQ+U2VsZWNpb25lIG8gc2V1IG1vbWVudG88L29wdGlvbj4nKwogICAgICBNT01FTlRPU19HUkFELm1hcChmdW5jdGlvbihtKXsgcmV0dXJuICc8b3B0aW9uIHZhbHVlPSInK2VzYyhtKSsnIj4nK2VzYyhtKSsnPC9vcHRpb24+JzsgfSkuam9pbignJykrCiAgICAgICc8L3NlbGVjdD48L2Rpdj4nKSsKICAgICc8ZGl2IGNsYXNzPSJmaWVsZCI+PGxhYmVsPkNQRjwvbGFiZWw+PGlucHV0IGlkPSJmQ3BmIiB0eXBlPSJ0ZXh0IiBpbnB1dG1vZGU9Im51bWVyaWMiIGF1dG9jb21wbGV0ZT0ib2ZmIiBwbGFjZWhvbGRlcj0iMDAwLjAwMC4wMDAtMDAiIHJlcXVpcmVkPicrCiAgICAnPGRpdiBjbGFzcz0iaGludCI+VXNhbW9zIG8gQ1BGIHPDsyBwcmEgaWRlbnRpZmljYXIgYSBzdWEgY29udGEgbmEgZGlzcHV0YSBlIHZhbGlkYXIgYSBwcmVtaWHDp8Ojby4gRWxlIG7Do28gYXBhcmVjZSBwcmEgbmluZ3XDqW0uPC9kaXY+PC9kaXY+JysKICAgICc8ZGl2IGNsYXNzPSJhdXRoLWVycm8iIGlkPSJhdXRoRXJybyIgcm9sZT0iYWxlcnQiIGhpZGRlbj48L2Rpdj4nKwogICAgJzxidXR0b24gY2xhc3M9ImJ0biBidG4tYW1iZXIiIHR5cGU9InN1Ym1pdCIgc3R5bGU9IndpZHRoOjEwMCUiIGlkPSJhdXRoQnRuIj4nKyhHID8gRy5jdGEgOiAoYWNlc3NhciA\/ICdFbnRyYXInIDogJ1F1ZXJvIG1pbmhhIHZhZ2EgZ3JhdHVpdGEnKSkrJzwvYnV0dG9uPicrCiAgICAnPC9mb3JtPicrCiAgICAnPGRpdiBjbGFzcz0iYXV0aC1hbHQiPicrKGFjZXNzYXIKICAgICAgPyAnQWluZGEgbsOjbyB0ZW0gY29udGE\/IDxhIGhyZWY9IicrKHdpbmRvdy5fX0FGX1VSTFMgPyBBRl9VUkxTLmNhZGFzdHJvIDogJyMnKSsnIiBpZD0iYXV0aFRyb2NhIj5JbnNjcmV2YS1zZSBncsOhdGlzPC9hPicKICAgICAgOiAnSsOhIGZleiBzdWEgaW5zY3Jpw6fDo28\/IDxhIGhyZWY9IicrKHdpbmRvdy5fX0FGX1VSTFMgPyBBRl9VUkxTLmFjZXNzYXIgOiAnIycpKyciIGlkPSJhdXRoVHJvY2EiPkFjZXNzYXIgY29tIG1ldSBDUEY8L2E+JykrJzwvZGl2PjwvZGl2Pic7CgogIGlmIChhY2Vzc2FyKSB7CiAgICBlbC5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz0iYXV0aC1jYXJkIGNvbS1tYXJjYSI+JyticmFuZEhUTUwrYm9keUhUTUwrJzwvZGl2Pic7CiAgfSBlbHNlIHsKICAgIC8vIENBREFTVFJPIEVMRVZBRE8g4oCUIGdyaWQgY29tIMOBUkVBUyBwcmEgcmVvcmRlbmFyIG5vIG1vYmlsZS4gOTAlIGRvcyBjYWRhc3Ryb3MKICAgIC8vIHPDo28gbm8gY2VsdWxhciwgZW50w6NvIGzDoSBhIG9yZGVtIMOpIEtWIOKGkiBoZWFkbGluZSDihpIgRk9STSDihpIgYmVuZWbDrWNpb3MgKG8gZm9ybQogICAgLy8gZmljYSBsb2dvIGFww7NzIGEgaGVhZGxpbmUsIG7Do28gZGVwb2lzIGRlIHRvZG8gbyBwaXRjaCkuCiAgICB2YXIga3ZIVE1MID0gQ0FEX0tWCiAgICAgID8gJzxkaXYgY2xhc3M9ImNhZC1rdiI+PGltZyBzcmM9IicrQ0FEX0tWKyciIGFsdD0iQXRvIEZpbmFsICcrZXNjKEFGX0JSQU5ELmN1cnRhKSsnIDIwMjYiIG9uZXJyb3I9InZhciBrPXRoaXMuY2xvc2VzdChcJy5jYWQta3ZcJyk7IGlmKGspIGsucmVtb3ZlKCkiPjwvZGl2PicKICAgICAgOiAnJzsKICAgIHZhciBsZWFkSFRNTCA9ICc8ZGl2IGNsYXNzPSJjYWQtbGVhZCI+JysKICAgICAgJzxkaXYgY2xhc3M9ImNhZC1raWNrZXIiPlJldGEgZmluYWwgwrcgMcKqIGZhc2UgwrcgYSBwYXJ0aXIgZGUgMjYvMDg8L2Rpdj4nKwogICAgICAnPGgyIGNsYXNzPSJjYWQtaCI+QSBtYWlvciByZXRhIGZpbmFsIHJ1bW8gYW8gJytlc2MoQUZfQlJBTkQuY3VydGEpKycgMjAyNjwvaDI+JysKICAgICAgJzxwIGNsYXNzPSJjYWQtc3ViIj4xNSBkaWFzIGRlIHNwcmludCBjb20gb3MgcHJvZmVzc29yZXMgZG8gRXN0cmF0w6lnaWEgTUVEIHByYSB2b2PDqiBjaGVnYXIgbmEgcHJvdmEgZG9taW5hbmRvIG8gcXVlIG1haXMgY2FpLiBFIGRlIGdyYcOnYS48L3A+JysKICAgICAgJzwvZGl2Pic7CiAgICB2YXIgYmVuZWZIVE1MID0gJzxkaXYgY2xhc3M9ImNhZC1iZW5lZi13cmFwIj4nKwogICAgICAnPHVsIGNsYXNzPSJjYWQtYmVuZWYiPicrCiAgICAgICc8bGk+QXVsYXMgYW8gdml2byBjb20gbyB0aW1lIGRlIHByb2Zlc3NvcmVzPC9saT4nKwogICAgICAnPGxpPlF1ZXN0w7VlcyBjb21lbnRhZGFzIG5hIGhvcmEsIG5vIHBhZHLDo28gZGEgcHJvdmE8L2xpPicrCiAgICAgICc8bGk+U2ltdWxhZG8gRmluYWwgZSByYW5raW5nIGNvbSBwcsOqbWlvcyBkZSB2ZXJkYWRlPC9saT4nKwogICAgICAnPGxpPkRvIGNvbWXDp28gYW8gZmltLCAxMDAlIGdyYXR1aXRvPC9saT4nKwogICAgICAnPC91bD4nKwogICAgICAnPGRpdiBjbGFzcz0iY2FkLXVyZyI+RXN0cmVpYSAyNi8wOCwgw6BzIDE5aCwgYW8gdml2byBubyBZb3VUdWJlLiBHYXJhbnRhIGEgc3VhIHZhZ2EgYWdvcmEuPC9kaXY+JysKICAgICAgJzwvZGl2Pic7CiAgICBlbC5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz0iYXV0aC1jYXJkIGNhZC1yaWNoJysoQ0FEX0tWPycnOicgbm8ta3YnKSsoRz8nIGNhZC1zby1mb3JtJzonJykrJyI+JysKICAgICAga3ZIVE1MKyhHPycnOmxlYWRIVE1MKSsnPGRpdiBjbGFzcz0iY2FkLXBhbmVsIj4nK2JvZHlIVE1MKyc8L2Rpdj4nKyhHPycnOmJlbmVmSFRNTCkrJzwvZGl2Pic7ICAgLyogQUYtQ0FELVNFTS1QSVRDSDoxMy0wOSAqLwogIH0KCiAgdmFyIGZjID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZDcGYnKTsKICBmYy5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGZ1bmN0aW9uKCl7CiAgICB2YXIgZCA9IGZjLnZhbHVlLnJlcGxhY2UoL1xEL2csJycpLnNsaWNlKDAsMTEpOwogICAgZmMudmFsdWUgPSBkLnJlcGxhY2UoLyhcZHszfSkoXGQpLywnJDEuJDInKS5yZXBsYWNlKC8oXGR7M30pXC4oXGR7M30pKFxkKS8sJyQxLiQyLiQzJykucmVwbGFjZSgvXC4oXGR7M30pKFxkezEsMn0pJC8sJy4kMS0kMicpOwogIH0pOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhdXRoVHJvY2EnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKGV2KXsKICAgIC8vIGNvbSBww6FnaW5hcyByZWFpcyAocGFkcsOjbyBCb2zDo28pLCBhIHRyb2NhIE5BVkVHQTsgc2VtIGVsYXMsIGFsdGVybmEgYSB2aWV3CiAgICB2YXIgYWx2byA9IGFjZXNzYXIgPyBBRl9VUkxTLmNhZGFzdHJvIDogQUZfVVJMUy5hY2Vzc2FyOwogICAgaWYgKHdpbmRvdy5fX0FGX1VSTFMgJiYgYWx2byAmJiBhbHZvLmNoYXJBdCgwKSAhPT0gJyMnKSByZXR1cm47IC8vIGRlaXhhIG8gPGE+IG5hdmVnYXIKICAgIGV2LnByZXZlbnREZWZhdWx0KCk7IHJlbmRlckF1dGgoYWNlc3NhciA\/ICdjYWRhc3RybycgOiAnYWNlc3NhcicpOwogIH0pOwogIC8qIHJhZGFyIGRvIHN1Ym1pdDogbyBiZWFjb24gZGUgY2FyZ2EgbsOjbyBlbnhlcmdhIG8gcXVlIGFjb250ZWNlIGVudHJlIG8KICAgICB0b3F1ZSBlbSAiRW50cmFyIiBlIGEgY2hlZ2FkYSBuYSDDoXJlYSDigJQgY2FkYSBldGFwYSByZXBvcnRhIGEgZmFzZSwKICAgICBpbmNsdXNpdmUgbyBwcsOzcHJpbyB0b3F1ZSAoZGlzdGluZ3VlICJ0b3F1ZSBuw6NvIHJlZ2lzdHJvdSIgZGUKICAgICAiaGFuZGxlciByb2RvdSBlIHBhcm91IGVtIFgiKSAqLwogIHZhciBkaWFnID0gZnVuY3Rpb24oZil7IHRyeSB7IGlmICh3aW5kb3cuX19hZkVudmlhKSB3aW5kb3cuX19hZkVudmlhKGYpOyB9IGNhdGNoKGUpe30gfTsKICB2YXIgcXVlbSA9IGFjZXNzYXIgPyAnbG9naW4nIDogJ2NhZGFzdHJvJzsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXV0aEJ0bicpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXsgZGlhZyhxdWVtICsgJ19ib3RhbycpOyB9KTsKICAvKiBUZWxlZm9uZSDDqSBPQlJJR0FUw5NSSU8gKDI0LzA4KS4gTm9ybWFsaXphIHByYSBEREQrbnVtZXJvIHNlbSBEREk6IG8gZXNwZWxobwogICAgIGRvIENSTSBsw6ogbyBWQUxPUiBETyBDQU1QTyBlIG8gbWlkZGxld2FyZSBkbyAvbWVkIHByZWZpeGEgNTUg4oCUIG1hbmRhciBjb20gbwogICAgICs1NSBqw6EgZGlnaXRhZG8gZ2VyYXZhIDU1NTXigKYgbmEgREUgKGF1ZGl0b3JpYSAyMi8wOCkuICovCiAgdmFyIHRlbE5vcm1hbGl6YSA9IGZ1bmN0aW9uKHYpewogICAgdmFyIGQgPSBTdHJpbmcodiB8fCAnJykucmVwbGFjZSgvXEQvZywgJycpOwogICAgaWYgKGQubGVuZ3RoID49IDEyICYmIGQubGVuZ3RoIDw9IDEzICYmIGQuaW5kZXhPZignNTUnKSA9PT0gMCkgZCA9IGQuc2xpY2UoMik7CiAgICByZXR1cm4gZDsKICB9OwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhdXRoRm9ybScpLmFkZEV2ZW50TGlzdGVuZXIoJ3N1Ym1pdCcsIGZ1bmN0aW9uKGV2KXsKICAgIGV2LnByZXZlbnREZWZhdWx0KCk7CiAgICBldi50YXJnZXQuX191bHRpbW9TdWJtaXQgPSBEYXRlLm5vdygpOwogICAgaWYgKGV2LnRhcmdldC5jaGVja1ZhbGlkaXR5ICYmICFldi50YXJnZXQuY2hlY2tWYWxpZGl0eSgpKSB7CiAgICAgIGlmIChldi50YXJnZXQucmVwb3J0VmFsaWRpdHkpIGV2LnRhcmdldC5yZXBvcnRWYWxpZGl0eSgpOwogICAgICBkaWFnKHF1ZW0gKyAnX2Zvcm1faW52YWxpZG8nKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgdmFyIGJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhdXRoQnRuJyk7CiAgICBpZiAoIWJ0bikgcmV0dXJuOyAgLy8gb3ZlcmxheSBqw6EgcmVtb3ZpZGE6IG8gZmx1eG8gZGVzdGUgY2xpcXVlIGrDoSBjb25jbHVpdQogICAgLy8gZXJybyBJTkxJTkUgbm8gY2FydMOjbyAobsOjbyBzw7MgdG9hc3QpOiBvIHRvYXN0IHZpdmUgbm8gcm9kYXDDqSwgb25kZSBvCiAgICAvLyBiYW5uZXIgZGUgY29va2llcyBkbyBXUCBzZSBzb2JyZXDDtWUgbm8gY2VsdWxhciDigJQgbyBhbHVubyBuw6NvIHZpYSBvIG1vdGl2bwogICAgLy8gZGEgcmVjdXNhIGUgYWNoYXZhIHF1ZSBvIGJvdMOjbyBuw6NvIGZleiBuYWRhLiBBdWRpdG9yaWEgMTEvMDguCiAgICB2YXIgZXJyb0JveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhdXRoRXJybycpOwogICAgdmFyIG1vc3RyYUVycm8gPSBmdW5jdGlvbihtc2cpeyBpZiAoZXJyb0JveCl7IGVycm9Cb3gudGV4dENvbnRlbnQgPSBtc2c7IGVycm9Cb3guaGlkZGVuID0gZmFsc2U7IH0gdG9hc3QobXNnKTsgfTsKICAgIGlmIChlcnJvQm94KSBlcnJvQm94LmhpZGRlbiA9IHRydWU7CiAgICB2YXIgY3BmID0gZmMudmFsdWUucmVwbGFjZSgvXEQvZywnJyk7CiAgICBpZiAoIWNwZkRWKGNwZikpIHsgbW9zdHJhRXJybygnQ1BGIGludsOhbGlkby4gQ29uZmlyYSBvcyBuw7ptZXJvcy4nKTsgZGlhZyhxdWVtICsgJ19kdl9pbnZhbGlkbycpOyByZXR1cm47IH0KICAgIGlmICghYWNlc3NhcikgewogICAgICB2YXIgZm5vbWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZk5vbWUnKTsKICAgICAgdmFyIHBhcnRlc05vbWUgPSBTdHJpbmcoKGZub21lICYmIGZub21lLnZhbHVlKSB8fCAnJykudHJpbSgpLnNwbGl0KC9ccysvKS5maWx0ZXIoQm9vbGVhbik7CiAgICAgIGlmIChwYXJ0ZXNOb21lLmxlbmd0aCA8IDIgfHwgcGFydGVzTm9tZVtwYXJ0ZXNOb21lLmxlbmd0aCAtIDFdLmxlbmd0aCA8IDIpIHsKICAgICAgICBtb3N0cmFFcnJvKCdJbmZvcm1lIG8gc2V1IG5vbWUgY29tcGxldG8gKG5vbWUgZSBzb2JyZW5vbWUpLicpOyBkaWFnKHF1ZW0gKyAnX25vbWVfaW5jb21wbGV0bycpOyByZXR1cm47CiAgICAgIH0KICAgICAgdmFyIGZ3ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZXaGF0cycpOwogICAgICB2YXIgdGVsRGlnID0gdGVsTm9ybWFsaXphKGZ3ICYmIGZ3LnZhbHVlKTsKICAgICAgaWYgKHRlbERpZy5sZW5ndGggPCAxMCB8fCB0ZWxEaWcubGVuZ3RoID4gMTUpIHsKICAgICAgICBtb3N0cmFFcnJvKCdXaGF0c0FwcCBpbnbDoWxpZG8uIEluZm9ybWUgREREICsgbsO6bWVyby4nKTsgZGlhZyhxdWVtICsgJ190ZWxfaW52YWxpZG8nKTsgcmV0dXJuOwogICAgICB9CiAgICAgIGlmIChmdykgZncudmFsdWUgPSB0ZWxEaWc7CiAgICAgIHZhciBmbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmTW9tZW50bycpOwogICAgICBpZiAoIWZtIHx8ICFmbS52YWx1ZSkgeyBtb3N0cmFFcnJvKCdTZWxlY2lvbmUgYSBzdWEgc2l0dWHDp8OjbyBhdHVhbC4nKTsgZGlhZyhxdWVtICsgJ19zZW1fbW9tZW50bycpOyByZXR1cm47IH0KICAgIH0KICAgIGJ0bi5kaXNhYmxlZCA9IHRydWU7IGJ0bi50ZXh0Q29udGVudCA9ICdVbSBpbnN0YW50ZeKApic7CiAgICBkaWFnKHF1ZW0gKyAnX3N1Ym1pdCcpOwogICAgdmFyIGRvbmUgPSBmdW5jdGlvbigpeyBkaWFnKHF1ZW0gKyAnX29rJyk7IHNlc3Nhb1NldChjcGYpOwogICAgICBpZiAod2luZG93Ll9fQUZfUEFHRSA9PT0gJ2FyZWEnKSB7IGVsLnJlbW92ZSgpOyBpbml0QXJlYSgpOyB9CiAgICAgIGVsc2UgeyBsb2NhdGlvbi5ocmVmID0gQUZfVVJMUy5hcmVhICsgKEFGX1VSTFMuYXJlYS5pbmRleE9mKCc\/JykgPiAtMSA\/ICcmJyA6ICc\/JykgKyAnZT0xJzsgfSB9OwogICAgdmFyIGZhbGhhID0gZnVuY3Rpb24obXNnKXsgZGlhZyhxdWVtICsgJ19yZWN1c2E6JyArIFN0cmluZyhtc2cpLnNsaWNlKDAsNjApKTsgYnRuLmRpc2FibGVkID0gZmFsc2U7CiAgICAgIGJ0bi50ZXh0Q29udGVudCA9IGFjZXNzYXIgPyAnRW50cmFyJyA6ICdJbnNjcmV2ZXIgZSBlbnRyYXInOyBtb3N0cmFFcnJvKG1zZyk7IH07CiAgICAvKiByZWRlIG3Ds3ZlbCBwb2RlIGRlaXhhciBvIGZldGNoIHBlbmR1cmFkbyBzZW0gcmVqZWl0YXI6IHNlbSB0ZXRvLCBvIGJvdMOjbwogICAgICAgZmljYSBwcmVzbyBlbSAiVW0gaW5zdGFudGXigKYiIGUgbyBhbHVubyByZWNhcnJlZ2EgYSBww6FnaW5hICovCiAgICB2YXIgY29tVGV0byA9IGZ1bmN0aW9uKHApeyByZXR1cm4gUHJvbWlzZS5yYWNlKFtwLCBuZXcgUHJvbWlzZShmdW5jdGlvbihfLCByZWopewogICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7IHJlaihuZXcgRXJyb3IoJ3RpbWVvdXRfMTJzJykpOyB9LCAxMjAwMCk7IH0pXSk7IH07CiAgICBpZiAoYWNlc3NhcikgewogICAgICBjb21UZXRvKHNiUnBjKCdsb2dpbl9jcGYnLCB7IHBfY3BmOiBjcGYgfSkpLnRoZW4oZnVuY3Rpb24ocil7CiAgICAgICAgaWYgKHIuc3RhdHVzID09PSAnb2snKSBkb25lKCk7CiAgICAgICAgZWxzZSBmYWxoYSgnQ1BGIG7Do28gZW5jb250cmFkby4gRmHDp2EgYSBzdWEgaW5zY3Jpw6fDo28gZ3JhdHVpdGEuJyk7CiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGVycil7IGRpYWcoJ2xvZ2luX2Vycm86JyArIFN0cmluZygoZXJyICYmIGVyci5tZXNzYWdlKSB8fCBlcnIpLnNsaWNlKDAsODApKTsKICAgICAgICBmYWxoYSgnU2VtIGNvbmV4w6NvLiBUZW50ZSBub3ZhbWVudGUuJyk7IH0pOwogICAgfSBlbHNlIHsKICAgICAgY29tVGV0byhzYlJwYygnY2FkYXN0cmFyJywgewogICAgICAgIHBfbm9tZTogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZOb21lJykudmFsdWUsCiAgICAgICAgcF9lbWFpbDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZFbWFpbCcpLnZhbHVlLAogICAgICAgIHBfd2hhdHM6IHRlbE5vcm1hbGl6YShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZldoYXRzJykudmFsdWUpLAogICAgICAgIHBfY3BmOiBjcGYsIHBfcHJvdmE6IEFGX1BST1ZBLAogICAgICAgIHBfbW9tZW50bzogKGZ1bmN0aW9uKCl7IHZhciBzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZNb21lbnRvJyk7IHJldHVybiAocyAmJiBzLnZhbHVlKSB8fCBudWxsOyB9KSgpLAogICAgICAgIHBfcmVmOiAoZnVuY3Rpb24oKXsgdHJ5IHsgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKExTUCsncmVmJykgfHwgbnVsbDsgfSBjYXRjaChlKXsgcmV0dXJuIG51bGw7IH0gfSkoKQogICAgICB9KSkudGhlbihmdW5jdGlvbihyKXsKICAgICAgICBpZiAoci5zdGF0dXMgPT09ICdvaycgfHwgci5zdGF0dXMgPT09ICdqYV9jYWRhc3RyYWRvJykgewogICAgICAgICAgdHJ5IHsgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oTFNQKydyZWYnKTsgfSBjYXRjaChlKXt9CiAgICAgICAgICB0cnkgeyBhZlNmbWNFbnZpYXIoKTsgfSBjYXRjaChlKXt9CiAgICAgICAgICBhZkd0bUxlYWQoZG9uZSk7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKHIuc3RhdHVzID09PSAnY3BmX2ludmFsaWRvJykgZmFsaGEoJ0NQRiBpbnbDoWxpZG8uIENvbmZpcmEgb3MgbsO6bWVyb3MuJyk7CiAgICAgICAgZWxzZSBpZiAoci5zdGF0dXMgPT09ICdub21lX2luY29tcGxldG8nKSBmYWxoYSgnSW5mb3JtZSBvIHNldSBub21lIGNvbXBsZXRvIChub21lIGUgc29icmVub21lKS4nKTsKICAgICAgICBlbHNlIGlmIChyLnN0YXR1cyA9PT0gJ2VtYWlsX2ludmFsaWRvJykgZmFsaGEoJ0UtbWFpbCBpbnbDoWxpZG8uIENvbmZpcmEgbyBlbmRlcmXDp28uJyk7CiAgICAgICAgZWxzZSBpZiAoci5zdGF0dXMgPT09ICd3aGF0c19pbnZhbGlkbycpIGZhbGhhKCdXaGF0c0FwcCBpbnbDoWxpZG8uIEluZm9ybWUgREREICsgbsO6bWVyby4nKTsKICAgICAgICBlbHNlIGlmIChyLnN0YXR1cyA9PT0gJ21vbWVudG9fb2JyaWdhdG9yaW8nKSBmYWxoYSgnU2VsZWNpb25lIGEgc3VhIHNpdHVhw6fDo28gYXR1YWwuJyk7CiAgICAgICAgZWxzZSBmYWxoYSgnTsOjbyBmb2kgcG9zc8OtdmVsIGNvbmNsdWlyLiBDb25maXJhIG9zIGRhZG9zLicpOwogICAgICB9KS5jYXRjaChmdW5jdGlvbihlcnIpeyBkaWFnKCdjYWRhc3Ryb19lcnJvOicgKyBTdHJpbmcoKGVyciAmJiBlcnIubWVzc2FnZSkgfHwgZXJyKS5zbGljZSgwLDgwKSk7CiAgICAgICAgZmFsaGEoJ1NlbSBjb25leMOjby4gVGVudGUgbm92YW1lbnRlLicpOyB9KTsKICAgIH0KICB9KTsKfQoKZnVuY3Rpb24gaW5pdEFyZWEoKXsKICB2YXIgZGlhZ0EgPSBmdW5jdGlvbihmKXsgdHJ5IHsgaWYgKHdpbmRvdy5fX2FmRW52aWEpIHdpbmRvdy5fX2FmRW52aWEoZik7IH0gY2F0Y2goZSl7fSB9OwogIGlmICghY3BmU2Fsdm8oKSkgewogICAgLy8gdmVpbyBkbyBsb2dpbiBlIGEgc2Vzc8OjbyBuw6NvIHNvYnJldml2ZXU6IG5hdmVnYWRvciBibG9xdWVhbmRvIGFybWF6ZW5hbWVudG8KICAgIGlmICgvWz8mXWU9MS8udGVzdChsb2NhdGlvbi5zZWFyY2gpKSB7CiAgICAgIGRpYWdBKCdhcmVhX2FudGlfbGFjbycpOwogICAgICBkb2N1bWVudC5ib2R5LmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPSJhdXRoLW92ZXJsYXkiPjxkaXYgY2xhc3M9ImF1dGgtY2FyZCI+JysKICAgICAgICAnPGRpdiBjbGFzcz0ia2lja2VyIiBzdHlsZT0ibWFyZ2luLWJvdHRvbToxMHB4Ij4nK0FGX0JSQU5ELnRhZysnPC9kaXY+JysKICAgICAgICAnPGgxPkF0aXZlIG9zIGRhZG9zIGRvIHNpdGU8L2gxPicrCiAgICAgICAgJzxwIGNsYXNzPSJzdWIiPlNldSBhY2Vzc28gZm9pIGNvbmZpcm1hZG8sIG1hcyBlc3RlIG5hdmVnYWRvciBlc3TDoSBpbXBlZGluZG8gbyBzaXRlIGRlIGd1YXJkYXIgYSBzdWEgc2Vzc8OjbywgZW50w6NvIG7Do28gY29uc2VndWltb3MgbWFudGVyIHZvY8OqIGNvbmVjdGFkby48L3A+JysKICAgICAgICAnPHAgY2xhc3M9InN1YiI+PGI+Tm8gaVBob25lOjwvYj4gc2FpYSBkYSBOYXZlZ2HDp8OjbyBQcml2YWRhIG91IHbDoSBlbSBBanVzdGVzIOKGkiBTYWZhcmkgZSBkZXNhdGl2ZSAiQmxvcXVlYXIgdG9kb3Mgb3MgY29va2llcyIuIDxiPk5vIEFuZHJvaWQ6PC9iPiBwZXJtaXRhIGNvb2tpZXMgcGFyYSBlc3RlIHNpdGUuPC9wPicrCiAgICAgICAgJzxhIGNsYXNzPSJidG4gYnRuLWFtYmVyIiBocmVmPSInK0FGX1VSTFMuYWNlc3NhcisnIiBzdHlsZT0id2lkdGg6MTAwJTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyIj5UZW50YXIgbm92YW1lbnRlPC9hPjwvZGl2PjwvZGl2Pic7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGRpYWdBKCdhcmVhX3NlbV9zZXNzYW8nKTsKICAgIGlmICh3aW5kb3cuX19BRl9VUkxTKSB7IGxvY2F0aW9uLmhyZWYgPSBBRl9VUkxTLmFjZXNzYXI7IHJldHVybjsgfQogICAgcmVuZGVyQXV0aChsb2NhdGlvbi5oYXNoID09PSAnI2NhZGFzdHJvJyA\/ICdjYWRhc3RybycgOiAnYWNlc3NhcicpOwogICAgcmV0dXJuOwogIH0KICB2YXIgbWFpbkVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haW4nKTsKICBpZiAobWFpbkVsKSBtYWluRWwuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9ImNhcmQiIHN0eWxlPSJwYWRkaW5nOjQwcHg7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6dmFyKC0taW5rLWRpbSk7bWFyZ2luLXRvcDo0MHB4Ij5DYXJyZWdhbmRvIGEgc3VhIMOhcmVh4oCmPC9kaXY+JzsKICBoaWRyYXRhcigpLnRoZW4oZnVuY3Rpb24ob2spewogICAgaWYgKCFvaykgeyBkaWFnQSgnYXJlYV9oaWRyYXRhcl9mYWxob3UnKTsgc3RvcmUubG9nb3V0KCk7IHJlbmRlckF1dGgoJ2FjZXNzYXInKTsgcmV0dXJuOyB9CiAgICBkaWFnQSgnYXJlYV9vaycpOwogICAgaW5pY2lhckFwcCgpOwogIH0pLmNhdGNoKGZ1bmN0aW9uKGVycil7CiAgICBkaWFnQSgnYXJlYV9zZW1fY29uZXhhbzonICsgU3RyaW5nKChlcnIgJiYgZXJyLm1lc3NhZ2UpIHx8IGVycikuc2xpY2UoMCw4MCkpOwogICAgaWYgKG1haW5FbCkgbWFpbkVsLmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPSJjYXJkIiBzdHlsZT0icGFkZGluZzo0MHB4O3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOnZhcigtLWluay1kaW0pO21hcmdpbi10b3A6NDBweCI+U2VtIGNvbmV4w6NvLiBSZWNhcnJlZ3VlIGEgcMOhZ2luYS48L2Rpdj4nOwogIH0pOwp9CgpmdW5jdGlvbiBpbmljaWFyQXBwKCl7CiAgdmFyIHVzZXIgPSBzdG9yZS5tZSgpOwogIGlmICghdXNlcikgeyByZW5kZXJBdXRoKCdhY2Vzc2FyJyk7IHJldHVybjsgfQogIHZhciBqID0gSk9STkFEQVNbdXNlci5wcm92YV07CiAgdmFyIGhvamUgPSBob2plSVNPKGopOwogIC8vIEEgZGF0YSBlcmEgY29uZ2VsYWRhIG5vIGxvYWQgZSBudW5jYSByZWF2YWxpYWRhOiBjb21vIG8gYXBwIMOpIGluc3RhbMOhdmVsCiAgLy8gKFBXQSBzdGFuZGFsb25lKSBlIG8gaU9TIG1hbnTDqW0gYSBhYmEgdml2YSBwb3IgZGlhcywgcXVlbSBhYnJpc3NlIG5hIHbDqXNwZXJhCiAgLy8gZSB2b2x0YXNzZSBubyBkaWEgZGEgYXVsYSBOw4NPIHZpYSBvIGNoZWNrLWluIGxpYmVyYXIgbmVtIGEgam9ybmFkYSB2aXJhciBlbQogIC8vIDI2LzA4LiBHdWFyZGEgYSBkYXRhIGNhcnJlZ2FkYTsgc2UgbyBkaWEgQlJUIG11ZGFyIChyZXRvbWFkYSBkZSBhYmEvUFdBKSwKICAvLyByZWNhcnJlZ2Eg4oCUIHJlaWRyYXRhIHR1ZG8gY29tIGEgZGF0YSBjZXJ0YS4gQXVkaXRvcmlhIDExLzA4LgogIHZhciBkaWFDYXJyZWdhZG8gPSBob2plLmlzbzsKICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgZnVuY3Rpb24oKXsKICAgIGlmIChkb2N1bWVudC52aXNpYmlsaXR5U3RhdGUgIT09ICd2aXNpYmxlJykgcmV0dXJuOwogICAgaWYgKGhvamVJU08oaikuaXNvICE9PSBkaWFDYXJyZWdhZG8pIGxvY2F0aW9uLnJlbG9hZCgpOwogIH0pOwoKICAvLyBzaGVsbAogICQoJyNicmFuZExpZ2EnKS50ZXh0Q29udGVudCA9IGoubGlnYTsKICAkKCcjdU5vbWUnKS50ZXh0Q29udGVudCA9IHVzZXIubm9tZS5zcGxpdCgnICcpWzBdICsgJyAnICsgKHVzZXIubm9tZS5zcGxpdCgnICcpWzFdfHwnJykuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyAnLic7CiAgJCgnI3VQcm92YScpLnRleHRDb250ZW50ID0gai5ub21lOwogICQoJyN1QXYnKS50ZXh0Q29udGVudCA9IHVzZXIubm9tZS5zcGxpdCgnICcpLnNsaWNlKDAsMikubWFwKGZ1bmN0aW9uKHApeyByZXR1cm4gcC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKTsgfSkuam9pbignJyk7CiAgdmFyIHNpbURNID0gZGlhTWVzKGouZXZlbnRvcy5maW5kKGZ1bmN0aW9uKGUpeyByZXR1cm4gZS5pZCA9PT0gai5zaW11bGFkb0lkOyB9KS5kYXRhKTsKICAkKCcjYmFkZ2VTaW0nKS5pbm5lckhUTUwgPSBzaW1ETS5kICsgJzxicj4nICsgc2ltRE0ubTsKICAkKCcjYnRuU2FpcicpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXsgc3RvcmUubG9nb3V0KCk7IGxvY2F0aW9uLmhyZWYgPSB3aW5kb3cuX19BRl9VUkxTID8gQUZfVVJMUy5scCA6IGxvY2F0aW9uLmhyZWY7IH0pOwoKICAvLyBhdGFsaG8gcHJvIFBhaW5lbCBkZSBvcGVyYcOnw6NvOiBlbmdyZW5hZ2VtIHJldmVsYWRhIFPDkyBwYXJhIG9zIENQRnMgZGUKICAvLyBjb29yZGVuYcOnw6NvIChwYWRyw6NvIGRhIGVuZ3JlbmFnZW0gZG8gQm9sw6NvIGRhIENvcnVqYSkuIE8gcGFpbmVsIHRlbSBjaGF2ZQogIC8vIHByw7NwcmlhIG5vIHNlcnZpZG9yOyBpc3RvIMOpIHPDsyBvIGNhbWluaG8gYXTDqSBlbGUsIG7Do28gdW1hIHBlcm1pc3PDo28uCiAgdmFyIGJ0blBhaW5lbCA9ICQoJyNidG5QYWluZWwnKTsKICBpZiAoYnRuUGFpbmVsICYmIENQRlNfQ09PUkQuaW5kZXhPZih1c2VyLmNwZikgPiAtMSkgewogICAgYnRuUGFpbmVsLmhyZWYgPSAod2luZG93Ll9fQUZfVVJMUyAmJiBBRl9VUkxTLnBhaW5lbCkgfHwgJy4uL3BhaW5lbC8nOwogICAgYnRuUGFpbmVsLmhpZGRlbiA9IGZhbHNlOwogIH0KCiAgLy8gbW9kbyBjbGFyby9lc2N1cm8gKHBlcnNpc3RpZG8gZW0gYWZfdGhlbWU7IGFwbGljYWRvIG5vIDxoZWFkPiBzZW0gZmxhc2gpCiAgdmFyIElDT19TT0wgPSAnPHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIj48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSI0LjIiLz48cGF0aCBkPSJNMTIgMnYyLjZNMTIgMTkuNFYyMk0yIDEyaDIuNk0xOS40IDEySDIyTTQuOSA0LjlsMS45IDEuOU0xNy4yIDE3LjJsMS45IDEuOU00LjkgMTkuMWwxLjktMS45TTE3LjIgNi44bDEuOS0xLjkiLz48L3N2Zz4nOwogIHZhciBJQ09fTFVBID0gJzxzdmcgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCI+PHBhdGggZD0iTTIwLjQgMTQuMkE4LjYgOC42IDAgMSAxIDkuOCAzLjZhNyA3IDAgMSAwIDEwLjYgMTAuNnoiLz48L3N2Zz4nOwogIHZhciBidG5UZW1hID0gJCgnI2J0blRlbWEnKTsKICBmdW5jdGlvbiBwaW50YVRlbWEoKXsgaWYgKGJ0blRlbWEpIGJ0blRlbWEuaW5uZXJIVE1MID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRhdGFzZXQudGhlbWUgPT09ICdkYXJrJyA\/IElDT19TT0wgOiBJQ09fTFVBOyB9CiAgaWYgKGJ0blRlbWEpIGJ0blRlbWEuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpewogICAgdmFyIGVzY3VybyA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5kYXRhc2V0LnRoZW1lID09PSAnZGFyayc7CiAgICBpZiAoZXNjdXJvKSB7IGRlbGV0ZSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZGF0YXNldC50aGVtZTsgc3RvcmUuc2V0KCd0aGVtZScsICdjbGFybycpOyB9CiAgICBlbHNlIHsgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRhdGFzZXQudGhlbWUgPSAnZGFyayc7IHN0b3JlLnNldCgndGhlbWUnLCAnZGFyaycpOyB9CiAgICBwaW50YVRlbWEoKTsKICB9KTsKICBwaW50YVRlbWEoKTsKCiAgdmFyIHRvdGFsRGlhcyA9IGRpYXMoai5pbmljaW8sIGoucHJvdmEpICsgMTsKICB2YXIgZGlhQXR1YWwgPSBNYXRoLm1pbih0b3RhbERpYXMsIE1hdGgubWF4KDEsIGRpYXMoai5pbmljaW8sIGhvamUuaXNvKSArIDEpKTsKICBpZiAoaG9qZS5pc28gPCBqLmluaWNpbykgewogICAgJCgnI2RpYUpvcm5hZGEnKS50ZXh0Q29udGVudCA9ICdDb21lw6dhIGVtICcgKyBkYXRhQlIoai5pbmljaW8pOwogICAgJCgnI2pvcm5hZGFGaWxsJykuc3R5bGUud2lkdGggPSAnMCUnOwogIH0gZWxzZSB7CiAgICAkKCcjZGlhSm9ybmFkYScpLnRleHRDb250ZW50ID0gJ0RpYSAnICsgZGlhQXR1YWwgKyAnIGRlICcgKyB0b3RhbERpYXM7CiAgICAkKCcjam9ybmFkYUZpbGwnKS5zdHlsZS53aWR0aCA9IE1hdGgucm91bmQoZGlhQXR1YWwvdG90YWxEaWFzKjEwMCkgKyAnJSc7CiAgfQoKICBmdW5jdGlvbiBkZW1vQmFubmVyKCl7CiAgICB2YXIgbXNncyA9IFtdOwogICAgaWYgKE1PRE9fVkFMSURBQ0FPKSBtc2dzLnB1c2goJzxiPkFtYmllbnRlIGRlIHRlc3RlOjwvYj4gdHVkbyBsaWJlcmFkbyBhbnRlcyBkYSBlc3RyZWlhOyByZWdpc3Ryb3Mgc2Vyw6NvIHplcmFkb3Mgbm8gbGFuw6dhbWVudG8uJyk7CiAgICBlbHNlIGlmIChtb2RvUHJldmlldygpKSBtc2dzLnB1c2goJzxiPlZpc8OjbyBkbyBjb29yZGVuYWRvcjo8L2I+IHZvY8OqIHbDqiBvIGNvbnRlw7pkbyBhbnRlcyBkYSBlc3RyZWlhOyBhcyBhw6fDtWVzIHNlZ3VlbSBhcyByZWdyYXMgcmVhaXMgZG9zIGFsdW5vcy4nKTsKICAgIGVsc2UgaWYgKGhvamUuc2ltdWxhZGEpIG1zZ3MucHVzaCgnPGI+VmlzdWFsaXphw6fDo28gZGEgb3BlcmHDp8Ojbzo8L2I+IGRhdGEgc2ltdWxhZGEgJyArIGRhdGFCUihob2plLmlzbykpOwogICAgLy8gKHByw6ktam9ybmFkYSBzZW0gYmFubmVyOiBvIGNoaXAgIkZhbHRhbSBOIGRpYXMiLCBhIHNpZGViYXIgZSBvCiAgICAvLyAiSG9qZSBuYSBqb3JuYWRhIiBqw6EgY29tdW5pY2FtIGEgZGF0YTsgYmFubmVyIHJlcGV0aWEgM3ggYSBtZXNtYSBpbmZvKQogICAgaWYgKGoucHJvdmlzb3JpbykgbXNncy5wdXNoKCdEYXRhcyBkbyBSZXZhbGlkYSAyMDI2LjIgPGI+cHJvdmlzw7NyaWFzPC9iPiBhdMOpIG8gZWRpdGFsIGRvIElORVAnKTsKICAgIGlmICghbXNncy5sZW5ndGgpIHJldHVybiAnJzsKICAgIHJldHVybiAnPGRpdiBjbGFzcz0iZGVtby1iYW5uZXIiPicgKyBtc2dzLmpvaW4oJyDCtyAnKSArICcuPC9kaXY+JzsKICB9CgogIGZ1bmN0aW9uIHBhZ2VIZWFkKGtpY2tlciwgdGl0dWxvLCBkZXNjLCBjaGlwKXsKICAgIHJldHVybiAnPGRpdiBjbGFzcz0icGFnZS1oZWFkIj48ZGl2PjxzcGFuIGNsYXNzPSJraWNrZXIiPicra2lja2VyKyc8L3NwYW4+PGgxPicrdGl0dWxvKyc8L2gxPicrCiAgICAgICc8cCBjbGFzcz0iZGVzYyI+JytkZXNjKyc8L3A+PC9kaXY+PHNwYW4gY2xhc3M9InB0cy1jaGlwIj4nK2NoaXArJzwvc3Bhbj48L2Rpdj4nOwogIH0KCiAgLyogLS0tLS0tLS0tLSBBVUxBUyAodG9kYXMgYXMgdHJhbnNtaXNzw7VlcyArIGNoZWNrLWluIGVtYnV0aWRvKSAtLS0tLS0tLS0tICovCiAgZnVuY3Rpb24gZXZlbnRvc0RvRGlhKGlzbyl7IHJldHVybiBqLmV2ZW50b3MuZmlsdGVyKGZ1bmN0aW9uKGUpeyByZXR1cm4gZS5kYXRhID09PSBpc287IH0pOyB9CgogIHZhciBJQ09fUExBWSA9ICc8c3ZnIHdpZHRoPSIxMSIgaGVpZ2h0PSIxMSIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik03IDRsMTMgOC0xMyA4eiIvPjwvc3ZnPic7CiAgdmFyIElDT19ETCA9ICc8c3ZnIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyLjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCI+PHBhdGggZD0iTTEyIDN2MTIiLz48cGF0aCBkPSJNNiAxMWw2IDYgNi02Ii8+PHBhdGggZD0iTTQgMjFoMTYiLz48L3N2Zz4nOwoKICB2YXIgSUNPX1BST1ZBID0gJzxzdmcgd2lkdGg9IjI4IiBoZWlnaHQ9IjI4IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjEuNyIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj48cmVjdCB4PSI1IiB5PSIzIiB3aWR0aD0iMTQiIGhlaWdodD0iMTgiIHJ4PSIyIi8+PHBhdGggZD0iTTkuNSAzdjIuNGg1VjMiLz48cGF0aCBkPSJNOC41IDExbDEuNiAxLjZMMTMuNSA5Ii8+PHBhdGggZD0iTTguNSAxNmg3Ii8+PC9zdmc+JzsKCiAgZnVuY3Rpb24gdHJpbGhhSXRlbShlKXsKICAgIHZhciBjaGVja3MgPSBzdG9yZS5jaGVja2lucyh1c2VyLmVtYWlsKTsKICAgIHZhciBxcyA9IHN0b3JlLm1pc3NvZXModXNlci5lbWFpbCk7CiAgICB2YXIgZG9uZSA9ICEhY2hlY2tzW2UuaWRdOwogICAgdmFyIGZ1dHVyYSA9IGUuZGF0YSA+IGhvamUuaXNvOwogICAgdmFyIGlzSG9qZSA9IGUuZGF0YSA9PT0gaG9qZS5pc287CiAgICB2YXIgZG0gPSBkaWFNZXMoZS5kYXRhKTsKICAgIHZhciBtID0gcXNbZS5pZF07CgogICAgLy8gTyBTSU1VTEFETyBGSU5BTCBuw6NvIMOpIHZpZGVvYXVsYSAocGVkaWRvIGRvIElnb3IsIDEyLzA4KTogcmVuZGVyaXphIGNvbW8KICAgIC8vIFBST1ZBIOKAlCDDrWNvbmUgZGUgZ2FiYXJpdG8gKHNlbSB0aHVtYiBkbyBZb3VUdWJlLCBzZW0gcGxheS9zbGlkZXMpLCBhcG9udGEKICAgIC8vIHByYSBhYmEgZG8gU2ltdWxhZG8gbmEgcGxhdGFmb3JtYSwgbsOjbyBwcm8gWW91VHViZS4KICAgIGlmIChlLmlkID09PSBqLnNpbXVsYWRvSWQpIHsKICAgICAgdmFyIGNsc1MgPSBmdXR1cmEgPyAnbmV4dCcgOiBpc0hvamUgPyAnbm93JyA6ICdtaXNzJzsKICAgICAgdmFyIGhvcmFTID0gU3RyaW5nKGUuaG9yYSB8fCAnJyk7CiAgICAgIHZhciBjdGFTID0gKGZ1dHVyYSAmJiAhbW9kb1ByZXZpZXcoKSkKICAgICAgICA\/ICc8c3BhbiBjbGFzcz0icmVzIiBzdHlsZT0iY29sb3I6dmFyKC0taW5rLW11dGUpIj5BYnJlIGVtICcrZGF0YUJSKGUuZGF0YSkrJywgw6BzICcrZXNjKGhvcmFTLnNwbGl0KCcgJylbMF0pKyc8L3NwYW4+JwogICAgICAgIDogJzxidXR0b24gY2xhc3M9ImJ0biBidG4tYW1iZXIgYnRuLXNtIiBkYXRhLWdvdG89InNpbXVsYWRvIj5JciBwYXJhIG8gU2ltdWxhZG88L2J1dHRvbj4nOwogICAgICByZXR1cm4gJzxkaXYgY2xhc3M9InRyLWl0ZW0gdHItc2ltICcrY2xzUysnIj48c3BhbiBjbGFzcz0idHItZG90Ij48L3NwYW4+PGRpdiBjbGFzcz0idHItY2FyZCI+JysKICAgICAgICAnPGRpdiBjbGFzcz0idHItZGF0YSI+JytkbS5kKyc8c21hbGw+JytkbS5tKyc8L3NtYWxsPicrKGlzSG9qZT8nPGVtPkhvamU8L2VtPic6JycpKyc8L2Rpdj4nKwogICAgICAgICc8ZGl2IGNsYXNzPSJ0ci10aHVtYiBzaW0tdGh1bWIiPicrSUNPX1BST1ZBKyc8L2Rpdj4nKwogICAgICAgICc8ZGl2IGNsYXNzPSJ0ci1tYWluIj4nKwogICAgICAgICc8ZGl2IGNsYXNzPSJ0ci13aGVuIj5TaW11bGFkbyBGaW5hbCDCtyAnK2VzYyhlLmhvcmEpKyc8L2Rpdj4nKwogICAgICAgICc8Yj4nK2VzYyhlLnRpdHVsbykrJzwvYj4nKwogICAgICAgICc8ZGl2IGNsYXNzPSJ0ci1mb290Ij48c3BhbiBzdHlsZT0iZGlzcGxheTpmbGV4O2dhcDoxMHB4O2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4LXdyYXA6d3JhcCI+JysKICAgICAgICBjdGFTKyc8c3BhbiBjbGFzcz0ic3RhdGUtdGFnIj5Qcm92YSDDum5pY2EgwrcgMTAwIHF1ZXN0w7VlcyBuYSBwbGF0YWZvcm1hPC9zcGFuPjwvc3Bhbj48L2Rpdj4nKwogICAgICAgICc8L2Rpdj48L2Rpdj48L2Rpdj4nOwogICAgfQoKICAgIHZhciB0aXBvTGFiZWwgPSBlLnRpcG89PT0ncHJvdmEnID8gJ0RpYSBkYSBwcm92YScgOiBlLnRpcG89PT0nbWFyY28nID8gJ0V2ZW50bycgOiAnQXVsYSc7CiAgICB2YXIgdGh1bWIgPSBlLnl0CiAgICAgID8gJzxpbWcgc3JjPSInK3l0VGh1bWIoZS55dCkrJyIgYWx0PSIiIGxvYWRpbmc9ImxhenkiIG9uZXJyb3I9InRoaXMucmVtb3ZlKCkiPicKICAgICAgOiAnPGRpdiBjbGFzcz0iZmFsbCI+PHN2ZyB3aWR0aD0iMjYiIGhlaWdodD0iMjYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMS42IiBzdHJva2UtbGluZWNhcD0icm91bmQiPjxjaXJjbGUgY3g9IjkiIGN5PSIxMCIgcj0iMi4yIi8+PGNpcmNsZSBjeD0iMTUiIGN5PSIxMCIgcj0iMi4yIi8+PHBhdGggZD0iTTQgMjBjMC02IDItMTMgOC0xM3M4IDcgOCAxMyIvPjxwYXRoIGQ9Ik05IDRsMyAyIDMtMiIvPjwvc3ZnPjwvZGl2Pic7CgogICAgdmFyIGFjdHMgPSAnPHNwYW4gY2xhc3M9ImFjdHMiPicrCiAgICAgIChmdXR1cmEKICAgICAgICA\/ICc8YSBjbGFzcz0iYnRuLWljbyIgaHJlZj0iJysoZS55dCB8fCAnaHR0cHM6Ly93d3cueW91dHViZS5jb20vQGVzdHJhdGVnaWFtZWQnKSsnIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciIgdGl0bGU9IkRlZmluaXIgbGVtYnJldGUgbm8gWW91VHViZSIgYXJpYS1sYWJlbD0iRGVmaW5pciBsZW1icmV0ZSBubyBZb3VUdWJlIj4nK0lDT19TSU5PKyc8L2E+JwogICAgICAgIDogJzxhIGNsYXNzPSJidG4taWNvIiBocmVmPSInKyhlLnl0IHx8ICdodHRwczovL3d3dy55b3V0dWJlLmNvbS9AZXN0cmF0ZWdpYW1lZCcpKyciIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIiB0aXRsZT0iQXNzaXN0aXIgw6AgYXVsYSIgYXJpYS1sYWJlbD0iQXNzaXN0aXIgw6AgYXVsYSI+JytJQ09fUExBWSsnPC9hPicpKwogICAgICAoU0xJREVTW2UuaWRdCiAgICAgICAgPyAnPGEgY2xhc3M9ImJ0bi1pY28iIGhyZWY9IicrU0xJREVTW2UuaWRdKyciIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIiB0aXRsZT0iQmFpeGFyIHNsaWRlcyIgYXJpYS1sYWJlbD0iQmFpeGFyIHNsaWRlcyI+JytJQ09fREwrJzwvYT4nCiAgICAgICAgOiAnPHNwYW4gY2xhc3M9ImJ0bi1pY28gb2ZmIiB0aXRsZT0iU2xpZGVzIGVtIGJyZXZlIj4nK0lDT19ETCsnPC9zcGFuPicpKyc8L3NwYW4+JzsKCiAgICB2YXIgdGVtQ2hhdmUgPSBURU1fQ0hBVkUuaW5kZXhPZihlLmlkKSA+IC0xOwogICAgdmFyIGNoaXAgPSBkb25lCiAgICAgID8gJzxzcGFuIGNsYXNzPSJyZXMiPlByZXNlbnRlPC9zcGFuPicKICAgICAgOiBmdXR1cmEKICAgICAgICA\/IChtb2RvUHJldmlldygpICYmIHRlbUNoYXZlCiAgICAgICAgICAgID8gJzxidXR0b24gY2xhc3M9ImJ0biBidG4tYW1iZXIgYnRuLXNtIiBkYXRhLWV4cGFuZD0iJytlLmlkKyciPkZhemVyIGNoZWNrLWluPC9idXR0b24+JwogICAgICAgICAgICA6ICc8c3BhbiBjbGFzcz0icmVzIiBzdHlsZT0iY29sb3I6dmFyKC0taW5rLW11dGUpIj5BZ2VuZGFkYTwvc3Bhbj4nKQogICAgICAgIDogKGlzSG9qZSB8fCAhdGVtQ2hhdmUgPyAnJyA6ICc8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWdob3N0IGJ0bi1zbSIgZGF0YS1leHBhbmQ9IicrZS5pZCsnIj5SZWN1cGVyYXI8L2J1dHRvbj4nKTsKCiAgICB2YXIgcXVlc3RvZXMgPSAnJzsKICAgIGlmIChlLnF1aXogJiYgKCFmdXR1cmEgfHwgbW9kb1ByZXZpZXcoKSkpIHsKICAgICAgdmFyIG5Qcm9nUSA9IG5SZXNwb3N0YXNFdmVudG8oZS5pZCk7CiAgICAgIHF1ZXN0b2VzID0gbQogICAgICAgID8gJzxzcGFuIGNsYXNzPSJyZXMiIHN0eWxlPSJmb250LXNpemU6MTJweCI+UXVlc3TDtWVzICcrbS5hY2VydG9zKycvJyttLnRvdGFsKyc8L3NwYW4+JwogICAgICAgIDogKHF1aXpEb0V2ZW50byhlKS5sZW5ndGgKICAgICAgICAgICAgPyAnPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1naG9zdCBidG4tc20iIGRhdGEtcXVpej0iJytlLmlkKyciPicrKG5Qcm9nUSA\/ICdDb250aW51YXIgcXVlc3TDtWVzICgnK25Qcm9nUSsnLycrcXVpekRvRXZlbnRvKGUpLmxlbmd0aCsnKScgOiAnUXVlc3TDtWVzIGRvIGRpYSDCtyBhdMOpICcrUFRfRElBKycgcHRzJykrJzwvYnV0dG9uPicKICAgICAgICAgICAgOiAnPHNwYW4gY2xhc3M9InN0YXRlLXRhZyBzdGF0ZS13YWl0Ij5RdWVzdMO1ZXMgZW0gcHJlcGFyYcOnw6NvPC9zcGFuPicpOwogICAgfQoKICAgIHZhciBmb3JtID0gKCFkb25lICYmICghZnV0dXJhIHx8IG1vZG9QcmV2aWV3KCkpICYmIFRFTV9DSEFWRS5pbmRleE9mKGUuaWQpID4gLTEpCiAgICAgID8gJzxkaXYgY2xhc3M9InJvdy1mb3JtIiBpZD0icmYtJytlLmlkKyciIHN0eWxlPSJkaXNwbGF5OicrKGlzSG9qZT8nJzonbm9uZScpKyciPicrCiAgICAgICAgJzxkaXYgY2xhc3M9ImV2LWtpY2tlciIgc3R5bGU9Im1hcmdpbi1ib3R0b206OHB4Ij5QYWxhdnJhLWNoYXZlIGRhIGF1bGEgwrcgcmV2ZWxhZGEgZHVyYW50ZSBhIHRyYW5zbWlzc8OjbyDCtyAnKyhpc0hvamUgPyAndmFsZSAnK1BUX0FVTEErJyBwdHMnIDogJ3JldHJvYXRpdm8gwrcgdmFsZSAnK1BUX0FVTEFfUkVUUk8rJyBwdHMnKSsnPC9kaXY+JysKICAgICAgICAnPGZvcm0gY2xhc3M9ImNoZWNraW4tZm9ybSIgZGF0YS1ldj0iJytlLmlkKyciPicrCiAgICAgICAgJzxpbnB1dCB0eXBlPSJ0ZXh0IiBwbGFjZWhvbGRlcj0iRGlnaXRlIGEgcGFsYXZyYS1jaGF2ZSIgYXJpYS1sYWJlbD0iUGFsYXZyYS1jaGF2ZSBkYSBhdWxhIiBhdXRvY29tcGxldGU9Im9mZiI+JysKICAgICAgICAnPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1hbWJlciBidG4tc20iIHR5cGU9InN1Ym1pdCI+JysoaXNIb2plPydDaGVjay1pbic6J0NvbmZpcm1hciBwcmVzZW7Dp2EgKHJldHJvYXRpdmEpJykrJzwvYnV0dG9uPjwvZm9ybT48L2Rpdj4nCiAgICAgIDogJyc7CgogICAgdmFyIGNscyA9IGRvbmUgPyAnb2snIDogZnV0dXJhID8gJ25leHQnIDogaXNIb2plID8gJ25vdycgOiAnbWlzcyc7CiAgICByZXR1cm4gJzxkaXYgY2xhc3M9InRyLWl0ZW0gJytjbHMrJyI+PHNwYW4gY2xhc3M9InRyLWRvdCI+PC9zcGFuPjxkaXYgY2xhc3M9InRyLWNhcmQiJysoZS55dCA\/ICcgZGF0YS15dD0iJytlLnl0KyciIHRpdGxlPSJBYnJpciBlc3RhIGF1bGEgbm8gWW91VHViZSInIDogJycpKyc+JysKICAgICAgJzxkaXYgY2xhc3M9InRyLWRhdGEiPicrZG0uZCsnPHNtYWxsPicrZG0ubSsnPC9zbWFsbD4nKyhpc0hvamU\/JzxlbT5Ib2plPC9lbT4nOicnKSsnPC9kaXY+JysKICAgICAgJzxkaXYgY2xhc3M9InRyLXRodW1iIj4nK3RodW1iKyc8L2Rpdj4nKwogICAgICAnPGRpdiBjbGFzcz0idHItbWFpbiI+JysKICAgICAgJzxkaXYgY2xhc3M9InRyLXdoZW4iPicrdGlwb0xhYmVsKycgwrcgJytlc2MoZS5ob3JhKSsnPC9kaXY+JysKICAgICAgJzxiPicrZXNjKGUudGl0dWxvKSsnPC9iPicrCiAgICAgICc8ZGl2IGNsYXNzPSJ0ci1mb290Ij48c3BhbiBzdHlsZT0iZGlzcGxheTpmbGV4O2dhcDoxMHB4O2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4LXdyYXA6d3JhcCI+JytjaGlwK3F1ZXN0b2VzKyc8L3NwYW4+JythY3RzKyc8L2Rpdj4nK2Zvcm0rCiAgICAgICc8L2Rpdj48L2Rpdj48L2Rpdj4nOwogIH0KCiAgZnVuY3Rpb24gd2lyZUF1bGFzKCl7CiAgICAvLyBjYXJkIGludGVpcm8gY2xpY8OhdmVsOiB0w610dWxvLCB0aHVtYiBvdSDDoXJlYSBsaXZyZSBhYnJlbSBhIGF1bGEgbm8KICAgIC8vIFlvdVR1YmU7IGNvbnRyb2xlcyBpbnRlcm5vcyAoY2hlY2staW4sIHF1ZXN0w7Vlcywgw61jb25lcykgZmljYW0gaW50YWN0b3MKICAgICQkKCcudHItY2FyZFtkYXRhLXl0XScpLmZvckVhY2goZnVuY3Rpb24oY2FyZCl7CiAgICAgIGNhcmQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihldil7CiAgICAgICAgaWYgKGV2LnRhcmdldC5jbG9zZXN0KCdhLGJ1dHRvbixpbnB1dCxmb3JtLC5yb3ctZm9ybSxkZXRhaWxzJykpIHJldHVybjsKICAgICAgICB3aW5kb3cub3BlbihjYXJkLmRhdGFzZXQueXQsICdfYmxhbmsnLCAnbm9vcGVuZXInKTsKICAgICAgfSk7CiAgICB9KTsKICAgICQkKCcuY2hlY2tpbi1mb3JtJykuZm9yRWFjaChmdW5jdGlvbihmKXsKICAgICAgZi5hZGRFdmVudExpc3RlbmVyKCdzdWJtaXQnLCBmdW5jdGlvbihldil7CiAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTsKICAgICAgICAvLyBjYXJpbWJhIHByYSBxdWUgbyByZXNnYXRlIGFudGktUm9ja2V0IGdsb2JhbCAoZG9jdW1lbnQgY2xpY2spIG7Do28KICAgICAgICAvLyByZS1kaXNwYXJlIGVzdGUgc3VibWl0IGVtIDQwMG1zIOKGkiByZWdpc3RyYXJfY2hlY2tpbiBkb2JyYWRvICsgdG9hc3QKICAgICAgICAvLyAidm9jw6ogasOhIGNvbmZpcm1vdSBwcmVzZW7Dp2EiLiBNZXNtYSBibGluZGFnZW0gZG8gZm9ybSBkZSBhdXRoLgogICAgICAgIGV2LnRhcmdldC5fX3VsdGltb1N1Ym1pdCA9IERhdGUubm93KCk7CiAgICAgICAgdmFyIHZhbCA9IGYucXVlcnlTZWxlY3RvcignaW5wdXQnKS52YWx1ZS50cmltKCk7CiAgICAgICAgdmFyIGJ0biA9IGYucXVlcnlTZWxlY3RvcignYnV0dG9uJyk7CiAgICAgICAgaWYgKGJ0bi5kaXNhYmxlZCkgcmV0dXJuOwogICAgICAgIGJ0bi5kaXNhYmxlZCA9IHRydWU7CiAgICAgICAgLy8gUFJPRFXDh8ODTzogYSBwYWxhdnJhLWNoYXZlIMOpIHZhbGlkYWRhIE5PIFNFUlZJRE9SIChzZWdyZWRvIG5vIGJhbmNvKTsKICAgICAgICAvLyBvIHNlcnZpZG9yIHRhbWLDqW0gZGVjaWRlIHNlIG8gY2hlY2staW4gw6kgYW8gdml2byBvdSByZXRyb2F0aXZvCiAgICAgICAgc2JScGMoJ3JlZ2lzdHJhcl9jaGVja2luJywgeyBwX2NwZjogQ0FDSEUudXNlci5jcGYsIHBfZXZlbnRvOiBmLmRhdGFzZXQuZXYsIHBfcGFsYXZyYTogdmFsIH0pCiAgICAgICAgICAudGhlbihmdW5jdGlvbihyZXMpewogICAgICAgICAgICBidG4uZGlzYWJsZWQgPSBmYWxzZTsKICAgICAgICAgICAgaWYgKHJlcy5zdGF0dXMgPT09ICdvaycpIHsKICAgICAgICAgICAgICBDQUNIRS5jaGVja2luc1tmLmRhdGFzZXQuZXZdID0geyBhb1Zpdm86IHJlcy5hb192aXZvLCB0czogRGF0ZS5ub3coKSB9OwogICAgICAgICAgICAgIHZhciBnYW5obyA9IHJlcy5hb192aXZvID8gUFRfQVVMQSA6IFBUX0FVTEFfUkVUUk87CiAgICAgICAgICAgICAgdG9hc3QoJ1ByZXNlbsOnYSBjb25maXJtYWRhIMK3ICsnK2ZtdFB0cyhnYW5obykrJyBwdHMnKyhyZXMuYW9fdml2byA\/ICcnIDogJyAocmV0cm9hdGl2byDCtyA3NSUpJykrJy4gT2ZlbnNpdmEgYXRpdmEhJyk7CiAgICAgICAgICAgICAgdmFyIHkgPSB3aW5kb3cuc2Nyb2xsWTsKICAgICAgICAgICAgICByZW5kZXJBdWxhcygpOwogICAgICAgICAgICAgIHdpbmRvdy5zY3JvbGxUbygwLCB5KTsKICAgICAgICAgICAgfSBlbHNlIGlmIChyZXMuc3RhdHVzID09PSAnamFfZmVpdG8nKSB7CiAgICAgICAgICAgICAgdG9hc3QoJ1ZvY8OqIGrDoSBjb25maXJtb3UgcHJlc2Vuw6dhIG5lc3RhIGF1bGEuJyk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzLnN0YXR1cyA9PT0gJ2V2ZW50b19mdXR1cm8nKSB7CiAgICAgICAgICAgICAgdG9hc3QoJ08gY2hlY2staW4gYWJyZSBubyBkaWEgZGEgYXVsYS4nKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB0b2FzdCgnUGFsYXZyYS1jaGF2ZSBpbmNvcnJldGEuIEVsYSDDqSByZXZlbGFkYSBkdXJhbnRlIGEgdHJhbnNtaXNzw6NvLicpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KQogICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uKCl7IGJ0bi5kaXNhYmxlZCA9IGZhbHNlOyB0b2FzdCgnU2VtIGNvbmV4w6NvLiBUZW50ZSBub3ZhbWVudGUuJyk7IH0pOwogICAgICB9KTsKICAgIH0pOwogICAgJCQoJ1tkYXRhLWV4cGFuZF0nKS5mb3JFYWNoKGZ1bmN0aW9uKGIpewogICAgICBiLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXsKICAgICAgICB2YXIgZiA9ICQoJyNyZi0nICsgYi5kYXRhc2V0LmV4cGFuZCk7CiAgICAgICAgaWYgKCFmKSByZXR1cm47CiAgICAgICAgdmFyIGFicmlyID0gZi5zdHlsZS5kaXNwbGF5ID09PSAnbm9uZSc7CiAgICAgICAgJCQoJy5yb3ctZm9ybScpLmZvckVhY2goZnVuY3Rpb24oeCl7IGlmICh4LmlkICE9PSAncmYtJyArIGIuZGF0YXNldC5leHBhbmQpIHguc3R5bGUuZGlzcGxheSA9ICdub25lJzsgfSk7CiAgICAgICAgZi5zdHlsZS5kaXNwbGF5ID0gYWJyaXIgPyAnJyA6ICdub25lJzsKICAgICAgICBpZiAoYWJyaXIpIGYucXVlcnlTZWxlY3RvcignaW5wdXQnKS5mb2N1cygpOwogICAgICB9KTsKICAgIH0pOwogICAgJCQoJ1tkYXRhLXF1aXpdJykuZm9yRWFjaChmdW5jdGlvbihiKXsKICAgICAgYi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCl7IHJlbmRlclF1aXooYi5kYXRhc2V0LnF1aXopOyB9KTsKICAgIH0pOwogICAgJCQoJ1tkYXRhLWdvdG9dJykuZm9yRWFjaChmdW5jdGlvbihiKXsKICAgICAgYi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCl7IGdvKGIuZGF0YXNldC5nb3RvKTsgfSk7CiAgICB9KTsKICB9CgogIGZ1bmN0aW9uIHJlbmRlckF1bGFzKCl7CiAgICB2YXIgcCA9IGNhbGNQb250b3ModXNlcik7CiAgICB2YXIgY2hlY2tzID0gc3RvcmUuY2hlY2tpbnModXNlci5lbWFpbCk7CiAgICB2YXIgZXZIb2plID0gZXZlbnRvc0RvRGlhKGhvamUuaXNvKTsKICAgIHZhciBwcmltZWlyYUNvbUNoYXZlID0gai5ldmVudG9zLmZpbmQoZnVuY3Rpb24oZSl7IHJldHVybiBURU1fQ0hBVkUuaW5kZXhPZihlLmlkKSA+IC0xOyB9KSB8fCBqLmV2ZW50b3NbMF07CiAgICB2YXIgbXNnT2ZlbnNpdmEgPSBldkhvamUubGVuZ3RoCiAgICAgID8gJ0hvamUgdGVtICcgKyAoZXZIb2plLmxlbmd0aD4xPydhdWxhcyc6J2F1bGEnKSArICc6ICcgKyBldkhvamUubWFwKGZ1bmN0aW9uKGUpe3JldHVybiAnPGI+Jytlc2MoZS50aXR1bG8pKyc8L2I+Jzt9KS5qb2luKCcgZSAnKSArICcuICcgKwogICAgICAgIChldkhvamUuc29tZShmdW5jdGlvbihlKXsgcmV0dXJuIFRFTV9DSEFWRS5pbmRleE9mKGUuaWQpID4gLTE7IH0pCiAgICAgICAgICA\/ICdGYcOnYSBvIGNoZWNrLWluIGNvbSBhIHBhbGF2cmEtY2hhdmUgcmV2ZWxhZGEgYW8gdml2by4nCiAgICAgICAgICA6ICdBcHJvdmVpdGUgYSB0cmFuc21pc3PDo28gYW8gdml2byBubyBZb3VUdWJlLicpCiAgICAgIDogaG9qZS5pc28gPCBqLmluaWNpbwogICAgICAgID8gJ1N1YSBwcmltZWlyYSBwcmVzZW7Dp2E6ICcrZXNjKHByaW1laXJhQ29tQ2hhdmUudGl0dWxvKSsnICgnK2RhdGFCUihwcmltZWlyYUNvbUNoYXZlLmRhdGEpKycpLicKICAgICAgICA6ICdOw6NvIGjDoSBhdWxhIGhvamUuIFJlY3VwZXJlIHByZXNlbsOnYXMgcGVuZGVudGVzIG5hIHRyaWxoYSBhYmFpeG8uJzsKCiAgICB2YXIgaHRtbCA9IHBhZ2VIZWFkKCdTdWEgam9ybmFkYSBkZSBhdWxhcycsICdBdWxhcycsCiAgICAgICdBc3Npc3RhLCBiYWl4ZSBvcyBzbGlkZXMgZSBjb25maXJtZSBwcmVzZW7Dp2EgY29tIGEgcGFsYXZyYS1jaGF2ZSByZXZlbGFkYSBhbyB2aXZvLicsCiAgICAgICc1MjAgcHRzIGVtIGpvZ28nKTsKICAgIGh0bWwgKz0gZGVtb0Jhbm5lcigpOwogICAgaHRtbCArPSAnPGRpdiBjbGFzcz0iY2FyZCBvZmVuc2l2YS1jYXJkIj4nKwogICAgICAnPGRpdiBjbGFzcz0iZmxhbWUiPjxkaXYgY2xhc3M9Im4iPicrcC5vZmVuc2l2YSsnPC9kaXY+PGRpdiBjbGFzcz0ibCI+YXVsYXMgc2VndWlkYXM8L2Rpdj48L2Rpdj4nKwogICAgICAnPGRpdj48aDM+U3VhIG9mZW5zaXZhPC9oMz48ZGl2IGNsYXNzPSJtc2ciPicrbXNnT2ZlbnNpdmErJzwvZGl2PicrCiAgICAgICc8ZGl2IGNsYXNzPSJwcm9ncmVzcyI+PGRpdiBjbGFzcz0iZmlsbCIgc3R5bGU9IndpZHRoOicrKHAubkNoZWNrcy9wLm5FdmVudG9zKjEwMCkrJyUiPjwvZGl2PjwvZGl2PicrCiAgICAgICc8ZGl2IGNsYXNzPSJwcm9ncmVzcy1ub3RlIj4nK3AubkNoZWNrcysnIGRlICcrcC5uRXZlbnRvcysnIHByZXNlbsOnYXMgYXTDqSBhcXVpPC9kaXY+PC9kaXY+JysKICAgICAgJzxkaXYgY2xhc3M9InJhbmstcHRzIj48ZGl2IGNsYXNzPSJuIj4nK2ZtdFB0cyhwLnByZXNlbmNhKSsnIDxzbWFsbD4vICcrUE9OVE9TLnByZXNlbmNhKycgcHRzPC9zbWFsbD48L2Rpdj48ZGl2IGNsYXNzPSJsIj5QcmVzZW7Dp2EgbmEgY2xhc3NpZmljYcOnw6NvPC9kaXY+JysKICAgICAgJzwvZGl2PicrCiAgICAgICc8L2Rpdj4nOwoKICAgIFswLDEsMl0uZm9yRWFjaChmdW5jdGlvbihzZW0pewogICAgICB2YXIgZXZzID0gai5ldmVudG9zLmZpbHRlcihmdW5jdGlvbihlKXsgcmV0dXJuIGUuc2VtYW5hID09PSBzZW07IH0pOwogICAgICBpZiAoIWV2cy5sZW5ndGgpIHJldHVybjsKICAgICAgLy8gcHJlc2Vuw6dhcyBjb250YWRhcyBzw7Mgc29icmUgZXZlbnRvcyBDT00gY2hhdmUgKGEgQWJlcnR1cmEgZSBvIGRpYSBkbwogICAgICAvLyBTaW11bGFkbyBuw6NvIHTDqm0gY2hlY2staW4gZSBuw6NvIGVudHJhbSBubyBkZW5vbWluYWRvcikKICAgICAgdmFyIGNvbUNoYXZlID0gZXZzLmZpbHRlcihmdW5jdGlvbihlKXsgcmV0dXJuIFRFTV9DSEFWRS5pbmRleE9mKGUuaWQpID4gLTE7IH0pOwogICAgICB2YXIgZmVpdGFzID0gY29tQ2hhdmUuZmlsdGVyKGZ1bmN0aW9uKGUpeyByZXR1cm4gY2hlY2tzW2UuaWRdOyB9KS5sZW5ndGg7CiAgICAgIHZhciByb3R1bG8gPSBzZW09PT0wID8gJ0FiZXJ0dXJhJyA6ICdTZW1hbmEgJytzZW07CiAgICAgIHZhciBmYWl4YSA9IGV2c1swXS5kYXRhID09PSBldnNbZXZzLmxlbmd0aC0xXS5kYXRhCiAgICAgICAgPyBkYXRhQlIoZXZzWzBdLmRhdGEpCiAgICAgICAgOiBkYXRhQlIoZXZzWzBdLmRhdGEpKycgYSAnK2RhdGFCUihldnNbZXZzLmxlbmd0aC0xXS5kYXRhKTsKICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz0ic2VjLWgiPicrcm90dWxvKycgwrcgJytmYWl4YSsKICAgICAgICAoY29tQ2hhdmUubGVuZ3RoID8gJyA8c3BhbiBjbGFzcz0iY250JysoZmVpdGFzPT09Y29tQ2hhdmUubGVuZ3RoPycgZyc6JycpKyciPicrZmVpdGFzKycvJytjb21DaGF2ZS5sZW5ndGgrJyBwcmVzZW7Dp2FzPC9zcGFuPicgOiAnJykrJzwvZGl2Pic7CiAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9InRyaWxoYSI+JytldnMubWFwKHRyaWxoYUl0ZW0pLmpvaW4oJycpKyc8L2Rpdj4nOwogICAgfSk7CgogICAgJCgnI21haW4nKS5pbm5lckhUTUwgPSBodG1sOwogICAgd2lyZUF1bGFzKCk7CiAgfQoKICAvKiAtLS0tLS0tLS0tIElOw41DSU8gKGNvbWVjZSBwb3IgYXF1aSkgLS0tLS0tLS0tLSAqLwogIC8vIEEgT1JERU0gRE8gSU7DjUNJTyBNVURBIENPTSBBIEZBU0UgKGRlY2lzw6NvIGRvIElnb3IsIDEwLzA4KS4gQW50ZXMgZGEKICAvLyBlc3RyZWlhIG8gYWx1bm8gbsOjbyB0ZW0gbyBxdWUgZmF6ZXIgaG9qZTogbyB0b3BvIG1vc3RyYSBvIHF1ZSBlbGUgUE9ERQogIC8vIGZhemVyIGFnb3JhIChwcsOzeGltYSB0cmFuc21pc3PDo28sIGluZGljYXIgYW1pZ29zKSBlIGFzIHJlZ3Jhcy9CUSBNRUQKICAvLyBkZXNjZW0uIEEgcGFydGlyIGRlIDI2LzA4IG8gZGlhIGRlIGhvamUgZSBhIHBvbnR1YcOnw6NvIHNvYmVtLCBlIG8gIkNvbW8KICAvLyB2YWkgZnVuY2lvbmFyIiByZWNvbGhlIG51bSA8ZGV0YWlscz4uIEEgdHJvY2Egw6kgYXV0b23DoXRpY2EgcGVsYSBkYXRhLgogIGZ1bmN0aW9uIHJlbmRlckluaWNpbygpewogICAgdmFyIHAgPSBjYWxjUG9udG9zKHVzZXIpOwogICAgdmFyIGV2SG9qZSA9IGV2ZW50b3NEb0RpYShob2plLmlzbyk7CiAgICB2YXIgcXMgPSBzdG9yZS5taXNzb2VzKHVzZXIuZW1haWwpOwogICAgdmFyIGNoZWNrcyA9IHN0b3JlLmNoZWNraW5zKHVzZXIuZW1haWwpOwogICAgdmFyIGF0cmFzYWRhcyA9IGouZXZlbnRvcy5maWx0ZXIoZnVuY3Rpb24oZSl7IHJldHVybiBlLnF1aXogJiYgZS5kYXRhIDwgaG9qZS5pc28gJiYgIXFzW2UuaWRdOyB9KS5sZW5ndGg7CiAgICB2YXIgcHJlRXN0cmVpYSA9IGhvamUuaXNvIDwgai5pbmljaW87CgogICAgdmFyIGh0bWwgPSBwYWdlSGVhZCgnQ29tZWNlIHBvciBhcXVpJywgJ0JlbS12aW5kbywgJytlc2ModXNlci5ub21lLnNwbGl0KCcgJylbMF0pKycuJywKICAgICAgJ0FxdWkgY29tZcOnYSBhIHN1YSBqb3JuYWRhIGRlIHJldGEgZmluYWwgcnVtbyBhbyAnK0FGX0JSQU5ELmN1cnRhKycuJywKICAgICAgKHByZUVzdHJlaWEgPyAnRmFsdGFtICcrZGlhcyhob2plLmlzbywgai5pbmljaW8pKycgZGlhcycgOiAnRGlhICcrZGlhQXR1YWwrJyBkZSAnK3RvdGFsRGlhcykpOwoKICAgIGh0bWwgKz0gZGVtb0Jhbm5lcigpOwoKICAgIC8qIC0tLSBCTE9DT1M6IG1vbnRhZG9zIGFxdWksIG9yZGVuYWRvcyBwb3IgZmFzZSBubyBmaW0gZGEgZnVuw6fDo28gLS0tICovCgogICAgLy8gVsOtZGVvIGRlIGJvYXMtdmluZGFzIChob2plIGRlc2xpZ2FkbyBwZWxhIGZsYWc7IHZvbHRhIGNvbW8gaXRlbSAyIG5hCiAgICAvLyBwcsOpLWVzdHJlaWEgcXVhbmRvIG8gSWdvciBncmF2YXIpLiBtYXgtd2lkdGggc2VndXJhIGEgYWx0dXJhIGRvIHBsYXllcgogICAgLy8gMTY6OSBwcm8gYWx1bm8gZW54ZXJnYXIgcXVlIGjDoSBjb250ZcO6ZG8gYWJhaXhvIGRhIGRvYnJhIChwZWRpZG8gMDgvMDgpLgogICAgdmFyIHZpZGVvQlYgPSBWSURFT19CVl9QT1JfUFJPVkFbQUZfUFJPVkFdIHx8ICcnOwogICAgdmFyIGJWaWRlbyA9IHZpZGVvQlYKICAgICAgPyAnPGRpdiBjbGFzcz0iY2FyZCIgc3R5bGU9InBhZGRpbmc6MDtvdmVyZmxvdzpoaWRkZW47bWFyZ2luLWJvdHRvbToyMnB4O21heC13aWR0aDo3MDBweCI+JysKICAgICAgICAnPGRpdiBzdHlsZT0icGFkZGluZzoxOHB4IDI0cHggMTRweCI+JysKICAgICAgICAnPGgzIHN0eWxlPSJtYXJnaW46MCAwIDJweCI+Q29tZWNlIHBvciBhcXVpPC9oMz4nKwogICAgICAgICc8cCBzdHlsZT0iZm9udC1zaXplOjEzLjVweDtjb2xvcjp2YXIoLS1pbmstZGltKTttYXJnaW46MCI+QSBqb3JuYWRhLCBvcyBwb250b3MgZSBvcyBwcsOqbWlvcyBlbSBwb3Vjb3MgbWludXRvcy48L3A+PC9kaXY+JysKICAgICAgICAnPGRpdiBzdHlsZT0icG9zaXRpb246cmVsYXRpdmU7cGFkZGluZy10b3A6NTYuMjUlO2JhY2tncm91bmQ6IzAwMCI+JysKICAgICAgICAnPGlmcmFtZSBzcmM9IicrdmlkZW9CVisnIiB0aXRsZT0iVsOtZGVvIGRlIGJvYXMtdmluZGFzIGRvIEF0byBGaW5hbCIgJysKICAgICAgICAnc3R5bGU9InBvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JvcmRlcjowIiAnKwogICAgICAgICdhbGxvdz0iYWNjZWxlcm9tZXRlcjsgYXV0b3BsYXk7IGVuY3J5cHRlZC1tZWRpYTsgZ3lyb3Njb3BlOyBwaWN0dXJlLWluLXBpY3R1cmU7IGZ1bGxzY3JlZW4iICcrCiAgICAgICAgJ2FsbG93ZnVsbHNjcmVlbiBsb2FkaW5nPSJsYXp5Ij48L2lmcmFtZT4nKwogICAgICAgICc8L2Rpdj48L2Rpdj4nCiAgICAgIDogJyc7CgogICAgLy8gQ29tbyB2YWkgZnVuY2lvbmFyOiBBQkVSVE8gYW50ZXMgZGEgZXN0cmVpYSAow6kgb3JpZW50YcOnw6NvIG5vdmEpLAogICAgLy8gUkVDT0xISURPIGR1cmFudGUgYSBqb3JuYWRhICh2aXJhIGNvbnN1bHRhLCBuw6NvIG9jdXBhIGEgZG9icmEpCiAgICB2YXIgcGFzc29zID0gJzxkaXYgY2xhc3M9Im9iLWdyaWQiPicrCiAgICAgICc8ZGl2IGNsYXNzPSJvYi1pdGVtIj48c3BhbiBjbGFzcz0ibiI+MTwvc3Bhbj48Yj5Bc3Npc3RhIGUgZmHDp2EgbyBjaGVjay1pbjwvYj5BIHBhbGF2cmEtY2hhdmUgcmV2ZWxhZGEgYW8gdml2byBjb25maXJtYSBzdWEgcHJlc2Vuw6dhOiA0MCBwdHMgYW8gdml2bywgMzAgcmV0cm9hdGl2YS48L2Rpdj4nKwogICAgICAnPGRpdiBjbGFzcz0ib2ItaXRlbSI+PHNwYW4gY2xhc3M9Im4iPjI8L3NwYW4+PGI+UmVzb2x2YSBhcyBxdWVzdMO1ZXMgZG8gZGlhPC9iPlVtIGJsb2NvIHBvciBhdWxhLCBjb3JyZcOnw6NvIG5hIGhvcmE6IGF0w6kgNjUgcHRzIHBvciBkaWEuPC9kaXY+JysKICAgICAgJzxkaXYgY2xhc3M9Im9iLWl0ZW0iPjxzcGFuIGNsYXNzPSJuIj4zPC9zcGFuPjxiPkZlY2hlIGNvbSBvIFNpbXVsYWRvIEZpbmFsPC9iPlByb3ZhIMO6bmljYTogNyBwdHMgcG9yIGFjZXJ0bywgYXTDqSA3MDAuIE8gdG9wIDEwIGxldmEgb3MgcHLDqm1pb3MuPC9kaXY+JysKICAgICAgJzwvZGl2PicrCiAgICAgICc8ZGl2IGNsYXNzPSJvYi1hY3RzIj4nKwogICAgICAnPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1hbWJlciBidG4tc20iIGRhdGEtZ290bz0iYXVsYXMiPklyIHBhcmEgYXMgYXVsYXM8L2J1dHRvbj4nKwogICAgICAnPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1naG9zdCBidG4tc20iIGRhdGEtZ290bz0icXVlc3RvZXMiPlJlc29sdmVyIHF1ZXN0w7VlczwvYnV0dG9uPicrCiAgICAgICc8c3BhbiBzdHlsZT0iZm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0taW5rLW11dGUpIj5BcyByZWdyYXMgY29tcGxldGFzIGZpY2FtIG5vIGdydXBvIG9maWNpYWwgZG8gV2hhdHNBcHAuPC9zcGFuPjwvZGl2Pic7CiAgICB2YXIgYkNvbW8gPSBwcmVFc3RyZWlhCiAgICAgID8gJzxkaXYgY2xhc3M9ImNhcmQgb25ib2FyZCI+PGRpdiBjbGFzcz0ia2lja2VyIj5Db21vIHZhaSBmdW5jaW9uYXIsIGVtIDMgcGFzc29zPC9kaXY+JytwYXNzb3MrJzwvZGl2PicKICAgICAgOiAnPGRldGFpbHMgY2xhc3M9ImNhcmQgb25ib2FyZCBvbmJvYXJkLXJlYyI+PHN1bW1hcnk+UmVsZW1icmFyIGNvbW8gZnVuY2lvbmE8L3N1bW1hcnk+JytwYXNzb3MrJzwvZGV0YWlscz4nOwoKICAgIC8vIEJRIE1FRCBGUkVFOiBzw7MgRU5RVUFOVE8gYSBqb3JuYWRhIG7Do28gY29tZcOnYSAocGVkaWRvIGRvIElnb3IsIDEwLzA4KS4KICAgIC8vIEZpY2EgcG9yIMOaTFRJTU86IMOpIHBvbnRlIHByYSBmb3JhIGRhIHBsYXRhZm9ybWEuCiAgICB2YXIgYkJxID0gcHJlRXN0cmVpYQogICAgICA\/ICc8ZGl2IGNsYXNzPSJjYXJkIiBzdHlsZT0icGFkZGluZzoyNHB4IDI4cHg7bWFyZ2luLWJvdHRvbToyMnB4O2Rpc3BsYXk6ZmxleDtnYXA6MThweDthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC13cmFwOndyYXA7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW4iPicrCiAgICAgICAgJzxkaXYgc3R5bGU9ImZsZXg6MTttaW4td2lkdGg6MjQwcHgiPjxkaXYgY2xhc3M9ImtpY2tlciI+RW5xdWFudG8gYSBqb3JuYWRhIG7Do28gY29tZcOnYTwvZGl2PicrCiAgICAgICAgJzxoMyBzdHlsZT0ibWFyZ2luOjZweCAwIDRweCI+QlFNRUQgZGUgUG9ydGFzIEFiZXJ0YXM6IHRyZWluZSBkZSBncmHDp2E8L2gzPicrCiAgICAgICAgJzxwIHN0eWxlPSJmb250LXNpemU6MTMuNXB4O2NvbG9yOnZhcigtLWluay1kaW0pO21hcmdpbjowIj5CYW5jbyBkZSBRdWVzdMO1ZXMgbGliZXJhZG8gZW0gYWdvc3RvLiBUcmVpbmUgbm8gcGFkcsOjbyBkYSBzdWEgcHJvdmEgYXTDqSBhIGVzdHJlaWEuPC9wPjwvZGl2PicrCiAgICAgICAgJzxhIGNsYXNzPSJidG4gYnRuLWFtYmVyIiBocmVmPSInK0JRTUVEX1VSTCsnIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciI+QWNlc3NhciBvIEJRTUVEIGdyw6F0aXM8L2E+PC9kaXY+JwogICAgICA6ICcnOwoKICAgIC8vIEluZGlxdWUgZSBnYW5oZSBwb250b3M6IFNFTSBURVRPIChyZXZpc8OjbyAxMS8wOCkg4oCUIHBsYWNhciBxdWUgc8OzIGNyZXNjZS4KICAgIC8vIFZhbGUgYXV0b23DoXRpY28gcXVhbmRvIG8gYW1pZ28gc2UgaW5zY3JldmUgcGVsbyBsaW5rOyBuw6NvIGjDoSBtYWlzIHZhZ2EKICAgIC8vIG5lbSBwZW5kZW50ZS4gUXVhbnRvIG1haXMgaW5kaWNhciwgbWFpcyBwb250b3MuCiAgICB2YXIgaW5kaWNhID0gQ0FDSEUuaW5kaWNhY29lcyB8fCB7IHZhbGlkYXM6IDAsIHBlbmRlbnRlczogMCwgbGlzdGE6IFtdIH07CiAgICB2YXIgbGlua0luZCA9IEFGX1VSTFMuY2FkYXN0cm8gKyAoQUZfVVJMUy5jYWRhc3Ryby5pbmRleE9mKCc\/JykgPiAtMSA\/ICcmJyA6ICc\/JykgKyAncmVmPScgKyAoQ0FDSEUucmVmQ29kZSB8fCAnJyk7CiAgICB2YXIgbXNnWmFwID0gJ0VzdG91IG5hIHJldGEgZmluYWwgZG8gJytBRl9CUkFORC5jdXJ0YSsnIGNvbSBvIEF0byBGaW5hbCBkbyBFc3RyYXTDqWdpYSBNRUQ6IGF1bGFzIGFvIHZpdm8sIHF1ZXN0w7VlcyBjb21lbnRhZGFzIGUgU2ltdWxhZG8sIHR1ZG8gZ3JhdHVpdG8uIEluc2NyZXZhLXNlIHBlbG8gbWV1IGxpbms6ICcgKyBsaW5rSW5kOwogICAgdmFyIG5JbmQgPSBpbmRpY2EudmFsaWRhcyB8fCAwOwogICAgdmFyIHB0c0luZEF0dWFsID0gUFRfSU5EICogbkluZDsKICAgIHZhciBzY29yZVR4dCA9IG5JbmQKICAgICAgPyAnPGI+KycrcHRzSW5kQXR1YWwrJyBwdHM8L2I+IGrDoSBzb21hZG9zIMK3ICcrbkluZCsnIGFtaWdvJysobkluZD4xPydzIGluc2NyaXRvcyc6JyBpbnNjcml0bycpKycgcGVsbyBzZXUgbGluaycKICAgICAgOiAnQ29tcGFydGlsaGUgc2V1IGxpbms6IGNhZGEgYW1pZ28gcXVlIHNlIGluc2NyZXZlciB2YWxlICsnK1BUX0lORCsnIHB0cywgc2VtIGxpbWl0ZS4nOwogICAgdmFyIGFtaWdvcyA9IChpbmRpY2EubGlzdGEgfHwgW10pLm1hcChmdW5jdGlvbihhKXsKICAgICAgcmV0dXJuICc8c3BhbiBjbGFzcz0iaW5kLWZyaWVuZCBvayI+PHNwYW4gY2xhc3M9InN0Ij48L3NwYW4+Jytlc2MoYS5ub21lKSsnPC9zcGFuPic7CiAgICB9KS5qb2luKCcnKTsKICAgIHZhciBiSW5kID0gJzxkaXYgY2xhc3M9InNlYy1oIj5JbmRpcXVlIGUgZ2FuaGUgcG9udG9zPC9kaXY+JysKICAgICAgJzxkaXYgY2xhc3M9ImNhcmQgaW5kLWNhcmQiPjxkaXYgY2xhc3M9ImluZC1ncmlkIj4nKwogICAgICAnPGRpdiBjbGFzcz0iaW5kLWxlZnQiPicrCiAgICAgICc8ZGl2IGNsYXNzPSJraWNrZXIiPlByb2dyYW1hIGRlIGluZGljYcOnw6NvIMK3IHNlbSBsaW1pdGU8L2Rpdj4nKwogICAgICAnPGgzPkNhZGEgYW1pZ28gcXVlIHNlIGluc2NyZXZlIHZhbGUgJytQVF9JTkQrJyBwdHM8L2gzPicrCiAgICAgICc8cCBjbGFzcz0icmVncmEiPkNvbnRhIGF1dG9tw6F0aWNvIGFzc2ltIHF1ZSBvIGFtaWdvIHNlIGluc2NyZXZlIHBlbG8gc2V1IGxpbmsuIE7Do28gaMOhIHRldG86IHF1YW50byBtYWlzIGluZGljYXIsIG1haXMgcG9udG9zLjwvcD4nKwogICAgICAnPGRpdiBjbGFzcz0iaW5kLWxpbmtsYWJlbCI+U2V1IGxpbmsgcGVzc29hbDwvZGl2PicrCiAgICAgICc8ZGl2IGNsYXNzPSJpbmQtbGlua3JvdyI+JysKICAgICAgJzxpbnB1dCBpZD0iaW5kTGluayIgcmVhZG9ubHkgdmFsdWU9IicrZXNjKGxpbmtJbmQpKyciIGFyaWEtbGFiZWw9IlNldSBsaW5rIGRlIGluZGljYcOnw6NvIj4nKwogICAgICAnPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1hbWJlciBidG4tc20iIGlkPSJpbmRDb3BpYXIiPkNvcGlhciBsaW5rPC9idXR0b24+PC9kaXY+JysKICAgICAgJzxkaXYgY2xhc3M9ImluZC1hY3RzIj4nKwogICAgICAnPGEgY2xhc3M9ImJ0biBidG4tZ2hvc3QgYnRuLXNtIGJ0bi13YSIgaHJlZj0iaHR0cHM6Ly93YS5tZS8\/dGV4dD0nK2VuY29kZVVSSUNvbXBvbmVudChtc2daYXApKyciIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIj4nK0lDT19XQSsnIENvbnZpZGFyIHBlbG8gV2hhdHNBcHA8L2E+PC9kaXY+JysKICAgICAgJzwvZGl2PicrCiAgICAgICc8ZGl2IGNsYXNzPSJpbmQtcGxhY2FyIj4nKwogICAgICAnPGRpdiBjbGFzcz0iaW5kLXBsYWNhci1uIj4nK25JbmQrJzwvZGl2PicrCiAgICAgICc8ZGl2IGNsYXNzPSJpbmQtcGxhY2FyLWwiPicrKG5JbmQ9PT0xPydhbWlnbyBpbnNjcml0byc6J2FtaWdvcyBpbnNjcml0b3MnKSsnPC9kaXY+JysKICAgICAgJzxkaXYgY2xhc3M9ImluZC1wbGFjYXItcHRzIj4rJytwdHNJbmRBdHVhbCsnIHB0czwvZGl2PicrCiAgICAgICc8L2Rpdj48L2Rpdj4nKwogICAgICAnPGRpdiBjbGFzcz0iaW5kLXNjb3JlIj4nK3Njb3JlVHh0Kyc8L2Rpdj4nKwogICAgICAoYW1pZ29zID8gJzxkaXYgY2xhc3M9ImluZC1mcmllbmRzIj4nK2FtaWdvcysnPC9kaXY+JyA6ICcnKSsKICAgICAgJzwvZGl2Pic7CgogICAgLy8gY2FyZCAiVXNlIGNvbW8gYXBsaWNhdGl2byIgcmVtb3ZpZG8gZG8gSW7DrWNpbyBhIHBlZGlkbyBkbyBJZ29yICgwNi8wOCk7CiAgICAvLyBvIG1hbmlmZXN0IFBXQSBjb250aW51YSBuYXMgcMOhZ2luYXMgKGluc3RhbMOhdmVsIHBlbG8gbWVudSBkbyBuYXZlZ2Fkb3IpCiAgICB2YXIgYkhvamUgPSAnJzsKICAgIGlmIChldkhvamUubGVuZ3RoKSB7CiAgICAgIGJIb2plICs9ICc8ZGl2IGNsYXNzPSJzZWMtaCI+SG9qZSBuYSBqb3JuYWRhPC9kaXY+JzsKICAgICAgZXZIb2plLmZvckVhY2goZnVuY3Rpb24oZSl7CiAgICAgICAgdmFyIGRvbmUgPSAhIWNoZWNrc1tlLmlkXTsKICAgICAgICB2YXIgdGVtQ2ggPSBURU1fQ0hBVkUuaW5kZXhPZihlLmlkKSA+IC0xOwogICAgICAgIHZhciBkbSA9IGRpYU1lcyhlLmRhdGEpOwogICAgICAgIGJIb2plICs9ICc8ZGl2IGNsYXNzPSJtcm93JysoZG9uZT8nIGRvbmUnOicnKSsnIj48ZGl2IGNsYXNzPSJkYXRhIj4nK2RtLmQrJzxzbWFsbD4nK2RtLm0rJzwvc21hbGw+PC9kaXY+JysKICAgICAgICAgICc8ZGl2IGNsYXNzPSJ0Ij4nK2VzYyhlLnRpdHVsbykrJzxicj48c3BhbiBzdHlsZT0iY29sb3I6dmFyKC0taW5rLWRpbSk7Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxM3B4Ij4nK2VzYyhlLmhvcmEpKyhkb25lPycgwrcgcHJlc2Vuw6dhIGNvbmZpcm1hZGEnOnRlbUNoPycgwrcgcGFsYXZyYS1jaGF2ZSByZXZlbGFkYSBhbyB2aXZvIMK3IHZhbGUgJytQVF9BVUxBKycgcHRzJzonIMK3IHRyYW5zbWlzc8OjbyBhbyB2aXZvIG5vIFlvdVR1YmUnKSsnPC9zcGFuPjwvZGl2PicrCiAgICAgICAgICAodGVtQ2gKICAgICAgICAgICAgPyAnPGJ1dHRvbiBjbGFzcz0iYnRuICcrKGRvbmU\/J2J0bi1naG9zdCc6J2J0bi1hbWJlcicpKycgYnRuLXNtIiBkYXRhLWdvdG89ImF1bGFzIj4nKyhkb25lPydWZXIgYXVsYSc6J0ZhemVyIGNoZWNrLWluJykrJzwvYnV0dG9uPicKICAgICAgICAgICAgOiAnPGEgY2xhc3M9ImJ0biBidG4tYW1iZXIgYnRuLXNtIiBocmVmPSInKyhlLnl0fHwnaHR0cHM6Ly93d3cueW91dHViZS5jb20vQGVzdHJhdGVnaWFtZWQnKSsnIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciI+QXNzaXN0aXIgYW8gdml2bzwvYT4nKSsnPC9kaXY+JzsKICAgICAgfSk7CiAgICB9IGVsc2UgaWYgKHByZUVzdHJlaWEpIHsKICAgICAgLy8gcHLDqS1lc3RyZWlhIChhdMOpIGEgQXVsYSBJbmF1Z3VyYWwpOiBDQVJUw4NPIERFIEJPQVMtVklOREFTIGNvbSBhIHRodW1iIGRvCiAgICAgIC8vIGV2ZW50byArIGEgbWVuc2FnZW0gZGUgcmVjZXDDp8OjbyAocGVkaWRvIGRvIGNvb3JkZW5hZG9yLCAxMi8wOCkgKyBvIENUQQogICAgICAvLyBkbyBsZW1icmV0ZSBOQVRJVk8gZG8gWW91VHViZS4gQSBkYXRhIGFwYXJlY2UgU8OTIGFxdWkgKG8gY2FiZcOnYWxobyBuw6NvCiAgICAgIC8vIHJlcGV0ZSwgbyBjaGlwIG1vc3RyYSBhIGNvbnRhZ2VtKSBwcmEgbsOjbyBtYXJ0ZWxhciAzeC4KICAgICAgLy8gU8OTIGFwYXJlY2UgcXVhbmRvIGEgQXVsYSBJbmF1Z3VyYWwgSsOBIHRlbSBsaW5rIGRvIFlvdVR1YmUgKHByb3gueXQpLiBTZW0KICAgICAgLy8gbGluayAoZXguOiBSZXZhbGlkYSBlbnF1YW50byBhIGxpdmUgbsOjbyBleGlzdGUg4oCUIHBlZGlkbyBkbyBJZ29yIDEyLzA4KSwgbwogICAgICAvLyBjYXJkIGZpY2EgZGUgZm9yYTogbmFkYSBkZSB0aHVtYiB2YXppYSBuZW0gIkRlZmluaXIgbGVtYnJldGUiIHByYSBsdWdhcgogICAgICAvLyBuZW5odW0uIFZvbHRhIHNvemluaG8gcXVhbmRvIG8geW91dHViZV91cmwgZG8gZXZlbnRvIGZvciBwcmVlbmNoaWRvLgogICAgICB2YXIgcHJveCA9IGouZXZlbnRvcy5maW5kKGZ1bmN0aW9uKGUpeyByZXR1cm4gZS5kYXRhID49IGhvamUuaXNvOyB9KSB8fCBqLmV2ZW50b3NbMF07CiAgICAgIGlmIChwcm94ICYmIHByb3gueXQpIHsKICAgICAgICB2YXIgcHJveFl0ID0gcHJveC55dDsKICAgICAgICB2YXIgcHJveFRodW1iID0geXRUaHVtYihwcm94WXQpOwogICAgICAgIHZhciBwcm94VGl0dWxvID0gcHJveC50aXR1bG8uc3BsaXQoJyDCtyAnKVswXTsKICAgICAgICBiSG9qZSArPSAnPGRpdiBjbGFzcz0ic2VjLWgiPlN1YSBqb3JuYWRhIGNvbWXDp2EgYXF1aTwvZGl2PicrCiAgICAgICAgICAnPGFydGljbGUgY2xhc3M9ImNhcmQgYWYtd2VsY29tZSI+JysKICAgICAgICAgICc8ZGl2IGNsYXNzPSJhZnctbWVkaWEiPicrCiAgICAgICAgICAocHJveFRodW1iID8gJzxpbWcgc3JjPSInK3Byb3hUaHVtYisnIiBhbHQ9IicrZXNjKHByb3hUaXR1bG8pKyciIGxvYWRpbmc9ImxhenkiIG9uZXJyb3I9InRoaXMuc3R5bGUuZGlzcGxheT1cJ25vbmVcJyI+JyA6ICcnKSsKICAgICAgICAgICc8c3BhbiBjbGFzcz0iYWZ3LWJhZGdlIj4nK2RhdGFCUihwcm94LmRhdGEpKycgwrcgJytlc2MocHJveC5ob3JhKSsnPC9zcGFuPjwvZGl2PicrCiAgICAgICAgICAnPGRpdiBjbGFzcz0iYWZ3LWJvZHkiPicrCiAgICAgICAgICAnPGgzPlF1ZSBib20gdGVyIHZvY8OqIG5vIEF0byBGaW5hbCE8L2gzPicrCiAgICAgICAgICAnPHA+UGFyYWLDqW5zIHBvciBhY2Vzc2FyIGEgc3VhIMOhcmVhLiBBIHJldGEgZmluYWwgcnVtbyBhbyAnK0FGX0JSQU5ELmN1cnRhKycgY29tZcOnYSBuYSA8Yj4nK2VzYyhwcm94VGl0dWxvKSsnPC9iPiwgZGlhIDxiPicrZGF0YUJSKHByb3guZGF0YSkrJywgw6BzICcrZXNjKHByb3guaG9yYSkrJzwvYj4sIGFvIHZpdm8gbm8gWW91VHViZS4gQXRpdmUgbyBsZW1icmV0ZSBwYXJhIG7Do28gcGVyZGVyIGEgZXN0cmVpYS48L3A+JysKICAgICAgICAgICc8YSBjbGFzcz0iYnRuIGJ0bi1hbWJlciBidG4tc20iIGhyZWY9IicrcHJveFl0KyciIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIj4nK0lDT19TSU5PKycgRGVmaW5pciBsZW1icmV0ZSBubyBZb3VUdWJlPC9hPicrCiAgICAgICAgICAnPGRpdiBjbGFzcz0iYWZ3LW5vdGEiPk8gWW91VHViZSB0ZSBhdmlzYSBuYSBob3JhIGVtIHF1ZSBhIHRyYW5zbWlzc8OjbyBlbnRyYXIgQU8gVklWTy48L2Rpdj4nKwogICAgICAgICAgJzwvZGl2PjwvYXJ0aWNsZT4nOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBiSG9qZSArPSAnPGRpdiBjbGFzcz0ic2VjLWgiPkhvamUgbmEgam9ybmFkYTwvZGl2PicrCiAgICAgICAgJzxkaXYgY2xhc3M9ImRheS1lbXB0eSI+U2VtIHRyYW5zbWlzc8OjbyBob2plLiBSZWN1cGVyZSBxdWVzdMO1ZXMgYXRyYXNhZGFzIG91IHJldmVqYSBhcyBncmF2YcOnw7Vlcy48L2Rpdj4nOwogICAgfQoKICAgIGlmIChhdHJhc2FkYXMpIHsKICAgICAgYkhvamUgKz0gJzxkaXYgY2xhc3M9Im1yb3ciPjxkaXYgY2xhc3M9ImRhdGEiPicrYXRyYXNhZGFzKyc8c21hbGw+JysoYXRyYXNhZGFzPT09MT8nZGlhJzonZGlhcycpKyc8L3NtYWxsPjwvZGl2PicrCiAgICAgICAgJzxkaXYgY2xhc3M9InQiPkF0w6kgPGIgc3R5bGU9ImNvbG9yOnZhcigtLWFtYmVyKSI+JysoYXRyYXNhZGFzICogUFRfRElBKSsnIHB0czwvYj4gZXNwZXJhbmRvIHBvciB2b2PDqi4gUXVlc3TDtWVzIGF0cmFzYWRhcyB2YWxlbSBpZ3VhbCBhdMOpIG8gZW5jZXJyYW1lbnRvIGRvIEdhYmFyaXRvLjwvZGl2PicrCiAgICAgICAgJzxidXR0b24gY2xhc3M9ImJ0biBidG4tYW1iZXIgYnRuLXNtIiBkYXRhLWdvdG89InF1ZXN0b2VzIj5SZWN1cGVyYXIgcG9udG9zPC9idXR0b24+PC9kaXY+JzsKICAgIH0KCiAgICAvLyBQb250dWHDp8Ojbzogc29tZSBuYSBwcsOpLWVzdHJlaWEgZW5xdWFudG8gbyBwbGFjYXIgw6kgemVybyAoY2FyZCBkZSB6ZXJvcwogICAgLy8gbsOjbyBpbmZvcm1hIG5hZGEpOyByZWFwYXJlY2UgYXNzaW0gcXVlIGEgMcKqIGluZGljYcOnw6NvIHZpcmEgcG9udG9zCiAgICB2YXIgYlB0cyA9IChwcmVFc3RyZWlhICYmICFwLnRvdGFsKQogICAgICA\/ICcnCiAgICAgIDogJzxkaXYgY2xhc3M9InNlYy1oIj5TdWEgcG9udHVhw6fDo288L2Rpdj4nKwogICAgICAgICc8ZGl2IGNsYXNzPSJjYXJkIiBzdHlsZT0icGFkZGluZzoyNnB4IDMwcHgiPicrCiAgICAgICAgJzxkaXYgc3R5bGU9ImZvbnQtc2l6ZTozOHB4O2ZvbnQtd2VpZ2h0OjgwMDtjb2xvcjp2YXIoLS1hbWJlcikiPicrZm10UHRzKHAudG90YWwpKycgPHNtYWxsIHN0eWxlPSJmb250LXNpemU6MTVweDtjb2xvcjp2YXIoLS1pbmstbXV0ZSk7Zm9udC13ZWlnaHQ6NjAwIj5wdHM8L3NtYWxsPjwvZGl2PicrCiAgICAgICAgJzxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMi41cHg7Y29sb3I6dmFyKC0taW5rLW11dGUpO21hcmdpbi10b3A6MnB4Ij5qb3JuYWRhIGF0w6kgJytmbXRQdHMoUE9OVE9TLmpvcm5hZGEpKycgcHRzICsgaW5kaWNhw6fDtWVzIChzZW0gdGV0byk8L2Rpdj4nKwogICAgICAgICc8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7Z2FwOjI2cHg7ZmxleC13cmFwOndyYXA7bWFyZ2luLXRvcDoxNHB4O2ZvbnQtc2l6ZToxNHB4O2NvbG9yOnZhcigtLWluay1kaW0pIj4nKwogICAgICAgICc8c3Bhbj48YiBzdHlsZT0iY29sb3I6dmFyKC0taW5rKSI+UHJlc2Vuw6dhPC9iPiAnK2ZtdFB0cyhwLnByZXNlbmNhKSsnIC8gJytQT05UT1MucHJlc2VuY2ErJzwvc3Bhbj4nKwogICAgICAgICc8c3Bhbj48YiBzdHlsZT0iY29sb3I6dmFyKC0taW5rKSI+UXVlc3TDtWVzPC9iPiAnK2ZtdFB0cyhwLm1pc3NvZXMpKycgLyAnK1BPTlRPUy5taXNzb2VzKyc8L3NwYW4+JysKICAgICAgICAnPHNwYW4+PGIgc3R5bGU9ImNvbG9yOnZhcigtLWluaykiPlNpbXVsYWRvIEZpbmFsPC9iPiAnK2ZtdFB0cyhwLnNpbXVsYWRvKSsnIC8gJytQT05UT1Muc2ltdWxhZG8rJzwvc3Bhbj4nKwogICAgICAgICc8c3Bhbj48YiBzdHlsZT0iY29sb3I6dmFyKC0taW5rKSI+SW5kaWNhw6fDtWVzPC9iPiArJytmbXRQdHMocC5pbmRpY2FjYW8pKycgPHNtYWxsIHN0eWxlPSJjb2xvcjp2YXIoLS1pbmstbXV0ZSkiPmLDtG51czwvc21hbGw+PC9zcGFuPjwvZGl2PicrCiAgICAgICAgJzxidXR0b24gY2xhc3M9ImJ0biBidG4tZ2hvc3QgYnRuLXNtIiBkYXRhLWdvdG89InJhbmtpbmciIHN0eWxlPSJtYXJnaW4tdG9wOjE4cHgiPlZlciBtaW5oYSBwb3Npw6fDo28gbmEgY2xhc3NpZmljYcOnw6NvPC9idXR0b24+PC9kaXY+JzsKCiAgICAvLyBPUkRFTSBQT1IgRkFTRQogICAgaHRtbCArPSBwcmVFc3RyZWlhCiAgICAgIC8vIGFudGVzIGRlIDI2LzA4OiBvIFbDjURFTyBkZSBib2FzLXZpbmRhcyBwcmltZWlybyAocGVkaWRvIGRvIElnb3IgMTMvMDgg4oCUCiAgICAgIC8vIHF1YW5kbyBleGlzdGU7IG5vIFJldmFsaWRhIGJWaWRlbyDDqSAnJyBlIHNvbWUpLCBkZXBvaXMgIkNvbW8gdmFpCiAgICAgIC8vIGZ1bmNpb25hciIsIG8gY2FyZCBkYSBBdWxhIEluYXVndXJhbCBlIGEgcG9udGUgZXh0ZXJuYSBwb3Igw7psdGltbwogICAgICA\/IGJWaWRlbyArIGJDb21vICsgYkhvamUgKyBiSW5kICsgYlB0cyArIGJCcQogICAgICAvLyBkdXJhbnRlIGEgam9ybmFkYTogaG9qZSDihpIgcGxhY2FyIOKGkiBpbmRpY2HDp8O1ZXMg4oaSIHJlZ3JhcyByZWNvbGhpZGFzCiAgICAgIDogYkhvamUgKyBiUHRzICsgYkluZCArIGJWaWRlbyArIGJDb21vOwoKICAgICQoJyNtYWluJykuaW5uZXJIVE1MID0gaHRtbDsKICAgICQkKCdbZGF0YS1nb3RvXScpLmZvckVhY2goZnVuY3Rpb24oYil7CiAgICAgIGIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpeyBnbyhiLmRhdGFzZXQuZ290byk7IH0pOwogICAgfSk7CiAgICB2YXIgYmMgPSAkKCcjaW5kQ29waWFyJyk7CiAgICBpZiAoYmMpIGJjLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXsKICAgICAgdmFyIGlucCA9ICQoJyNpbmRMaW5rJyk7CiAgICAgIHRyeSB7IGlucC5zZWxlY3QoKTsgaW5wLnNldFNlbGVjdGlvblJhbmdlKDAsIDk5OSk7IGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5Jyk7IH0gY2F0Y2goZSl7fQogICAgICBpZiAobmF2aWdhdG9yLmNsaXBib2FyZCAmJiBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCkgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoaW5wLnZhbHVlKS5jYXRjaChmdW5jdGlvbigpe30pOwogICAgICBiYy50ZXh0Q29udGVudCA9ICdDb3BpYWRvIOKckyc7CiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXsgYmMudGV4dENvbnRlbnQgPSAnQ29waWFyIGxpbmsnOyB9LCAxODAwKTsKICAgICAgdG9hc3QoJ0xpbmsgY29waWFkby4gQ29tcGFydGlsaGUgY29tIG9zIGFtaWdvcyEnKTsKICAgIH0pOwogIH0KCiAgLyogLS0tLS0tLS0tLSBRVUVTVMOVRVMgKGjDrWJyaWRvOiBoZXJvIGRlIGhvamUgKyBsaXN0YXMgY29tcGFjdGFzKSAtLS0tLS0tLS0tICovCiAgZnVuY3Rpb24gcmVuZGVyUXVlc3RvZXMoKXsKICAgIHZhciBwID0gY2FsY1BvbnRvcyh1c2VyKTsKICAgIHZhciBtaXNzID0gc3RvcmUubWlzc29lcyh1c2VyLmVtYWlsKTsKICAgIHZhciBsaWJlcmFkYXMgPSBqLmV2ZW50b3MuZmlsdGVyKGZ1bmN0aW9uKGUpeyByZXR1cm4gZS5xdWl6ICYmIChtb2RvUHJldmlldygpIHx8IGUuZGF0YSA8PSBob2plLmlzbyk7IH0pOwogICAgdmFyIGRlSG9qZSA9IGxpYmVyYWRhcy5maWx0ZXIoZnVuY3Rpb24oZSl7IHJldHVybiBlLmRhdGEgPT09IGhvamUuaXNvOyB9KTsKICAgIHZhciBhdHJhc2FkYXMgPSBsaWJlcmFkYXMuZmlsdGVyKGZ1bmN0aW9uKGUpeyByZXR1cm4gKG1vZG9QcmV2aWV3KCkgPyBlLmRhdGEgIT09IGhvamUuaXNvIDogZS5kYXRhIDwgaG9qZS5pc28pICYmICFtaXNzW2UuaWRdOyB9KQogICAgICAuc29ydChmdW5jdGlvbihhLGIpeyByZXR1cm4gYS5kYXRhIDwgYi5kYXRhID8gMSA6IC0xOyB9KTsKICAgIHZhciBjdW1wcmlkYXMgPSBsaWJlcmFkYXMuZmlsdGVyKGZ1bmN0aW9uKGUpeyByZXR1cm4gbWlzc1tlLmlkXSAmJiBlLmRhdGEgIT09IGhvamUuaXNvOyB9KQogICAgICAuc29ydChmdW5jdGlvbihhLGIpeyByZXR1cm4gYS5kYXRhIDwgYi5kYXRhID8gMSA6IC0xOyB9KTsKICAgIHZhciBwdHNQb3JNaXNzYW8gPSBQVF9ESUE7CiAgICB2YXIgZmFsdGFtID0gcC5uUXVpenplcyAtIHAubk1pc3M7CgogICAgdmFyIGh0bWwgPSBwYWdlSGVhZCgnUmVzb2x2YSBlIHBvbnR1ZScsICdRdWVzdMO1ZXMnLAogICAgICAnVW0gYmxvY28gcG9yIGF1bGEsIG5vIHBhZHLDo28gZGEgc3VhIHByb3ZhOiBjb3JyZcOnw6NvIGltZWRpYXRhIGUgZ2FiYXJpdG8gY29tZW50YWRvLicsCiAgICAgIGZtdFB0cyhwLm1pc3NvZXMpICsgJyAvICcgKyBQT05UT1MubWlzc29lcyArICcgcHRzJyk7CiAgICBodG1sICs9IGRlbW9CYW5uZXIoKTsKCiAgICAvLyBCTE9RVUVJTyBhdMOpIG8gZGlhIGRhIDHCqiBhdWxhIGNvbSBxdWVzdMO1ZXMgKHBlZGlkbyBkbyBJZ29yLCAxMi8wOCkg4oCUIG1lc21hCiAgICAvLyBsaW5ndWFnZW0gZG8gU2ltdWxhZG86IGJsb2NvIGRlIERBVEEgZGVzdGFjYWRvICsgbWVuc2FnZW0sIHNlbSBhIGxpc3RhLgogICAgdmFyIHByaW1laXJvUXVpeiA9IGouZXZlbnRvcy5maW5kKGZ1bmN0aW9uKGUpeyByZXR1cm4gZS5xdWl6OyB9KTsKICAgIGlmIChwcmltZWlyb1F1aXogJiYgIW1vZG9QcmV2aWV3KCkgJiYgaG9qZS5pc28gPCBwcmltZWlyb1F1aXouZGF0YSkgewogICAgICB2YXIgcHEgPSBwcmltZWlyb1F1aXouZGF0YS5zcGxpdCgnLScpOwogICAgICB2YXIgcURhdGFFeHRlbnNvID0gcGFyc2VJbnQocHFbMl0sMTApICsgJyBkZSAnICsgTUVTRVNfRlVMTFtwYXJzZUludChwcVsxXSwxMCktMV07CiAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9ImNhcmQgbG9ja2VkLWNhcmQiPicrCiAgICAgICAgJzxkaXYgY2xhc3M9InNpbS1xdWFuZG8iPicrCiAgICAgICAgJzxkaXYgY2xhc3M9InNxLWljbyI+JytJQ09fUFJPVkErJzwvZGl2PicrCiAgICAgICAgJzxkaXYgY2xhc3M9InNxLXR4dCI+PGRpdiBjbGFzcz0ic3EtbGFiZWwiPlF1YW5kbyBhYnJlbTwvZGl2PicrCiAgICAgICAgJzxkaXYgY2xhc3M9InNxLWRpYSI+JytxRGF0YUV4dGVuc28rJzwvZGl2PicrCiAgICAgICAgJzxkaXYgY2xhc3M9InNxLWhvcmEiPm5vIGRpYSBkZSBjYWRhIGF1bGEsIHVtYSBub3ZhIHJvZGFkYTwvZGl2PjwvZGl2PjwvZGl2PicrCiAgICAgICAgJzxwIHN0eWxlPSJtYXJnaW4tdG9wOjIwcHgiPkFzIHF1ZXN0w7VlcyBhYnJlbSBubyBkaWEgZGUgY2FkYSBhdWxhLCBubyBwYWRyw6NvIGRhIHN1YSBwcm92YSwgY29tIGNvcnJlw6fDo28gbmEgaG9yYSwgZSB2YWxlbSBhdMOpICcrUFRfRElBKycgcHRzIHBvciBkaWEuIEF0w6kgbMOhLCBnYXJhbnRhIGEgc3VhIHByZXNlbsOnYSBuYXMgdHJhbnNtaXNzw7VlcyBlIHNvbWUgcG9udG9zIG5hIHN1YSBjbGFzc2lmaWNhw6fDo28uPC9wPicrCiAgICAgICAgJzxidXR0b24gY2xhc3M9ImJ0biBidG4tYW1iZXIgc2ltLWJsb3F1ZWFkbyIgdHlwZT0iYnV0dG9uIiBkaXNhYmxlZCBhcmlhLWRpc2FibGVkPSJ0cnVlIj4nK0lDT19MT0NLKycgQWJyZW0gZW0gJytkYXRhQlIocHJpbWVpcm9RdWl6LmRhdGEpKyc8L2J1dHRvbj4nKwogICAgICAgICc8L2Rpdj4nOwogICAgICAkKCcjbWFpbicpLmlubmVySFRNTCA9IGh0bWw7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJjYXJkIiBzdHlsZT0icGFkZGluZzoyNnB4IDMwcHg7bWFyZ2luLWJvdHRvbToyNnB4Ij4nKwogICAgICAnPGRpdiBjbGFzcz0ia2lja2VyIiBzdHlsZT0ibWFyZ2luLWJvdHRvbToxMHB4Ij5GYXRpYSBkZSBxdWVzdMO1ZXM8L2Rpdj4nKwogICAgICAnPGRpdiBzdHlsZT0iZm9udC1zaXplOjM4cHg7Zm9udC13ZWlnaHQ6ODAwO2NvbG9yOnZhcigtLWFtYmVyKSI+JytmbXRQdHMocC5taXNzb2VzKSsnIDxzbWFsbCBzdHlsZT0iZm9udC1zaXplOjE1cHg7Y29sb3I6dmFyKC0taW5rLW11dGUpO2ZvbnQtd2VpZ2h0OjYwMCI+LyAnK1BPTlRPUy5taXNzb2VzKycgcHRzIMK3ICcrcC5uTWlzcysnIGRlICcrcC5uUXVpenplcysnIHJlc29sdmlkYXM8L3NtYWxsPjwvZGl2PicrCiAgICAgICc8ZGl2IGNsYXNzPSJwcm9ncmVzcyI+PGRpdiBjbGFzcz0iZmlsbCIgc3R5bGU9IndpZHRoOicrKHAubk1pc3MvcC5uUXVpenplcyoxMDApKyclIj48L2Rpdj48L2Rpdj4nKwogICAgICAnPGRpdiBjbGFzcz0icHJvZ3Jlc3Mtbm90ZSI+JysoZmFsdGFtID4gMAogICAgICAgID8gJ0ZhbHRhbSA8YiBzdHlsZT0iY29sb3I6dmFyKC0tYW1iZXIpIj4nK2ZhbHRhbSsnICcrKGZhbHRhbT09PTE\/J2RpYSc6J2RpYXMnKSsnPC9iPiBkZSBxdWVzdMO1ZXMuJwogICAgICAgIDogJ1RvZGFzIGFzIHF1ZXN0w7VlcyByZXNvbHZpZGFzLiBBZ29yYSBkZWZlbmRhIG5vIFNpbXVsYWRvLicpKyc8L2Rpdj48L2Rpdj4nOwoKICAgIHZhciBwbGF5ID0gJzxzdmcgd2lkdGg9IjExIiBoZWlnaHQ9IjExIiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9ImN1cnJlbnRDb2xvciI+PHBhdGggZD0iTTcgNGwxMyA4LTEzIDh6Ii8+PC9zdmc+JzsKCiAgICBmdW5jdGlvbiBtcm93KGUpewogICAgICB2YXIgZG0gPSBkaWFNZXMoZS5kYXRhKTsKICAgICAgdmFyIG0gPSBtaXNzW2UuaWRdOwogICAgICB2YXIgblByb2cgPSBuUmVzcG9zdGFzRXZlbnRvKGUuaWQpOwogICAgICB2YXIgYWNhbyA9IG0KICAgICAgICA\/ICc8c3BhbiBjbGFzcz0icmVzIj4nK20uYWNlcnRvcysnLycrbS50b3RhbCsnIMK3ICsgJysoUFRfRElBX1BJU08gKyBNYXRoLnJvdW5kKFBUX0RJQV9BQ0VSVE9TKm0uYWNlcnRvcy9tLnRvdGFsKSkrJyBwdHM8L3NwYW4+JysKICAgICAgICAgICc8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWdob3N0IGJ0bi1zbSIgZGF0YS1xdWl6PSInK2UuaWQrJyI+UmV2ZXI8L2J1dHRvbj4nCiAgICAgICAgOiAnPHNwYW4gY2xhc3M9InJlcyIgc3R5bGU9ImNvbG9yOnZhcigtLWFtYmVyKSI+YXTDqSAnK2ZtdFB0cyhwdHNQb3JNaXNzYW8pKycgcHRzPC9zcGFuPicrCiAgICAgICAgICAocXVpekRvRXZlbnRvKGUpLmxlbmd0aAogICAgICAgICAgICA\/ICc8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWdob3N0IGJ0bi1zbSIgZGF0YS1xdWl6PSInK2UuaWQrJyI+JysoblByb2c\/ICdDb250aW51YXIgKCcrblByb2crJyBkZSAnK3F1aXpEb0V2ZW50byhlKS5sZW5ndGgrJyknIDogKG1vZG9QcmV2aWV3KCkgPyAnUmVzb2x2ZXInIDogJ1Jlc29sdmVyIChhdHJhc2FkYXMpJykpKyc8L2J1dHRvbj4nCiAgICAgICAgICAgIDogJzxzcGFuIGNsYXNzPSJyZXMiIHN0eWxlPSJjb2xvcjp2YXIoLS1pbmstbXV0ZSkiPkVtIHByZXBhcmHDp8Ojbzwvc3Bhbj4nKTsKICAgICAgcmV0dXJuICc8ZGl2IGNsYXNzPSJtcm93JysobT8nIGRvbmUnOicnKSsnIj48ZGl2IGNsYXNzPSJkYXRhIj4nK2RtLmQrJzxzbWFsbD4nK2RtLm0rJzwvc21hbGw+PC9kaXY+JysKICAgICAgICAnPGRpdiBjbGFzcz0idCI+Jytlc2MoZS50aXR1bG8pKyc8L2Rpdj4nK2FjYW8rJzwvZGl2Pic7CiAgICB9CgogICAgLy8gMSkgTWlzc8OjbyBkZSBob2plOiBjYXJkIGhlcm8KICAgIGlmICghbGliZXJhZGFzLmxlbmd0aCkgewogICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJjYXJkIGxvY2tlZC1jYXJkIj48cD5BcyBxdWVzdMO1ZXMgYWJyZW0ganVudG8gY29tIGEgcHJpbWVpcmEgYXVsYSBkYSBqb3JuYWRhLjwvcD48L2Rpdj4nOwogICAgfSBlbHNlIGlmIChkZUhvamUubGVuZ3RoKSB7CiAgICAgIGRlSG9qZS5mb3JFYWNoKGZ1bmN0aW9uKGUpewogICAgICAgIHZhciBtID0gbWlzc1tlLmlkXTsKICAgICAgICB2YXIgcElzbyA9IGUuZGF0YS5zcGxpdCgnLScpOwogICAgICAgIHZhciBkYXRhTGFiZWwgPSBwYXJzZUludChwSXNvWzJdLDEwKSsnIGRlICcrTUVTRVNfRlVMTFtwYXJzZUludChwSXNvWzFdLDEwKS0xXTsKICAgICAgICB2YXIgdGh1bWIgPSBlLnl0CiAgICAgICAgICA\/ICc8aW1nIHNyYz0iJyt5dFRodW1iKGUueXQpKyciIGFsdD0iIiBsb2FkaW5nPSJsYXp5IiBvbmVycm9yPSJ0aGlzLnJlbW92ZSgpIj4nCiAgICAgICAgICA6ICc8ZGl2IGNsYXNzPSJmYWxsIj48c3ZnIHdpZHRoPSI0NCIgaGVpZ2h0PSI0NCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCI+PGNpcmNsZSBjeD0iOSIgY3k9IjEwIiByPSIyLjIiLz48Y2lyY2xlIGN4PSIxNSIgY3k9IjEwIiByPSIyLjIiLz48cGF0aCBkPSJNNCAyMGMwLTYgMi0xMyA4LTEzczggNyA4IDEzIi8+PHBhdGggZD0iTTkgNGwzIDIgMy0yIi8+PC9zdmc+PC9kaXY+JzsKICAgICAgICBodG1sICs9ICc8YXJ0aWNsZSBjbGFzcz0iY2FyZCBoZXJvLW1pc3NhbycrKG0\/JyBkb25lJzonJykrJyI+JysKICAgICAgICAgICc8ZGl2IGNsYXNzPSJldi10aHVtYiI+Jyt0aHVtYisnPHNwYW4gY2xhc3M9ImV2LWJhZGdlIj4nK3BsYXkrJyBRdWVzdMO1ZXMgZGUgaG9qZTwvc3Bhbj48L2Rpdj4nKwogICAgICAgICAgJzxkaXYgY2xhc3M9ImhtLWJvZHkiPicrCiAgICAgICAgICAnPGRpdiBjbGFzcz0iaG0ta2lja2VyIj4nKyhtPydRdWVzdMO1ZXMgZGUgaG9qZSByZXNvbHZpZGFzJzonUXVlc3TDtWVzIGRlIGhvamUnKSsnIMK3ICcrZGF0YUxhYmVsKyc8L2Rpdj4nKwogICAgICAgICAgJzxoMz4nK2VzYyhlLnRpdHVsbykrJzwvaDM+JysKICAgICAgICAgIChtCiAgICAgICAgICAgID8gJzxwIGNsYXNzPSJobS1ub3RlIj5Wb2PDqiBmZXogPGIgc3R5bGU9ImNvbG9yOnZhcigtLWdyZWVuKSI+JyttLmFjZXJ0b3MrJyBkZSAnK20udG90YWwrJzwvYj4gZSBzb21vdSA8YiBzdHlsZT0iY29sb3I6dmFyKC0tZ3JlZW4pIj4nKyhQVF9ESUFfUElTTyArIE1hdGgucm91bmQoUFRfRElBX0FDRVJUT1MqbS5hY2VydG9zL20udG90YWwpKSsnIHB0czwvYj4uIFZvbHRlIGFtYW5ow6MgcGFyYSBhcyBwcsOzeGltYXMuPC9wPicrCiAgICAgICAgICAgICAgJzxidXR0b24gY2xhc3M9ImJ0biBidG4tZ2hvc3QgYnRuLXNtIiBkYXRhLXF1aXo9IicrZS5pZCsnIj5SZXZlciBnYWJhcml0bzwvYnV0dG9uPicKICAgICAgICAgICAgOiAoZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgIHZhciBucSA9IHF1aXpEb0V2ZW50byhlKS5sZW5ndGg7CiAgICAgICAgICAgICAgICB2YXIgblByb2cgPSBuUmVzcG9zdGFzRXZlbnRvKGUuaWQpOwogICAgICAgICAgICAgICAgcmV0dXJuICc8cCBjbGFzcz0iaG0tbm90ZSI+JytucSsnIHF1ZXN0w7VlcyBubyBwYWRyw6NvIGRhIHN1YSBwcm92YSwgY29ycmXDp8OjbyBpbWVkaWF0YSBxdWVzdMOjbyBhIHF1ZXN0w6NvLiBDb25jbHVpciBvIGRpYSBnYXJhbnRlIDxiIHN0eWxlPSJjb2xvcjp2YXIoLS1hbWJlcikiPicrZm10UHRzKDAuNCpwdHNQb3JNaXNzYW8pKycgcHRzPC9iPiBlIG9zIGFjZXJ0b3MgY29tcGxldGFtIGF0w6kgPGIgc3R5bGU9ImNvbG9yOnZhcigtLWFtYmVyKSI+JytmbXRQdHMocHRzUG9yTWlzc2FvKSsnPC9iPi48L3A+JysKICAgICAgICAgICAgICAgICAgKG5xCiAgICAgICAgICAgICAgICAgICAgPyAnPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1hbWJlciIgZGF0YS1xdWl6PSInK2UuaWQrJyI+JysoblByb2c\/ICdDb250aW51YXIgZGUgb25kZSBwYXJvdSAoJytuUHJvZysnIGRlICcrbnErJyknIDogJ1Jlc29sdmVyIGFzIHF1ZXN0w7VlcyBkZSBob2plJykrJzwvYnV0dG9uPicKICAgICAgICAgICAgICAgICAgICA6ICc8c3BhbiBjbGFzcz0ic3RhdGUtdGFnIHN0YXRlLXdhaXQiPlF1ZXN0w7VlcyBkZXN0ZSBkaWEgZW0gcHJlcGFyYcOnw6NvPC9zcGFuPicpOwogICAgICAgICAgICAgIH0pKCkpKwogICAgICAgICAgJzwvZGl2PjwvYXJ0aWNsZT4nOwogICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9ImRheS1lbXB0eSI+SG9qZSBuw6NvIHRlbSBxdWVzdMO1ZXMgbm92YXMuICcrKGF0cmFzYWRhcy5sZW5ndGg\/J0Fwcm92ZWl0ZSBwYXJhIHJlY3VwZXJhciBhcyBwZW5kZW50ZXMgYWJhaXhvLic6J0JvbSBkZXNjYW5zbywgYSBqb3JuYWRhIGNvbnRpbnVhIGFtYW5ow6MuJykrJzwvZGl2Pic7CiAgICB9CgogICAgLy8gMikgQXRyYXNhZGFzOiBsaXN0YSBkZSByZWN1cGVyYcOnw6NvCiAgICBpZiAoYXRyYXNhZGFzLmxlbmd0aCkgewogICAgICBodG1sICs9IG1vZG9QcmV2aWV3KCkKICAgICAgICA\/ICc8ZGl2IGNsYXNzPSJzZWMtaCI+VG9kb3Mgb3MgZGlhcyBsaWJlcmFkb3MgPHNwYW4gY2xhc3M9ImNudCI+JythdHJhc2FkYXMubGVuZ3RoKycgcGFyYSB2YWxpZGFyPC9zcGFuPjwvZGl2PicKICAgICAgICA6ICc8ZGl2IGNsYXNzPSJzZWMtaCI+UmVjdXBlcmUgcG9udG9zIDxzcGFuIGNsYXNzPSJjbnQiPicrYXRyYXNhZGFzLmxlbmd0aCsnIHBlbmRlbnRlJysoYXRyYXNhZGFzLmxlbmd0aD4xPydzJzonJykrJzwvc3Bhbj48L2Rpdj4nOwogICAgICBhdHJhc2FkYXMuZm9yRWFjaChmdW5jdGlvbihlKXsgaHRtbCArPSBtcm93KGUpOyB9KTsKICAgIH0KCiAgICAvLyAzKSBDdW1wcmlkYXM6IGhpc3TDs3JpY28gZGlzY3JldG8KICAgIGlmIChjdW1wcmlkYXMubGVuZ3RoKSB7CiAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9InNlYy1oIj5DdW1wcmlkYXMgPHNwYW4gY2xhc3M9ImNudCBnIj4nK2N1bXByaWRhcy5sZW5ndGgrJzwvc3Bhbj48L2Rpdj4nOwogICAgICBjdW1wcmlkYXMuZm9yRWFjaChmdW5jdGlvbihlKXsgaHRtbCArPSBtcm93KGUpOyB9KTsKICAgIH0KCiAgICAkKCcjbWFpbicpLmlubmVySFRNTCA9IGh0bWw7CiAgICAkJCgnW2RhdGEtcXVpel0nKS5mb3JFYWNoKGZ1bmN0aW9uKGIpewogICAgICBiLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXsgcmVuZGVyUXVpeihiLmRhdGFzZXQucXVpeik7IH0pOwogICAgfSk7CiAgfQoKICBmdW5jdGlvbiByZW5kZXJRdWl6KGV2SWQpewogICAgdmFyIGUgPSBqLmV2ZW50b3MuZmluZChmdW5jdGlvbih4KXsgcmV0dXJuIHguaWQgPT09IGV2SWQ7IH0pOwogICAgdmFyIHFzID0gcXVpekRvRXZlbnRvKGUpOwogICAgaWYgKCFxcy5sZW5ndGgpIHsKICAgICAgLy8gZGlhIGFpbmRhIHNlbSBxdWVzdMO1ZXMgY2FycmVnYWRhczogZXN0YWRvIGluZm9ybWF0aXZvLCBudW5jYSB0ZWxhIG1vcnRhCiAgICAgICQoJyNtYWluJykuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9InBhZ2UtaGVhZCI+PGRpdj4nKwogICAgICAgICc8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWdob3N0IGJ0bi1zbSIgaWQ9ImJ0blZvbHRhciIgc3R5bGU9Im1hcmdpbi1ib3R0b206MTZweCI+Vm9sdGFyIMOgcyBxdWVzdMO1ZXM8L2J1dHRvbj4nKwogICAgICAgICc8c3BhbiBjbGFzcz0ia2lja2VyIj5RdWVzdMO1ZXMgZG8gZGlhPC9zcGFuPjxoMSBzdHlsZT0iZm9udC1zaXplOjIycHgiPicrZXNjKGUudGl0dWxvKSsnPC9oMT48L2Rpdj48L2Rpdj4nKwogICAgICAgICc8ZGl2IGNsYXNzPSJjYXJkIGxvY2tlZC1jYXJkIj48aDMgc3R5bGU9Im1hcmdpbi1ib3R0b206OHB4Ij5RdWVzdMO1ZXMgZW0gcHJlcGFyYcOnw6NvPC9oMz4nKwogICAgICAgICc8cD5BcyBxdWVzdMO1ZXMgZGVzdGUgZGlhIGVzdMOjbyBzZW5kbyBmaW5hbGl6YWRhcyBwZWxvcyBwcm9mZXNzb3JlcyBlIGFwYXJlY2VtIGFxdWkgYW50ZXMgZGEgYXVsYS4gRW5xdWFudG8gaXNzbywgcmVzb2x2YSBvcyBkaWFzIGrDoSBsaWJlcmFkb3MuPC9wPjwvZGl2Pic7CiAgICAgICQoJyNidG5Wb2x0YXInKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHJlbmRlclF1ZXN0b2VzKTsKICAgICAgd2luZG93LnNjcm9sbFRvKDAsIDApOwogICAgICByZXR1cm47CiAgICB9CiAgICAvLyBQUk9EVcOHw4NPOiBvIHByb2dyZXNzbyDDqSBvIGNvbmp1bnRvIGRlIHJlc3Bvc3RhcyBKw4EgR1JBVkFEQVMgbm8gc2Vydmlkb3IKICAgIC8vIChDQUNIRS5yZXNwb3N0YXMsIHBvciBxdWVzdGFvX2lkKSDigJQgdmFsZSBlbSBxdWFscXVlciBhcGFyZWxoby4gTyBnYWJhcml0bwogICAgLy8gZSBvIGNvbWVudMOhcmlvIHPDsyBleGlzdGVtIG5vIGNsaWVudGUgREVQT0lTIGRlIHJlc3BvbmRlciAoc2VncmVkbyBubyBiYW5jbykuCiAgICBmdW5jdGlvbiByZXNwKGkpeyByZXR1cm4gcXNbaV0gPyBDQUNIRS5yZXNwb3N0YXNbcXNbaV0uaWRdIDogdW5kZWZpbmVkOyB9CiAgICBmdW5jdGlvbiBuUmVzcCgpeyB2YXIgbiA9IDA7IHFzLmZvckVhY2goZnVuY3Rpb24oXywgaSl7IGlmIChyZXNwKGkpKSBuKys7IH0pOyByZXR1cm4gbjsgfQogICAgZnVuY3Rpb24gYWNlcnRvcygpeyB2YXIgbiA9IDA7IHFzLmZvckVhY2goZnVuY3Rpb24oXywgaSl7IHZhciByID0gcmVzcChpKTsgaWYgKHIgJiYgci5hY2VydG91KSBuKys7IH0pOyByZXR1cm4gbjsgfQogICAgZnVuY3Rpb24gY29tcGxldG8oKXsgcmV0dXJuIHFzLmxlbmd0aCA+IDAgJiYgblJlc3AoKSA+PSBxcy5sZW5ndGg7IH0KICAgIGZ1bmN0aW9uIGxldHJhTGFiZWwocSwgdil7IHJldHVybiBxLmFsdHMgPyB2IDogKHYgPT09ICdDJyA\/ICdDZXJ0bycgOiAnRXJyYWRvJyk7IH0KCiAgICB2YXIgYXR1YWwgPSAwOwogICAgd2hpbGUgKGF0dWFsIDwgcXMubGVuZ3RoICYmIHJlc3AoYXR1YWwpKSBhdHVhbCsrOwogICAgaWYgKGF0dWFsID49IHFzLmxlbmd0aCkgYXR1YWwgPSAwOwoKICAgIGZ1bmN0aW9uIGNvbWVudGFyaW9IVE1MKGkpewogICAgICB2YXIgcSA9IHFzW2ldLCByID0gcmVzcChpKTsKICAgICAgaWYgKCFyIHx8ICFyLmNvbWVudGFyaW8pIHJldHVybiAnJzsKICAgICAgcmV0dXJuICc8ZGV0YWlscyBjbGFzcz0icXVpei1jb21lbnQiPjxzdW1tYXJ5PkdhYmFyaXRvOiAnK2xldHJhTGFiZWwocSwgci5jb3JyZXRhKSsnIMK3IFZlciBjb21lbnTDoXJpbzwvc3VtbWFyeT4nKwogICAgICAgICc8ZGl2IGNsYXNzPSJjYm9keSI+JyttaWRpYUhUTUwoci5jb21lbnRhcmlvKSsnPC9kaXY+PC9kZXRhaWxzPic7CiAgICB9CgogICAgZnVuY3Rpb24gbmF2SFRNTCgpewogICAgICByZXR1cm4gJzxkaXYgY2xhc3M9InFuYXYiPicrcXMubWFwKGZ1bmN0aW9uKHEsIGkpewogICAgICAgIHZhciBjbHMgPSAncW4nICsgKGkgPT09IGF0dWFsID8gJyBjdXInIDogJycpOwogICAgICAgIHZhciByID0gcmVzcChpKTsKICAgICAgICBpZiAocikgY2xzICs9IHIuYWNlcnRvdSA\/ICcgb2snIDogJyBlcnInOwogICAgICAgIHJldHVybiAnPGJ1dHRvbiBjbGFzcz0iJytjbHMrJyIgZGF0YS1ucT0iJytpKyciIGFyaWEtbGFiZWw9IklyIHBhcmEgYSBxdWVzdMOjbyAnKyhpKzEpKyciPicrKGkrMSkrJzwvYnV0dG9uPic7CiAgICAgIH0pLmpvaW4oJycpKyc8L2Rpdj4nOwogICAgfQoKICAgIGZ1bmN0aW9uIHJlc3Vtb0hUTUwoKXsKICAgICAgdmFyIGFjID0gYWNlcnRvcygpLCB0b3QgPSBxcy5sZW5ndGg7CiAgICAgIHZhciBwdHMgPSBQVF9ESUFfUElTTyArIE1hdGgucm91bmQoUFRfRElBX0FDRVJUT1MgKiBhYyAvIHRvdCk7CiAgICAgIHJldHVybiAnPGRpdiBjbGFzcz0icXVpei1yZXN1bHQiIHN0eWxlPSJtYXJnaW4tYm90dG9tOjIwcHgiPlJlc29sdmlkbzogPGI+JythYysnIGRlICcrdG90Kyc8L2I+IMK3IDxiPicrZm10UHRzKHB0cykrJyBwdHM8L2I+IG5hIGNsYXNzaWZpY2HDp8Ojby4gJysKICAgICAgICAnTm8gbWFwYTogdmVyZGUgw6kgbyBnYWJhcml0bywgdmVybWVsaG8gw6kgb25kZSB2b2PDqiBlcnJvdS48L2Rpdj4nOwogICAgfQoKICAgIGZ1bmN0aW9uIHF1ZXN0YW9IVE1MKGkpewogICAgICB2YXIgcSA9IHFzW2ldLCByID0gcmVzcChpKTsKICAgICAgdmFyIGJ0biA9IGZ1bmN0aW9uKHYsIHJvdHVsbywgbHQpewogICAgICAgIHZhciBjbHMgPSAnJzsKICAgICAgICBpZiAocikgewogICAgICAgICAgaWYgKHYgPT09IHIuY29ycmV0YSkgY2xzID0gJyBjbGFzcz0iaGl0Iic7CiAgICAgICAgICBlbHNlIGlmICh2ID09PSByLmxldHJhKSBjbHMgPSAnIGNsYXNzPSJlcnJhZG8iJzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICc8YnV0dG9uIHR5cGU9ImJ1dHRvbiInK2NscysnIGRhdGEtdj0iJyt2KyciJysociA\/ICcgZGlzYWJsZWQnIDogJycpKyc+JysKICAgICAgICAgIChsdCA\/ICc8YiBjbGFzcz0ibHQiPicrbHQrJzwvYj48c3Bhbj4nK2VzYyhyb3R1bG8pKyc8L3NwYW4+JyA6IHJvdHVsbykrJzwvYnV0dG9uPic7CiAgICAgIH07CiAgICAgIHZhciBvcHRzID0gcS5hbHRzCiAgICAgICAgPyBxLmFsdHMubWFwKGZ1bmN0aW9uKGEpeyByZXR1cm4gYnRuKGEubCwgYS50LCBhLmwpOyB9KS5qb2luKCcnKQogICAgICAgIDogYnRuKCdDJywgJ0NlcnRvJykgKyBidG4oJ0UnLCAnRXJyYWRvJyk7CiAgICAgIHJldHVybiAnPGRpdiBjbGFzcz0icXVpei1xIiBkYXRhLXE9IicraSsnIj48ZGl2IGNsYXNzPSJxaGVhZCI+UXVlc3TDo28gJysoaSsxKSsnIGRlICcrcXMubGVuZ3RoKyc8L2Rpdj4nKwogICAgICAgICc8cCBjbGFzcz0iZW51biI+JyttaWRpYUhUTUwocS5xKSsnPC9wPicrCiAgICAgICAgJzxkaXYgY2xhc3M9InF1aXotb3B0cycrKHEuYWx0cyA\/ICcgbXVsdCcgOiAnJykrJyI+JytvcHRzKyc8L2Rpdj4nKwogICAgICAgIGNvbWVudGFyaW9IVE1MKGkpKwogICAgICAgICc8L2Rpdj4nOwogICAgfQoKICAgIGZ1bmN0aW9uIHByb3hJbmRpY2UoKXsKICAgICAgaWYgKCFjb21wbGV0bygpKSB7CiAgICAgICAgZm9yICh2YXIgayA9IDE7IGsgPD0gcXMubGVuZ3RoOyBrKyspIHsKICAgICAgICAgIHZhciBpMiA9IChhdHVhbCArIGspICUgcXMubGVuZ3RoOwogICAgICAgICAgaWYgKCFyZXNwKGkyKSkgcmV0dXJuIGkyOwogICAgICAgIH0KICAgICAgICByZXR1cm4gLTE7CiAgICAgIH0KICAgICAgcmV0dXJuIGF0dWFsICsgMSA8IHFzLmxlbmd0aCA\/IGF0dWFsICsgMSA6IC0xOwogICAgfQoKICAgIGZ1bmN0aW9uIGN0cmxIVE1MKCl7CiAgICAgIHZhciBwcm94ID0gcHJveEluZGljZSgpOwogICAgICB2YXIgYWMgPSBhY2VydG9zKCk7CiAgICAgIHJldHVybiAnPGRpdiBjbGFzcz0icWN0cmwiPicrCiAgICAgICAgJzxidXR0b24gY2xhc3M9ImJ0biBidG4tZ2hvc3QgYnRuLXNtIiBpZD0icUFudCInKyhhdHVhbCA9PT0gMCA\/ICcgZGlzYWJsZWQnIDogJycpKyc+QW50ZXJpb3I8L2J1dHRvbj4nKwogICAgICAgICc8c3BhbiBjbGFzcz0icWxpbmUiPjxiPicrblJlc3AoKSsnPC9iPiBkZSAnK3FzLmxlbmd0aCsnIHJlc3BvbmRpZGFzIMK3IDxiIGNsYXNzPSJvayI+JythYysnPC9iPiAnKyhhYyA9PT0gMSA\/ICdhY2VydG8nIDogJ2FjZXJ0b3MnKSsnPC9zcGFuPicrCiAgICAgICAgKHByb3ggPj0gMAogICAgICAgICAgPyAnPGJ1dHRvbiBjbGFzcz0iYnRuICcrKHJlc3AoYXR1YWwpID8gJ2J0bi1hbWJlcicgOiAnYnRuLWdob3N0JykrJyBidG4tc20iIGlkPSJxUHJveCI+UHLDs3hpbWEgcXVlc3TDo288L2J1dHRvbj4nCiAgICAgICAgICA6ICc8c3BhbiBzdHlsZT0id2lkdGg6ODhweCI+PC9zcGFuPicpKwogICAgICAgICc8L2Rpdj4nOwogICAgfQoKICAgIGZ1bmN0aW9uIHJlbmRlcigpewogICAgICB2YXIgaHRtbCA9ICc8ZGl2IGNsYXNzPSJwYWdlLWhlYWQiPjxkaXY+JysKICAgICAgICAnPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1naG9zdCBidG4tc20iIGlkPSJidG5Wb2x0YXIiIHN0eWxlPSJtYXJnaW4tYm90dG9tOjE2cHgiPlZvbHRhciDDoHMgcXVlc3TDtWVzPC9idXR0b24+JysKICAgICAgICAnPHNwYW4gY2xhc3M9ImtpY2tlciI+UXVlc3TDtWVzIGRvIGRpYTwvc3Bhbj48aDEgc3R5bGU9ImZvbnQtc2l6ZToyMnB4Ij4nK2VzYyhlLnRpdHVsbykrJzwvaDE+JysKICAgICAgICAnPHAgY2xhc3M9ImRlc2MiPlVtYSBxdWVzdMOjbyBwb3IgdmV6LCBjb20gY29ycmXDp8OjbyBpbWVkaWF0YTogYW8gbWFyY2FyLCBhIGFsdGVybmF0aXZhIHRyYXZhIGUgbyBnYWJhcml0byBhcGFyZWNlIGNvbSBvIGNvbWVudMOhcmlvIGRvIHByb2Zlc3Nvci4gVXNlIG8gbWFwYSBwYXJhIG5hdmVnYXI7IHBvZGUgc2FpciBlIHZvbHRhciwgbyBwcm9ncmVzc28gZmljYSBzYWx2byBuYSBzdWEgY29udGEuPC9wPjwvZGl2PjwvZGl2Pic7CiAgICAgIGlmIChjb21wbGV0bygpKSBodG1sICs9IHJlc3Vtb0hUTUwoKTsKICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz0iY2FyZCBxdWl6LWJveCI+JytuYXZIVE1MKCkrcXVlc3Rhb0hUTUwoYXR1YWwpK2N0cmxIVE1MKCkrJzwvZGl2Pic7CiAgICAgICQoJyNtYWluJykuaW5uZXJIVE1MID0gaHRtbDsKICAgICAgd2luZG93LnNjcm9sbFRvKDAsIDApOwoKICAgICAgJCgnI2J0blZvbHRhcicpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgcmVuZGVyUXVlc3RvZXMpOwogICAgICAkJCgnLnFuYXYgLnFuJykuZm9yRWFjaChmdW5jdGlvbihiKXsKICAgICAgICBiLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXsgYXR1YWwgPSArYi5kYXRhc2V0Lm5xOyByZW5kZXIoKTsgfSk7CiAgICAgIH0pOwogICAgICB2YXIgYW50ID0gJCgnI3FBbnQnKTsKICAgICAgaWYgKGFudCkgYW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXsgaWYgKGF0dWFsID4gMCkgeyBhdHVhbC0tOyByZW5kZXIoKTsgfSB9KTsKICAgICAgdmFyIHB4ID0gJCgnI3FQcm94Jyk7CiAgICAgIGlmIChweCkgcHguYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpewogICAgICAgIHZhciBwMiA9IHByb3hJbmRpY2UoKTsKICAgICAgICBpZiAocDIgPj0gMCkgeyBhdHVhbCA9IHAyOyByZW5kZXIoKTsgfQogICAgICB9KTsKICAgICAgaWYgKCFyZXNwKGF0dWFsKSkgewogICAgICAgICQkKCcucXVpei1vcHRzIGJ1dHRvbicpLmZvckVhY2goZnVuY3Rpb24oYil7CiAgICAgICAgICBiLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXsKICAgICAgICAgICAgdmFyIGkgPSBhdHVhbCwgcSA9IHFzW2ldOwogICAgICAgICAgICAkJCgnLnF1aXotb3B0cyBidXR0b24nKS5mb3JFYWNoKGZ1bmN0aW9uKHgpeyB4LmRpc2FibGVkID0gdHJ1ZTsgfSk7CiAgICAgICAgICAgIHNiUnBjKCdyZXNwb25kZXJfcXVlc3RhbycsIHsgcF9jcGY6IENBQ0hFLnVzZXIuY3BmLCBwX3F1ZXN0YW86IHEuaWQsIHBfbGV0cmE6IGIuZGF0YXNldC52IH0pCiAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24ocnIpewogICAgICAgICAgICAgICAgaWYgKHJyLnN0YXR1cyA9PT0gJ29rJykgewogICAgICAgICAgICAgICAgICBDQUNIRS5yZXNwb3N0YXNbcS5pZF0gPSB7IGV2ZW50b19pZDogZXZJZCwgbGV0cmE6IGIuZGF0YXNldC52LAogICAgICAgICAgICAgICAgICAgIGFjZXJ0b3U6IHJyLmFjZXJ0b3UsIGNvcnJldGE6IHJyLmNvcnJldGEsIGNvbWVudGFyaW86IHJyLmNvbWVudGFyaW8gfTsKICAgICAgICAgICAgICAgICAgaWYgKGNvbXBsZXRvKCkpIHRvYXN0KCdRdWVzdMO1ZXMgZG8gZGlhIGNvbmNsdcOtZGFzOiAnK2FjZXJ0b3MoKSsnLycrcXMubGVuZ3RoKTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocnIuc3RhdHVzID09PSAnamFfcmVzcG9uZGlkYScpIHsKICAgICAgICAgICAgICAgICAgdG9hc3QoJ0VzdGEgcXVlc3TDo28gasOhIGZvaSByZXNwb25kaWRhIGVtIG91dHJvIGFjZXNzby4gQXR1YWxpemFuZG\/igKYnKTsKICAgICAgICAgICAgICAgICAgaGlkcmF0YXIoKS50aGVuKHJlbmRlcik7CiAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocnIuc3RhdHVzID09PSAnZXZlbnRvX2Z1dHVybycpIHsKICAgICAgICAgICAgICAgICAgdG9hc3QoJ0FzIHF1ZXN0w7VlcyBkZXN0ZSBkaWEgYWJyZW0gbmEgZGF0YSBkYSBhdWxhLicpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgdG9hc3QoJ07Do28gZm9pIHBvc3PDrXZlbCByZWdpc3RyYXIuIFRlbnRlIG5vdmFtZW50ZS4nKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJlbmRlcigpOwogICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9uKCl7IHRvYXN0KCdTZW0gY29uZXjDo28uIEEgcmVzcG9zdGEgbsOjbyBmb2kgcmVnaXN0cmFkYS4nKTsgcmVuZGVyKCk7IH0pOwogICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KCiAgICByZW5kZXIoKTsKICB9CgogIC8qIC0tLS0tLS0tLS0gU0lNVUxBRE8gRklOQUwgwrcgUFJPRFXDh8ODTyAocHJvdmEgw7puaWNhLCBzZXJ2aWRvciBtYW5kYSkgLS0tLS0tLS0tLSAqLwogIC8vIEVzcGVsaG8gdmlzdWFsIGRhIGphbmVsYSBvZmljaWFsIChvIHNlcnZpZG9yIFJFVkFMSURBIHR1ZG8gZW0gc2ltdWxhZG9fY29uZmlnKQogIHZhciBTSU1fSkFORUxBID0geyBkYXRhOiAnMjAyNi0wOS0wNicsIGFicmU6ICcxNDowMCcsIGZlY2hhOiAnMTk6MDAnLCBkdXJhY2FvTWluOiAzMDAgfTsKICBmdW5jdGlvbiBzaW1BZ29yYUJSVCgpeyByZXR1cm4gbmV3IERhdGUobmV3IERhdGUoKS50b0xvY2FsZVN0cmluZygnZW4tVVMnLCB7IHRpbWVab25lOiAnQW1lcmljYS9TYW9fUGF1bG8nIH0pKTsgfQogIGZ1bmN0aW9uIHNpbUFicmVUcygpeyByZXR1cm4gbmV3IERhdGUoU0lNX0pBTkVMQS5kYXRhICsgJ1QnICsgU0lNX0pBTkVMQS5hYnJlICsgJzowMC0wMzowMCcpLmdldFRpbWUoKTsgfQogIGZ1bmN0aW9uIHNpbUZlY2hhVHMoKXsgcmV0dXJuIG5ldyBEYXRlKFNJTV9KQU5FTEEuZGF0YSArICdUJyArIFNJTV9KQU5FTEEuZmVjaGEgKyAnOjAwLTAzOjAwJykuZ2V0VGltZSgpOyB9CiAgZnVuY3Rpb24gc2ltR2FiYXJpdG9MaWJlcmFkbygpeyByZXR1cm4gbW9kb1ByZXZpZXcoKSB8fCBEYXRlLm5vdygpID4gc2ltRmVjaGFUcygpOyB9CiAgdmFyIElDT19MT0NLID0gJzxzdmcgd2lkdGg9IjE1IiBoZWlnaHQ9IjE1IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIuMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHlsZT0idmVydGljYWwtYWxpZ246LTJweCI+PHJlY3QgeD0iNSIgeT0iMTEiIHdpZHRoPSIxNCIgaGVpZ2h0PSIxMCIgcng9IjIiLz48cGF0aCBkPSJNOCAxMVY3YTQgNCAwIDAxOCAwdjQiLz48L3N2Zz4nOwoKICBmdW5jdGlvbiByZW5kZXJTaW11bGFkbygpewogICAgdmFyIHAgPSBjYWxjUG9udG9zKHVzZXIpOwogICAgdmFyIGNmZyA9IFNJTV9DRkdbdXNlci5wcm92YV0gfHwgU0lNX0NGRy5lbmFtZWQ7CiAgICB2YXIgZXZTaW0gPSBqLmV2ZW50b3MuZmluZChmdW5jdGlvbihlKXsgcmV0dXJuIGUuaWQgPT09IGouc2ltdWxhZG9JZDsgfSk7CiAgICB2YXIgaHRtbCA9IHBhZ2VIZWFkKCdTaW11bGFkbyBGaW5hbCDCtyAnICsgZGF0YUJSKGV2U2ltLmRhdGEpLCAnU2ltdWxhZG8gRmluYWwnLAogICAgICAnUHJvdmEgw7puaWNhIG5hIHBsYXRhZm9ybWE6IDcgcHRzIHBvciBhY2VydG8sIGF0w6kgNzAwLiBHYWJhcml0byBjb21lbnRhZG8gYXDDs3MgbyBlbmNlcnJhbWVudG8uJywKICAgICAgJzcwMCBwdHMgZW0gam9nbycpOwoKICAgIHZhciBjaGlwcyA9ICc8ZGl2IGNsYXNzPSJzaW0tY2hpcHMiPicrCiAgICAgICc8c3Bhbj4nK2NmZy5xdWVzdG9lcysnIHF1ZXN0w7Vlczwvc3Bhbj4nKwogICAgICAnPHNwYW4+NCBhbHRlcm5hdGl2YXM8L3NwYW4+JysKICAgICAgJzxzcGFuPnF1ZXN0w7VlcyBpbsOpZGl0YXM8L3NwYW4+JysKICAgICAgJzxzcGFuPnByb2Zlc3NvcmVzIGVzcGVjaWFsaXN0YXM8L3NwYW4+PC9kaXY+JzsKCiAgICBpZiAoQ0FDSEUuc2ltUmVzKSB7CiAgICAgIHZhciByZXMgPSBDQUNIRS5zaW1SZXM7CiAgICAgIGlmIChzaW1HYWJhcml0b0xpYmVyYWRvKCkpIHsKICAgICAgICB2YXIgbm90YSA9IE1hdGgucm91bmQoMTAwICogcmVzLmFjZXJ0b3MgLyBNYXRoLm1heCgxLCByZXMudG90YWwpKTsKICAgICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJjYXJkIiBzdHlsZT0icGFkZGluZzo0MHB4O3RleHQtYWxpZ246Y2VudGVyIj4nKwogICAgICAgICAgJzxkaXYgY2xhc3M9ImtpY2tlciBjZW50ZXIiIHN0eWxlPSJtYXJnaW4tYm90dG9tOjE0cHgiPlNpbXVsYWRvIGNvbmNsdcOtZG88L2Rpdj4nKwogICAgICAgICAgJzxkaXYgc3R5bGU9ImZvbnQtc2l6ZTo1NHB4O2ZvbnQtd2VpZ2h0OjgwMDtjb2xvcjp2YXIoLS1hbWJlcikiPicrbm90YSsnJTwvZGl2PicrCiAgICAgICAgICAnPHAgc3R5bGU9ImNvbG9yOnZhcigtLWluay1kaW0pO21hcmdpbjo4cHggMCA0cHgiPicrcmVzLmFjZXJ0b3MrJyBkZSAnK3Jlcy50b3RhbCsnIHF1ZXN0w7VlcyDCtyBhY2VydG9zIG5vIFNpbXVsYWRvIEZpbmFsPC9wPicrCiAgICAgICAgICAnPHAgc3R5bGU9ImZvbnQtd2VpZ2h0OjcwMDtjb2xvcjp2YXIoLS1ncmVlbikiPisgJytmbXRQdHMocC5zaW11bGFkbykrJyBwdHMgbmEgY2xhc3NpZmljYcOnw6NvPC9wPicrCiAgICAgICAgICAnPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1hbWJlciIgaWQ9ImJ0bkdhYmFyaXRvIiBzdHlsZT0ibWFyZ2luLXRvcDoyMHB4Ij5WZXIgZ2FiYXJpdG8gY29tZW50YWRvPC9idXR0b24+JysKICAgICAgICAgICc8L2Rpdj4nOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIHJlc3VsdGFkbyBSRVRJRE8gYXTDqSBvIGVuY2VycmFtZW50bzogc8OzIGEgY29uZmlybWHDp8OjbyBkbyBwcmVlbmNoaW1lbnRvCiAgICAgICAgdmFyIHByZWVuY2hpZGFzID0gT2JqZWN0LmtleXMocmVzLnJlc3Bvc3RhcyB8fCB7fSkubGVuZ3RoOwogICAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9ImNhcmQiIHN0eWxlPSJwYWRkaW5nOjQwcHg7dGV4dC1hbGlnbjpjZW50ZXIiPicrCiAgICAgICAgICAnPGRpdiBjbGFzcz0ia2lja2VyIGNlbnRlciIgc3R5bGU9Im1hcmdpbi1ib3R0b206MTRweCI+UHJvdmEgZW52aWFkYTwvZGl2PicrCiAgICAgICAgICAnPHAgc3R5bGU9ImZvbnQtc2l6ZToxN3B4O2ZvbnQtd2VpZ2h0OjcwMDttYXJnaW4tYm90dG9tOjZweCI+U2V1IFNpbXVsYWRvIEZpbmFsIGZvaSByZWdpc3RyYWRvLjwvcD4nKwogICAgICAgICAgJzxwIHN0eWxlPSJjb2xvcjp2YXIoLS1pbmstZGltKSI+Vm9jw6ogcHJlZW5jaGV1IDxiPicrcHJlZW5jaGlkYXMrJyBkZSAnK3Jlcy50b3RhbCsnPC9iPiBxdWVzdMO1ZXMuPC9wPicrCiAgICAgICAgICAnPHAgc3R5bGU9ImNvbG9yOnZhcigtLWluay1tdXRlKTtmb250LXNpemU6MTNweDttYXJnaW4tdG9wOjE2cHgiPk8gcmVzdWx0YWRvLCBvcyBwb250b3MgZSBvIGdhYmFyaXRvIGNvbWVudGFkbyBzZXLDo28gbGliZXJhZG9zIHBhcmEgdG9kb3Mgw6BzICcrU0lNX0pBTkVMQS5mZWNoYSsnLCBhcMOzcyBvIGVuY2VycmFtZW50byBkYSBwcm92YS48L3A+JysKICAgICAgICAgICc8L2Rpdj4nOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICAvLyBKQU5FTEEgcG9yIERBVEEgKyBIT1JBIHJlYWlzIChCUlQpOiBvIGJvdMOjbyBzw7MgZGVzdHJhdmEgZW0gMDYvMDkgw6BzIDE0aAogICAgICAvLyAocGVkaWRvIGRvIElnb3IgMTIvMDgpOyBvIHNlcnZpZG9yIHJldmFsaWRhIGRlIHF1YWxxdWVyIGplaXRvLgogICAgICB2YXIgYWdvcmEgPSBEYXRlLm5vdygpLCBhYnJlVHMgPSBzaW1BYnJlVHMoKSwgZmVjaGFUcyA9IHNpbUZlY2hhVHMoKTsKICAgICAgdmFyIHByb2cgPSBDQUNIRS5zaW1Qcm9nOwogICAgICB2YXIgYWJlcnRvID0gbW9kb1ByZXZpZXcoKSB8fCAoYWdvcmEgPj0gYWJyZVRzICYmIGFnb3JhIDw9IGZlY2hhVHMpOwogICAgICB2YXIgcElzbyA9IGV2U2ltLmRhdGEuc3BsaXQoJy0nKTsKICAgICAgdmFyIGRhdGFFeHRlbnNvID0gcGFyc2VJbnQocElzb1syXSwxMCkgKyAnIGRlICcgKyBNRVNFU19GVUxMW3BhcnNlSW50KHBJc29bMV0sMTApLTFdOwogICAgICAvLyBibG9jbyBkZSBEQVRBL0hPUkEgYmVtIGNsYXJhIGUgZGVzdGFjYWRhCiAgICAgIHZhciBxdWFuZG8gPSAnPGRpdiBjbGFzcz0ic2ltLXF1YW5kbyI+JysKICAgICAgICAnPGRpdiBjbGFzcz0ic3EtaWNvIj4nK0lDT19QUk9WQSsnPC9kaXY+JysKICAgICAgICAnPGRpdiBjbGFzcz0ic3EtdHh0Ij48ZGl2IGNsYXNzPSJzcS1sYWJlbCI+UXVhbmRvIGFjb250ZWNlPC9kaXY+JysKICAgICAgICAnPGRpdiBjbGFzcz0ic3EtZGlhIj4nK2RhdGFFeHRlbnNvKyc8L2Rpdj4nKwogICAgICAgICc8ZGl2IGNsYXNzPSJzcS1ob3JhIj5kYXMgJytTSU1fSkFORUxBLmFicmUrJyDDoHMgJytTSU1fSkFORUxBLmZlY2hhKycgwrcgaG9yw6FyaW8gZGUgQnJhc8OtbGlhPC9kaXY+PC9kaXY+PC9kaXY+JzsKCiAgICAgIGlmICghbW9kb1ByZXZpZXcoKSAmJiBhZ29yYSA+IGZlY2hhVHMpIHsKICAgICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJjYXJkIGxvY2tlZC1jYXJkIj4nK3F1YW5kbysKICAgICAgICAgICc8aDMgc3R5bGU9Im1hcmdpbjoyMnB4IDAgOHB4Ij5PIHByYXpvIGRvIFNpbXVsYWRvIEZpbmFsIGVuY2Vycm91PC9oMz4nKwogICAgICAgICAgJzxwPkEgcHJvdmEgZmljb3UgZGlzcG9uw612ZWwgZW0gJytkYXRhQlIoZXZTaW0uZGF0YSkrJywgZGFzICcrU0lNX0pBTkVMQS5hYnJlKycgw6BzICcrU0lNX0pBTkVMQS5mZWNoYSsnLCBlIG7Do28gYWNlaXRhIGVudmlvIHJldHJvYXRpdm8uIEEgZGlzcHV0YSBjb250aW51YTogcHJlc2Vuw6dhIGUgcXVlc3TDtWVzIHNlZ3VlbSB2YWxlbmRvIHBvbnRvcy48L3A+PC9kaXY+JzsKICAgICAgfSBlbHNlIGlmICghYWJlcnRvKSB7CiAgICAgICAgLy8gQUlOREEgTsODTyBBQlJJVSAoYW50ZXMgZG8gZGlhIE9VIG5vIGRpYSBhbnRlcyBkYXMgMTRoKSDihpIgYm90w6NvIEJMT1FVRUFETwogICAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9ImNhcmQgbG9ja2VkLWNhcmQiPicrcXVhbmRvKwogICAgICAgICAgJzxwIHN0eWxlPSJtYXJnaW4tdG9wOjIwcHgiPk8gU2ltdWxhZG8gYWNvbnRlY2UgYXF1aSBuYSBwbGF0YWZvcm1hLCBubyBleGF0byBtb2RlbG8gZGEgcHJvdmEgb2ZpY2lhbC4gQXTDqSBsw6EsIGdhcmFudGEgYSBzdWEgcHJlc2Vuw6dhIG5hcyBhdWxhcyBlIHJlc29sdmEgYXMgcXVlc3TDtWVzLCBnYXJhbnRpbmRvIG1haXMgcG9udG9zIG5hIHN1YSBjbGFzc2lmaWNhw6fDo28uPC9wPicrCiAgICAgICAgICAnPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXIiPicrY2hpcHMrJzwvZGl2PicrCiAgICAgICAgICAnPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1hbWJlciBzaW0tYmxvcXVlYWRvIiB0eXBlPSJidXR0b24iIGRpc2FibGVkIGFyaWEtZGlzYWJsZWQ9InRydWUiPicrSUNPX0xPQ0srJyBBYnJlIGVtICcrZGF0YUJSKGV2U2ltLmRhdGEpKycsIMOgcyAnK1NJTV9KQU5FTEEuYWJyZSsnPC9idXR0b24+JysKICAgICAgICAgICc8L2Rpdj4nOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIEFCRVJUTyDihpIgYm90w6NvIGF0aXZvCiAgICAgICAgaHRtbCArPSAnPGFydGljbGUgY2xhc3M9ImNhcmQgaGVyby1taXNzYW8iIHN0eWxlPSJncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIj48ZGl2IGNsYXNzPSJobS1ib2R5IiBzdHlsZT0icGFkZGluZzozMHB4IDM0cHgiPicrCiAgICAgICAgICBxdWFuZG8rCiAgICAgICAgICAnPGgzIHN0eWxlPSJtYXJnaW4tdG9wOjE4cHgiPicrZXNjKGV2U2ltLnRpdHVsbykrJzwvaDM+JysKICAgICAgICAgIGNoaXBzKwogICAgICAgICAgJzxwIGNsYXNzPSJobS1ub3RlIj4nKyhwcm9nCiAgICAgICAgICAgID8gJ1NldSBjcm9uw7RtZXRybyBlc3TDoSByb2RhbmRvIG5vIHNlcnZpZG9yIGUgYXMgcmVzcG9zdGFzIGVzdMOjbyBzYWx2YXMuIENvbnRpbnVlIGRlIG9uZGUgcGFyb3UuJwogICAgICAgICAgICA6ICdQcm92YSDDum5pY2Egbm8gbW9kZWxvIG9maWNpYWw6ICcrY2ZnLnF1ZXN0b2VzKycgcXVlc3TDtWVzLCAnK2NmZy5kdXJhY2FvTWluKycgbWludXRvcyBjb3JyaWRvcywgZW5jZXJyYW1lbnRvIMOgcyAnK1NJTV9KQU5FTEEuZmVjaGErJyBwYXJhIHRvZG9zLiBSZXNlcnZlIG8gdGVtcG8gYW50ZXMgZGUgaW5pY2lhci4nKSsnPC9wPicrCiAgICAgICAgICAnPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1hbWJlciIgaWQ9ImJ0blByb3ZhIj4nKyhwcm9nID8gJ0NvbnRpbnVhciBzaW11bGFkbycgOiAnSXIgcGFyYSBvIHNpbXVsYWRvJykrJzwvYnV0dG9uPicrCiAgICAgICAgICAnPC9kaXY+PC9hcnRpY2xlPic7CiAgICAgIH0KICAgIH0KICAgICQoJyNtYWluJykuaW5uZXJIVE1MID0gaHRtbDsKICAgIHZhciBicCA9ICQoJyNidG5Qcm92YScpOyBpZiAoYnApIGJwLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgcmVuZGVyU2ltdWxhZG9FeGFtKTsKICAgIHZhciBiZyA9ICQoJyNidG5HYWJhcml0bycpOyBpZiAoYmcpIGJnLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgcmVuZGVyU2ltdWxhZG9HYWJhcml0byk7CiAgfQoKICBmdW5jdGlvbiByZW5kZXJTaW11bGFkb0V4YW0oKXsKICAgIHZhciBjZmcgPSBTSU1fQ0ZHW3VzZXIucHJvdmFdIHx8IFNJTV9DRkcuZW5hbWVkOwogICAgdmFyIGV2U2ltID0gai5ldmVudG9zLmZpbmQoZnVuY3Rpb24oZSl7IHJldHVybiBlLmlkID09PSBqLnNpbXVsYWRvSWQ7IH0pOwoKICAgIC8vIOKUgOKUgCBMT0JCWSAoZmFpci1wbGF5KSDilIDilIAKICAgIGlmICghQ0FDSEUuc2ltUHJvZykgewogICAgICB2YXIgaHRtbCA9ICc8ZGl2IGNsYXNzPSJwYWdlLWhlYWQiPjxkaXY+JysKICAgICAgICAnPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1naG9zdCBidG4tc20iIGlkPSJidG5Wb2x0YXIiIHN0eWxlPSJtYXJnaW4tYm90dG9tOjE2cHgiPlZvbHRhcjwvYnV0dG9uPicrCiAgICAgICAgJzxzcGFuIGNsYXNzPSJraWNrZXIiPlNpbXVsYWRvIEZpbmFsPC9zcGFuPjxoMSBzdHlsZT0iZm9udC1zaXplOjIycHgiPicrZXNjKGV2U2ltLnRpdHVsbykrJzwvaDE+PC9kaXY+PC9kaXY+JzsKICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz0iY2FyZCIgc3R5bGU9InBhZGRpbmc6MzBweCAzNHB4Ij4nKwogICAgICAgICc8ZGl2IGNsYXNzPSJraWNrZXIiIHN0eWxlPSJtYXJnaW4tYm90dG9tOjE0cHgiPkFudGVzIGRlIGNvbWXDp2FyPC9kaXY+JysKICAgICAgICAnPHVsIGNsYXNzPSJzaW0tcmVncmFzIj4nKwogICAgICAgICc8bGk+PGI+JytjZmcucXVlc3RvZXMrJyBxdWVzdMO1ZXM8L2I+IGRlIG3Dumx0aXBsYSBlc2NvbGhhIChBIGEgRCksICcrU0lNX0FSRUFTLmxlbmd0aCsnIGdyYW5kZXMgw6FyZWFzPC9saT4nKwogICAgICAgICc8bGk+PGI+JytjZmcuZHVyYWNhb01pbisnIG1pbnV0b3M8L2I+IGRlIHByb3ZhLCBzZW0gcGF1c2FyIG8gY3JvbsO0bWV0cm88L2xpPicrCiAgICAgICAgJzxsaT5BIHByb3ZhIGVuY2VycmEgw6BzIDxiPicrU0lNX0pBTkVMQS5mZWNoYSsnPC9iPiBwYXJhIHRvZG9zOiBxdWVtIGNvbWXDp2EgbWFpcyB0YXJkZSB0ZW0gbWVub3MgdGVtcG88L2xpPicrCiAgICAgICAgJzxsaT48Yj5UZW50YXRpdmEgw7puaWNhPC9iPiwgY29tIHJlc3Bvc3RhcyBzYWx2YXMgYXV0b21hdGljYW1lbnRlIG5hIHN1YSBjb250YTwvbGk+JysKICAgICAgICAnPGxpPkFvIHRlcm1pbmFyLCB2b2PDqiB2w6ogc2V1cyBhY2VydG9zOyBvIDxiPmdhYmFyaXRvIGNvbWVudGFkbzwvYj4gw6kgbGliZXJhZG8gcGFyYSB0b2RvcyBhcMOzcyBvIGVuY2VycmFtZW50bzwvbGk+JysKICAgICAgICAnPC91bD4nKwogICAgICAgICc8cCBzdHlsZT0iZm9udC1zaXplOjEzcHg7Y29sb3I6dmFyKC0taW5rLW11dGUpO2xpbmUtaGVpZ2h0OjEuNjttYXJnaW46MTZweCAwIDRweCI+QW8gaW5pY2lhciwgdm9jw6ogZGVjbGFyYSBxdWUgZmFyw6EgYSBwcm92YSA8Yj5zZW0gYXV4w61saW8gZXh0ZXJubzwvYj4gKHBlc3NvYXMsIG1hdGVyaWFpcyBvdSBpbnRlbGlnw6puY2lhIGFydGlmaWNpYWwpLiBPcyByZWdpc3Ryb3MgZGUgaW7DrWNpbywgZW52aW8gZSByZXNwb3N0YXMgc8OjbyBhdWRpdGFkb3MgcGVsYSBvcmdhbml6YcOnw6NvLCBlIGEgY29uc3RhdGHDp8OjbyBkZSBmcmF1ZGUgbGV2YSDDoCBkZXNjbGFzc2lmaWNhw6fDo28gZG8gQXRvIEZpbmFsLjwvcD4nKwogICAgICAgICc8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWFtYmVyIiBpZD0iYnRuSW5pY2lhciIgc3R5bGU9Im1hcmdpbi10b3A6MTRweCI+TGkgZSBjb25jb3JkbyDCtyBJbmljaWFyIHNpbXVsYWRvPC9idXR0b24+PC9kaXY+JzsKICAgICAgJCgnI21haW4nKS5pbm5lckhUTUwgPSBodG1sOwogICAgICAkKCcjYnRuVm9sdGFyJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCByZW5kZXJTaW11bGFkbyk7CiAgICAgICQoJyNidG5JbmljaWFyJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpewogICAgICAgIHZhciBiID0gJCgnI2J0bkluaWNpYXInKTsgYi5kaXNhYmxlZCA9IHRydWU7IGIudGV4dENvbnRlbnQgPSAnSW5pY2lhbmRv4oCmJzsKICAgICAgICBzYlJwYygnc2ltdWxhZG9faW5pY2lhcicsIHsgcF9jcGY6IENBQ0hFLnVzZXIuY3BmIH0pLnRoZW4oZnVuY3Rpb24ocil7CiAgICAgICAgICBpZiAoci5zdGF0dXMgPT09ICdvaycpIHsKICAgICAgICAgICAgQ0FDSEUuc2ltUHJvZyA9IHsgaW5pY2lhZG9fZW06IHIuaW5pY2lhZG9fZW0sIHJlc3Bvc3Rhczoge30sIG1hcmNhZGFzOiBbXSwKICAgICAgICAgICAgICBmZWNoYV90czogRGF0ZS5wYXJzZShyLmZlY2hhX3RzKSwgZHVyYWNhb19taW46IHIuZHVyYWNhb19taW4sCiAgICAgICAgICAgICAgc2tldzogRGF0ZS5wYXJzZShyLmFnb3JhKSAtIERhdGUubm93KCkgfTsKICAgICAgICAgICAgLy8gYXMgcXVlc3TDtWVzIGRvIHNpbXVsYWRvIHPDsyBmaWNhbSB2aXPDrXZlaXMgY29tIGEgamFuZWxhIGFiZXJ0YQogICAgICAgICAgICBzYlNlbGVjdCgncXVpel9xdWVzdG9lcz9zZWxlY3Q9aWQsZXZlbnRvX2lkLG9yZGVtLGFyZWEsZW51bmNpYWRvLGFsdGVybmF0aXZhcyZldmVudG9faWQ9ZXEuJytldlNpbS5pZCsnJm9yZGVyPW9yZGVtJykKICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbihxcyl7CiAgICAgICAgICAgICAgICBDQUNIRS5xdWVzdG9lc1tldlNpbS5pZF0gPSAoQXJyYXkuaXNBcnJheShxcykgPyBxcyA6IFtdKS5tYXAoZnVuY3Rpb24ocm93KXsKICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgaWQ6IHJvdy5pZCwgb3JkZW06IHJvdy5vcmRlbSwgYXJlYTogcm93LmFyZWEsIHE6IHJvdy5lbnVuY2lhZG8sIGFsdHM6IHJvdy5hbHRlcm5hdGl2YXMgfTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgcmVuZGVyU2ltdWxhZG9FeGFtKCk7CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICB9IGVsc2UgaWYgKHIuc3RhdHVzID09PSAnbmFvX2FiZXJ0bycpIHsgYi5kaXNhYmxlZCA9IGZhbHNlOyBiLnRleHRDb250ZW50ID0gJ0xpIGUgY29uY29yZG8gwrcgSW5pY2lhciBzaW11bGFkbyc7IHRvYXN0KCdBIHByb3ZhIGFicmUgw6BzICcrU0lNX0pBTkVMQS5hYnJlKycuJyk7IH0KICAgICAgICAgIGVsc2UgaWYgKHIuc3RhdHVzID09PSAnZW5jZXJyYWRvJykgeyB0b2FzdCgnQSBqYW5lbGEgZGEgcHJvdmEgasOhIGVuY2Vycm91LicpOyByZW5kZXJTaW11bGFkbygpOyB9CiAgICAgICAgICBlbHNlIGlmIChyLnN0YXR1cyA9PT0gJ2phX3Jlc3BvbmRpZG8nKSB7IGhpZHJhdGFyKCkudGhlbihyZW5kZXJTaW11bGFkbyk7IH0KICAgICAgICAgIGVsc2UgeyBiLmRpc2FibGVkID0gZmFsc2U7IGIudGV4dENvbnRlbnQgPSAnTGkgZSBjb25jb3JkbyDCtyBJbmljaWFyIHNpbXVsYWRvJzsgdG9hc3QoJ07Do28gZm9pIHBvc3PDrXZlbCBpbmljaWFyLiBUZW50ZSBub3ZhbWVudGUuJyk7IH0KICAgICAgICB9KS5jYXRjaChmdW5jdGlvbigpeyBiLmRpc2FibGVkID0gZmFsc2U7IGIudGV4dENvbnRlbnQgPSAnTGkgZSBjb25jb3JkbyDCtyBJbmljaWFyIHNpbXVsYWRvJzsgdG9hc3QoJ1NlbSBjb25leMOjby4gVGVudGUgbm92YW1lbnRlLicpOyB9KTsKICAgICAgfSk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICAvLyDilIDilIAgUFJPVkEgKGxheW91dDogY3JvbsO0bWV0cm8gZW0gZGVzdGFxdWUgbm8gdG9wbyArIG1hcGEgaG9yaXpvbnRhbCArIHF1ZXN0w6NvIGVtIHRlbGEgY2hlaWEpIOKUgOKUgAogICAgdmFyIHByb2cgPSBDQUNIRS5zaW1Qcm9nOwogICAgcHJvZy5yZXNwb3N0YXMgPSBwcm9nLnJlc3Bvc3RhcyB8fCB7fTsKICAgIHByb2cubWFyY2FkYXMgPSBwcm9nLm1hcmNhZGFzIHx8IFtdOwogICAgdmFyIHFzID0gQ0FDSEUucXVlc3RvZXNbZXZTaW0uaWRdIHx8IFtdOwogICAgaWYgKCFxcy5sZW5ndGgpIHsKICAgICAgc2JTZWxlY3QoJ3F1aXpfcXVlc3RvZXM\/c2VsZWN0PWlkLGV2ZW50b19pZCxvcmRlbSxhcmVhLGVudW5jaWFkbyxhbHRlcm5hdGl2YXMmZXZlbnRvX2lkPWVxLicrZXZTaW0uaWQrJyZvcmRlcj1vcmRlbScpCiAgICAgICAgLnRoZW4oZnVuY3Rpb24ocm93cyl7CiAgICAgICAgICBDQUNIRS5xdWVzdG9lc1tldlNpbS5pZF0gPSAoQXJyYXkuaXNBcnJheShyb3dzKSA\/IHJvd3MgOiBbXSkubWFwKGZ1bmN0aW9uKHJvdyl7CiAgICAgICAgICAgIHJldHVybiB7IGlkOiByb3cuaWQsIG9yZGVtOiByb3cub3JkZW0sIGFyZWE6IHJvdy5hcmVhLCBxOiByb3cuZW51bmNpYWRvLCBhbHRzOiByb3cuYWx0ZXJuYXRpdmFzIH07CiAgICAgICAgICB9KTsKICAgICAgICAgIHJlbmRlclNpbXVsYWRvRXhhbSgpOwogICAgICAgIH0pOwogICAgICAkKCcjbWFpbicpLmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPSJjYXJkIiBzdHlsZT0icGFkZGluZzo0MHB4O3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOnZhcigtLWluay1kaW0pIj5DYXJyZWdhbmRvIGEgcHJvdmHigKY8L2Rpdj4nOwogICAgICByZXR1cm47CiAgICB9CiAgICB2YXIgYXR1YWwgPSAwOwogICAgdmFyIHNrZXcgPSBwcm9nLnNrZXcgfHwgMDsKICAgIHZhciBpbmlUcyA9IERhdGUucGFyc2UocHJvZy5pbmljaWFkb19lbSk7CiAgICB2YXIgZmVjaGFUcyA9IHByb2cuZmVjaGFfdHMgfHwgc2ltRmVjaGFUcygpOwogICAgdmFyIGR1ck1pbiA9IHByb2cuZHVyYWNhb19taW4gfHwgY2ZnLmR1cmFjYW9NaW47CiAgICB2YXIgZmltID0gTWF0aC5taW4oaW5pVHMgKyBkdXJNaW4gKiA2MDAwMCwgZmVjaGFUcyAtIDYwMDAwKSAtIHNrZXc7CgogICAgdmFyIGh0bWwyID0gJzxkaXYgaWQ9InByb3ZhQm94Ij4nKwogICAgICAnPGRpdiBjbGFzcz0iY2FyZCBwcm92YS10b3BvIj4nKwogICAgICAnPGRpdj48ZGl2IGNsYXNzPSJwdC10aW1lciIgaWQ9InNpbVRpbWVyIj4tLTotLTwvZGl2PicrCiAgICAgICc8ZGl2IGNsYXNzPSJwdC1yb3R1bG8iPlRlbXBvIHJlc3RhbnRlPC9kaXY+PC9kaXY+JysKICAgICAgJzxkaXYgY2xhc3M9InB0LW1ldGEiIGlkPSJzaW1NZXRhIj48L2Rpdj4nKwogICAgICAnPGRpdiBjbGFzcz0icHQtYWNvZXMiPjxidXR0b24gY2xhc3M9ImJ0biBidG4tZ2hvc3QgYnRuLXNtIiBpZD0iYnRuTWFwYSI+TWFwYSBkZSBxdWVzdMO1ZXM8L2J1dHRvbj48c3BhbiBpZD0ic2ltQWNvZXMiIHN0eWxlPSJkaXNwbGF5OmlubGluZS1mbGV4O2dhcDoxMHB4O2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4LXdyYXA6d3JhcCI+PC9zcGFuPjwvZGl2PicrCiAgICAgICc8L2Rpdj4nKwogICAgICAnPGRpdiBjbGFzcz0iY2FyZCBxdWl6LWJveCIgc3R5bGU9InBhZGRpbmc6MjRweCAyOHB4Ij4nKwogICAgICAnPGRpdiBjbGFzcz0icHJvdmEtbWFwYSIgaWQ9InFtYXAiPicrcXMubWFwKGZ1bmN0aW9uKF8sIGkpeyByZXR1cm4gJzxidXR0b24gdHlwZT0iYnV0dG9uIiBkYXRhLWk9IicraSsnIj4nKyhpKzEpKyc8L2J1dHRvbj4nOyB9KS5qb2luKCcnKSsnPC9kaXY+JysKICAgICAgJzxkaXYgaWQ9InFBcmVhIj48L2Rpdj48L2Rpdj48L2Rpdj4nOwogICAgJCgnI21haW4nKS5pbm5lckhUTUwgPSBodG1sMjsKCiAgICBsaWdhckd1YXJkYVByb3ZhKCk7CiAgICB2YXIgYm94ID0gJCgnI3Byb3ZhQm94Jyk7CiAgICBib3guY2xhc3NMaXN0LmFkZCgncHJvdmEtcHJvdGVnaWRhJyk7CiAgICBbJ2NvcHknLCdjdXQnLCdjb250ZXh0bWVudSddLmZvckVhY2goZnVuY3Rpb24oZXZOYW1lKXsKICAgICAgYm94LmFkZEV2ZW50TGlzdGVuZXIoZXZOYW1lLCBmdW5jdGlvbihlKXsgZS5wcmV2ZW50RGVmYXVsdCgpOyB9KTsKICAgIH0pOwoKICAgIGZ1bmN0aW9uIG1hcGFBYmVydG8oKXsgcmV0dXJuICQoJyNxbWFwJykuY2xhc3NMaXN0LmNvbnRhaW5zKCdhYmVydG8nKTsgfQogICAgZnVuY3Rpb24gYWx0ZXJuYU1hcGEoZm9yY2FyKXsKICAgICAgdmFyIG0gPSAkKCcjcW1hcCcpOwogICAgICB2YXIgYWJyaXIgPSBmb3JjYXIgPT09IHRydWUgPyB0cnVlIDogZm9yY2FyID09PSBmYWxzZSA\/IGZhbHNlIDogIW1hcGFBYmVydG8oKTsKICAgICAgbS5jbGFzc0xpc3QudG9nZ2xlKCdhYmVydG8nLCBhYnJpcik7CiAgICAgICQoJyNidG5NYXBhJykuY2xhc3NMaXN0LnRvZ2dsZSgnbWFyYy1vbicsIGFicmlyKTsKICAgIH0KICAgICQoJyNidG5NYXBhJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpeyBhbHRlcm5hTWFwYSgpOyB9KTsKCiAgICB2YXIgc2FsdmFyVCA9IG51bGw7CiAgICBmdW5jdGlvbiBzYWx2YXJSZW1vdG8oKXsKICAgICAgY2xlYXJUaW1lb3V0KHNhbHZhclQpOwogICAgICBzYWx2YXJUID0gc2V0VGltZW91dChmdW5jdGlvbigpewogICAgICAgIHNiUnBjKCdzaW11bGFkb19zYWx2YXInLCB7IHBfY3BmOiBDQUNIRS51c2VyLmNwZiwKICAgICAgICAgIHBfcmVzcG9zdGFzOiBwcm9nLnJlc3Bvc3RhcywgcF9tYXJjYWRhczogcHJvZy5tYXJjYWRhcyB9KS5jYXRjaChmdW5jdGlvbigpe30pOwogICAgICB9LCA4MDApOwogICAgfQogICAgZnVuY3Rpb24gcmVzcG9uZGlkYXMoKXsgcmV0dXJuIE9iamVjdC5rZXlzKHByb2cucmVzcG9zdGFzKS5sZW5ndGg7IH0KICAgIGZ1bmN0aW9uIG1hcmNhZGEoaSl7IHJldHVybiBwcm9nLm1hcmNhZGFzLmluZGV4T2YocXNbaV0uaWQpID4gLTE7IH0KCiAgICAvLyBzYWx0YSBwcmEgcHLDs3hpbWEgcXVlc3TDo28gZG8gdGlwbyAoZW0gYnJhbmNvIC8gbWFyY2FkYSksIGNpcmN1bGFyIGEgcGFydGlyIGRhIGF0dWFsCiAgICBmdW5jdGlvbiBzYWx0YVBhcmEodGlwbyl7CiAgICAgIGZvciAodmFyIGsgPSAxOyBrIDw9IHFzLmxlbmd0aDsgaysrKSB7CiAgICAgICAgdmFyIGkyID0gKGF0dWFsICsgaykgJSBxcy5sZW5ndGg7CiAgICAgICAgaWYgKHRpcG8gPT09ICdicmFuY28nICYmIHByb2cucmVzcG9zdGFzW3FzW2kyXS5pZF0gPT09IHVuZGVmaW5lZCkgcmV0dXJuIG1vc3RyYVF1ZXN0YW8oaTIpOwogICAgICAgIGlmICh0aXBvID09PSAnbWFyY2FkYScgJiYgbWFyY2FkYShpMikpIHJldHVybiBtb3N0cmFRdWVzdGFvKGkyKTsKICAgICAgfQogICAgICB0b2FzdCh0aXBvID09PSAnYnJhbmNvJyA\/ICdOZW5odW1hIHF1ZXN0w6NvIGVtIGJyYW5jby4nIDogJ05lbmh1bWEgcXVlc3TDo28gbWFyY2FkYS4nKTsKICAgIH0KCiAgICBmdW5jdGlvbiBwaW50YU1hcGEoKXsKICAgICAgJCQoJyNxbWFwIGJ1dHRvbicpLmZvckVhY2goZnVuY3Rpb24oYil7CiAgICAgICAgdmFyIGkgPSArYi5kYXRhc2V0Lmk7CiAgICAgICAgYi5jbGFzc05hbWUgPSAocHJvZy5yZXNwb3N0YXNbcXNbaV0uaWRdICE9PSB1bmRlZmluZWQgPyAncmVzcG9uZGlkYScgOiAnJykgKwogICAgICAgICAgKGkgPT09IGF0dWFsID8gJyBhdHVhbCcgOiAnJykgKyAobWFyY2FkYShpKSA\/ICcgbWFyY2FkYScgOiAnJyk7CiAgICAgIH0pOwogICAgICB2YXIgZW1CcmFuY28gPSBxcy5sZW5ndGggLSByZXNwb25kaWRhcygpOwogICAgICAkKCcjc2ltTWV0YScpLmlubmVySFRNTCA9ICc8Yj4nK3Jlc3BvbmRpZGFzKCkrJzwvYj4gZGUgJytxcy5sZW5ndGgrCiAgICAgICAgKGVtQnJhbmNvID8gJyDCtyA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9InB0LXNhbHRvIiBpZD0ic2FsdG9CcmFuY28iIHRpdGxlPSJJciBwYXJhIGEgcHLDs3hpbWEgZW0gYnJhbmNvIj4nK2VtQnJhbmNvKycgZW0gYnJhbmNvPC9idXR0b24+JyA6ICcgwrcgdHVkbyByZXNwb25kaWRvJykrCiAgICAgICAgKHByb2cubWFyY2FkYXMubGVuZ3RoID8gJyA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9InB0LXNhbHRvIGF6dWwiIGlkPSJzYWx0b01hcmNhZGEiIHRpdGxlPSJJciBwYXJhIGEgcHLDs3hpbWEgbWFyY2FkYSI+Jytwcm9nLm1hcmNhZGFzLmxlbmd0aCsnIG1hcmNhZGEnKyhwcm9nLm1hcmNhZGFzLmxlbmd0aD4xPydzJzonJykrJzwvYnV0dG9uPicgOiAnJyk7CiAgICAgIHZhciBzYiA9ICQoJyNzYWx0b0JyYW5jbycpOyBpZiAoc2IpIHNiLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXsgc2FsdGFQYXJhKCdicmFuY28nKTsgfSk7CiAgICAgIHZhciBzbSA9ICQoJyNzYWx0b01hcmNhZGEnKTsgaWYgKHNtKSBzbS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCl7IHNhbHRhUGFyYSgnbWFyY2FkYScpOyB9KTsKICAgIH0KCiAgICB2YXIgZmluYWxpemFuZG8gPSBmYWxzZTsKICAgIGZ1bmN0aW9uIGZpbmFsaXphcigpewogICAgICBpZiAoZmluYWxpemFuZG8pIHJldHVybjsKICAgICAgZmluYWxpemFuZG8gPSB0cnVlOwogICAgICBjbGVhckludGVydmFsKHRpbWVyKTsKICAgICAgY2xlYXJUaW1lb3V0KHNhbHZhclQpOwogICAgICBzYlJwYygnc2ltdWxhZG9fc2FsdmFyJywgeyBwX2NwZjogQ0FDSEUudXNlci5jcGYsIHBfcmVzcG9zdGFzOiBwcm9nLnJlc3Bvc3RhcywgcF9tYXJjYWRhczogcHJvZy5tYXJjYWRhcyB9KQogICAgICAgIC50aGVuKGZ1bmN0aW9uKCl7IHJldHVybiBzYlJwYygnc2ltdWxhZG9fZmluYWxpemFyJywgeyBwX2NwZjogQ0FDSEUudXNlci5jcGYgfSk7IH0pCiAgICAgICAgLnRoZW4oZnVuY3Rpb24ocil7CiAgICAgICAgICBpZiAoci5zdGF0dXMgPT09ICdvaycgfHwgci5zdGF0dXMgPT09ICdqYV9yZXNwb25kaWRvJykgewogICAgICAgICAgICBkZXNsaWdhckd1YXJkYVByb3ZhKCk7CiAgICAgICAgICAgIHRvYXN0KHIuc3RhdHVzICE9PSAnb2snID8gJ1NpbXVsYWRvIGrDoSByZWdpc3RyYWRvLicKICAgICAgICAgICAgICA6IChyLmdhYmFyaXRvX2xpYmVyYWRvID8gJ1NpbXVsYWRvIGVudmlhZG86ICcrci5hY2VydG9zKycvJytyLnRvdGFsKycgYWNlcnRvcy4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdQcm92YSBlbnZpYWRhISBSZXN1bHRhZG8gZSBnYWJhcml0byBzYWVtIMOgcyAnK1NJTV9KQU5FTEEuZmVjaGErJy4nKSk7CiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXsgbG9jYXRpb24ucmVsb2FkKCk7IH0sIDkwMCk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIGZpbmFsaXphbmRvID0gZmFsc2U7CiAgICAgICAgICB0b2FzdCgnTsOjbyBmb2kgcG9zc8OtdmVsIGVudmlhciAoJytyLnN0YXR1cysnKS4gVGVudGUgZGUgbm92by4nKTsKICAgICAgICAgIHBpbnRhQWNvZXMoZmFsc2UpOwogICAgICAgIH0pCiAgICAgICAgLmNhdGNoKGZ1bmN0aW9uKCl7IGZpbmFsaXphbmRvID0gZmFsc2U7IHRvYXN0KCdTZW0gY29uZXjDo28uIFRlbnRlIGVudmlhciBkZSBub3ZvLicpOyBwaW50YUFjb2VzKGZhbHNlKTsgfSk7CiAgICB9CgogICAgZnVuY3Rpb24gcGludGFBY29lcyhjb25maXJtYW5kbyl7CiAgICAgIHZhciBlbCA9ICQoJyNzaW1BY29lcycpOwogICAgICBpZiAoY29uZmlybWFuZG8pIHsKICAgICAgICBhbHRlcm5hTWFwYSh0cnVlKTsgIC8vIHJldmlzw6NvOiBtYXBhIMOpIGluZGlzcGVuc8OhdmVsIGFxdWkKICAgICAgICB2YXIgZW1CcmFuY28gPSBxcy5sZW5ndGggLSByZXNwb25kaWRhcygpOwogICAgICAgIGVsLmlubmVySFRNTCA9ICc8c3BhbiBjbGFzcz0icHQtY29uZmlybSI+JysKICAgICAgICAgIChlbUJyYW5jbyA+IDAgPyAnPGI+JytlbUJyYW5jbysnIGVtIGJyYW5jbzwvYj4uIEZpbmFsaXphcj8nIDogJ1R1ZG8gcmVzcG9uZGlkby4gRmluYWxpemFyPycpKyc8L3NwYW4+JysKICAgICAgICAgICc8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWFtYmVyIGJ0bi1zbSIgaWQ9ImJ0bkZpbVNpbSI+U2ltLCBmaW5hbGl6YXI8L2J1dHRvbj4nKwogICAgICAgICAgJzxidXR0b24gY2xhc3M9ImJ0biBidG4tZ2hvc3QgYnRuLXNtIiBpZD0iYnRuQ29udGludWEiPkNvbnRpbnVhcjwvYnV0dG9uPic7CiAgICAgICAgJCgnI2J0bkZpbVNpbScpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZmluYWxpemFyKTsKICAgICAgICAkKCcjYnRuQ29udGludWEnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCl7IHBpbnRhQWNvZXMoZmFsc2UpOyB9KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBlbC5pbm5lckhUTUwgPSAnPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1naG9zdCBidG4tc20iIGlkPSJidG5QZWRpckZpbSI+RmluYWxpemFyIHNpbXVsYWRvPC9idXR0b24+JzsKICAgICAgICAkKCcjYnRuUGVkaXJGaW0nKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCl7IHBpbnRhQWNvZXModHJ1ZSk7IH0pOwogICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gbW9zdHJhUXVlc3RhbyhpKXsKICAgICAgYXR1YWwgPSBpOwogICAgICB2YXIgcSA9IHFzW2ldOwogICAgICB2YXIgbSA9IG1hcmNhZGEoaSk7CiAgICAgICQoJyNxQXJlYScpLmlubmVySFRNTCA9CiAgICAgICAgKHEuYXJlYSA\/ICc8ZGl2IGNsYXNzPSJwcm92YS1hcmVhIj4nK2VzYyhxLmFyZWEpKyc8L2Rpdj4nIDogJycpKwogICAgICAgICc8ZGl2IGNsYXNzPSJxaGVhZCIgc3R5bGU9ImZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjgwMDtsZXR0ZXItc3BhY2luZzouMThlbTtjb2xvcjp2YXIoLS1hbWJlcik7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO21hcmdpbi1ib3R0b206MTBweCI+UXVlc3TDo28gJysoaSsxKSsnIGRlICcrcXMubGVuZ3RoKyc8L2Rpdj4nKwogICAgICAgICc8cCBjbGFzcz0iZW51biIgc3R5bGU9ImZvbnQtc2l6ZToxNXB4O21hcmdpbi1ib3R0b206MTRweDt3aGl0ZS1zcGFjZTpwcmUtd3JhcCI+JyttaWRpYUhUTUwocS5xKSsnPC9wPicrCiAgICAgICAgJzxkaXYgY2xhc3M9InF1aXotb3B0cyBtdWx0Ij4nK3EuYWx0cy5tYXAoZnVuY3Rpb24oYSl7CiAgICAgICAgICByZXR1cm4gJzxidXR0b24gdHlwZT0iYnV0dG9uIiBkYXRhLXY9IicrYS5sKyciIGNsYXNzPSInKyhwcm9nLnJlc3Bvc3Rhc1txLmlkXSA9PT0gYS5sID8gJ3NlbCcgOiAnJykrJyI+PGIgY2xhc3M9Imx0Ij4nK2EubCsnPC9iPjxzcGFuPicrZXNjKGEudCkrJzwvc3Bhbj48L2J1dHRvbj4nOwogICAgICAgIH0pLmpvaW4oJycpKyc8L2Rpdj4nKwogICAgICAgICc8ZGl2IGNsYXNzPSJwcm92YS1uYXYiPicrCiAgICAgICAgJzxidXR0b24gY2xhc3M9ImJ0biBidG4tZ2hvc3QgYnRuLXNtIiBpZD0icUFudCIgJysoaSA9PT0gMCA\/ICdkaXNhYmxlZCcgOiAnJykrJz5BbnRlcmlvcjwvYnV0dG9uPicrCiAgICAgICAgJzxidXR0b24gY2xhc3M9ImJ0biBidG4tZ2hvc3QgYnRuLXNtICcrKG0gPyAnbWFyYy1vbicgOiAnJykrJyIgaWQ9InFNYXJjYSI+JysobSA\/ICdNYXJjYWRhIHBhcmEgcmV2aXNhcicgOiAnTWFyY2FyIHBhcmEgcmV2aXNhcicpKyc8L2J1dHRvbj4nKwogICAgICAgICc8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWdob3N0IGJ0bi1zbSIgaWQ9InFQcm94IiAnKyhpID09PSBxcy5sZW5ndGgtMSA\/ICdkaXNhYmxlZCcgOiAnJykrJz5QcsOzeGltYTwvYnV0dG9uPicrCiAgICAgICAgJzwvZGl2Pic7CiAgICAgICQkKCcjcUFyZWEgLnF1aXotb3B0cyBidXR0b24nKS5mb3JFYWNoKGZ1bmN0aW9uKGIpewogICAgICAgIGIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpewogICAgICAgICAgcHJvZy5yZXNwb3N0YXNbcS5pZF0gPSBiLmRhdGFzZXQudjsKICAgICAgICAgIHNhbHZhclJlbW90bygpOwogICAgICAgICAgJCQoJyNxQXJlYSAucXVpei1vcHRzIGJ1dHRvbicpLmZvckVhY2goZnVuY3Rpb24oeCl7IHguY2xhc3NMaXN0LnRvZ2dsZSgnc2VsJywgeCA9PT0gYik7IH0pOwogICAgICAgICAgcGludGFNYXBhKCk7CiAgICAgICAgfSk7CiAgICAgIH0pOwogICAgICAkKCcjcUFudCcpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXsgaWYgKGF0dWFsID4gMCkgbW9zdHJhUXVlc3RhbyhhdHVhbC0xKTsgfSk7CiAgICAgICQoJyNxUHJveCcpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXsgaWYgKGF0dWFsIDwgcXMubGVuZ3RoLTEpIG1vc3RyYVF1ZXN0YW8oYXR1YWwrMSk7IH0pOwogICAgICAkKCcjcU1hcmNhJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpewogICAgICAgIHZhciBpeCA9IHByb2cubWFyY2FkYXMuaW5kZXhPZihxLmlkKTsKICAgICAgICBpZiAoaXggPiAtMSkgcHJvZy5tYXJjYWRhcy5zcGxpY2UoaXgsIDEpOyBlbHNlIHByb2cubWFyY2FkYXMucHVzaChxLmlkKTsKICAgICAgICBzYWx2YXJSZW1vdG8oKTsgbW9zdHJhUXVlc3RhbyhpKTsKICAgICAgfSk7CiAgICAgIHBpbnRhTWFwYSgpOwogICAgfQoKICAgIHZhciB0aW1lciA9IHNldEludGVydmFsKHRpY2ssIDEwMDApOwogICAgZnVuY3Rpb24gdGljaygpewogICAgICB2YXIgZWwgPSAkKCcjc2ltVGltZXInKTsKICAgICAgaWYgKCFlbCkgeyBjbGVhckludGVydmFsKHRpbWVyKTsgcmV0dXJuOyB9CiAgICAgIHZhciBzID0gTWF0aC5tYXgoMCwgTWF0aC5yb3VuZCgoZmltIC0gRGF0ZS5ub3coKSkgLyAxMDAwKSk7CiAgICAgIHZhciBoID0gTWF0aC5mbG9vcihzLzM2MDApLCBtMiA9IE1hdGguZmxvb3IoKHMlMzYwMCkvNjApLCBzZWcgPSBzJTYwOwogICAgICBlbC50ZXh0Q29udGVudCA9IChoPjAgPyBTdHJpbmcoaCkucGFkU3RhcnQoMiwnMCcpKyc6JyA6ICcnKSArIFN0cmluZyhtMikucGFkU3RhcnQoMiwnMCcpKyc6JytTdHJpbmcoc2VnKS5wYWRTdGFydCgyLCcwJyk7CiAgICAgIGVsLmNsYXNzTGlzdC50b2dnbGUoJ3VyZ2VudGUnLCBzIDw9IDYwKTsKICAgICAgaWYgKHMgPD0gMCkgZmluYWxpemFyKCk7CiAgICB9CgogICAgcGludGFBY29lcyhmYWxzZSk7CiAgICBtb3N0cmFRdWVzdGFvKDApOwogICAgdGljaygpOwogICAgJCQoJyNxbWFwIGJ1dHRvbicpLmZvckVhY2goZnVuY3Rpb24oYil7CiAgICAgIGIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpeyBtb3N0cmFRdWVzdGFvKCtiLmRhdGFzZXQuaSk7IH0pOwogICAgfSk7CiAgfQoKICAvLyBHYWJhcml0byBjb21lbnRhZG8gZG8gc2ltdWxhZG86IG8gc2Vydmlkb3IgU8OTIGVudHJlZ2EgYXDDs3MgbyBlbmNlcnJhbWVudG8KICBmdW5jdGlvbiByZW5kZXJTaW11bGFkb0dhYmFyaXRvKCl7CiAgICB2YXIgZXZTaW0gPSBqLmV2ZW50b3MuZmluZChmdW5jdGlvbihlKXsgcmV0dXJuIGUuaWQgPT09IGouc2ltdWxhZG9JZDsgfSk7CiAgICAkKCcjbWFpbicpLmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPSJjYXJkIiBzdHlsZT0icGFkZGluZzo0MHB4O3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOnZhcigtLWluay1kaW0pIj5DYXJyZWdhbmRvIG8gZ2FiYXJpdG\/igKY8L2Rpdj4nOwogICAgc2JScGMoJ3NpbXVsYWRvX2dhYmFyaXRvJywgeyBwX2NwZjogQ0FDSEUudXNlci5jcGYgfSkudGhlbihmdW5jdGlvbihnKXsKICAgICAgaWYgKGcuc3RhdHVzICE9PSAnb2snKSB7IHRvYXN0KCdPIGdhYmFyaXRvIMOpIGxpYmVyYWRvIGFww7NzIG8gZW5jZXJyYW1lbnRvLicpOyByZW5kZXJTaW11bGFkbygpOyByZXR1cm47IH0KICAgICAgdmFyIHFzID0gQ0FDSEUucXVlc3RvZXNbZXZTaW0uaWRdIHx8IFtdOwogICAgICB2YXIgcmVzID0gQ0FDSEUuc2ltUmVzIHx8IHsgcmVzcG9zdGFzOiB7fSB9OwogICAgICB2YXIgcG9ySWQgPSB7fTsKICAgICAgKGcuaXRlbnMgfHwgW10pLmZvckVhY2goZnVuY3Rpb24oaXQpeyBwb3JJZFtpdC5xdWVzdGFvX2lkXSA9IGl0OyB9KTsKICAgICAgZnVuY3Rpb24gcGludGEoKXsKICAgICAgICB2YXIgaHRtbCA9ICc8ZGl2IGNsYXNzPSJwYWdlLWhlYWQiPjxkaXY+JysKICAgICAgICAgICc8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWdob3N0IGJ0bi1zbSIgaWQ9ImJ0blZvbHRhciIgc3R5bGU9Im1hcmdpbi1ib3R0b206MTZweCI+Vm9sdGFyIGFvIFNpbXVsYWRvPC9idXR0b24+JysKICAgICAgICAgICc8c3BhbiBjbGFzcz0ia2lja2VyIj5HYWJhcml0byBjb21lbnRhZG88L3NwYW4+PGgxIHN0eWxlPSJmb250LXNpemU6MjJweCI+Jytlc2MoZXZTaW0udGl0dWxvKSsnPC9oMT4nKwogICAgICAgICAgKENBQ0hFLnNpbVJlcyA\/ICc8cCBjbGFzcz0iZGVzYyI+Vm9jw6ogZmV6IDxiPicrQ0FDSEUuc2ltUmVzLmFjZXJ0b3MrJyBkZSAnK0NBQ0hFLnNpbVJlcy50b3RhbCsnPC9iPi4gTyBnYWJhcml0byBlc3TDoSBlbSB2ZXJkZTsgb25kZSB2b2PDqiBlcnJvdSwgYSBzdWEgbWFyY2HDp8OjbyBhcGFyZWNlIGVtIHZlcm1lbGhvLjwvcD4nIDogJycpKwogICAgICAgICAgJzwvZGl2PjwvZGl2Pic7CiAgICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz0iY2FyZCBxdWl6LWJveCI+JzsKICAgICAgICBxcy5mb3JFYWNoKGZ1bmN0aW9uKHEsIGkpewogICAgICAgICAgdmFyIGl0ID0gcG9ySWRbcS5pZF0gfHwge307CiAgICAgICAgICB2YXIgbWluaGEgPSAocmVzLnJlc3Bvc3RhcyB8fCB7fSlbcS5pZF07CiAgICAgICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJxdWl6LXEiPicrKHEuYXJlYSA\/ICc8ZGl2IGNsYXNzPSJwcm92YS1hcmVhIj4nK2VzYyhxLmFyZWEpKyc8L2Rpdj4nIDogJycpKwogICAgICAgICAgICAnPGRpdiBjbGFzcz0icWhlYWQiPlF1ZXN0w6NvICcrKGkrMSkrJyBkZSAnK3FzLmxlbmd0aCsnPC9kaXY+JysKICAgICAgICAgICAgJzxwIGNsYXNzPSJlbnVuIj4nK21pZGlhSFRNTChxLnEpKyc8L3A+JysKICAgICAgICAgICAgJzxkaXYgY2xhc3M9InF1aXotb3B0cyBtdWx0Ij4nK3EuYWx0cy5tYXAoZnVuY3Rpb24oYSl7CiAgICAgICAgICAgICAgdmFyIGNscyA9IGEubCA9PT0gaXQuY29ycmV0YSA\/ICdoaXQnIDogKG1pbmhhID09PSBhLmwgPyAnZXJyYWRvJyA6ICcnKTsKICAgICAgICAgICAgICByZXR1cm4gJzxidXR0b24gdHlwZT0iYnV0dG9uIiBkaXNhYmxlZCBjbGFzcz0iJytjbHMrJyI+PGIgY2xhc3M9Imx0Ij4nK2EubCsnPC9iPjxzcGFuPicrZXNjKGEudCkrJzwvc3Bhbj48L2J1dHRvbj4nOwogICAgICAgICAgICB9KS5qb2luKCcnKSsnPC9kaXY+JysKICAgICAgICAgICAgKGl0LmNvbWVudGFyaW8gPyAnPGRldGFpbHMgY2xhc3M9InF1aXotY29tZW50Ij48c3VtbWFyeT5WZXIgY29tZW50w6FyaW88L3N1bW1hcnk+PGRpdiBjbGFzcz0iY2JvZHkiPicrbWlkaWFIVE1MKGl0LmNvbWVudGFyaW8pKyc8L2Rpdj48L2RldGFpbHM+JyA6ICcnKSsKICAgICAgICAgICAgJzwvZGl2Pic7CiAgICAgICAgfSk7CiAgICAgICAgaHRtbCArPSAnPC9kaXY+JzsKICAgICAgICAkKCcjbWFpbicpLmlubmVySFRNTCA9IGh0bWw7CiAgICAgICAgJCgnI2J0blZvbHRhcicpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgcmVuZGVyU2ltdWxhZG8pOwogICAgICB9CiAgICAgIGlmICghcXMubGVuZ3RoKSB7CiAgICAgICAgc2JTZWxlY3QoJ3F1aXpfcXVlc3RvZXM\/c2VsZWN0PWlkLGV2ZW50b19pZCxvcmRlbSxhcmVhLGVudW5jaWFkbyxhbHRlcm5hdGl2YXMmZXZlbnRvX2lkPWVxLicrZXZTaW0uaWQrJyZvcmRlcj1vcmRlbScpCiAgICAgICAgICAudGhlbihmdW5jdGlvbihyb3dzKXsKICAgICAgICAgICAgQ0FDSEUucXVlc3RvZXNbZXZTaW0uaWRdID0gcXMgPSAoQXJyYXkuaXNBcnJheShyb3dzKSA\/IHJvd3MgOiBbXSkubWFwKGZ1bmN0aW9uKHJvdyl7CiAgICAgICAgICAgICAgcmV0dXJuIHsgaWQ6IHJvdy5pZCwgb3JkZW06IHJvdy5vcmRlbSwgYXJlYTogcm93LmFyZWEsIHE6IHJvdy5lbnVuY2lhZG8sIGFsdHM6IHJvdy5hbHRlcm5hdGl2YXMgfTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHBpbnRhKCk7CiAgICAgICAgICB9KTsKICAgICAgfSBlbHNlIHBpbnRhKCk7CiAgICB9KTsKICB9CgogIC8qIC0tLS0tLS0tLS0gUkFOS0lORyAtLS0tLS0tLS0tICovCiAgZnVuY3Rpb24gcmVuZGVyUmFua2luZygpewogICAgdmFyIHAgPSBjYWxjUG9udG9zKHVzZXIpOwogICAgdmFyIGh0bWwgPSBwYWdlSGVhZCgnQ2xhc3NpZmljYcOnw6NvIGdlcmFsIMK3ICcgKyBqLmxpZ2EsICdTdWEgcG9zacOnw6NvIG5hIGNsYXNzaWZpY2HDp8OjbycsCiAgICAgICdTdWEgUE9TScOHw4NPIMOpIGEgc3VhIHBvbnR1YcOnw6NvIHRvdGFsOiBqb3JuYWRhIGRlIGVzdHVkbyAoYXTDqSAyLjAwMDogcHJlc2Vuw6dhLCBxdWVzdMO1ZXMgZSBTaW11bGFkbykgKyBpbmRpY2HDp8O1ZXMgKHNlbSB0ZXRvKSwgdHVkbyBzb21hZG8uIEVtcGF0ZT8gTWFpb3Igbm90YSBubyBTaW11bGFkbywgZGVwb2lzIGFjZXJ0b3MgbmFzIHF1ZXN0w7VlcyBlIGNoZWNrLWluIG1haXMgY2Vkby4nLAogICAgICAnQ2xhc3NpZmljYcOnw6NvIGFvIHZpdm8nKTsKICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9ImNhcmQiIHN0eWxlPSJwYWRkaW5nOjQwcHg7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6dmFyKC0taW5rLWRpbSkiIGlkPSJya0xvYWQiPkNhcnJlZ2FuZG8gbyByYW5raW5n4oCmPC9kaXY+JzsKICAgICQoJyNtYWluJykuaW5uZXJIVE1MID0gaHRtbDsKCiAgICAvLyBQUk9EVcOHw4NPOiBwb3Npw6fDo28gZSBwbGFjYXIgdsOqbSBkbyBzZXJ2aWRvciAocmFua2luZ19nZXJhbCksIGNvbSBhCiAgICAvLyBjYXNjYXRhIGRlIGRlc2VtcGF0ZSBlIG5vbWVzIGFicmV2aWFkb3Mgc2VtIFBJSQogICAgc2JScGMoJ3JhbmtpbmdfZ2VyYWwnLCB7IHBfY3BmOiBDQUNIRS51c2VyLmNwZiB9KS50aGVuKGZ1bmN0aW9uKHIpewogICAgICBpZiAoIXIgfHwgci5zdGF0dXMgIT09ICdvaycpIHsgJCgnI3JrTG9hZCcpLnRleHRDb250ZW50ID0gJ07Do28gZm9pIHBvc3PDrXZlbCBjYXJyZWdhciBvIHJhbmtpbmcgYWdvcmEuJzsgcmV0dXJuOyB9CiAgICAgIHZhciBwcmVUZW1wb3JhZGEgPSBob2plLmlzbyA8IGouaW5pY2lvOwogICAgICB2YXIgbXAgPSByLm1ldXNfcG9udG9zIHx8IHsgcHJlczogMCwgcXVlc3Q6IDAsIHNpbTogMCwgaW5kOiAwLCBlc3R1ZG86IDAsIHRvdGFsOiAwIH07CiAgICAgIHZhciBlc3R1ZG8gPSAobXAuZXN0dWRvICE9IG51bGwpID8gbXAuZXN0dWRvIDogKG1wLnByZXMgKyBtcC5xdWVzdCArIG1wLnNpbSk7CiAgICAgIHZhciB0b3RhbCA9IChtcC50b3RhbCAhPSBudWxsKSA\/IG1wLnRvdGFsIDogKGVzdHVkbyArIChtcC5pbmQgfHwgMCkpOwogICAgICAvLyBhIFBPU0nDh8ODTyBubyByYW5raW5nIMOpIGRlY2lkaWRhIHBlbGEgcG9udHVhw6fDo28gVE9UQUw6IGpvcm5hZGEgZGUgZXN0dWRvCiAgICAgIC8vIChhdMOpIDIuMDAwKSArIGluZGljYcOnw7VlcyAoc2VtIHRldG8pLiBEZWNpc8OjbyBkbyBJZ29yIDExLzA4LgogICAgICB2YXIgb3V0ID0gJzxkaXYgY2xhc3M9ImNhcmQgcG9zLWNhcmQiPjxkaXY+PGRpdiBjbGFzcz0icG9zIj4nKyhwcmVUZW1wb3JhZGEgPyAnwrcnIDogci5taW5oYV9wb3MrJ8K6JykrJyA8c21hbGw+ZGUgJysoci50b3RhbF9wYXJ0aWNpcGFudGVzfHwxKS50b0xvY2FsZVN0cmluZygncHQtQlInKSsnPC9zbWFsbD48L2Rpdj48L2Rpdj4nKwogICAgICAgICc8ZGl2PjxkaXYgY2xhc3M9ImtpY2tlciIgc3R5bGU9Im1hcmdpbi1ib3R0b206OHB4Ij5Wb2PDqiDCtyBwYXJjaWFsIGRlIGFnb3JhPC9kaXY+JysKICAgICAgICAnPGRpdiBzdHlsZT0iZm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6ODAwIj4nK2ZtdFB0cyh0b3RhbCkrJyBwdHMgPHNtYWxsIHN0eWxlPSJmb250LXNpemU6MTNweDtjb2xvcjp2YXIoLS1pbmstbXV0ZSk7Zm9udC13ZWlnaHQ6NjAwIj5kZWNpZGUgYSBzdWEgcG9zacOnw6NvPC9zbWFsbD48L2Rpdj4nKwogICAgICAgICgobXAuaW5kfHwwKSA\/ICc8ZGl2IHN0eWxlPSJmb250LXNpemU6MTIuNXB4O2NvbG9yOnZhcigtLWluay1tdXRlKTttYXJnaW4tdG9wOjJweCI+am9ybmFkYSAnK2ZtdFB0cyhlc3R1ZG8pKycgKyAnK2ZtdFB0cyhtcC5pbmQpKycgZGUgaW5kaWNhw6fDtWVzPC9kaXY+JyA6ICcnKSsKICAgICAgICAnPGRpdiBjbGFzcz0icG9zLWJyZWFrZG93biI+JysKICAgICAgICAnPGRpdiBjbGFzcz0icGIiPjxkaXYgY2xhc3M9InJvdyI+PHNwYW4+UHJlc2Vuw6dhPC9zcGFuPjxzcGFuPicrZm10UHRzKG1wLnByZXMpKycgLyAnK1BPTlRPUy5wcmVzZW5jYSsnPC9zcGFuPjwvZGl2PjxkaXYgY2xhc3M9InByb2dyZXNzIj48ZGl2IGNsYXNzPSJmaWxsIiBzdHlsZT0id2lkdGg6JysobXAucHJlcy9QT05UT1MucHJlc2VuY2EqMTAwKSsnJSI+PC9kaXY+PC9kaXY+PC9kaXY+JysKICAgICAgICAnPGRpdiBjbGFzcz0icGIiPjxkaXYgY2xhc3M9InJvdyI+PHNwYW4+UXVlc3TDtWVzPC9zcGFuPjxzcGFuPicrZm10UHRzKG1wLnF1ZXN0KSsnIC8gJytQT05UT1MubWlzc29lcysnPC9zcGFuPjwvZGl2PjxkaXYgY2xhc3M9InByb2dyZXNzIj48ZGl2IGNsYXNzPSJmaWxsIiBzdHlsZT0id2lkdGg6JysobXAucXVlc3QvUE9OVE9TLm1pc3NvZXMqMTAwKSsnJSI+PC9kaXY+PC9kaXY+PC9kaXY+JysKICAgICAgICAnPGRpdiBjbGFzcz0icGIiPjxkaXYgY2xhc3M9InJvdyI+PHNwYW4+U2ltdWxhZG8gRmluYWw8L3NwYW4+PHNwYW4+JytmbXRQdHMobXAuc2ltKSsnIC8gJytQT05UT1Muc2ltdWxhZG8rJzwvc3Bhbj48L2Rpdj48ZGl2IGNsYXNzPSJwcm9ncmVzcyI+PGRpdiBjbGFzcz0iZmlsbCIgc3R5bGU9IndpZHRoOicrKG1wLnNpbS9QT05UT1Muc2ltdWxhZG8qMTAwKSsnJSI+PC9kaXY+PC9kaXY+PC9kaXY+JysKICAgICAgICAnPGRpdiBjbGFzcz0icGIiPjxkaXYgY2xhc3M9InJvdyI+PHNwYW4+SW5kaWNhw6fDtWVzPC9zcGFuPjxzcGFuPisnK2ZtdFB0cyhtcC5pbmR8fDApKycgPHNtYWxsIHN0eWxlPSJjb2xvcjp2YXIoLS1pbmstbXV0ZSkiPmNvbnRhIG5hIGNsYXNzaWZpY2HDp8Ojbzwvc21hbGw+PC9zcGFuPjwvZGl2PjxkaXYgY2xhc3M9InByb2dyZXNzIj48ZGl2IGNsYXNzPSJmaWxsIiBzdHlsZT0id2lkdGg6JytNYXRoLm1pbigxMDAsKG1wLmluZHx8MCkvMjAwKjEwMCkrJyUiPjwvZGl2PjwvZGl2PjwvZGl2PicrCiAgICAgICAgJzwvZGl2PjwvZGl2PjwvZGl2Pic7CgogICAgICAvLyBwcmVtaWHDp8O1ZXMgKyBmYWl4YXMgZGUgY29ucXVpc3RhIChwcsOqbWlvcyByZXRpcmFkb3MgdGVtcG9yYXJpYW1lbnRlKQogICAgICBvdXQgKz0gJzxkaXYgY2xhc3M9ImNhcmQiIHN0eWxlPSJwYWRkaW5nOjI2cHggMzBweDttYXJnaW4tYm90dG9tOjIycHgiPic7CiAgICAgIGlmIChNT1NUUkFSX1BSRU1JT1MpIHsKICAgICAgICBvdXQgKz0gJzxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC13cmFwOndyYXA7Z2FwOjhweDttYXJnaW4tYm90dG9tOjE0cHgiPicrCiAgICAgICAgICAnPGRpdiBjbGFzcz0ia2lja2VyIj5QcmVtaWHDp8O1ZXM8L2Rpdj48c21hbGwgc3R5bGU9ImNvbG9yOnZhcigtLWluay1tdXRlKTtmb250LXNpemU6MTJweCI+cHJvdmlzw7NyaW8gwrcgY29uZmlybWHDp8OjbyBhdMOpIG8gU2ltdWxhZG8gRmluYWw8L3NtYWxsPjwvZGl2PicrCiAgICAgICAgICAnPGRpdiBjbGFzcz0icHJlbWlvcyIgc3R5bGU9Im1hcmdpbi10b3A6MCI+JysKICAgICAgICAgICc8ZGl2IGNsYXNzPSJwcmVtaW8iPjxkaXYgY2xhc3M9InBvcyI+McK6IGx1Z2FyPC9kaXY+PGRpdiBjbGFzcz0id2hhdCI+Tm90ZWJvb2s8L2Rpdj48L2Rpdj4nKwogICAgICAgICAgJzxkaXYgY2xhc3M9InByZW1pbyI+PGRpdiBjbGFzcz0icG9zIj4ywrogbHVnYXI8L2Rpdj48ZGl2IGNsYXNzPSJ3aGF0Ij5UYWJsZXQ8L2Rpdj48L2Rpdj4nKwogICAgICAgICAgJzxkaXYgY2xhc3M9InByZW1pbyI+PGRpdiBjbGFzcz0icG9zIj4zwrogYSAxMMK6PC9kaXY+PGRpdiBjbGFzcz0id2hhdCI+S2l0IENvcnVqYSBNRUQ8L2Rpdj48L2Rpdj48L2Rpdj4nOwogICAgICB9IGVsc2UgewogICAgICAgIG91dCArPSAnPGRpdiBjbGFzcz0ia2lja2VyIiBzdHlsZT0ibWFyZ2luLWJvdHRvbTo4cHgiPlByZW1pYcOnw6NvPC9kaXY+JysKICAgICAgICAgICc8cCBzdHlsZT0iZm9udC1zaXplOjE0cHg7Y29sb3I6dmFyKC0taW5rLWRpbSk7bWFyZ2luOjAiPkEgcHJlbWlhw6fDo28gZG8gQXRvIEZpbmFsIHNlcsOhIGRpdnVsZ2FkYSBlbSBicmV2ZSBubyBncnVwbyBvZmljaWFsLiAnKwogICAgICAgICAgJ1NpZ2EgYWN1bXVsYW5kbyBwb250b3MgbmEgam9ybmFkYTogcXVhbmRvIGFzIHJlZ3JhcyBzYcOtcmVtLCBzdWEgcG9zacOnw6NvIGrDoSBjb250YS48L3A+JzsKICAgICAgfQogICAgICAvLyBub3RhIGRlIGZhaXhhcyByZW1vdmlkYSBhIHBlZGlkbyBkbyBJZ29yICgxMi8wOCkKICAgICAgb3V0ICs9ICc8L2Rpdj4nOwoKICAgICAgb3V0ICs9ICc8ZGl2IGNsYXNzPSJjYXJkIiBzdHlsZT0icGFkZGluZzoyMHB4IDhweCA4cHgiPicrCiAgICAgICAgJzxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpjZW50ZXI7cGFkZGluZzowIDIycHggOHB4Ij4nKwogICAgICAgICc8ZGl2IGNsYXNzPSJraWNrZXIiPkNsYXNzaWZpY2HDp8OjbyBnZXJhbDwvZGl2PjxzbWFsbCBzdHlsZT0iY29sb3I6dmFyKC0taW5rLW11dGUpO2ZvbnQtc2l6ZToxMnB4Ij50b3AgMTAgKyBzdWEgdml6aW5oYW7Dp2E8L3NtYWxsPjwvZGl2PicrCiAgICAgICAgJzx0YWJsZSBjbGFzcz0icmFuay10YWJsZSI+PHRoZWFkPjx0cj48dGggc3R5bGU9IndpZHRoOjYwcHgiPiM8L3RoPjx0aD5QYXJ0aWNpcGFudGU8L3RoPjx0aCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodCI+UG9udG9zPC90aD48L3RyPjwvdGhlYWQ+PHRib2R5Pic7CiAgICAgIHZhciBhbnQgPSAwOwogICAgICAoci5ib2FyZCB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbihyb3cpewogICAgICAgIGlmIChhbnQgJiYgcm93LnBvcyA+IGFudCArIDEpIHsKICAgICAgICAgIG91dCArPSAnPHRyIGNsYXNzPSJyYW5rLWdhcCI+PHRkIGNvbHNwYW49IjMiPsK3IMK3IMK3ICcrKHJvdy5wb3MgLSBhbnQgLSAxKS50b0xvY2FsZVN0cmluZygncHQtQlInKSsnIHBhcnRpY2lwYW50ZScrKHJvdy5wb3MtYW50LTE+MT8ncyc6JycpKycgwrcgwrcgwrc8L3RkPjwvdHI+JzsKICAgICAgICB9CiAgICAgICAgYW50ID0gcm93LnBvczsKICAgICAgICB2YXIgbWVkYWwgPSByb3cucG9zPT09MT8nPHNwYW4gY2xhc3M9Im1lZGFsIGciPjE8L3NwYW4+Jzpyb3cucG9zPT09Mj8nPHNwYW4gY2xhc3M9Im1lZGFsIHMiPjI8L3NwYW4+Jzpyb3cucG9zPT09Mz8nPHNwYW4gY2xhc3M9Im1lZGFsIGIiPjM8L3NwYW4+JzonPHNwYW4gY2xhc3M9Im1lZGFsIj4nK3Jvdy5wb3MrJzwvc3Bhbj4nOwogICAgICAgIG91dCArPSAnPHRyJysocm93Lm1lPycgY2xhc3M9Im1lIic6JycpKyc+PHRkPicrbWVkYWwrJzwvdGQ+PHRkPicrZXNjKHJvdy5ub21lKSsocm93Lm1lPycgwrcgdm9jw6onOicnKSsnPC90ZD48dGQgY2xhc3M9InB0cyI+JytmbXRQdHMocm93LnB0cykrJzwvdGQ+PC90cj4nOwogICAgICB9KTsKICAgICAgb3V0ICs9ICc8L3Rib2R5PjwvdGFibGU+PC9kaXY+JzsKICAgICAgJCgnI21haW4nKS5pbm5lckhUTUwgPSBwYWdlSGVhZCgnQ2xhc3NpZmljYcOnw6NvIGdlcmFsIMK3ICcgKyBqLmxpZ2EsICdTdWEgcG9zacOnw6NvIG5hIGNsYXNzaWZpY2HDp8OjbycsCiAgICAgICAgJ1N1YSBQT1NJw4fDg08gw6kgYSBzdWEgcG9udHVhw6fDo28gdG90YWw6IGpvcm5hZGEgZGUgZXN0dWRvIChhdMOpIDIuMDAwOiBwcmVzZW7Dp2EsIHF1ZXN0w7VlcyBlIFNpbXVsYWRvKSArIGluZGljYcOnw7VlcyAoc2VtIHRldG8pLCB0dWRvIHNvbWFkby4gRW1wYXRlPyBNYWlvciBub3RhIG5vIFNpbXVsYWRvLCBkZXBvaXMgYWNlcnRvcyBuYXMgcXVlc3TDtWVzIGUgY2hlY2staW4gbWFpcyBjZWRvLicsCiAgICAgICAgKHIudG90YWxfcGFydGljaXBhbnRlc3x8MSkudG9Mb2NhbGVTdHJpbmcoJ3B0LUJSJykgKyAnIHBhcnRpY2lwYW50ZXMnKSArIG91dDsKICAgIH0pLmNhdGNoKGZ1bmN0aW9uKCl7IHZhciBlbCA9ICQoJyNya0xvYWQnKTsgaWYgKGVsKSBlbC50ZXh0Q29udGVudCA9ICdTZW0gY29uZXjDo28gY29tIG8gcmFua2luZy4nOyB9KTsKICB9CgogIC8qIC0tLS0tLS0tLS0gcm90ZWFkb3IgZGUgYWJhcyAtLS0tLS0tLS0tICovCiAgdmFyIFRBQlMgPSB7IGluaWNpbzpyZW5kZXJJbmljaW8sIGF1bGFzOnJlbmRlckF1bGFzLCBxdWVzdG9lczpyZW5kZXJRdWVzdG9lcywgc2ltdWxhZG86cmVuZGVyU2ltdWxhZG8sIHJhbmtpbmc6cmVuZGVyUmFua2luZyB9OwogIHZhciBUQUJfQUxJQVMgPSB7IGNoZWNraW46J2F1bGFzJywgbWlzc29lczoncXVlc3RvZXMnIH07CiAgZnVuY3Rpb24gZ28odGFiKXsKICAgIGlmIChUQUJfQUxJQVNbdGFiXSkgdGFiID0gVEFCX0FMSUFTW3RhYl07CiAgICBpZiAoIVRBQlNbdGFiXSkgdGFiID0gJ2luaWNpbyc7CiAgICBpZiAocHJvdmFBdGl2YSkgeyBndWFyZGFQcm92YU1vZGFsKGZ1bmN0aW9uKCl7IGdvKHRhYik7IH0pOyByZXR1cm47IH0KICAgICQkKCcubmF2LWl0ZW0nKS5mb3JFYWNoKGZ1bmN0aW9uKGIpeyBiLmNsYXNzTGlzdC50b2dnbGUoJ29uJywgYi5kYXRhc2V0LnRhYiA9PT0gdGFiKTsgfSk7CiAgICBUQUJTW3RhYl0oKTsKICAgIC8vIHRyYW5zacOnw6NvIGRlIHRlbGEgKHNlbnNhw6fDo28gZGUgYXBwOiBjYWRhIGFiYSBlbnRyYSBhbmltYWRhKQogICAgdmFyIG1FbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWluJyk7CiAgICBpZiAobUVsKSB7IG1FbC5jbGFzc0xpc3QucmVtb3ZlKCd2aWV3LWFuaW0nKTsgdm9pZCBtRWwub2Zmc2V0V2lkdGg7IG1FbC5jbGFzc0xpc3QuYWRkKCd2aWV3LWFuaW0nKTsgfQogICAgaWYgKGxvY2F0aW9uLmhhc2ggIT09ICcjJyt0YWIpIGhpc3RvcnkucmVwbGFjZVN0YXRlKG51bGwsICcnLCAnIycrdGFiKTsKICAgIHdpbmRvdy5zY3JvbGxUbygwLDApOwogIH0KICAkJCgnLm5hdi1pdGVtJykuZm9yRWFjaChmdW5jdGlvbihiKXsgYi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCl7IGdvKGIuZGF0YXNldC50YWIpOyB9KTsgfSk7CiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2hhc2hjaGFuZ2UnLCBmdW5jdGlvbigpeyBnbyhsb2NhdGlvbi5oYXNoLnNsaWNlKDEpKTsgfSk7CiAgZ28obG9jYXRpb24uaGFzaC5zbGljZSgxKSB8fCAnaW5pY2lvJyk7Cn0KCi8qIFBhaW5lbCBhZG1pbjogw6kgYnVuZGxlIFBSw5NQUklPIChhZG1pbi5qcy9hZG1pbi5odG1sL2FkbWluLmNzcykgY29tIGdhdGUKICAgc2VydmVyLXNpZGUuIE8gcHJvdMOzdGlwbyBpbml0QWRtaW4gKGNoYXZlIGZpeGEgbm8gY8OzZGlnbyArIGZsYWcgZW0KICAgbG9jYWxTdG9yYWdlLCBaRVJPIHZhbGlkYcOnw6NvIG5vIHNlcnZpZG9yKSBmb2kgUkVNT1ZJRE8gbmEgYXVkaXRvcmlhIGRlCiAgIDExLzA4OiBudW5jYSByb2RhdmEgZW0gcHJvZHXDp8OjbyAoYSBww6FnaW5hIC9wYWluZWwvIGNhcnJlZ2EgYWRtaW4uanMsIG7Do28KICAgZXN0ZSBhcHAuanMpIGUgZW1iYXJjYXZhIHVtYSBjaGF2ZSBmYWxzYSBubyBidW5kbGUgcMO6YmxpY28gZGUgdG9kbyBhbHVuby4gKi8KCi8qIC0tLS0tLS0tLS0tLS0tLS0gYm9vdCAtLS0tLS0tLS0tLS0tLS0tICovCihmdW5jdGlvbigpewogIHZhciBwYWdlID0gd2luZG93Ll9fQUZfUEFHRTsKICB0cnkgewogICAgaWYgKHBhZ2UgPT09ICdsYW5kaW5nJykgaW5pdExhbmRpbmcoKTsKICAgIGVsc2UgaWYgKHBhZ2UgPT09ICdhdXRoLWNhZGFzdHJvJykgcmVuZGVyQXV0aCgnY2FkYXN0cm8nKTsKICAgIGVsc2UgaWYgKHBhZ2UgPT09ICdhdXRoLWFjZXNzYXInKSByZW5kZXJBdXRoKCdhY2Vzc2FyJyk7CiAgICBlbHNlIGlmIChwYWdlID09PSAnYXJlYScpIGluaXRBcmVhKCk7CiAgfSBjYXRjaCAoZSkgewogICAgLy8gc2UgYSBtb250YWdlbSBxdWVicmFyIChleC46IHPDsyBlbSBjZXJ0byBTYWZhcmkpLCBOw4NPIGRlaXhhIHRlbGEgYnJhbmNhCiAgICAvLyBtdWRhOiBwdWJsaWNhIGEgY2F1c2EgbmEgdGVsYSAobyBhbHVubyBjb25zZWd1ZSBtYW5kYXIgcHJpbnQpIGUgc2luYWxpemEKICAgIC8vIHBybyB3YXRjaGRvZyBkbyBwdWJsaWNhZG9yLiBBdWRpdG9yaWEgMTEvMDguCiAgICB3aW5kb3cuX19hZkJvb3RFcnJvID0gKGUgJiYgKGUubWVzc2FnZSB8fCBlLm5hbWUpKSB8fCBTdHJpbmcoZSk7CiAgICB0cnkgewogICAgICB2YXIgYm94ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haW4nKSB8fCBkb2N1bWVudC5ib2R5OwogICAgICB2YXIgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICBkLnN0eWxlLmNzc1RleHQgPSAncGFkZGluZzoyNHB4O21hcmdpbjoxNnB4O2JvcmRlci1yYWRpdXM6MTJweDtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjRDk1NjRBO2ZvbnQ6MTRweC8xLjYgLWFwcGxlLXN5c3RlbSxzYW5zLXNlcmlmO2NvbG9yOiMwRTJBMkU7bWF4LXdpZHRoOjUyMHB4JzsKICAgICAgZC5pbm5lckhUTUwgPSAnPGIgc3R5bGU9ImNvbG9yOiNCMzI2MUUiPk7Do28gY29uc2VndWkgYWJyaXIgZXN0YSB0ZWxhIG5vIHNldSBuYXZlZ2Fkb3IuPC9iPjxicj4nICsKICAgICAgICAnQXR1YWxpemUgYSBww6FnaW5hLiBTZSBjb250aW51YXIsIHRpcmUgdW0gcHJpbnQgZGVzdGEgbWVuc2FnZW0gZSBlbnZpZSBhbyBzdXBvcnRlLjxicj4nICsKICAgICAgICAnPHNtYWxsIHN0eWxlPSJjb2xvcjojN0U5NTlCIj5EZXRhbGhlIHTDqWNuaWNvICgnICsgcGFnZSArICcpOiAnICsgZXNjKHdpbmRvdy5fX2FmQm9vdEVycm8pLnNsaWNlKDAsMTYwKSArICc8L3NtYWxsPic7CiAgICAgIHZhciBlc3AgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWYtZXNwZXJhJyk7IGlmIChlc3ApIGVzcC5yZW1vdmUoKTsKICAgICAgYm94LmFwcGVuZENoaWxkKGQpOwogICAgfSBjYXRjaCAoZTIpIHt9CiAgICBpZiAod2luZG93Ll9fYWZFbnZpYSkgeyB0cnkgeyB3aW5kb3cuX19hZkVudmlhKCdib290X2Vycm86JyArIFN0cmluZyh3aW5kb3cuX19hZkJvb3RFcnJvKS5zbGljZSgwLDgwKSk7IH0gY2F0Y2goZTMpe30gfQogIH0KfSkoKTsK';function inject(){var bin=atob(SRC),code;try{code=new TextDecoder('utf-8').decode(Uint8Array.from(bin,function(c){return c.charCodeAt(0);}));}catch(e){try{code=decodeURIComponent(escape(bin));}catch(e2){code=bin;}}var s=document.createElement('script');s.id='af-js';s.text=code;document.body.appendChild(s);}function boot(){if(document.body){try{inject();}catch(e){window.__afBootErro=(e&&(e.message||e.name))||String(e);var alvo=document.getElementById('main')||document.body;var esp=document.getElementById('af-espera');if(esp)esp.remove();if(alvo){var d=document.createElement('div');d.style.cssText='padding:24px;margin:16px;border-radius:12px;background:#fff;border:1px solid #D9564A;font:14px\/1.6 -apple-system,sans-serif;color:#0E2A2E;max-width:520px';d.textContent='N\u00e3o foi poss\u00edvel abrir no seu navegador. Atualize a p\u00e1gina; se continuar, tire um print e envie ao suporte. ('+String(window.__afBootErro).slice(0,120)+')';alvo.appendChild(d);}}}else{setTimeout(boot,20);}}boot();})();<\/script>\n\n<script>\n(function () {\n  \"use strict\";\n  if (window.__estrategiaUtmV3) return;\n  window.__estrategiaUtmV3 = 1;\n  const UTM_PARAMS = [\n    \"utm_source\",\n    \"utm_medium\",\n    \"utm_campaign\",\n    \"utm_content\",\n    \"utm_term\",\n  ];\n  const CLID_PARAMS = [\"ttclid\", \"fbclid\", \"gclid\"];\n  const OWNED_HOSTS = [\n    \"estrategia.com\",\n    \"estrategiaconcursos.com.br\",\n    \"estrategiamed.com.br\",\n    \"estrategiamilitares.com.br\",\n    \"estrategiavestibulares.com.br\",\n    \"estrategiacarreirajuridica.com.br\",\n    \"estrategiaoab.com.br\",\n    \"estrategiamedicina.com.br\",\n  ];\n  const STORAGE_KEY = \"estrategia_utm\";\n  const COOKIE_NAME = \"estrategia_utm\";\n  const COOKIE_HOURS = 48;   \/\/ janela de atribuicao do cookie\n  function rootCookieDomain() {\n    const host = window.location.hostname;\n    const match = OWNED_HOSTS.find(\n      (d) => host === d || host.endsWith(\".\" + d)\n    );\n    return match ? \".\" + match : null;\n  }\n  function writeStore(obj) {\n    const json = JSON.stringify({ ts: Date.now(), v: obj });\n    try {\n      window.localStorage.setItem(STORAGE_KEY, json);\n    } catch (e) {\n      \/* modo privado \/ storage bloqueado *\/\n    }\n    const domain = rootCookieDomain();\n    if (!domain) return;\n    const expires = new Date(\n      Date.now() + COOKIE_HOURS * 36e5\n    ).toUTCString();\n    document.cookie =\n      COOKIE_NAME +\n      \"=\" +\n      encodeURIComponent(json) +\n      \"; expires=\" + expires +\n      \"; path=\/; domain=\" + domain +\n      \"; SameSite=Lax; Secure\";\n  }\n  function unwrap(json) {\n    let payload;\n    try {\n      payload = JSON.parse(json);\n    } catch (e) {\n      return null;\n    }\n    if (!payload || typeof payload !== \"object\") return null;\n    if (!payload.ts || !payload.v) return null;\n    if (Date.now() - payload.ts > COOKIE_HOURS * 36e5) return null;\n    return payload.v;\n  }\n  function readStore() {\n    const cookie = document.cookie\n      .split(\"; \")\n      .find((row) => row.indexOf(COOKIE_NAME + \"=\") === 0);\n    if (cookie) {\n      const v = unwrap(\n        decodeURIComponent(cookie.slice(COOKIE_NAME.length + 1))\n      );\n      if (v) return v;\n    }\n    try {\n      const raw = window.localStorage.getItem(STORAGE_KEY);\n      if (raw) return unwrap(raw);\n    } catch (e) {\n      \/* storage bloqueado *\/\n    }\n    return null;\n  }\n  function collectFromUrl() {\n    const urlParams = new URLSearchParams(window.location.search);\n    const found = {};\n    UTM_PARAMS.concat(CLID_PARAMS).forEach((param) => {\n      const value = urlParams.get(param);\n      if (value) found[param] = value;\n    });\n    return Object.keys(found).length ? found : null;\n  }\n  function resolveAttribution() {\n    const fromUrl = collectFromUrl();\n    if (fromUrl) {\n      writeStore(fromUrl);\n      return fromUrl;\n    }\n    return readStore();\n  }\n  const ATTRIBUTION = resolveAttribution();\n  function isOwnedUrl(url) {\n    try {\n      const host = new URL(url, window.location.origin).hostname;\n      return OWNED_HOSTS.some((d) => host === d || host.endsWith(\".\" + d));\n    } catch (e) {\n      return false;\n    }\n  }\n  function appendParamsToHref(href, params) {\n    try {\n      const url = new URL(href, window.location.origin);\n      Object.keys(params).forEach((key) => {\n        if (!url.searchParams.has(key)) {\n          url.searchParams.set(key, params[key]);\n        }\n      });\n      return url.toString();\n    } catch (e) {\n      return href;\n    }\n  }\n  function eachMatch(root, selector, fn) {\n    if (root.nodeType === 1) {\n      if (root.matches) {\n        if (root.matches(selector)) fn(root);\n      }\n    }\n    root.querySelectorAll(selector).forEach(fn);\n  }\n  function decorateLink(el) {\n    const href = el.getAttribute(\"href\");\n    if (!href || href.charAt(0) === \"#\") return;\n    if (!isOwnedUrl(href)) return;\n    let target;\n    try {\n      target = new URL(href, window.location.origin);\n    } catch (e) {\n      return;\n    }\n    if (target.hostname === window.location.hostname) return;\n    el.setAttribute(\"href\", appendParamsToHref(href, ATTRIBUTION));\n  }\n  function propagateToLinks(root) {\n    root = root || document;\n    if (!ATTRIBUTION) return;\n    eachMatch(root, \"a[href]\", decorateLink);\n  }\n  function injectIntoForms(root) {\n    root = root || document;\n    if (!ATTRIBUTION) return;\n    eachMatch(root, \"form\", function (form) {\n      if (form.dataset.utmInjected === \"1\") return;\n      Object.keys(ATTRIBUTION).forEach((param) => {\n        let input = form.querySelector('input[name=\"' + param + '\"]');\n        if (!input) {\n          input = document.createElement(\"input\");\n          input.type = \"hidden\";\n          input.name = param;\n          form.appendChild(input);\n        }\n        input.value = ATTRIBUTION[param];\n      });\n      form.dataset.utmInjected = \"1\";\n    });\n  }\n  function observeDom() {\n    if (!document.body) return;\n    const observer = new MutationObserver((mutations) => {\n      mutations.forEach((mutation) => {\n        mutation.addedNodes.forEach((node) => {\n          if (node.nodeType !== 1) return;\n          propagateToLinks(node);\n          injectIntoForms(node);\n        });\n      });\n    });\n    observer.observe(document.body, { childList: true, subtree: true });\n  }\n  function init() {\n    propagateToLinks();\n    injectIntoForms();\n    observeDom();\n  }\n  if (document.readyState === \"loading\") {\n    document.addEventListener(\"DOMContentLoaded\", init);\n  } else {\n    init();\n  }\n})();\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Carregando o acesso ao Ato Final\u2026Ative o JavaScript do navegador para acessar a plataforma.<\/p>\n","protected":false},"author":78,"featured_media":0,"parent":392559,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_et_pb_use_builder":"","_et_pb_old_content":"","_et_gb_content_width":"","footnotes":""},"categories":[],"tags":[],"class_list":["post-392561","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/mkt.estrategia.com\/med\/wp-json\/wp\/v2\/pages\/392561","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mkt.estrategia.com\/med\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/mkt.estrategia.com\/med\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/mkt.estrategia.com\/med\/wp-json\/wp\/v2\/users\/78"}],"replies":[{"embeddable":true,"href":"https:\/\/mkt.estrategia.com\/med\/wp-json\/wp\/v2\/comments?post=392561"}],"version-history":[{"count":107,"href":"https:\/\/mkt.estrategia.com\/med\/wp-json\/wp\/v2\/pages\/392561\/revisions"}],"predecessor-version":[{"id":395831,"href":"https:\/\/mkt.estrategia.com\/med\/wp-json\/wp\/v2\/pages\/392561\/revisions\/395831"}],"up":[{"embeddable":true,"href":"https:\/\/mkt.estrategia.com\/med\/wp-json\/wp\/v2\/pages\/392559"}],"wp:attachment":[{"href":"https:\/\/mkt.estrategia.com\/med\/wp-json\/wp\/v2\/media?parent=392561"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mkt.estrategia.com\/med\/wp-json\/wp\/v2\/categories?post=392561"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mkt.estrategia.com\/med\/wp-json\/wp\/v2\/tags?post=392561"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}