{"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-08-20T14:03:04","modified_gmt":"2026-08-20T17:03:04","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}<\/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\/KCdmYWxoYSBhbyBtb250YXIg4oCUICcrU3RyaW5nKHdpbmRvdy5fX2FmQm9vdEVycm8pLnNsaWNlKDAsMTgwKSk6KHdpbmRvdy5fX2FmRXJyb3MubGVuZ3RoP3dpbmRvdy5fX2FmRXJyb3Muam9pbignIHwgJykuc2xpY2UoMCwyODApOidvIGFwcCBlc3TDoSBkZW1vcmFuZG8gYSBhYnJpci4gVG9xdWUgcGFyYSByZWNhcnJlZ2FyOyBzZSBwZXJzaXN0aXIsIHZlcmlmaXF1ZSBjb25leMOjbyBvdSBibG9xdWVhZG9yZXMuJykpO2Qub25jbGljaz1mdW5jdGlvbigpe2xvY2F0aW9uLnJlbG9hZCgpO307ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkKTt2YXIgaXY9c2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXtpZighdHJhdmFkbygpKXtjbGVhckludGVydmFsKGl2KTt2YXIgdj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWYtZGlhZycpO2lmKHYpdi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHYpO319LDEwMDApO31zZXRUaW1lb3V0KG1vc3RyYSw3MDAwKTt9KSgpO3dpbmRvdy5fX0FGX1VSTFM9eyJscCI6ICJodHRwczovL21rdC5lc3RyYXRlZ2lhLmNvbS9tZWQvYXRvLWZpbmFsLWVuYW1lZC8\/dj0xNzE3MjMiLCAiY2FkYXN0cm8iOiAiaHR0cHM6Ly9ta3QuZXN0cmF0ZWdpYS5jb20vbWVkL2F0by1maW5hbC1lbmFtZWQvY2FkYXN0cm8vP3Y9MTcxNzIzIiwgImFjZXNzYXIiOiAiaHR0cHM6Ly9ta3QuZXN0cmF0ZWdpYS5jb20vbWVkL2F0by1maW5hbC1lbmFtZWQvYWNlc3Nhci8\/dj0xNzE3MjMiLCAiYXJlYSI6ICJodHRwczovL21rdC5lc3RyYXRlZ2lhLmNvbS9tZWQvYXRvLWZpbmFsLWVuYW1lZC9hcmVhLz92PTE3MTcyMyIsICJwYWluZWwiOiAiaHR0cHM6Ly9ta3QuZXN0cmF0ZWdpYS5jb20vbWVkL2F0by1maW5hbC1lbmFtZWQvcGFpbmVsLz92PTE3MTcyMyJ9O3dpbmRvdy5fX0FGX1BBR0U9J2F1dGgtY2FkYXN0cm8nO3dpbmRvdy5fX0FGX1BST1ZBPSdlbmFtZWQnO3dpbmRvdy5fX0FGX1NVUEFfVVJMPSdodHRwczovL2xzbmRsd2FkZmlybnVsem1xa2VzLnN1cGFiYXNlLmNvJzt3aW5kb3cuX19BRl9BTk9OPSJleUpoYkdjaU9pSklVekkxTmlJc0luUjVjQ0k2SWtwWFZDSjkuZXlKcGMzTWlPaUp6ZFhCaFltRnpaU0lzSW5KbFppSTZJbXh6Ym1Sc2QyRmtabWx5Ym5Wc2VtMXhhMlZ6SWl3aWNtOXNaU0k2SW1GdWIyNGlMQ0pwWVhRaU9qRTNPRFUzTnpRek1qQXNJbVY0Y0NJNk1qRXdNVE0xTURNeU1IMC5DUVV0QWJIdW9YaU1pRGVzLTd6SmhOZHhGRkFUSkN0SFpvZTd4T25ueFRnIjt3aW5kb3cuX19BRl9MT0dPPSdkYXRhOmltYWdlL3dlYnA7YmFzZTY0LFVrbEdScXdvQUFCWFJVSlFWbEE0V0FvQUFBQVVBQUFBVndJQW5BQUFRVXhRU0xNZUFBQUI4SWI5L3pvbC92ODlKdWxHU25EQklPekE3clc3RldQdGR0ZnROYmM3N0hidDdsWEU3aTdFUmtrYlJCR1VtSjU1WEpoNVBWN1BWOHo3RFZ5S2lBa0FZWDNyRC90MTEvV3NmSjNKV0p5YmVtYk5WMTJqWEtEQ3A3SksvNFVYY3d4SXR4YWw3NS9Sd3J0Q2gxL1BOUmttWlB6dTR1eDY2b29hNGRNdjYxSFFWMXU2dUZYRUNQM3F2ZzBGTHpuUVZWdlJ3bjFrTW9xemVGT0RpaFdOOWhoUnRNOW4rbGVjY0p2NkZNVnNPOXE0b2tURU9oT0svT2tZZFlXSXhoZFEvTG8vZkNwQWRFdEhLZHEyaGxaNEdKeURFajBVV2NGaDJHdVU3SW1vQ2cwRFg2T0VqMWF1d1BEaGM1VDBUcjhLQzdYdm9jUVhhTXVidE43ZVdsa0lPb1pTTjN3c25vQkdvcS92VWFhZ3JkT0lIQjhnVTVyV3Z4KzZldVhRNysxY0pLZWVqOUovMVY0MFF3c0tDOFJkK0tSQm1jS0l2TUlDN3NMM2U4UGtLWHhsSVRwOHZ6bEdhZ2tsTW9DWHdzUXlDa1gvcm5GWlF1eERKSityQWJJY2VRS0p0K0tsVmYwK3l1SS9TckhZUkZkWWx1QytGY25ubzBHV1BiWWgrV0tZbE5UTFVSNExPNWVCVFRhU0xzZUNQQTh4MG5DT2xMcStsd2s4N2x2bTFlQUpVcS9XQW5uVzdFR2UxLzJsNDMwTTVkSThvYXpMZXo5U3I5Y0dtUTU5eENlL25uUkdtR1FEVTBMTHVMNjJVRzdXQmJtT3llVlQwa295QVdkUlBtM1R5N1phNUNEeFRrT1E3YXJQK0JRMWs4d0VnNHpnemVEL1VWUWFOYmRHclhCeWFvMmFXNk1TV2NCeEpONXJBdkx0YzVuUDQwakpKQlZiNU1QMHF0Zi9KcW9aQi9keko2NE9kRzcrS3hMM2N4LzhSaWtxeFE4MndzTm1JT2UvOE5taGtVeU41Z2t6MTU3TmZHK1Rsclh3NGRHbDAzczE4SmVsSXVtcDl5SDFhWVJ6Qzh0QzZtNlZxRHJsSTNkYUs1RDF1RXhhWVNlUXRrZEU4MUYvSDg0b2tVWkpldEx2dytORFhVR3NQQXdQNzk0VC9uSnQ2ZTBtWllVN3VYVFNUbEdGWGtMdWpMWWc4eVBlVTB4emxCSno2QkxlL291ZGFRWnhHZEozZmRtdXNoWkV6U09yZGtBbDRRUFZaUUdxZWNpZDlTSEl2WExzUzY0MzM3aUFYS3JEZTh4TDBZdWw5TVkvUGNQVklIb2U2YUhnRFA4djZGdk05YmdUT01HbUc1NGFyRmJEMDgxdEZDQ3JsWHB2eVJPQkxYTlpaMytRSkord01wS1FvL2w1RGwrbmRnV25xSzdXZGRpd0x0WFVJSisrUFZyNUE0QzY0Wi9wQXBXY21oeXBBQUQvbG0xY3k4UThhM0pYZ2YvSkZWMU9HWXFTRjNUMUI0Q296NjZiMmVXczYrd0ZBRUU5RnQ1NFg3U2pZVm5ZLy9vZWN3dlFYbmZ0bXhvQUVEajhXQWtUMjhPZjZxZ0FYSnYrZmx1UDlrOUhxU280ZUMreklQZmp4YzIxQUo1ZHQ3L2xaYm84TlFJQWdrY2t2a1h1NHEvVUZScTA4MnhJZnJ1cmx4ZUFwdm1LSEpMdStGQi9BR1hOYjIrWmtheWJVcUZockI3NTZrNk5EZ0pRMXZ2ck1VZEpZaDh2QUpjMnE1NGo3MWZ0S2pCRXB5RkR5ODJ2b2dBZzV2czBSQ3plMjgwTndLZmZmKytRNVVtL2lndC9JT1AwWDJvcEFLSm0zMHZzNWdvUU9PcU1BZG1hUnpzbmwrQ2FyZnNNSGpLb1I5UHF2aW9oRkx0b1lXTHppL3R3d0pDQnJTTmRtYW45cWpYcTFIL0lrTUY5MjllcjRpbGNjQnBwQjRqWUphUm02OTZEaHd6dTFTTGFUeWt5VFdCY3k5NkRod3p1MmJTYXQveW9mS0lhZE93M2VNamdmaDNxUjNvcDJFUmxza0o4OFpzbkFJUjRBRURWTXhaa2Z0TFQ2U2dpK3Z5V2REK3Z4R1N4V296dlg5elkrbVZyZng2dTBYR3hqbXNkSlQxdkZ4TkxqS3VxNG5LTGlTWEdCWEw0OTE1K1BiZlVZclVVUDA2TVpxR0o2dlg5N2h2UEN2Um1xOVZpS3MzUE9yOXlUSnlHaFY5Y3JPT1lObzlKaDJ2RlV1TkMyYW1yRHZqemNHcGVpY2xpdFppS1hpWnZtVmJmVlRTK2JXZnR2Wk5iYkxKWUxjYjN6eTZ2SGhXdDRsQkd4c1Z5eDdqejhJeWx4dm14VTBWMG5iMzkycE8zT3JQVmFqSHIzajYrdEc1U1hSY0dvNnpzVU5jZU9LZWlnTzlhT0JtM1RxdlNqY2kzNk1idnpiV1V1bzllNVhMcVNaYThYR3JlbVFDdXhsbXZjcmxmZityQWUrd2xBM0liMnZKUzFKaTA1N0VSZWR0ZTdCem94MjljWGk1bm5wbWt6eVcvK1lkVnlMRHRqODNJOS9YQmtaVkVVV1BHNVdMa2FYMjJxWWVIQTgrazE3bmNqMXZ3NlB3c2w1ZzNqbFhrNkcwWmV1U2Z0LytqSUQ2S05ValZYOXFaYktiZ1hBN1ZkbExwK1oyM0xCVDh3cWtvMiswclJyWUZXNXNUR2hXaUdPOVg0bXBaaXRRNWRvMlN6RWd0YmNORDFYejVFeHN5TnA0ZjRzcG5Pb3J5WHpZZnpMaHRScWFXcXg5NUNGYmx4MnhrcWt0c3B3QUFyNnRJMUxmajBjdU0xT2xNRkEzbVpWaVJzZVg2V0MrYTF5Vkt3V1J2WmNCY1BXV255cEYvQ3VYMUtFOWwwRzlHeW5xRkV3bjg3UzJ5ejV2dHpWVWdpcnVVWXRKc0FPaWJoWFErY2N2elVVajk1aG84UGhISGFoWStVKzhqZStQdU9zSm9oOTFCNXZsenZBQzhybEIwdkV5a1QxaEUvWjJEUXByMzF5TlZ6cURNQndCdzJVVzU2T21vNm5QS3p3QUFIa21VRTY3T28xb1NDbXJkRmk0VGcvTlFBTGVKbVNoMFNpdFphSExJZ29LbTl4TWlaS2tPQmJTdUM1U1NKdUVlQ3AzV2d4S2RRekQxdG9NcGxHUS9SM0d2Q0xyMmRqQ0RjdFhiYVZRN2kwSWZDcGVGZGk5UmdMQTFSaFErbzdYMFZLT2ZvZEJ2SnlxWnhSNUhnVGY1ZUVyR2YxNHBDcC9UaDFEOUJjRTh5TUhubEJ1K2ptSnpDWVp1RHI2blhKRkt1RUlsdUlKUFFDSUt2OE5QZWpORHJxSUFNY2RSbExlanBlWXl0d1NGTHhyUHFzNDFGTnIyaDk5bGlVVHNRVkZteFhPRlBDVGdWbGNBQ0RoRE9lZnU2SU1uQlB4WEF3QWhWeWlIdE5Jb1ByaHJ0OURiRy9KUS9Jd2lmTjVRZW5OK1FnRkN6cUZJTjdsS3kvVTNFNHJ4VFM4MjFTNmg4TVhqTGtyRFp6K0s5TEFQaC90cGluRlJYS1dHVzZ5VWpVcEgzbGNvdWo5aktqWGVZNk9zQUdtSTBkcURSOHMzSXNqdXFaRGVubWRDZU15ejhMSWFTa3BOTm42bGZTU2xtbXRDdmxaRGljN0VEMVBqV1BqdlJ6Rm12cENHZG82ZWw5VllXbXEwOFRPUDU0Q0ZGTVNjQjYrUi9EazRWcXloSUw1SXpVZnlSTmt5ZHFkcE5pUGZkNDh1bnJ2OTBrUzYyeG9jU3N0Z0V3TGM1MWtvSmJjM3pram8yclpkenpGL25IakRBNVBjcFRTcUJPa3ZFNzhiMnFWdCs5N2o1NTB0NElGYlhma3BmMEhSaXdrMHN3MFUvZjF0YzRaMWE5ZXUrOGhmRHVYeXdNditIUDJNSkw0RlRUbGd1SVhFTjYrdWs2ajdpbVpObnRVczFOTWpJTHJmeXVkY2wrb0NSNUVvVWxreHBZREhQQXRIOXFJT2dVcmdkRy8wNXd0YVVUdXVUOFd4bGhUL0JNbFB2cStsQlU3UDVrdGUwL1NEK1hVdVlHSXF5bjlUcUxQSkFHam1Hamhlck80ZW9nSk8xOXJmWjlPTUEwRHRJQ2hGZ0VQdUFCRGxBd0FScVFMczFqcFF5OTQwSkwrYkdRU2NpdHFyZFE2U3FnSm50VzJKQnh3bnZpU1ZIajlBUGJqRVJ5alR5NXZIRWhPUDNjb3g2dHNTd1AwZmk5M3pIMnNBMzBaSkpKekgxZlBnQWM1anhhUVhpUWVvU2RNbzNnZVJuRmdQNklyVzUwaDRNWUNQNzBuay8yelBONzFiMUszZDZNT1AvanBYS0RuUXpOYmJ2WjVYV3drOGEyNnpVSENUT3RvQmZHNWpaaGdFQUUxU2xuc0J3RngycFQzQlhsTlRLWFBLalNUTERDQnJKcnhCeEswaHdLM1FjTHZ0SldWSHFUUlVOUWp6WWxXL2FEOVhqY1kxSUxibnpHZ0t1UDlqUWV1K2hzQXdjQnZwaGorSFVzT3BycEpPMnVXcUlhc29rODJrallIQU8rSUF5VHlTejJnenI3dGZSbXVBMjdQRjRqeXBnV2EySHZGRWF3WHc5MXBpbzZSWEhlUW8rREt6ZlI0QThYZlF1c3dMSUR5RjJSWlhCNzQ5RlRMbmVaR1VHa1lER0ZwZ1hlSUxURlc3U1ZuaHdKaUZmbjFkQlRCM24xL3dnemN3alVpbUZNUnpVRU5wTzFYQU9PSWVVcE1xQWNNUExsUHd1Q2ZOOXp6eWZQZEhCUEJVTkQ5c2t4aG81aFF1REFTbS9pY29wWDMvVWptQUxtOFlaVFlBYUh3SEVhMUx2UUQ2RkRKS3JRa09hNDBIbVF0T0plMVg4NEZQZm5BSHRtcUp2SnJvQWtKNnQ5RUE0ekZtZ25VNGd6QnhmSTNVN0xyQXRHTUJwYWd0clkrZXg1T0JTdUR2djlBc01YQnQ2dzZNZTVZUzhLZnpRWTVnYWdtVE4vMEFxdDFFZTl0dktsQjhvV2Z5c2hzNEh2cTEzRVUrSmUxUzhWS3JRRTVlOUFhSmhxY1I4Q2VKaE55aTJMNEN0cXAxRlB5VHBOcUE5S2VkZ0tuYmZLdkVCUFM3UnRuN3BoMkg2dE4zREhJU0FPQkxkUHk4Qm9CbVJqR0RwMzJCYzRWenVlSFBpNzAwU2thQVZOVjdLZXNWMGtnd1UxSWpHRUhuVXNvMVAwcGtGcTE0S0REMjJTZFhzSXFTWXZtUkE1U0RVbmxkNndBQThDdkgyL29Bb0JxUndldENhK0FNdmp0TjdrSWZrWXpUWlcyWldqS3dnSEpRS3duVkZxVCtEYXdyM2FZVU5xRU1OTkdXcUZoQnZTZHlOWVB5MUhyWmx3T2d4dUpjMHBPZks0Tjk1M2VPanZ1QWZjMVZyMG1aYzRPQnU1ZCtsUGlzZ3R2ME5KK3JKSHozWjR4Q3RySmlRTHEvVWs2NlNpSWlnNkxyd2t5NWxZSVRLUDhnT1NzYTJIOG5WNU1vQmFiU0xnUlExdi8rL0N1OURhMjZGeWUraWdISHF0OGN2R3dKamxYeFAxL0tNOWpRV3ZyODZHZlZnS2hjaTBORmx6dDE2RENoRThKSTZsMDB4Q2NyZTFWV3k5TmZJSEtGeHQzTHh5OGdLQ1EwTkhnaDVhS25KTHJvS1JuaHpPQm4wbUtDMjBuYTd5Qmd6Rk1aVVdqY3ZYeDhBNEpDUWtNcmZVTXBOZUlhSlFFQXZHcDJIamxoZUlkb2R5QUdIRUZFNHpTZ2V0ZnVPbXJDc1BiVjNZQWM5OXc2UUhScFFTRHlHWHdRRFk5MmZ0V2hpb3ZzRkxjVmpjcS9ab2VSc3hadlREeHo2ZHJOTzZtUDB0TFQ4aW5YZlNUeE5WSlArYnV6MXM0Z0hYUGxpc2drdlcwaWhHcXpIQ2g5WTlxUCtHYmgrZ09uTDExTHZwUDZLQzA5N1JYRllNU2NlalMyRGJNUjE3dVJHSCtMeG02aVN3OFRXOU1DWHZhNnpLUmZCc1I1eXNyOVlIRUV0ZjltZThvcm5RM1ozL1NYeEZwUzNobm1wOUpJZHdPNTRndEo1enlGZ0hFMnFRVzArbXp6alp4U0c3STNHUkgvRmc3R0dHOUdnZUJWVXJHNHBleTU3R0JpYjg0OSswdGJML240VHlNQy81N0w3cGFnMENtU2NEdEpFdXZ6YWx5OVRLU0ZJR2l6ZDVMeTdqai9aaEVLYlRZaVBxOGpuTXV2M1VINFdZaHY2OHNlTkhuR3lyN28xUGhndVpnUGdvZCtjbFdQSXBTRzMwMEp2SzNQOVpHTk5FV1l5Q2NTQ2hoM3RnUkZhSWZMVllLQlZpbGNiQmJpcXpqNWcxRkZBaUJhazBlN3k4TWNvVnlHMzdTaEtLVVJtaWFCMHJaY0h5UFYzRmNZL3hUSnFQdGNzS0FvSFJSMkZFNkU2bVdJK09RREo2Q2MrazRJUk9PV0tGbVlMVkQ0djNvVXFUUWluMHJBMkozckc1S2hxekRlVjZRU09LOFlSZW9BVHdWSXIrZDdSTHhieVFtQVluQ2FJSWlYNjhsZTdHa1VyVFNpbmt2QTFJdHJCcTJ6UUZjbEV2RWZpdGFSN1FlRjFDS3VJeUplOW5JR0FIRXIzd2lDMTZObEx2STh5bHRFdGhSNmMzMU9NdlVXSnZDT05JSVRVV3o0dG9mRVhGYWkvVkVYNXdDcXBvc3lMQUxnZno2eTVya2RtWnBMQzNLZVpxYy9mSmo2ekNhMW9QdVNHa2ZDQ2NKVWZ5RUo3VkprYXRFVjVqek5Ubi80TVBXeGhRSGVqWlhXVklPRHpVb25BUUFmREYrVGttOWhaWjBtYTFQTnZNelBUaTM1ckYrN0J0RlJWY0pDUWdKSG1LVG1kVVVDdGo1Y0E4MmsrY0swTDVYRUlCMHZ5OHR6Szc4YytHR2ptS3BWS29lRVZPcnluZ1VlQ3BaU3p6eDB1QUNjQjRBaW9NSGdIL2MvTEdhQktjRXlGcG1LUEordkhWVGRIY2c5SmFmNWovUml2emozTk9GcVdVUzY0QzNJMXlpRndNdklNMi9iaUZoUElEY3FaSUxydktYVFBCTWR6M1lxRGpWaHJUL2RrV0htWmV3clkxOGd2V0JoYlNYd2xSN01JeDMzVkl0VHdWWDFLZWw5YXlIY2prcGloSmxXL0crOEd2akdNN0l1OXBSS296dm8yRGJhK2RpcnFnejdyNGdIL2kxZm5xZHBEN29wZ0g5ZjZZMjFVZExDUU9TZTUwbTRYQ2xBcTBJcHFIY2crZWtRTmZCditwNE5XcFo0UzZQSmJlUTA5blJPQU9EYTVTU1BKSzFzMVhwRnlta0RMRWRZSlJmL2xsTGFRV3l3aUpiWG5KMW1QVW9oUEoxVTJCZFlkdFl6UXR1R1lDbDBlb2pjaGZGT0N5Qm9MeTNGWDRDbmtkTHFZeUl0QUtaelVFUzdHUGxjcHVDZm9odHNKbUdpTjdQZVJaSm9VVVRhcW1ZeUhsa2hIbzRUbldyVVN5UStxK3JFb0ZFZTZXRUlUYldUOUNwT1dsT1JhdXJOUkwxTG9OQTAwbEVYTnZBTEtUV0NuYWNybThnc212VkhGYVBvV3lpSlFSYlNlR0M2V0FDODEwc2hyb0RmUzVDYTR1L00zRStSTXNKb3lxMms0dGJTK3BaVTFKeEpWTFpBSWFta080R01taFZRY0M0enIxVnJJcGdvMTlDdzlBczFrOGhqS0kwcFNEVjJaMUlwUlFncy9MbVNtSm9mUi9waEZ5ZmhQck03QzlVTzBxTlFHdnhMd3FuUytwVlUycGJKZEp0QWxlNlI4aHN3Y3RsRHltM0x5SE9SRlMrM1lRRmRTbWlvKzlXWFFlUHpLSkhQU09ZQlRJWWFCVUU4MTFVdGx1QTV1Y2h6QllndkxVZ0tYZ3VzVDdvd2NEdEJ1aDNBNDAvYVBxMmtmaURoWkJaVjc2TkFQdGRKK0RrajZGNUN3WnUxbVZSYVpVSEVsNU5jR0hnZTRZSFdReTJWUEFLbVAwR3BmRXpDNzFnRVhVU0I4UDJhQmdveGVBMjdpcnhuU0NCdjV1UXBJcHc2eXBma3U4S0srR3dBdjhaNXBDTXVQR2JSQ2p0SWFqcnRwQzgvejQwb2xNc1JXbklvSTlkZEpMelJuRUc5dytqUXNEeU1IL1RYOFVCOHM3cXRENWM2YXRJbEMwcG1xSlYwTTR5ZmRnRUtocGl6cUpGYUtQK0VFMGJrYlJra0FiSG0xS0FFYjBIN2dwbGVQQUwzSTNrKzhCeGpJK0dWMmdTM1J1NWk2MnNpV1g3Vjh2RmZhaEZNc1ltR0svMEpRWFVVWE5Bc2w0VFBQdmJsNFRNbEc3blB0K0RudG9NWFl0R2wrZU02dFd6WmZzanMzZGxXWkNtYVZzVWtYT25CeC9NWG94Z1E4emIzQ2hCQUhmdkZGU015Zk5kRXRsNVN3dmVoWTh2K1prcEszQjRrbXdieTZhU25ZZHJzNXVHQmdhRnhIVDg3ZkNsSWJEVnpTV2lZSDByU3RqMWlROEhnSng3VzAyUHFoZ1JXQ3EvZis2ZWJ5NEE2eDBaQzg1blJWVlFjbXNqUnA4MUlmVDVPeXdjYVB1Vm5yeTh1S3JVZ2E5RlVma1N6cklzaXFacnN0cUE0RVBYSnYzY0tVYkh3cURsMngzTmtteG5oQktLT0lERnZUYzhxN2lwUWFBS2EvcFNGOUh0aGZHSnllQ0Mrejd4MzcxR3VEdkZlSmJHNUhhRWhKayt2N2FOV2dOTEZ2L2FvM1FYSW04a0lLdzNSK3ZyUjNmdVorU2JFMVNUZkF6UkVTOGJPdWFONmRlczM0YWQ5V1Jia2FmaFJ4UWNtR3BnSUt4clZSaHJpL1prTi9EUUtVR3A5WXhNMjV5RnZBUkN4OU1HT3IzdlVDblpYTzFMNVJiWVlPZTkwamhWWm4vV1F2NXJua0c3SU9yMXIzYWFEdHdxUjd5emc2M1dCRi9HdTZHQ2NoUWZpcTJ2L2JWaTM0M0JLbmhVWk1tbVF6NGRLZzloYlBPeHRKb01aV1JhUEFkN2FlVGFaZ3Q0NkhvaHZrZzlzWExjOUtUbkhqQXlGc1Rma3BaN1p0Mzd4dk44L2dKcm5ueFRaVU1qVklIdjFicUE0cjRieWdqOWtKUEFDTC80bDJRSjVueGNKTkUvbngxci9wWklmK0d3UWdiVlFFaDc3ZWZIWHA5bEV4RzN1QkxHdlVlQXY1Sy9ESzNHODdnejhXNytURCtqeFRxZ2wvd2dFMzRnRjJqNFVoMjZXR2xnR2JMQUpsclJNRXRBOFI2aXRYNkVVQmtEbGRJRU0zZVFQK3I4VVE5RUVZT2l5VTBhVWN5M0NuQTc1V2FocTZXS0IrRXRpS0ppdUJyWStmK2tFdWxodHRqUmdpazZZbEtyanBZQVR3UGVHUUMraW5RQjBmU2pjMjhsS0Z0RHNwWHlBK3dLckVNbDE0RmVoNEJPeldLREtPb05nai9vcGdMVm1UTFlnaDJ2QXQ2VFN0dUpSenpVSThhZzVUSkxFTEhBN0xkQkZMMmNBZFJPdEF0M3BCWXdubGNvSGVQeGN3dTVjWFJDQngxclJnT3VZKzhJWWQ5WUNJZXR1TFdWVzhHY2w0RkhjUWp5Zy9ieUFYVW9Ma01pdjRISkVvSlhnRk1EbjB6UWhYaTJvQ3F6Vm54YklCNmdHMzJaVXNqSWN4QUNWMWxuRUFoRDV5Mk4ybHFzZnVZT3dybjBPbFRBcDN0OUJDUUEva0FyalJRU0ticGNaR2JkRmcxVCtBZTFCZ1NhSVpUUktNQythQWxCMTdtMGpHMnZtd25nbHNGZDBPMjltY1MrUXE1V2VORmNnZ0lqdjAyMzhkQ2Y2YWdFQWZxZmNEV0FESHRNem1LeGlBaEE5TzFuUDVOM3hNWUVndkVlWGRWbG1IcWFNVlIzZHdQNVAwcXVhUEhyYlNKL3lBZ2orNnA2Vm4vSFNDSGNBZ0NrVUZNOWkwT3dYcHJDcFdGcXVFZi9hZWNFMGdPQStpNis5TWRPc2hmYzJqWW9DZ1FOR0p1YVlhYWFYaDBkb3VLb3ZXME5jMTFNd2dNZ3BTUzlNRkgzYTJoNWU0TEQvdWpXYzY3NzNaQVJRZmRhbEFodE5sN0d4SlNPQXdCNExyK2RiU09iY016KzA5QUJ4S3FNR3pUditLSzlZWjlDWDVLZWYrS2QvRlFVNFhrNTZHc1dqM3FvMXhMVWRHQUJVSHJQM2laRml6TjQ2MEI4Y3RsdTdobnUxZUJhQzVxQXd0d1BGSXBlKzlRYk9YTFh2elBXYktUZk9IVmo3N2ZBbVFVb1FvVXZjb08vV0oxMUlUcmw1OWZqT3hWLzFqWFVGS2J0RTkvOXUwOUdyTjI5ZU9iejJtNjdoU2hDNVQrT3hmMjQ3ZGprNUpmblNvUzEvVGVzUW9RSWhmUnNNL1g1RDBzWGtsT1NMQjlmTzdsL1RBMFR0R2xxclZjZXVuZHZXQzNNRG91WS8wcDFBSHFMVVZPMDFhOTNoS3pkdlhqMjZZVTZ2U0RVd0ZjOWZvRDBpekhxRmMzR29kdmZ4OC9QMTBJQ29GVnBQWHo4L2IxY1Z5S0xDeGR2UHoxc0xVbFc2ZXZ2NitYcHBGU0JLaGRiTDE4L1hTd015Nlh1ZGRNSlZmUFlLRjI4L1AyOFhCVEFYenkvZ2VsS1lpVkN1R3BORFdxdVFodkRpbVFuZVZ3VEpiMUMrMHM5RW1nbk9iU3dFUHhEa2duZjV5aUtrR25zN04xTnZxUHBja0QrZ1hMWHlBOUtMYU9mMnZoazBMQkJDMzdWOElYNkVXcUJwVnRJSmQrZjJyQ3IwTUFweEw2UmNJZWlVL2hkdlFhbzlRUEozNE55dSs4SmtGSEk1bENlcS9rYTA3b3dXd0dNamt0KzNjbks3MVBDWEVNYSs1UXBEaWhFUjd5ZTRzSEwvMjBJNzdlWGtmZ0xOZmlFZWhKVW4xRWxEaDdvdFRaUk1JdGVaa1d5YkFzN05NaGlDN2dteEdNb1JmUThnZDk2eVpxNjhBc2ZkUVo1M3dweGNYaDFvVkNCQVNhZHlCTVgzTmdMaTI2UlBtZ1JwT2JUQnJiNjlZVWFlMWsvQXlWM3hnWkZXQVM3NmxpUDBLa1MraGZlU1Z2NDhkOWJjbjFjbVBTaEMvcWNEbk4wU2dNVW80RmRRZmxqOURvcjc5WWZnNUN3SjRIMUpnR2V4NVFmZTIxRGM1aS9CMlQyckFRM3lCVml0TEQvb1ZpS3laVzVPYjY4R3BpTDdvZytoL05CcjlqdFJyZlVGWjJlYkRKcTlBaHgwRTVkQ3lhbmdvK1IycEZBeVZEaFFLSW1LTWdoUTlFOFZqMm1KTHppOUYzRVEvWnlkY1RDSWUrak9iUTYzYjQ2bmpkKzV6ZUgyZFRYc2xKL3MzTVo3eDZJQXUxYmJ0bTl6dkgzTDhwOG1mQmpwVXJZQUVMT2hWQ1N2UG5NRjU3ZERBeE50N003Nml1d3Y1UDZiRkppQ25Mb1dEbllpdzJjUmRoOGh6OUxzeEU5cWxDMkFTNzl6RmhGWWpyVUd1UmVGYVRDNEppSnowMGNnOGo4SXQ0SW8zWFJjNzVzNzJNWWkyOEVJS3cvNzdOOGl5eFFBL01lYzFRbGtUWjdvQy84TDNBcUd4dm5zenZwSlI5K0xzaFFsaFhpbmo2Sk1BY0NuKzZwSGVuYnZUbzRQQmljb2lqa0F2eUp6UXdKSUIxY291Q3FuU2cwTEppdkxGZ0FVbGJ2OWtKVDIzc3JMOE96NHR5MDl3U21LNFdrc1ZIN0FMc2xUU28vQ3VRYWJXTm5NVkd0R09NbGlOcHV0Rkh3L3ZLekIzcVZ5czZGemx1ODdlKzNPdy9SSGQ2K2QzYlZ3ZXRmcWJ1QXN4YkJBQVJPdHpONTFBb25ZN013SkhLcU5pSWcyRmxjRzl1dFA3T0pHS2ZpNGIvOEJReitlZCtvTkIyYlhLNE53clBid0NRZ09EUW4wY1ZlQlV4VkJiZ1B3dTRETVY2bWw4dUlsSXVJbWxhUHFqKzBlNkJqc0FZYU9jcXFEUS9mNGYvSWM0U1p0V1lYVEZzRWlCUXcxTXN1dUNWSzV2c2Z1U1hWSDQ2eUlXTHl3bU1GZU5iUGNHRWNBMEM3RjBiczI1U3pQNm9EUGFXUnQrUXdrYzJtaUNSR3Q0eHhvOXlFaUpuK2trd2cwZXVRQTU1ZXovQWd3MHNUc3NLOTBydFJKUjBUY3A3V3JrMnYzWjJjOWd6MGdDaGhwY0hEZHIxemxWamdFWDBQV09jMUJPdGY4TnRqbDFMYjdEQkd4OU1NT0xHNU5tMEtjRk1YTzk2S0QxM1hLVXd3ZkFYeGpZMlg1Q3FUa2tXQkdSUHdVQUR5TzI5M3c2Y1NDYnU3RERuNXpZT2hXbnJMTkRlbzhSdFo3dkNUbDlVR20zVEYzZ0tadjdmNkF6a0taaEJodHM3TU9MMGZKcUEwdW01QjFhaHhJeWtlNTJlNXRZNER2RUJHTDIwTVhDUTAwMitHWThoUDlhSURoT2xhRi9VQmlNTUtDaURnWGZDL2JYZldUMUZDcm5XMTArY2tLRjRoT1JjYm1XUXJKVmMyMnUrRFJ2dGp1SnhETzFsZUFMOUhlTXJqYzVGd1llR3hEMXF2ZFFYS3FyWFpGYmY1QVJIemZpbEg2Z25uYzgvK3V6VTY1MlVGeDYvS1N6SGlBTDgyc0RnV0I5R0NVRlJGeFhZcmRCVzlHZTVYQW4wbU5iQWVaVmNwSjN2UUI2UDRHR1YrcERuSlEvWWxkcWRudVcyQ2xGb1hpVDNTNFcxTStVandPb000RFpIeXZJY2lDZXJ1ZHc4Sm1rdnJvblFQekNDZ1hLZjVNQ2VHbmtmSERGaUFQTU5iS2RkcFRRdjVmNTZQRGk0SGxJcS9IS1NGd056SisxQnJrSXZvWjF3eVFoRkxsR2hULzZVVUxPaXp1RCtVaDZiMEEvRFlpNC9zdFFEWTB1emp5NDVrOTJiaWV1dWtMTlVHM2IvMzZMYnRQM0h1TDNIK3B5ME5PTndUd1g0K01yOGVEZk1CNG02Tmo3c3o0SHRVU0dHNzBoZklQL2JKUWdPQXR5UGg0RE1oSjdITkhYNEJJRGdsZ1dPSVA1Ui9wbzdRQU5RNGlXOHVHTUpBVjdWNEhlZlVsOTNDc0M1Ujc2RGZIQVVEckc4aTI2SHRQa0JlWWFMTTc1T3JJWUZja25JMlhPZlduYWxBZXlTZDVxQ3VBeTRRWHlEWXpRUWt5K0R0YXJWYTg0aWp1dWMxcXRVd0RoNTFMclZhcnJkRFJWclR5eHlTNzRXWXIwVnlhZStQZlllRlFQa25MbWgwS0FGWC8xU05UMjZINklJdjFoeVVrSkF6dHJIR2c3VEkwSVdGUXNLUFF3UWtKQ1VNSEJ0b3BXZ3hMNEQrc3JSSUFJaE9vQTlySCtTbWd2SktTL1dzMEFMaVB2STlzODcvMWc0cVZITVUzNXRRQUFIWGJmUVprYWp2N29RSXFXQnBNeFRrcE83OXBHd0FBcm0wMkZDRGJsM01Db2NMbHNONHRZd0pVQUFCaHcvWVhJdHZTYlkyZ3dxWnJ0UUhMVTgzSTFueW1yeXRVeEt4Y3ZYN244Zk9PUFRVaFkrdU5jWDVRTVRQMVJiNGUyWnV2VGdxQ2lwcG1GRkIzYWxRZ1ZOdzBzbnUxcFljWFZPUmtwYnYrYlQwMVZPeGtZbnEwb25zQVZQamtaM2k0WmxDNEFpcUEwbXo1Ri8vdUdhYUFpcUZjdG9LVWRSTWFlRVBGVVJPaXJlVHg2Y1ZqNGdNVVVLSDA3ZjJkczN0RmUwTEZVd0JXVURnZ2JnSUFBTEEyQUowQktsZ0NuUUErTVJLSFFxSWhET2ZpQUJBQmdscGJ1RjBoZlB3RDhBUDBBL2dDZjJsWUhnRCtBZmdCK2dIOEkvZXZ2aEtBQlJCVVBGZFcveDJUTEhhY1hoV1Bjc0RJeENmL1ZRYTFhQlZZMEtNUW4vMDNuME4vZnFFWDBPUktQTHBDMkRXcmdwT2ZaNjRBZjludElGQ0Y0Zmp5bzdmZmlNR3AwY2ZjcnczYkVuYVplaXNhd0NwZjIvbGpRQlFnQzdrQllZMVp2NHprTmFZU1hiQUh3Ris2cFVtSWROV0xTd1kybmN3SE81QnJvd1N3NmIxMDlQSDM5clVqL1MrN01vcjJ6OXl2azBQTVFuek5PcVlnUiszM0RqdXBhRmc0WGo3cVRycWN4dFc0aUMrK3FLN2ZwTVd0cHZya0k0YjcvL3NlQnBERzZpb25FUmxoUnZZcGdQNU5vNW5Zakl3THJRejZJSUdPdTRWa2t4Q1FPWWk0Q1B6ZGdwUmJtUVhMYUo2ZkVQRjE2OCtxZ29qN2VTZndmc2Q1YUxLdTR5dElnRDQwMUFPWlZNNUpYZkxvZ3JIc21KZklJdFRGU2dRUktsTVdYd2llbENmalZXb3IxYzhRV29UeFF6U2hKVStFT2M5bW13OUlmeVZwdXdpMWNPUHVXQmtZaExYUHdhZUxLK0dPU1ltQ055UGQ5RDI5TEhMNkpMV0hoWlRGcFk1K0VDQWt0WWVQSHZPWENEOCsvUStZYXJIUHdnUUVsckR3c3BpMHNjL0NCQVNXc081Z0FQNy9QWi8vKzRmLy83aEgvLy9iL2t5RWEvUjdmUUwwLy9aMk1UOGxBWDhsaWZ5WVIrU2tEOGsrcCtUYWYvMGNCNWhNWCtTZmMvSlQ1K1NkZWZrMDUvSmNmNU5MUHlXTS9KZW41SjBEK1RkZjVOU1B5YjUvSnFwK1RRRitUTmUvSnI1K1RpSDVOTWZ5Wld4L0pXRDhtVkpmOG00L3lacVg1T1VzMjV6aFdma3VuOG1ZWS9KbHBUTnVhM24vNjJpYitUS2puOTVuLzVpL21QODFlWlkvOGNILzhka1hoZi9sYUxYOEpNQUFBQUJZVFZBZ1hBY0FBRHcvZUhCaFkydGxkQ0JpWldkcGJqMGk3N3UvSWlCcFpEMGlWelZOTUUxd1EyVm9hVWg2Y21WVGVrNVVZM3ByWXpsa0lqOCtJRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJa0ZrYjJKbElGaE5VQ0JEYjNKbElEY3VNaTFqTURBd0lEYzVMalUyTm1WaVl6VXNJREl3TWpJdk1EVXZNRGt0TURjNk1qSTZNamtnSUNBZ0lDQWdJQ0krSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0lEeHlaR1k2UkdWelkzSnBjSFJwYjI0Z2NtUm1PbUZpYjNWMFBTSWlJSGh0Ykc1ek9uaHRjRDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3THlJZ2VHMXNibk02ZUcxd1RVMDlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2ZUdGd0x6RXVNQzl0YlM4aUlIaHRiRzV6T25OMFJYWjBQU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDNoaGNDOHhMakF2YzFSNWNHVXZVbVZ6YjNWeVkyVkZkbVZ1ZENNaUlIaHRiRzV6T21SalBTSm9kSFJ3T2k4dmNIVnliQzV2Y21jdlpHTXZaV3hsYldWdWRITXZNUzR4THlJZ2VHMXNibk02Y0dodmRHOXphRzl3UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzQm9iM1J2YzJodmNDOHhMakF2SWlCNGJYQTZRM0psWVhSdmNsUnZiMnc5SWtGa2IySmxJRkJvYjNSdmMyaHZjQ0F5TVM0eUlDaFhhVzVrYjNkektTSWdlRzF3T2tOeVpXRjBaVVJoZEdVOUlqSXdNakF0TURjdE1ERlVNVEU2TVRjNk1qVXRNRE02TURBaUlIaHRjRHBOWlhSaFpHRjBZVVJoZEdVOUlqSXdNakl0TURndE1qVlVNVE02TlRrNk1UZ3RNRE02TURBaUlIaHRjRHBOYjJScFpubEVZWFJsUFNJeU1ESXlMVEE0TFRJMVZERXpPalU1T2pFNExUQXpPakF3SWlCNGJYQk5UVHBKYm5OMFlXNWpaVWxFUFNKNGJYQXVhV2xrT21Fd1lqazBNV1ZrTFRNNE5EUXROREkwTUMwNU5qZGhMVEUwWmpBeFpUWmxOR1k0TVNJZ2VHMXdUVTA2Ukc5amRXMWxiblJKUkQwaVlXUnZZbVU2Wkc5amFXUTZjR2h2ZEc5emFHOXdPbVJtTVRVMk9EVXlMV1kwWXpRdE5URTBZUzA0TkRVMUxXSTRPRFF6WmpsbU1qQTVZU0lnZUcxd1RVMDZUM0pwWjJsdVlXeEViMk4xYldWdWRFbEVQU0o0YlhBdVpHbGtPamhoTkRKa1pqRTBMVFptWkRFdE5qTTBNUzA1TVRJeExURTJaRFU0TlRsbU5UQXpaaUlnWkdNNlptOXliV0YwUFNKcGJXRm5aUzl3Ym1jaUlIQm9iM1J2YzJodmNEcERiMnh2Y2sxdlpHVTlJak1pUGlBOGVHMXdUVTA2U0dsemRHOXllVDRnUEhKa1pqcFRaWEUrSUR4eVpHWTZiR2tnYzNSRmRuUTZZV04wYVc5dVBTSmpjbVZoZEdWa0lpQnpkRVYyZERwcGJuTjBZVzVqWlVsRVBTSjRiWEF1YVdsa09qaGhOREprWmpFMExUWm1aREV0TmpNME1TMDVNVEl4TFRFMlpEVTROVGxtTlRBelppSWdjM1JGZG5RNmQyaGxiajBpTWpBeU1DMHdOeTB3TVZReE1Ub3hOem95TlMwd016b3dNQ0lnYzNSRmRuUTZjMjltZEhkaGNtVkJaMlZ1ZEQwaVFXUnZZbVVnVUdodmRHOXphRzl3SURJeExqSWdLRmRwYm1SdmQzTXBJaTgrSUR4eVpHWTZiR2tnYzNSRmRuUTZZV04wYVc5dVBTSnpZWFpsWkNJZ2MzUkZkblE2YVc1emRHRnVZMlZKUkQwaWVHMXdMbWxwWkRwa01EazVZV1EyWXkxaE1qWXdMVGhsTkRNdFlqUmtOeTB5TnpNek5Ua3lPVE14WVRZaUlITjBSWFowT25kb1pXNDlJakl3TWpBdE1EY3RNREZVTVRFNk1UYzZNalV0TURNNk1EQWlJSE4wUlhaME9uTnZablIzWVhKbFFXZGxiblE5SWtGa2IySmxJRkJvYjNSdmMyaHZjQ0F5TVM0eUlDaFhhVzVrYjNkektTSWdjM1JGZG5RNlkyaGhibWRsWkQwaUx5SXZQaUE4Y21SbU9teHBJSE4wUlhaME9tRmpkR2x2YmowaWMyRjJaV1FpSUhOMFJYWjBPbWx1YzNSaGJtTmxTVVE5SW5odGNDNXBhV1E2WVRCaU9UUXhaV1F0TXpnME5DMDBNalF3TFRrMk4yRXRNVFJtTURGbE5tVTBaamd4SWlCemRFVjJkRHAzYUdWdVBTSXlNREl5TFRBNExUSTFWREV6T2pVNU9qRTRMVEF6T2pBd0lpQnpkRVYyZERwemIyWjBkMkZ5WlVGblpXNTBQU0pCWkc5aVpTQlFhRzkwYjNOb2IzQWdNak11TkNBb1YybHVaRzkzY3lraUlITjBSWFowT21Ob1lXNW5aV1E5SWk4aUx6NGdQQzl5WkdZNlUyVnhQaUE4TDNodGNFMU5Pa2hwYzNSdmNuaytJRHh3YUc5MGIzTm9iM0E2Ukc5amRXMWxiblJCYm1ObGMzUnZjbk0rSUR4eVpHWTZRbUZuUGlBOGNtUm1PbXhwUG1Ga2IySmxPbVJ2WTJsa09uQm9iM1J2YzJodmNEb3haVGcyWW1ZeU5pMHpZemsyTFdSaE5Ea3RPR0UxT1MxaE9EVXhaall6TUdWaU9HSThMM0prWmpwc2FUNGdQSEprWmpwc2FUNTRiWEF1Wkdsa09tTTRNemd4TWpsaUxUVTVZekl0WTJJME9TMWhPREpqTFdFMFlXVmtZbU5sTjJaaE16d3ZjbVJtT214cFBpQThMM0prWmpwQ1lXYytJRHd2Y0dodmRHOXphRzl3T2tSdlkzVnRaVzUwUVc1alpYTjBiM0p6UGlBOEwzSmtaanBFWlhOamNtbHdkR2x2Ymo0Z1BDOXlaR1k2VWtSR1BpQThMM2c2ZUcxd2JXVjBZVDRnUEQ5NGNHRmphMlYwSUdWdVpEMGljaUkvUGc9PSc7Ci8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBBIExJR0EgTUVEIMK3IEFUTyBGSU5BTCAyMDI2IMK3IHByb3TDs3RpcG8gZnJvbnQtZW5kCiAgIERhZG9zIGRlbW8gZW0gbG9jYWxTdG9yYWdlIChwcmVmaXhvIGFmXykuIFRvZG8gYWNlc3NvIGEgZGFkb3MKICAgcGFzc2EgcGVsbyBvYmpldG8gYHN0b3JlYDogYSBmYXNlIDIgdHJvY2EgZXNzYXMgZnVuw6fDtWVzIHBvcgogICBjaGFtYWRhcyBTdXBhYmFzZSBzZW0gbWV4ZXIgbm8gcmVzdG8gZG8gYXBwIChwYWRyw6NvIERlc2FmaW8gMjEpLgogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyogcG9seWZpbGwgZGUgU3RyaW5nLnByb3RvdHlwZS5wYWRTdGFydCAoaU9TPDEwL0Nocm9tZTw1Nyk6IHVzYWRvIG5vIGNvdW50ZG93bgogICBkYSBMUCBlIG5vIGNyb27DtG1ldHJvIGRvIHNpbXVsYWRvOyBzZW0gZWxlLCBUeXBlRXJyb3IgZW0gYXBhcmVsaG8gYW50aWdvCiAgIHRyYXZhdmEgbyB0aWNrLiBBdWRpdG9yaWEgMTEvMDguICovCmlmICghU3RyaW5nLnByb3RvdHlwZS5wYWRTdGFydCkgewogIFN0cmluZy5wcm90b3R5cGUucGFkU3RhcnQgPSBmdW5jdGlvbihsZW4sIHBhZCl7CiAgICB2YXIgcyA9IFN0cmluZyh0aGlzKTsgcGFkID0gcGFkID09PSB1bmRlZmluZWQgPyAnICcgOiBTdHJpbmcocGFkKTsKICAgIGlmIChzLmxlbmd0aCA+PSBsZW4gfHwgIXBhZCkgcmV0dXJuIHM7CiAgICB2YXIgZmlsbCA9ICcnOyB3aGlsZSAoZmlsbC5sZW5ndGggPCBsZW4gLSBzLmxlbmd0aCkgZmlsbCArPSBwYWQ7CiAgICByZXR1cm4gZmlsbC5zbGljZSgwLCBsZW4gLSBzLmxlbmd0aCkgKyBzOwogIH07Cn0KCi8qIC0tLS0tLS0tLS0tLS0tLS0gam9ybmFkYXMgLS0tLS0tLS0tLS0tLS0tLSAqLwovLyBDYWxlbmTDoXJpbyBFTkFNRUQ6IG9maWNpYWwsIGV4dHJhw61kbyBkYXMgcMOhZ2luYXMgZG8gV1AKLy8gKGF0by1maW5hbC1yZXNpZGVuY2lhLW1lZGljYS0yMDI2ICsgb2JzZXJ2YXRvcmlvLWVuYW1lZCkgZW0gMjkvMDcvMjAyNi4KLy8gQ2FsZW5kw6FyaW8gUmV2YWxpZGEgMjAyNi4yOiBQUk9WSVPDk1JJTywgZXNwZWxoYSBhIGVzdHJ1dHVyYSBkYSBlZGnDp8OjbwovLyAyMDI2LjEuIEF0dWFsaXphciBxdWFuZG8gbyBJTkVQIGNvbmZpcm1hciBhcyBkYXRhcy4KdmFyIEpPUk5BREFTID0gewogIGVuYW1lZDogewogICAgbm9tZTogJ0VOQU1FRCAyMDI2JywKICAgIGxpZ2E6ICdBdG8gRmluYWwgwrcgRU5BTUVEJywKICAgIGluaWNpbzogJzIwMjYtMDgtMjYnLCAgIC8vIGEgam9ybmFkYSBjb21lw6dhIG5hIEF1bGEgSW5hdWd1cmFsICgyNi8wOCwgMTloKTsgbyAxwrogY2hlY2staW4gc2VndWUgbmEgUHJlbW9uacOnw6NvICgzMC8wOCkKICAgIHByb3ZhOiAnMjAyNi0wOS0xMycsCiAgICBwcm92aXNvcmlvOiBmYWxzZSwKICAgIHBhcnRpY2lwYW50ZXM6IDE0ODIsCiAgICAvLyBUw610dWxvcyBlIGxpbmtzIG9maWNpYWlzIGRvIGUtbWFpbCBkYSBjb29yZGVuYcOnw6NvICgyOS8wNy8yMDI2KQogICAgLy8gZW4wMCAoc2VtYW5hIDAgPSBBYmVydHVyYSk6IFNFTSBwYWxhdnJhLWNoYXZlIGUgU0VNIHF1ZXN0w7VlcyDigJQgbsOjbyBlbnRyYQogICAgLy8gbmEgcsOpZ3VhIGRlIHBvbnRvcyAocHJlc2Vuw6dhIHNlZ3VlIDEzIGF1bGFzIMOXIDQwKS4gTyBsaW5rIGRvIFlvdVR1YmUKICAgIC8vIMOpIFBMQUNFSE9MREVSIChyZXBldGlkbyBkYSBQcmVtb25pw6fDo28pIGF0w6kgYSBsaXZlIG9maWNpYWwgc2VyIGNyaWFkYS4KICAgIGV2ZW50b3M6IFsKICAgICAgeyBpZDonZW4wMCcsIGRhdGE6JzIwMjYtMDgtMjYnLCBob3JhOicxOTowMCcsIHRpdHVsbzonQXVsYSBJbmF1Z3VyYWwgwrcgVHVkbyBzb2JyZSBvIEF0byBGaW5hbCBFTkFNRUQgMjAyNicsICAgICAgdGlwbzonYXVsYScsICBzZW1hbmE6MCwgcXVpejpmYWxzZSwgeXQ6J2h0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9eUppa1lRSi1JNEkmbGlzdD1QTGIySUVvdEtjWUlVJmluZGV4PTE2JyB9LAogICAgICB7IGlkOidlbjAxJywgZGF0YTonMjAyNi0wOC0zMCcsIGhvcmE6JzA4OjAwIMOgcyAxNjowMCcsIHRpdHVsbzonUHJlbW9uacOnw6NvIEVOQU1FRCAyMDI2JywgICAgICAgICAgICAgICAgICAgICAgICAgIHRpcG86J21hcmNvJywgc2VtYW5hOjEsIHF1aXo6dHJ1ZSwgIHl0OidodHRwczovL3lvdXR1YmUuY29tL2xpdmUvRldXZW5iSDZJOW8nIH0sCiAgICAgIHsgaWQ6J2VuMDInLCBkYXRhOicyMDI2LTA4LTMxJywgaG9yYTonMTk6MDAgw6BzIDIxOjMwJywgdGl0dWxvOidIb3JhIGRhIFZlcmRhZGUgwrcgR2luZWNvbG9naWEnLCAgICAgICAgICAgICAgICAgICB0aXBvOidhdWxhJywgIHNlbWFuYToxLCBxdWl6OnRydWUsICB5dDonaHR0cHM6Ly95b3V0dWJlLmNvbS9saXZlL244cjJXMjBueGxjJyB9LAogICAgICB7IGlkOidlbjAzJywgZGF0YTonMjAyNi0wOS0wMScsIGhvcmE6JzE5OjAwIMOgcyAyMTozMCcsIHRpdHVsbzonSG9yYSBkYSBWZXJkYWRlIMK3IFBlZGlhdHJpYSBQYXJ0ZSBJJywgICAgICAgICAgICAgdGlwbzonYXVsYScsICBzZW1hbmE6MSwgcXVpejp0cnVlLCAgeXQ6J2h0dHBzOi8veW91dHViZS5jb20vbGl2ZS9YMjdZUFZqVnA2NCcgfSwKICAgICAgeyBpZDonZW4wNCcsIGRhdGE6JzIwMjYtMDktMDInLCBob3JhOicxOTowMCDDoHMgMjE6MzAnLCB0aXR1bG86J0hvcmEgZGEgVmVyZGFkZSDCtyBDaXJ1cmdpYSBQYXJ0ZSBJJywgICAgICAgICAgICAgIHRpcG86J2F1bGEnLCAgc2VtYW5hOjEsIHF1aXo6dHJ1ZSwgIHl0OidodHRwczovL3lvdXR1YmUuY29tL2xpdmUvZE1JdGN5cGFleUUnIH0sCiAgICAgIHsgaWQ6J2VuMDUnLCBkYXRhOicyMDI2LTA5LTAzJywgaG9yYTonMTk6MDAgw6BzIDIzOjAwJywgdGl0dWxvOidIb3JhIGRhIFZlcmRhZGUgwrcgQ2zDrW5pY2EgTcOpZGljYSBQYXJ0ZSBJJywgICAgICAgIHRpcG86J2F1bGEnLCAgc2VtYW5hOjEsIHF1aXo6dHJ1ZSwgIHl0OidodHRwczovL3lvdXR1YmUuY29tL2xpdmUvRjFWUTBpb2hNNmsnIH0sCiAgICAgIHsgaWQ6J2VuMDYnLCBkYXRhOicyMDI2LTA5LTA0JywgaG9yYTonMTk6MDAgw6BzIDIxOjMwJywgdGl0dWxvOidIb3JhIGRhIFZlcmRhZGUgwrcgTWVkaWNpbmEgUHJldmVudGl2YSBQYXJ0ZSBJJywgICB0aXBvOidhdWxhJywgIHNlbWFuYToxLCBxdWl6OnRydWUsICB5dDonaHR0cHM6Ly95b3V0dWJlLmNvbS9saXZlL1ZwLXpCSFZidkdFJyB9LAogICAgICB7IGlkOidlbjA3JywgZGF0YTonMjAyNi0wOS0wNicsIGhvcmE6JzE0OjAwIMOgcyAxOTowMCcsIHRpdHVsbzonU2ltdWxhZG8gRklOQUwgRU5BTUVEIDIwMjYnLCAgICAgICAgICAgICAgICAgICAgICB0aXBvOidtYXJjbycsIHNlbWFuYToyLCBxdWl6OmZhbHNlLCB5dDonaHR0cHM6Ly95b3V0dWJlLmNvbS9saXZlL1llM2lRanludGRFJyB9LAogICAgICB7IGlkOidlbjA4JywgZGF0YTonMjAyNi0wOS0wNycsIGhvcmE6JzE5OjAwIMOgcyAyMTozMCcsIHRpdHVsbzonSG9yYSBkYSBWZXJkYWRlIMK3IE9ic3RldHLDrWNpYScsICAgICAgICAgICAgICAgICAgIHRpcG86J2F1bGEnLCAgc2VtYW5hOjIsIHF1aXo6dHJ1ZSwgIHl0OidodHRwczovL3lvdXR1YmUuY29tL2xpdmUvbnFNSG12REh2TDgnIH0sCiAgICAgIHsgaWQ6J2VuMDknLCBkYXRhOicyMDI2LTA5LTA4JywgaG9yYTonMTk6MDAgw6BzIDIxOjMwJywgdGl0dWxvOidIb3JhIGRhIFZlcmRhZGUgwrcgUGVkaWF0cmlhIFBhcnRlIElJJywgICAgICAgICAgICB0aXBvOidhdWxhJywgIHNlbWFuYToyLCBxdWl6OnRydWUsICB5dDonaHR0cHM6Ly95b3V0dWJlLmNvbS9saXZlLzMyaXlNWWtKSy1BJyB9LAogICAgICB7IGlkOidlbjEwJywgZGF0YTonMjAyNi0wOS0wOScsIGhvcmE6JzE5OjAwIMOgcyAyMTozMCcsIHRpdHVsbzonSG9yYSBkYSBWZXJkYWRlIMK3IENpcnVyZ2lhIFBhcnRlIElJJywgICAgICAgICAgICAgdGlwbzonYXVsYScsICBzZW1hbmE6MiwgcXVpejp0cnVlLCAgeXQ6J2h0dHBzOi8veW91dHViZS5jb20vbGl2ZS91OU1nTkpadU5HOCcgfSwKICAgICAgeyBpZDonZW4xMScsIGRhdGE6JzIwMjYtMDktMTAnLCBob3JhOicxOTowMCDDoHMgMjM6MDAnLCB0aXR1bG86J0hvcmEgZGEgVmVyZGFkZSDCtyBDbMOtbmljYSBNw6lkaWNhIFBhcnRlIElJJywgICAgICAgdGlwbzonYXVsYScsICBzZW1hbmE6MiwgcXVpejp0cnVlLCAgeXQ6J2h0dHBzOi8veW91dHViZS5jb20vbGl2ZS9lWjh6VXBzQkViUScgfSwKICAgICAgeyBpZDonZW4xMicsIGRhdGE6JzIwMjYtMDktMTEnLCBob3JhOicxOTowMCDDoHMgMjE6MzAnLCB0aXR1bG86J0hvcmEgZGEgVmVyZGFkZSDCtyBNZWRpY2luYSBQcmV2ZW50aXZhIFBhcnRlIElJJywgIHRpcG86J2F1bGEnLCAgc2VtYW5hOjIsIHF1aXo6dHJ1ZSwgIHl0OidodHRwczovL3lvdXR1YmUuY29tL2xpdmUvdWlDM09nQVE0MUUnIH0sCiAgICAgIHsgaWQ6J2VuMTMnLCBkYXRhOicyMDI2LTA5LTEyJywgaG9yYTonMDg6MDAgw6BzIDE2OjAwJywgdGl0dWxvOidSZXZpc8OjbyBkZSBWw6lzcGVyYSBFTkFNRUQgMjAyNiDCtyBhbyB2aXZvJywgICAgICAgIHRpcG86J21hcmNvJywgc2VtYW5hOjIsIHF1aXo6dHJ1ZSwgIHl0OidodHRwczovL3lvdXR1YmUuY29tL2xpdmUvV3hhMmpyQkxfWWMnIH0sCiAgICAgIHsgaWQ6J2VuMTQnLCBkYXRhOicyMDI2LTA5LTEzJywgaG9yYTonYSBwYXJ0aXIgZGFzIDE2OjAwJywgdGl0dWxvOidHYWJhcml0byBFTkFNRUQgMjAyNicsICAgICAgICAgICAgICAgICAgICAgICAgdGlwbzoncHJvdmEnLCBzZW1hbmE6MiwgcXVpejpmYWxzZSwgeXQ6J2h0dHBzOi8veW91dHViZS5jb20vbGl2ZS9feklWVUJROFRKOCcgfQogICAgXSwKICAgIHNpbXVsYWRvSWQ6ICdlbjA3JwogIH0sCiAgcmV2YWxpZGE6IHsKICAgIG5vbWU6ICdSZXZhbGlkYSBJTkVQIDIwMjYuMicsCiAgICBsaWdhOiAnQXRvIEZpbmFsIMK3IFJldmFsaWRhJywKICAgIGluaWNpbzogJzIwMjYtMDgtMjYnLAogICAgcHJvdmE6ICcyMDI2LTA5LTEzJywKICAgIHByb3Zpc29yaW86IGZhbHNlLAogICAgcGFydGljaXBhbnRlczogNzQzLAogICAgLy8gQ2FsZW5kw6FyaW8gb2ZpY2lhbCAoSWdvciwgMTIvMDgpLiBSb2RhIG5hIE1FU01BIGphbmVsYSBkbyBFTkFNRUQgKDI2LzA44oCTMTMvMDkpLAogICAgLy8gSG9yYSBkYSBWZXJkYWRlIMOgcyAxMmguIFJldmlzw6NvIGRlIFbDqXNwZXJhIChydjEzKSBlIEdhYmFyaXRvIChydjE0KSBzw6NvCiAgICAvLyBDT01QQVJUSUxIQURPUyBFTkFNRUQrUmV2YWxpZGEuIOKaoO+4jyB5dCBkYSBBYmVydHVyYSAocnYwMCwgMjYvMDggMjBoKSBQRU5ERU5URS4KICAgIGV2ZW50b3M6IFsKICAgICAgeyBpZDoncnYwMCcsIGRhdGE6JzIwMjYtMDgtMjYnLCBob3JhOicyMDowMCcsIHRpdHVsbzonQXVsYSBJbmF1Z3VyYWwgwrcgVHVkbyBzb2JyZSBvIEF0byBGaW5hbCBSZXZhbGlkYSBJTkVQIDIwMjYuMicsIHRpcG86J2F1bGEnLCBzZW1hbmE6MCwgcXVpejpmYWxzZSwgeXQ6JycgfSwKICAgICAgeyBpZDoncnYwMScsIGRhdGE6JzIwMjYtMDgtMzAnLCBob3JhOicwODowMCDDoHMgMTY6MDAnLCB0aXR1bG86J1ByZW1vbmnDp8OjbyBSZXZhbGlkYSBJTkVQIDIwMjYuMicsICAgICAgICAgICAgICAgICAgdGlwbzonbWFyY28nLCBzZW1hbmE6MSwgcXVpejp0cnVlLCAgeXQ6J2h0dHBzOi8veW91dHViZS5jb20vbGl2ZS9MNWhkRk9wb2xxZycgfSwKICAgICAgeyBpZDoncnYwMicsIGRhdGE6JzIwMjYtMDgtMzEnLCBob3JhOicxMjowMCDDoHMgMTQ6MzAnLCB0aXR1bG86J0hvcmEgZGEgVmVyZGFkZSDCtyBHaW5lY29sb2dpYScsICAgICAgICAgICAgICAgICAgICB0aXBvOidhdWxhJywgIHNlbWFuYToxLCBxdWl6OnRydWUsICB5dDonaHR0cHM6Ly95b3V0dWJlLmNvbS9saXZlLzN0Y1dSWUFnSTlzJyB9LAogICAgICB7IGlkOidydjAzJywgZGF0YTonMjAyNi0wOS0wMScsIGhvcmE6JzEyOjAwIMOgcyAxNDozMCcsIHRpdHVsbzonSG9yYSBkYSBWZXJkYWRlIMK3IFBlZGlhdHJpYSBQYXJ0ZSBJJywgICAgICAgICAgICAgIHRpcG86J2F1bGEnLCAgc2VtYW5hOjEsIHF1aXo6dHJ1ZSwgIHl0OidodHRwczovL3lvdXR1YmUuY29tL2xpdmUvaHB5YmhPZmtoOEknIH0sCiAgICAgIHsgaWQ6J3J2MDQnLCBkYXRhOicyMDI2LTA5LTAyJywgaG9yYTonMTI6MDAgw6BzIDE0OjMwJywgdGl0dWxvOidIb3JhIGRhIFZlcmRhZGUgwrcgQ2lydXJnaWEgUGFydGUgSScsICAgICAgICAgICAgICAgdGlwbzonYXVsYScsICBzZW1hbmE6MSwgcXVpejp0cnVlLCAgeXQ6J2h0dHBzOi8veW91dHViZS5jb20vbGl2ZS9HUVRIYzlPb3ZDVScgfSwKICAgICAgeyBpZDoncnYwNScsIGRhdGE6JzIwMjYtMDktMDMnLCBob3JhOicxMjowMCDDoHMgMTY6MDAnLCB0aXR1bG86J0hvcmEgZGEgVmVyZGFkZSDCtyBDbMOtbmljYSBNw6lkaWNhIFBhcnRlIEknLCAgICAgICAgIHRpcG86J2F1bGEnLCAgc2VtYW5hOjEsIHF1aXo6dHJ1ZSwgIHl0OidodHRwczovL3lvdXR1YmUuY29tL2xpdmUvQzRtWEZGZ1NNbEknIH0sCiAgICAgIHsgaWQ6J3J2MDYnLCBkYXRhOicyMDI2LTA5LTA0JywgaG9yYTonMTI6MDAgw6BzIDE0OjMwJywgdGl0dWxvOidIb3JhIGRhIFZlcmRhZGUgwrcgTWVkaWNpbmEgUHJldmVudGl2YSBQYXJ0ZSBJJywgICAgdGlwbzonYXVsYScsICBzZW1hbmE6MSwgcXVpejp0cnVlLCAgeXQ6J2h0dHBzOi8veW91dHViZS5jb20vbGl2ZS9VcWd5YjlDaEtjdycgfSwKICAgICAgeyBpZDoncnYwNycsIGRhdGE6JzIwMjYtMDktMDYnLCBob3JhOicxNDowMCDDoHMgMTk6MDAnLCB0aXR1bG86J1NpbXVsYWRvIEZpbmFsIFJldmFsaWRhIElORVAgMjAyNi4yJywgICAgICAgICAgICAgIHRpcG86J21hcmNvJywgc2VtYW5hOjIsIHF1aXo6ZmFsc2UsIHl0OidodHRwczovL3lvdXR1YmUuY29tL2xpdmUvY19HcW5hOVhIeU0nIH0sCiAgICAgIHsgaWQ6J3J2MDgnLCBkYXRhOicyMDI2LTA5LTA3JywgaG9yYTonMTI6MDAgw6BzIDE0OjMwJywgdGl0dWxvOidIb3JhIGRhIFZlcmRhZGUgwrcgT2JzdGV0csOtY2lhJywgICAgICAgICAgICAgICAgICAgIHRpcG86J2F1bGEnLCAgc2VtYW5hOjIsIHF1aXo6dHJ1ZSwgIHl0OidodHRwczovL3lvdXR1YmUuY29tL2xpdmUvX0tCQUJGVUZSTlknIH0sCiAgICAgIHsgaWQ6J3J2MDknLCBkYXRhOicyMDI2LTA5LTA4JywgaG9yYTonMTI6MDAgw6BzIDE0OjMwJywgdGl0dWxvOidIb3JhIGRhIFZlcmRhZGUgwrcgUGVkaWF0cmlhIFBhcnRlIElJJywgICAgICAgICAgICAgdGlwbzonYXVsYScsICBzZW1hbmE6MiwgcXVpejp0cnVlLCAgeXQ6J2h0dHBzOi8veW91dHViZS5jb20vbGl2ZS85LXFySV9veXZQYycgfSwKICAgICAgeyBpZDoncnYxMCcsIGRhdGE6JzIwMjYtMDktMDknLCBob3JhOicxMjowMCDDoHMgMTQ6MzAnLCB0aXR1bG86J0hvcmEgZGEgVmVyZGFkZSDCtyBDaXJ1cmdpYSBQYXJ0ZSBJSScsICAgICAgICAgICAgICB0aXBvOidhdWxhJywgIHNlbWFuYToyLCBxdWl6OnRydWUsICB5dDonaHR0cHM6Ly95b3V0dWJlLmNvbS9saXZlLzc3RUh1LWlPYkxjJyB9LAogICAgICB7IGlkOidydjExJywgZGF0YTonMjAyNi0wOS0xMCcsIGhvcmE6JzEyOjAwIMOgcyAxNjowMCcsIHRpdHVsbzonSG9yYSBkYSBWZXJkYWRlIMK3IENsw61uaWNhIE3DqWRpY2EgUGFydGUgSUknLCAgICAgICAgdGlwbzonYXVsYScsICBzZW1hbmE6MiwgcXVpejp0cnVlLCAgeXQ6J2h0dHBzOi8veW91dHViZS5jb20vbGl2ZS9FNmVTckxnMWxJMCcgfSwKICAgICAgeyBpZDoncnYxMicsIGRhdGE6JzIwMjYtMDktMTEnLCBob3JhOicxMjowMCDDoHMgMTQ6MzAnLCB0aXR1bG86J0hvcmEgZGEgVmVyZGFkZSDCtyBNZWRpY2luYSBQcmV2ZW50aXZhIFBhcnRlIElJJywgICB0aXBvOidhdWxhJywgIHNlbWFuYToyLCBxdWl6OnRydWUsICB5dDonaHR0cHM6Ly95b3V0dWJlLmNvbS9saXZlL2diMHR6ZE5NZlkwJyB9LAogICAgICB7IGlkOidydjEzJywgZGF0YTonMjAyNi0wOS0xMicsIGhvcmE6JzA4OjAwIMOgcyAxNjowMCcsIHRpdHVsbzonUmV2aXPDo28gZGUgVsOpc3BlcmEgRU5BTUVEIGUgUmV2YWxpZGEgSU5FUCDCtyBhbyB2aXZvJywgdGlwbzonbWFyY28nLCBzZW1hbmE6MiwgcXVpejp0cnVlLCB5dDonaHR0cHM6Ly95b3V0dWJlLmNvbS9saXZlL1VycVp0WUVNbXhBJyB9LAogICAgICB7IGlkOidydjE0JywgZGF0YTonMjAyNi0wOS0xMycsIGhvcmE6J2EgcGFydGlyIGRhcyAxNjowMCcsIHRpdHVsbzonR2FiYXJpdG8gRU5BTUVEIGUgUmV2YWxpZGEgSU5FUCAyMDI2LjInLCAgICAgICB0aXBvOidwcm92YScsIHNlbWFuYToyLCBxdWl6OmZhbHNlLCB5dDonaHR0cHM6Ly95b3V0dWJlLmNvbS9saXZlL29JY2xjX216ejFZJyB9CiAgICBdLAogICAgc2ltdWxhZG9JZDogJ3J2MDcnCiAgfQp9OwoKLyogQSBKT1JOQURBIChlc3R1ZG8pIHZhbGUgMi4wMDAgcHRzLiBJbmRpY2HDp8OjbyB2aXJvdSBCw5ROVVMgU0VNIFRFVE8gZW0gY2ltYQogICBkaXNzbyAoMTEvMDgpIOKAlCBuw6NvIGjDoSBtYWlzIHVtICJ0b3RhbCIgZml4by4gKi8KdmFyIFBPTlRPUyA9IHsgcHJlc2VuY2E6IDUyMCwgbWlzc29lczogNzgwLCBzaW11bGFkbzogNzAwLCBqb3JuYWRhOiAyMDAwIH07Ci8qIMOhdG9tb3MgRVhBVE9TIGRhIHLDqWd1YSAoZGVjaXPDo28gMDQvMDgpOiBzZW0gcG9udG8gcXVlYnJhZG8gZW0gbHVnYXIgbmVuaHVtICovCnZhciBQVF9BVUxBID0gNDAsIFBUX0FVTEFfUkVUUk8gPSAzMDsgICAgICAgICAgICAgICAgICAvLyA3NSUgZXhhdG8gbm8gcmV0cm9hdGl2bwp2YXIgUFRfRElBID0gNjUsIFBUX0RJQV9QSVNPID0gMjYsIFBUX0RJQV9BQ0VSVE9TID0gMzk7IC8vIHBpc28gNDAlIGV4YXRvCnZhciBQVF9TSU1fQUNFUlRPID0gNzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2ltdWxhZG86IDcgcG9yIGFjZXJ0bwovKiBpbmRpY2HDp8O1ZXMgKHJldmlzw6NvIDExLzA4LCBkZWNpc8OjbyBkbyBJZ29yKTogMjAgcHRzIHBvciBhbWlnbyBxdWUgc2UgSU5TQ1JFVkUKICAgcGVsbyBzZXUgbGluayDigJQgQVVUT03DgVRJQ08gbm8gY2FkYXN0cm8gKG7Do28gZXhpZ2UgbWFpcyBwYXJ0aWNpcGFyKSBlIFNFTSBURVRPCiAgICgicXVhbnRvIG1haXMgaW5kaWNhciwgbWVsaG9yIikuIELDtG51cyBlbSBjaW1hIGRvcyAyLjAwMC4gTsODTyBlbnRyYSBubwogICBkZXNlbXBhdGUuICovCnZhciBQVF9JTkQgPSAyMDsKdmFyIERFTU9fS0VZV09SRCA9ICcnOyAvLyBwcm9kdcOnw6NvOiBuw6NvIGV4aXN0ZSBjaGF2ZSBkZW1vOyB2YWxpZGHDp8OjbyDDqSBubyBzZXJ2aWRvcgovKiByZXNwb3N0YXMgcGFyY2lhaXMgZGUgdW0gZXZlbnRvIChwcm9kdcOnw6NvOiBjb250YWRhcyBkbyBDQUNIRSBkbyBzZXJ2aWRvcikgKi8KZnVuY3Rpb24gblJlc3Bvc3Rhc0V2ZW50byhldklkKXsKICB2YXIgcXMgPSBDQUNIRS5xdWVzdG9lc1tldklkXSB8fCBbXTsKICB2YXIgbiA9IDA7CiAgcXMuZm9yRWFjaChmdW5jdGlvbihxKXsgaWYgKENBQ0hFLnJlc3Bvc3Rhc1txLmlkXSkgbisrOyB9KTsKICByZXR1cm4gbjsKfQovKiBFdmVudG9zIGNvbSBjaGVjay1pbiAocHJlc2Vuw6dhKTogdG9kb3MgTUVOT1MgYSBBYmVydHVyYSAoc2VtYW5hIDApIGUgbwogICBTaW11bGFkby4gRGVyaXZhZG8gZGEgam9ybmFkYSBhdGl2YSBwcmEgZnVuY2lvbmFyIGVtIHF1YWxxdWVyIHZlcnRpY2FsCiAgIChFTkFNRUQgdXNhIGVuKiwgUmV2YWxpZGEgdXNhIHJ2KikuICovCmZ1bmN0aW9uIGV2ZW50b3NDb21DaGF2ZShwcm92YSl7CiAgdmFyIGogPSBKT1JOQURBU1twcm92YV0gfHwgSk9STkFEQVMuZW5hbWVkOwogIHZhciBvdXQgPSBbXTsKICBqLmV2ZW50b3MuZm9yRWFjaChmdW5jdGlvbihlKXsgaWYgKGUuc2VtYW5hICE9PSAwICYmIGUuaWQgIT09IGouc2ltdWxhZG9JZCkgb3V0LnB1c2goZS5pZCk7IH0pOwogIHJldHVybiBvdXQ7Cn0KdmFyIFRFTV9DSEFWRSA9IGV2ZW50b3NDb21DaGF2ZSgod2luZG93Ll9fQUZfUFJPVkEgPT09ICdyZXZhbGlkYScpID8gJ3JldmFsaWRhJyA6ICdlbmFtZWQnKTsKCi8qIFByZWZpeG8gZGUgbG9jYWxTdG9yYWdlL2Nvb2tpZSBwb3IgdmVydGljYWw6IEVOQU1FRCBlIFJldmFsaWRhIG1vcmFtIG5vIE1FU01PCiAgIGRvbcOtbmlvIChta3QuZXN0cmF0ZWdpYS5jb20pLCBvbmRlIG8gbG9jYWxTdG9yYWdlIMOpIENPTVBBUlRJTEhBRE8uIFNlbSBpc3NvLCBhCiAgIHNlc3PDo28gZGUgdW0gYWx1bm8gZG8gRU5BTUVEIHZhemFyaWEgKGNvbSBkYWRvcyBxdWVicmFkb3MpIHByYSDDoXJlYSBkbyBSZXZhbGlkYS4KICAgRU5BTUVEIG1hbnTDqW0gbyBwcmVmaXhvIGhpc3TDs3JpY28gJ2FmXycgKG7Do28gZGVzbG9nYSBuaW5ndcOpbSBqw6EgbG9nYWRvKTsKICAgUmV2YWxpZGEgdXNhICdhZl9ydl8nLiAqLwp2YXIgTFNQID0gKHdpbmRvdy5fX0FGX1BST1ZBID09PSAncmV2YWxpZGEnKSA\/ICdhZl9ydl8nIDogJ2FmXyc7CgovKiBNT0RPIERFIFZBTElEQcOHw4NPIGRhIGNvb3JkZW5hw6fDo28g4oCUIERFU0xJR0FSIE5PIExBTsOHQU1FTlRPIChmYWxzZSkuCiAgIENvbSB0cnVlOiBob2plID0gMzAvMDggKGRpYSBkYSBlc3RyZWlhKSwgcXVlc3TDtWVzIGRlIFRPRE9TIG9zIGRpYXMKICAgbGliZXJhZGFzLCBTaW11bGFkbyBhYmVydG8gcGFyYSBwcmVlbmNoZXIgZSBnYWJhcml0byBsaWJlcmFkbyBhcMOzcyBvCiAgIGVudmlvLCBjb20gYm90w6NvIGRlIHJlZmF6ZXIuIFVtIGJhbm5lciBhdmlzYSBxdWUgw6kgYW1iaWVudGUgZGUgdGVzdGUuICovCnZhciBNT0RPX1ZBTElEQUNBTyA9IGZhbHNlOyAgLy8gTEFOw4dBTUVOVE8gMTAvMDg6IGJsb3F1ZWlvcyByZWFpcyBwcm9zIGFsdW5vcwoKLyogVklTw4NPIERPIENPT1JERU5BRE9SIChsYW7Dp2FtZW50byAxMC8wOCk6IENQRnMgZGVzdGEgbGlzdGEgZW54ZXJnYW0gYQogICBwbGF0YWZvcm1hIGNvbXBsZXRhIGFudGVzIGRhIGVzdHJlaWEgKHRyaWxoYSwgcXVlc3TDtWVzLCBzaW11bGFkbykgc2VtCiAgIGFicmlyIG5hZGEgcHJvcyBhbHVub3MuIFPDsyBWSVNVQUxJWkHDh8ODTzogbyBzZXJ2aWRvciBtYW50w6ltIGFzIHJlZ3JhcwogICByZWFpcyBlIHJlY3VzYSBhw6fDtWVzIGZvcmEgZGUgaG9yYS4gKi8KdmFyIENQRlNfQ09PUkQgPSBbJzAzNzI3MDI4MTMwJ107CmZ1bmN0aW9uIG1vZG9QcmV2aWV3KCl7CiAgaWYgKE1PRE9fVkFMSURBQ0FPKSByZXR1cm4gdHJ1ZTsKICB0cnkgeyByZXR1cm4gISEoQ0FDSEUudXNlciAmJiBDUEZTX0NPT1JELmluZGV4T2YoQ0FDSEUudXNlci5jcGYpID4gLTEpOyB9IGNhdGNoKGUpeyByZXR1cm4gZmFsc2U7IH0KfQoKLyogQXRhbGhvcyBkZSBvcGVyYcOnw6NvICg\/aG9qZSwgP3NpbWR1ciwgP3NpbXJlc2V0IGUgbyBhdGFsaG8gZGUgZGVtbyBkbyBTaW11bGFkbykKICAgc8OzIGZ1bmNpb25hbSBlbSBuYXZlZ2Fkb3IgcXVlIGrDoSBwYXNzb3UgcGVsbyBnYXRlIGRvIGFkbWluIChhZl9hZG1pbl9vaykuICovCmZ1bmN0aW9uIGlzT3BlcmFjYW8oKXsgdHJ5IHsgcmV0dXJuICEhbG9jYWxTdG9yYWdlLmdldEl0ZW0oTFNQKydhZG1pbl9vaycpOyB9IGNhdGNoKGUpeyByZXR1cm4gZmFsc2U7IH0gfQoKLyogUXVpenplcyBkZW1vOiA1IHF1ZXN0w7VlcyBDZXJ0by9FcnJhZG8gcG9yIGF1bGEgKHBhZHLDo28gZG8gQ0opLgogICBDb250ZcO6ZG8gaWx1c3RyYXRpdm8sIG8gdGltZSBkZSBwcm9mZXNzb3JlcyBzdWJzdGl0dWkgbmEgZmFzZSAyLiAqLwp2YXIgUVVJWl9CQU5LID0gewogIGVuMDI6IFsKICAgIHsgcTonTm8gcmFzdHJlYW1lbnRvIGRvIGPDom5jZXIgZGUgY29sbyB1dGVyaW5vLCBhIGNpdG9sb2dpYSBvbmPDs3RpY2EgZGV2ZSBzZXIgaW5pY2lhZGEgYW9zIDI1IGFub3MgZW0gbXVsaGVyZXMgcXVlIGrDoSB0aXZlcmFtIGF0aXZpZGFkZSBzZXh1YWwuJywgcjonQycgfSwKICAgIHsgcTonQSBjYW5kaWTDrWFzZSB2dWx2b3ZhZ2luYWwgZGUgcmVwZXRpw6fDo28gw6kgdHJhdGFkYSBjb20gbWV0cm9uaWRhem9sIG9yYWwgZW0gZG9zZSDDum5pY2EuJywgcjonRScgfSwKICAgIHsgcTonTmEgZG9lbsOnYSBpbmZsYW1hdMOzcmlhIHDDqWx2aWNhLCBvIHRyYXRhbWVudG8gYW1idWxhdG9yaWFsIMOpIGFjZWl0w6F2ZWwgZW0gcXVhZHJvcyBsZXZlcywgc2VtIHNpbmFpcyBkZSBhYnNjZXNzby4nLCByOidDJyB9LAogICAgeyBxOidPIGFudGljb25jZXBjaW9uYWwgY29tYmluYWRvIMOpIG8gbcOpdG9kbyBkZSBlc2NvbGhhIGVtIG11bGhlcmVzIGNvbSBlbnhhcXVlY2EgY29tIGF1cmEuJywgcjonRScgfSwKICAgIHsgcTonQSBzw61uZHJvbWUgZG9zIG92w6FyaW9zIHBvbGljw61zdGljb3MgZXhpZ2UsIHBlbG8gY3JpdMOpcmlvIGRlIFJvdHRlcmRhbSwgYSBwcmVzZW7Dp2Egc2ltdWx0w6JuZWEgZG9zIHRyw6pzIGNyaXTDqXJpb3MgZGlhZ27Ds3N0aWNvcy4nLCByOidFJyB9CiAgXSwKICBlbjA1OiBbCiAgICB7IHE6J05hIGNldG9hY2lkb3NlIGRpYWLDqXRpY2EsIGEgaW5zdWxpbmEgc8OzIGRldmUgc2VyIGluaWNpYWRhIGFww7NzIGNvcnJlw6fDo28gZGUgcG90w6Fzc2lvIHPDqXJpY28gYWJhaXhvIGRlIDMsMyBtRXEvTC4nLCByOidDJyB9LAogICAgeyBxOidBIHBuZXVtb25pYSBhZHF1aXJpZGEgbmEgY29tdW5pZGFkZSBjb20gQ1VSQi02NSBpZ3VhbCBhIHplcm8gZXhpZ2UgaW50ZXJuYcOnw6NvIGhvc3BpdGFsYXIuJywgcjonRScgfSwKICAgIHsgcTonTm8gaW5mYXJ0byBhZ3VkbyBkbyBtaW9jw6FyZGlvIGNvbSBzdXByYSBkZSBTVCwgbyB0ZW1wbyBwb3J0YS1iYWzDo28gaWRlYWwgw6kgZGUgYXTDqSA5MCBtaW51dG9zLicsIHI6J0MnIH0sCiAgICB7IHE6J0EgZG9lbsOnYSByZW5hbCBjcsO0bmljYSDDqSBkZWZpbmlkYSBwb3IgYWx0ZXJhw6fDtWVzIGVzdHJ1dHVyYWlzIG91IGZ1bmNpb25haXMgbWFudGlkYXMgcG9yIG1haXMgZGUgMyBtZXNlcy4nLCByOidDJyB9LAogICAgeyBxOidPIHRyYXRhbWVudG8gZGUgcHJpbWVpcmEgbGluaGEgZGEgaGlwZXJ0ZW5zw6NvIGVtIG5lZ3JvcyBuw6NvIGRpYWLDqXRpY29zIHByaW9yaXphIGluaWJpZG9yZXMgZGEgRUNBLicsIHI6J0UnIH0KICBdCn07CmZ1bmN0aW9uIHF1aXpEb0V2ZW50byhldil7CiAgdmFyIGFkbSA9IG51bGw7IC8vIHByb2R1w6fDo286IHF1ZXN0w7VlcyB2w6ptIFPDkyBkbyBiYW5jbwogIHJldHVybiAoQ0FDSEUucXVlc3RvZXNbZXYuaWRdIHx8IFtdKTsKfQoKLyogLS0tLS0tLS0tLS0tLS0tLSBTaW11bGFkbyBGaW5hbCBJTi1QTEFURk9STSAtLS0tLS0tLS0tLS0tLS0tCiAgIE1vZGVsbyByZXBsaWNhZG8gZG8gU2ltdWxhZG8gRU5BTUVEIFJFQUwgZGEgcGxhdGFmb3JtYSBkbyBNRUQKICAgKHF1ZXN0aW9uc19kYi5zZWxsYWJsZV9zdHVkZW50X2V4YW1zIG5vIEF0aGVuYTogMTAwIHF1ZXN0w7VlcyBkZQogICA0IGFsdGVybmF0aXZhcyBB4oCTRCwgNWggZGUgcHJvdmEsIGphbmVsYSBjb20gaW7DrWNpby9maW0gZSBnYWJhcml0bwogICBsaWJlcmFkbyBzw7Mgbm8gZW5jZXJyYW1lbnRvKSArIHJlZ3JhcyBkYSBwbGF0YWZvcm1hIGRvIEF0byBGaW5hbAogICAocmVwbyBhcmVhLXBhcnRpY2lwYW50ZS1lbmFtZWQpOiBsb2JieSBjb20gZGVjbGFyYcOnw6NvIGRlIGZhaXItcGxheSwKICAgY3JvbsO0bWV0cm8gc2VtIHBhdXNhLCBuYXZlZ2Fkb3IgZGUgcXVlc3TDtWVzLCBtYXJjYXIgcGFyYSByZXZpc2FyLAogICBhdXRvc2F2ZSwgdGVudGF0aXZhIMO6bmljYSwgYW50aS1jw7NwaWEsIGdhYmFyaXRvIGNvbWVudGFkbyByZXRpZG8KICAgYXTDqSBvIGZpbSBkYSBqYW5lbGEuIFF1ZXN0w7VlcyBERU1PTlNUUkFUSVZBUyBhdMOpIG9zIHByb2Zlc3NvcmVzCiAgIGVudHJlZ2FyZW0gKGEgYWJhIFNJTVVMQURPIGRhIHBsYW5pbGhhIGFpbmRhIHRlbSBvIGNvbnRlw7pkbyBkbyBDSikuICovCnZhciBTSU1fQ0ZHID0gewogIGVuYW1lZDogICB7IHF1ZXN0b2VzOjEwMCwgZHVyYWNhb01pbjozMDAsIGhvcmFBYnJlOicxNDowMCcsIGhvcmFGZWNoYTonMTk6MDAnIH0sCiAgcmV2YWxpZGE6IHsgcXVlc3RvZXM6MTAwLCBkdXJhY2FvTWluOjMwMCwgaG9yYUFicmU6JzE0OjAwJywgaG9yYUZlY2hhOicxOTowMCcgfQp9Owp2YXIgU0lNX0FSRUFTID0gWydDbMOtbmljYSBNw6lkaWNhJywnQ2lydXJnaWEnLCdQZWRpYXRyaWEnLCdHaW5lY29sb2dpYSBlIE9ic3RldHLDrWNpYScsJ01lZGljaW5hIFByZXZlbnRpdmEnXTsKZnVuY3Rpb24gc2ltdWxhZG9RdWVzdG9lcyhwcm92YSl7CiAgLy8gMjAgcXVlc3TDtWVzIHBvciBncmFuZGUgw6FyZWEgKGRpc3RyaWJ1acOnw6NvIG9maWNpYWwgZG8gRU5BTUVEKQogIHZhciBjZmcgPSBTSU1fQ0ZHW3Byb3ZhXSB8fCBTSU1fQ0ZHLmVuYW1lZDsKICB2YXIgbGV0cmFzID0gWydBJywnQicsJ0MnLCdEJ107CiAgdmFyIG91dCA9IFtdOwogIGZvciAodmFyIGk9MDtpPGNmZy5xdWVzdG9lcztpKyspewogICAgdmFyIGFyZWEgPSBTSU1fQVJFQVNbTWF0aC5mbG9vcihpIC8gKGNmZy5xdWVzdG9lcyAvIFNJTV9BUkVBUy5sZW5ndGgpKV0gfHwgU0lNX0FSRUFTWzBdOwogICAgb3V0LnB1c2goewogICAgICBhcmVhOiBhcmVhLAogICAgICBxOiAnUXVlc3TDo28gZGVtb25zdHJhdGl2YSAnKyhpKzEpKycgwrcgJythcmVhKycuIE5vIHByb2pldG8gZmluYWwsIGVudHJhIGFxdWkgdW0gY2FzbyBjbMOtbmljbyBjb21wbGV0byBubyBwYWRyw6NvIElORVAvRU5BTUVEIGVsYWJvcmFkbyBwZWxvcyBwcm9mZXNzb3JlczogYXByZXNlbnRhw6fDo28gZG8gcGFjaWVudGUsIGRhZG9zIGRlIGV4YW1lIGUgYSBwZXJndW50YS4nLAogICAgICBhbHRzOiBsZXRyYXMubWFwKGZ1bmN0aW9uKGwpeyByZXR1cm4geyBsOmwsIHQ6J0FsdGVybmF0aXZhIGRlbW9uc3RyYXRpdmEgJytsKycgZGEgcXVlc3TDo28gJysoaSsxKSsnLicgfTsgfSksCiAgICAgIHI6IGxldHJhc1tpICUgNF0sCiAgICAgIGM6ICdDb21lbnTDoXJpbyBkZW1vbnN0cmF0aXZvIGRvIHByb2Zlc3NvciBwYXJhIGEgcXVlc3TDo28gJysoaSsxKSsnICgnK2FyZWErJyk6IGZ1bmRhbWVudGHDp8OjbyBkYSBhbHRlcm5hdGl2YSBjb3JyZXRhIGUgcG9yIHF1ZSBhcyBkZW1haXMgZXN0w6NvIGVycmFkYXMuJwogICAgfSk7CiAgfQogIHJldHVybiBvdXQ7Cn0KCi8qIFJhbmtpbmcgZGVtbyBwb3IgcHJvdmEgKi8KdmFyIFJBTktfREVNTyA9IHsKICBlbmFtZWQ6IFsnTWljaGFlbCBGLicsJ1BhdHLDrWNpYSBHLicsJ0pvw6NvIFAuJywnZ2FicmllbGEgZi4nLCdWaWN0w7NyaWEgTC4nLCdCcsOhdWxpbyBTLicsJ0p1bGlhbmEgRi4nLCdDcmlzdGlhbiBSLicsJ0NhbWlsbHkgTS4nLCdMdWFuYSBSLicsJ1JlbmF0byBBLicsJ0JpYW5jYSBULicsJ0ZlbGlwZSBOLicsJ0FsaW5lIEMuJywnRGllZ28gTS4nXSwKICByZXZhbGlkYTogWydZZXNlbmlhIFIuJywnQ2FybG9zIFYuJywnTWFyw61hIFAuJywnSm9uYXRoYW4gTy4nLCdEYW5pZWxhIFEuJywnTHVpcyBGLicsJ0FuZHJlYSBNLicsJ1BlZHJvIEguJywnUm9zYSBFLicsJ01pZ3VlbCBBLicsJ0NhbWlsYSBELicsJ0pvc8OpIEwuJywnUGFvbGEgUy4nLCdJdsOhbiBHLicsJ0thcmVuIEIuJ10KfTsKCi8qIFNsaWRlcyBkYXMgYXVsYXM6IGNvbGUgbyBsaW5rIGRvIERyaXZlIGRlIGNhZGEgYXVsYSBxdWFuZG8gbyB0aW1lIGVudmlhci4KICAgQ2hhdmUgPSBpZCBkbyBldmVudG8gKEpPUk5BREFTIGFjaW1hKS4gQXVsYSBzZW0gbGluayBtb3N0cmEgIlNsaWRlcyBlbSBicmV2ZSIuICovCnZhciBTTElERVMgPSB7CiAgZW4wMDonJywgZW4wMTonJywgZW4wMjonJywgZW4wMzonJywgZW4wNDonJywgZW4wNTonJywgZW4wNjonJywgZW4wNzonJywKICBlbjA4OicnLCBlbjA5OicnLCBlbjEwOicnLCBlbjExOicnLCBlbjEyOicnLCBlbjEzOicnLCBlbjE0OicnLAogIHJ2MDE6JycsIHJ2MDI6JycsIHJ2MDM6JycsIHJ2MDQ6JycsIHJ2MDU6JycsIHJ2MDY6JycsIHJ2MDc6JycsCiAgcnYwODonJywgcnYwOTonJywgcnYxMDonJywgcnYxMTonJywgcnYxMjonJywgcnYxMzonJywgcnYxNDonJwp9OwoKLyogQVVMQSBJTkFVR1VSQUwgbm8gWW91VHViZTogIkFiZXJ0dXJhIEF0byBGaW5hbCBFTkFNRUQgMjAyNiIgKGxpbmsgb2ZpY2lhbCBkbwogICBJZ29yLCAxMS8wOCkuIFN1YnN0aXR1aXUgYSBwbGF5bGlzdCBnZW7DqXJpY2EgbmEgc2XDp8OjbyAiUHLDs3hpbWEgdHJhbnNtaXNzw6NvIgogICBkbyBJbsOtY2lvOiBtYW5kYXIgbyBhbHVubyBwcm8gdsOtZGVvIGRhIGVzdHJlaWEgZGVpeGEgZWxlIGEgdW0gdG9xdWUgZG8KICAgIkRlZmluaXIgbGVtYnJldGUiIE5BVElWTyBkbyBZb3VUdWJlLCBxdWUgw6kgbyBxdWUgYSBnZW50ZSBxdWVyIChhIHBsYXlsaXN0CiAgIGV4aWdpYSBjYcOnYXIgYSBhdWxhIGNlcnRhIGFudGVzKS4gTWVzbW8gbGluayBubyBjYW1wbyB5dCBkbyBlbjAwLiAqLwp2YXIgWVRfQUJFUlRVUkEgPSAnaHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g\/dj15SmlrWVFKLUk0SSZsaXN0PVBMYjJJRW90S2NZSVUmaW5kZXg9MTYnOwoKLyogVsOtZGVvIGRlIGJvYXMtdmluZGFzICgiY29tZWNlIHBvciBhcXVpIikgZG8gSW7DrWNpbyDigJQgZW1iZWQgUE9SIFBST1ZBLgogICBWYXppbyA9IG8gY2FyZCBOw4NPIGFwYXJlY2UgKGxpZ2Egc296aW5obyBxdWFuZG8gYSBwcm92YSBnYW5oYSB1bSBlbWJlZCkuCiAgIEVOQU1FRDogdsOtZGVvIG9maWNpYWwgbm8gUGFuZGEgVmlkZW8gKElnb3IsIDEzLzA4KS4gUmV2YWxpZGE6IGFpbmRhIHNlbSB2w61kZW8uICovCnZhciBWSURFT19CVl9QT1JfUFJPVkEgPSB7CiAgZW5hbWVkOiAnaHR0cHM6Ly9wbGF5ZXItdnotNzI4Y2RhODAtMmVmLnR2LnBhbmRhdmlkZW8uY29tLmJyL2VtYmVkLz92PTczYzA2YjExLTRkZDAtNDJkYi1iMWM0LWZlNGE4YjNjNzdlMycsCiAgcmV2YWxpZGE6ICcnCn07CgovKiBQUsOKTUlPUyByZXRpcmFkb3MgVEVNUE9SQVJJQU1FTlRFIChwZWRpZG8gZG8gSWdvciwgMTEvMDgpIGVucXVhbnRvIGEgcmVncmEgZGUKICAgaW5kaWNhw6fDo28gw5cgcmFua2luZyDDqSBhY2VydGFkYS4gUmVsaWdhciA9IHRydWUgKHZvbHRhIG8gY2FyZCBOb3RlYm9vay9UYWJsZXQvCiAgIEtpdCArIG8gc29ydGVpbyBkZSBLaXRzIG5vIHJvZGFww6kgZGFzIGZhaXhhcykuICovCnZhciBNT1NUUkFSX1BSRU1JT1MgPSBmYWxzZTsKCi8qIEJRIE1FRCBkZSBQb3J0YXMgQWJlcnRhcyAoQlEgZ3LDoXRpcyBlbSBhZ29zdG8vMjYpOiBjYXJkIHByw6ktam9ybmFkYSBubyBJbsOtY2lvICovCnZhciBCUU1FRF9VUkwgPSAnaHR0cHM6Ly9ta3QuZXN0cmF0ZWdpYS5jb20vbWVkL2JxLW1lZC1wb3J0YXMtYWJlcnRhcy8\/dXRtX3NvdXJjZT1hdG9maW5hbCZ1dG1fbWVkaXVtPWFyZWEtZG8tYWx1bm8mdXRtX2NhbXBhaWduPWJxbWVkLXBvcnRhcy1hYmVydGFzJzsKCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBQUk9EVcOHw4NPIMK3IGNhbWFkYSBkZSBkYWRvcyBTdXBhYmFzZSAoYXRvLWZpbmFsLWVuYW1lZCkKICAgTyBmcm9udCByb2RhIG5vIFdQIGNvbSBhIEFOT04gS0VZOyBzZWdyZWRvcyBlIHZhbGlkYcOnw6NvIHZpdmVtCiAgIG5hcyBSUENzIFNFQ1VSSVRZIERFRklORVIgKGRiLzAwMDEgKyBkYi8wMDAyKS4gQSBzZXNzw6NvIMOpIG8gQ1BGCiAgIGVtIGxvY2FsU3RvcmFnZSAoYWZfY3BmLCBwYWRyw6NvIEJvbMOjbyk7IG8gYm9vdCBoaWRyYXRhIG8gQ0FDSEUKICAgdmlhIGVzdGFkb19wYXJ0aWNpcGFudGUgZSBvcyByZW5kZXJzIGNvbnRpbnVhbSBTw41OQ1JPTk9TLgogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KCgovKiBSZXNnYXRlIGRlIGNsaXF1ZSAocHJvZHXDp8Ojbyk6IHNlIGFsZ3VtIHNjcmlwdCBkbyB0ZW1hIChkZWxheS1KUyBkbyBXUAogICBSb2NrZXQgZXRjLikgZW5nb2xpciBvIGNsaXF1ZSBudW0gbGluayBpbnRlcm5vLCBuYXZlZ2Ftb3MgbWVzbW8gYXNzaW0uCiAgIFNlIGEgbmF2ZWdhw6fDo28gcGFkcsOjbyBhY29udGVjZXIsIGEgcMOhZ2luYSBkZXNjYXJyZWdhIGUgbyB0aW1lciBtb3JyZS4gKi8KZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihlKXsKICBpZiAoZS5idXR0b24gIT09IDAgfHwgZS5tZXRhS2V5IHx8IGUuY3RybEtleSB8fCBlLnNoaWZ0S2V5IHx8IGUuYWx0S2V5KSByZXR1cm47CiAgdmFyIGEgPSBlLnRhcmdldCAmJiBlLnRhcmdldC5jbG9zZXN0ID8gZS50YXJnZXQuY2xvc2VzdCgnYVtocmVmXScpIDogbnVsbDsKICBpZiAoIWEgfHwgYS50YXJnZXQgPT09ICdfYmxhbmsnKSByZXR1cm47CiAgdmFyIGhyZWYgPSBhLmdldEF0dHJpYnV0ZSgnaHJlZicpIHx8ICcnOwogIGlmICghaHJlZiB8fCBocmVmLmNoYXJBdCgwKSA9PT0gJyMnIHx8IC9eamF2YXNjcmlwdDovaS50ZXN0KGhyZWYpKSByZXR1cm47CiAgdHJ5IHsgaWYgKGEub3JpZ2luICYmIGEub3JpZ2luICE9PSBsb2NhdGlvbi5vcmlnaW4pIHJldHVybjsgfSBjYXRjaCh4KXt9CiAgdmFyIGRlc3Rpbm8gPSBhLmhyZWY7CiAgc2V0VGltZW91dChmdW5jdGlvbigpeyBsb2NhdGlvbi5ocmVmID0gZGVzdGlubzsgfSwgMzUwKTsKfSwgdHJ1ZSk7CmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oZSl7CiAgaWYgKCFlLmlzVHJ1c3RlZCkgcmV0dXJuOwogIHZhciBiID0gZS50YXJnZXQgJiYgZS50YXJnZXQuY2xvc2VzdCA\/IGUudGFyZ2V0LmNsb3Nlc3QoJ2J1dHRvblt0eXBlPSJzdWJtaXQiXScpIDogbnVsbDsKICBpZiAoIWIgfHwgIWIuZm9ybSB8fCBiLmRpc2FibGVkKSByZXR1cm47CiAgdmFyIGYgPSBiLmZvcm0sIHQwID0gRGF0ZS5ub3coKTsKICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7CiAgICAvLyBvIHN1Ym1pdCByZWFsIERFU1RFIGNsaXF1ZSByb2RvdT8gKGNvbXBhcmFyIGNvbSBvIGluc3RhbnRlIGRvIGNsaXF1ZTsKICAgIC8vIGEgdmVyc8OjbyBhbnRpZ2EgY29tcGFyYXZhIGNvbSAiYWdvcmEiIGUgcmUtZGlzcGFyYXZhIFRPRE8gc3VibWl0IOKAlCBSUEMKICAgIC8vIGR1cGxhIGVtIGNhZGEgbG9naW4vY2FkYXN0cm8sIG1hc2NhcmFkYSBwZWxhIGlkZW1wb3TDqm5jaWEgZG8gc2Vydmlkb3IpCiAgICBpZiAoKGYuX191bHRpbW9TdWJtaXQgfHwgMCkgPj0gdDApIHJldHVybjsKICAgIGlmICghZi5pc0Nvbm5lY3RlZCkgcmV0dXJuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZsdXhvIGrDoSBjb25jbHVpdSBlIHJlbW92ZXUgbyBmb3JtCiAgICBpZiAoZi5jaGVja1ZhbGlkaXR5ICYmICFmLmNoZWNrVmFsaWRpdHkoKSkgcmV0dXJuOyAgICAgICAvLyBjYW1wbyBmYWx0YW5kbzogbyBiYWzDo28gZG8gbmF2ZWdhZG9yIGd1aWEKICAgIGYuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ3N1Ym1pdCcsIHsgYnViYmxlczogdHJ1ZSwgY2FuY2VsYWJsZTogdHJ1ZSB9KSk7CiAgfSwgNDAwKTsKfSwgdHJ1ZSk7CgoKLyogLS0tLS0tLS0tLSBsZW1icmV0ZXMgZGUgYXVsYSAoLmljczogR29vZ2xlL0FwcGxlL091dGxvb2spIC0tLS0tLS0tLS0gKi8KdmFyIElDT19TSU5PID0gJzxzdmcgd2lkdGg9IjEyIiBoZWlnaHQ9IjEyIiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCI+PHBhdGggZD0iTTE4IDhhNiA2IDAgMTAtMTIgMGMwIDctMyA5LTMgOWgxOHMtMy0yLTMtOSIvPjxwYXRoIGQ9Ik0xMy43IDIxYTIgMiAwIDAxLTMuNCAwIi8+PC9zdmc+JzsKdmFyIElDT19XQSA9ICc8c3ZnIHdpZHRoPSIxNCIgaGVpZ2h0PSIxNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJjdXJyZW50Q29sb3IiIGFyaWEtaGlkZGVuPSJ0cnVlIj48cGF0aCBkPSJNMTIgMmExMCAxMCAwIDAwLTguNiAxNS4xTDIgMjJsNS0xLjNBMTAgMTAgMCAxMDEyIDJ6bTAgMTguMmMtMS41IDAtMy0uNC00LjMtMS4ybC0uMy0uMi0zIC44LjgtMi45LS4yLS4zQTguMiA4LjIgMCAxMTEyIDIwLjJ6bTQuNi02LjFjLS4zLS4xLTEuNS0uNy0xLjctLjgtLjItLjEtLjQtLjEtLjYuMS0uMi4zLS43LjgtLjggMS0uMS4yLS4zLjItLjUuMWE2LjcgNi43IDAgMDEtMy4zLTIuOWMtLjMtLjQgMC0uNS4xLS43bC40LS41Yy4xLS4yLjEtLjMgMC0uNWwtLjgtMS45Yy0uMi0uNS0uNC0uNC0uNi0uNGgtLjVjLS4yIDAtLjUuMS0uNy4zLS45LjktMS4xIDIuMi0uMiAzLjdhMTEgMTEgMCAwMDQuMyA0Yy42LjMgMS41LjcgMi40LjYuOC0uMSAxLjYtLjYgMS45LTEuMi4yLS41LjItMSAuMS0xLjEtLjEtLjItLjMtLjItLjUtLjN6Ii8+PC9zdmc+JzsKCi8qIC0tLS0tLS0tLS0gYXBwIGluc3RhbMOhdmVsIChQV0EpIC0tLS0tLS0tLS0KICAgQ2FyZCBkZSBpbnN0YWxhw6fDo28gcmVtb3ZpZG8gZG8gSW7DrWNpbyBhIHBlZGlkbyBkbyBJZ29yICgwNi8wOCkuIE8gbWFuaWZlc3QKICAgc2VndWUgbmFzIHDDoWdpbmFzIChpbnN0YWzDoXZlbCBwZWxvIG1lbnUgZG8gbmF2ZWdhZG9yKTsgbyBsaXN0ZW5lciBhYmFpeG8KICAgY29udGludWEgc3VwcmltaW5kbyBvIGJhbm5lciBhdXRvbcOhdGljbyBkZSBpbnN0YWxhw6fDo28gZG8gQ2hyb21lLiAqLwp3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignYmVmb3JlaW5zdGFsbHByb21wdCcsIGZ1bmN0aW9uKGUpeyBlLnByZXZlbnREZWZhdWx0KCk7IH0pOwoKCi8qIC0tLS0tLS0tLS0gZ3VhcmRhIGRvIFNpbXVsYWRvOiBhdmlzbyBhbyBzYWlyIGRhIHByb3ZhIC0tLS0tLS0tLS0gKi8KdmFyIHByb3ZhQXRpdmEgPSBmYWxzZTsKZnVuY3Rpb24gcHJvdmFCZWZvcmVVbmxvYWQoZSl7IGUucHJldmVudERlZmF1bHQoKTsgZS5yZXR1cm5WYWx1ZSA9ICcnOyB9CmZ1bmN0aW9uIGxpZ2FyR3VhcmRhUHJvdmEoKXsKICBwcm92YUF0aXZhID0gdHJ1ZTsKICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignYmVmb3JldW5sb2FkJywgcHJvdmFCZWZvcmVVbmxvYWQpOwp9CmZ1bmN0aW9uIGRlc2xpZ2FyR3VhcmRhUHJvdmEoKXsKICBwcm92YUF0aXZhID0gZmFsc2U7CiAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2JlZm9yZXVubG9hZCcsIHByb3ZhQmVmb3JlVW5sb2FkKTsKfQpmdW5jdGlvbiBndWFyZGFQcm92YU1vZGFsKHByb3NzZWd1aXIpewogIHZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogIGVsLmNsYXNzTmFtZSA9ICdzaW0tZ3VhcmQnOwogIGVsLmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPSJzZy1jYXJkIj4nKwogICAgJzxkaXYgY2xhc3M9ImtpY2tlciIgc3R5bGU9Im1hcmdpbi1ib3R0b206MTJweCI+U2ltdWxhZG8gZW0gYW5kYW1lbnRvPC9kaXY+JysKICAgICc8cCBzdHlsZT0iZm9udC1zaXplOjE0LjVweDtsaW5lLWhlaWdodDoxLjY7Y29sb3I6dmFyKC0taW5rLWRpbSk7bWFyZ2luLWJvdHRvbTo4cHgiPlZvY8OqIGVzdMOhIG5vIG1laW8gZG8gU2ltdWxhZG8gRmluYWwuIFNlIHNhaXIgZGVzdGEgdGVsYSwgPGIgc3R5bGU9ImNvbG9yOnZhcigtLWluaykiPm8gY3JvbsO0bWV0cm8gY29udGludWEgY29ycmVuZG88L2I+IGUgYSBwcm92YSBzZWd1ZSB2YWxlbmRvOiBhcyByZXNwb3N0YXMgZGFkYXMgYXTDqSBhcXVpIGZpY2FtIHNhbHZhcyBuYSBzdWEgY29udGEuPC9wPicrCiAgICAnPHAgc3R5bGU9ImZvbnQtc2l6ZToxM3B4O2NvbG9yOnZhcigtLWluay1tdXRlKTttYXJnaW4tYm90dG9tOjE4cHgiPlNhaWEgYXBlbmFzIHNlIGZvciBuZWNlc3PDoXJpby4gUGFyYSBlbnZpYXIgYSBwcm92YSwgdXNlIG8gYm90w6NvIEZpbmFsaXphciBzaW11bGFkby48L3A+JysKICAgICc8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7Z2FwOjEwcHg7ZmxleC13cmFwOndyYXAiPicrCiAgICAnPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1hbWJlciBidG4tc20iIGlkPSJzZ0ZpY2FyIj5Db250aW51YXIgYSBwcm92YTwvYnV0dG9uPicrCiAgICAnPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1naG9zdCBidG4tc20iIGlkPSJzZ1NhaXIiPlNhaXIgbWVzbW8gYXNzaW08L2J1dHRvbj48L2Rpdj48L2Rpdj4nOwogIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZWwpOwogIGVsLnF1ZXJ5U2VsZWN0b3IoJyNzZ0ZpY2FyJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpeyBlbC5yZW1vdmUoKTsgfSk7CiAgZWwucXVlcnlTZWxlY3RvcignI3NnU2FpcicpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXsKICAgIGVsLnJlbW92ZSgpOyBkZXNsaWdhckd1YXJkYVByb3ZhKCk7IHByb3NzZWd1aXIoKTsKICB9KTsKfQoKLyogVVJMcyBkYSBlc3RydXR1cmEgZGUgcMOhZ2luYXMgbm8gV1AgKHBhZHLDo28gQm9sw6NvOiBhIFVSTCBtdWRhIGFvIG5hdmVnYXIpICovCnZhciBBRl9VUkxTID0gd2luZG93Ll9fQUZfVVJMUyB8fCB7IGxwOicuLycsIGNhZGFzdHJvOicjY2FkYXN0cm8nLCBhY2Vzc2FyOicjJywgYXJlYTonIycgfTsKCi8qIFZFUlRJQ0FMIChtdWx0aS1uaWNobyk6IG8gcHVibGljYWRvciBpbmpldGEgX19BRl9QUk9WQSBwb3IgZGVwbG95LiBFTkFNRUQgZQogICBSZXZhbGlkYSByb2RhbSBvIE1FU01PIGJ1bmRsZSwgY2FkYSB1bSBuYSBzdWEgVVJMIGUgbm8gc2V1IFN1cGFiYXNlLiBTZW0KICAgaW5qZcOnw6NvIChhcnF1aXZvIGxvY2FsKSwgY2FpIG5vIEVOQU1FRC4gKi8KdmFyIEFGX1BST1ZBID0gKHdpbmRvdy5fX0FGX1BST1ZBID09PSAncmV2YWxpZGEnKSA\/ICdyZXZhbGlkYScgOiAnZW5hbWVkJzsKLyogTWFyY2EgcG9yIHByb3ZhOiBzw7MgbyByw7N0dWxvIGN1cnRvIHVzYWRvIG5hcyBmcmFzZXMgZGUgVUkgKHTDrXR1bG9zIGUgZGF0YXMKICAgZGFzIGF1bGFzIGrDoSB2w6ptIHByb250b3MgZGUgSk9STkFEQVNbcHJvdmFdKS4gKi8KdmFyIEJSQU5EID0gewogIGVuYW1lZDogICB7IGN1cnRhOidFTkFNRUQnLCAgIHN1YjonRU5BTUVEIMK3IDIwMjYnLCAgICAgICAgICB0YWc6J0F0byBGaW5hbCDCtyBFTkFNRUQgMjAyNicsICAgICAgICAgICAgICBpbmF1ZzonUHJlbW9uacOnw6NvIEVOQU1FRCAyMDI2JyB9LAogIHJldmFsaWRhOiB7IGN1cnRhOidSZXZhbGlkYScsIHN1YjonUmV2YWxpZGEgwrcgSU5FUCAyMDI2LjInLCB0YWc6J0F0byBGaW5hbCDCtyBSZXZhbGlkYSBJTkVQIDIwMjYuMicsICAgICAgaW5hdWc6J1ByZW1vbmnDp8OjbyBSZXZhbGlkYSBJTkVQIDIwMjYuMicgfQp9Owp2YXIgQUZfQlJBTkQgPSBCUkFORFtBRl9QUk9WQV0gfHwgQlJBTkQuZW5hbWVkOwoKLyogSW5kaWNhw6fDo286IGNhcHR1cmEgP3JlZj0gZW0gUVVBTFFVRVIgcMOhZ2luYSBlIGd1YXJkYSBhdMOpIG8gY2FkYXN0cm8gKi8KdHJ5IHsKICB2YXIgX21yZWYgPSBsb2NhdGlvbi5zZWFyY2gubWF0Y2goL1s\/Jl1yZWY9KFthLXowLTldezYsMTZ9KS9pKTsKICBpZiAoX21yZWYpIGxvY2FsU3RvcmFnZS5zZXRJdGVtKExTUCsncmVmJywgX21yZWZbMV0udG9Mb3dlckNhc2UoKSk7Cn0gY2F0Y2goZSl7fQovKiBTdXBhYmFzZSBwb3IgZGVwbG95OiBvIHB1YmxpY2Fkb3IgaW5qZXRhIF9fQUZfU1VQQV9VUkwvX19BRl9BTk9OIGNvbmZvcm1lIG8KICAgdmVydGljYWwgKEVOQU1FRCBlIFJldmFsaWRhIHTDqm0gUFJPSkVUT1MgU0VQQVJBRE9TKS4gRmFsbGJhY2sgPSBFTkFNRUQsIHBybwogICBhcnF1aXZvIGxvY2FsIGFicmlyIHNlbSBjb25maWcuICovCnZhciBTVVBBX1VSTCA9IHdpbmRvdy5fX0FGX1NVUEFfVVJMIHx8ICdodHRwczovL2xzbmRsd2FkZmlybnVsem1xa2VzLnN1cGFiYXNlLmNvJzsKdmFyIFNVUEFfQU5PTiA9IHdpbmRvdy5fX0FGX0FOT04gfHwgJ2V5SmhiR2NpT2lKSVV6STFOaUlzSW5SNWNDSTZJa3BYVkNKOS5leUpwYzNNaU9pSnpkWEJoWW1GelpTSXNJbkpsWmlJNklteHpibVJzZDJGa1ptbHliblZzZW0xeGEyVnpJaXdpY205c1pTSTZJbUZ1YjI0aUxDSnBZWFFpT2pFM09EVTNOelF6TWpBc0ltVjRjQ0k2TWpFd01UTTFNRE15TUgwLkNRVXRBYkh1b1hpTWlEZXMtN3pKaE5keEZGQVRKQ3RIWm9lN3hPbm54VGcnOwoKLyogPT09IENSTTogZXNwZWxobyBkYSBpbnNjcmljYW8gcHJvIFNGTUMgdmlhIFZlcnNvIChhZG1pbi1hamF4KS4gTmFvIGJsb3F1ZWlhIG8gZmx1eG8gZG8gYWx1bm8uCiAgIGRvbmUoKSBuYXZlZ2EgbmEgaG9yYSAobG9jYXRpb24uaHJlZikgLT4gbyBQT1NUIHRlbSBxdWUgc2FpciBTSU5DUk9OTyBjb20ga2VlcGFsaXZlOwogICBwb3IgaXNzbyBhIGdlbyByZXNvbHZlIG5vIGJvb3QgKHBhZHJhbyBkbyBmb3JtIGNsYXNzaWNvKSwgbmFvIG5vIHN1Ym1pdC4gPT09ICovCnZhciBfX2FmU2ZtY1ZlcnNvID0gMzsKdmFyIF9fYWZTZm1jR2VvID0geyBjaXR5OiAnJywgcmVnaW9uOiAnJyB9Owp0cnkgewogIGZldGNoKCdodHRwczovL2V4dHJlbWUtaXAtbG9va3VwLmNvbS9qc29uLz9rZXk9a3JmR0h6cjcwNVVUaE1vangzYVAnKQogICAgLnRoZW4oZnVuY3Rpb24ocil7IHJldHVybiByLmpzb24oKTsgfSkKICAgIC50aGVuKGZ1bmN0aW9uKGQpewogICAgICBfX2FmU2ZtY0dlby5jaXR5ID0gKGQgJiYgZC5jaXR5KSA\/IGQuY2l0eSA6ICcnOwogICAgICBfX2FmU2ZtY0dlby5yZWdpb24gPSAoZCAmJiBkLnJlZ2lvbikgPyBkLnJlZ2lvbiA6ICcnOwogICAgfSkKICAgIC5jYXRjaChmdW5jdGlvbigpe30pOwp9IGNhdGNoKGUpe30KZnVuY3Rpb24gYWZTZm1jVXRtKCl7CiAgdmFyIG91dCA9IHsgdXRtX3NvdXJjZTonJywgdXRtX21lZGl1bTonJywgdXRtX2NhbXBhaWduOicnLCB1dG1fdGVybTonJywgdXRtX2NvbnRlbnQ6JycgfTsKICB2YXIga3MgPSBPYmplY3Qua2V5cyhvdXQpOwogIHZhciBhbnkgPSBmYWxzZTsKICB0cnkgewogICAgdmFyIHFzID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTsKICAgIGtzLmZvckVhY2goZnVuY3Rpb24oayl7IHZhciB2ID0gcXMuZ2V0KGspOyBpZiAodikgeyBvdXRba10gPSB2OyBhbnkgPSB0cnVlOyB9IH0pOwogIH0gY2F0Y2goZSl7fQogIGlmIChhbnkpIHJldHVybiBvdXQ7CiAgdmFyIHJhdyA9IG51bGw7CiAgdHJ5IHsKICAgIHZhciByb3cgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoJzsgJykuZmluZChmdW5jdGlvbihyKXsgcmV0dXJuIHIuaW5kZXhPZignZXN0cmF0ZWdpYV91dG09JykgPT09IDA7IH0pOwogICAgaWYgKHJvdykgcmF3ID0gZGVjb2RlVVJJQ29tcG9uZW50KHJvdy5zdWJzdHJpbmcocm93LmluZGV4T2YoJz0nKSArIDEpKTsKICB9IGNhdGNoKGUpe30KICBpZiAoIXJhdykgeyB0cnkgeyByYXcgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2VzdHJhdGVnaWFfdXRtJyk7IH0gY2F0Y2goZSl7fSB9CiAgaWYgKHJhdykgewogICAgdHJ5IHsKICAgICAgdmFyIHAgPSBKU09OLnBhcnNlKHJhdyk7CiAgICAgIGlmIChwICYmIHAudHMgJiYgcC52ICYmIChEYXRlLm5vdygpIC0gcC50cykgPD0gNDgqMzZlNSkgewogICAgICAgIGtzLmZvckVhY2goZnVuY3Rpb24oayl7IGlmIChwLnZba10pIG91dFtrXSA9IHAudltrXTsgfSk7CiAgICAgIH0KICAgIH0gY2F0Y2goZSl7fQogIH0KICByZXR1cm4gb3V0Owp9CmZ1bmN0aW9uIGFmU2ZtY0VudmlhcigpewogIHZhciBnID0gZnVuY3Rpb24oaWQpeyB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7IHJldHVybiAoZWwgJiYgZWwudmFsdWUpID8gZWwudmFsdWUgOiAnJzsgfTsKICB2YXIgdXRtID0gYWZTZm1jVXRtKCk7CiAgdmFyIGFyZWEgPSAnJzsKICB0cnkgeyBhcmVhID0gKHdpbmRvdy5fX0FGX1VSTFMgJiYgd2luZG93Ll9fQUZfVVJMUy5hcmVhKSA\/IHdpbmRvdy5fX0FGX1VSTFMuYXJlYS5zcGxpdCgnPycpWzBdIDogJyc7IH0gY2F0Y2goZSl7fQogIHZhciBmID0gewogICAgTm9tZV9Db21wbGV0bzogZygnZk5vbWUnKSwKICAgIEVtYWlsOiBnKCdmRW1haWwnKSwKICAgIFRlbGVmb25lOiBnKCdmV2hhdHMnKSwKICAgIEFub19kZV9Gb3JtYXR1cmE6IGcoJ2ZNb21lbnRvJyksCiAgICBQYWdpbmFfT3JpZ2VtOiB3aW5kb3cubG9jYXRpb24uaHJlZiwKICAgIHV0bV9zb3VyY2U6IHV0bS51dG1fc291cmNlLCB1dG1fbWVkaXVtOiB1dG0udXRtX21lZGl1bSwgdXRtX2NhbXBhaWduOiB1dG0udXRtX2NhbXBhaWduLAogICAgdXRtX3Rlcm06IHV0bS51dG1fdGVybSwgdXRtX2NvbnRlbnQ6IHV0bS51dG1fY29udGVudCwKICAgIGNoYXZlX2RlOiAnMDFfRU1FRF9MRUFEU19UT1RBSVMnLAogICAgbWlkOiAnNTE1MDA5MDE4JywKICAgIENvcmluZ2FfMDI6IGFyZWEsCiAgICBJbnRlcmVzc2VfQ29uY3Vyc286ICdlbWVkJywKICAgIHdlbGNvbWU6ICdvZmYnLAogICAgSW50ZXJlc3NlX0FyZWE6ICdFTUVEX0FyZWEnLAogICAgQ29yaW5nYV8wMTogJ2xhbmRpbmctcGFnZScsCiAgICBNb2RvX2RlX2VudHJhZGE6ICdsYW5kaW5nLXBhZ2UnLAogICAgSW50ZXJlc3NlX0V2ZW50bzogKHdpbmRvdy5fX0FGX1BST1ZBID09PSAncmV2YWxpZGEnKSA\/ICdBdG8gRmluYWwgUmV2YWxpZGEgSU5FUCAyMDI2LjInIDogJ0F0byBGaW5hbCBFTkFNRUQgMjAyNicsCiAgICBkZXZfemFwcDogJ29mZicsCiAgICBDaWRhZGVfZGVfT3JpZ2VtX2RvX0lQOiAnJywKICAgIEVzdGFkb19kZV9PcmlnZW1fZG9fSVA6ICcnCiAgfTsKICBpZiAoIWYuRW1haWwpIHJldHVybjsKICBmLkNpZGFkZV9kZV9PcmlnZW1fZG9fSVAgPSBfX2FmU2ZtY0dlby5jaXR5OwogIGYuRXN0YWRvX2RlX09yaWdlbV9kb19JUCA9IF9fYWZTZm1jR2VvLnJlZ2lvbjsKICB2YXIgbGVhZCA9IE9iamVjdC5rZXlzKGYpLm1hcChmdW5jdGlvbihrKXsgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChrKSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudChmW2tdKTsgfSkuam9pbignJicpOwogIHZhciBjb3JwbyA9ICdhY3Rpb249YWpheF9zdWJtaXRfZm9ybV9uZXcmbGVhZD0nICsgZW5jb2RlVVJJQ29tcG9uZW50KGxlYWQpOwogIGZldGNoKCdodHRwczovL21rdC5lc3RyYXRlZ2lhLmNvbS9tZWQvd3AtYWRtaW4vYWRtaW4tYWpheC5waHAnLCB7CiAgICBtZXRob2Q6ICdQT1NUJywKICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLTgnIH0sCiAgICBib2R5OiBjb3JwbywKICAgIGtlZXBhbGl2ZTogdHJ1ZQogIH0pLmNhdGNoKGZ1bmN0aW9uKCl7fSk7Cn0KLyogRXZlbnRvIGRlIGNvbnZlcnNhbyBwcm8gR1RNIChHVE0tTjVON0pIOCk6IGEgYmF0ZXJpYSBkZSBMZWFkIChNZXRhIFBpeGVsLCBHQTQKICAgZ2VuZXJhdGVfbGVhZCwgQmluZykgZGlzcGFyYSBubyBldmVudG8gY3VzdG9taXphZG8gJ2Zvcm1fc3VibWl0JyBlbSBxdWFscXVlciBwYWdpbmEKICAgZG8gbWt0LiBSZXBsaWNhIGRvIHB1c2hGb3JtU3VibWl0VG9EYXRhTGF5ZXIgZG8gZm9ybSBjbGFzc2ljbyArIHVzZXJEYXRhLiogKGNhZGVpYQogICBwcmltYXJpYSBkbyBhZHZhbmNlZCBtYXRjaGluZykgKyBpbnB1dHMgb2N1bHRvcyAjZW1haWwvI2ZpcnN0X25hbWUvI3Bob25lIChjYWRlaWEgZGUKICAgZmFsbGJhY2sgZG9zIG1hY3JvcykuIGRvbmUoKSBuYXZlZ2EgbmEgaG9yYSwgZW50YW8gc2VndXJhbW9zIGEgbmF2ZWdhY2FvIG5vCiAgIGV2ZW50Q2FsbGJhY2sgY29tIHRldG8gZGUgOTAwbXMgcHJvcyBwaXhlbHMgc2FpcmVtLiAqLwpmdW5jdGlvbiBhZkd0bUxlYWQoY2IpewogIHZhciBmaW0gPSBmYWxzZTsKICB2YXIgZ28gPSBmdW5jdGlvbigpeyBpZiAoZmltKSByZXR1cm47IGZpbSA9IHRydWU7IHRyeSB7IGNiKCk7IH0gY2F0Y2goZSl7fSB9OwogIHRyeSB7CiAgICB2YXIgZyA9IGZ1bmN0aW9uKGlkKXsgdmFyIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOyByZXR1cm4gKGVsICYmIGVsLnZhbHVlKSA\/IGVsLnZhbHVlIDogJyc7IH07CiAgICB2YXIgbm9tZSA9IGcoJ2ZOb21lJyksIGVtYWlsID0gZygnZkVtYWlsJyksIHRlbCA9IGcoJ2ZXaGF0cycpOwogICAgdmFyIHBhcnRlcyA9IG5vbWUudHJpbSgpLnNwbGl0KC9ccysvKTsKICAgIHZhciBwcmltZWlybyA9IHBhcnRlcy5sZW5ndGggPyBwYXJ0ZXNbMF0udG9Mb3dlckNhc2UoKSA6ICcnOwogICAgdmFyIHVsdGltbyA9IHBhcnRlcy5sZW5ndGggPiAxID8gcGFydGVzW3BhcnRlcy5sZW5ndGggLSAxXS50b0xvd2VyQ2FzZSgpIDogJyc7CiAgICB2YXIgbWsgPSBmdW5jdGlvbihpZCwgdmFsKXsKICAgICAgaWYgKCF2YWwpIHJldHVybjsKICAgICAgdmFyIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOwogICAgICBpZiAoIWVsKSB7IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTsgZWwudHlwZSA9ICdoaWRkZW4nOyBlbC5pZCA9IGlkOyBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGVsKTsgfQogICAgICBlbC52YWx1ZSA9IHZhbDsKICAgIH07CiAgICBtaygnZmlyc3RfbmFtZScsIG5vbWUpOyBtaygnZW1haWwnLCBlbWFpbCk7IG1rKCdwaG9uZScsIHRlbCk7CiAgICB3aW5kb3cuZGF0YUxheWVyID0gd2luZG93LmRhdGFMYXllciB8fCBbXTsKICAgIHdpbmRvdy5kYXRhTGF5ZXIucHVzaCh7CiAgICAgIGV2ZW50OiAnZm9ybV9zdWJtaXQnLAogICAgICBldmVudE1vZGVsOiB7CiAgICAgICAgZm9ybV9pZDogJ2Zvcm1zX2xheW91dCcsCiAgICAgICAgZm9ybV9uYW1lOiBudWxsLAogICAgICAgIGZvcm1fZGVzdGluYXRpb246IHdpbmRvdy5sb2NhdGlvbi5ocmVmLAogICAgICAgIGZvcm1fbGVuZ3RoOiA1LAogICAgICAgIGZvcm1fc3VibWl0X3RleHQ6ICdJbnNjcmV2ZXIgZSBlbnRyYXInLAogICAgICAgIGVtYWlsOiBlbWFpbAogICAgICB9LAogICAgICB1c2VyRGF0YTogeyBlbWFpbDogZW1haWwudG9Mb3dlckNhc2UoKSwgZmlyc3ROYW1lOiBwcmltZWlybywgbGFzdE5hbWU6IHVsdGltbywgcGhvbmU6IHRlbCB9LAogICAgICBlbWFpbDogZW1haWwsCiAgICAgIGV2ZW50Q2FsbGJhY2s6IGdvLAogICAgICBldmVudFRpbWVvdXQ6IDcwMAogICAgfSk7CiAgfSBjYXRjaChlKXsgZ28oKTsgfQogIHNldFRpbWVvdXQoZ28sIDkwMCk7Cn0KZnVuY3Rpb24gc2JScGMoZm4sIGJvZHkpewogIHJldHVybiBmZXRjaChTVVBBX1VSTCArICcvcmVzdC92MS9ycGMvJyArIGZuLCB7CiAgICBtZXRob2Q6ICdQT1NUJywKICAgIGhlYWRlcnM6IHsgJ2FwaWtleSc6IFNVUEFfQU5PTiwgJ0F1dGhvcml6YXRpb24nOiAnQmVhcmVyICcgKyBTVVBBX0FOT04sICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSwKICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGJvZHkgfHwge30pCiAgfSkudGhlbihmdW5jdGlvbihyKXsgcmV0dXJuIHIuanNvbigpOyB9KTsKfQpmdW5jdGlvbiBzYlNlbGVjdChwYXRoKXsKICByZXR1cm4gZmV0Y2goU1VQQV9VUkwgKyAnL3Jlc3QvdjEvJyArIHBhdGgsIHsKICAgIGhlYWRlcnM6IHsgJ2FwaWtleSc6IFNVUEFfQU5PTiwgJ0F1dGhvcml6YXRpb24nOiAnQmVhcmVyICcgKyBTVVBBX0FOT04gfQogIH0pLnRoZW4oZnVuY3Rpb24ocil7IHJldHVybiByLmpzb24oKTsgfSk7Cn0KCi8qIGNhY2hlIGhpZHJhdGFkbyBubyBib290OyBvcyByZW5kZXJzIGxlZW0gZGFxdWkgZGUgZm9ybWEgc8OtbmNyb25hICovCnZhciBDQUNIRSA9IHsKICB1c2VyOiBudWxsLCAgICAgICAgICAvLyB7bm9tZSwgZW1haWwsIHByb3ZhLCBjcGZ9CiAgY2hlY2tpbnM6IHt9LCAgICAgICAgLy8gZXZJZCAtPiB7YW9fdml2bywgdHN9CiAgcmVzcG9zdGFzOiB7fSwgICAgICAgLy8gcXVlc3Rhb19pZCAtPiB7ZXZlbnRvX2lkLCBsZXRyYSwgYWNlcnRvdSwgY29ycmV0YSwgY29tZW50YXJpb30KICBxdWVzdG9lczoge30sICAgICAgICAvLyBldklkIC0+IFt7aWQsIG9yZGVtLCBhcmVhLCBxLCBhbHRzfV0KICBzaW1SZXM6IG51bGwsICAgICAgICAvLyB7YWNlcnRvcywgdG90YWwsIHJlc3Bvc3Rhc30KICBzaW1Qcm9nOiBudWxsLCAgICAgICAvLyB7aW5pY2lhZG9fZW0sIHJlc3Bvc3RhcywgbWFyY2FkYXN9CiAgcmFua2luZzogbnVsbAp9OwovKiBTZXNzw6NvIFJFU0lMSUVOVEU6IG8gU2FmYXJpIGRvIGlQaG9uZSAobW9kbyBwcml2YWRvIC8gYmxvcXVlaW8gZGUgY29va2llcykKICAgcG9kZSByZWN1c2FyIG8gbG9jYWxTdG9yYWdlLiBTZW0gZmFsbGJhY2ssIGEgc2Vzc8OjbyBtb3JyZSBuYSB0cm9jYSBkZQogICBww6FnaW5hIGUgbyBhbHVubyBmaWNhIHByZXNvIG5vIGxhw6dvIGFjZXNzYXIg4oaSIMOhcmVhIOKGkiBhY2Vzc2FyLiAqLwp2YXIgX3Nlc3Nhb01lbSA9IG51bGw7CmZ1bmN0aW9uIF9jb29raWVHZXQobil7CiAgdmFyIG0gPSBkb2N1bWVudC5jb29raWUubWF0Y2goJyhefDsgKScgKyBuICsgJz0oW147XSopJyk7CiAgcmV0dXJuIG0gPyBkZWNvZGVVUklDb21wb25lbnQobVsyXSkgOiBudWxsOwp9CmZ1bmN0aW9uIF9jb29raWVTZXQobiwgdiwgZGlhcyl7CiAgdHJ5IHsKICAgIGRvY3VtZW50LmNvb2tpZSA9IG4gKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodikgKyAnO3BhdGg9L21lZC9hdG8tZmluYWwtZW5hbWVkLzttYXgtYWdlPScgKwogICAgICAoZGlhcyA\/IGRpYXMgKiA4NjQwMCA6IDApICsgJztTYW1lU2l0ZT1MYXgnICsgKGxvY2F0aW9uLnByb3RvY29sID09PSAnaHR0cHM6JyA\/ICc7U2VjdXJlJyA6ICcnKTsKICB9IGNhdGNoKGUpe30KfQpmdW5jdGlvbiBzZXNzYW9TZXQoY3BmKXsKICBfc2Vzc2FvTWVtID0gY3BmOwogIHRyeSB7IGxvY2FsU3RvcmFnZS5zZXRJdGVtKExTUCsnY3BmJywgY3BmKTsgfSBjYXRjaChlKXt9CiAgX2Nvb2tpZVNldChMU1ArJ2NwZicsIGNwZiwgMzApOwp9CmZ1bmN0aW9uIHNlc3Nhb0xpbXBhKCl7CiAgX3Nlc3Nhb01lbSA9IG51bGw7CiAgdHJ5IHsgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oTFNQKydjcGYnKTsgfSBjYXRjaChlKXt9CiAgX2Nvb2tpZVNldChMU1ArJ2NwZicsICcnLCAwKTsKfQpmdW5jdGlvbiBjcGZTYWx2bygpewogIHZhciB2ID0gbnVsbDsKICB0cnkgeyB2ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oTFNQKydjcGYnKTsgfSBjYXRjaChlKXt9CiAgaWYgKCF2KSB2ID0gX2Nvb2tpZUdldChMU1ArJ2NwZicpOwogIGlmICghdikgdiA9IF9zZXNzYW9NZW07CiAgaWYgKHYpIHsgX3Nlc3Nhb01lbSA9IHY7IHRyeSB7IGxvY2FsU3RvcmFnZS5zZXRJdGVtKExTUCsnY3BmJywgdik7IH0gY2F0Y2goZSl7fSB9CiAgcmV0dXJuIHY7Cn0KZnVuY3Rpb24gYXJtYXplbmFtZW50b09rKCl7CiAgdHJ5IHsgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ19fdCcsICcxJyk7IGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdfX3QnKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2goZSl7IHJldHVybiBmYWxzZTsgfQp9CgpmdW5jdGlvbiBoaWRyYXRhcigpewogIHZhciBjcGYgPSBjcGZTYWx2bygpOwogIGlmICghY3BmKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTsKICByZXR1cm4gUHJvbWlzZS5hbGwoWwogICAgc2JScGMoJ2VzdGFkb19wYXJ0aWNpcGFudGUnLCB7IHBfY3BmOiBjcGYgfSksCiAgICBzYlNlbGVjdCgncXVpel9xdWVzdG9lcz9zZWxlY3Q9aWQsZXZlbnRvX2lkLG9yZGVtLGFyZWEsZW51bmNpYWRvLGFsdGVybmF0aXZhcyZvcmRlcj1vcmRlbScpCiAgXSkudGhlbihmdW5jdGlvbihyZXMpewogICAgdmFyIGVzdCA9IHJlc1swXSwgcXMgPSByZXNbMV07CiAgICBpZiAoIWVzdCB8fCBlc3Quc3RhdHVzICE9PSAnb2snKSByZXR1cm4gZmFsc2U7CiAgICBDQUNIRS51c2VyID0geyBub21lOiBlc3Qubm9tZSwgZW1haWw6IGVzdC5lbWFpbCwgcHJvdmE6IGVzdC5wcm92YSwgY3BmOiBjcGYgfTsKICAgIENBQ0hFLnJlZkNvZGUgPSBlc3QucmVmX2NvZGUgfHwgJyc7CiAgICBDQUNIRS5pbmRpY2Fjb2VzID0gZXN0LmluZGljYWNvZXMgfHwgeyB2YWxpZGFzOiAwLCBwZW5kZW50ZXM6IDAsIGxpc3RhOiBbXSB9OwogICAgQ0FDSEUuY2hlY2tpbnMgPSB7fTsKICAgIE9iamVjdC5rZXlzKGVzdC5jaGVja2lucyB8fCB7fSkuZm9yRWFjaChmdW5jdGlvbihldil7CiAgICAgIENBQ0hFLmNoZWNraW5zW2V2XSA9IHsgYW9WaXZvOiBlc3QuY2hlY2tpbnNbZXZdLmFvX3Zpdm8sIHRzOiBlc3QuY2hlY2tpbnNbZXZdLnRzICogMTAwMCB9OwogICAgfSk7CiAgICBDQUNIRS5yZXNwb3N0YXMgPSB7fTsKICAgIChlc3QucmVzcG9zdGFzIHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHIpeyBDQUNIRS5yZXNwb3N0YXNbci5xdWVzdGFvX2lkXSA9IHI7IH0pOwogICAgQ0FDSEUuc2ltUmVzID0gZXN0LnNpbXVsYWRvX3Jlc3VsdCB8fCBudWxsOwogICAgQ0FDSEUuc2ltUHJvZyA9IGVzdC5zaW11bGFkb19wcm9ncmVzcyB8fCBudWxsOwogICAgQ0FDSEUucXVlc3RvZXMgPSB7fTsKICAgIChBcnJheS5pc0FycmF5KHFzKSA\/IHFzIDogW10pLmZvckVhY2goZnVuY3Rpb24ocm93KXsKICAgICAgKENBQ0hFLnF1ZXN0b2VzW3Jvdy5ldmVudG9faWRdID0gQ0FDSEUucXVlc3RvZXNbcm93LmV2ZW50b19pZF0gfHwgW10pLnB1c2goewogICAgICAgIGlkOiByb3cuaWQsIG9yZGVtOiByb3cub3JkZW0sIGFyZWE6IHJvdy5hcmVhLCBxOiByb3cuZW51bmNpYWRvLCBhbHRzOiByb3cuYWx0ZXJuYXRpdmFzCiAgICAgIH0pOwogICAgfSk7CiAgICByZXR1cm4gdHJ1ZTsKICB9KTsKfQoKLyogc3RvcmU6IE1FU01BIGludGVyZmFjZSBzw61uY3JvbmEgZG8gcHJvdMOzdGlwbywgc2VydmlkYSBwZWxvIENBQ0hFICovCnZhciBzdG9yZSA9IHsKICBfazogZnVuY3Rpb24oayl7IHJldHVybiBMU1AgKyBrOyB9LAogIGdldDogZnVuY3Rpb24oaywgZmIpeyB0cnkgeyB2YXIgdiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuX2soaykpOyByZXR1cm4gdiA\/IEpTT04ucGFyc2UodikgOiAoZmI9PT11bmRlZmluZWQ\/IG51bGw6IGZiKTsgfSBjYXRjaChlKXsgcmV0dXJuIChmYj09PXVuZGVmaW5lZD8gbnVsbDogZmIpOyB9IH0sCiAgc2V0OiBmdW5jdGlvbihrLCB2KXsgdHJ5IHsgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5fayhrKSwgSlNPTi5zdHJpbmdpZnkodikpOyB9IGNhdGNoKGUpe30gfSwKCiAgc2Vzc2lvbjogZnVuY3Rpb24oKXsgcmV0dXJuIGNwZlNhbHZvKCk7IH0sCiAgbG9nb3V0OiBmdW5jdGlvbigpeyBzZXNzYW9MaW1wYSgpOyB9LAogIG1lOiBmdW5jdGlvbigpeyByZXR1cm4gQ0FDSEUudXNlcjsgfSwKCiAgY2hlY2tpbnM6IGZ1bmN0aW9uKCl7IHJldHVybiBDQUNIRS5jaGVja2luczsgfSwKCiAgLy8gbWlzc8OjbyAiY3VtcHJpZGEiID0gVE9EQVMgYXMgcXVlc3TDtWVzIGRvIGRpYSByZXNwb25kaWRhcyBubyBzZXJ2aWRvcgogIG1pc3NvZXM6IGZ1bmN0aW9uKCl7CiAgICB2YXIgb3V0ID0ge307CiAgICBPYmplY3Qua2V5cyhDQUNIRS5xdWVzdG9lcykuZm9yRWFjaChmdW5jdGlvbihldil7CiAgICAgIHZhciBxcyA9IENBQ0hFLnF1ZXN0b2VzW2V2XTsKICAgICAgaWYgKCFxcy5sZW5ndGgpIHJldHVybjsKICAgICAgdmFyIHJlc3AgPSBxcy5maWx0ZXIoZnVuY3Rpb24ocSl7IHJldHVybiBDQUNIRS5yZXNwb3N0YXNbcS5pZF07IH0pOwogICAgICBpZiAocmVzcC5sZW5ndGggPT09IHFzLmxlbmd0aCkgewogICAgICAgIG91dFtldl0gPSB7CiAgICAgICAgICBhY2VydG9zOiByZXNwLmZpbHRlcihmdW5jdGlvbihxKXsgcmV0dXJuIENBQ0hFLnJlc3Bvc3Rhc1txLmlkXS5hY2VydG91OyB9KS5sZW5ndGgsCiAgICAgICAgICB0b3RhbDogcXMubGVuZ3RoLAogICAgICAgICAgdHM6IDAKICAgICAgICB9OwogICAgICB9CiAgICB9KTsKICAgIHJldHVybiBvdXQ7CiAgfSwKCiAgLy8gbm90YSAlIGRvIFNpbXVsYWRvIEZpbmFsIChyZXN1bHRhZG8gZG8gc2Vydmlkb3IpCiAgc2ltdWxhZG86IGZ1bmN0aW9uKCl7CiAgICBpZiAoIUNBQ0hFLnNpbVJlcyB8fCAhQ0FDSEUuc2ltUmVzLnRvdGFsKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiB7IG5vdGE6IE1hdGgucm91bmQoMTAwICogQ0FDSEUuc2ltUmVzLmFjZXJ0b3MgLyBDQUNIRS5zaW1SZXMudG90YWwpIH07CiAgfQp9OwoKLyogLS0tLS0tLS0tLS0tLS0tLSB1dGlsaWRhZGVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KZnVuY3Rpb24gJChzLCBlbCl7IHJldHVybiAoZWx8fGRvY3VtZW50KS5xdWVyeVNlbGVjdG9yKHMpOyB9CmZ1bmN0aW9uICQkKHMsIGVsKXsgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKChlbHx8ZG9jdW1lbnQpLnF1ZXJ5U2VsZWN0b3JBbGwocykpOyB9Ci8qIGVzYyBlc2NhcGEgVEFNQsOJTSBhc3BhcyAoIiAnKTogYSB2YXJpYW50ZSBhbnRpZ2EgdGV4dENvbnRlbnQtPmlubmVySFRNTCBzw7MKICAgZXNjYXBhdmEgJiA8ID4sIGVudMOjbyBVUkwvbm9tZSBpbnRlcnBvbGFkbyBkZW50cm8gZGUgdW0gYXRyaWJ1dG8gKHNyYz0iLi4iLAogICBocmVmPSIuLiIpIHBvZGlhIHF1ZWJyYXIgbyBhdHJpYnV0byBlIHBsYW50YXIgb24uLi49IChYU1MgdmlhIG1pZGlhSFRNTCBlIHZpYQogICBsZXRyYSBkZSBhbHRlcm5hdGl2YSkuIEF1ZGl0b3JpYSAxMS8wOC4gKi8KZnVuY3Rpb24gZXNjKHMpeyByZXR1cm4gU3RyaW5nKHM9PW51bGw\/Jyc6cykucmVwbGFjZSgvWyY8PiInXS9nLCBmdW5jdGlvbihjKXsKICByZXR1cm4geycmJzonJmFtcDsnLCc8JzonJmx0OycsJz4nOicmZ3Q7JywnIic6JyZxdW90OycsIiciOicmIzM5Oyd9W2NdOyB9KTsgfQpmdW5jdGlvbiB0b2FzdChtc2cpeyB2YXIgdD0kKCcjdG9hc3QnKTsgaWYoIXQpIHJldHVybjsgdC50ZXh0Q29udGVudD1tc2c7IHQuY2xhc3NMaXN0LmFkZCgnc2hvdycpOyBjbGVhclRpbWVvdXQodG9hc3QuX3QpOyB0b2FzdC5fdD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7IHQuY2xhc3NMaXN0LnJlbW92ZSgnc2hvdycpOyB9LCAzMjAwKTsgfQpmdW5jdGlvbiBkYXRhQlIoaXNvKXsgdmFyIHA9aXNvLnNwbGl0KCctJyk7IHJldHVybiBwWzJdKycvJytwWzFdOyB9CnZhciBNRVNFUyA9IFsnSkFOJywnRkVWJywnTUFSJywnQUJSJywnTUFJJywnSlVOJywnSlVMJywnQUdPJywnU0VUJywnT1VUJywnTk9WJywnREVaJ107CnZhciBNRVNFU19GVUxMID0gWydKYW5laXJvJywnRmV2ZXJlaXJvJywnTWFyw6dvJywnQWJyaWwnLCdNYWlvJywnSnVuaG8nLCdKdWxobycsJ0Fnb3N0bycsJ1NldGVtYnJvJywnT3V0dWJybycsJ05vdmVtYnJvJywnRGV6ZW1icm8nXTsKLyogYWNlaXRhIC9saXZlL0lELCB5b3V0dS5iZS9JRCwgL2VtYmVkL0lEIEUgd2F0Y2g\/dj1JRCAoYSBBdWxhIEluYXVndXJhbCB2ZWlvCiAgIG5vIGZvcm1hdG8gd2F0Y2g\/dj0sIHF1ZSBjYcOtYSBlbSAid2F0Y2giIGUgcXVlYnJhdmEgYSB0aHVtYikgKi8KZnVuY3Rpb24geXRUaHVtYih1cmwpewogIGlmICghdXJsKSByZXR1cm4gbnVsbDsKICB2YXIgbSA9IHVybC5tYXRjaCgvWz8mXXY9KFtcdy1dezYsfSkvKSB8fCB1cmwubWF0Y2goL1wvKD86bGl2ZXxlbWJlZClcLyhbXHctXXs2LH0pLykgfHwgdXJsLm1hdGNoKC95b3V0dVwuYmVcLyhbXHctXXs2LH0pLyk7CiAgdmFyIGlkID0gbSA\/IG1bMV0gOiB1cmwuc3BsaXQoJy8nKS5wb3AoKS5zcGxpdCgnPycpWzBdOwogIHJldHVybiAnaHR0cHM6Ly9pLnl0aW1nLmNvbS92aS8nK2lkKycvaHFkZWZhdWx0LmpwZyc7Cn0KZnVuY3Rpb24gZGlhTWVzKGlzbyl7IHZhciBwPWlzby5zcGxpdCgnLScpOyByZXR1cm4geyBkOnBbMl0sIG06TUVTRVNbcGFyc2VJbnQocFsxXSwxMCktMV0gfTsgfQpmdW5jdGlvbiBkaWFzKGEsIGIpeyByZXR1cm4gTWF0aC5yb3VuZCgobmV3IERhdGUoYisnVDEyOjAwOjAwJykgLSBuZXcgRGF0ZShhKydUMTI6MDA6MDAnKSkgLyA4NjQwMDAwMCk7IH0KCi8qIERhdGEgc2ltdWxhZGEgZG8gcHJvdMOzdGlwbzogZm9yYSBkYSBqYW5lbGEgZGEgam9ybmFkYSwgbyBwYWluZWwgdXNhIHVtYQogICBkYXRhIGRlbW8gbm8gbWVpbyBkYSAywqogc2VtYW5hIHBhcmEgZGFyIHZpZGEgw6AgZGVtb25zdHJhw6fDo28uCiAgIFNvYnJlc2NyZXZhIGNvbSA\/aG9qZT1BQUFBLU1NLUREIG5hIFVSTC4gKi8KZnVuY3Rpb24gaG9qZUlTTyhqb3JuYWRhKXsKICAvLyBQUk9EVcOHw4NPOiBzZW1wcmUgYSBkYXRhIHJlYWwgZW0gQlJUIChvIHNlcnZpZG9yIHJldmFsaWRhIHRvZGFzIGFzIGRhdGFzKQogIHZhciBpc28gPSBuZXcgRGF0ZSgpLnRvTG9jYWxlRGF0ZVN0cmluZygnc3YnLCB7IHRpbWVab25lOiAnQW1lcmljYS9TYW9fUGF1bG8nIH0pOwogIHJldHVybiB7IGlzbzogaXNvLCBzaW11bGFkYTogZmFsc2UgfTsKfQoKLyogLS0tLS0tLS0tLS0tLS0tLSBwb250dWHDp8OjbyAtLS0tLS0tLS0tLS0tLS0tICovCmZ1bmN0aW9uIGNhbGNQb250b3ModXNlcil7CiAgdmFyIGogPSBKT1JOQURBU1t1c2VyLnByb3ZhXTsKICB2YXIgaG9qZSA9IGhvamVJU08oaikuaXNvOwogIHZhciBjaGVja3MgPSBzdG9yZS5jaGVja2lucyh1c2VyLmVtYWlsKTsKICB2YXIgbWlzcyA9IHN0b3JlLm1pc3NvZXModXNlci5lbWFpbCk7CiAgdmFyIHNpbSA9IHN0b3JlLnNpbXVsYWRvKHVzZXIuZW1haWwpOwoKICB2YXIgZXZQYXNzYWRvcyA9IGouZXZlbnRvcy5maWx0ZXIoZnVuY3Rpb24oZSl7IHJldHVybiBlLmRhdGEgPD0gaG9qZTsgfSk7CiAgdmFyIG5DaGVja3MgPSBPYmplY3Qua2V5cyhjaGVja3MpLmxlbmd0aDsKICB2YXIgcHRzUHJlcyA9IDA7CiAgai5ldmVudG9zLmZvckVhY2goZnVuY3Rpb24oZSl7CiAgICB2YXIgYyA9IGNoZWNrc1tlLmlkXTsKICAgIGlmICghYykgcmV0dXJuOwogICAgcHRzUHJlcyArPSAoKHR5cGVvZiBjID09PSAnb2JqZWN0JyAmJiBjLmFvVml2byA9PT0gZmFsc2UpID8gUFRfQVVMQV9SRVRSTyA6IFBUX0FVTEEpOwogIH0pOwoKICB2YXIgcXVpenplcyA9IGouZXZlbnRvcy5maWx0ZXIoZnVuY3Rpb24oZSl7IHJldHVybiBlLnF1aXo7IH0pOwogIHZhciBwdHNNaXNzID0gMCwgbk1pc3MgPSAwOwogIHF1aXp6ZXMuZm9yRWFjaChmdW5jdGlvbihlKXsgdmFyIG0gPSBtaXNzW2UuaWRdOyBpZiAobSl7IG5NaXNzKys7IHB0c01pc3MgKz0gUFRfRElBX1BJU08gKyBNYXRoLnJvdW5kKFBUX0RJQV9BQ0VSVE9TICogbS5hY2VydG9zIC8gbS50b3RhbCk7IH0gfSk7CgogIHZhciBwdHNTaW0gPSBDQUNIRS5zaW1SZXMgPyBQVF9TSU1fQUNFUlRPICogQ0FDSEUuc2ltUmVzLmFjZXJ0b3MgOiAwOwogIHZhciBwdHNJbmQgPSBQVF9JTkQgKiAoKENBQ0hFLmluZGljYWNvZXMgJiYgQ0FDSEUuaW5kaWNhY29lcy52YWxpZGFzKSB8fCAwKTsgIC8vIHNlbSB0ZXRvCgogIC8vIG9mZW5zaXZhOiBkaWFzLWV2ZW50byBjb25zZWN1dGl2b3MgY29tIGNoZWNrLWluLCBjb250YW5kbyBkZSB0csOhcyBwcmEKICAvLyBmcmVudGUg4oCUIHPDsyBzb2JyZSBldmVudG9zIENPTSBjaGF2ZSAoZW4wMCBJbmF1Z3VyYWwgZSBlbjA3IFNpbXVsYWRvIG7Do28KICAvLyB0w6ptIGNoZWNrLWluIGUgbsOjbyBwb2RlbSBxdWVicmFyIGEgc2VxdcOqbmNpYSkKICB2YXIgc2VxID0gMDsKICB2YXIgZXZTdHJlYWsgPSBldlBhc3NhZG9zLmZpbHRlcihmdW5jdGlvbihlKXsgcmV0dXJuIFRFTV9DSEFWRS5pbmRleE9mKGUuaWQpID4gLTE7IH0pOwogIGZvciAodmFyIGkgPSBldlN0cmVhay5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgewogICAgaWYgKGNoZWNrc1tldlN0cmVha1tpXS5pZF0pIHNlcSsrOyBlbHNlIGJyZWFrOwogIH0KCiAgcmV0dXJuIHsKICAgIHByZXNlbmNhOiBwdHNQcmVzLCBtaXNzb2VzOiBwdHNNaXNzLCBzaW11bGFkbzogcHRzU2ltLCBpbmRpY2FjYW86IHB0c0luZCwKICAgIHRvdGFsOiBwdHNQcmVzICsgcHRzTWlzcyArIHB0c1NpbSArIHB0c0luZCwKICAgIG5DaGVja3M6IG5DaGVja3MsIG5FdmVudG9zOiBURU1fQ0hBVkUubGVuZ3RoLCBuRXZQYXNzYWRvczogZXZQYXNzYWRvcy5sZW5ndGgsCiAgICBuTWlzczogbk1pc3MsIG5RdWl6emVzOiBxdWl6emVzLmxlbmd0aCwgb2ZlbnNpdmE6IHNlcSwgc2ltOiBzaW0KICB9Owp9CmZ1bmN0aW9uIGZtdFB0cyhuKXsgcmV0dXJuIFN0cmluZyhNYXRoLnJvdW5kKG4pKTsgfQoKLyogVGV4dG8g4oaSIEhUTUwgZGFzIHF1ZXN0w7Vlcy9jb21lbnTDoXJpb3M6IGVzY2FwYSwgdHJhbnNmb3JtYSBVUkwgZGUgSU1BR0VNCiAgICh3ZWJwL3BuZy9qcGcvZ2lmIOKAlCBleC46IG3DrWRpYSBkbyBXUCBjb20gYXMgaW1hZ2VucyBkYXMgcXVlc3TDtWVzKSBlbSA8aW1nPgogICByZXNwb25zaXZhIGUgZGVtYWlzIFVSTHMgZW0gbGluayBjbGljw6F2ZWwuICovCmZ1bmN0aW9uIG1pZGlhSFRNTCh0eHQpewogIGlmICghdHh0KSByZXR1cm4gJyc7CiAgcmV0dXJuIGVzYyh0eHQpLnJlcGxhY2UoL2h0dHBzPzpcL1wvW15cczxdKy9nLCBmdW5jdGlvbih1KXsKICAgIHZhciBmaW0gPSAnJzsKICAgIHZhciBtID0gdS5tYXRjaCgvWykuLDs6XSskLyk7CiAgICBpZiAobSl7IGZpbSA9IG1bMF07IHUgPSB1LnNsaWNlKDAsIHUubGVuZ3RoIC0gZmltLmxlbmd0aCk7IH0KICAgIGlmICgvXC4od2VicHxwbmd8anBlP2d8Z2lmKShcP1teXHNdKik\/JC9pLnRlc3QodSkpCiAgICAgIHJldHVybiAnPGltZyBjbGFzcz0icS1pbWciIHNyYz0iJyt1KyciIGFsdD0iSW1hZ2VtIGRhIHF1ZXN0w6NvIiBsb2FkaW5nPSJsYXp5Ij4nK2ZpbTsKICAgIHJldHVybiAnPGEgaHJlZj0iJyt1KyciIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIj4nK3UrJzwvYT4nK2ZpbTsKICB9KTsKfQoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIExBTkRJTkcKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCmZ1bmN0aW9uIGluaXRMYW5kaW5nKCl7CiAgLy8gcmV2ZWFsIG9uIHNjcm9sbCDigJQgQ09NIGd1YXJkYTogSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgc8OzIGV4aXN0ZSBhIHBhcnRpciBkZQogIC8vIGlPUyAxMi4yL0Nocm9tZSA1MTsgc2VtIGEgZ3VhcmRhLCBlbSBhcGFyZWxobyBtYWlzIGFudGlnbyBhIDHCqiBsaW5oYSBhcXVpCiAgLy8gbGFuw6dhdmEgZSBhIExQIGludGVpcmEgZmljYXZhIGVtIGJyYW5jbyAoMzggc2XDp8O1ZXMgLnJ2IHByZXNhcyBlbSBvcGFjaXR5OjApCiAgLy8gc2VtIG5lbSBvIGRpYWduw7NzdGljby4gQWdvcmEgbyBmYWxsYmFjayBzaW1wbGVzbWVudGUgcmV2ZWxhIHR1ZG8uCiAgaWYgKHR5cGVvZiBJbnRlcnNlY3Rpb25PYnNlcnZlciA9PT0gJ2Z1bmN0aW9uJykgewogICAgdmFyIGlvID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGZ1bmN0aW9uKGVzKXsKICAgICAgZXMuZm9yRWFjaChmdW5jdGlvbihlKXsgaWYgKGUuaXNJbnRlcnNlY3RpbmcpeyBlLnRhcmdldC5jbGFzc0xpc3QuYWRkKCdpbicpOyBpby51bm9ic2VydmUoZS50YXJnZXQpOyB9IH0pOwogICAgfSwgeyB0aHJlc2hvbGQ6IDAuMDEsIHJvb3RNYXJnaW46ICcwcHggMHB4IDI1JSAwcHgnIH0pOwogICAgJCQoJy5ydicpLmZvckVhY2goZnVuY3Rpb24oZWwsIGkpeyBlbC5zdHlsZS50cmFuc2l0aW9uRGVsYXkgPSAoaSU2KSo2MCsnbXMnOyBpby5vYnNlcnZlKGVsKTsgfSk7CiAgfSBlbHNlIHsKICAgICQkKCcucnYnKS5mb3JFYWNoKGZ1bmN0aW9uKGVsKXsgZWwuY2xhc3NMaXN0LmFkZCgnaW4nKTsgfSk7CiAgfQoKICAvLyBkZWZhdWx0IGRvIHRvZ2dsZSBzZWd1ZSBvIHZlcnRpY2FsIHB1YmxpY2FkbyAoTFAgZG8gUmV2YWxpZGEgYWJyZSBubyBSZXZhbGlkYSkKICB2YXIgcHJvdmFTZWwgPSBBRl9QUk9WQTsKCiAgLy8gY291bnRkb3duOiBtaXJhIGEgUFLDk1hJTUEgdHJhbnNtaXNzw6NvIGZ1dHVyYSAoYSBBdWxhIEluYXVndXJhbCBhbnRlY2VkZSBhCiAgLy8gam9ybmFkYSksIGNvbSBhIGhvcmEgZGUgaW7DrWNpbyBleHRyYcOtZGEgZG8gY2FtcG8gaG9yYSBkZSBjYWRhIGV2ZW50bwogIGZ1bmN0aW9uIHByb3hpbW9FdmVudG8oail7CiAgICB2YXIgYWdvcmEgPSBuZXcgRGF0ZSgpOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBqLmV2ZW50b3MubGVuZ3RoOyBpKyspewogICAgICB2YXIgZSA9IGouZXZlbnRvc1tpXTsKICAgICAgdmFyIG0gPSAoZS5ob3JhIHx8ICcnKS5tYXRjaCgvKFxkezEsMn0pOihcZHsyfSkvKTsKICAgICAgdmFyIGFsdm8gPSBuZXcgRGF0ZShlLmRhdGEgKyAnVCcgKyAoJzAnKyhtP21bMV06JzA4JykpLnNsaWNlKC0yKSArICc6JyArIChtP21bMl06JzAwJykgKyAnOjAwLTAzOjAwJyk7CiAgICAgIGlmIChhbHZvID4gYWdvcmEpIHJldHVybiB7IGV2OiBlLCBhbHZvOiBhbHZvIH07CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CiAgZnVuY3Rpb24gdGljaygpewogICAgdmFyIGogPSBKT1JOQURBU1twcm92YVNlbF07CiAgICB2YXIgcHggPSBwcm94aW1vRXZlbnRvKGopOwogICAgdmFyIGFsdm8gPSBweCA\/IHB4LmFsdm8gOiBuZXcgRGF0ZShqLmluaWNpbyArICdUMDg6MDA6MDAtMDM6MDAnKTsKICAgIHZhciBkaWZmID0gTWF0aC5tYXgoMCwgYWx2byAtIG5ldyBEYXRlKCkpOwogICAgdmFyIGQgPSBNYXRoLmZsb29yKGRpZmYvODY0MDAwMDApLCBoID0gTWF0aC5mbG9vcihkaWZmLzM2MDAwMDApJTI0LAogICAgICAgIG0gPSBNYXRoLmZsb29yKGRpZmYvNjAwMDApJTYwLCBzID0gTWF0aC5mbG9vcihkaWZmLzEwMDApJTYwOwogICAgJCgnI2NkLWQnKS50ZXh0Q29udGVudCA9IFN0cmluZyhkKS5wYWRTdGFydCgyLCcwJyk7CiAgICAkKCcjY2QtaCcpLnRleHRDb250ZW50ID0gU3RyaW5nKGgpLnBhZFN0YXJ0KDIsJzAnKTsKICAgICQoJyNjZC1tJykudGV4dENvbnRlbnQgPSBTdHJpbmcobSkucGFkU3RhcnQoMiwnMCcpOwogICAgJCgnI2NkLXMnKS50ZXh0Q29udGVudCA9IFN0cmluZyhzKS5wYWRTdGFydCgyLCcwJyk7CiAgICAkKCcjY291bnRMYWJlbCcpLnRleHRDb250ZW50ID0gJ3BhcmEgYSBwcsOzeGltYSB0cmFuc21pc3PDo286ICcgKwogICAgICAocHggPyBweC5ldi50aXR1bG8gOiBqLmV2ZW50b3NbMF0udGl0dWxvKTsKICB9CiAgc2V0SW50ZXJ2YWwodGljaywgMTAwMCk7IHRpY2soKTsKCiAgJCQoJyNwcm92YVN3aXRjaCBidXR0b24nKS5mb3JFYWNoKGZ1bmN0aW9uKGIpewogICAgYi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCl7CiAgICAgICQkKCcjcHJvdmFTd2l0Y2ggYnV0dG9uJykuZm9yRWFjaChmdW5jdGlvbih4KXsgeC5jbGFzc0xpc3QucmVtb3ZlKCdvbicpOyB9KTsKICAgICAgYi5jbGFzc0xpc3QuYWRkKCdvbicpOyBwcm92YVNlbCA9IGIuZGF0YXNldC5wcm92YTsgdGljaygpOwogICAgICB2YXIgY2FsQnRuID0gJCgnLmNhbC10YWJzIGJ1dHRvbltkYXRhLWNhbD0iJytwcm92YVNlbCsnIl0nKTsgaWYgKGNhbEJ0bikgY2FsQnRuLmNsaWNrKCk7CiAgICB9KTsKICB9KTsKCiAgLy8gY2FsZW5kw6FyaW8KICBmdW5jdGlvbiByZW5kZXJDYWwocHJvdmEpewogICAgdmFyIGogPSBKT1JOQURBU1twcm92YV07CiAgICB2YXIgaHRtbCA9ICcnOwogICAgaWYgKGoucHJvdmlzb3JpbykgaHRtbCArPSAnPGRpdiBjbGFzcz0iZGVtby1iYW5uZXIiPjxiPkRhdGFzIHByb3Zpc8Ozcmlhcy48L2I+IEEgcHJvZ3JhbWHDp8OjbyBvZmljaWFsIGRvIFJldmFsaWRhIElORVAgMjAyNi4yIHNlcsOhIGNvbmZpcm1hZGEgYXDDs3MgYSBwdWJsaWNhw6fDo28gZG8gZWRpdGFsLiBBIGVzdHJ1dHVyYSBhYmFpeG8gZXNwZWxoYSBhIGVkacOnw6NvIDIwMjYuMS48L2Rpdj4nOwogICAgWzAsMSwyXS5mb3JFYWNoKGZ1bmN0aW9uKHNlbSl7CiAgICAgIHZhciBldnMgPSBqLmV2ZW50b3MuZmlsdGVyKGZ1bmN0aW9uKGUpeyByZXR1cm4gZS5zZW1hbmEgPT09IHNlbTsgfSk7CiAgICAgIGlmICghZXZzLmxlbmd0aCkgcmV0dXJuOwogICAgICB2YXIgcm90dWxvID0gc2VtPT09MCA\/ICdBYmVydHVyYScgOiAoc2VtPT09MT8nMcKqIHNlbWFuYSc6JzLCqiBzZW1hbmEnKTsKICAgICAgdmFyIGZhaXhhID0gZXZzWzBdLmRhdGEgPT09IGV2c1tldnMubGVuZ3RoLTFdLmRhdGEKICAgICAgICA\/IGRhdGFCUihldnNbMF0uZGF0YSkKICAgICAgICA6IGRhdGFCUihldnNbMF0uZGF0YSkrJyBhICcrZGF0YUJSKGV2c1tldnMubGVuZ3RoLTFdLmRhdGEpOwogICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJzZW1hbmEtbGFiZWwiPicrcm90dWxvKycgwrcgJytmYWl4YSsnPC9kaXY+JzsKICAgICAgZXZzLmZvckVhY2goZnVuY3Rpb24oZSl7CiAgICAgICAgdmFyIGRtID0gZGlhTWVzKGUuZGF0YSk7CiAgICAgICAgdmFyIHRpcG9DbHMgPSBlLnRpcG89PT0nbWFyY28nID8gJ3RpcG8tbWFyY28nIDogZS50aXBvPT09J3Byb3ZhJyA\/ICd0aXBvLXByb3ZhJyA6ICd0aXBvLWF1bGEnOwogICAgICAgIHZhciB0aXBvVHh0ID0gZS50aXBvPT09J21hcmNvJyA\/ICdNYXJjbycgOiBlLnRpcG89PT0ncHJvdmEnID8gJ0RpYSBkYSBwcm92YScgOiAnQXVsYSc7CiAgICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz0iYXVsYS1yb3cgcnYgaW4iPjxkaXYgY2xhc3M9ImRhdGEiPicrZG0uZCsnPHNtYWxsPicrZG0ubSsnPC9zbWFsbD48L2Rpdj4nKwogICAgICAgICAgJzxkaXYgY2xhc3M9InRpdHVsbyI+Jytlc2MoZS50aXR1bG8pKyc8L2Rpdj4nKwogICAgICAgICAgJzxhIGNsYXNzPSJob3JhIiBocmVmPSInK0FGX1VSTFMuY2FkYXN0cm8rJyIgdGl0bGU9Ikluc2NyZXZhLXNlIGdyYXR1aXRhbWVudGUgcGFyYSBhc3Npc3RpciIgc3R5bGU9ImNvbG9yOnZhcigtLWFtYmVyKTtmb250LXdlaWdodDo2MDAiPlF1ZXJvIGFzc2lzdGlyPC9hPicrCiAgICAgICAgICAnPGRpdiBjbGFzcz0iaG9yYSI+Jytlc2MoZS5ob3JhKSsnPC9kaXY+JysKICAgICAgICAgICc8c3BhbiBjbGFzcz0idGlwbyAnK3RpcG9DbHMrJyI+Jyt0aXBvVHh0Kyc8L3NwYW4+PC9kaXY+JzsKICAgICAgfSk7CiAgICB9KTsKICAgICQoJyNjYWxCb2R5JykuaW5uZXJIVE1MID0gaHRtbDsKICB9CiAgJCQoJy5jYWwtdGFicyBidXR0b24nKS5mb3JFYWNoKGZ1bmN0aW9uKGIpewogICAgYi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCl7CiAgICAgICQkKCcuY2FsLXRhYnMgYnV0dG9uJykuZm9yRWFjaChmdW5jdGlvbih4KXsgeC5jbGFzc0xpc3QucmVtb3ZlKCdvbicpOyB9KTsKICAgICAgYi5jbGFzc0xpc3QuYWRkKCdvbicpOyByZW5kZXJDYWwoYi5kYXRhc2V0LmNhbCk7CiAgICB9KTsKICB9KTsKICAvLyBzaW5jcm9uaXphIHRvZ2dsZSBkZSBwcm92YSArIGNhbGVuZMOhcmlvIGNvbSBvIHZlcnRpY2FsIHB1YmxpY2FkbwogICQkKCcjcHJvdmFTd2l0Y2ggYnV0dG9uJykuZm9yRWFjaChmdW5jdGlvbih4KXsgeC5jbGFzc0xpc3QudG9nZ2xlKCdvbicsIHguZGF0YXNldC5wcm92YSA9PT0gcHJvdmFTZWwpOyB9KTsKICAkJCgnLmNhbC10YWJzIGJ1dHRvbicpLmZvckVhY2goZnVuY3Rpb24oeCl7IHguY2xhc3NMaXN0LnRvZ2dsZSgnb24nLCB4LmRhdGFzZXQuY2FsID09PSBwcm92YVNlbCk7IH0pOwogIHJlbmRlckNhbChwcm92YVNlbCk7Cn0KCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBDQURBU1RSTyAvIEFDRVNTQVIKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCmZ1bmN0aW9uIG1hc2tXaGF0cyhpbnB1dCl7CiAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBmdW5jdGlvbigpewogICAgdmFyIHYgPSBpbnB1dC52YWx1ZS5yZXBsYWNlKC9cRC9nLCcnKS5zbGljZSgwLDExKTsKICAgIGlmICh2Lmxlbmd0aCA+IDYpIGlucHV0LnZhbHVlID0gJygnK3Yuc2xpY2UoMCwyKSsnKSAnK3Yuc2xpY2UoMiw3KSsnLScrdi5zbGljZSg3KTsKICAgIGVsc2UgaWYgKHYubGVuZ3RoID4gMikgaW5wdXQudmFsdWUgPSAnKCcrdi5zbGljZSgwLDIpKycpICcrdi5zbGljZSgyKTsKICAgIGVsc2UgaW5wdXQudmFsdWUgPSB2OwogIH0pOwp9CmZ1bmN0aW9uIG1hc2tDcGYoaW5wdXQpewogIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgZnVuY3Rpb24oKXsKICAgIHZhciB2ID0gaW5wdXQudmFsdWUucmVwbGFjZSgvXEQvZywnJykuc2xpY2UoMCwxMSk7CiAgICB2YXIgb3V0ID0gdjsKICAgIGlmICh2Lmxlbmd0aCA+IDkpIG91dCA9IHYuc2xpY2UoMCwzKSsnLicrdi5zbGljZSgzLDYpKycuJyt2LnNsaWNlKDYsOSkrJy0nK3Yuc2xpY2UoOSk7CiAgICBlbHNlIGlmICh2Lmxlbmd0aCA+IDYpIG91dCA9IHYuc2xpY2UoMCwzKSsnLicrdi5zbGljZSgzLDYpKycuJyt2LnNsaWNlKDYpOwogICAgZWxzZSBpZiAodi5sZW5ndGggPiAzKSBvdXQgPSB2LnNsaWNlKDAsMykrJy4nK3Yuc2xpY2UoMyk7CiAgICBpbnB1dC52YWx1ZSA9IG91dDsKICB9KTsKfQpmdW5jdGlvbiBjcGZWYWxpZG8oYyl7CiAgYyA9IGMucmVwbGFjZSgvXEQvZywnJyk7CiAgaWYgKGMubGVuZ3RoICE9PSAxMSkgcmV0dXJuIGZhbHNlOwogIGlmICgvXihcZClcMXsxMH0kLy50ZXN0KGMpKSByZXR1cm4gZmFsc2U7CiAgZm9yICh2YXIgdCA9IDk7IHQgPCAxMTsgdCsrKSB7CiAgICB2YXIgZCA9IDA7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHQ7IGkrKykgZCArPSBwYXJzZUludChjLmNoYXJBdChpKSwxMCkgKiAoKHQrMSkgLSBpKTsKICAgIGQgPSAoKDEwKmQpICUgMTEpICUgMTA7CiAgICBpZiAoZCAhPT0gcGFyc2VJbnQoYy5jaGFyQXQodCksMTApKSByZXR1cm4gZmFsc2U7CiAgfQogIHJldHVybiB0cnVlOwp9CmZ1bmN0aW9uIHNldEludmFsaWQoZiwgb24peyB2YXIgZWwgPSAkKCdbZGF0YS1mPSInK2YrJyJdJyk7IGlmIChlbCkgZWwuY2xhc3NMaXN0LnRvZ2dsZSgnaW52YWxpZCcsICEhb24pOyB9CgovKiBpbml0Q2FkYXN0cm8vaW5pdEFjZXNzYXIvaW5pdENvbmZpcm1hY2FvIFJFTU9WSURPUyBuYSBhdWRpdG9yaWEgZGUgMTEvMDg6CiAgIGVyYW0gbyBwcm90w7N0aXBvIGVtIGxvY2FsU3RvcmFnZSAoc3RvcmUuYWRkVXNlci9maW5kVXNlckJ5Q3BmL2xvZ2luKSwgcMOhZ2luYXMKICAgY2FkYXN0cm8uaHRtbC9hY2Vzc2FyLmh0bWwvY29uZmlybWFjYW8uaHRtbCBxdWUgTsODTyBzw6NvIHB1YmxpY2FkYXMg4oCUIHByb2R1w6fDo28KICAgdXNhIHJlbmRlckF1dGggKGF1dGgtY2FkYXN0cm8vYXV0aC1hY2Vzc2FyKSBjb250cmEgbyBTdXBhYmFzZS4gRmljYXZhbSBubwogICBidW5kbGUgZGUgdG9kbyBhbHVubyBzZW0gbnVuY2Egcm9kYXIuICovCgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgw4FSRUEgREUgTUVNQlJPUwogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLyogLS0tLS0tLS0tLSBBVVRIIGRlIHByb2R1w6fDo28gKHVtYSBww6FnaW5hIHPDszogYWNlc3NhciArIGNhZGFzdHJvKSAtLS0tLS0tLS0tICovCmZ1bmN0aW9uIGNwZkRWKGMpewogIHZhciBkID0gKGN8fCcnKS5yZXBsYWNlKC9cRC9nLCcnKTsKICBpZiAoZC5sZW5ndGggIT09IDExIHx8IC9eKFxkKVwxezEwfSQvLnRlc3QoZCkpIHJldHVybiBmYWxzZTsKICB2YXIgcz0wLGk7IGZvcihpPTA7aTw5O2krKykgcys9KCtkW2ldKSooMTAtaSk7IHZhciB2MT0ocyoxMCklMTE7IGlmKHYxPT09MTApdjE9MDsKICBzPTA7IGZvcihpPTA7aTwxMDtpKyspIHMrPSgrZFtpXSkqKDExLWkpOyB2YXIgdjI9KHMqMTApJTExOyBpZih2Mj09PTEwKXYyPTA7CiAgcmV0dXJuIHYxPT09K2RbOV0gJiYgdjI9PT0rZFsxMF07Cn0KLyogTW9tZW50byBuYSBncmFkdWHDp8OjbyAoMTEvMDgpOiBNRVNNQSBwZXJndW50YSBlIE1FU01BUyBvcMOnw7VlcyBkYSBwZXNxdWlzYQogICBCUSBNRUQgRlJFRSBubyBUeXBlZm9ybSAock5QUUJmcmcsIGNhbXBvIHEyX3N0YWdlKSDigJQgbyBkYWRvIGRvIGNhZGFzdHJvCiAgIGNydXphIDE6MSBjb20gbyBkYSBwZXNxdWlzYS4gR3JhdmFkbyBlbSBwYXJ0aWNpcGFudGVzLm1vbWVudG8gKHBfbW9tZW50bykuICovCi8qIE8gcMO6YmxpY28gZGUgY2FkYSBwcm92YSDDqSBESUZFUkVOVEUsIGVudMOjbyBhcyBvcMOnw7VlcyBtdWRhbSBwb3IgdmVydGljYWwKICAgKGVzcGVsaG8gZG8gc3BsaXQgUmVzaWTDqm5jaWEgw5cgUmV2YWxpZGEgZG8gZm9ybSk6IEVOQU1FRCB1c2EgcTJfc3RhZ2UgKGFubyBkZQogICBncmFkdWHDp8Ojbyk7IFJldmFsaWRhIHVzYSBxcl9zdGFnZSAoZ3JhZHVhw6fDo28gbm8gZXh0ZXJpb3IgLyByZXZhbGlkYcOnw6NvKS4gKi8KdmFyIE1PTUVOVE9TX1BPUl9QUk9WQSA9IHsKICBlbmFtZWQ6IFsKICAgICdFc3RvdSBubyAxwrogb3Ugbm8gMsK6IGFubyBkYSBncmFkdWHDp8OjbycsCiAgICAnRXN0b3Ugbm8gM8K6IG91IG5vIDTCuiBhbm8gZGEgZ3JhZHVhw6fDo28nLAogICAgJ0VzdG91IG5vIDXCuiBhbm8gZGEgZ3JhZHVhw6fDo28nLAogICAgJ0VzdG91IG5vIDbCuiBhbm8gZGEgZ3JhZHVhw6fDo28nLAogICAgJ1NvdSBtw6lkaWNvIGZvcm1hZG8nLAogICAgJ07Do28gc291IG3DqWRpY28gbmVtIGVzdHVkYW50ZSBkZSBNZWRpY2luYScKICBdLAogIHJldmFsaWRhOiBbCiAgICAnQWluZGEgZXN0b3UgbmEgZ3JhZHVhw6fDo28gZGUgTWVkaWNpbmEgbm8gZXh0ZXJpb3InLAogICAgJ1NvdSBmb3JtYWRvIG5vIGV4dGVyaW9yLCBtYXMgYWluZGEgbsOjbyByZXZhbGlkZWkgbWV1IGRpcGxvbWEnLAogICAgJ0rDoSByZXZhbGlkZWkgbWV1IGRpcGxvbWEnLAogICAgJ07Do28gc291IG3DqWRpY28gbmVtIGVzdHVkYW50ZSBkZSBNZWRpY2luYScKICBdCn07CnZhciBNT01FTlRPU19HUkFEID0gTU9NRU5UT1NfUE9SX1BST1ZBW0FGX1BST1ZBXSB8fCBNT01FTlRPU19QT1JfUFJPVkEuZW5hbWVkOwoKZnVuY3Rpb24gcmVuZGVyQXV0aChtb2RvKXsKICBtb2RvID0gbW9kbyB8fCAnYWNlc3Nhcic7CiAgdmFyIGVzcCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhZi1lc3BlcmEnKTsKICBpZiAoZXNwKSBlc3AucmVtb3ZlKCk7CiAgdmFyIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F1dGhWaWV3JykgfHwgKGZ1bmN0aW9uKCl7CiAgICB2YXIgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOyBkLmlkID0gJ2F1dGhWaWV3JzsgZC5jbGFzc05hbWUgPSAnYXV0aC1vdmVybGF5JzsKICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZCk7IHJldHVybiBkOwogIH0pKCk7CiAgdmFyIGFjZXNzYXIgPSBtb2RvID09PSAnYWNlc3Nhcic7CiAgLy8gbG9nbyBlbWJ1dGlkbyBwZWxvIHB1YmxpY2Fkb3IgKF9fQUZfTE9HTyk7IG5vIGFycXVpdm8gbG9jYWwgYSBwYXN0YSBkZQogIC8vIGFzc2V0cyBmaWNhIHVtIG7DrXZlbCBhY2ltYTsgc2UgbmFkYSByZXNvbHZlciwgbyBvbmVycm9yIHRpcmEgbyA8aW1nPgogIHZhciBsb2dvID0gd2luZG93Ll9fQUZfTE9HTyB8fCAnLi4vYXNzZXRzL2xvZ28tZXN0cmF0ZWdpYS1tZWQtYnJhbmNvLndlYnAnOwogIGVsLmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPSJhdXRoLWNhcmQgY29tLW1hcmNhIj4nKwogICAgJzxkaXYgY2xhc3M9ImF1dGgtYnJhbmQiPicrCiAgICAnPGltZyBjbGFzcz0iYWItbG9nbyIgc3JjPSInK2xvZ28rJyIgYWx0PSJFc3RyYXTDqWdpYSBNRUQiIG9uZXJyb3I9InRoaXMucmVtb3ZlKCkiPicrCiAgICAnPGRpdiBjbGFzcz0iYWItbWFyayI+QVRPIEZJTkFMPC9kaXY+JysKICAgICc8ZGl2IGNsYXNzPSJhYi1zdWIiPicrQUZfQlJBTkQuc3ViKyc8L2Rpdj4nKwogICAgJzwvZGl2PicrCiAgICAnPGRpdiBjbGFzcz0iYXV0aC1ib2R5Ij4nKwogICAgJzxoMT4nKyhhY2Vzc2FyID8gJ0FjZXNzYXIgbWluaGEgw6FyZWEnIDogJ0luc2NyacOnw6NvIGdyYXR1aXRhJykrJzwvaDE+JysKICAgICc8cCBjbGFzcz0ic3ViIj4nKyhhY2Vzc2FyCiAgICAgID8gJ0RpZ2l0ZSBvIENQRiB1c2FkbyBuYSBpbnNjcmnDp8OjbyBwYXJhIGVudHJhciBubyBzZXUgcGFpbmVsLicKICAgICAgOiAnQ3JpZSBhIHN1YSBjb250YSBlIGVudHJlIG5hIGRpc3B1dGEgZG8gQXRvIEZpbmFsIHJ1bW8gYW8gJytBRl9CUkFORC5jdXJ0YSsnLicpKyc8L3A+JysKICAgIChhY2Vzc2FyID8gJycgOgogICAgICAnPGRpdiBjbGFzcz0iYXV0aC1mYXRvcyI+PHNwYW4+QXVsYXMgYW8gdml2bzwvc3Bhbj48c3Bhbj5RdWVzdMO1ZXMgY29tZW50YWRhczwvc3Bhbj48c3Bhbj5TaW11bGFkbyBGaW5hbDwvc3Bhbj48c3Bhbj4xMDAlIGdyYXR1aXRvPC9zcGFuPjwvZGl2PicpKwogICAgJzxmb3JtIGlkPSJhdXRoRm9ybSI+JysKICAgIChhY2Vzc2FyID8gJycgOgogICAgICAnPGRpdiBjbGFzcz0iZmllbGQiPjxsYWJlbD5Ob21lIGNvbXBsZXRvPC9sYWJlbD48aW5wdXQgaWQ9ImZOb21lIiB0eXBlPSJ0ZXh0IiBhdXRvY29tcGxldGU9Im5hbWUiIHJlcXVpcmVkPjwvZGl2PicrCiAgICAgICc8ZGl2IGNsYXNzPSJmaWVsZCI+PGxhYmVsPkUtbWFpbDwvbGFiZWw+PGlucHV0IGlkPSJmRW1haWwiIHR5cGU9ImVtYWlsIiBhdXRvY29tcGxldGU9ImVtYWlsIiByZXF1aXJlZD48L2Rpdj4nKwogICAgICAnPGRpdiBjbGFzcz0iZmllbGQiPjxsYWJlbD5XaGF0c0FwcCAoY29tIERERCk8L2xhYmVsPjxpbnB1dCBpZD0iZldoYXRzIiB0eXBlPSJ0ZWwiIGF1dG9jb21wbGV0ZT0idGVsIiBwbGFjZWhvbGRlcj0iKDExKSA5OTk5OS05OTk5Ij48L2Rpdj4nKwogICAgICAnPGRpdiBjbGFzcz0iZmllbGQiPjxsYWJlbD5RdWFsIGEgc3VhIHNpdHVhw6fDo28gYXR1YWw\/PC9sYWJlbD4nKwogICAgICAnPHNlbGVjdCBpZD0iZk1vbWVudG8iIHJlcXVpcmVkPicrCiAgICAgICc8b3B0aW9uIHZhbHVlPSIiIGRpc2FibGVkIHNlbGVjdGVkPlNlbGVjaW9uZSBvIHNldSBtb21lbnRvPC9vcHRpb24+JysKICAgICAgTU9NRU5UT1NfR1JBRC5tYXAoZnVuY3Rpb24obSl7IHJldHVybiAnPG9wdGlvbiB2YWx1ZT0iJytlc2MobSkrJyI+Jytlc2MobSkrJzwvb3B0aW9uPic7IH0pLmpvaW4oJycpKwogICAgICAnPC9zZWxlY3Q+PC9kaXY+JykrCiAgICAnPGRpdiBjbGFzcz0iZmllbGQiPjxsYWJlbD5DUEY8L2xhYmVsPjxpbnB1dCBpZD0iZkNwZiIgdHlwZT0idGV4dCIgaW5wdXRtb2RlPSJudW1lcmljIiBhdXRvY29tcGxldGU9Im9mZiIgcGxhY2Vob2xkZXI9IjAwMC4wMDAuMDAwLTAwIiByZXF1aXJlZD4nKwogICAgJzxkaXYgY2xhc3M9ImhpbnQiPlVzYW1vcyBvIENQRiBzw7MgcHJhIGlkZW50aWZpY2FyIGEgc3VhIGNvbnRhIG5hIGRpc3B1dGEgZSB2YWxpZGFyIGEgcHJlbWlhw6fDo28uIEVsZSBuw6NvIGFwYXJlY2UgcHJhIG5pbmd1w6ltLjwvZGl2PjwvZGl2PicrCiAgICAnPGRpdiBjbGFzcz0iYXV0aC1lcnJvIiBpZD0iYXV0aEVycm8iIHJvbGU9ImFsZXJ0IiBoaWRkZW4+PC9kaXY+JysKICAgICc8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWFtYmVyIiB0eXBlPSJzdWJtaXQiIHN0eWxlPSJ3aWR0aDoxMDAlIiBpZD0iYXV0aEJ0biI+JysoYWNlc3NhciA\/ICdFbnRyYXInIDogJ0luc2NyZXZlciBlIGVudHJhcicpKyc8L2J1dHRvbj4nKwogICAgJzwvZm9ybT4nKwogICAgJzxkaXYgY2xhc3M9ImF1dGgtYWx0Ij4nKyhhY2Vzc2FyCiAgICAgID8gJ0FpbmRhIG7Do28gdGVtIGNvbnRhPyA8YSBocmVmPSInKyh3aW5kb3cuX19BRl9VUkxTID8gQUZfVVJMUy5jYWRhc3RybyA6ICcjJykrJyIgaWQ9ImF1dGhUcm9jYSI+SW5zY3JldmEtc2UgZ3LDoXRpczwvYT4nCiAgICAgIDogJ0rDoSBmZXogc3VhIGluc2NyacOnw6NvPyA8YSBocmVmPSInKyh3aW5kb3cuX19BRl9VUkxTID8gQUZfVVJMUy5hY2Vzc2FyIDogJyMnKSsnIiBpZD0iYXV0aFRyb2NhIj5BY2Vzc2FyIGNvbSBtZXUgQ1BGPC9hPicpKyc8L2Rpdj48L2Rpdj48L2Rpdj4nOwoKICB2YXIgZmMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZkNwZicpOwogIGZjLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgZnVuY3Rpb24oKXsKICAgIHZhciBkID0gZmMudmFsdWUucmVwbGFjZSgvXEQvZywnJykuc2xpY2UoMCwxMSk7CiAgICBmYy52YWx1ZSA9IGQucmVwbGFjZSgvKFxkezN9KShcZCkvLCckMS4kMicpLnJlcGxhY2UoLyhcZHszfSlcLihcZHszfSkoXGQpLywnJDEuJDIuJDMnKS5yZXBsYWNlKC9cLihcZHszfSkoXGR7MSwyfSkkLywnLiQxLSQyJyk7CiAgfSk7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F1dGhUcm9jYScpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oZXYpewogICAgLy8gY29tIHDDoWdpbmFzIHJlYWlzIChwYWRyw6NvIEJvbMOjbyksIGEgdHJvY2EgTkFWRUdBOyBzZW0gZWxhcywgYWx0ZXJuYSBhIHZpZXcKICAgIHZhciBhbHZvID0gYWNlc3NhciA\/IEFGX1VSTFMuY2FkYXN0cm8gOiBBRl9VUkxTLmFjZXNzYXI7CiAgICBpZiAod2luZG93Ll9fQUZfVVJMUyAmJiBhbHZvICYmIGFsdm8uY2hhckF0KDApICE9PSAnIycpIHJldHVybjsgLy8gZGVpeGEgbyA8YT4gbmF2ZWdhcgogICAgZXYucHJldmVudERlZmF1bHQoKTsgcmVuZGVyQXV0aChhY2Vzc2FyID8gJ2NhZGFzdHJvJyA6ICdhY2Vzc2FyJyk7CiAgfSk7CiAgLyogcmFkYXIgZG8gc3VibWl0OiBvIGJlYWNvbiBkZSBjYXJnYSBuw6NvIGVueGVyZ2EgbyBxdWUgYWNvbnRlY2UgZW50cmUgbwogICAgIHRvcXVlIGVtICJFbnRyYXIiIGUgYSBjaGVnYWRhIG5hIMOhcmVhIOKAlCBjYWRhIGV0YXBhIHJlcG9ydGEgYSBmYXNlLAogICAgIGluY2x1c2l2ZSBvIHByw7NwcmlvIHRvcXVlIChkaXN0aW5ndWUgInRvcXVlIG7Do28gcmVnaXN0cm91IiBkZQogICAgICJoYW5kbGVyIHJvZG91IGUgcGFyb3UgZW0gWCIpICovCiAgdmFyIGRpYWcgPSBmdW5jdGlvbihmKXsgdHJ5IHsgaWYgKHdpbmRvdy5fX2FmRW52aWEpIHdpbmRvdy5fX2FmRW52aWEoZik7IH0gY2F0Y2goZSl7fSB9OwogIHZhciBxdWVtID0gYWNlc3NhciA\/ICdsb2dpbicgOiAnY2FkYXN0cm8nOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhdXRoQnRuJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpeyBkaWFnKHF1ZW0gKyAnX2JvdGFvJyk7IH0pOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhdXRoRm9ybScpLmFkZEV2ZW50TGlzdGVuZXIoJ3N1Ym1pdCcsIGZ1bmN0aW9uKGV2KXsKICAgIGV2LnByZXZlbnREZWZhdWx0KCk7CiAgICBldi50YXJnZXQuX191bHRpbW9TdWJtaXQgPSBEYXRlLm5vdygpOwogICAgaWYgKGV2LnRhcmdldC5jaGVja1ZhbGlkaXR5ICYmICFldi50YXJnZXQuY2hlY2tWYWxpZGl0eSgpKSB7CiAgICAgIGlmIChldi50YXJnZXQucmVwb3J0VmFsaWRpdHkpIGV2LnRhcmdldC5yZXBvcnRWYWxpZGl0eSgpOwogICAgICBkaWFnKHF1ZW0gKyAnX2Zvcm1faW52YWxpZG8nKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgdmFyIGJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhdXRoQnRuJyk7CiAgICBpZiAoIWJ0bikgcmV0dXJuOyAgLy8gb3ZlcmxheSBqw6EgcmVtb3ZpZGE6IG8gZmx1eG8gZGVzdGUgY2xpcXVlIGrDoSBjb25jbHVpdQogICAgLy8gZXJybyBJTkxJTkUgbm8gY2FydMOjbyAobsOjbyBzw7MgdG9hc3QpOiBvIHRvYXN0IHZpdmUgbm8gcm9kYXDDqSwgb25kZSBvCiAgICAvLyBiYW5uZXIgZGUgY29va2llcyBkbyBXUCBzZSBzb2JyZXDDtWUgbm8gY2VsdWxhciDigJQgbyBhbHVubyBuw6NvIHZpYSBvIG1vdGl2bwogICAgLy8gZGEgcmVjdXNhIGUgYWNoYXZhIHF1ZSBvIGJvdMOjbyBuw6NvIGZleiBuYWRhLiBBdWRpdG9yaWEgMTEvMDguCiAgICB2YXIgZXJyb0JveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhdXRoRXJybycpOwogICAgdmFyIG1vc3RyYUVycm8gPSBmdW5jdGlvbihtc2cpeyBpZiAoZXJyb0JveCl7IGVycm9Cb3gudGV4dENvbnRlbnQgPSBtc2c7IGVycm9Cb3guaGlkZGVuID0gZmFsc2U7IH0gdG9hc3QobXNnKTsgfTsKICAgIGlmIChlcnJvQm94KSBlcnJvQm94LmhpZGRlbiA9IHRydWU7CiAgICB2YXIgY3BmID0gZmMudmFsdWUucmVwbGFjZSgvXEQvZywnJyk7CiAgICBpZiAoIWNwZkRWKGNwZikpIHsgbW9zdHJhRXJybygnQ1BGIGludsOhbGlkby4gQ29uZmlyYSBvcyBuw7ptZXJvcy4nKTsgZGlhZyhxdWVtICsgJ19kdl9pbnZhbGlkbycpOyByZXR1cm47IH0KICAgIGJ0bi5kaXNhYmxlZCA9IHRydWU7IGJ0bi50ZXh0Q29udGVudCA9ICdVbSBpbnN0YW50ZeKApic7CiAgICBkaWFnKHF1ZW0gKyAnX3N1Ym1pdCcpOwogICAgdmFyIGRvbmUgPSBmdW5jdGlvbigpeyBkaWFnKHF1ZW0gKyAnX29rJyk7IHNlc3Nhb1NldChjcGYpOwogICAgICBpZiAod2luZG93Ll9fQUZfUEFHRSA9PT0gJ2FyZWEnKSB7IGVsLnJlbW92ZSgpOyBpbml0QXJlYSgpOyB9CiAgICAgIGVsc2UgeyBsb2NhdGlvbi5ocmVmID0gQUZfVVJMUy5hcmVhICsgKEFGX1VSTFMuYXJlYS5pbmRleE9mKCc\/JykgPiAtMSA\/ICcmJyA6ICc\/JykgKyAnZT0xJzsgfSB9OwogICAgdmFyIGZhbGhhID0gZnVuY3Rpb24obXNnKXsgZGlhZyhxdWVtICsgJ19yZWN1c2E6JyArIFN0cmluZyhtc2cpLnNsaWNlKDAsNjApKTsgYnRuLmRpc2FibGVkID0gZmFsc2U7CiAgICAgIGJ0bi50ZXh0Q29udGVudCA9IGFjZXNzYXIgPyAnRW50cmFyJyA6ICdJbnNjcmV2ZXIgZSBlbnRyYXInOyBtb3N0cmFFcnJvKG1zZyk7IH07CiAgICAvKiByZWRlIG3Ds3ZlbCBwb2RlIGRlaXhhciBvIGZldGNoIHBlbmR1cmFkbyBzZW0gcmVqZWl0YXI6IHNlbSB0ZXRvLCBvIGJvdMOjbwogICAgICAgZmljYSBwcmVzbyBlbSAiVW0gaW5zdGFudGXigKYiIGUgbyBhbHVubyByZWNhcnJlZ2EgYSBww6FnaW5hICovCiAgICB2YXIgY29tVGV0byA9IGZ1bmN0aW9uKHApeyByZXR1cm4gUHJvbWlzZS5yYWNlKFtwLCBuZXcgUHJvbWlzZShmdW5jdGlvbihfLCByZWopewogICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7IHJlaihuZXcgRXJyb3IoJ3RpbWVvdXRfMTJzJykpOyB9LCAxMjAwMCk7IH0pXSk7IH07CiAgICBpZiAoYWNlc3NhcikgewogICAgICBjb21UZXRvKHNiUnBjKCdsb2dpbl9jcGYnLCB7IHBfY3BmOiBjcGYgfSkpLnRoZW4oZnVuY3Rpb24ocil7CiAgICAgICAgaWYgKHIuc3RhdHVzID09PSAnb2snKSBkb25lKCk7CiAgICAgICAgZWxzZSBmYWxoYSgnQ1BGIG7Do28gZW5jb250cmFkby4gRmHDp2EgYSBzdWEgaW5zY3Jpw6fDo28gZ3JhdHVpdGEuJyk7CiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGVycil7IGRpYWcoJ2xvZ2luX2Vycm86JyArIFN0cmluZygoZXJyICYmIGVyci5tZXNzYWdlKSB8fCBlcnIpLnNsaWNlKDAsODApKTsKICAgICAgICBmYWxoYSgnU2VtIGNvbmV4w6NvLiBUZW50ZSBub3ZhbWVudGUuJyk7IH0pOwogICAgfSBlbHNlIHsKICAgICAgY29tVGV0byhzYlJwYygnY2FkYXN0cmFyJywgewogICAgICAgIHBfbm9tZTogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZOb21lJykudmFsdWUsCiAgICAgICAgcF9lbWFpbDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZFbWFpbCcpLnZhbHVlLAogICAgICAgIHBfd2hhdHM6IChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZldoYXRzJykudmFsdWUgfHwgbnVsbCksCiAgICAgICAgcF9jcGY6IGNwZiwgcF9wcm92YTogQUZfUFJPVkEsCiAgICAgICAgcF9tb21lbnRvOiAoZnVuY3Rpb24oKXsgdmFyIHMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZk1vbWVudG8nKTsgcmV0dXJuIChzICYmIHMudmFsdWUpIHx8IG51bGw7IH0pKCksCiAgICAgICAgcF9yZWY6IChmdW5jdGlvbigpeyB0cnkgeyByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0oTFNQKydyZWYnKSB8fCBudWxsOyB9IGNhdGNoKGUpeyByZXR1cm4gbnVsbDsgfSB9KSgpCiAgICAgIH0pKS50aGVuKGZ1bmN0aW9uKHIpewogICAgICAgIGlmIChyLnN0YXR1cyA9PT0gJ29rJyB8fCByLnN0YXR1cyA9PT0gJ2phX2NhZGFzdHJhZG8nKSB7CiAgICAgICAgICB0cnkgeyBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShMU1ArJ3JlZicpOyB9IGNhdGNoKGUpe30KICAgICAgICAgIHRyeSB7IGFmU2ZtY0VudmlhcigpOyB9IGNhdGNoKGUpe30KICAgICAgICAgIGFmR3RtTGVhZChkb25lKTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoci5zdGF0dXMgPT09ICdjcGZfaW52YWxpZG8nKSBmYWxoYSgnQ1BGIGludsOhbGlkby4gQ29uZmlyYSBvcyBuw7ptZXJvcy4nKTsKICAgICAgICBlbHNlIGZhbGhhKCdOw6NvIGZvaSBwb3Nzw612ZWwgY29uY2x1aXIuIENvbmZpcmEgb3MgZGFkb3MuJyk7CiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGVycil7IGRpYWcoJ2NhZGFzdHJvX2Vycm86JyArIFN0cmluZygoZXJyICYmIGVyci5tZXNzYWdlKSB8fCBlcnIpLnNsaWNlKDAsODApKTsKICAgICAgICBmYWxoYSgnU2VtIGNvbmV4w6NvLiBUZW50ZSBub3ZhbWVudGUuJyk7IH0pOwogICAgfQogIH0pOwp9CgpmdW5jdGlvbiBpbml0QXJlYSgpewogIHZhciBkaWFnQSA9IGZ1bmN0aW9uKGYpeyB0cnkgeyBpZiAod2luZG93Ll9fYWZFbnZpYSkgd2luZG93Ll9fYWZFbnZpYShmKTsgfSBjYXRjaChlKXt9IH07CiAgaWYgKCFjcGZTYWx2bygpKSB7CiAgICAvLyB2ZWlvIGRvIGxvZ2luIGUgYSBzZXNzw6NvIG7Do28gc29icmV2aXZldTogbmF2ZWdhZG9yIGJsb3F1ZWFuZG8gYXJtYXplbmFtZW50bwogICAgaWYgKC9bPyZdZT0xLy50ZXN0KGxvY2F0aW9uLnNlYXJjaCkpIHsKICAgICAgZGlhZ0EoJ2FyZWFfYW50aV9sYWNvJyk7CiAgICAgIGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9ImF1dGgtb3ZlcmxheSI+PGRpdiBjbGFzcz0iYXV0aC1jYXJkIj4nKwogICAgICAgICc8ZGl2IGNsYXNzPSJraWNrZXIiIHN0eWxlPSJtYXJnaW4tYm90dG9tOjEwcHgiPicrQUZfQlJBTkQudGFnKyc8L2Rpdj4nKwogICAgICAgICc8aDE+QXRpdmUgb3MgZGFkb3MgZG8gc2l0ZTwvaDE+JysKICAgICAgICAnPHAgY2xhc3M9InN1YiI+U2V1IGFjZXNzbyBmb2kgY29uZmlybWFkbywgbWFzIGVzdGUgbmF2ZWdhZG9yIGVzdMOhIGltcGVkaW5kbyBvIHNpdGUgZGUgZ3VhcmRhciBhIHN1YSBzZXNzw6NvLCBlbnTDo28gbsOjbyBjb25zZWd1aW1vcyBtYW50ZXIgdm9jw6ogY29uZWN0YWRvLjwvcD4nKwogICAgICAgICc8cCBjbGFzcz0ic3ViIj48Yj5ObyBpUGhvbmU6PC9iPiBzYWlhIGRhIE5hdmVnYcOnw6NvIFByaXZhZGEgb3UgdsOhIGVtIEFqdXN0ZXMg4oaSIFNhZmFyaSBlIGRlc2F0aXZlICJCbG9xdWVhciB0b2RvcyBvcyBjb29raWVzIi4gPGI+Tm8gQW5kcm9pZDo8L2I+IHBlcm1pdGEgY29va2llcyBwYXJhIGVzdGUgc2l0ZS48L3A+JysKICAgICAgICAnPGEgY2xhc3M9ImJ0biBidG4tYW1iZXIiIGhyZWY9IicrQUZfVVJMUy5hY2Vzc2FyKyciIHN0eWxlPSJ3aWR0aDoxMDAlO2p1c3RpZnktY29udGVudDpjZW50ZXIiPlRlbnRhciBub3ZhbWVudGU8L2E+PC9kaXY+PC9kaXY+JzsKICAgICAgcmV0dXJuOwogICAgfQogICAgZGlhZ0EoJ2FyZWFfc2VtX3Nlc3NhbycpOwogICAgaWYgKHdpbmRvdy5fX0FGX1VSTFMpIHsgbG9jYXRpb24uaHJlZiA9IEFGX1VSTFMuYWNlc3NhcjsgcmV0dXJuOyB9CiAgICByZW5kZXJBdXRoKGxvY2F0aW9uLmhhc2ggPT09ICcjY2FkYXN0cm8nID8gJ2NhZGFzdHJvJyA6ICdhY2Vzc2FyJyk7CiAgICByZXR1cm47CiAgfQogIHZhciBtYWluRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbicpOwogIGlmIChtYWluRWwpIG1haW5FbC5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz0iY2FyZCIgc3R5bGU9InBhZGRpbmc6NDBweDt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjp2YXIoLS1pbmstZGltKTttYXJnaW4tdG9wOjQwcHgiPkNhcnJlZ2FuZG8gYSBzdWEgw6FyZWHigKY8L2Rpdj4nOwogIGhpZHJhdGFyKCkudGhlbihmdW5jdGlvbihvayl7CiAgICBpZiAoIW9rKSB7IGRpYWdBKCdhcmVhX2hpZHJhdGFyX2ZhbGhvdScpOyBzdG9yZS5sb2dvdXQoKTsgcmVuZGVyQXV0aCgnYWNlc3NhcicpOyByZXR1cm47IH0KICAgIGRpYWdBKCdhcmVhX29rJyk7CiAgICBpbmljaWFyQXBwKCk7CiAgfSkuY2F0Y2goZnVuY3Rpb24oZXJyKXsKICAgIGRpYWdBKCdhcmVhX3NlbV9jb25leGFvOicgKyBTdHJpbmcoKGVyciAmJiBlcnIubWVzc2FnZSkgfHwgZXJyKS5zbGljZSgwLDgwKSk7CiAgICBpZiAobWFpbkVsKSBtYWluRWwuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9ImNhcmQiIHN0eWxlPSJwYWRkaW5nOjQwcHg7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6dmFyKC0taW5rLWRpbSk7bWFyZ2luLXRvcDo0MHB4Ij5TZW0gY29uZXjDo28uIFJlY2FycmVndWUgYSBww6FnaW5hLjwvZGl2Pic7CiAgfSk7Cn0KCmZ1bmN0aW9uIGluaWNpYXJBcHAoKXsKICB2YXIgdXNlciA9IHN0b3JlLm1lKCk7CiAgaWYgKCF1c2VyKSB7IHJlbmRlckF1dGgoJ2FjZXNzYXInKTsgcmV0dXJuOyB9CiAgdmFyIGogPSBKT1JOQURBU1t1c2VyLnByb3ZhXTsKICB2YXIgaG9qZSA9IGhvamVJU08oaik7CiAgLy8gQSBkYXRhIGVyYSBjb25nZWxhZGEgbm8gbG9hZCBlIG51bmNhIHJlYXZhbGlhZGE6IGNvbW8gbyBhcHAgw6kgaW5zdGFsw6F2ZWwKICAvLyAoUFdBIHN0YW5kYWxvbmUpIGUgbyBpT1MgbWFudMOpbSBhIGFiYSB2aXZhIHBvciBkaWFzLCBxdWVtIGFicmlzc2UgbmEgdsOpc3BlcmEKICAvLyBlIHZvbHRhc3NlIG5vIGRpYSBkYSBhdWxhIE7Dg08gdmlhIG8gY2hlY2staW4gbGliZXJhciBuZW0gYSBqb3JuYWRhIHZpcmFyIGVtCiAgLy8gMjYvMDguIEd1YXJkYSBhIGRhdGEgY2FycmVnYWRhOyBzZSBvIGRpYSBCUlQgbXVkYXIgKHJldG9tYWRhIGRlIGFiYS9QV0EpLAogIC8vIHJlY2FycmVnYSDigJQgcmVpZHJhdGEgdHVkbyBjb20gYSBkYXRhIGNlcnRhLiBBdWRpdG9yaWEgMTEvMDguCiAgdmFyIGRpYUNhcnJlZ2FkbyA9IGhvamUuaXNvOwogIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCBmdW5jdGlvbigpewogICAgaWYgKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSAhPT0gJ3Zpc2libGUnKSByZXR1cm47CiAgICBpZiAoaG9qZUlTTyhqKS5pc28gIT09IGRpYUNhcnJlZ2FkbykgbG9jYXRpb24ucmVsb2FkKCk7CiAgfSk7CgogIC8vIHNoZWxsCiAgJCgnI2JyYW5kTGlnYScpLnRleHRDb250ZW50ID0gai5saWdhOwogICQoJyN1Tm9tZScpLnRleHRDb250ZW50ID0gdXNlci5ub21lLnNwbGl0KCcgJylbMF0gKyAnICcgKyAodXNlci5ub21lLnNwbGl0KCcgJylbMV18fCcnKS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArICcuJzsKICAkKCcjdVByb3ZhJykudGV4dENvbnRlbnQgPSBqLm5vbWU7CiAgJCgnI3VBdicpLnRleHRDb250ZW50ID0gdXNlci5ub21lLnNwbGl0KCcgJykuc2xpY2UoMCwyKS5tYXAoZnVuY3Rpb24ocCl7IHJldHVybiBwLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpOyB9KS5qb2luKCcnKTsKICB2YXIgc2ltRE0gPSBkaWFNZXMoai5ldmVudG9zLmZpbmQoZnVuY3Rpb24oZSl7IHJldHVybiBlLmlkID09PSBqLnNpbXVsYWRvSWQ7IH0pLmRhdGEpOwogICQoJyNiYWRnZVNpbScpLmlubmVySFRNTCA9IHNpbURNLmQgKyAnPGJyPicgKyBzaW1ETS5tOwogICQoJyNidG5TYWlyJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpeyBzdG9yZS5sb2dvdXQoKTsgbG9jYXRpb24uaHJlZiA9IHdpbmRvdy5fX0FGX1VSTFMgPyBBRl9VUkxTLmxwIDogbG9jYXRpb24uaHJlZjsgfSk7CgogIC8vIGF0YWxobyBwcm8gUGFpbmVsIGRlIG9wZXJhw6fDo286IGVuZ3JlbmFnZW0gcmV2ZWxhZGEgU8OTIHBhcmEgb3MgQ1BGcyBkZQogIC8vIGNvb3JkZW5hw6fDo28gKHBhZHLDo28gZGEgZW5ncmVuYWdlbSBkbyBCb2zDo28gZGEgQ29ydWphKS4gTyBwYWluZWwgdGVtIGNoYXZlCiAgLy8gcHLDs3ByaWEgbm8gc2Vydmlkb3I7IGlzdG8gw6kgc8OzIG8gY2FtaW5obyBhdMOpIGVsZSwgbsOjbyB1bWEgcGVybWlzc8Ojby4KICB2YXIgYnRuUGFpbmVsID0gJCgnI2J0blBhaW5lbCcpOwogIGlmIChidG5QYWluZWwgJiYgQ1BGU19DT09SRC5pbmRleE9mKHVzZXIuY3BmKSA+IC0xKSB7CiAgICBidG5QYWluZWwuaHJlZiA9ICh3aW5kb3cuX19BRl9VUkxTICYmIEFGX1VSTFMucGFpbmVsKSB8fCAnLi4vcGFpbmVsLyc7CiAgICBidG5QYWluZWwuaGlkZGVuID0gZmFsc2U7CiAgfQoKICAvLyBtb2RvIGNsYXJvL2VzY3VybyAocGVyc2lzdGlkbyBlbSBhZl90aGVtZTsgYXBsaWNhZG8gbm8gPGhlYWQ+IHNlbSBmbGFzaCkKICB2YXIgSUNPX1NPTCA9ICc8c3ZnIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjQuMiIvPjxwYXRoIGQ9Ik0xMiAydjIuNk0xMiAxOS40VjIyTTIgMTJoMi42TTE5LjQgMTJIMjJNNC45IDQuOWwxLjkgMS45TTE3LjIgMTcuMmwxLjkgMS45TTQuOSAxOS4xbDEuOS0xLjlNMTcuMiA2LjhsMS45LTEuOSIvPjwvc3ZnPic7CiAgdmFyIElDT19MVUEgPSAnPHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj48cGF0aCBkPSJNMjAuNCAxNC4yQTguNiA4LjYgMCAxIDEgOS44IDMuNmE3IDcgMCAxIDAgMTAuNiAxMC42eiIvPjwvc3ZnPic7CiAgdmFyIGJ0blRlbWEgPSAkKCcjYnRuVGVtYScpOwogIGZ1bmN0aW9uIHBpbnRhVGVtYSgpeyBpZiAoYnRuVGVtYSkgYnRuVGVtYS5pbm5lckhUTUwgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZGF0YXNldC50aGVtZSA9PT0gJ2RhcmsnID8gSUNPX1NPTCA6IElDT19MVUE7IH0KICBpZiAoYnRuVGVtYSkgYnRuVGVtYS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCl7CiAgICB2YXIgZXNjdXJvID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRhdGFzZXQudGhlbWUgPT09ICdkYXJrJzsKICAgIGlmIChlc2N1cm8pIHsgZGVsZXRlIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5kYXRhc2V0LnRoZW1lOyBzdG9yZS5zZXQoJ3RoZW1lJywgJ2NsYXJvJyk7IH0KICAgIGVsc2UgeyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZGF0YXNldC50aGVtZSA9ICdkYXJrJzsgc3RvcmUuc2V0KCd0aGVtZScsICdkYXJrJyk7IH0KICAgIHBpbnRhVGVtYSgpOwogIH0pOwogIHBpbnRhVGVtYSgpOwoKICB2YXIgdG90YWxEaWFzID0gZGlhcyhqLmluaWNpbywgai5wcm92YSkgKyAxOwogIHZhciBkaWFBdHVhbCA9IE1hdGgubWluKHRvdGFsRGlhcywgTWF0aC5tYXgoMSwgZGlhcyhqLmluaWNpbywgaG9qZS5pc28pICsgMSkpOwogIGlmIChob2plLmlzbyA8IGouaW5pY2lvKSB7CiAgICAkKCcjZGlhSm9ybmFkYScpLnRleHRDb250ZW50ID0gJ0NvbWXDp2EgZW0gJyArIGRhdGFCUihqLmluaWNpbyk7CiAgICAkKCcjam9ybmFkYUZpbGwnKS5zdHlsZS53aWR0aCA9ICcwJSc7CiAgfSBlbHNlIHsKICAgICQoJyNkaWFKb3JuYWRhJykudGV4dENvbnRlbnQgPSAnRGlhICcgKyBkaWFBdHVhbCArICcgZGUgJyArIHRvdGFsRGlhczsKICAgICQoJyNqb3JuYWRhRmlsbCcpLnN0eWxlLndpZHRoID0gTWF0aC5yb3VuZChkaWFBdHVhbC90b3RhbERpYXMqMTAwKSArICclJzsKICB9CgogIGZ1bmN0aW9uIGRlbW9CYW5uZXIoKXsKICAgIHZhciBtc2dzID0gW107CiAgICBpZiAoTU9ET19WQUxJREFDQU8pIG1zZ3MucHVzaCgnPGI+QW1iaWVudGUgZGUgdGVzdGU6PC9iPiB0dWRvIGxpYmVyYWRvIGFudGVzIGRhIGVzdHJlaWE7IHJlZ2lzdHJvcyBzZXLDo28gemVyYWRvcyBubyBsYW7Dp2FtZW50by4nKTsKICAgIGVsc2UgaWYgKG1vZG9QcmV2aWV3KCkpIG1zZ3MucHVzaCgnPGI+Vmlzw6NvIGRvIGNvb3JkZW5hZG9yOjwvYj4gdm9jw6ogdsOqIG8gY29udGXDumRvIGFudGVzIGRhIGVzdHJlaWE7IGFzIGHDp8O1ZXMgc2VndWVtIGFzIHJlZ3JhcyByZWFpcyBkb3MgYWx1bm9zLicpOwogICAgZWxzZSBpZiAoaG9qZS5zaW11bGFkYSkgbXNncy5wdXNoKCc8Yj5WaXN1YWxpemHDp8OjbyBkYSBvcGVyYcOnw6NvOjwvYj4gZGF0YSBzaW11bGFkYSAnICsgZGF0YUJSKGhvamUuaXNvKSk7CiAgICAvLyAocHLDqS1qb3JuYWRhIHNlbSBiYW5uZXI6IG8gY2hpcCAiRmFsdGFtIE4gZGlhcyIsIGEgc2lkZWJhciBlIG8KICAgIC8vICJIb2plIG5hIGpvcm5hZGEiIGrDoSBjb211bmljYW0gYSBkYXRhOyBiYW5uZXIgcmVwZXRpYSAzeCBhIG1lc21hIGluZm8pCiAgICBpZiAoai5wcm92aXNvcmlvKSBtc2dzLnB1c2goJ0RhdGFzIGRvIFJldmFsaWRhIDIwMjYuMiA8Yj5wcm92aXPDs3JpYXM8L2I+IGF0w6kgbyBlZGl0YWwgZG8gSU5FUCcpOwogICAgaWYgKCFtc2dzLmxlbmd0aCkgcmV0dXJuICcnOwogICAgcmV0dXJuICc8ZGl2IGNsYXNzPSJkZW1vLWJhbm5lciI+JyArIG1zZ3Muam9pbignIMK3ICcpICsgJy48L2Rpdj4nOwogIH0KCiAgZnVuY3Rpb24gcGFnZUhlYWQoa2lja2VyLCB0aXR1bG8sIGRlc2MsIGNoaXApewogICAgcmV0dXJuICc8ZGl2IGNsYXNzPSJwYWdlLWhlYWQiPjxkaXY+PHNwYW4gY2xhc3M9ImtpY2tlciI+JytraWNrZXIrJzwvc3Bhbj48aDE+Jyt0aXR1bG8rJzwvaDE+JysKICAgICAgJzxwIGNsYXNzPSJkZXNjIj4nK2Rlc2MrJzwvcD48L2Rpdj48c3BhbiBjbGFzcz0icHRzLWNoaXAiPicrY2hpcCsnPC9zcGFuPjwvZGl2Pic7CiAgfQoKICAvKiAtLS0tLS0tLS0tIEFVTEFTICh0b2RhcyBhcyB0cmFuc21pc3PDtWVzICsgY2hlY2staW4gZW1idXRpZG8pIC0tLS0tLS0tLS0gKi8KICBmdW5jdGlvbiBldmVudG9zRG9EaWEoaXNvKXsgcmV0dXJuIGouZXZlbnRvcy5maWx0ZXIoZnVuY3Rpb24oZSl7IHJldHVybiBlLmRhdGEgPT09IGlzbzsgfSk7IH0KCiAgdmFyIElDT19QTEFZID0gJzxzdmcgd2lkdGg9IjExIiBoZWlnaHQ9IjExIiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9ImN1cnJlbnRDb2xvciI+PHBhdGggZD0iTTcgNGwxMyA4LTEzIDh6Ii8+PC9zdmc+JzsKICB2YXIgSUNPX0RMID0gJzxzdmcgd2lkdGg9IjEyIiBoZWlnaHQ9IjEyIiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIuMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj48cGF0aCBkPSJNMTIgM3YxMiIvPjxwYXRoIGQ9Ik02IDExbDYgNiA2LTYiLz48cGF0aCBkPSJNNCAyMWgxNiIvPjwvc3ZnPic7CgogIHZhciBJQ09fUFJPVkEgPSAnPHN2ZyB3aWR0aD0iMjgiIGhlaWdodD0iMjgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMS43IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxyZWN0IHg9IjUiIHk9IjMiIHdpZHRoPSIxNCIgaGVpZ2h0PSIxOCIgcng9IjIiLz48cGF0aCBkPSJNOS41IDN2Mi40aDVWMyIvPjxwYXRoIGQ9Ik04LjUgMTFsMS42IDEuNkwxMy41IDkiLz48cGF0aCBkPSJNOC41IDE2aDciLz48L3N2Zz4nOwoKICBmdW5jdGlvbiB0cmlsaGFJdGVtKGUpewogICAgdmFyIGNoZWNrcyA9IHN0b3JlLmNoZWNraW5zKHVzZXIuZW1haWwpOwogICAgdmFyIHFzID0gc3RvcmUubWlzc29lcyh1c2VyLmVtYWlsKTsKICAgIHZhciBkb25lID0gISFjaGVja3NbZS5pZF07CiAgICB2YXIgZnV0dXJhID0gZS5kYXRhID4gaG9qZS5pc287CiAgICB2YXIgaXNIb2plID0gZS5kYXRhID09PSBob2plLmlzbzsKICAgIHZhciBkbSA9IGRpYU1lcyhlLmRhdGEpOwogICAgdmFyIG0gPSBxc1tlLmlkXTsKCiAgICAvLyBPIFNJTVVMQURPIEZJTkFMIG7Do28gw6kgdmlkZW9hdWxhIChwZWRpZG8gZG8gSWdvciwgMTIvMDgpOiByZW5kZXJpemEgY29tbwogICAgLy8gUFJPVkEg4oCUIMOtY29uZSBkZSBnYWJhcml0byAoc2VtIHRodW1iIGRvIFlvdVR1YmUsIHNlbSBwbGF5L3NsaWRlcyksIGFwb250YQogICAgLy8gcHJhIGFiYSBkbyBTaW11bGFkbyBuYSBwbGF0YWZvcm1hLCBuw6NvIHBybyBZb3VUdWJlLgogICAgaWYgKGUuaWQgPT09IGouc2ltdWxhZG9JZCkgewogICAgICB2YXIgY2xzUyA9IGZ1dHVyYSA\/ICduZXh0JyA6IGlzSG9qZSA\/ICdub3cnIDogJ21pc3MnOwogICAgICB2YXIgaG9yYVMgPSBTdHJpbmcoZS5ob3JhIHx8ICcnKTsKICAgICAgdmFyIGN0YVMgPSAoZnV0dXJhICYmICFtb2RvUHJldmlldygpKQogICAgICAgID8gJzxzcGFuIGNsYXNzPSJyZXMiIHN0eWxlPSJjb2xvcjp2YXIoLS1pbmstbXV0ZSkiPkFicmUgZW0gJytkYXRhQlIoZS5kYXRhKSsnLCDDoHMgJytlc2MoaG9yYVMuc3BsaXQoJyAnKVswXSkrJzwvc3Bhbj4nCiAgICAgICAgOiAnPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1hbWJlciBidG4tc20iIGRhdGEtZ290bz0ic2ltdWxhZG8iPklyIHBhcmEgbyBTaW11bGFkbzwvYnV0dG9uPic7CiAgICAgIHJldHVybiAnPGRpdiBjbGFzcz0idHItaXRlbSB0ci1zaW0gJytjbHNTKyciPjxzcGFuIGNsYXNzPSJ0ci1kb3QiPjwvc3Bhbj48ZGl2IGNsYXNzPSJ0ci1jYXJkIj4nKwogICAgICAgICc8ZGl2IGNsYXNzPSJ0ci1kYXRhIj4nK2RtLmQrJzxzbWFsbD4nK2RtLm0rJzwvc21hbGw+JysoaXNIb2plPyc8ZW0+SG9qZTwvZW0+JzonJykrJzwvZGl2PicrCiAgICAgICAgJzxkaXYgY2xhc3M9InRyLXRodW1iIHNpbS10aHVtYiI+JytJQ09fUFJPVkErJzwvZGl2PicrCiAgICAgICAgJzxkaXYgY2xhc3M9InRyLW1haW4iPicrCiAgICAgICAgJzxkaXYgY2xhc3M9InRyLXdoZW4iPlNpbXVsYWRvIEZpbmFsIMK3ICcrZXNjKGUuaG9yYSkrJzwvZGl2PicrCiAgICAgICAgJzxiPicrZXNjKGUudGl0dWxvKSsnPC9iPicrCiAgICAgICAgJzxkaXYgY2xhc3M9InRyLWZvb3QiPjxzcGFuIHN0eWxlPSJkaXNwbGF5OmZsZXg7Z2FwOjEwcHg7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtd3JhcDp3cmFwIj4nKwogICAgICAgIGN0YVMrJzxzcGFuIGNsYXNzPSJzdGF0ZS10YWciPlByb3ZhIMO6bmljYSDCtyAxMDAgcXVlc3TDtWVzIG5hIHBsYXRhZm9ybWE8L3NwYW4+PC9zcGFuPjwvZGl2PicrCiAgICAgICAgJzwvZGl2PjwvZGl2PjwvZGl2Pic7CiAgICB9CgogICAgdmFyIHRpcG9MYWJlbCA9IGUudGlwbz09PSdwcm92YScgPyAnRGlhIGRhIHByb3ZhJyA6IGUudGlwbz09PSdtYXJjbycgPyAnRXZlbnRvJyA6ICdBdWxhJzsKICAgIHZhciB0aHVtYiA9IGUueXQKICAgICAgPyAnPGltZyBzcmM9IicreXRUaHVtYihlLnl0KSsnIiBhbHQ9IiIgbG9hZGluZz0ibGF6eSIgb25lcnJvcj0idGhpcy5yZW1vdmUoKSI+JwogICAgICA6ICc8ZGl2IGNsYXNzPSJmYWxsIj48c3ZnIHdpZHRoPSIyNiIgaGVpZ2h0PSIyNiIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCI+PGNpcmNsZSBjeD0iOSIgY3k9IjEwIiByPSIyLjIiLz48Y2lyY2xlIGN4PSIxNSIgY3k9IjEwIiByPSIyLjIiLz48cGF0aCBkPSJNNCAyMGMwLTYgMi0xMyA4LTEzczggNyA4IDEzIi8+PHBhdGggZD0iTTkgNGwzIDIgMy0yIi8+PC9zdmc+PC9kaXY+JzsKCiAgICB2YXIgYWN0cyA9ICc8c3BhbiBjbGFzcz0iYWN0cyI+JysKICAgICAgKGZ1dHVyYQogICAgICAgID8gJzxhIGNsYXNzPSJidG4taWNvIiBocmVmPSInKyhlLnl0IHx8ICdodHRwczovL3d3dy55b3V0dWJlLmNvbS9AZXN0cmF0ZWdpYW1lZCcpKyciIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIiB0aXRsZT0iRGVmaW5pciBsZW1icmV0ZSBubyBZb3VUdWJlIiBhcmlhLWxhYmVsPSJEZWZpbmlyIGxlbWJyZXRlIG5vIFlvdVR1YmUiPicrSUNPX1NJTk8rJzwvYT4nCiAgICAgICAgOiAnPGEgY2xhc3M9ImJ0bi1pY28iIGhyZWY9IicrKGUueXQgfHwgJ2h0dHBzOi8vd3d3LnlvdXR1YmUuY29tL0Blc3RyYXRlZ2lhbWVkJykrJyIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIiIHRpdGxlPSJBc3Npc3RpciDDoCBhdWxhIiBhcmlhLWxhYmVsPSJBc3Npc3RpciDDoCBhdWxhIj4nK0lDT19QTEFZKyc8L2E+JykrCiAgICAgIChTTElERVNbZS5pZF0KICAgICAgICA\/ICc8YSBjbGFzcz0iYnRuLWljbyIgaHJlZj0iJytTTElERVNbZS5pZF0rJyIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIiIHRpdGxlPSJCYWl4YXIgc2xpZGVzIiBhcmlhLWxhYmVsPSJCYWl4YXIgc2xpZGVzIj4nK0lDT19ETCsnPC9hPicKICAgICAgICA6ICc8c3BhbiBjbGFzcz0iYnRuLWljbyBvZmYiIHRpdGxlPSJTbGlkZXMgZW0gYnJldmUiPicrSUNPX0RMKyc8L3NwYW4+JykrJzwvc3Bhbj4nOwoKICAgIHZhciB0ZW1DaGF2ZSA9IFRFTV9DSEFWRS5pbmRleE9mKGUuaWQpID4gLTE7CiAgICB2YXIgY2hpcCA9IGRvbmUKICAgICAgPyAnPHNwYW4gY2xhc3M9InJlcyI+UHJlc2VudGU8L3NwYW4+JwogICAgICA6IGZ1dHVyYQogICAgICAgID8gKG1vZG9QcmV2aWV3KCkgJiYgdGVtQ2hhdmUKICAgICAgICAgICAgPyAnPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1hbWJlciBidG4tc20iIGRhdGEtZXhwYW5kPSInK2UuaWQrJyI+RmF6ZXIgY2hlY2staW48L2J1dHRvbj4nCiAgICAgICAgICAgIDogJzxzcGFuIGNsYXNzPSJyZXMiIHN0eWxlPSJjb2xvcjp2YXIoLS1pbmstbXV0ZSkiPkFnZW5kYWRhPC9zcGFuPicpCiAgICAgICAgOiAoaXNIb2plIHx8ICF0ZW1DaGF2ZSA\/ICcnIDogJzxidXR0b24gY2xhc3M9ImJ0biBidG4tZ2hvc3QgYnRuLXNtIiBkYXRhLWV4cGFuZD0iJytlLmlkKyciPlJlY3VwZXJhcjwvYnV0dG9uPicpOwoKICAgIHZhciBxdWVzdG9lcyA9ICcnOwogICAgaWYgKGUucXVpeiAmJiAoIWZ1dHVyYSB8fCBtb2RvUHJldmlldygpKSkgewogICAgICB2YXIgblByb2dRID0gblJlc3Bvc3Rhc0V2ZW50byhlLmlkKTsKICAgICAgcXVlc3RvZXMgPSBtCiAgICAgICAgPyAnPHNwYW4gY2xhc3M9InJlcyIgc3R5bGU9ImZvbnQtc2l6ZToxMnB4Ij5RdWVzdMO1ZXMgJyttLmFjZXJ0b3MrJy8nK20udG90YWwrJzwvc3Bhbj4nCiAgICAgICAgOiAocXVpekRvRXZlbnRvKGUpLmxlbmd0aAogICAgICAgICAgICA\/ICc8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWdob3N0IGJ0bi1zbSIgZGF0YS1xdWl6PSInK2UuaWQrJyI+JysoblByb2dRID8gJ0NvbnRpbnVhciBxdWVzdMO1ZXMgKCcrblByb2dRKycvJytxdWl6RG9FdmVudG8oZSkubGVuZ3RoKycpJyA6ICdRdWVzdMO1ZXMgZG8gZGlhIMK3IGF0w6kgJytQVF9ESUErJyBwdHMnKSsnPC9idXR0b24+JwogICAgICAgICAgICA6ICc8c3BhbiBjbGFzcz0ic3RhdGUtdGFnIHN0YXRlLXdhaXQiPlF1ZXN0w7VlcyBlbSBwcmVwYXJhw6fDo288L3NwYW4+Jyk7CiAgICB9CgogICAgdmFyIGZvcm0gPSAoIWRvbmUgJiYgKCFmdXR1cmEgfHwgbW9kb1ByZXZpZXcoKSkgJiYgVEVNX0NIQVZFLmluZGV4T2YoZS5pZCkgPiAtMSkKICAgICAgPyAnPGRpdiBjbGFzcz0icm93LWZvcm0iIGlkPSJyZi0nK2UuaWQrJyIgc3R5bGU9ImRpc3BsYXk6JysoaXNIb2plPycnOidub25lJykrJyI+JysKICAgICAgICAnPGRpdiBjbGFzcz0iZXYta2lja2VyIiBzdHlsZT0ibWFyZ2luLWJvdHRvbTo4cHgiPlBhbGF2cmEtY2hhdmUgZGEgYXVsYSDCtyByZXZlbGFkYSBkdXJhbnRlIGEgdHJhbnNtaXNzw6NvIMK3ICcrKGlzSG9qZSA\/ICd2YWxlICcrUFRfQVVMQSsnIHB0cycgOiAncmV0cm9hdGl2byDCtyB2YWxlICcrUFRfQVVMQV9SRVRSTysnIHB0cycpKyc8L2Rpdj4nKwogICAgICAgICc8Zm9ybSBjbGFzcz0iY2hlY2tpbi1mb3JtIiBkYXRhLWV2PSInK2UuaWQrJyI+JysKICAgICAgICAnPGlucHV0IHR5cGU9InRleHQiIHBsYWNlaG9sZGVyPSJEaWdpdGUgYSBwYWxhdnJhLWNoYXZlIiBhcmlhLWxhYmVsPSJQYWxhdnJhLWNoYXZlIGRhIGF1bGEiIGF1dG9jb21wbGV0ZT0ib2ZmIj4nKwogICAgICAgICc8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWFtYmVyIGJ0bi1zbSIgdHlwZT0ic3VibWl0Ij4nKyhpc0hvamU\/J0NoZWNrLWluJzonQ29uZmlybWFyIHByZXNlbsOnYSAocmV0cm9hdGl2YSknKSsnPC9idXR0b24+PC9mb3JtPjwvZGl2PicKICAgICAgOiAnJzsKCiAgICB2YXIgY2xzID0gZG9uZSA\/ICdvaycgOiBmdXR1cmEgPyAnbmV4dCcgOiBpc0hvamUgPyAnbm93JyA6ICdtaXNzJzsKICAgIHJldHVybiAnPGRpdiBjbGFzcz0idHItaXRlbSAnK2NscysnIj48c3BhbiBjbGFzcz0idHItZG90Ij48L3NwYW4+PGRpdiBjbGFzcz0idHItY2FyZCInKyhlLnl0ID8gJyBkYXRhLXl0PSInK2UueXQrJyIgdGl0bGU9IkFicmlyIGVzdGEgYXVsYSBubyBZb3VUdWJlIicgOiAnJykrJz4nKwogICAgICAnPGRpdiBjbGFzcz0idHItZGF0YSI+JytkbS5kKyc8c21hbGw+JytkbS5tKyc8L3NtYWxsPicrKGlzSG9qZT8nPGVtPkhvamU8L2VtPic6JycpKyc8L2Rpdj4nKwogICAgICAnPGRpdiBjbGFzcz0idHItdGh1bWIiPicrdGh1bWIrJzwvZGl2PicrCiAgICAgICc8ZGl2IGNsYXNzPSJ0ci1tYWluIj4nKwogICAgICAnPGRpdiBjbGFzcz0idHItd2hlbiI+Jyt0aXBvTGFiZWwrJyDCtyAnK2VzYyhlLmhvcmEpKyc8L2Rpdj4nKwogICAgICAnPGI+Jytlc2MoZS50aXR1bG8pKyc8L2I+JysKICAgICAgJzxkaXYgY2xhc3M9InRyLWZvb3QiPjxzcGFuIHN0eWxlPSJkaXNwbGF5OmZsZXg7Z2FwOjEwcHg7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtd3JhcDp3cmFwIj4nK2NoaXArcXVlc3RvZXMrJzwvc3Bhbj4nK2FjdHMrJzwvZGl2PicrZm9ybSsKICAgICAgJzwvZGl2PjwvZGl2PjwvZGl2Pic7CiAgfQoKICBmdW5jdGlvbiB3aXJlQXVsYXMoKXsKICAgIC8vIGNhcmQgaW50ZWlybyBjbGljw6F2ZWw6IHTDrXR1bG8sIHRodW1iIG91IMOhcmVhIGxpdnJlIGFicmVtIGEgYXVsYSBubwogICAgLy8gWW91VHViZTsgY29udHJvbGVzIGludGVybm9zIChjaGVjay1pbiwgcXVlc3TDtWVzLCDDrWNvbmVzKSBmaWNhbSBpbnRhY3RvcwogICAgJCQoJy50ci1jYXJkW2RhdGEteXRdJykuZm9yRWFjaChmdW5jdGlvbihjYXJkKXsKICAgICAgY2FyZC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKGV2KXsKICAgICAgICBpZiAoZXYudGFyZ2V0LmNsb3Nlc3QoJ2EsYnV0dG9uLGlucHV0LGZvcm0sLnJvdy1mb3JtLGRldGFpbHMnKSkgcmV0dXJuOwogICAgICAgIHdpbmRvdy5vcGVuKGNhcmQuZGF0YXNldC55dCwgJ19ibGFuaycsICdub29wZW5lcicpOwogICAgICB9KTsKICAgIH0pOwogICAgJCQoJy5jaGVja2luLWZvcm0nKS5mb3JFYWNoKGZ1bmN0aW9uKGYpewogICAgICBmLmFkZEV2ZW50TGlzdGVuZXIoJ3N1Ym1pdCcsIGZ1bmN0aW9uKGV2KXsKICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIC8vIGNhcmltYmEgcHJhIHF1ZSBvIHJlc2dhdGUgYW50aS1Sb2NrZXQgZ2xvYmFsIChkb2N1bWVudCBjbGljaykgbsOjbwogICAgICAgIC8vIHJlLWRpc3BhcmUgZXN0ZSBzdWJtaXQgZW0gNDAwbXMg4oaSIHJlZ2lzdHJhcl9jaGVja2luIGRvYnJhZG8gKyB0b2FzdAogICAgICAgIC8vICJ2b2PDqiBqw6EgY29uZmlybW91IHByZXNlbsOnYSIuIE1lc21hIGJsaW5kYWdlbSBkbyBmb3JtIGRlIGF1dGguCiAgICAgICAgZXYudGFyZ2V0Ll9fdWx0aW1vU3VibWl0ID0gRGF0ZS5ub3coKTsKICAgICAgICB2YXIgdmFsID0gZi5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpLnZhbHVlLnRyaW0oKTsKICAgICAgICB2YXIgYnRuID0gZi5xdWVyeVNlbGVjdG9yKCdidXR0b24nKTsKICAgICAgICBpZiAoYnRuLmRpc2FibGVkKSByZXR1cm47CiAgICAgICAgYnRuLmRpc2FibGVkID0gdHJ1ZTsKICAgICAgICAvLyBQUk9EVcOHw4NPOiBhIHBhbGF2cmEtY2hhdmUgw6kgdmFsaWRhZGEgTk8gU0VSVklET1IgKHNlZ3JlZG8gbm8gYmFuY28pOwogICAgICAgIC8vIG8gc2Vydmlkb3IgdGFtYsOpbSBkZWNpZGUgc2UgbyBjaGVjay1pbiDDqSBhbyB2aXZvIG91IHJldHJvYXRpdm8KICAgICAgICBzYlJwYygncmVnaXN0cmFyX2NoZWNraW4nLCB7IHBfY3BmOiBDQUNIRS51c2VyLmNwZiwgcF9ldmVudG86IGYuZGF0YXNldC5ldiwgcF9wYWxhdnJhOiB2YWwgfSkKICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKHJlcyl7CiAgICAgICAgICAgIGJ0bi5kaXNhYmxlZCA9IGZhbHNlOwogICAgICAgICAgICBpZiAocmVzLnN0YXR1cyA9PT0gJ29rJykgewogICAgICAgICAgICAgIENBQ0hFLmNoZWNraW5zW2YuZGF0YXNldC5ldl0gPSB7IGFvVml2bzogcmVzLmFvX3Zpdm8sIHRzOiBEYXRlLm5vdygpIH07CiAgICAgICAgICAgICAgdmFyIGdhbmhvID0gcmVzLmFvX3Zpdm8gPyBQVF9BVUxBIDogUFRfQVVMQV9SRVRSTzsKICAgICAgICAgICAgICB0b2FzdCgnUHJlc2Vuw6dhIGNvbmZpcm1hZGEgwrcgKycrZm10UHRzKGdhbmhvKSsnIHB0cycrKHJlcy5hb192aXZvID8gJycgOiAnIChyZXRyb2F0aXZvIMK3IDc1JSknKSsnLiBPZmVuc2l2YSBhdGl2YSEnKTsKICAgICAgICAgICAgICB2YXIgeSA9IHdpbmRvdy5zY3JvbGxZOwogICAgICAgICAgICAgIHJlbmRlckF1bGFzKCk7CiAgICAgICAgICAgICAgd2luZG93LnNjcm9sbFRvKDAsIHkpOwogICAgICAgICAgICB9IGVsc2UgaWYgKHJlcy5zdGF0dXMgPT09ICdqYV9mZWl0bycpIHsKICAgICAgICAgICAgICB0b2FzdCgnVm9jw6ogasOhIGNvbmZpcm1vdSBwcmVzZW7Dp2EgbmVzdGEgYXVsYS4nKTsKICAgICAgICAgICAgfSBlbHNlIGlmIChyZXMuc3RhdHVzID09PSAnZXZlbnRvX2Z1dHVybycpIHsKICAgICAgICAgICAgICB0b2FzdCgnTyBjaGVjay1pbiBhYnJlIG5vIGRpYSBkYSBhdWxhLicpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHRvYXN0KCdQYWxhdnJhLWNoYXZlIGluY29ycmV0YS4gRWxhIMOpIHJldmVsYWRhIGR1cmFudGUgYSB0cmFuc21pc3PDo28uJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pCiAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24oKXsgYnRuLmRpc2FibGVkID0gZmFsc2U7IHRvYXN0KCdTZW0gY29uZXjDo28uIFRlbnRlIG5vdmFtZW50ZS4nKTsgfSk7CiAgICAgIH0pOwogICAgfSk7CiAgICAkJCgnW2RhdGEtZXhwYW5kXScpLmZvckVhY2goZnVuY3Rpb24oYil7CiAgICAgIGIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpewogICAgICAgIHZhciBmID0gJCgnI3JmLScgKyBiLmRhdGFzZXQuZXhwYW5kKTsKICAgICAgICBpZiAoIWYpIHJldHVybjsKICAgICAgICB2YXIgYWJyaXIgPSBmLnN0eWxlLmRpc3BsYXkgPT09ICdub25lJzsKICAgICAgICAkJCgnLnJvdy1mb3JtJykuZm9yRWFjaChmdW5jdGlvbih4KXsgaWYgKHguaWQgIT09ICdyZi0nICsgYi5kYXRhc2V0LmV4cGFuZCkgeC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOyB9KTsKICAgICAgICBmLnN0eWxlLmRpc3BsYXkgPSBhYnJpciA\/ICcnIDogJ25vbmUnOwogICAgICAgIGlmIChhYnJpcikgZi5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpLmZvY3VzKCk7CiAgICAgIH0pOwogICAgfSk7CiAgICAkJCgnW2RhdGEtcXVpel0nKS5mb3JFYWNoKGZ1bmN0aW9uKGIpewogICAgICBiLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXsgcmVuZGVyUXVpeihiLmRhdGFzZXQucXVpeik7IH0pOwogICAgfSk7CiAgICAkJCgnW2RhdGEtZ290b10nKS5mb3JFYWNoKGZ1bmN0aW9uKGIpewogICAgICBiLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXsgZ28oYi5kYXRhc2V0LmdvdG8pOyB9KTsKICAgIH0pOwogIH0KCiAgZnVuY3Rpb24gcmVuZGVyQXVsYXMoKXsKICAgIHZhciBwID0gY2FsY1BvbnRvcyh1c2VyKTsKICAgIHZhciBjaGVja3MgPSBzdG9yZS5jaGVja2lucyh1c2VyLmVtYWlsKTsKICAgIHZhciBldkhvamUgPSBldmVudG9zRG9EaWEoaG9qZS5pc28pOwogICAgdmFyIHByaW1laXJhQ29tQ2hhdmUgPSBqLmV2ZW50b3MuZmluZChmdW5jdGlvbihlKXsgcmV0dXJuIFRFTV9DSEFWRS5pbmRleE9mKGUuaWQpID4gLTE7IH0pIHx8IGouZXZlbnRvc1swXTsKICAgIHZhciBtc2dPZmVuc2l2YSA9IGV2SG9qZS5sZW5ndGgKICAgICAgPyAnSG9qZSB0ZW0gJyArIChldkhvamUubGVuZ3RoPjE\/J2F1bGFzJzonYXVsYScpICsgJzogJyArIGV2SG9qZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuICc8Yj4nK2VzYyhlLnRpdHVsbykrJzwvYj4nO30pLmpvaW4oJyBlICcpICsgJy4gJyArCiAgICAgICAgKGV2SG9qZS5zb21lKGZ1bmN0aW9uKGUpeyByZXR1cm4gVEVNX0NIQVZFLmluZGV4T2YoZS5pZCkgPiAtMTsgfSkKICAgICAgICAgID8gJ0Zhw6dhIG8gY2hlY2staW4gY29tIGEgcGFsYXZyYS1jaGF2ZSByZXZlbGFkYSBhbyB2aXZvLicKICAgICAgICAgIDogJ0Fwcm92ZWl0ZSBhIHRyYW5zbWlzc8OjbyBhbyB2aXZvIG5vIFlvdVR1YmUuJykKICAgICAgOiBob2plLmlzbyA8IGouaW5pY2lvCiAgICAgICAgPyAnU3VhIHByaW1laXJhIHByZXNlbsOnYTogJytlc2MocHJpbWVpcmFDb21DaGF2ZS50aXR1bG8pKycgKCcrZGF0YUJSKHByaW1laXJhQ29tQ2hhdmUuZGF0YSkrJykuJwogICAgICAgIDogJ07Do28gaMOhIGF1bGEgaG9qZS4gUmVjdXBlcmUgcHJlc2Vuw6dhcyBwZW5kZW50ZXMgbmEgdHJpbGhhIGFiYWl4by4nOwoKICAgIHZhciBodG1sID0gcGFnZUhlYWQoJ1N1YSBqb3JuYWRhIGRlIGF1bGFzJywgJ0F1bGFzJywKICAgICAgJ0Fzc2lzdGEsIGJhaXhlIG9zIHNsaWRlcyBlIGNvbmZpcm1lIHByZXNlbsOnYSBjb20gYSBwYWxhdnJhLWNoYXZlIHJldmVsYWRhIGFvIHZpdm8uJywKICAgICAgJzUyMCBwdHMgZW0gam9nbycpOwogICAgaHRtbCArPSBkZW1vQmFubmVyKCk7CiAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJjYXJkIG9mZW5zaXZhLWNhcmQiPicrCiAgICAgICc8ZGl2IGNsYXNzPSJmbGFtZSI+PGRpdiBjbGFzcz0ibiI+JytwLm9mZW5zaXZhKyc8L2Rpdj48ZGl2IGNsYXNzPSJsIj5hdWxhcyBzZWd1aWRhczwvZGl2PjwvZGl2PicrCiAgICAgICc8ZGl2PjxoMz5TdWEgb2ZlbnNpdmE8L2gzPjxkaXYgY2xhc3M9Im1zZyI+Jyttc2dPZmVuc2l2YSsnPC9kaXY+JysKICAgICAgJzxkaXYgY2xhc3M9InByb2dyZXNzIj48ZGl2IGNsYXNzPSJmaWxsIiBzdHlsZT0id2lkdGg6JysocC5uQ2hlY2tzL3AubkV2ZW50b3MqMTAwKSsnJSI+PC9kaXY+PC9kaXY+JysKICAgICAgJzxkaXYgY2xhc3M9InByb2dyZXNzLW5vdGUiPicrcC5uQ2hlY2tzKycgZGUgJytwLm5FdmVudG9zKycgcHJlc2Vuw6dhcyBhdMOpIGFxdWk8L2Rpdj48L2Rpdj4nKwogICAgICAnPGRpdiBjbGFzcz0icmFuay1wdHMiPjxkaXYgY2xhc3M9Im4iPicrZm10UHRzKHAucHJlc2VuY2EpKycgPHNtYWxsPi8gJytQT05UT1MucHJlc2VuY2ErJyBwdHM8L3NtYWxsPjwvZGl2PjxkaXYgY2xhc3M9ImwiPlByZXNlbsOnYSBuYSBjbGFzc2lmaWNhw6fDo288L2Rpdj4nKwogICAgICAnPC9kaXY+JysKICAgICAgJzwvZGl2Pic7CgogICAgWzAsMSwyXS5mb3JFYWNoKGZ1bmN0aW9uKHNlbSl7CiAgICAgIHZhciBldnMgPSBqLmV2ZW50b3MuZmlsdGVyKGZ1bmN0aW9uKGUpeyByZXR1cm4gZS5zZW1hbmEgPT09IHNlbTsgfSk7CiAgICAgIGlmICghZXZzLmxlbmd0aCkgcmV0dXJuOwogICAgICAvLyBwcmVzZW7Dp2FzIGNvbnRhZGFzIHPDsyBzb2JyZSBldmVudG9zIENPTSBjaGF2ZSAoYSBBYmVydHVyYSBlIG8gZGlhIGRvCiAgICAgIC8vIFNpbXVsYWRvIG7Do28gdMOqbSBjaGVjay1pbiBlIG7Do28gZW50cmFtIG5vIGRlbm9taW5hZG9yKQogICAgICB2YXIgY29tQ2hhdmUgPSBldnMuZmlsdGVyKGZ1bmN0aW9uKGUpeyByZXR1cm4gVEVNX0NIQVZFLmluZGV4T2YoZS5pZCkgPiAtMTsgfSk7CiAgICAgIHZhciBmZWl0YXMgPSBjb21DaGF2ZS5maWx0ZXIoZnVuY3Rpb24oZSl7IHJldHVybiBjaGVja3NbZS5pZF07IH0pLmxlbmd0aDsKICAgICAgdmFyIHJvdHVsbyA9IHNlbT09PTAgPyAnQWJlcnR1cmEnIDogJ1NlbWFuYSAnK3NlbTsKICAgICAgdmFyIGZhaXhhID0gZXZzWzBdLmRhdGEgPT09IGV2c1tldnMubGVuZ3RoLTFdLmRhdGEKICAgICAgICA\/IGRhdGFCUihldnNbMF0uZGF0YSkKICAgICAgICA6IGRhdGFCUihldnNbMF0uZGF0YSkrJyBhICcrZGF0YUJSKGV2c1tldnMubGVuZ3RoLTFdLmRhdGEpOwogICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJzZWMtaCI+Jytyb3R1bG8rJyDCtyAnK2ZhaXhhKwogICAgICAgIChjb21DaGF2ZS5sZW5ndGggPyAnIDxzcGFuIGNsYXNzPSJjbnQnKyhmZWl0YXM9PT1jb21DaGF2ZS5sZW5ndGg\/JyBnJzonJykrJyI+JytmZWl0YXMrJy8nK2NvbUNoYXZlLmxlbmd0aCsnIHByZXNlbsOnYXM8L3NwYW4+JyA6ICcnKSsnPC9kaXY+JzsKICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz0idHJpbGhhIj4nK2V2cy5tYXAodHJpbGhhSXRlbSkuam9pbignJykrJzwvZGl2Pic7CiAgICB9KTsKCiAgICAkKCcjbWFpbicpLmlubmVySFRNTCA9IGh0bWw7CiAgICB3aXJlQXVsYXMoKTsKICB9CgogIC8qIC0tLS0tLS0tLS0gSU7DjUNJTyAoY29tZWNlIHBvciBhcXVpKSAtLS0tLS0tLS0tICovCiAgLy8gQSBPUkRFTSBETyBJTsONQ0lPIE1VREEgQ09NIEEgRkFTRSAoZGVjaXPDo28gZG8gSWdvciwgMTAvMDgpLiBBbnRlcyBkYQogIC8vIGVzdHJlaWEgbyBhbHVubyBuw6NvIHRlbSBvIHF1ZSBmYXplciBob2plOiBvIHRvcG8gbW9zdHJhIG8gcXVlIGVsZSBQT0RFCiAgLy8gZmF6ZXIgYWdvcmEgKHByw7N4aW1hIHRyYW5zbWlzc8OjbywgaW5kaWNhciBhbWlnb3MpIGUgYXMgcmVncmFzL0JRIE1FRAogIC8vIGRlc2NlbS4gQSBwYXJ0aXIgZGUgMjYvMDggbyBkaWEgZGUgaG9qZSBlIGEgcG9udHVhw6fDo28gc29iZW0sIGUgbyAiQ29tbwogIC8vIHZhaSBmdW5jaW9uYXIiIHJlY29saGUgbnVtIDxkZXRhaWxzPi4gQSB0cm9jYSDDqSBhdXRvbcOhdGljYSBwZWxhIGRhdGEuCiAgZnVuY3Rpb24gcmVuZGVySW5pY2lvKCl7CiAgICB2YXIgcCA9IGNhbGNQb250b3ModXNlcik7CiAgICB2YXIgZXZIb2plID0gZXZlbnRvc0RvRGlhKGhvamUuaXNvKTsKICAgIHZhciBxcyA9IHN0b3JlLm1pc3NvZXModXNlci5lbWFpbCk7CiAgICB2YXIgY2hlY2tzID0gc3RvcmUuY2hlY2tpbnModXNlci5lbWFpbCk7CiAgICB2YXIgYXRyYXNhZGFzID0gai5ldmVudG9zLmZpbHRlcihmdW5jdGlvbihlKXsgcmV0dXJuIGUucXVpeiAmJiBlLmRhdGEgPCBob2plLmlzbyAmJiAhcXNbZS5pZF07IH0pLmxlbmd0aDsKICAgIHZhciBwcmVFc3RyZWlhID0gaG9qZS5pc28gPCBqLmluaWNpbzsKCiAgICB2YXIgaHRtbCA9IHBhZ2VIZWFkKCdDb21lY2UgcG9yIGFxdWknLCAnQmVtLXZpbmRvLCAnK2VzYyh1c2VyLm5vbWUuc3BsaXQoJyAnKVswXSkrJy4nLAogICAgICAnQXF1aSBjb21lw6dhIGEgc3VhIGpvcm5hZGEgZGUgcmV0YSBmaW5hbCBydW1vIGFvICcrQUZfQlJBTkQuY3VydGErJy4nLAogICAgICAocHJlRXN0cmVpYSA\/ICdGYWx0YW0gJytkaWFzKGhvamUuaXNvLCBqLmluaWNpbykrJyBkaWFzJyA6ICdEaWEgJytkaWFBdHVhbCsnIGRlICcrdG90YWxEaWFzKSk7CgogICAgaHRtbCArPSBkZW1vQmFubmVyKCk7CgogICAgLyogLS0tIEJMT0NPUzogbW9udGFkb3MgYXF1aSwgb3JkZW5hZG9zIHBvciBmYXNlIG5vIGZpbSBkYSBmdW7Dp8OjbyAtLS0gKi8KCiAgICAvLyBWw61kZW8gZGUgYm9hcy12aW5kYXMgKGhvamUgZGVzbGlnYWRvIHBlbGEgZmxhZzsgdm9sdGEgY29tbyBpdGVtIDIgbmEKICAgIC8vIHByw6ktZXN0cmVpYSBxdWFuZG8gbyBJZ29yIGdyYXZhcikuIG1heC13aWR0aCBzZWd1cmEgYSBhbHR1cmEgZG8gcGxheWVyCiAgICAvLyAxNjo5IHBybyBhbHVubyBlbnhlcmdhciBxdWUgaMOhIGNvbnRlw7pkbyBhYmFpeG8gZGEgZG9icmEgKHBlZGlkbyAwOC8wOCkuCiAgICB2YXIgdmlkZW9CViA9IFZJREVPX0JWX1BPUl9QUk9WQVtBRl9QUk9WQV0gfHwgJyc7CiAgICB2YXIgYlZpZGVvID0gdmlkZW9CVgogICAgICA\/ICc8ZGl2IGNsYXNzPSJjYXJkIiBzdHlsZT0icGFkZGluZzowO292ZXJmbG93OmhpZGRlbjttYXJnaW4tYm90dG9tOjIycHg7bWF4LXdpZHRoOjcwMHB4Ij4nKwogICAgICAgICc8ZGl2IHN0eWxlPSJwYWRkaW5nOjE4cHggMjRweCAxNHB4Ij4nKwogICAgICAgICc8aDMgc3R5bGU9Im1hcmdpbjowIDAgMnB4Ij5Db21lY2UgcG9yIGFxdWk8L2gzPicrCiAgICAgICAgJzxwIHN0eWxlPSJmb250LXNpemU6MTMuNXB4O2NvbG9yOnZhcigtLWluay1kaW0pO21hcmdpbjowIj5BIGpvcm5hZGEsIG9zIHBvbnRvcyBlIG9zIHByw6ptaW9zIGVtIHBvdWNvcyBtaW51dG9zLjwvcD48L2Rpdj4nKwogICAgICAgICc8ZGl2IHN0eWxlPSJwb3NpdGlvbjpyZWxhdGl2ZTtwYWRkaW5nLXRvcDo1Ni4yNSU7YmFja2dyb3VuZDojMDAwIj4nKwogICAgICAgICc8aWZyYW1lIHNyYz0iJyt2aWRlb0JWKyciIHRpdGxlPSJWw61kZW8gZGUgYm9hcy12aW5kYXMgZG8gQXRvIEZpbmFsIiAnKwogICAgICAgICdzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7Ym9yZGVyOjAiICcrCiAgICAgICAgJ2FsbG93PSJhY2NlbGVyb21ldGVyOyBhdXRvcGxheTsgZW5jcnlwdGVkLW1lZGlhOyBneXJvc2NvcGU7IHBpY3R1cmUtaW4tcGljdHVyZTsgZnVsbHNjcmVlbiIgJysKICAgICAgICAnYWxsb3dmdWxsc2NyZWVuIGxvYWRpbmc9ImxhenkiPjwvaWZyYW1lPicrCiAgICAgICAgJzwvZGl2PjwvZGl2PicKICAgICAgOiAnJzsKCiAgICAvLyBDb21vIHZhaSBmdW5jaW9uYXI6IEFCRVJUTyBhbnRlcyBkYSBlc3RyZWlhICjDqSBvcmllbnRhw6fDo28gbm92YSksCiAgICAvLyBSRUNPTEhJRE8gZHVyYW50ZSBhIGpvcm5hZGEgKHZpcmEgY29uc3VsdGEsIG7Do28gb2N1cGEgYSBkb2JyYSkKICAgIHZhciBwYXNzb3MgPSAnPGRpdiBjbGFzcz0ib2ItZ3JpZCI+JysKICAgICAgJzxkaXYgY2xhc3M9Im9iLWl0ZW0iPjxzcGFuIGNsYXNzPSJuIj4xPC9zcGFuPjxiPkFzc2lzdGEgZSBmYcOnYSBvIGNoZWNrLWluPC9iPkEgcGFsYXZyYS1jaGF2ZSByZXZlbGFkYSBhbyB2aXZvIGNvbmZpcm1hIHN1YSBwcmVzZW7Dp2E6IDQwIHB0cyBhbyB2aXZvLCAzMCByZXRyb2F0aXZhLjwvZGl2PicrCiAgICAgICc8ZGl2IGNsYXNzPSJvYi1pdGVtIj48c3BhbiBjbGFzcz0ibiI+Mjwvc3Bhbj48Yj5SZXNvbHZhIGFzIHF1ZXN0w7VlcyBkbyBkaWE8L2I+VW0gYmxvY28gcG9yIGF1bGEsIGNvcnJlw6fDo28gbmEgaG9yYTogYXTDqSA2NSBwdHMgcG9yIGRpYS48L2Rpdj4nKwogICAgICAnPGRpdiBjbGFzcz0ib2ItaXRlbSI+PHNwYW4gY2xhc3M9Im4iPjM8L3NwYW4+PGI+RmVjaGUgY29tIG8gU2ltdWxhZG8gRmluYWw8L2I+UHJvdmEgw7puaWNhOiA3IHB0cyBwb3IgYWNlcnRvLCBhdMOpIDcwMC4gTyB0b3AgMTAgbGV2YSBvcyBwcsOqbWlvcy48L2Rpdj4nKwogICAgICAnPC9kaXY+JysKICAgICAgJzxkaXYgY2xhc3M9Im9iLWFjdHMiPicrCiAgICAgICc8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWFtYmVyIGJ0bi1zbSIgZGF0YS1nb3RvPSJhdWxhcyI+SXIgcGFyYSBhcyBhdWxhczwvYnV0dG9uPicrCiAgICAgICc8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWdob3N0IGJ0bi1zbSIgZGF0YS1nb3RvPSJxdWVzdG9lcyI+UmVzb2x2ZXIgcXVlc3TDtWVzPC9idXR0b24+JysKICAgICAgJzxzcGFuIHN0eWxlPSJmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS1pbmstbXV0ZSkiPkFzIHJlZ3JhcyBjb21wbGV0YXMgZmljYW0gbm8gZ3J1cG8gb2ZpY2lhbCBkbyBXaGF0c0FwcC48L3NwYW4+PC9kaXY+JzsKICAgIHZhciBiQ29tbyA9IHByZUVzdHJlaWEKICAgICAgPyAnPGRpdiBjbGFzcz0iY2FyZCBvbmJvYXJkIj48ZGl2IGNsYXNzPSJraWNrZXIiPkNvbW8gdmFpIGZ1bmNpb25hciwgZW0gMyBwYXNzb3M8L2Rpdj4nK3Bhc3NvcysnPC9kaXY+JwogICAgICA6ICc8ZGV0YWlscyBjbGFzcz0iY2FyZCBvbmJvYXJkIG9uYm9hcmQtcmVjIj48c3VtbWFyeT5SZWxlbWJyYXIgY29tbyBmdW5jaW9uYTwvc3VtbWFyeT4nK3Bhc3NvcysnPC9kZXRhaWxzPic7CgogICAgLy8gQlEgTUVEIEZSRUU6IHPDsyBFTlFVQU5UTyBhIGpvcm5hZGEgbsOjbyBjb21lw6dhIChwZWRpZG8gZG8gSWdvciwgMTAvMDgpLgogICAgLy8gRmljYSBwb3Igw5pMVElNTzogw6kgcG9udGUgcHJhIGZvcmEgZGEgcGxhdGFmb3JtYS4KICAgIHZhciBiQnEgPSBwcmVFc3RyZWlhCiAgICAgID8gJzxkaXYgY2xhc3M9ImNhcmQiIHN0eWxlPSJwYWRkaW5nOjI0cHggMjhweDttYXJnaW4tYm90dG9tOjIycHg7ZGlzcGxheTpmbGV4O2dhcDoxOHB4O2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4LXdyYXA6d3JhcDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbiI+JysKICAgICAgICAnPGRpdiBzdHlsZT0iZmxleDoxO21pbi13aWR0aDoyNDBweCI+PGRpdiBjbGFzcz0ia2lja2VyIj5FbnF1YW50byBhIGpvcm5hZGEgbsOjbyBjb21lw6dhPC9kaXY+JysKICAgICAgICAnPGgzIHN0eWxlPSJtYXJnaW46NnB4IDAgNHB4Ij5CUU1FRCBkZSBQb3J0YXMgQWJlcnRhczogdHJlaW5lIGRlIGdyYcOnYTwvaDM+JysKICAgICAgICAnPHAgc3R5bGU9ImZvbnQtc2l6ZToxMy41cHg7Y29sb3I6dmFyKC0taW5rLWRpbSk7bWFyZ2luOjAiPkJhbmNvIGRlIFF1ZXN0w7VlcyBsaWJlcmFkbyBlbSBhZ29zdG8uIFRyZWluZSBubyBwYWRyw6NvIGRhIHN1YSBwcm92YSBhdMOpIGEgZXN0cmVpYS48L3A+PC9kaXY+JysKICAgICAgICAnPGEgY2xhc3M9ImJ0biBidG4tYW1iZXIiIGhyZWY9IicrQlFNRURfVVJMKyciIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIj5BY2Vzc2FyIG8gQlFNRUQgZ3LDoXRpczwvYT48L2Rpdj4nCiAgICAgIDogJyc7CgogICAgLy8gSW5kaXF1ZSBlIGdhbmhlIHBvbnRvczogU0VNIFRFVE8gKHJldmlzw6NvIDExLzA4KSDigJQgcGxhY2FyIHF1ZSBzw7MgY3Jlc2NlLgogICAgLy8gVmFsZSBhdXRvbcOhdGljbyBxdWFuZG8gbyBhbWlnbyBzZSBpbnNjcmV2ZSBwZWxvIGxpbms7IG7Do28gaMOhIG1haXMgdmFnYQogICAgLy8gbmVtIHBlbmRlbnRlLiBRdWFudG8gbWFpcyBpbmRpY2FyLCBtYWlzIHBvbnRvcy4KICAgIHZhciBpbmRpY2EgPSBDQUNIRS5pbmRpY2Fjb2VzIHx8IHsgdmFsaWRhczogMCwgcGVuZGVudGVzOiAwLCBsaXN0YTogW10gfTsKICAgIHZhciBsaW5rSW5kID0gQUZfVVJMUy5jYWRhc3RybyArIChBRl9VUkxTLmNhZGFzdHJvLmluZGV4T2YoJz8nKSA+IC0xID8gJyYnIDogJz8nKSArICdyZWY9JyArIChDQUNIRS5yZWZDb2RlIHx8ICcnKTsKICAgIHZhciBtc2daYXAgPSAnRXN0b3UgbmEgcmV0YSBmaW5hbCBkbyAnK0FGX0JSQU5ELmN1cnRhKycgY29tIG8gQXRvIEZpbmFsIGRvIEVzdHJhdMOpZ2lhIE1FRDogYXVsYXMgYW8gdml2bywgcXVlc3TDtWVzIGNvbWVudGFkYXMgZSBTaW11bGFkbywgdHVkbyBncmF0dWl0by4gSW5zY3JldmEtc2UgcGVsbyBtZXUgbGluazogJyArIGxpbmtJbmQ7CiAgICB2YXIgbkluZCA9IGluZGljYS52YWxpZGFzIHx8IDA7CiAgICB2YXIgcHRzSW5kQXR1YWwgPSBQVF9JTkQgKiBuSW5kOwogICAgdmFyIHNjb3JlVHh0ID0gbkluZAogICAgICA\/ICc8Yj4rJytwdHNJbmRBdHVhbCsnIHB0czwvYj4gasOhIHNvbWFkb3MgwrcgJytuSW5kKycgYW1pZ28nKyhuSW5kPjE\/J3MgaW5zY3JpdG9zJzonIGluc2NyaXRvJykrJyBwZWxvIHNldSBsaW5rJwogICAgICA6ICdDb21wYXJ0aWxoZSBzZXUgbGluazogY2FkYSBhbWlnbyBxdWUgc2UgaW5zY3JldmVyIHZhbGUgKycrUFRfSU5EKycgcHRzLCBzZW0gbGltaXRlLic7CiAgICB2YXIgYW1pZ29zID0gKGluZGljYS5saXN0YSB8fCBbXSkubWFwKGZ1bmN0aW9uKGEpewogICAgICByZXR1cm4gJzxzcGFuIGNsYXNzPSJpbmQtZnJpZW5kIG9rIj48c3BhbiBjbGFzcz0ic3QiPjwvc3Bhbj4nK2VzYyhhLm5vbWUpKyc8L3NwYW4+JzsKICAgIH0pLmpvaW4oJycpOwogICAgdmFyIGJJbmQgPSAnPGRpdiBjbGFzcz0ic2VjLWgiPkluZGlxdWUgZSBnYW5oZSBwb250b3M8L2Rpdj4nKwogICAgICAnPGRpdiBjbGFzcz0iY2FyZCBpbmQtY2FyZCI+PGRpdiBjbGFzcz0iaW5kLWdyaWQiPicrCiAgICAgICc8ZGl2IGNsYXNzPSJpbmQtbGVmdCI+JysKICAgICAgJzxkaXYgY2xhc3M9ImtpY2tlciI+UHJvZ3JhbWEgZGUgaW5kaWNhw6fDo28gwrcgc2VtIGxpbWl0ZTwvZGl2PicrCiAgICAgICc8aDM+Q2FkYSBhbWlnbyBxdWUgc2UgaW5zY3JldmUgdmFsZSAnK1BUX0lORCsnIHB0czwvaDM+JysKICAgICAgJzxwIGNsYXNzPSJyZWdyYSI+Q29udGEgYXV0b23DoXRpY28gYXNzaW0gcXVlIG8gYW1pZ28gc2UgaW5zY3JldmUgcGVsbyBzZXUgbGluay4gTsOjbyBow6EgdGV0bzogcXVhbnRvIG1haXMgaW5kaWNhciwgbWFpcyBwb250b3MuPC9wPicrCiAgICAgICc8ZGl2IGNsYXNzPSJpbmQtbGlua2xhYmVsIj5TZXUgbGluayBwZXNzb2FsPC9kaXY+JysKICAgICAgJzxkaXYgY2xhc3M9ImluZC1saW5rcm93Ij4nKwogICAgICAnPGlucHV0IGlkPSJpbmRMaW5rIiByZWFkb25seSB2YWx1ZT0iJytlc2MobGlua0luZCkrJyIgYXJpYS1sYWJlbD0iU2V1IGxpbmsgZGUgaW5kaWNhw6fDo28iPicrCiAgICAgICc8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWFtYmVyIGJ0bi1zbSIgaWQ9ImluZENvcGlhciI+Q29waWFyIGxpbms8L2J1dHRvbj48L2Rpdj4nKwogICAgICAnPGRpdiBjbGFzcz0iaW5kLWFjdHMiPicrCiAgICAgICc8YSBjbGFzcz0iYnRuIGJ0bi1naG9zdCBidG4tc20gYnRuLXdhIiBocmVmPSJodHRwczovL3dhLm1lLz90ZXh0PScrZW5jb2RlVVJJQ29tcG9uZW50KG1zZ1phcCkrJyIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIiPicrSUNPX1dBKycgQ29udmlkYXIgcGVsbyBXaGF0c0FwcDwvYT48L2Rpdj4nKwogICAgICAnPC9kaXY+JysKICAgICAgJzxkaXYgY2xhc3M9ImluZC1wbGFjYXIiPicrCiAgICAgICc8ZGl2IGNsYXNzPSJpbmQtcGxhY2FyLW4iPicrbkluZCsnPC9kaXY+JysKICAgICAgJzxkaXYgY2xhc3M9ImluZC1wbGFjYXItbCI+JysobkluZD09PTE\/J2FtaWdvIGluc2NyaXRvJzonYW1pZ29zIGluc2NyaXRvcycpKyc8L2Rpdj4nKwogICAgICAnPGRpdiBjbGFzcz0iaW5kLXBsYWNhci1wdHMiPisnK3B0c0luZEF0dWFsKycgcHRzPC9kaXY+JysKICAgICAgJzwvZGl2PjwvZGl2PicrCiAgICAgICc8ZGl2IGNsYXNzPSJpbmQtc2NvcmUiPicrc2NvcmVUeHQrJzwvZGl2PicrCiAgICAgIChhbWlnb3MgPyAnPGRpdiBjbGFzcz0iaW5kLWZyaWVuZHMiPicrYW1pZ29zKyc8L2Rpdj4nIDogJycpKwogICAgICAnPC9kaXY+JzsKCiAgICAvLyBjYXJkICJVc2UgY29tbyBhcGxpY2F0aXZvIiByZW1vdmlkbyBkbyBJbsOtY2lvIGEgcGVkaWRvIGRvIElnb3IgKDA2LzA4KTsKICAgIC8vIG8gbWFuaWZlc3QgUFdBIGNvbnRpbnVhIG5hcyBww6FnaW5hcyAoaW5zdGFsw6F2ZWwgcGVsbyBtZW51IGRvIG5hdmVnYWRvcikKICAgIHZhciBiSG9qZSA9ICcnOwogICAgaWYgKGV2SG9qZS5sZW5ndGgpIHsKICAgICAgYkhvamUgKz0gJzxkaXYgY2xhc3M9InNlYy1oIj5Ib2plIG5hIGpvcm5hZGE8L2Rpdj4nOwogICAgICBldkhvamUuZm9yRWFjaChmdW5jdGlvbihlKXsKICAgICAgICB2YXIgZG9uZSA9ICEhY2hlY2tzW2UuaWRdOwogICAgICAgIHZhciB0ZW1DaCA9IFRFTV9DSEFWRS5pbmRleE9mKGUuaWQpID4gLTE7CiAgICAgICAgdmFyIGRtID0gZGlhTWVzKGUuZGF0YSk7CiAgICAgICAgYkhvamUgKz0gJzxkaXYgY2xhc3M9Im1yb3cnKyhkb25lPycgZG9uZSc6JycpKyciPjxkaXYgY2xhc3M9ImRhdGEiPicrZG0uZCsnPHNtYWxsPicrZG0ubSsnPC9zbWFsbD48L2Rpdj4nKwogICAgICAgICAgJzxkaXYgY2xhc3M9InQiPicrZXNjKGUudGl0dWxvKSsnPGJyPjxzcGFuIHN0eWxlPSJjb2xvcjp2YXIoLS1pbmstZGltKTtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjEzcHgiPicrZXNjKGUuaG9yYSkrKGRvbmU\/JyDCtyBwcmVzZW7Dp2EgY29uZmlybWFkYSc6dGVtQ2g\/JyDCtyBwYWxhdnJhLWNoYXZlIHJldmVsYWRhIGFvIHZpdm8gwrcgdmFsZSAnK1BUX0FVTEErJyBwdHMnOicgwrcgdHJhbnNtaXNzw6NvIGFvIHZpdm8gbm8gWW91VHViZScpKyc8L3NwYW4+PC9kaXY+JysKICAgICAgICAgICh0ZW1DaAogICAgICAgICAgICA\/ICc8YnV0dG9uIGNsYXNzPSJidG4gJysoZG9uZT8nYnRuLWdob3N0JzonYnRuLWFtYmVyJykrJyBidG4tc20iIGRhdGEtZ290bz0iYXVsYXMiPicrKGRvbmU\/J1ZlciBhdWxhJzonRmF6ZXIgY2hlY2staW4nKSsnPC9idXR0b24+JwogICAgICAgICAgICA6ICc8YSBjbGFzcz0iYnRuIGJ0bi1hbWJlciBidG4tc20iIGhyZWY9IicrKGUueXR8fCdodHRwczovL3d3dy55b3V0dWJlLmNvbS9AZXN0cmF0ZWdpYW1lZCcpKyciIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIj5Bc3Npc3RpciBhbyB2aXZvPC9hPicpKyc8L2Rpdj4nOwogICAgICB9KTsKICAgIH0gZWxzZSBpZiAocHJlRXN0cmVpYSkgewogICAgICAvLyBwcsOpLWVzdHJlaWEgKGF0w6kgYSBBdWxhIEluYXVndXJhbCk6IENBUlTDg08gREUgQk9BUy1WSU5EQVMgY29tIGEgdGh1bWIgZG8KICAgICAgLy8gZXZlbnRvICsgYSBtZW5zYWdlbSBkZSByZWNlcMOnw6NvIChwZWRpZG8gZG8gY29vcmRlbmFkb3IsIDEyLzA4KSArIG8gQ1RBCiAgICAgIC8vIGRvIGxlbWJyZXRlIE5BVElWTyBkbyBZb3VUdWJlLiBBIGRhdGEgYXBhcmVjZSBTw5MgYXF1aSAobyBjYWJlw6dhbGhvIG7Do28KICAgICAgLy8gcmVwZXRlLCBvIGNoaXAgbW9zdHJhIGEgY29udGFnZW0pIHByYSBuw6NvIG1hcnRlbGFyIDN4LgogICAgICAvLyBTw5MgYXBhcmVjZSBxdWFuZG8gYSBBdWxhIEluYXVndXJhbCBKw4EgdGVtIGxpbmsgZG8gWW91VHViZSAocHJveC55dCkuIFNlbQogICAgICAvLyBsaW5rIChleC46IFJldmFsaWRhIGVucXVhbnRvIGEgbGl2ZSBuw6NvIGV4aXN0ZSDigJQgcGVkaWRvIGRvIElnb3IgMTIvMDgpLCBvCiAgICAgIC8vIGNhcmQgZmljYSBkZSBmb3JhOiBuYWRhIGRlIHRodW1iIHZhemlhIG5lbSAiRGVmaW5pciBsZW1icmV0ZSIgcHJhIGx1Z2FyCiAgICAgIC8vIG5lbmh1bS4gVm9sdGEgc296aW5obyBxdWFuZG8gbyB5b3V0dWJlX3VybCBkbyBldmVudG8gZm9yIHByZWVuY2hpZG8uCiAgICAgIHZhciBwcm94ID0gai5ldmVudG9zLmZpbmQoZnVuY3Rpb24oZSl7IHJldHVybiBlLmRhdGEgPj0gaG9qZS5pc287IH0pIHx8IGouZXZlbnRvc1swXTsKICAgICAgaWYgKHByb3ggJiYgcHJveC55dCkgewogICAgICAgIHZhciBwcm94WXQgPSBwcm94Lnl0OwogICAgICAgIHZhciBwcm94VGh1bWIgPSB5dFRodW1iKHByb3hZdCk7CiAgICAgICAgdmFyIHByb3hUaXR1bG8gPSBwcm94LnRpdHVsby5zcGxpdCgnIMK3ICcpWzBdOwogICAgICAgIGJIb2plICs9ICc8ZGl2IGNsYXNzPSJzZWMtaCI+U3VhIGpvcm5hZGEgY29tZcOnYSBhcXVpPC9kaXY+JysKICAgICAgICAgICc8YXJ0aWNsZSBjbGFzcz0iY2FyZCBhZi13ZWxjb21lIj4nKwogICAgICAgICAgJzxkaXYgY2xhc3M9ImFmdy1tZWRpYSI+JysKICAgICAgICAgIChwcm94VGh1bWIgPyAnPGltZyBzcmM9IicrcHJveFRodW1iKyciIGFsdD0iJytlc2MocHJveFRpdHVsbykrJyIgbG9hZGluZz0ibGF6eSIgb25lcnJvcj0idGhpcy5zdHlsZS5kaXNwbGF5PVwnbm9uZVwnIj4nIDogJycpKwogICAgICAgICAgJzxzcGFuIGNsYXNzPSJhZnctYmFkZ2UiPicrZGF0YUJSKHByb3guZGF0YSkrJyDCtyAnK2VzYyhwcm94LmhvcmEpKyc8L3NwYW4+PC9kaXY+JysKICAgICAgICAgICc8ZGl2IGNsYXNzPSJhZnctYm9keSI+JysKICAgICAgICAgICc8aDM+UXVlIGJvbSB0ZXIgdm9jw6ogbm8gQXRvIEZpbmFsITwvaDM+JysKICAgICAgICAgICc8cD5QYXJhYsOpbnMgcG9yIGFjZXNzYXIgYSBzdWEgw6FyZWEuIEEgcmV0YSBmaW5hbCBydW1vIGFvICcrQUZfQlJBTkQuY3VydGErJyBjb21lw6dhIG5hIDxiPicrZXNjKHByb3hUaXR1bG8pKyc8L2I+LCBkaWEgPGI+JytkYXRhQlIocHJveC5kYXRhKSsnLCDDoHMgJytlc2MocHJveC5ob3JhKSsnPC9iPiwgYW8gdml2byBubyBZb3VUdWJlLiBBdGl2ZSBvIGxlbWJyZXRlIHBhcmEgbsOjbyBwZXJkZXIgYSBlc3RyZWlhLjwvcD4nKwogICAgICAgICAgJzxhIGNsYXNzPSJidG4gYnRuLWFtYmVyIGJ0bi1zbSIgaHJlZj0iJytwcm94WXQrJyIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIiPicrSUNPX1NJTk8rJyBEZWZpbmlyIGxlbWJyZXRlIG5vIFlvdVR1YmU8L2E+JysKICAgICAgICAgICc8ZGl2IGNsYXNzPSJhZnctbm90YSI+TyBZb3VUdWJlIHRlIGF2aXNhIG5hIGhvcmEgZW0gcXVlIGEgdHJhbnNtaXNzw6NvIGVudHJhciBBTyBWSVZPLjwvZGl2PicrCiAgICAgICAgICAnPC9kaXY+PC9hcnRpY2xlPic7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGJIb2plICs9ICc8ZGl2IGNsYXNzPSJzZWMtaCI+SG9qZSBuYSBqb3JuYWRhPC9kaXY+JysKICAgICAgICAnPGRpdiBjbGFzcz0iZGF5LWVtcHR5Ij5TZW0gdHJhbnNtaXNzw6NvIGhvamUuIFJlY3VwZXJlIHF1ZXN0w7VlcyBhdHJhc2FkYXMgb3UgcmV2ZWphIGFzIGdyYXZhw6fDtWVzLjwvZGl2Pic7CiAgICB9CgogICAgaWYgKGF0cmFzYWRhcykgewogICAgICBiSG9qZSArPSAnPGRpdiBjbGFzcz0ibXJvdyI+PGRpdiBjbGFzcz0iZGF0YSI+JythdHJhc2FkYXMrJzxzbWFsbD4nKyhhdHJhc2FkYXM9PT0xPydkaWEnOidkaWFzJykrJzwvc21hbGw+PC9kaXY+JysKICAgICAgICAnPGRpdiBjbGFzcz0idCI+QXTDqSA8YiBzdHlsZT0iY29sb3I6dmFyKC0tYW1iZXIpIj4nKyhhdHJhc2FkYXMgKiBQVF9ESUEpKycgcHRzPC9iPiBlc3BlcmFuZG8gcG9yIHZvY8OqLiBRdWVzdMO1ZXMgYXRyYXNhZGFzIHZhbGVtIGlndWFsIGF0w6kgbyBlbmNlcnJhbWVudG8gZG8gR2FiYXJpdG8uPC9kaXY+JysKICAgICAgICAnPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1hbWJlciBidG4tc20iIGRhdGEtZ290bz0icXVlc3RvZXMiPlJlY3VwZXJhciBwb250b3M8L2J1dHRvbj48L2Rpdj4nOwogICAgfQoKICAgIC8vIFBvbnR1YcOnw6NvOiBzb21lIG5hIHByw6ktZXN0cmVpYSBlbnF1YW50byBvIHBsYWNhciDDqSB6ZXJvIChjYXJkIGRlIHplcm9zCiAgICAvLyBuw6NvIGluZm9ybWEgbmFkYSk7IHJlYXBhcmVjZSBhc3NpbSBxdWUgYSAxwqogaW5kaWNhw6fDo28gdmlyYSBwb250b3MKICAgIHZhciBiUHRzID0gKHByZUVzdHJlaWEgJiYgIXAudG90YWwpCiAgICAgID8gJycKICAgICAgOiAnPGRpdiBjbGFzcz0ic2VjLWgiPlN1YSBwb250dWHDp8OjbzwvZGl2PicrCiAgICAgICAgJzxkaXYgY2xhc3M9ImNhcmQiIHN0eWxlPSJwYWRkaW5nOjI2cHggMzBweCI+JysKICAgICAgICAnPGRpdiBzdHlsZT0iZm9udC1zaXplOjM4cHg7Zm9udC13ZWlnaHQ6ODAwO2NvbG9yOnZhcigtLWFtYmVyKSI+JytmbXRQdHMocC50b3RhbCkrJyA8c21hbGwgc3R5bGU9ImZvbnQtc2l6ZToxNXB4O2NvbG9yOnZhcigtLWluay1tdXRlKTtmb250LXdlaWdodDo2MDAiPnB0czwvc21hbGw+PC9kaXY+JysKICAgICAgICAnPGRpdiBzdHlsZT0iZm9udC1zaXplOjEyLjVweDtjb2xvcjp2YXIoLS1pbmstbXV0ZSk7bWFyZ2luLXRvcDoycHgiPmpvcm5hZGEgYXTDqSAnK2ZtdFB0cyhQT05UT1Muam9ybmFkYSkrJyBwdHMgKyBpbmRpY2HDp8O1ZXMgKHNlbSB0ZXRvKTwvZGl2PicrCiAgICAgICAgJzxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtnYXA6MjZweDtmbGV4LXdyYXA6d3JhcDttYXJnaW4tdG9wOjE0cHg7Zm9udC1zaXplOjE0cHg7Y29sb3I6dmFyKC0taW5rLWRpbSkiPicrCiAgICAgICAgJzxzcGFuPjxiIHN0eWxlPSJjb2xvcjp2YXIoLS1pbmspIj5QcmVzZW7Dp2E8L2I+ICcrZm10UHRzKHAucHJlc2VuY2EpKycgLyAnK1BPTlRPUy5wcmVzZW5jYSsnPC9zcGFuPicrCiAgICAgICAgJzxzcGFuPjxiIHN0eWxlPSJjb2xvcjp2YXIoLS1pbmspIj5RdWVzdMO1ZXM8L2I+ICcrZm10UHRzKHAubWlzc29lcykrJyAvICcrUE9OVE9TLm1pc3NvZXMrJzwvc3Bhbj4nKwogICAgICAgICc8c3Bhbj48YiBzdHlsZT0iY29sb3I6dmFyKC0taW5rKSI+U2ltdWxhZG8gRmluYWw8L2I+ICcrZm10UHRzKHAuc2ltdWxhZG8pKycgLyAnK1BPTlRPUy5zaW11bGFkbysnPC9zcGFuPicrCiAgICAgICAgJzxzcGFuPjxiIHN0eWxlPSJjb2xvcjp2YXIoLS1pbmspIj5JbmRpY2HDp8O1ZXM8L2I+ICsnK2ZtdFB0cyhwLmluZGljYWNhbykrJyA8c21hbGwgc3R5bGU9ImNvbG9yOnZhcigtLWluay1tdXRlKSI+YsO0bnVzPC9zbWFsbD48L3NwYW4+PC9kaXY+JysKICAgICAgICAnPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1naG9zdCBidG4tc20iIGRhdGEtZ290bz0icmFua2luZyIgc3R5bGU9Im1hcmdpbi10b3A6MThweCI+VmVyIG1pbmhhIHBvc2nDp8OjbyBuYSBjbGFzc2lmaWNhw6fDo288L2J1dHRvbj48L2Rpdj4nOwoKICAgIC8vIE9SREVNIFBPUiBGQVNFCiAgICBodG1sICs9IHByZUVzdHJlaWEKICAgICAgLy8gYW50ZXMgZGUgMjYvMDg6IG8gVsONREVPIGRlIGJvYXMtdmluZGFzIHByaW1laXJvIChwZWRpZG8gZG8gSWdvciAxMy8wOCDigJQKICAgICAgLy8gcXVhbmRvIGV4aXN0ZTsgbm8gUmV2YWxpZGEgYlZpZGVvIMOpICcnIGUgc29tZSksIGRlcG9pcyAiQ29tbyB2YWkKICAgICAgLy8gZnVuY2lvbmFyIiwgbyBjYXJkIGRhIEF1bGEgSW5hdWd1cmFsIGUgYSBwb250ZSBleHRlcm5hIHBvciDDumx0aW1vCiAgICAgID8gYlZpZGVvICsgYkNvbW8gKyBiSG9qZSArIGJJbmQgKyBiUHRzICsgYkJxCiAgICAgIC8vIGR1cmFudGUgYSBqb3JuYWRhOiBob2plIOKGkiBwbGFjYXIg4oaSIGluZGljYcOnw7VlcyDihpIgcmVncmFzIHJlY29saGlkYXMKICAgICAgOiBiSG9qZSArIGJQdHMgKyBiSW5kICsgYlZpZGVvICsgYkNvbW87CgogICAgJCgnI21haW4nKS5pbm5lckhUTUwgPSBodG1sOwogICAgJCQoJ1tkYXRhLWdvdG9dJykuZm9yRWFjaChmdW5jdGlvbihiKXsKICAgICAgYi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCl7IGdvKGIuZGF0YXNldC5nb3RvKTsgfSk7CiAgICB9KTsKICAgIHZhciBiYyA9ICQoJyNpbmRDb3BpYXInKTsKICAgIGlmIChiYykgYmMuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpewogICAgICB2YXIgaW5wID0gJCgnI2luZExpbmsnKTsKICAgICAgdHJ5IHsgaW5wLnNlbGVjdCgpOyBpbnAuc2V0U2VsZWN0aW9uUmFuZ2UoMCwgOTk5KTsgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKTsgfSBjYXRjaChlKXt9CiAgICAgIGlmIChuYXZpZ2F0b3IuY2xpcGJvYXJkICYmIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KSBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChpbnAudmFsdWUpLmNhdGNoKGZ1bmN0aW9uKCl7fSk7CiAgICAgIGJjLnRleHRDb250ZW50ID0gJ0NvcGlhZG8g4pyTJzsKICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpeyBiYy50ZXh0Q29udGVudCA9ICdDb3BpYXIgbGluayc7IH0sIDE4MDApOwogICAgICB0b2FzdCgnTGluayBjb3BpYWRvLiBDb21wYXJ0aWxoZSBjb20gb3MgYW1pZ29zIScpOwogICAgfSk7CiAgfQoKICAvKiAtLS0tLS0tLS0tIFFVRVNUw5VFUyAoaMOtYnJpZG86IGhlcm8gZGUgaG9qZSArIGxpc3RhcyBjb21wYWN0YXMpIC0tLS0tLS0tLS0gKi8KICBmdW5jdGlvbiByZW5kZXJRdWVzdG9lcygpewogICAgdmFyIHAgPSBjYWxjUG9udG9zKHVzZXIpOwogICAgdmFyIG1pc3MgPSBzdG9yZS5taXNzb2VzKHVzZXIuZW1haWwpOwogICAgdmFyIGxpYmVyYWRhcyA9IGouZXZlbnRvcy5maWx0ZXIoZnVuY3Rpb24oZSl7IHJldHVybiBlLnF1aXogJiYgKG1vZG9QcmV2aWV3KCkgfHwgZS5kYXRhIDw9IGhvamUuaXNvKTsgfSk7CiAgICB2YXIgZGVIb2plID0gbGliZXJhZGFzLmZpbHRlcihmdW5jdGlvbihlKXsgcmV0dXJuIGUuZGF0YSA9PT0gaG9qZS5pc287IH0pOwogICAgdmFyIGF0cmFzYWRhcyA9IGxpYmVyYWRhcy5maWx0ZXIoZnVuY3Rpb24oZSl7IHJldHVybiAobW9kb1ByZXZpZXcoKSA\/IGUuZGF0YSAhPT0gaG9qZS5pc28gOiBlLmRhdGEgPCBob2plLmlzbykgJiYgIW1pc3NbZS5pZF07IH0pCiAgICAgIC5zb3J0KGZ1bmN0aW9uKGEsYil7IHJldHVybiBhLmRhdGEgPCBiLmRhdGEgPyAxIDogLTE7IH0pOwogICAgdmFyIGN1bXByaWRhcyA9IGxpYmVyYWRhcy5maWx0ZXIoZnVuY3Rpb24oZSl7IHJldHVybiBtaXNzW2UuaWRdICYmIGUuZGF0YSAhPT0gaG9qZS5pc287IH0pCiAgICAgIC5zb3J0KGZ1bmN0aW9uKGEsYil7IHJldHVybiBhLmRhdGEgPCBiLmRhdGEgPyAxIDogLTE7IH0pOwogICAgdmFyIHB0c1Bvck1pc3NhbyA9IFBUX0RJQTsKICAgIHZhciBmYWx0YW0gPSBwLm5RdWl6emVzIC0gcC5uTWlzczsKCiAgICB2YXIgaHRtbCA9IHBhZ2VIZWFkKCdSZXNvbHZhIGUgcG9udHVlJywgJ1F1ZXN0w7VlcycsCiAgICAgICdVbSBibG9jbyBwb3IgYXVsYSwgbm8gcGFkcsOjbyBkYSBzdWEgcHJvdmE6IGNvcnJlw6fDo28gaW1lZGlhdGEgZSBnYWJhcml0byBjb21lbnRhZG8uJywKICAgICAgZm10UHRzKHAubWlzc29lcykgKyAnIC8gJyArIFBPTlRPUy5taXNzb2VzICsgJyBwdHMnKTsKICAgIGh0bWwgKz0gZGVtb0Jhbm5lcigpOwoKICAgIC8vIEJMT1FVRUlPIGF0w6kgbyBkaWEgZGEgMcKqIGF1bGEgY29tIHF1ZXN0w7VlcyAocGVkaWRvIGRvIElnb3IsIDEyLzA4KSDigJQgbWVzbWEKICAgIC8vIGxpbmd1YWdlbSBkbyBTaW11bGFkbzogYmxvY28gZGUgREFUQSBkZXN0YWNhZG8gKyBtZW5zYWdlbSwgc2VtIGEgbGlzdGEuCiAgICB2YXIgcHJpbWVpcm9RdWl6ID0gai5ldmVudG9zLmZpbmQoZnVuY3Rpb24oZSl7IHJldHVybiBlLnF1aXo7IH0pOwogICAgaWYgKHByaW1laXJvUXVpeiAmJiAhbW9kb1ByZXZpZXcoKSAmJiBob2plLmlzbyA8IHByaW1laXJvUXVpei5kYXRhKSB7CiAgICAgIHZhciBwcSA9IHByaW1laXJvUXVpei5kYXRhLnNwbGl0KCctJyk7CiAgICAgIHZhciBxRGF0YUV4dGVuc28gPSBwYXJzZUludChwcVsyXSwxMCkgKyAnIGRlICcgKyBNRVNFU19GVUxMW3BhcnNlSW50KHBxWzFdLDEwKS0xXTsKICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz0iY2FyZCBsb2NrZWQtY2FyZCI+JysKICAgICAgICAnPGRpdiBjbGFzcz0ic2ltLXF1YW5kbyI+JysKICAgICAgICAnPGRpdiBjbGFzcz0ic3EtaWNvIj4nK0lDT19QUk9WQSsnPC9kaXY+JysKICAgICAgICAnPGRpdiBjbGFzcz0ic3EtdHh0Ij48ZGl2IGNsYXNzPSJzcS1sYWJlbCI+UXVhbmRvIGFicmVtPC9kaXY+JysKICAgICAgICAnPGRpdiBjbGFzcz0ic3EtZGlhIj4nK3FEYXRhRXh0ZW5zbysnPC9kaXY+JysKICAgICAgICAnPGRpdiBjbGFzcz0ic3EtaG9yYSI+bm8gZGlhIGRlIGNhZGEgYXVsYSwgdW1hIG5vdmEgcm9kYWRhPC9kaXY+PC9kaXY+PC9kaXY+JysKICAgICAgICAnPHAgc3R5bGU9Im1hcmdpbi10b3A6MjBweCI+QXMgcXVlc3TDtWVzIGFicmVtIG5vIGRpYSBkZSBjYWRhIGF1bGEsIG5vIHBhZHLDo28gZGEgc3VhIHByb3ZhLCBjb20gY29ycmXDp8OjbyBuYSBob3JhLCBlIHZhbGVtIGF0w6kgJytQVF9ESUErJyBwdHMgcG9yIGRpYS4gQXTDqSBsw6EsIGdhcmFudGEgYSBzdWEgcHJlc2Vuw6dhIG5hcyB0cmFuc21pc3PDtWVzIGUgc29tZSBwb250b3MgbmEgc3VhIGNsYXNzaWZpY2HDp8Ojby48L3A+JysKICAgICAgICAnPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1hbWJlciBzaW0tYmxvcXVlYWRvIiB0eXBlPSJidXR0b24iIGRpc2FibGVkIGFyaWEtZGlzYWJsZWQ9InRydWUiPicrSUNPX0xPQ0srJyBBYnJlbSBlbSAnK2RhdGFCUihwcmltZWlyb1F1aXouZGF0YSkrJzwvYnV0dG9uPicrCiAgICAgICAgJzwvZGl2Pic7CiAgICAgICQoJyNtYWluJykuaW5uZXJIVE1MID0gaHRtbDsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9ImNhcmQiIHN0eWxlPSJwYWRkaW5nOjI2cHggMzBweDttYXJnaW4tYm90dG9tOjI2cHgiPicrCiAgICAgICc8ZGl2IGNsYXNzPSJraWNrZXIiIHN0eWxlPSJtYXJnaW4tYm90dG9tOjEwcHgiPkZhdGlhIGRlIHF1ZXN0w7VlczwvZGl2PicrCiAgICAgICc8ZGl2IHN0eWxlPSJmb250LXNpemU6MzhweDtmb250LXdlaWdodDo4MDA7Y29sb3I6dmFyKC0tYW1iZXIpIj4nK2ZtdFB0cyhwLm1pc3NvZXMpKycgPHNtYWxsIHN0eWxlPSJmb250LXNpemU6MTVweDtjb2xvcjp2YXIoLS1pbmstbXV0ZSk7Zm9udC13ZWlnaHQ6NjAwIj4vICcrUE9OVE9TLm1pc3NvZXMrJyBwdHMgwrcgJytwLm5NaXNzKycgZGUgJytwLm5RdWl6emVzKycgcmVzb2x2aWRhczwvc21hbGw+PC9kaXY+JysKICAgICAgJzxkaXYgY2xhc3M9InByb2dyZXNzIj48ZGl2IGNsYXNzPSJmaWxsIiBzdHlsZT0id2lkdGg6JysocC5uTWlzcy9wLm5RdWl6emVzKjEwMCkrJyUiPjwvZGl2PjwvZGl2PicrCiAgICAgICc8ZGl2IGNsYXNzPSJwcm9ncmVzcy1ub3RlIj4nKyhmYWx0YW0gPiAwCiAgICAgICAgPyAnRmFsdGFtIDxiIHN0eWxlPSJjb2xvcjp2YXIoLS1hbWJlcikiPicrZmFsdGFtKycgJysoZmFsdGFtPT09MT8nZGlhJzonZGlhcycpKyc8L2I+IGRlIHF1ZXN0w7Vlcy4nCiAgICAgICAgOiAnVG9kYXMgYXMgcXVlc3TDtWVzIHJlc29sdmlkYXMuIEFnb3JhIGRlZmVuZGEgbm8gU2ltdWxhZG8uJykrJzwvZGl2PjwvZGl2Pic7CgogICAgdmFyIHBsYXkgPSAnPHN2ZyB3aWR0aD0iMTEiIGhlaWdodD0iMTEiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0iY3VycmVudENvbG9yIj48cGF0aCBkPSJNNyA0bDEzIDgtMTMgOHoiLz48L3N2Zz4nOwoKICAgIGZ1bmN0aW9uIG1yb3coZSl7CiAgICAgIHZhciBkbSA9IGRpYU1lcyhlLmRhdGEpOwogICAgICB2YXIgbSA9IG1pc3NbZS5pZF07CiAgICAgIHZhciBuUHJvZyA9IG5SZXNwb3N0YXNFdmVudG8oZS5pZCk7CiAgICAgIHZhciBhY2FvID0gbQogICAgICAgID8gJzxzcGFuIGNsYXNzPSJyZXMiPicrbS5hY2VydG9zKycvJyttLnRvdGFsKycgwrcgKyAnKyhQVF9ESUFfUElTTyArIE1hdGgucm91bmQoUFRfRElBX0FDRVJUT1MqbS5hY2VydG9zL20udG90YWwpKSsnIHB0czwvc3Bhbj4nKwogICAgICAgICAgJzxidXR0b24gY2xhc3M9ImJ0biBidG4tZ2hvc3QgYnRuLXNtIiBkYXRhLXF1aXo9IicrZS5pZCsnIj5SZXZlcjwvYnV0dG9uPicKICAgICAgICA6ICc8c3BhbiBjbGFzcz0icmVzIiBzdHlsZT0iY29sb3I6dmFyKC0tYW1iZXIpIj5hdMOpICcrZm10UHRzKHB0c1Bvck1pc3NhbykrJyBwdHM8L3NwYW4+JysKICAgICAgICAgIChxdWl6RG9FdmVudG8oZSkubGVuZ3RoCiAgICAgICAgICAgID8gJzxidXR0b24gY2xhc3M9ImJ0biBidG4tZ2hvc3QgYnRuLXNtIiBkYXRhLXF1aXo9IicrZS5pZCsnIj4nKyhuUHJvZz8gJ0NvbnRpbnVhciAoJytuUHJvZysnIGRlICcrcXVpekRvRXZlbnRvKGUpLmxlbmd0aCsnKScgOiAobW9kb1ByZXZpZXcoKSA\/ICdSZXNvbHZlcicgOiAnUmVzb2x2ZXIgKGF0cmFzYWRhcyknKSkrJzwvYnV0dG9uPicKICAgICAgICAgICAgOiAnPHNwYW4gY2xhc3M9InJlcyIgc3R5bGU9ImNvbG9yOnZhcigtLWluay1tdXRlKSI+RW0gcHJlcGFyYcOnw6NvPC9zcGFuPicpOwogICAgICByZXR1cm4gJzxkaXYgY2xhc3M9Im1yb3cnKyhtPycgZG9uZSc6JycpKyciPjxkaXYgY2xhc3M9ImRhdGEiPicrZG0uZCsnPHNtYWxsPicrZG0ubSsnPC9zbWFsbD48L2Rpdj4nKwogICAgICAgICc8ZGl2IGNsYXNzPSJ0Ij4nK2VzYyhlLnRpdHVsbykrJzwvZGl2PicrYWNhbysnPC9kaXY+JzsKICAgIH0KCiAgICAvLyAxKSBNaXNzw6NvIGRlIGhvamU6IGNhcmQgaGVybwogICAgaWYgKCFsaWJlcmFkYXMubGVuZ3RoKSB7CiAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9ImNhcmQgbG9ja2VkLWNhcmQiPjxwPkFzIHF1ZXN0w7VlcyBhYnJlbSBqdW50byBjb20gYSBwcmltZWlyYSBhdWxhIGRhIGpvcm5hZGEuPC9wPjwvZGl2Pic7CiAgICB9IGVsc2UgaWYgKGRlSG9qZS5sZW5ndGgpIHsKICAgICAgZGVIb2plLmZvckVhY2goZnVuY3Rpb24oZSl7CiAgICAgICAgdmFyIG0gPSBtaXNzW2UuaWRdOwogICAgICAgIHZhciBwSXNvID0gZS5kYXRhLnNwbGl0KCctJyk7CiAgICAgICAgdmFyIGRhdGFMYWJlbCA9IHBhcnNlSW50KHBJc29bMl0sMTApKycgZGUgJytNRVNFU19GVUxMW3BhcnNlSW50KHBJc29bMV0sMTApLTFdOwogICAgICAgIHZhciB0aHVtYiA9IGUueXQKICAgICAgICAgID8gJzxpbWcgc3JjPSInK3l0VGh1bWIoZS55dCkrJyIgYWx0PSIiIGxvYWRpbmc9ImxhenkiIG9uZXJyb3I9InRoaXMucmVtb3ZlKCkiPicKICAgICAgICAgIDogJzxkaXYgY2xhc3M9ImZhbGwiPjxzdmcgd2lkdGg9IjQ0IiBoZWlnaHQ9IjQ0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjEuNiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIj48Y2lyY2xlIGN4PSI5IiBjeT0iMTAiIHI9IjIuMiIvPjxjaXJjbGUgY3g9IjE1IiBjeT0iMTAiIHI9IjIuMiIvPjxwYXRoIGQ9Ik00IDIwYzAtNiAyLTEzIDgtMTNzOCA3IDggMTMiLz48cGF0aCBkPSJNOSA0bDMgMiAzLTIiLz48L3N2Zz48L2Rpdj4nOwogICAgICAgIGh0bWwgKz0gJzxhcnRpY2xlIGNsYXNzPSJjYXJkIGhlcm8tbWlzc2FvJysobT8nIGRvbmUnOicnKSsnIj4nKwogICAgICAgICAgJzxkaXYgY2xhc3M9ImV2LXRodW1iIj4nK3RodW1iKyc8c3BhbiBjbGFzcz0iZXYtYmFkZ2UiPicrcGxheSsnIFF1ZXN0w7VlcyBkZSBob2plPC9zcGFuPjwvZGl2PicrCiAgICAgICAgICAnPGRpdiBjbGFzcz0iaG0tYm9keSI+JysKICAgICAgICAgICc8ZGl2IGNsYXNzPSJobS1raWNrZXIiPicrKG0\/J1F1ZXN0w7VlcyBkZSBob2plIHJlc29sdmlkYXMnOidRdWVzdMO1ZXMgZGUgaG9qZScpKycgwrcgJytkYXRhTGFiZWwrJzwvZGl2PicrCiAgICAgICAgICAnPGgzPicrZXNjKGUudGl0dWxvKSsnPC9oMz4nKwogICAgICAgICAgKG0KICAgICAgICAgICAgPyAnPHAgY2xhc3M9ImhtLW5vdGUiPlZvY8OqIGZleiA8YiBzdHlsZT0iY29sb3I6dmFyKC0tZ3JlZW4pIj4nK20uYWNlcnRvcysnIGRlICcrbS50b3RhbCsnPC9iPiBlIHNvbW91IDxiIHN0eWxlPSJjb2xvcjp2YXIoLS1ncmVlbikiPicrKFBUX0RJQV9QSVNPICsgTWF0aC5yb3VuZChQVF9ESUFfQUNFUlRPUyptLmFjZXJ0b3MvbS50b3RhbCkpKycgcHRzPC9iPi4gVm9sdGUgYW1hbmjDoyBwYXJhIGFzIHByw7N4aW1hcy48L3A+JysKICAgICAgICAgICAgICAnPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1naG9zdCBidG4tc20iIGRhdGEtcXVpej0iJytlLmlkKyciPlJldmVyIGdhYmFyaXRvPC9idXR0b24+JwogICAgICAgICAgICA6IChmdW5jdGlvbigpewogICAgICAgICAgICAgICAgdmFyIG5xID0gcXVpekRvRXZlbnRvKGUpLmxlbmd0aDsKICAgICAgICAgICAgICAgIHZhciBuUHJvZyA9IG5SZXNwb3N0YXNFdmVudG8oZS5pZCk7CiAgICAgICAgICAgICAgICByZXR1cm4gJzxwIGNsYXNzPSJobS1ub3RlIj4nK25xKycgcXVlc3TDtWVzIG5vIHBhZHLDo28gZGEgc3VhIHByb3ZhLCBjb3JyZcOnw6NvIGltZWRpYXRhIHF1ZXN0w6NvIGEgcXVlc3TDo28uIENvbmNsdWlyIG8gZGlhIGdhcmFudGUgPGIgc3R5bGU9ImNvbG9yOnZhcigtLWFtYmVyKSI+JytmbXRQdHMoMC40KnB0c1Bvck1pc3NhbykrJyBwdHM8L2I+IGUgb3MgYWNlcnRvcyBjb21wbGV0YW0gYXTDqSA8YiBzdHlsZT0iY29sb3I6dmFyKC0tYW1iZXIpIj4nK2ZtdFB0cyhwdHNQb3JNaXNzYW8pKyc8L2I+LjwvcD4nKwogICAgICAgICAgICAgICAgICAobnEKICAgICAgICAgICAgICAgICAgICA\/ICc8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWFtYmVyIiBkYXRhLXF1aXo9IicrZS5pZCsnIj4nKyhuUHJvZz8gJ0NvbnRpbnVhciBkZSBvbmRlIHBhcm91ICgnK25Qcm9nKycgZGUgJytucSsnKScgOiAnUmVzb2x2ZXIgYXMgcXVlc3TDtWVzIGRlIGhvamUnKSsnPC9idXR0b24+JwogICAgICAgICAgICAgICAgICAgIDogJzxzcGFuIGNsYXNzPSJzdGF0ZS10YWcgc3RhdGUtd2FpdCI+UXVlc3TDtWVzIGRlc3RlIGRpYSBlbSBwcmVwYXJhw6fDo288L3NwYW4+Jyk7CiAgICAgICAgICAgICAgfSkoKSkrCiAgICAgICAgICAnPC9kaXY+PC9hcnRpY2xlPic7CiAgICAgIH0pOwogICAgfSBlbHNlIHsKICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz0iZGF5LWVtcHR5Ij5Ib2plIG7Do28gdGVtIHF1ZXN0w7VlcyBub3Zhcy4gJysoYXRyYXNhZGFzLmxlbmd0aD8nQXByb3ZlaXRlIHBhcmEgcmVjdXBlcmFyIGFzIHBlbmRlbnRlcyBhYmFpeG8uJzonQm9tIGRlc2NhbnNvLCBhIGpvcm5hZGEgY29udGludWEgYW1hbmjDoy4nKSsnPC9kaXY+JzsKICAgIH0KCiAgICAvLyAyKSBBdHJhc2FkYXM6IGxpc3RhIGRlIHJlY3VwZXJhw6fDo28KICAgIGlmIChhdHJhc2FkYXMubGVuZ3RoKSB7CiAgICAgIGh0bWwgKz0gbW9kb1ByZXZpZXcoKQogICAgICAgID8gJzxkaXYgY2xhc3M9InNlYy1oIj5Ub2RvcyBvcyBkaWFzIGxpYmVyYWRvcyA8c3BhbiBjbGFzcz0iY250Ij4nK2F0cmFzYWRhcy5sZW5ndGgrJyBwYXJhIHZhbGlkYXI8L3NwYW4+PC9kaXY+JwogICAgICAgIDogJzxkaXYgY2xhc3M9InNlYy1oIj5SZWN1cGVyZSBwb250b3MgPHNwYW4gY2xhc3M9ImNudCI+JythdHJhc2FkYXMubGVuZ3RoKycgcGVuZGVudGUnKyhhdHJhc2FkYXMubGVuZ3RoPjE\/J3MnOicnKSsnPC9zcGFuPjwvZGl2Pic7CiAgICAgIGF0cmFzYWRhcy5mb3JFYWNoKGZ1bmN0aW9uKGUpeyBodG1sICs9IG1yb3coZSk7IH0pOwogICAgfQoKICAgIC8vIDMpIEN1bXByaWRhczogaGlzdMOzcmljbyBkaXNjcmV0bwogICAgaWYgKGN1bXByaWRhcy5sZW5ndGgpIHsKICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz0ic2VjLWgiPkN1bXByaWRhcyA8c3BhbiBjbGFzcz0iY250IGciPicrY3VtcHJpZGFzLmxlbmd0aCsnPC9zcGFuPjwvZGl2Pic7CiAgICAgIGN1bXByaWRhcy5mb3JFYWNoKGZ1bmN0aW9uKGUpeyBodG1sICs9IG1yb3coZSk7IH0pOwogICAgfQoKICAgICQoJyNtYWluJykuaW5uZXJIVE1MID0gaHRtbDsKICAgICQkKCdbZGF0YS1xdWl6XScpLmZvckVhY2goZnVuY3Rpb24oYil7CiAgICAgIGIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpeyByZW5kZXJRdWl6KGIuZGF0YXNldC5xdWl6KTsgfSk7CiAgICB9KTsKICB9CgogIGZ1bmN0aW9uIHJlbmRlclF1aXooZXZJZCl7CiAgICB2YXIgZSA9IGouZXZlbnRvcy5maW5kKGZ1bmN0aW9uKHgpeyByZXR1cm4geC5pZCA9PT0gZXZJZDsgfSk7CiAgICB2YXIgcXMgPSBxdWl6RG9FdmVudG8oZSk7CiAgICBpZiAoIXFzLmxlbmd0aCkgewogICAgICAvLyBkaWEgYWluZGEgc2VtIHF1ZXN0w7VlcyBjYXJyZWdhZGFzOiBlc3RhZG8gaW5mb3JtYXRpdm8sIG51bmNhIHRlbGEgbW9ydGEKICAgICAgJCgnI21haW4nKS5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz0icGFnZS1oZWFkIj48ZGl2PicrCiAgICAgICAgJzxidXR0b24gY2xhc3M9ImJ0biBidG4tZ2hvc3QgYnRuLXNtIiBpZD0iYnRuVm9sdGFyIiBzdHlsZT0ibWFyZ2luLWJvdHRvbToxNnB4Ij5Wb2x0YXIgw6BzIHF1ZXN0w7VlczwvYnV0dG9uPicrCiAgICAgICAgJzxzcGFuIGNsYXNzPSJraWNrZXIiPlF1ZXN0w7VlcyBkbyBkaWE8L3NwYW4+PGgxIHN0eWxlPSJmb250LXNpemU6MjJweCI+Jytlc2MoZS50aXR1bG8pKyc8L2gxPjwvZGl2PjwvZGl2PicrCiAgICAgICAgJzxkaXYgY2xhc3M9ImNhcmQgbG9ja2VkLWNhcmQiPjxoMyBzdHlsZT0ibWFyZ2luLWJvdHRvbTo4cHgiPlF1ZXN0w7VlcyBlbSBwcmVwYXJhw6fDo288L2gzPicrCiAgICAgICAgJzxwPkFzIHF1ZXN0w7VlcyBkZXN0ZSBkaWEgZXN0w6NvIHNlbmRvIGZpbmFsaXphZGFzIHBlbG9zIHByb2Zlc3NvcmVzIGUgYXBhcmVjZW0gYXF1aSBhbnRlcyBkYSBhdWxhLiBFbnF1YW50byBpc3NvLCByZXNvbHZhIG9zIGRpYXMgasOhIGxpYmVyYWRvcy48L3A+PC9kaXY+JzsKICAgICAgJCgnI2J0blZvbHRhcicpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgcmVuZGVyUXVlc3RvZXMpOwogICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIC8vIFBST0RVw4fDg086IG8gcHJvZ3Jlc3NvIMOpIG8gY29uanVudG8gZGUgcmVzcG9zdGFzIErDgSBHUkFWQURBUyBubyBzZXJ2aWRvcgogICAgLy8gKENBQ0hFLnJlc3Bvc3RhcywgcG9yIHF1ZXN0YW9faWQpIOKAlCB2YWxlIGVtIHF1YWxxdWVyIGFwYXJlbGhvLiBPIGdhYmFyaXRvCiAgICAvLyBlIG8gY29tZW50w6FyaW8gc8OzIGV4aXN0ZW0gbm8gY2xpZW50ZSBERVBPSVMgZGUgcmVzcG9uZGVyIChzZWdyZWRvIG5vIGJhbmNvKS4KICAgIGZ1bmN0aW9uIHJlc3AoaSl7IHJldHVybiBxc1tpXSA\/IENBQ0hFLnJlc3Bvc3Rhc1txc1tpXS5pZF0gOiB1bmRlZmluZWQ7IH0KICAgIGZ1bmN0aW9uIG5SZXNwKCl7IHZhciBuID0gMDsgcXMuZm9yRWFjaChmdW5jdGlvbihfLCBpKXsgaWYgKHJlc3AoaSkpIG4rKzsgfSk7IHJldHVybiBuOyB9CiAgICBmdW5jdGlvbiBhY2VydG9zKCl7IHZhciBuID0gMDsgcXMuZm9yRWFjaChmdW5jdGlvbihfLCBpKXsgdmFyIHIgPSByZXNwKGkpOyBpZiAociAmJiByLmFjZXJ0b3UpIG4rKzsgfSk7IHJldHVybiBuOyB9CiAgICBmdW5jdGlvbiBjb21wbGV0bygpeyByZXR1cm4gcXMubGVuZ3RoID4gMCAmJiBuUmVzcCgpID49IHFzLmxlbmd0aDsgfQogICAgZnVuY3Rpb24gbGV0cmFMYWJlbChxLCB2KXsgcmV0dXJuIHEuYWx0cyA\/IHYgOiAodiA9PT0gJ0MnID8gJ0NlcnRvJyA6ICdFcnJhZG8nKTsgfQoKICAgIHZhciBhdHVhbCA9IDA7CiAgICB3aGlsZSAoYXR1YWwgPCBxcy5sZW5ndGggJiYgcmVzcChhdHVhbCkpIGF0dWFsKys7CiAgICBpZiAoYXR1YWwgPj0gcXMubGVuZ3RoKSBhdHVhbCA9IDA7CgogICAgZnVuY3Rpb24gY29tZW50YXJpb0hUTUwoaSl7CiAgICAgIHZhciBxID0gcXNbaV0sIHIgPSByZXNwKGkpOwogICAgICBpZiAoIXIgfHwgIXIuY29tZW50YXJpbykgcmV0dXJuICcnOwogICAgICByZXR1cm4gJzxkZXRhaWxzIGNsYXNzPSJxdWl6LWNvbWVudCI+PHN1bW1hcnk+R2FiYXJpdG86ICcrbGV0cmFMYWJlbChxLCByLmNvcnJldGEpKycgwrcgVmVyIGNvbWVudMOhcmlvPC9zdW1tYXJ5PicrCiAgICAgICAgJzxkaXYgY2xhc3M9ImNib2R5Ij4nK21pZGlhSFRNTChyLmNvbWVudGFyaW8pKyc8L2Rpdj48L2RldGFpbHM+JzsKICAgIH0KCiAgICBmdW5jdGlvbiBuYXZIVE1MKCl7CiAgICAgIHJldHVybiAnPGRpdiBjbGFzcz0icW5hdiI+Jytxcy5tYXAoZnVuY3Rpb24ocSwgaSl7CiAgICAgICAgdmFyIGNscyA9ICdxbicgKyAoaSA9PT0gYXR1YWwgPyAnIGN1cicgOiAnJyk7CiAgICAgICAgdmFyIHIgPSByZXNwKGkpOwogICAgICAgIGlmIChyKSBjbHMgKz0gci5hY2VydG91ID8gJyBvaycgOiAnIGVycic7CiAgICAgICAgcmV0dXJuICc8YnV0dG9uIGNsYXNzPSInK2NscysnIiBkYXRhLW5xPSInK2krJyIgYXJpYS1sYWJlbD0iSXIgcGFyYSBhIHF1ZXN0w6NvICcrKGkrMSkrJyI+JysoaSsxKSsnPC9idXR0b24+JzsKICAgICAgfSkuam9pbignJykrJzwvZGl2Pic7CiAgICB9CgogICAgZnVuY3Rpb24gcmVzdW1vSFRNTCgpewogICAgICB2YXIgYWMgPSBhY2VydG9zKCksIHRvdCA9IHFzLmxlbmd0aDsKICAgICAgdmFyIHB0cyA9IFBUX0RJQV9QSVNPICsgTWF0aC5yb3VuZChQVF9ESUFfQUNFUlRPUyAqIGFjIC8gdG90KTsKICAgICAgcmV0dXJuICc8ZGl2IGNsYXNzPSJxdWl6LXJlc3VsdCIgc3R5bGU9Im1hcmdpbi1ib3R0b206MjBweCI+UmVzb2x2aWRvOiA8Yj4nK2FjKycgZGUgJyt0b3QrJzwvYj4gwrcgPGI+JytmbXRQdHMocHRzKSsnIHB0czwvYj4gbmEgY2xhc3NpZmljYcOnw6NvLiAnKwogICAgICAgICdObyBtYXBhOiB2ZXJkZSDDqSBvIGdhYmFyaXRvLCB2ZXJtZWxobyDDqSBvbmRlIHZvY8OqIGVycm91LjwvZGl2Pic7CiAgICB9CgogICAgZnVuY3Rpb24gcXVlc3Rhb0hUTUwoaSl7CiAgICAgIHZhciBxID0gcXNbaV0sIHIgPSByZXNwKGkpOwogICAgICB2YXIgYnRuID0gZnVuY3Rpb24odiwgcm90dWxvLCBsdCl7CiAgICAgICAgdmFyIGNscyA9ICcnOwogICAgICAgIGlmIChyKSB7CiAgICAgICAgICBpZiAodiA9PT0gci5jb3JyZXRhKSBjbHMgPSAnIGNsYXNzPSJoaXQiJzsKICAgICAgICAgIGVsc2UgaWYgKHYgPT09IHIubGV0cmEpIGNscyA9ICcgY2xhc3M9ImVycmFkbyInOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJzxidXR0b24gdHlwZT0iYnV0dG9uIicrY2xzKycgZGF0YS12PSInK3YrJyInKyhyID8gJyBkaXNhYmxlZCcgOiAnJykrJz4nKwogICAgICAgICAgKGx0ID8gJzxiIGNsYXNzPSJsdCI+JytsdCsnPC9iPjxzcGFuPicrZXNjKHJvdHVsbykrJzwvc3Bhbj4nIDogcm90dWxvKSsnPC9idXR0b24+JzsKICAgICAgfTsKICAgICAgdmFyIG9wdHMgPSBxLmFsdHMKICAgICAgICA\/IHEuYWx0cy5tYXAoZnVuY3Rpb24oYSl7IHJldHVybiBidG4oYS5sLCBhLnQsIGEubCk7IH0pLmpvaW4oJycpCiAgICAgICAgOiBidG4oJ0MnLCAnQ2VydG8nKSArIGJ0bignRScsICdFcnJhZG8nKTsKICAgICAgcmV0dXJuICc8ZGl2IGNsYXNzPSJxdWl6LXEiIGRhdGEtcT0iJytpKyciPjxkaXYgY2xhc3M9InFoZWFkIj5RdWVzdMOjbyAnKyhpKzEpKycgZGUgJytxcy5sZW5ndGgrJzwvZGl2PicrCiAgICAgICAgJzxwIGNsYXNzPSJlbnVuIj4nK21pZGlhSFRNTChxLnEpKyc8L3A+JysKICAgICAgICAnPGRpdiBjbGFzcz0icXVpei1vcHRzJysocS5hbHRzID8gJyBtdWx0JyA6ICcnKSsnIj4nK29wdHMrJzwvZGl2PicrCiAgICAgICAgY29tZW50YXJpb0hUTUwoaSkrCiAgICAgICAgJzwvZGl2Pic7CiAgICB9CgogICAgZnVuY3Rpb24gcHJveEluZGljZSgpewogICAgICBpZiAoIWNvbXBsZXRvKCkpIHsKICAgICAgICBmb3IgKHZhciBrID0gMTsgayA8PSBxcy5sZW5ndGg7IGsrKykgewogICAgICAgICAgdmFyIGkyID0gKGF0dWFsICsgaykgJSBxcy5sZW5ndGg7CiAgICAgICAgICBpZiAoIXJlc3AoaTIpKSByZXR1cm4gaTI7CiAgICAgICAgfQogICAgICAgIHJldHVybiAtMTsKICAgICAgfQogICAgICByZXR1cm4gYXR1YWwgKyAxIDwgcXMubGVuZ3RoID8gYXR1YWwgKyAxIDogLTE7CiAgICB9CgogICAgZnVuY3Rpb24gY3RybEhUTUwoKXsKICAgICAgdmFyIHByb3ggPSBwcm94SW5kaWNlKCk7CiAgICAgIHZhciBhYyA9IGFjZXJ0b3MoKTsKICAgICAgcmV0dXJuICc8ZGl2IGNsYXNzPSJxY3RybCI+JysKICAgICAgICAnPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1naG9zdCBidG4tc20iIGlkPSJxQW50IicrKGF0dWFsID09PSAwID8gJyBkaXNhYmxlZCcgOiAnJykrJz5BbnRlcmlvcjwvYnV0dG9uPicrCiAgICAgICAgJzxzcGFuIGNsYXNzPSJxbGluZSI+PGI+JytuUmVzcCgpKyc8L2I+IGRlICcrcXMubGVuZ3RoKycgcmVzcG9uZGlkYXMgwrcgPGIgY2xhc3M9Im9rIj4nK2FjKyc8L2I+ICcrKGFjID09PSAxID8gJ2FjZXJ0bycgOiAnYWNlcnRvcycpKyc8L3NwYW4+JysKICAgICAgICAocHJveCA+PSAwCiAgICAgICAgICA\/ICc8YnV0dG9uIGNsYXNzPSJidG4gJysocmVzcChhdHVhbCkgPyAnYnRuLWFtYmVyJyA6ICdidG4tZ2hvc3QnKSsnIGJ0bi1zbSIgaWQ9InFQcm94Ij5QcsOzeGltYSBxdWVzdMOjbzwvYnV0dG9uPicKICAgICAgICAgIDogJzxzcGFuIHN0eWxlPSJ3aWR0aDo4OHB4Ij48L3NwYW4+JykrCiAgICAgICAgJzwvZGl2Pic7CiAgICB9CgogICAgZnVuY3Rpb24gcmVuZGVyKCl7CiAgICAgIHZhciBodG1sID0gJzxkaXYgY2xhc3M9InBhZ2UtaGVhZCI+PGRpdj4nKwogICAgICAgICc8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWdob3N0IGJ0bi1zbSIgaWQ9ImJ0blZvbHRhciIgc3R5bGU9Im1hcmdpbi1ib3R0b206MTZweCI+Vm9sdGFyIMOgcyBxdWVzdMO1ZXM8L2J1dHRvbj4nKwogICAgICAgICc8c3BhbiBjbGFzcz0ia2lja2VyIj5RdWVzdMO1ZXMgZG8gZGlhPC9zcGFuPjxoMSBzdHlsZT0iZm9udC1zaXplOjIycHgiPicrZXNjKGUudGl0dWxvKSsnPC9oMT4nKwogICAgICAgICc8cCBjbGFzcz0iZGVzYyI+VW1hIHF1ZXN0w6NvIHBvciB2ZXosIGNvbSBjb3JyZcOnw6NvIGltZWRpYXRhOiBhbyBtYXJjYXIsIGEgYWx0ZXJuYXRpdmEgdHJhdmEgZSBvIGdhYmFyaXRvIGFwYXJlY2UgY29tIG8gY29tZW50w6FyaW8gZG8gcHJvZmVzc29yLiBVc2UgbyBtYXBhIHBhcmEgbmF2ZWdhcjsgcG9kZSBzYWlyIGUgdm9sdGFyLCBvIHByb2dyZXNzbyBmaWNhIHNhbHZvIG5hIHN1YSBjb250YS48L3A+PC9kaXY+PC9kaXY+JzsKICAgICAgaWYgKGNvbXBsZXRvKCkpIGh0bWwgKz0gcmVzdW1vSFRNTCgpOwogICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJjYXJkIHF1aXotYm94Ij4nK25hdkhUTUwoKStxdWVzdGFvSFRNTChhdHVhbCkrY3RybEhUTUwoKSsnPC9kaXY+JzsKICAgICAgJCgnI21haW4nKS5pbm5lckhUTUwgPSBodG1sOwogICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7CgogICAgICAkKCcjYnRuVm9sdGFyJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCByZW5kZXJRdWVzdG9lcyk7CiAgICAgICQkKCcucW5hdiAucW4nKS5mb3JFYWNoKGZ1bmN0aW9uKGIpewogICAgICAgIGIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpeyBhdHVhbCA9ICtiLmRhdGFzZXQubnE7IHJlbmRlcigpOyB9KTsKICAgICAgfSk7CiAgICAgIHZhciBhbnQgPSAkKCcjcUFudCcpOwogICAgICBpZiAoYW50KSBhbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpeyBpZiAoYXR1YWwgPiAwKSB7IGF0dWFsLS07IHJlbmRlcigpOyB9IH0pOwogICAgICB2YXIgcHggPSAkKCcjcVByb3gnKTsKICAgICAgaWYgKHB4KSBweC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCl7CiAgICAgICAgdmFyIHAyID0gcHJveEluZGljZSgpOwogICAgICAgIGlmIChwMiA+PSAwKSB7IGF0dWFsID0gcDI7IHJlbmRlcigpOyB9CiAgICAgIH0pOwogICAgICBpZiAoIXJlc3AoYXR1YWwpKSB7CiAgICAgICAgJCQoJy5xdWl6LW9wdHMgYnV0dG9uJykuZm9yRWFjaChmdW5jdGlvbihiKXsKICAgICAgICAgIGIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpewogICAgICAgICAgICB2YXIgaSA9IGF0dWFsLCBxID0gcXNbaV07CiAgICAgICAgICAgICQkKCcucXVpei1vcHRzIGJ1dHRvbicpLmZvckVhY2goZnVuY3Rpb24oeCl7IHguZGlzYWJsZWQgPSB0cnVlOyB9KTsKICAgICAgICAgICAgc2JScGMoJ3Jlc3BvbmRlcl9xdWVzdGFvJywgeyBwX2NwZjogQ0FDSEUudXNlci5jcGYsIHBfcXVlc3RhbzogcS5pZCwgcF9sZXRyYTogYi5kYXRhc2V0LnYgfSkKICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbihycil7CiAgICAgICAgICAgICAgICBpZiAocnIuc3RhdHVzID09PSAnb2snKSB7CiAgICAgICAgICAgICAgICAgIENBQ0hFLnJlc3Bvc3Rhc1txLmlkXSA9IHsgZXZlbnRvX2lkOiBldklkLCBsZXRyYTogYi5kYXRhc2V0LnYsCiAgICAgICAgICAgICAgICAgICAgYWNlcnRvdTogcnIuYWNlcnRvdSwgY29ycmV0YTogcnIuY29ycmV0YSwgY29tZW50YXJpbzogcnIuY29tZW50YXJpbyB9OwogICAgICAgICAgICAgICAgICBpZiAoY29tcGxldG8oKSkgdG9hc3QoJ1F1ZXN0w7VlcyBkbyBkaWEgY29uY2x1w61kYXM6ICcrYWNlcnRvcygpKycvJytxcy5sZW5ndGgpOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyci5zdGF0dXMgPT09ICdqYV9yZXNwb25kaWRhJykgewogICAgICAgICAgICAgICAgICB0b2FzdCgnRXN0YSBxdWVzdMOjbyBqw6EgZm9pIHJlc3BvbmRpZGEgZW0gb3V0cm8gYWNlc3NvLiBBdHVhbGl6YW5kb+KApicpOwogICAgICAgICAgICAgICAgICBoaWRyYXRhcigpLnRoZW4ocmVuZGVyKTsKICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyci5zdGF0dXMgPT09ICdldmVudG9fZnV0dXJvJykgewogICAgICAgICAgICAgICAgICB0b2FzdCgnQXMgcXVlc3TDtWVzIGRlc3RlIGRpYSBhYnJlbSBuYSBkYXRhIGRhIGF1bGEuJyk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICB0b2FzdCgnTsOjbyBmb2kgcG9zc8OtdmVsIHJlZ2lzdHJhci4gVGVudGUgbm92YW1lbnRlLicpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmVuZGVyKCk7CiAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24oKXsgdG9hc3QoJ1NlbSBjb25leMOjby4gQSByZXNwb3N0YSBuw6NvIGZvaSByZWdpc3RyYWRhLicpOyByZW5kZXIoKTsgfSk7CiAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgICAgfQogICAgfQoKICAgIHJlbmRlcigpOwogIH0KCiAgLyogLS0tLS0tLS0tLSBTSU1VTEFETyBGSU5BTCDCtyBQUk9EVcOHw4NPIChwcm92YSDDum5pY2EsIHNlcnZpZG9yIG1hbmRhKSAtLS0tLS0tLS0tICovCiAgLy8gRXNwZWxobyB2aXN1YWwgZGEgamFuZWxhIG9maWNpYWwgKG8gc2Vydmlkb3IgUkVWQUxJREEgdHVkbyBlbSBzaW11bGFkb19jb25maWcpCiAgdmFyIFNJTV9KQU5FTEEgPSB7IGRhdGE6ICcyMDI2LTA5LTA2JywgYWJyZTogJzE0OjAwJywgZmVjaGE6ICcxOTowMCcsIGR1cmFjYW9NaW46IDMwMCB9OwogIGZ1bmN0aW9uIHNpbUFnb3JhQlJUKCl7IHJldHVybiBuZXcgRGF0ZShuZXcgRGF0ZSgpLnRvTG9jYWxlU3RyaW5nKCdlbi1VUycsIHsgdGltZVpvbmU6ICdBbWVyaWNhL1Nhb19QYXVsbycgfSkpOyB9CiAgZnVuY3Rpb24gc2ltQWJyZVRzKCl7IHJldHVybiBuZXcgRGF0ZShTSU1fSkFORUxBLmRhdGEgKyAnVCcgKyBTSU1fSkFORUxBLmFicmUgKyAnOjAwLTAzOjAwJykuZ2V0VGltZSgpOyB9CiAgZnVuY3Rpb24gc2ltRmVjaGFUcygpeyByZXR1cm4gbmV3IERhdGUoU0lNX0pBTkVMQS5kYXRhICsgJ1QnICsgU0lNX0pBTkVMQS5mZWNoYSArICc6MDAtMDM6MDAnKS5nZXRUaW1lKCk7IH0KICBmdW5jdGlvbiBzaW1HYWJhcml0b0xpYmVyYWRvKCl7IHJldHVybiBtb2RvUHJldmlldygpIHx8IERhdGUubm93KCkgPiBzaW1GZWNoYVRzKCk7IH0KICB2YXIgSUNPX0xPQ0sgPSAnPHN2ZyB3aWR0aD0iMTUiIGhlaWdodD0iMTUiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMi4yIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjotMnB4Ij48cmVjdCB4PSI1IiB5PSIxMSIgd2lkdGg9IjE0IiBoZWlnaHQ9IjEwIiByeD0iMiIvPjxwYXRoIGQ9Ik04IDExVjdhNCA0IDAgMDE4IDB2NCIvPjwvc3ZnPic7CgogIGZ1bmN0aW9uIHJlbmRlclNpbXVsYWRvKCl7CiAgICB2YXIgcCA9IGNhbGNQb250b3ModXNlcik7CiAgICB2YXIgY2ZnID0gU0lNX0NGR1t1c2VyLnByb3ZhXSB8fCBTSU1fQ0ZHLmVuYW1lZDsKICAgIHZhciBldlNpbSA9IGouZXZlbnRvcy5maW5kKGZ1bmN0aW9uKGUpeyByZXR1cm4gZS5pZCA9PT0gai5zaW11bGFkb0lkOyB9KTsKICAgIHZhciBodG1sID0gcGFnZUhlYWQoJ1NpbXVsYWRvIEZpbmFsIMK3ICcgKyBkYXRhQlIoZXZTaW0uZGF0YSksICdTaW11bGFkbyBGaW5hbCcsCiAgICAgICdQcm92YSDDum5pY2EgbmEgcGxhdGFmb3JtYTogNyBwdHMgcG9yIGFjZXJ0bywgYXTDqSA3MDAuIEdhYmFyaXRvIGNvbWVudGFkbyBhcMOzcyBvIGVuY2VycmFtZW50by4nLAogICAgICAnNzAwIHB0cyBlbSBqb2dvJyk7CgogICAgdmFyIGNoaXBzID0gJzxkaXYgY2xhc3M9InNpbS1jaGlwcyI+JysKICAgICAgJzxzcGFuPicrY2ZnLnF1ZXN0b2VzKycgcXVlc3TDtWVzPC9zcGFuPicrCiAgICAgICc8c3Bhbj40IGFsdGVybmF0aXZhczwvc3Bhbj4nKwogICAgICAnPHNwYW4+cXVlc3TDtWVzIGluw6lkaXRhczwvc3Bhbj4nKwogICAgICAnPHNwYW4+cHJvZmVzc29yZXMgZXNwZWNpYWxpc3Rhczwvc3Bhbj48L2Rpdj4nOwoKICAgIGlmIChDQUNIRS5zaW1SZXMpIHsKICAgICAgdmFyIHJlcyA9IENBQ0hFLnNpbVJlczsKICAgICAgaWYgKHNpbUdhYmFyaXRvTGliZXJhZG8oKSkgewogICAgICAgIHZhciBub3RhID0gTWF0aC5yb3VuZCgxMDAgKiByZXMuYWNlcnRvcyAvIE1hdGgubWF4KDEsIHJlcy50b3RhbCkpOwogICAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9ImNhcmQiIHN0eWxlPSJwYWRkaW5nOjQwcHg7dGV4dC1hbGlnbjpjZW50ZXIiPicrCiAgICAgICAgICAnPGRpdiBjbGFzcz0ia2lja2VyIGNlbnRlciIgc3R5bGU9Im1hcmdpbi1ib3R0b206MTRweCI+U2ltdWxhZG8gY29uY2x1w61kbzwvZGl2PicrCiAgICAgICAgICAnPGRpdiBzdHlsZT0iZm9udC1zaXplOjU0cHg7Zm9udC13ZWlnaHQ6ODAwO2NvbG9yOnZhcigtLWFtYmVyKSI+Jytub3RhKyclPC9kaXY+JysKICAgICAgICAgICc8cCBzdHlsZT0iY29sb3I6dmFyKC0taW5rLWRpbSk7bWFyZ2luOjhweCAwIDRweCI+JytyZXMuYWNlcnRvcysnIGRlICcrcmVzLnRvdGFsKycgcXVlc3TDtWVzIMK3IGFjZXJ0b3Mgbm8gU2ltdWxhZG8gRmluYWw8L3A+JysKICAgICAgICAgICc8cCBzdHlsZT0iZm9udC13ZWlnaHQ6NzAwO2NvbG9yOnZhcigtLWdyZWVuKSI+KyAnK2ZtdFB0cyhwLnNpbXVsYWRvKSsnIHB0cyBuYSBjbGFzc2lmaWNhw6fDo288L3A+JysKICAgICAgICAgICc8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWFtYmVyIiBpZD0iYnRuR2FiYXJpdG8iIHN0eWxlPSJtYXJnaW4tdG9wOjIwcHgiPlZlciBnYWJhcml0byBjb21lbnRhZG88L2J1dHRvbj4nKwogICAgICAgICAgJzwvZGl2Pic7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gcmVzdWx0YWRvIFJFVElETyBhdMOpIG8gZW5jZXJyYW1lbnRvOiBzw7MgYSBjb25maXJtYcOnw6NvIGRvIHByZWVuY2hpbWVudG8KICAgICAgICB2YXIgcHJlZW5jaGlkYXMgPSBPYmplY3Qua2V5cyhyZXMucmVzcG9zdGFzIHx8IHt9KS5sZW5ndGg7CiAgICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz0iY2FyZCIgc3R5bGU9InBhZGRpbmc6NDBweDt0ZXh0LWFsaWduOmNlbnRlciI+JysKICAgICAgICAgICc8ZGl2IGNsYXNzPSJraWNrZXIgY2VudGVyIiBzdHlsZT0ibWFyZ2luLWJvdHRvbToxNHB4Ij5Qcm92YSBlbnZpYWRhPC9kaXY+JysKICAgICAgICAgICc8cCBzdHlsZT0iZm9udC1zaXplOjE3cHg7Zm9udC13ZWlnaHQ6NzAwO21hcmdpbi1ib3R0b206NnB4Ij5TZXUgU2ltdWxhZG8gRmluYWwgZm9pIHJlZ2lzdHJhZG8uPC9wPicrCiAgICAgICAgICAnPHAgc3R5bGU9ImNvbG9yOnZhcigtLWluay1kaW0pIj5Wb2PDqiBwcmVlbmNoZXUgPGI+JytwcmVlbmNoaWRhcysnIGRlICcrcmVzLnRvdGFsKyc8L2I+IHF1ZXN0w7Vlcy48L3A+JysKICAgICAgICAgICc8cCBzdHlsZT0iY29sb3I6dmFyKC0taW5rLW11dGUpO2ZvbnQtc2l6ZToxM3B4O21hcmdpbi10b3A6MTZweCI+TyByZXN1bHRhZG8sIG9zIHBvbnRvcyBlIG8gZ2FiYXJpdG8gY29tZW50YWRvIHNlcsOjbyBsaWJlcmFkb3MgcGFyYSB0b2RvcyDDoHMgJytTSU1fSkFORUxBLmZlY2hhKycsIGFww7NzIG8gZW5jZXJyYW1lbnRvIGRhIHByb3ZhLjwvcD4nKwogICAgICAgICAgJzwvZGl2Pic7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIC8vIEpBTkVMQSBwb3IgREFUQSArIEhPUkEgcmVhaXMgKEJSVCk6IG8gYm90w6NvIHPDsyBkZXN0cmF2YSBlbSAwNi8wOSDDoHMgMTRoCiAgICAgIC8vIChwZWRpZG8gZG8gSWdvciAxMi8wOCk7IG8gc2Vydmlkb3IgcmV2YWxpZGEgZGUgcXVhbHF1ZXIgamVpdG8uCiAgICAgIHZhciBhZ29yYSA9IERhdGUubm93KCksIGFicmVUcyA9IHNpbUFicmVUcygpLCBmZWNoYVRzID0gc2ltRmVjaGFUcygpOwogICAgICB2YXIgcHJvZyA9IENBQ0hFLnNpbVByb2c7CiAgICAgIHZhciBhYmVydG8gPSBtb2RvUHJldmlldygpIHx8IChhZ29yYSA+PSBhYnJlVHMgJiYgYWdvcmEgPD0gZmVjaGFUcyk7CiAgICAgIHZhciBwSXNvID0gZXZTaW0uZGF0YS5zcGxpdCgnLScpOwogICAgICB2YXIgZGF0YUV4dGVuc28gPSBwYXJzZUludChwSXNvWzJdLDEwKSArICcgZGUgJyArIE1FU0VTX0ZVTExbcGFyc2VJbnQocElzb1sxXSwxMCktMV07CiAgICAgIC8vIGJsb2NvIGRlIERBVEEvSE9SQSBiZW0gY2xhcmEgZSBkZXN0YWNhZGEKICAgICAgdmFyIHF1YW5kbyA9ICc8ZGl2IGNsYXNzPSJzaW0tcXVhbmRvIj4nKwogICAgICAgICc8ZGl2IGNsYXNzPSJzcS1pY28iPicrSUNPX1BST1ZBKyc8L2Rpdj4nKwogICAgICAgICc8ZGl2IGNsYXNzPSJzcS10eHQiPjxkaXYgY2xhc3M9InNxLWxhYmVsIj5RdWFuZG8gYWNvbnRlY2U8L2Rpdj4nKwogICAgICAgICc8ZGl2IGNsYXNzPSJzcS1kaWEiPicrZGF0YUV4dGVuc28rJzwvZGl2PicrCiAgICAgICAgJzxkaXYgY2xhc3M9InNxLWhvcmEiPmRhcyAnK1NJTV9KQU5FTEEuYWJyZSsnIMOgcyAnK1NJTV9KQU5FTEEuZmVjaGErJyDCtyBob3LDoXJpbyBkZSBCcmFzw61saWE8L2Rpdj48L2Rpdj48L2Rpdj4nOwoKICAgICAgaWYgKCFtb2RvUHJldmlldygpICYmIGFnb3JhID4gZmVjaGFUcykgewogICAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9ImNhcmQgbG9ja2VkLWNhcmQiPicrcXVhbmRvKwogICAgICAgICAgJzxoMyBzdHlsZT0ibWFyZ2luOjIycHggMCA4cHgiPk8gcHJhem8gZG8gU2ltdWxhZG8gRmluYWwgZW5jZXJyb3U8L2gzPicrCiAgICAgICAgICAnPHA+QSBwcm92YSBmaWNvdSBkaXNwb27DrXZlbCBlbSAnK2RhdGFCUihldlNpbS5kYXRhKSsnLCBkYXMgJytTSU1fSkFORUxBLmFicmUrJyDDoHMgJytTSU1fSkFORUxBLmZlY2hhKycsIGUgbsOjbyBhY2VpdGEgZW52aW8gcmV0cm9hdGl2by4gQSBkaXNwdXRhIGNvbnRpbnVhOiBwcmVzZW7Dp2EgZSBxdWVzdMO1ZXMgc2VndWVtIHZhbGVuZG8gcG9udG9zLjwvcD48L2Rpdj4nOwogICAgICB9IGVsc2UgaWYgKCFhYmVydG8pIHsKICAgICAgICAvLyBBSU5EQSBOw4NPIEFCUklVIChhbnRlcyBkbyBkaWEgT1Ugbm8gZGlhIGFudGVzIGRhcyAxNGgpIOKGkiBib3TDo28gQkxPUVVFQURPCiAgICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz0iY2FyZCBsb2NrZWQtY2FyZCI+JytxdWFuZG8rCiAgICAgICAgICAnPHAgc3R5bGU9Im1hcmdpbi10b3A6MjBweCI+TyBTaW11bGFkbyBhY29udGVjZSBhcXVpIG5hIHBsYXRhZm9ybWEsIG5vIGV4YXRvIG1vZGVsbyBkYSBwcm92YSBvZmljaWFsLiBBdMOpIGzDoSwgZ2FyYW50YSBhIHN1YSBwcmVzZW7Dp2EgbmFzIGF1bGFzIGUgcmVzb2x2YSBhcyBxdWVzdMO1ZXMsIGdhcmFudGluZG8gbWFpcyBwb250b3MgbmEgc3VhIGNsYXNzaWZpY2HDp8Ojby48L3A+JysKICAgICAgICAgICc8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlciI+JytjaGlwcysnPC9kaXY+JysKICAgICAgICAgICc8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWFtYmVyIHNpbS1ibG9xdWVhZG8iIHR5cGU9ImJ1dHRvbiIgZGlzYWJsZWQgYXJpYS1kaXNhYmxlZD0idHJ1ZSI+JytJQ09fTE9DSysnIEFicmUgZW0gJytkYXRhQlIoZXZTaW0uZGF0YSkrJywgw6BzICcrU0lNX0pBTkVMQS5hYnJlKyc8L2J1dHRvbj4nKwogICAgICAgICAgJzwvZGl2Pic7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gQUJFUlRPIOKGkiBib3TDo28gYXRpdm8KICAgICAgICBodG1sICs9ICc8YXJ0aWNsZSBjbGFzcz0iY2FyZCBoZXJvLW1pc3NhbyIgc3R5bGU9ImdyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIiPjxkaXYgY2xhc3M9ImhtLWJvZHkiIHN0eWxlPSJwYWRkaW5nOjMwcHggMzRweCI+JysKICAgICAgICAgIHF1YW5kbysKICAgICAgICAgICc8aDMgc3R5bGU9Im1hcmdpbi10b3A6MThweCI+Jytlc2MoZXZTaW0udGl0dWxvKSsnPC9oMz4nKwogICAgICAgICAgY2hpcHMrCiAgICAgICAgICAnPHAgY2xhc3M9ImhtLW5vdGUiPicrKHByb2cKICAgICAgICAgICAgPyAnU2V1IGNyb27DtG1ldHJvIGVzdMOhIHJvZGFuZG8gbm8gc2Vydmlkb3IgZSBhcyByZXNwb3N0YXMgZXN0w6NvIHNhbHZhcy4gQ29udGludWUgZGUgb25kZSBwYXJvdS4nCiAgICAgICAgICAgIDogJ1Byb3ZhIMO6bmljYSBubyBtb2RlbG8gb2ZpY2lhbDogJytjZmcucXVlc3RvZXMrJyBxdWVzdMO1ZXMsICcrY2ZnLmR1cmFjYW9NaW4rJyBtaW51dG9zIGNvcnJpZG9zLCBlbmNlcnJhbWVudG8gw6BzICcrU0lNX0pBTkVMQS5mZWNoYSsnIHBhcmEgdG9kb3MuIFJlc2VydmUgbyB0ZW1wbyBhbnRlcyBkZSBpbmljaWFyLicpKyc8L3A+JysKICAgICAgICAgICc8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWFtYmVyIiBpZD0iYnRuUHJvdmEiPicrKHByb2cgPyAnQ29udGludWFyIHNpbXVsYWRvJyA6ICdJciBwYXJhIG8gc2ltdWxhZG8nKSsnPC9idXR0b24+JysKICAgICAgICAgICc8L2Rpdj48L2FydGljbGU+JzsKICAgICAgfQogICAgfQogICAgJCgnI21haW4nKS5pbm5lckhUTUwgPSBodG1sOwogICAgdmFyIGJwID0gJCgnI2J0blByb3ZhJyk7IGlmIChicCkgYnAuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCByZW5kZXJTaW11bGFkb0V4YW0pOwogICAgdmFyIGJnID0gJCgnI2J0bkdhYmFyaXRvJyk7IGlmIChiZykgYmcuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCByZW5kZXJTaW11bGFkb0dhYmFyaXRvKTsKICB9CgogIGZ1bmN0aW9uIHJlbmRlclNpbXVsYWRvRXhhbSgpewogICAgdmFyIGNmZyA9IFNJTV9DRkdbdXNlci5wcm92YV0gfHwgU0lNX0NGRy5lbmFtZWQ7CiAgICB2YXIgZXZTaW0gPSBqLmV2ZW50b3MuZmluZChmdW5jdGlvbihlKXsgcmV0dXJuIGUuaWQgPT09IGouc2ltdWxhZG9JZDsgfSk7CgogICAgLy8g4pSA4pSAIExPQkJZIChmYWlyLXBsYXkpIOKUgOKUgAogICAgaWYgKCFDQUNIRS5zaW1Qcm9nKSB7CiAgICAgIHZhciBodG1sID0gJzxkaXYgY2xhc3M9InBhZ2UtaGVhZCI+PGRpdj4nKwogICAgICAgICc8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWdob3N0IGJ0bi1zbSIgaWQ9ImJ0blZvbHRhciIgc3R5bGU9Im1hcmdpbi1ib3R0b206MTZweCI+Vm9sdGFyPC9idXR0b24+JysKICAgICAgICAnPHNwYW4gY2xhc3M9ImtpY2tlciI+U2ltdWxhZG8gRmluYWw8L3NwYW4+PGgxIHN0eWxlPSJmb250LXNpemU6MjJweCI+Jytlc2MoZXZTaW0udGl0dWxvKSsnPC9oMT48L2Rpdj48L2Rpdj4nOwogICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJjYXJkIiBzdHlsZT0icGFkZGluZzozMHB4IDM0cHgiPicrCiAgICAgICAgJzxkaXYgY2xhc3M9ImtpY2tlciIgc3R5bGU9Im1hcmdpbi1ib3R0b206MTRweCI+QW50ZXMgZGUgY29tZcOnYXI8L2Rpdj4nKwogICAgICAgICc8dWwgY2xhc3M9InNpbS1yZWdyYXMiPicrCiAgICAgICAgJzxsaT48Yj4nK2NmZy5xdWVzdG9lcysnIHF1ZXN0w7VlczwvYj4gZGUgbcO6bHRpcGxhIGVzY29saGEgKEEgYSBEKSwgJytTSU1fQVJFQVMubGVuZ3RoKycgZ3JhbmRlcyDDoXJlYXM8L2xpPicrCiAgICAgICAgJzxsaT48Yj4nK2NmZy5kdXJhY2FvTWluKycgbWludXRvczwvYj4gZGUgcHJvdmEsIHNlbSBwYXVzYXIgbyBjcm9uw7RtZXRybzwvbGk+JysKICAgICAgICAnPGxpPkEgcHJvdmEgZW5jZXJyYSDDoHMgPGI+JytTSU1fSkFORUxBLmZlY2hhKyc8L2I+IHBhcmEgdG9kb3M6IHF1ZW0gY29tZcOnYSBtYWlzIHRhcmRlIHRlbSBtZW5vcyB0ZW1wbzwvbGk+JysKICAgICAgICAnPGxpPjxiPlRlbnRhdGl2YSDDum5pY2E8L2I+LCBjb20gcmVzcG9zdGFzIHNhbHZhcyBhdXRvbWF0aWNhbWVudGUgbmEgc3VhIGNvbnRhPC9saT4nKwogICAgICAgICc8bGk+QW8gdGVybWluYXIsIHZvY8OqIHbDqiBzZXVzIGFjZXJ0b3M7IG8gPGI+Z2FiYXJpdG8gY29tZW50YWRvPC9iPiDDqSBsaWJlcmFkbyBwYXJhIHRvZG9zIGFww7NzIG8gZW5jZXJyYW1lbnRvPC9saT4nKwogICAgICAgICc8L3VsPicrCiAgICAgICAgJzxwIHN0eWxlPSJmb250LXNpemU6MTNweDtjb2xvcjp2YXIoLS1pbmstbXV0ZSk7bGluZS1oZWlnaHQ6MS42O21hcmdpbjoxNnB4IDAgNHB4Ij5BbyBpbmljaWFyLCB2b2PDqiBkZWNsYXJhIHF1ZSBmYXLDoSBhIHByb3ZhIDxiPnNlbSBhdXjDrWxpbyBleHRlcm5vPC9iPiAocGVzc29hcywgbWF0ZXJpYWlzIG91IGludGVsaWfDqm5jaWEgYXJ0aWZpY2lhbCkuIE9zIHJlZ2lzdHJvcyBkZSBpbsOtY2lvLCBlbnZpbyBlIHJlc3Bvc3RhcyBzw6NvIGF1ZGl0YWRvcyBwZWxhIG9yZ2FuaXphw6fDo28sIGUgYSBjb25zdGF0YcOnw6NvIGRlIGZyYXVkZSBsZXZhIMOgIGRlc2NsYXNzaWZpY2HDp8OjbyBkbyBBdG8gRmluYWwuPC9wPicrCiAgICAgICAgJzxidXR0b24gY2xhc3M9ImJ0biBidG4tYW1iZXIiIGlkPSJidG5JbmljaWFyIiBzdHlsZT0ibWFyZ2luLXRvcDoxNHB4Ij5MaSBlIGNvbmNvcmRvIMK3IEluaWNpYXIgc2ltdWxhZG88L2J1dHRvbj48L2Rpdj4nOwogICAgICAkKCcjbWFpbicpLmlubmVySFRNTCA9IGh0bWw7CiAgICAgICQoJyNidG5Wb2x0YXInKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHJlbmRlclNpbXVsYWRvKTsKICAgICAgJCgnI2J0bkluaWNpYXInKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCl7CiAgICAgICAgdmFyIGIgPSAkKCcjYnRuSW5pY2lhcicpOyBiLmRpc2FibGVkID0gdHJ1ZTsgYi50ZXh0Q29udGVudCA9ICdJbmljaWFuZG\/igKYnOwogICAgICAgIHNiUnBjKCdzaW11bGFkb19pbmljaWFyJywgeyBwX2NwZjogQ0FDSEUudXNlci5jcGYgfSkudGhlbihmdW5jdGlvbihyKXsKICAgICAgICAgIGlmIChyLnN0YXR1cyA9PT0gJ29rJykgewogICAgICAgICAgICBDQUNIRS5zaW1Qcm9nID0geyBpbmljaWFkb19lbTogci5pbmljaWFkb19lbSwgcmVzcG9zdGFzOiB7fSwgbWFyY2FkYXM6IFtdLAogICAgICAgICAgICAgIGZlY2hhX3RzOiBEYXRlLnBhcnNlKHIuZmVjaGFfdHMpLCBkdXJhY2FvX21pbjogci5kdXJhY2FvX21pbiwKICAgICAgICAgICAgICBza2V3OiBEYXRlLnBhcnNlKHIuYWdvcmEpIC0gRGF0ZS5ub3coKSB9OwogICAgICAgICAgICAvLyBhcyBxdWVzdMO1ZXMgZG8gc2ltdWxhZG8gc8OzIGZpY2FtIHZpc8OtdmVpcyBjb20gYSBqYW5lbGEgYWJlcnRhCiAgICAgICAgICAgIHNiU2VsZWN0KCdxdWl6X3F1ZXN0b2VzP3NlbGVjdD1pZCxldmVudG9faWQsb3JkZW0sYXJlYSxlbnVuY2lhZG8sYWx0ZXJuYXRpdmFzJmV2ZW50b19pZD1lcS4nK2V2U2ltLmlkKycmb3JkZXI9b3JkZW0nKQogICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKHFzKXsKICAgICAgICAgICAgICAgIENBQ0hFLnF1ZXN0b2VzW2V2U2ltLmlkXSA9IChBcnJheS5pc0FycmF5KHFzKSA\/IHFzIDogW10pLm1hcChmdW5jdGlvbihyb3cpewogICAgICAgICAgICAgICAgICByZXR1cm4geyBpZDogcm93LmlkLCBvcmRlbTogcm93Lm9yZGVtLCBhcmVhOiByb3cuYXJlYSwgcTogcm93LmVudW5jaWFkbywgYWx0czogcm93LmFsdGVybmF0aXZhcyB9OwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICByZW5kZXJTaW11bGFkb0V4YW0oKTsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgIH0gZWxzZSBpZiAoci5zdGF0dXMgPT09ICduYW9fYWJlcnRvJykgeyBiLmRpc2FibGVkID0gZmFsc2U7IGIudGV4dENvbnRlbnQgPSAnTGkgZSBjb25jb3JkbyDCtyBJbmljaWFyIHNpbXVsYWRvJzsgdG9hc3QoJ0EgcHJvdmEgYWJyZSDDoHMgJytTSU1fSkFORUxBLmFicmUrJy4nKTsgfQogICAgICAgICAgZWxzZSBpZiAoci5zdGF0dXMgPT09ICdlbmNlcnJhZG8nKSB7IHRvYXN0KCdBIGphbmVsYSBkYSBwcm92YSBqw6EgZW5jZXJyb3UuJyk7IHJlbmRlclNpbXVsYWRvKCk7IH0KICAgICAgICAgIGVsc2UgaWYgKHIuc3RhdHVzID09PSAnamFfcmVzcG9uZGlkbycpIHsgaGlkcmF0YXIoKS50aGVuKHJlbmRlclNpbXVsYWRvKTsgfQogICAgICAgICAgZWxzZSB7IGIuZGlzYWJsZWQgPSBmYWxzZTsgYi50ZXh0Q29udGVudCA9ICdMaSBlIGNvbmNvcmRvIMK3IEluaWNpYXIgc2ltdWxhZG8nOyB0b2FzdCgnTsOjbyBmb2kgcG9zc8OtdmVsIGluaWNpYXIuIFRlbnRlIG5vdmFtZW50ZS4nKTsgfQogICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKCl7IGIuZGlzYWJsZWQgPSBmYWxzZTsgYi50ZXh0Q29udGVudCA9ICdMaSBlIGNvbmNvcmRvIMK3IEluaWNpYXIgc2ltdWxhZG8nOyB0b2FzdCgnU2VtIGNvbmV4w6NvLiBUZW50ZSBub3ZhbWVudGUuJyk7IH0pOwogICAgICB9KTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIC8vIOKUgOKUgCBQUk9WQSAobGF5b3V0OiBjcm9uw7RtZXRybyBlbSBkZXN0YXF1ZSBubyB0b3BvICsgbWFwYSBob3Jpem9udGFsICsgcXVlc3TDo28gZW0gdGVsYSBjaGVpYSkg4pSA4pSACiAgICB2YXIgcHJvZyA9IENBQ0hFLnNpbVByb2c7CiAgICBwcm9nLnJlc3Bvc3RhcyA9IHByb2cucmVzcG9zdGFzIHx8IHt9OwogICAgcHJvZy5tYXJjYWRhcyA9IHByb2cubWFyY2FkYXMgfHwgW107CiAgICB2YXIgcXMgPSBDQUNIRS5xdWVzdG9lc1tldlNpbS5pZF0gfHwgW107CiAgICBpZiAoIXFzLmxlbmd0aCkgewogICAgICBzYlNlbGVjdCgncXVpel9xdWVzdG9lcz9zZWxlY3Q9aWQsZXZlbnRvX2lkLG9yZGVtLGFyZWEsZW51bmNpYWRvLGFsdGVybmF0aXZhcyZldmVudG9faWQ9ZXEuJytldlNpbS5pZCsnJm9yZGVyPW9yZGVtJykKICAgICAgICAudGhlbihmdW5jdGlvbihyb3dzKXsKICAgICAgICAgIENBQ0hFLnF1ZXN0b2VzW2V2U2ltLmlkXSA9IChBcnJheS5pc0FycmF5KHJvd3MpID8gcm93cyA6IFtdKS5tYXAoZnVuY3Rpb24ocm93KXsKICAgICAgICAgICAgcmV0dXJuIHsgaWQ6IHJvdy5pZCwgb3JkZW06IHJvdy5vcmRlbSwgYXJlYTogcm93LmFyZWEsIHE6IHJvdy5lbnVuY2lhZG8sIGFsdHM6IHJvdy5hbHRlcm5hdGl2YXMgfTsKICAgICAgICAgIH0pOwogICAgICAgICAgcmVuZGVyU2ltdWxhZG9FeGFtKCk7CiAgICAgICAgfSk7CiAgICAgICQoJyNtYWluJykuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9ImNhcmQiIHN0eWxlPSJwYWRkaW5nOjQwcHg7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6dmFyKC0taW5rLWRpbSkiPkNhcnJlZ2FuZG8gYSBwcm92YeKApjwvZGl2Pic7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHZhciBhdHVhbCA9IDA7CiAgICB2YXIgc2tldyA9IHByb2cuc2tldyB8fCAwOwogICAgdmFyIGluaVRzID0gRGF0ZS5wYXJzZShwcm9nLmluaWNpYWRvX2VtKTsKICAgIHZhciBmZWNoYVRzID0gcHJvZy5mZWNoYV90cyB8fCBzaW1GZWNoYVRzKCk7CiAgICB2YXIgZHVyTWluID0gcHJvZy5kdXJhY2FvX21pbiB8fCBjZmcuZHVyYWNhb01pbjsKICAgIHZhciBmaW0gPSBNYXRoLm1pbihpbmlUcyArIGR1ck1pbiAqIDYwMDAwLCBmZWNoYVRzIC0gNjAwMDApIC0gc2tldzsKCiAgICB2YXIgaHRtbDIgPSAnPGRpdiBpZD0icHJvdmFCb3giPicrCiAgICAgICc8ZGl2IGNsYXNzPSJjYXJkIHByb3ZhLXRvcG8iPicrCiAgICAgICc8ZGl2PjxkaXYgY2xhc3M9InB0LXRpbWVyIiBpZD0ic2ltVGltZXIiPi0tOi0tPC9kaXY+JysKICAgICAgJzxkaXYgY2xhc3M9InB0LXJvdHVsbyI+VGVtcG8gcmVzdGFudGU8L2Rpdj48L2Rpdj4nKwogICAgICAnPGRpdiBjbGFzcz0icHQtbWV0YSIgaWQ9InNpbU1ldGEiPjwvZGl2PicrCiAgICAgICc8ZGl2IGNsYXNzPSJwdC1hY29lcyI+PGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1naG9zdCBidG4tc20iIGlkPSJidG5NYXBhIj5NYXBhIGRlIHF1ZXN0w7VlczwvYnV0dG9uPjxzcGFuIGlkPSJzaW1BY29lcyIgc3R5bGU9ImRpc3BsYXk6aW5saW5lLWZsZXg7Z2FwOjEwcHg7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtd3JhcDp3cmFwIj48L3NwYW4+PC9kaXY+JysKICAgICAgJzwvZGl2PicrCiAgICAgICc8ZGl2IGNsYXNzPSJjYXJkIHF1aXotYm94IiBzdHlsZT0icGFkZGluZzoyNHB4IDI4cHgiPicrCiAgICAgICc8ZGl2IGNsYXNzPSJwcm92YS1tYXBhIiBpZD0icW1hcCI+Jytxcy5tYXAoZnVuY3Rpb24oXywgaSl7IHJldHVybiAnPGJ1dHRvbiB0eXBlPSJidXR0b24iIGRhdGEtaT0iJytpKyciPicrKGkrMSkrJzwvYnV0dG9uPic7IH0pLmpvaW4oJycpKyc8L2Rpdj4nKwogICAgICAnPGRpdiBpZD0icUFyZWEiPjwvZGl2PjwvZGl2PjwvZGl2Pic7CiAgICAkKCcjbWFpbicpLmlubmVySFRNTCA9IGh0bWwyOwoKICAgIGxpZ2FyR3VhcmRhUHJvdmEoKTsKICAgIHZhciBib3ggPSAkKCcjcHJvdmFCb3gnKTsKICAgIGJveC5jbGFzc0xpc3QuYWRkKCdwcm92YS1wcm90ZWdpZGEnKTsKICAgIFsnY29weScsJ2N1dCcsJ2NvbnRleHRtZW51J10uZm9yRWFjaChmdW5jdGlvbihldk5hbWUpewogICAgICBib3guYWRkRXZlbnRMaXN0ZW5lcihldk5hbWUsIGZ1bmN0aW9uKGUpeyBlLnByZXZlbnREZWZhdWx0KCk7IH0pOwogICAgfSk7CgogICAgZnVuY3Rpb24gbWFwYUFiZXJ0bygpeyByZXR1cm4gJCgnI3FtYXAnKS5jbGFzc0xpc3QuY29udGFpbnMoJ2FiZXJ0bycpOyB9CiAgICBmdW5jdGlvbiBhbHRlcm5hTWFwYShmb3JjYXIpewogICAgICB2YXIgbSA9ICQoJyNxbWFwJyk7CiAgICAgIHZhciBhYnJpciA9IGZvcmNhciA9PT0gdHJ1ZSA\/IHRydWUgOiBmb3JjYXIgPT09IGZhbHNlID8gZmFsc2UgOiAhbWFwYUFiZXJ0bygpOwogICAgICBtLmNsYXNzTGlzdC50b2dnbGUoJ2FiZXJ0bycsIGFicmlyKTsKICAgICAgJCgnI2J0bk1hcGEnKS5jbGFzc0xpc3QudG9nZ2xlKCdtYXJjLW9uJywgYWJyaXIpOwogICAgfQogICAgJCgnI2J0bk1hcGEnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCl7IGFsdGVybmFNYXBhKCk7IH0pOwoKICAgIHZhciBzYWx2YXJUID0gbnVsbDsKICAgIGZ1bmN0aW9uIHNhbHZhclJlbW90bygpewogICAgICBjbGVhclRpbWVvdXQoc2FsdmFyVCk7CiAgICAgIHNhbHZhclQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7CiAgICAgICAgc2JScGMoJ3NpbXVsYWRvX3NhbHZhcicsIHsgcF9jcGY6IENBQ0hFLnVzZXIuY3BmLAogICAgICAgICAgcF9yZXNwb3N0YXM6IHByb2cucmVzcG9zdGFzLCBwX21hcmNhZGFzOiBwcm9nLm1hcmNhZGFzIH0pLmNhdGNoKGZ1bmN0aW9uKCl7fSk7CiAgICAgIH0sIDgwMCk7CiAgICB9CiAgICBmdW5jdGlvbiByZXNwb25kaWRhcygpeyByZXR1cm4gT2JqZWN0LmtleXMocHJvZy5yZXNwb3N0YXMpLmxlbmd0aDsgfQogICAgZnVuY3Rpb24gbWFyY2FkYShpKXsgcmV0dXJuIHByb2cubWFyY2FkYXMuaW5kZXhPZihxc1tpXS5pZCkgPiAtMTsgfQoKICAgIC8vIHNhbHRhIHByYSBwcsOzeGltYSBxdWVzdMOjbyBkbyB0aXBvIChlbSBicmFuY28gLyBtYXJjYWRhKSwgY2lyY3VsYXIgYSBwYXJ0aXIgZGEgYXR1YWwKICAgIGZ1bmN0aW9uIHNhbHRhUGFyYSh0aXBvKXsKICAgICAgZm9yICh2YXIgayA9IDE7IGsgPD0gcXMubGVuZ3RoOyBrKyspIHsKICAgICAgICB2YXIgaTIgPSAoYXR1YWwgKyBrKSAlIHFzLmxlbmd0aDsKICAgICAgICBpZiAodGlwbyA9PT0gJ2JyYW5jbycgJiYgcHJvZy5yZXNwb3N0YXNbcXNbaTJdLmlkXSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gbW9zdHJhUXVlc3RhbyhpMik7CiAgICAgICAgaWYgKHRpcG8gPT09ICdtYXJjYWRhJyAmJiBtYXJjYWRhKGkyKSkgcmV0dXJuIG1vc3RyYVF1ZXN0YW8oaTIpOwogICAgICB9CiAgICAgIHRvYXN0KHRpcG8gPT09ICdicmFuY28nID8gJ05lbmh1bWEgcXVlc3TDo28gZW0gYnJhbmNvLicgOiAnTmVuaHVtYSBxdWVzdMOjbyBtYXJjYWRhLicpOwogICAgfQoKICAgIGZ1bmN0aW9uIHBpbnRhTWFwYSgpewogICAgICAkJCgnI3FtYXAgYnV0dG9uJykuZm9yRWFjaChmdW5jdGlvbihiKXsKICAgICAgICB2YXIgaSA9ICtiLmRhdGFzZXQuaTsKICAgICAgICBiLmNsYXNzTmFtZSA9IChwcm9nLnJlc3Bvc3Rhc1txc1tpXS5pZF0gIT09IHVuZGVmaW5lZCA\/ICdyZXNwb25kaWRhJyA6ICcnKSArCiAgICAgICAgICAoaSA9PT0gYXR1YWwgPyAnIGF0dWFsJyA6ICcnKSArIChtYXJjYWRhKGkpID8gJyBtYXJjYWRhJyA6ICcnKTsKICAgICAgfSk7CiAgICAgIHZhciBlbUJyYW5jbyA9IHFzLmxlbmd0aCAtIHJlc3BvbmRpZGFzKCk7CiAgICAgICQoJyNzaW1NZXRhJykuaW5uZXJIVE1MID0gJzxiPicrcmVzcG9uZGlkYXMoKSsnPC9iPiBkZSAnK3FzLmxlbmd0aCsKICAgICAgICAoZW1CcmFuY28gPyAnIMK3IDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0icHQtc2FsdG8iIGlkPSJzYWx0b0JyYW5jbyIgdGl0bGU9IklyIHBhcmEgYSBwcsOzeGltYSBlbSBicmFuY28iPicrZW1CcmFuY28rJyBlbSBicmFuY288L2J1dHRvbj4nIDogJyDCtyB0dWRvIHJlc3BvbmRpZG8nKSsKICAgICAgICAocHJvZy5tYXJjYWRhcy5sZW5ndGggPyAnIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0icHQtc2FsdG8gYXp1bCIgaWQ9InNhbHRvTWFyY2FkYSIgdGl0bGU9IklyIHBhcmEgYSBwcsOzeGltYSBtYXJjYWRhIj4nK3Byb2cubWFyY2FkYXMubGVuZ3RoKycgbWFyY2FkYScrKHByb2cubWFyY2FkYXMubGVuZ3RoPjE\/J3MnOicnKSsnPC9idXR0b24+JyA6ICcnKTsKICAgICAgdmFyIHNiID0gJCgnI3NhbHRvQnJhbmNvJyk7IGlmIChzYikgc2IuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpeyBzYWx0YVBhcmEoJ2JyYW5jbycpOyB9KTsKICAgICAgdmFyIHNtID0gJCgnI3NhbHRvTWFyY2FkYScpOyBpZiAoc20pIHNtLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXsgc2FsdGFQYXJhKCdtYXJjYWRhJyk7IH0pOwogICAgfQoKICAgIHZhciBmaW5hbGl6YW5kbyA9IGZhbHNlOwogICAgZnVuY3Rpb24gZmluYWxpemFyKCl7CiAgICAgIGlmIChmaW5hbGl6YW5kbykgcmV0dXJuOwogICAgICBmaW5hbGl6YW5kbyA9IHRydWU7CiAgICAgIGNsZWFySW50ZXJ2YWwodGltZXIpOwogICAgICBjbGVhclRpbWVvdXQoc2FsdmFyVCk7CiAgICAgIHNiUnBjKCdzaW11bGFkb19zYWx2YXInLCB7IHBfY3BmOiBDQUNIRS51c2VyLmNwZiwgcF9yZXNwb3N0YXM6IHByb2cucmVzcG9zdGFzLCBwX21hcmNhZGFzOiBwcm9nLm1hcmNhZGFzIH0pCiAgICAgICAgLnRoZW4oZnVuY3Rpb24oKXsgcmV0dXJuIHNiUnBjKCdzaW11bGFkb19maW5hbGl6YXInLCB7IHBfY3BmOiBDQUNIRS51c2VyLmNwZiB9KTsgfSkKICAgICAgICAudGhlbihmdW5jdGlvbihyKXsKICAgICAgICAgIGlmIChyLnN0YXR1cyA9PT0gJ29rJyB8fCByLnN0YXR1cyA9PT0gJ2phX3Jlc3BvbmRpZG8nKSB7CiAgICAgICAgICAgIGRlc2xpZ2FyR3VhcmRhUHJvdmEoKTsKICAgICAgICAgICAgdG9hc3Qoci5zdGF0dXMgIT09ICdvaycgPyAnU2ltdWxhZG8gasOhIHJlZ2lzdHJhZG8uJwogICAgICAgICAgICAgIDogKHIuZ2FiYXJpdG9fbGliZXJhZG8gPyAnU2ltdWxhZG8gZW52aWFkbzogJytyLmFjZXJ0b3MrJy8nK3IudG90YWwrJyBhY2VydG9zLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ1Byb3ZhIGVudmlhZGEhIFJlc3VsdGFkbyBlIGdhYmFyaXRvIHNhZW0gw6BzICcrU0lNX0pBTkVMQS5mZWNoYSsnLicpKTsKICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpeyBsb2NhdGlvbi5yZWxvYWQoKTsgfSwgOTAwKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgZmluYWxpemFuZG8gPSBmYWxzZTsKICAgICAgICAgIHRvYXN0KCdOw6NvIGZvaSBwb3Nzw612ZWwgZW52aWFyICgnK3Iuc3RhdHVzKycpLiBUZW50ZSBkZSBub3ZvLicpOwogICAgICAgICAgcGludGFBY29lcyhmYWxzZSk7CiAgICAgICAgfSkKICAgICAgICAuY2F0Y2goZnVuY3Rpb24oKXsgZmluYWxpemFuZG8gPSBmYWxzZTsgdG9hc3QoJ1NlbSBjb25leMOjby4gVGVudGUgZW52aWFyIGRlIG5vdm8uJyk7IHBpbnRhQWNvZXMoZmFsc2UpOyB9KTsKICAgIH0KCiAgICBmdW5jdGlvbiBwaW50YUFjb2VzKGNvbmZpcm1hbmRvKXsKICAgICAgdmFyIGVsID0gJCgnI3NpbUFjb2VzJyk7CiAgICAgIGlmIChjb25maXJtYW5kbykgewogICAgICAgIGFsdGVybmFNYXBhKHRydWUpOyAgLy8gcmV2aXPDo286IG1hcGEgw6kgaW5kaXNwZW5zw6F2ZWwgYXF1aQogICAgICAgIHZhciBlbUJyYW5jbyA9IHFzLmxlbmd0aCAtIHJlc3BvbmRpZGFzKCk7CiAgICAgICAgZWwuaW5uZXJIVE1MID0gJzxzcGFuIGNsYXNzPSJwdC1jb25maXJtIj4nKwogICAgICAgICAgKGVtQnJhbmNvID4gMCA\/ICc8Yj4nK2VtQnJhbmNvKycgZW0gYnJhbmNvPC9iPi4gRmluYWxpemFyPycgOiAnVHVkbyByZXNwb25kaWRvLiBGaW5hbGl6YXI\/JykrJzwvc3Bhbj4nKwogICAgICAgICAgJzxidXR0b24gY2xhc3M9ImJ0biBidG4tYW1iZXIgYnRuLXNtIiBpZD0iYnRuRmltU2ltIj5TaW0sIGZpbmFsaXphcjwvYnV0dG9uPicrCiAgICAgICAgICAnPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1naG9zdCBidG4tc20iIGlkPSJidG5Db250aW51YSI+Q29udGludWFyPC9idXR0b24+JzsKICAgICAgICAkKCcjYnRuRmltU2ltJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmaW5hbGl6YXIpOwogICAgICAgICQoJyNidG5Db250aW51YScpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXsgcGludGFBY29lcyhmYWxzZSk7IH0pOwogICAgICB9IGVsc2UgewogICAgICAgIGVsLmlubmVySFRNTCA9ICc8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWdob3N0IGJ0bi1zbSIgaWQ9ImJ0blBlZGlyRmltIj5GaW5hbGl6YXIgc2ltdWxhZG88L2J1dHRvbj4nOwogICAgICAgICQoJyNidG5QZWRpckZpbScpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXsgcGludGFBY29lcyh0cnVlKTsgfSk7CiAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBtb3N0cmFRdWVzdGFvKGkpewogICAgICBhdHVhbCA9IGk7CiAgICAgIHZhciBxID0gcXNbaV07CiAgICAgIHZhciBtID0gbWFyY2FkYShpKTsKICAgICAgJCgnI3FBcmVhJykuaW5uZXJIVE1MID0KICAgICAgICAocS5hcmVhID8gJzxkaXYgY2xhc3M9InByb3ZhLWFyZWEiPicrZXNjKHEuYXJlYSkrJzwvZGl2PicgOiAnJykrCiAgICAgICAgJzxkaXYgY2xhc3M9InFoZWFkIiBzdHlsZT0iZm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6ODAwO2xldHRlci1zcGFjaW5nOi4xOGVtO2NvbG9yOnZhcigtLWFtYmVyKTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7bWFyZ2luLWJvdHRvbToxMHB4Ij5RdWVzdMOjbyAnKyhpKzEpKycgZGUgJytxcy5sZW5ndGgrJzwvZGl2PicrCiAgICAgICAgJzxwIGNsYXNzPSJlbnVuIiBzdHlsZT0iZm9udC1zaXplOjE1cHg7bWFyZ2luLWJvdHRvbToxNHB4O3doaXRlLXNwYWNlOnByZS13cmFwIj4nK21pZGlhSFRNTChxLnEpKyc8L3A+JysKICAgICAgICAnPGRpdiBjbGFzcz0icXVpei1vcHRzIG11bHQiPicrcS5hbHRzLm1hcChmdW5jdGlvbihhKXsKICAgICAgICAgIHJldHVybiAnPGJ1dHRvbiB0eXBlPSJidXR0b24iIGRhdGEtdj0iJythLmwrJyIgY2xhc3M9IicrKHByb2cucmVzcG9zdGFzW3EuaWRdID09PSBhLmwgPyAnc2VsJyA6ICcnKSsnIj48YiBjbGFzcz0ibHQiPicrYS5sKyc8L2I+PHNwYW4+Jytlc2MoYS50KSsnPC9zcGFuPjwvYnV0dG9uPic7CiAgICAgICAgfSkuam9pbignJykrJzwvZGl2PicrCiAgICAgICAgJzxkaXYgY2xhc3M9InByb3ZhLW5hdiI+JysKICAgICAgICAnPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1naG9zdCBidG4tc20iIGlkPSJxQW50IiAnKyhpID09PSAwID8gJ2Rpc2FibGVkJyA6ICcnKSsnPkFudGVyaW9yPC9idXR0b24+JysKICAgICAgICAnPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1naG9zdCBidG4tc20gJysobSA\/ICdtYXJjLW9uJyA6ICcnKSsnIiBpZD0icU1hcmNhIj4nKyhtID8gJ01hcmNhZGEgcGFyYSByZXZpc2FyJyA6ICdNYXJjYXIgcGFyYSByZXZpc2FyJykrJzwvYnV0dG9uPicrCiAgICAgICAgJzxidXR0b24gY2xhc3M9ImJ0biBidG4tZ2hvc3QgYnRuLXNtIiBpZD0icVByb3giICcrKGkgPT09IHFzLmxlbmd0aC0xID8gJ2Rpc2FibGVkJyA6ICcnKSsnPlByw7N4aW1hPC9idXR0b24+JysKICAgICAgICAnPC9kaXY+JzsKICAgICAgJCQoJyNxQXJlYSAucXVpei1vcHRzIGJ1dHRvbicpLmZvckVhY2goZnVuY3Rpb24oYil7CiAgICAgICAgYi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCl7CiAgICAgICAgICBwcm9nLnJlc3Bvc3Rhc1txLmlkXSA9IGIuZGF0YXNldC52OwogICAgICAgICAgc2FsdmFyUmVtb3RvKCk7CiAgICAgICAgICAkJCgnI3FBcmVhIC5xdWl6LW9wdHMgYnV0dG9uJykuZm9yRWFjaChmdW5jdGlvbih4KXsgeC5jbGFzc0xpc3QudG9nZ2xlKCdzZWwnLCB4ID09PSBiKTsgfSk7CiAgICAgICAgICBwaW50YU1hcGEoKTsKICAgICAgICB9KTsKICAgICAgfSk7CiAgICAgICQoJyNxQW50JykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpeyBpZiAoYXR1YWwgPiAwKSBtb3N0cmFRdWVzdGFvKGF0dWFsLTEpOyB9KTsKICAgICAgJCgnI3FQcm94JykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpeyBpZiAoYXR1YWwgPCBxcy5sZW5ndGgtMSkgbW9zdHJhUXVlc3RhbyhhdHVhbCsxKTsgfSk7CiAgICAgICQoJyNxTWFyY2EnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCl7CiAgICAgICAgdmFyIGl4ID0gcHJvZy5tYXJjYWRhcy5pbmRleE9mKHEuaWQpOwogICAgICAgIGlmIChpeCA+IC0xKSBwcm9nLm1hcmNhZGFzLnNwbGljZShpeCwgMSk7IGVsc2UgcHJvZy5tYXJjYWRhcy5wdXNoKHEuaWQpOwogICAgICAgIHNhbHZhclJlbW90bygpOyBtb3N0cmFRdWVzdGFvKGkpOwogICAgICB9KTsKICAgICAgcGludGFNYXBhKCk7CiAgICB9CgogICAgdmFyIHRpbWVyID0gc2V0SW50ZXJ2YWwodGljaywgMTAwMCk7CiAgICBmdW5jdGlvbiB0aWNrKCl7CiAgICAgIHZhciBlbCA9ICQoJyNzaW1UaW1lcicpOwogICAgICBpZiAoIWVsKSB7IGNsZWFySW50ZXJ2YWwodGltZXIpOyByZXR1cm47IH0KICAgICAgdmFyIHMgPSBNYXRoLm1heCgwLCBNYXRoLnJvdW5kKChmaW0gLSBEYXRlLm5vdygpKSAvIDEwMDApKTsKICAgICAgdmFyIGggPSBNYXRoLmZsb29yKHMvMzYwMCksIG0yID0gTWF0aC5mbG9vcigocyUzNjAwKS82MCksIHNlZyA9IHMlNjA7CiAgICAgIGVsLnRleHRDb250ZW50ID0gKGg+MCA\/IFN0cmluZyhoKS5wYWRTdGFydCgyLCcwJykrJzonIDogJycpICsgU3RyaW5nKG0yKS5wYWRTdGFydCgyLCcwJykrJzonK1N0cmluZyhzZWcpLnBhZFN0YXJ0KDIsJzAnKTsKICAgICAgZWwuY2xhc3NMaXN0LnRvZ2dsZSgndXJnZW50ZScsIHMgPD0gNjApOwogICAgICBpZiAocyA8PSAwKSBmaW5hbGl6YXIoKTsKICAgIH0KCiAgICBwaW50YUFjb2VzKGZhbHNlKTsKICAgIG1vc3RyYVF1ZXN0YW8oMCk7CiAgICB0aWNrKCk7CiAgICAkJCgnI3FtYXAgYnV0dG9uJykuZm9yRWFjaChmdW5jdGlvbihiKXsKICAgICAgYi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCl7IG1vc3RyYVF1ZXN0YW8oK2IuZGF0YXNldC5pKTsgfSk7CiAgICB9KTsKICB9CgogIC8vIEdhYmFyaXRvIGNvbWVudGFkbyBkbyBzaW11bGFkbzogbyBzZXJ2aWRvciBTw5MgZW50cmVnYSBhcMOzcyBvIGVuY2VycmFtZW50bwogIGZ1bmN0aW9uIHJlbmRlclNpbXVsYWRvR2FiYXJpdG8oKXsKICAgIHZhciBldlNpbSA9IGouZXZlbnRvcy5maW5kKGZ1bmN0aW9uKGUpeyByZXR1cm4gZS5pZCA9PT0gai5zaW11bGFkb0lkOyB9KTsKICAgICQoJyNtYWluJykuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9ImNhcmQiIHN0eWxlPSJwYWRkaW5nOjQwcHg7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6dmFyKC0taW5rLWRpbSkiPkNhcnJlZ2FuZG8gbyBnYWJhcml0b+KApjwvZGl2Pic7CiAgICBzYlJwYygnc2ltdWxhZG9fZ2FiYXJpdG8nLCB7IHBfY3BmOiBDQUNIRS51c2VyLmNwZiB9KS50aGVuKGZ1bmN0aW9uKGcpewogICAgICBpZiAoZy5zdGF0dXMgIT09ICdvaycpIHsgdG9hc3QoJ08gZ2FiYXJpdG8gw6kgbGliZXJhZG8gYXDDs3MgbyBlbmNlcnJhbWVudG8uJyk7IHJlbmRlclNpbXVsYWRvKCk7IHJldHVybjsgfQogICAgICB2YXIgcXMgPSBDQUNIRS5xdWVzdG9lc1tldlNpbS5pZF0gfHwgW107CiAgICAgIHZhciByZXMgPSBDQUNIRS5zaW1SZXMgfHwgeyByZXNwb3N0YXM6IHt9IH07CiAgICAgIHZhciBwb3JJZCA9IHt9OwogICAgICAoZy5pdGVucyB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbihpdCl7IHBvcklkW2l0LnF1ZXN0YW9faWRdID0gaXQ7IH0pOwogICAgICBmdW5jdGlvbiBwaW50YSgpewogICAgICAgIHZhciBodG1sID0gJzxkaXYgY2xhc3M9InBhZ2UtaGVhZCI+PGRpdj4nKwogICAgICAgICAgJzxidXR0b24gY2xhc3M9ImJ0biBidG4tZ2hvc3QgYnRuLXNtIiBpZD0iYnRuVm9sdGFyIiBzdHlsZT0ibWFyZ2luLWJvdHRvbToxNnB4Ij5Wb2x0YXIgYW8gU2ltdWxhZG88L2J1dHRvbj4nKwogICAgICAgICAgJzxzcGFuIGNsYXNzPSJraWNrZXIiPkdhYmFyaXRvIGNvbWVudGFkbzwvc3Bhbj48aDEgc3R5bGU9ImZvbnQtc2l6ZToyMnB4Ij4nK2VzYyhldlNpbS50aXR1bG8pKyc8L2gxPicrCiAgICAgICAgICAoQ0FDSEUuc2ltUmVzID8gJzxwIGNsYXNzPSJkZXNjIj5Wb2PDqiBmZXogPGI+JytDQUNIRS5zaW1SZXMuYWNlcnRvcysnIGRlICcrQ0FDSEUuc2ltUmVzLnRvdGFsKyc8L2I+LiBPIGdhYmFyaXRvIGVzdMOhIGVtIHZlcmRlOyBvbmRlIHZvY8OqIGVycm91LCBhIHN1YSBtYXJjYcOnw6NvIGFwYXJlY2UgZW0gdmVybWVsaG8uPC9wPicgOiAnJykrCiAgICAgICAgICAnPC9kaXY+PC9kaXY+JzsKICAgICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJjYXJkIHF1aXotYm94Ij4nOwogICAgICAgIHFzLmZvckVhY2goZnVuY3Rpb24ocSwgaSl7CiAgICAgICAgICB2YXIgaXQgPSBwb3JJZFtxLmlkXSB8fCB7fTsKICAgICAgICAgIHZhciBtaW5oYSA9IChyZXMucmVzcG9zdGFzIHx8IHt9KVtxLmlkXTsKICAgICAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9InF1aXotcSI+JysocS5hcmVhID8gJzxkaXYgY2xhc3M9InByb3ZhLWFyZWEiPicrZXNjKHEuYXJlYSkrJzwvZGl2PicgOiAnJykrCiAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJxaGVhZCI+UXVlc3TDo28gJysoaSsxKSsnIGRlICcrcXMubGVuZ3RoKyc8L2Rpdj4nKwogICAgICAgICAgICAnPHAgY2xhc3M9ImVudW4iPicrbWlkaWFIVE1MKHEucSkrJzwvcD4nKwogICAgICAgICAgICAnPGRpdiBjbGFzcz0icXVpei1vcHRzIG11bHQiPicrcS5hbHRzLm1hcChmdW5jdGlvbihhKXsKICAgICAgICAgICAgICB2YXIgY2xzID0gYS5sID09PSBpdC5jb3JyZXRhID8gJ2hpdCcgOiAobWluaGEgPT09IGEubCA\/ICdlcnJhZG8nIDogJycpOwogICAgICAgICAgICAgIHJldHVybiAnPGJ1dHRvbiB0eXBlPSJidXR0b24iIGRpc2FibGVkIGNsYXNzPSInK2NscysnIj48YiBjbGFzcz0ibHQiPicrYS5sKyc8L2I+PHNwYW4+Jytlc2MoYS50KSsnPC9zcGFuPjwvYnV0dG9uPic7CiAgICAgICAgICAgIH0pLmpvaW4oJycpKyc8L2Rpdj4nKwogICAgICAgICAgICAoaXQuY29tZW50YXJpbyA\/ICc8ZGV0YWlscyBjbGFzcz0icXVpei1jb21lbnQiPjxzdW1tYXJ5PlZlciBjb21lbnTDoXJpbzwvc3VtbWFyeT48ZGl2IGNsYXNzPSJjYm9keSI+JyttaWRpYUhUTUwoaXQuY29tZW50YXJpbykrJzwvZGl2PjwvZGV0YWlscz4nIDogJycpKwogICAgICAgICAgICAnPC9kaXY+JzsKICAgICAgICB9KTsKICAgICAgICBodG1sICs9ICc8L2Rpdj4nOwogICAgICAgICQoJyNtYWluJykuaW5uZXJIVE1MID0gaHRtbDsKICAgICAgICAkKCcjYnRuVm9sdGFyJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCByZW5kZXJTaW11bGFkbyk7CiAgICAgIH0KICAgICAgaWYgKCFxcy5sZW5ndGgpIHsKICAgICAgICBzYlNlbGVjdCgncXVpel9xdWVzdG9lcz9zZWxlY3Q9aWQsZXZlbnRvX2lkLG9yZGVtLGFyZWEsZW51bmNpYWRvLGFsdGVybmF0aXZhcyZldmVudG9faWQ9ZXEuJytldlNpbS5pZCsnJm9yZGVyPW9yZGVtJykKICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKHJvd3MpewogICAgICAgICAgICBDQUNIRS5xdWVzdG9lc1tldlNpbS5pZF0gPSBxcyA9IChBcnJheS5pc0FycmF5KHJvd3MpID8gcm93cyA6IFtdKS5tYXAoZnVuY3Rpb24ocm93KXsKICAgICAgICAgICAgICByZXR1cm4geyBpZDogcm93LmlkLCBvcmRlbTogcm93Lm9yZGVtLCBhcmVhOiByb3cuYXJlYSwgcTogcm93LmVudW5jaWFkbywgYWx0czogcm93LmFsdGVybmF0aXZhcyB9OwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgcGludGEoKTsKICAgICAgICAgIH0pOwogICAgICB9IGVsc2UgcGludGEoKTsKICAgIH0pOwogIH0KCiAgLyogLS0tLS0tLS0tLSBSQU5LSU5HIC0tLS0tLS0tLS0gKi8KICBmdW5jdGlvbiByZW5kZXJSYW5raW5nKCl7CiAgICB2YXIgcCA9IGNhbGNQb250b3ModXNlcik7CiAgICB2YXIgaHRtbCA9IHBhZ2VIZWFkKCdDbGFzc2lmaWNhw6fDo28gZ2VyYWwgwrcgJyArIGoubGlnYSwgJ1N1YSBwb3Npw6fDo28gbmEgY2xhc3NpZmljYcOnw6NvJywKICAgICAgJ1N1YSBQT1NJw4fDg08gw6kgYSBzdWEgcG9udHVhw6fDo28gdG90YWw6IGpvcm5hZGEgZGUgZXN0dWRvIChhdMOpIDIuMDAwOiBwcmVzZW7Dp2EsIHF1ZXN0w7VlcyBlIFNpbXVsYWRvKSArIGluZGljYcOnw7VlcyAoc2VtIHRldG8pLCB0dWRvIHNvbWFkby4gRW1wYXRlPyBNYWlvciBub3RhIG5vIFNpbXVsYWRvLCBkZXBvaXMgYWNlcnRvcyBuYXMgcXVlc3TDtWVzIGUgY2hlY2staW4gbWFpcyBjZWRvLicsCiAgICAgICdDbGFzc2lmaWNhw6fDo28gYW8gdml2bycpOwogICAgaHRtbCArPSAnPGRpdiBjbGFzcz0iY2FyZCIgc3R5bGU9InBhZGRpbmc6NDBweDt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjp2YXIoLS1pbmstZGltKSIgaWQ9InJrTG9hZCI+Q2FycmVnYW5kbyBvIHJhbmtpbmfigKY8L2Rpdj4nOwogICAgJCgnI21haW4nKS5pbm5lckhUTUwgPSBodG1sOwoKICAgIC8vIFBST0RVw4fDg086IHBvc2nDp8OjbyBlIHBsYWNhciB2w6ptIGRvIHNlcnZpZG9yIChyYW5raW5nX2dlcmFsKSwgY29tIGEKICAgIC8vIGNhc2NhdGEgZGUgZGVzZW1wYXRlIGUgbm9tZXMgYWJyZXZpYWRvcyBzZW0gUElJCiAgICBzYlJwYygncmFua2luZ19nZXJhbCcsIHsgcF9jcGY6IENBQ0hFLnVzZXIuY3BmIH0pLnRoZW4oZnVuY3Rpb24ocil7CiAgICAgIGlmICghciB8fCByLnN0YXR1cyAhPT0gJ29rJykgeyAkKCcjcmtMb2FkJykudGV4dENvbnRlbnQgPSAnTsOjbyBmb2kgcG9zc8OtdmVsIGNhcnJlZ2FyIG8gcmFua2luZyBhZ29yYS4nOyByZXR1cm47IH0KICAgICAgdmFyIHByZVRlbXBvcmFkYSA9IGhvamUuaXNvIDwgai5pbmljaW87CiAgICAgIHZhciBtcCA9IHIubWV1c19wb250b3MgfHwgeyBwcmVzOiAwLCBxdWVzdDogMCwgc2ltOiAwLCBpbmQ6IDAsIGVzdHVkbzogMCwgdG90YWw6IDAgfTsKICAgICAgdmFyIGVzdHVkbyA9IChtcC5lc3R1ZG8gIT0gbnVsbCkgPyBtcC5lc3R1ZG8gOiAobXAucHJlcyArIG1wLnF1ZXN0ICsgbXAuc2ltKTsKICAgICAgdmFyIHRvdGFsID0gKG1wLnRvdGFsICE9IG51bGwpID8gbXAudG90YWwgOiAoZXN0dWRvICsgKG1wLmluZCB8fCAwKSk7CiAgICAgIC8vIGEgUE9TScOHw4NPIG5vIHJhbmtpbmcgw6kgZGVjaWRpZGEgcGVsYSBwb250dWHDp8OjbyBUT1RBTDogam9ybmFkYSBkZSBlc3R1ZG8KICAgICAgLy8gKGF0w6kgMi4wMDApICsgaW5kaWNhw6fDtWVzIChzZW0gdGV0bykuIERlY2lzw6NvIGRvIElnb3IgMTEvMDguCiAgICAgIHZhciBvdXQgPSAnPGRpdiBjbGFzcz0iY2FyZCBwb3MtY2FyZCI+PGRpdj48ZGl2IGNsYXNzPSJwb3MiPicrKHByZVRlbXBvcmFkYSA\/ICfCtycgOiByLm1pbmhhX3BvcysnwronKSsnIDxzbWFsbD5kZSAnKyhyLnRvdGFsX3BhcnRpY2lwYW50ZXN8fDEpLnRvTG9jYWxlU3RyaW5nKCdwdC1CUicpKyc8L3NtYWxsPjwvZGl2PjwvZGl2PicrCiAgICAgICAgJzxkaXY+PGRpdiBjbGFzcz0ia2lja2VyIiBzdHlsZT0ibWFyZ2luLWJvdHRvbTo4cHgiPlZvY8OqIMK3IHBhcmNpYWwgZGUgYWdvcmE8L2Rpdj4nKwogICAgICAgICc8ZGl2IHN0eWxlPSJmb250LXNpemU6MjRweDtmb250LXdlaWdodDo4MDAiPicrZm10UHRzKHRvdGFsKSsnIHB0cyA8c21hbGwgc3R5bGU9ImZvbnQtc2l6ZToxM3B4O2NvbG9yOnZhcigtLWluay1tdXRlKTtmb250LXdlaWdodDo2MDAiPmRlY2lkZSBhIHN1YSBwb3Npw6fDo288L3NtYWxsPjwvZGl2PicrCiAgICAgICAgKChtcC5pbmR8fDApID8gJzxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMi41cHg7Y29sb3I6dmFyKC0taW5rLW11dGUpO21hcmdpbi10b3A6MnB4Ij5qb3JuYWRhICcrZm10UHRzKGVzdHVkbykrJyArICcrZm10UHRzKG1wLmluZCkrJyBkZSBpbmRpY2HDp8O1ZXM8L2Rpdj4nIDogJycpKwogICAgICAgICc8ZGl2IGNsYXNzPSJwb3MtYnJlYWtkb3duIj4nKwogICAgICAgICc8ZGl2IGNsYXNzPSJwYiI+PGRpdiBjbGFzcz0icm93Ij48c3Bhbj5QcmVzZW7Dp2E8L3NwYW4+PHNwYW4+JytmbXRQdHMobXAucHJlcykrJyAvICcrUE9OVE9TLnByZXNlbmNhKyc8L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz0icHJvZ3Jlc3MiPjxkaXYgY2xhc3M9ImZpbGwiIHN0eWxlPSJ3aWR0aDonKyhtcC5wcmVzL1BPTlRPUy5wcmVzZW5jYSoxMDApKyclIj48L2Rpdj48L2Rpdj48L2Rpdj4nKwogICAgICAgICc8ZGl2IGNsYXNzPSJwYiI+PGRpdiBjbGFzcz0icm93Ij48c3Bhbj5RdWVzdMO1ZXM8L3NwYW4+PHNwYW4+JytmbXRQdHMobXAucXVlc3QpKycgLyAnK1BPTlRPUy5taXNzb2VzKyc8L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz0icHJvZ3Jlc3MiPjxkaXYgY2xhc3M9ImZpbGwiIHN0eWxlPSJ3aWR0aDonKyhtcC5xdWVzdC9QT05UT1MubWlzc29lcyoxMDApKyclIj48L2Rpdj48L2Rpdj48L2Rpdj4nKwogICAgICAgICc8ZGl2IGNsYXNzPSJwYiI+PGRpdiBjbGFzcz0icm93Ij48c3Bhbj5TaW11bGFkbyBGaW5hbDwvc3Bhbj48c3Bhbj4nK2ZtdFB0cyhtcC5zaW0pKycgLyAnK1BPTlRPUy5zaW11bGFkbysnPC9zcGFuPjwvZGl2PjxkaXYgY2xhc3M9InByb2dyZXNzIj48ZGl2IGNsYXNzPSJmaWxsIiBzdHlsZT0id2lkdGg6JysobXAuc2ltL1BPTlRPUy5zaW11bGFkbyoxMDApKyclIj48L2Rpdj48L2Rpdj48L2Rpdj4nKwogICAgICAgICc8ZGl2IGNsYXNzPSJwYiI+PGRpdiBjbGFzcz0icm93Ij48c3Bhbj5JbmRpY2HDp8O1ZXM8L3NwYW4+PHNwYW4+KycrZm10UHRzKG1wLmluZHx8MCkrJyA8c21hbGwgc3R5bGU9ImNvbG9yOnZhcigtLWluay1tdXRlKSI+Y29udGEgbmEgY2xhc3NpZmljYcOnw6NvPC9zbWFsbD48L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz0icHJvZ3Jlc3MiPjxkaXYgY2xhc3M9ImZpbGwiIHN0eWxlPSJ3aWR0aDonK01hdGgubWluKDEwMCwobXAuaW5kfHwwKS8yMDAqMTAwKSsnJSI+PC9kaXY+PC9kaXY+PC9kaXY+JysKICAgICAgICAnPC9kaXY+PC9kaXY+PC9kaXY+JzsKCiAgICAgIC8vIHByZW1pYcOnw7VlcyArIGZhaXhhcyBkZSBjb25xdWlzdGEgKHByw6ptaW9zIHJldGlyYWRvcyB0ZW1wb3JhcmlhbWVudGUpCiAgICAgIG91dCArPSAnPGRpdiBjbGFzcz0iY2FyZCIgc3R5bGU9InBhZGRpbmc6MjZweCAzMHB4O21hcmdpbi1ib3R0b206MjJweCI+JzsKICAgICAgaWYgKE1PU1RSQVJfUFJFTUlPUykgewogICAgICAgIG91dCArPSAnPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4LXdyYXA6d3JhcDtnYXA6OHB4O21hcmdpbi1ib3R0b206MTRweCI+JysKICAgICAgICAgICc8ZGl2IGNsYXNzPSJraWNrZXIiPlByZW1pYcOnw7VlczwvZGl2PjxzbWFsbCBzdHlsZT0iY29sb3I6dmFyKC0taW5rLW11dGUpO2ZvbnQtc2l6ZToxMnB4Ij5wcm92aXPDs3JpbyDCtyBjb25maXJtYcOnw6NvIGF0w6kgbyBTaW11bGFkbyBGaW5hbDwvc21hbGw+PC9kaXY+JysKICAgICAgICAgICc8ZGl2IGNsYXNzPSJwcmVtaW9zIiBzdHlsZT0ibWFyZ2luLXRvcDowIj4nKwogICAgICAgICAgJzxkaXYgY2xhc3M9InByZW1pbyI+PGRpdiBjbGFzcz0icG9zIj4xwrogbHVnYXI8L2Rpdj48ZGl2IGNsYXNzPSJ3aGF0Ij5Ob3RlYm9vazwvZGl2PjwvZGl2PicrCiAgICAgICAgICAnPGRpdiBjbGFzcz0icHJlbWlvIj48ZGl2IGNsYXNzPSJwb3MiPjLCuiBsdWdhcjwvZGl2PjxkaXYgY2xhc3M9IndoYXQiPlRhYmxldDwvZGl2PjwvZGl2PicrCiAgICAgICAgICAnPGRpdiBjbGFzcz0icHJlbWlvIj48ZGl2IGNsYXNzPSJwb3MiPjPCuiBhIDEwwro8L2Rpdj48ZGl2IGNsYXNzPSJ3aGF0Ij5LaXQgQ29ydWphIE1FRDwvZGl2PjwvZGl2PjwvZGl2Pic7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgb3V0ICs9ICc8ZGl2IGNsYXNzPSJraWNrZXIiIHN0eWxlPSJtYXJnaW4tYm90dG9tOjhweCI+UHJlbWlhw6fDo288L2Rpdj4nKwogICAgICAgICAgJzxwIHN0eWxlPSJmb250LXNpemU6MTRweDtjb2xvcjp2YXIoLS1pbmstZGltKTttYXJnaW46MCI+QSBwcmVtaWHDp8OjbyBkbyBBdG8gRmluYWwgc2Vyw6EgZGl2dWxnYWRhIGVtIGJyZXZlIG5vIGdydXBvIG9maWNpYWwuICcrCiAgICAgICAgICAnU2lnYSBhY3VtdWxhbmRvIHBvbnRvcyBuYSBqb3JuYWRhOiBxdWFuZG8gYXMgcmVncmFzIHNhw61yZW0sIHN1YSBwb3Npw6fDo28gasOhIGNvbnRhLjwvcD4nOwogICAgICB9CiAgICAgIC8vIG5vdGEgZGUgZmFpeGFzIHJlbW92aWRhIGEgcGVkaWRvIGRvIElnb3IgKDEyLzA4KQogICAgICBvdXQgKz0gJzwvZGl2Pic7CgogICAgICBvdXQgKz0gJzxkaXYgY2xhc3M9ImNhcmQiIHN0eWxlPSJwYWRkaW5nOjIwcHggOHB4IDhweCI+JysKICAgICAgICAnPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOjAgMjJweCA4cHgiPicrCiAgICAgICAgJzxkaXYgY2xhc3M9ImtpY2tlciI+Q2xhc3NpZmljYcOnw6NvIGdlcmFsPC9kaXY+PHNtYWxsIHN0eWxlPSJjb2xvcjp2YXIoLS1pbmstbXV0ZSk7Zm9udC1zaXplOjEycHgiPnRvcCAxMCArIHN1YSB2aXppbmhhbsOnYTwvc21hbGw+PC9kaXY+JysKICAgICAgICAnPHRhYmxlIGNsYXNzPSJyYW5rLXRhYmxlIj48dGhlYWQ+PHRyPjx0aCBzdHlsZT0id2lkdGg6NjBweCI+IzwvdGg+PHRoPlBhcnRpY2lwYW50ZTwvdGg+PHRoIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0Ij5Qb250b3M8L3RoPjwvdHI+PC90aGVhZD48dGJvZHk+JzsKICAgICAgdmFyIGFudCA9IDA7CiAgICAgIChyLmJvYXJkIHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHJvdyl7CiAgICAgICAgaWYgKGFudCAmJiByb3cucG9zID4gYW50ICsgMSkgewogICAgICAgICAgb3V0ICs9ICc8dHIgY2xhc3M9InJhbmstZ2FwIj48dGQgY29sc3Bhbj0iMyI+wrcgwrcgwrcgJysocm93LnBvcyAtIGFudCAtIDEpLnRvTG9jYWxlU3RyaW5nKCdwdC1CUicpKycgcGFydGljaXBhbnRlJysocm93LnBvcy1hbnQtMT4xPydzJzonJykrJyDCtyDCtyDCtzwvdGQ+PC90cj4nOwogICAgICAgIH0KICAgICAgICBhbnQgPSByb3cucG9zOwogICAgICAgIHZhciBtZWRhbCA9IHJvdy5wb3M9PT0xPyc8c3BhbiBjbGFzcz0ibWVkYWwgZyI+MTwvc3Bhbj4nOnJvdy5wb3M9PT0yPyc8c3BhbiBjbGFzcz0ibWVkYWwgcyI+Mjwvc3Bhbj4nOnJvdy5wb3M9PT0zPyc8c3BhbiBjbGFzcz0ibWVkYWwgYiI+Mzwvc3Bhbj4nOic8c3BhbiBjbGFzcz0ibWVkYWwiPicrcm93LnBvcysnPC9zcGFuPic7CiAgICAgICAgb3V0ICs9ICc8dHInKyhyb3cubWU\/JyBjbGFzcz0ibWUiJzonJykrJz48dGQ+JyttZWRhbCsnPC90ZD48dGQ+Jytlc2Mocm93Lm5vbWUpKyhyb3cubWU\/JyDCtyB2b2PDqic6JycpKyc8L3RkPjx0ZCBjbGFzcz0icHRzIj4nK2ZtdFB0cyhyb3cucHRzKSsnPC90ZD48L3RyPic7CiAgICAgIH0pOwogICAgICBvdXQgKz0gJzwvdGJvZHk+PC90YWJsZT48L2Rpdj4nOwogICAgICAkKCcjbWFpbicpLmlubmVySFRNTCA9IHBhZ2VIZWFkKCdDbGFzc2lmaWNhw6fDo28gZ2VyYWwgwrcgJyArIGoubGlnYSwgJ1N1YSBwb3Npw6fDo28gbmEgY2xhc3NpZmljYcOnw6NvJywKICAgICAgICAnU3VhIFBPU0nDh8ODTyDDqSBhIHN1YSBwb250dWHDp8OjbyB0b3RhbDogam9ybmFkYSBkZSBlc3R1ZG8gKGF0w6kgMi4wMDA6IHByZXNlbsOnYSwgcXVlc3TDtWVzIGUgU2ltdWxhZG8pICsgaW5kaWNhw6fDtWVzIChzZW0gdGV0byksIHR1ZG8gc29tYWRvLiBFbXBhdGU\/IE1haW9yIG5vdGEgbm8gU2ltdWxhZG8sIGRlcG9pcyBhY2VydG9zIG5hcyBxdWVzdMO1ZXMgZSBjaGVjay1pbiBtYWlzIGNlZG8uJywKICAgICAgICAoci50b3RhbF9wYXJ0aWNpcGFudGVzfHwxKS50b0xvY2FsZVN0cmluZygncHQtQlInKSArICcgcGFydGljaXBhbnRlcycpICsgb3V0OwogICAgfSkuY2F0Y2goZnVuY3Rpb24oKXsgdmFyIGVsID0gJCgnI3JrTG9hZCcpOyBpZiAoZWwpIGVsLnRleHRDb250ZW50ID0gJ1NlbSBjb25leMOjbyBjb20gbyByYW5raW5nLic7IH0pOwogIH0KCiAgLyogLS0tLS0tLS0tLSByb3RlYWRvciBkZSBhYmFzIC0tLS0tLS0tLS0gKi8KICB2YXIgVEFCUyA9IHsgaW5pY2lvOnJlbmRlckluaWNpbywgYXVsYXM6cmVuZGVyQXVsYXMsIHF1ZXN0b2VzOnJlbmRlclF1ZXN0b2VzLCBzaW11bGFkbzpyZW5kZXJTaW11bGFkbywgcmFua2luZzpyZW5kZXJSYW5raW5nIH07CiAgdmFyIFRBQl9BTElBUyA9IHsgY2hlY2tpbjonYXVsYXMnLCBtaXNzb2VzOidxdWVzdG9lcycgfTsKICBmdW5jdGlvbiBnbyh0YWIpewogICAgaWYgKFRBQl9BTElBU1t0YWJdKSB0YWIgPSBUQUJfQUxJQVNbdGFiXTsKICAgIGlmICghVEFCU1t0YWJdKSB0YWIgPSAnaW5pY2lvJzsKICAgIGlmIChwcm92YUF0aXZhKSB7IGd1YXJkYVByb3ZhTW9kYWwoZnVuY3Rpb24oKXsgZ28odGFiKTsgfSk7IHJldHVybjsgfQogICAgJCQoJy5uYXYtaXRlbScpLmZvckVhY2goZnVuY3Rpb24oYil7IGIuY2xhc3NMaXN0LnRvZ2dsZSgnb24nLCBiLmRhdGFzZXQudGFiID09PSB0YWIpOyB9KTsKICAgIFRBQlNbdGFiXSgpOwogICAgLy8gdHJhbnNpw6fDo28gZGUgdGVsYSAoc2Vuc2HDp8OjbyBkZSBhcHA6IGNhZGEgYWJhIGVudHJhIGFuaW1hZGEpCiAgICB2YXIgbUVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haW4nKTsKICAgIGlmIChtRWwpIHsgbUVsLmNsYXNzTGlzdC5yZW1vdmUoJ3ZpZXctYW5pbScpOyB2b2lkIG1FbC5vZmZzZXRXaWR0aDsgbUVsLmNsYXNzTGlzdC5hZGQoJ3ZpZXctYW5pbScpOyB9CiAgICBpZiAobG9jYXRpb24uaGFzaCAhPT0gJyMnK3RhYikgaGlzdG9yeS5yZXBsYWNlU3RhdGUobnVsbCwgJycsICcjJyt0YWIpOwogICAgd2luZG93LnNjcm9sbFRvKDAsMCk7CiAgfQogICQkKCcubmF2LWl0ZW0nKS5mb3JFYWNoKGZ1bmN0aW9uKGIpeyBiLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXsgZ28oYi5kYXRhc2V0LnRhYik7IH0pOyB9KTsKICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignaGFzaGNoYW5nZScsIGZ1bmN0aW9uKCl7IGdvKGxvY2F0aW9uLmhhc2guc2xpY2UoMSkpOyB9KTsKICBnbyhsb2NhdGlvbi5oYXNoLnNsaWNlKDEpIHx8ICdpbmljaW8nKTsKfQoKLyogUGFpbmVsIGFkbWluOiDDqSBidW5kbGUgUFLDk1BSSU8gKGFkbWluLmpzL2FkbWluLmh0bWwvYWRtaW4uY3NzKSBjb20gZ2F0ZQogICBzZXJ2ZXItc2lkZS4gTyBwcm90w7N0aXBvIGluaXRBZG1pbiAoY2hhdmUgZml4YSBubyBjw7NkaWdvICsgZmxhZyBlbQogICBsb2NhbFN0b3JhZ2UsIFpFUk8gdmFsaWRhw6fDo28gbm8gc2Vydmlkb3IpIGZvaSBSRU1PVklETyBuYSBhdWRpdG9yaWEgZGUKICAgMTEvMDg6IG51bmNhIHJvZGF2YSBlbSBwcm9kdcOnw6NvIChhIHDDoWdpbmEgL3BhaW5lbC8gY2FycmVnYSBhZG1pbi5qcywgbsOjbwogICBlc3RlIGFwcC5qcykgZSBlbWJhcmNhdmEgdW1hIGNoYXZlIGZhbHNhIG5vIGJ1bmRsZSBww7pibGljbyBkZSB0b2RvIGFsdW5vLiAqLwoKLyogLS0tLS0tLS0tLS0tLS0tLSBib290IC0tLS0tLS0tLS0tLS0tLS0gKi8KKGZ1bmN0aW9uKCl7CiAgdmFyIHBhZ2UgPSB3aW5kb3cuX19BRl9QQUdFOwogIHRyeSB7CiAgICBpZiAocGFnZSA9PT0gJ2xhbmRpbmcnKSBpbml0TGFuZGluZygpOwogICAgZWxzZSBpZiAocGFnZSA9PT0gJ2F1dGgtY2FkYXN0cm8nKSByZW5kZXJBdXRoKCdjYWRhc3RybycpOwogICAgZWxzZSBpZiAocGFnZSA9PT0gJ2F1dGgtYWNlc3NhcicpIHJlbmRlckF1dGgoJ2FjZXNzYXInKTsKICAgIGVsc2UgaWYgKHBhZ2UgPT09ICdhcmVhJykgaW5pdEFyZWEoKTsKICB9IGNhdGNoIChlKSB7CiAgICAvLyBzZSBhIG1vbnRhZ2VtIHF1ZWJyYXIgKGV4Ljogc8OzIGVtIGNlcnRvIFNhZmFyaSksIE7Dg08gZGVpeGEgdGVsYSBicmFuY2EKICAgIC8vIG11ZGE6IHB1YmxpY2EgYSBjYXVzYSBuYSB0ZWxhIChvIGFsdW5vIGNvbnNlZ3VlIG1hbmRhciBwcmludCkgZSBzaW5hbGl6YQogICAgLy8gcHJvIHdhdGNoZG9nIGRvIHB1YmxpY2Fkb3IuIEF1ZGl0b3JpYSAxMS8wOC4KICAgIHdpbmRvdy5fX2FmQm9vdEVycm8gPSAoZSAmJiAoZS5tZXNzYWdlIHx8IGUubmFtZSkpIHx8IFN0cmluZyhlKTsKICAgIHRyeSB7CiAgICAgIHZhciBib3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbicpIHx8IGRvY3VtZW50LmJvZHk7CiAgICAgIHZhciBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgIGQuc3R5bGUuY3NzVGV4dCA9ICdwYWRkaW5nOjI0cHg7bWFyZ2luOjE2cHg7Ym9yZGVyLXJhZGl1czoxMnB4O2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNEOTU2NEE7Zm9udDoxNHB4LzEuNiAtYXBwbGUtc3lzdGVtLHNhbnMtc2VyaWY7Y29sb3I6IzBFMkEyRTttYXgtd2lkdGg6NTIwcHgnOwogICAgICBkLmlubmVySFRNTCA9ICc8YiBzdHlsZT0iY29sb3I6I0IzMjYxRSI+TsOjbyBjb25zZWd1aSBhYnJpciBlc3RhIHRlbGEgbm8gc2V1IG5hdmVnYWRvci48L2I+PGJyPicgKwogICAgICAgICdBdHVhbGl6ZSBhIHDDoWdpbmEuIFNlIGNvbnRpbnVhciwgdGlyZSB1bSBwcmludCBkZXN0YSBtZW5zYWdlbSBlIGVudmllIGFvIHN1cG9ydGUuPGJyPicgKwogICAgICAgICc8c21hbGwgc3R5bGU9ImNvbG9yOiM3RTk1OUIiPkRldGFsaGUgdMOpY25pY28gKCcgKyBwYWdlICsgJyk6ICcgKyBlc2Mod2luZG93Ll9fYWZCb290RXJybykuc2xpY2UoMCwxNjApICsgJzwvc21hbGw+JzsKICAgICAgdmFyIGVzcCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhZi1lc3BlcmEnKTsgaWYgKGVzcCkgZXNwLnJlbW92ZSgpOwogICAgICBib3guYXBwZW5kQ2hpbGQoZCk7CiAgICB9IGNhdGNoIChlMikge30KICAgIGlmICh3aW5kb3cuX19hZkVudmlhKSB7IHRyeSB7IHdpbmRvdy5fX2FmRW52aWEoJ2Jvb3RfZXJybzonICsgU3RyaW5nKHdpbmRvdy5fX2FmQm9vdEVycm8pLnNsaWNlKDAsODApKTsgfSBjYXRjaChlMyl7fSB9CiAgfQp9KSgpOwo=';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":95,"href":"https:\/\/mkt.estrategia.com\/med\/wp-json\/wp\/v2\/pages\/392561\/revisions"}],"predecessor-version":[{"id":393668,"href":"https:\/\/mkt.estrategia.com\/med\/wp-json\/wp\/v2\/pages\/392561\/revisions\/393668"}],"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}]}}