{"id":2724,"date":"2025-04-24T11:45:28","date_gmt":"2025-04-24T11:45:28","guid":{"rendered":"https:\/\/rentamac.io\/?page_id=2724"},"modified":"2026-07-08T16:54:54","modified_gmt":"2026-07-08T16:54:54","slug":"demo","status":"publish","type":"page","link":"https:\/\/rentamac.io\/es\/demo\/","title":{"rendered":"Pruebe nuestro servicio con una demostraci\u00f3n gratuita"},"content":{"rendered":"\n<link rel=\"stylesheet\" href=\"https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@400;500;600;700;800&#038;display=swap\">\n<style>\nbody{background:#000000}\n.ramac-live{--bg:#000000; --panel:#13131d;\n    --card:rgba(255,255,255,.03); --card-h:rgba(255,255,255,.05);\n    --stroke:rgba(255,255,255,.08); --stroke-h:rgba(255,255,255,.16);\n    --text:#f0f2f5; --text-2:#aab0bb; --muted:#7b818d;\n    --accent:#4a8fd4; --accent-2:#5a9de0;\n    --accent-soft:rgba(74,143,212,.14); --accent-ring:rgba(74,143,212,.30);\n    --live:#e82f2f; --ok:#43d15b; --warn:#e0533d;}\n.ramac-live *{box-sizing:border-box}\n.ramac-live, .ramac-live{margin:0;background:var(--bg)}\n.ramac-live{color:var(--text);font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased}\n.ramac-live .wrap{max-width:980px;margin:0 auto;padding:44px 24px 84px;position:relative}\n.ramac-live .glow{position:absolute;left:50%;top:230px;transform:translateX(-50%);width:820px;max-width:96vw;height:460px;border-radius:50%;\n    background:radial-gradient(closest-side,rgba(74,143,212,.13),transparent 70%);pointer-events:none}\n.ramac-live .inner{position:relative}\n.ramac-live .eyebrow{display:flex;align-items:center;justify-content:center;gap:8px;font-size:12px;font-weight:700;\n    letter-spacing:.08em;text-transform:uppercase;color:var(--text-2)}\n.ramac-live .eyebrow .reddot{width:9px;height:9px;border-radius:50%;background:var(--live);animation:rlpulse 1.6s ease-in-out infinite}\n@keyframes rlpulse{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.55;transform:scale(.85)}}\n@keyframes rlbreathe{0%,100%{opacity:1}50%{opacity:.55}}\n.ramac-live h1.title{font-size:clamp(27px,3.4vw,40px);font-weight:800;letter-spacing:-.025em;line-height:1.1;margin:12px 0 10px;text-align:center}\n.ramac-live .sub{color:var(--text-2);font-size:clamp(14.5px,1.6vw,16.5px);line-height:1.55;margin:0 auto 28px;max-width:560px;text-align:center}\n.ramac-live .player{position:relative;border:1px solid var(--stroke);border-radius:10px 10px 0 0;overflow:hidden;background:#0a0a10;aspect-ratio:16\/9}\n.ramac-live .player video{position:absolute;inset:0;width:100%;height:100%;display:block;object-fit:contain;background:#0a0a10}\n.ramac-live .overlay{position:absolute;inset:0;display:flex;flex-direction:column;gap:7px;align-items:center;justify-content:center;\n    text-align:center;background:rgba(5,6,10,.78);padding:20px}\n.ramac-live .overlay.hidden{display:none}\n.ramac-live .overlay .od{width:11px;height:11px;border-radius:50%;background:var(--muted);animation:rlbreathe 2.4s ease-in-out infinite;margin-bottom:4px}\n.ramac-live .overlay .big{font-size:16px;font-weight:700;letter-spacing:-.01em}\n.ramac-live .overlay .small{font-size:12.5px;color:var(--text-2);max-width:380px;line-height:1.5}\n\/* Idle auto-pause: the stream tears down after 60s of no interaction and this overlay invites a tap to resume. *\/\n.ramac-live .paused-ov{cursor:pointer;gap:10px;background:rgba(5,6,10,.82);transition:background .15s}\n.ramac-live .paused-ov:hover{background:rgba(5,6,10,.72)}\n.ramac-live .paused-ov:focus-visible{outline:2px solid var(--accent);outline-offset:-3px}\n.ramac-live .paused-ov .pic{width:54px;height:54px;border-radius:50%;background:var(--accent);display:grid;place-items:center;color:#fff;\n    box-shadow:0 8px 28px rgba(74,143,212,.45);transition:transform .15s,background .15s;margin-bottom:2px}\n.ramac-live .paused-ov:hover .pic{transform:scale(1.06);background:var(--accent-2)}\n.ramac-live .paused-ov .pic svg{width:22px;height:22px;margin-left:3px}\n.ramac-live .islandbar{position:relative;display:flex;align-items:center;min-height:32px;border:1px solid var(--stroke);border-top:none;\n    border-radius:0 0 10px 10px;background:var(--panel);padding:4px 12px}\n.ramac-live .coolline{position:absolute;top:-1px;left:0;height:2px;width:0%;background:var(--accent);pointer-events:none}\n.ramac-live .island{display:inline-flex;align-items:center;gap:8px;max-width:100%;border:1px solid transparent;border-radius:999px;\n    padding:3px 0;transition:border-color .3s,padding .3s,background .3s}\n.ramac-live .island.expanded{border-color:rgba(255,255,255,.12);background:rgba(255,255,255,.03);padding:3px 12px}\n.ramac-live .island .d{width:8px;height:8px;border-radius:50%;background:var(--live);animation:rlbreathe 2s ease-in-out infinite;flex-shrink:0}\n.ramac-live .island[data-state=\"connecting\"] .d{background:rgba(255,255,255,.5)}\n.ramac-live .island[data-state=\"offline\"] .d, .ramac-live .island[data-state=\"paused\"] .d{display:none}\n.ramac-live .island .w{font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#fff;white-space:nowrap}\n.ramac-live .island[data-state=\"offline\"] .w, .ramac-live .island[data-state=\"paused\"] .w{color:rgba(255,255,255,.4)}\n.ramac-live .island .sfx{display:none;font-size:11px;font-weight:600;color:rgba(255,255,255,.5);white-space:nowrap}\n.ramac-live .island.paused .sfx{display:inline}\n.ramac-live .island .msg{font-size:12.5px;color:var(--text-2);max-width:0;overflow:hidden;white-space:nowrap;opacity:0;\n    transition:max-width .35s ease,opacity .3s ease}\n.ramac-live .island.expanded .msg{max-width:560px;opacity:1}\n.ramac-live .island .msg b{color:var(--accent-2);font-weight:600}\n.ramac-live .acthead{margin:34px 0 4px;text-align:center}\n.ramac-live .acthead h2{font-size:19px;font-weight:700;letter-spacing:-.015em;margin:0 0 6px}\n.ramac-live .acthead p{font-size:13.5px;color:var(--text-2);margin:0;line-height:1.5}\n.ramac-live .tiles{display:grid;grid-template-columns:repeat(6,1fr);gap:12px;margin-top:16px}\n.ramac-live .tiles .tile{grid-column:span 2;min-width:0}\n.ramac-live .tiles .tile:nth-last-child(-n+2){grid-column:span 3}\n.ramac-live .tile{position:relative;display:flex;align-items:center;gap:12px;text-align:left;cursor:pointer;font-family:inherit;\n    border:1px solid var(--stroke-h);border-radius:12px;background:var(--panel);padding:12px 14px;color:var(--text);min-height:64px;\n    transition:background .15s,border-color .15s,opacity .2s}\n.ramac-live .tile:hover{background:#181826;border-color:var(--accent-ring)}\n.ramac-live .tile:active{background:#101019}\n.ramac-live .tile:focus-visible{outline:2px solid var(--accent);outline-offset:2px}\n.ramac-live .tile .chip{flex-shrink:0;width:30px;height:30px;border-radius:8px;background:var(--accent-soft);display:grid;place-items:center;\n    color:var(--accent);transition:background .15s,color .15s}\n.ramac-live .tile:hover .chip{background:rgba(74,143,212,.24)}\n.ramac-live .tile:active .chip, .ramac-live .tile.running .chip{background:var(--accent);color:#fff}\n.ramac-live .tile .chip svg{width:15px;height:15px}\n.ramac-live .tile .chip .spin{display:none;width:14px;height:14px;border-radius:50%;border:2px solid rgba(255,255,255,.4);\n    border-top-color:#fff;animation:rlspin .8s linear infinite}\n@keyframes rlspin{to{transform:rotate(360deg)}}\n.ramac-live .tile.running .chip .gl{display:none}\n.ramac-live .tile.running .chip .spin{display:block}\n.ramac-live .tile .body{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}\n.ramac-live .tile .t{font-size:14px;font-weight:600}\n.ramac-live .tile .s{font-size:11.5px;color:var(--muted);line-height:1.4}\n.ramac-live .kc{flex-shrink:0;display:inline-flex;align-items:center;gap:5px;font-size:10px;font-weight:700;letter-spacing:.06em;\n    text-transform:uppercase;color:var(--text-2);border:1px solid var(--stroke-h);border-radius:5px;padding:3px 8px;\n    box-shadow:0 1px 0 rgba(0,0,0,.9);transition:background .15s,color .15s,border-color .15s}\n.ramac-live .kc svg{width:9px;height:9px}\n.ramac-live .tile:hover .kc{background:var(--accent);color:#fff;border-color:var(--accent)}\n.ramac-live .tile:active .kc{box-shadow:none}\n.ramac-live .tile.running .kc{display:none}\n.ramac-live .kc.count{font-family:var(--mono);text-transform:none;letter-spacing:0}\n.ramac-live .tiles.cooling .tile, .ramac-live .tiles.paused .tile{opacity:.45}\n.ramac-live .tiles.cooling .tile:hover, .ramac-live .tiles.paused .tile:hover{background:var(--panel);border-color:var(--stroke-h)}\n.ramac-live .tiles.cooling .tile:hover .chip, .ramac-live .tiles.paused .tile:hover .chip{background:var(--accent-soft);color:var(--accent)}\n.ramac-live .tiles.cooling .tile:hover .kc, .ramac-live .tiles.paused .tile:hover .kc{background:transparent;color:var(--text-2);border-color:var(--stroke-h)}\n\/* Selected tile = the action currently on screen (shared across all viewers via SignalR). Accent-filled chip\n   with a check, highlighted + focus-ringed card. Persists until another action runs or the desktop resets. *\/\n.ramac-live .tile.active{background:#181826;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}\n.ramac-live .tile.active .chip{background:var(--accent);color:#fff}\n.ramac-live .tile.active .chip .gl, .ramac-live .tile.active .chip .spin{display:none}\n.ramac-live .tile.active .chip::after{content:\"\";display:block;width:6px;height:10px;border:solid #fff;border-width:0 2px 2px 0;transform:rotate(45deg);margin-top:-2px}\n.ramac-live .tile.active .kc{display:none}\n\/* The running\/selected tile is never dimmed by the cooldown\/paused overlay \u2014 it stays the focus of attention. *\/\n.ramac-live .tiles.cooling .tile.running, .ramac-live .tiles.cooling .tile.active, .ramac-live .tiles.paused .tile.running, .ramac-live .tiles.paused .tile.active{opacity:1}\n\/* When ANOTHER viewer triggers a button, flash a tooltip above it so you can tell their action from your own. *\/\n.ramac-live .tile.tip{z-index:6}\n.ramac-live .tile.tip::after{content:attr(data-tip);position:absolute;left:50%;bottom:calc(100% + 9px);transform:translateX(-50%);white-space:nowrap;background:#0a0a10;color:var(--text);border:1px solid var(--accent-ring);border-radius:7px;padding:6px 10px;font-size:11px;font-weight:600;box-shadow:0 8px 24px rgba(0,0,0,.55);z-index:6;pointer-events:none;animation:rltip 3.2s ease forwards}\n.ramac-live .tile.tip::before{content:\"\";position:absolute;left:50%;bottom:calc(100% + 4px);transform:translateX(-50%);border:5px solid transparent;border-top-color:#0a0a10;z-index:6;pointer-events:none;animation:rltip 3.2s ease forwards}\n@keyframes rltip{0%{opacity:0;transform:translateX(-50%) translateY(5px)}10%{opacity:1;transform:translateX(-50%) translateY(0)}82%{opacity:1;transform:translateX(-50%) translateY(0)}100%{opacity:0;transform:translateX(-50%) translateY(0)}}\n.ramac-live .sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}\n.ramac-live .cta-panel{max-width:600px;margin:48px auto 0;background:var(--panel);border:1px solid var(--stroke);border-radius:20px;\n    padding:36px 32px;text-align:center;position:relative;overflow:hidden}\n.ramac-live .cta-panel::before{content:'';position:absolute;top:0;left:0;right:0;height:3px;background:linear-gradient(90deg,var(--accent),var(--accent-2))}\n.ramac-live .cta-panel h2{font-size:23px;font-weight:800;letter-spacing:-.02em;margin:0 0 10px;color:var(--text)}\n.ramac-live .cta-panel p{color:var(--text-2);font-size:14.5px;line-height:1.55;max-width:440px;margin:0 auto 24px}\n.ramac-live .cta-row{display:flex;gap:12px;justify-content:center;flex-wrap:wrap}\n.ramac-live .cta-rent{display:inline-flex;align-items:center;justify-content:center;text-decoration:none !important;font-weight:700;\n    font-size:14.5px !important;color:#fff !important;background:var(--accent) !important;border-radius:12px;padding:13px 26px;\n    min-height:48px;transition:background .2s;transform:none !important;box-shadow:none !important}\n.ramac-live .cta-rent:hover, .ramac-live .cta-rent:focus{background:#4381bf !important;color:#fff !important}\n.ramac-live .cta-rent:visited{color:#fff !important}\n.ramac-live .cta-rent:focus-visible{outline:2px solid var(--accent);outline-offset:2px}\n.ramac-live .cta-faq{display:inline-flex;align-items:center;justify-content:center;text-decoration:none !important;font-weight:600;\n    font-size:14px !important;color:var(--text) !important;background:transparent;border:1.5px solid var(--accent-ring);\n    border-radius:12px;padding:12px 24px;min-height:48px;transition:background .15s,border-color .15s}\n.ramac-live .cta-faq:hover, .ramac-live .cta-faq:focus{background:var(--accent-soft);border-color:var(--accent-ring);color:var(--text) !important}\n@media(max-width:880px){.ramac-live .tiles{grid-template-columns:repeat(2,1fr)}.ramac-live .tiles .tile, .ramac-live .tiles .tile:nth-last-child(-n+2){grid-column:span 1}}\n@media(max-width:560px){.ramac-live .wrap{padding:30px 14px 60px}\n.ramac-live .tiles{grid-template-columns:1fr}.ramac-live .tiles .tile, .ramac-live .tiles .tile:nth-last-child(-n+2){grid-column:span 1}}\n@media (prefers-reduced-motion:reduce){.ramac-live .eyebrow .reddot, .ramac-live .island .d, .ramac-live .overlay .od, .ramac-live .tile .spin{animation:none}\n.ramac-live *{transition:none !important}}\n<\/style>\n<div class=\"ramac-live\">\n<div class=\"wrap\">\n  <div class=\"glow\" aria-hidden=\"true\"><\/div>\n  <div class=\"inner\">\n\n    <div class=\"eyebrow\"><span class=\"reddot\" aria-hidden=\"true\"><\/span> Mac mini M4, streaming live<\/div>\n    <h1 class=\"title\">Try a real Mac. Right now, in your browser.<\/h1>\n    <p class=\"sub\">This is a live machine. Pick an action below and watch it happen on screen.<\/p>\n\n    <div class=\"player\">\n      <video id=\"rl-video\" autoplay muted playsinline><\/video>\n      <div class=\"overlay\" id=\"rl-overlay\">\n        <span class=\"od\" aria-hidden=\"true\"><\/span>\n        <div class=\"big\" id=\"rl-ov-big\">Connecting to the live stream&#8230;<\/div>\n        <div class=\"small\" id=\"rl-ov-small\"><\/div>\n      <\/div>\n      <div class=\"overlay paused-ov hidden\" id=\"rl-paused\" role=\"button\" tabindex=\"0\" aria-label=\"Resume the live stream\">\n        <span class=\"pic\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M8 5v14l11-7z\"\/><\/svg><\/span>\n        <div class=\"big\">Stream paused<\/div>\n        <div class=\"small\">Tap to resume the live stream<\/div>\n      <\/div>\n    <\/div>\n    <div class=\"islandbar\">\n      <div class=\"coolline\" id=\"rl-line\" aria-hidden=\"true\"><\/div>\n      <span class=\"island\" id=\"rl-island\" data-state=\"connecting\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\">\n        <span class=\"d\" aria-hidden=\"true\"><\/span>\n        <span class=\"w\" id=\"rl-word\">Connecting<\/span>\n        <span class=\"sfx\" id=\"rl-sfx\">&middot; actions paused<\/span>\n        <span class=\"msg\" id=\"rl-msg\"><\/span>\n      <\/span>\n    <\/div>\n\n    <div class=\"acthead\">\n      <h2>Now run something on it<\/h2>\n      <p>These buttons send real commands to the Mac above.<\/p>\n    <\/div>\n    <div class=\"tiles\" id=\"rl-tiles\">\n      <button class=\"tile\" type=\"button\" data-action=\"simulator\">\n        <span class=\"chip\"><span class=\"gl\"><svg fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><rect x=\"7\" y=\"2\" width=\"10\" height=\"20\" rx=\"2.5\"\/><path stroke-linecap=\"round\" d=\"M11 18h2\"\/><\/svg><\/span><span class=\"spin\" aria-hidden=\"true\"><\/span><\/span>\n        <span class=\"body\"><span class=\"t\">Open iOS Simulator<\/span><span class=\"s\">Boot an iPhone on the Mac<\/span><\/span>\n        <span class=\"kc\"><svg viewBox=\"0 0 10 10\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M1.5 1l7 4-7 4z\"\/><\/svg> Run<\/span>\n      <\/button>\n      <button class=\"tile\" type=\"button\" data-action=\"speedtest\">\n        <span class=\"chip\"><span class=\"gl\"><svg fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path stroke-linecap=\"round\" d=\"M4 14a8 8 0 1116 0M12 14l4-5\"\/><\/svg><\/span><span class=\"spin\" aria-hidden=\"true\"><\/span><\/span>\n        <span class=\"body\"><span class=\"t\">Run Speedtest<\/span><span class=\"s\">Latency, upload and download<\/span><\/span>\n        <span class=\"kc\"><svg viewBox=\"0 0 10 10\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M1.5 1l7 4-7 4z\"\/><\/svg> Run<\/span>\n      <\/button>\n      <button class=\"tile\" type=\"button\" data-action=\"xcode\">\n        <span class=\"chip\"><span class=\"gl\"><svg fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path stroke-linecap=\"round\" d=\"M9 6l-5 6 5 6M15 6l5 6-5 6\"\/><\/svg><\/span><span class=\"spin\" aria-hidden=\"true\"><\/span><\/span>\n        <span class=\"body\"><span class=\"t\">Launch Xcode<\/span><span class=\"s\">Open the full IDE on screen<\/span><\/span>\n        <span class=\"kc\"><svg viewBox=\"0 0 10 10\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M1.5 1l7 4-7 4z\"\/><\/svg> Run<\/span>\n      <\/button>\n      <button class=\"tile\" type=\"button\" data-action=\"sysinfo\">\n        <span class=\"chip\"><span class=\"gl\"><svg fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><rect x=\"3\" y=\"4\" width=\"18\" height=\"14\" rx=\"2\"\/><path stroke-linecap=\"round\" d=\"M7 9l3 2.5L7 14M12.5 14H17\"\/><\/svg><\/span><span class=\"spin\" aria-hidden=\"true\"><\/span><\/span>\n        <span class=\"body\"><span class=\"t\">Show System Info<\/span><span class=\"s\">Hardware specs via Terminal<\/span><\/span>\n        <span class=\"kc\"><svg viewBox=\"0 0 10 10\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M1.5 1l7 4-7 4z\"\/><\/svg> Run<\/span>\n      <\/button>\n      <button class=\"tile\" type=\"button\" data-action=\"reset\">\n        <span class=\"chip\"><span class=\"gl\"><svg fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" viewBox=\"0 0 24 24\"><path stroke-linecap=\"round\" d=\"M4 10a8 8 0 1014-4M4 4v6h6\"\/><\/svg><\/span><span class=\"spin\" aria-hidden=\"true\"><\/span><\/span>\n        <span class=\"body\"><span class=\"t\">Reset Desktop<\/span><span class=\"s\">Close everything, fresh start<\/span><\/span>\n        <span class=\"kc\"><svg viewBox=\"0 0 10 10\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M1.5 1l7 4-7 4z\"\/><\/svg> Run<\/span>\n      <\/button>\n    <\/div>\n\n    <!-- CTA-START -->\n    <section class=\"cta-panel\" aria-label=\"Get your own Mac\">\n      <h2>Ready for your own Mac?<\/h2>\n      <p>Get a private Mac Mini M4 with full admin control and DeskIn, our faster remote connection. Or read the FAQ first.<\/p>\n      <div class=\"cta-row\">\n        <a class=\"cta-rent\" href=\"https:\/\/rentamac.io\/pricing\/\">Rent a Mac<\/a>\n        <a class=\"cta-faq\" href=\"https:\/\/rentamac.io\/faq\/\">Read the FAQ<\/a>\n      <\/div>\n    <\/section>\n    <!-- CTA-END -->\n\n  <\/div>\n<\/div>\n<\/div>\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/@microsoft\/signalr@8\/dist\/browser\/signalr.min.js\"><\/script>\n<script type=\"text\/plain\" data-ramac=\"player\">DQovLyBFZGl0YWJsZSBTT1VSQ0UgZm9yIHRoZSBkZW1vIFdlYlJUQyBwbGF5ZXIuIFRoZSBwdWJsaXNoZWQgcGFnZSAocmVudGFtYWMtZGVtby5odG1sLCBhbmQgdGhlIFdvcmRQcmVzcw0KLy8gL2RlbW8gcGFnZSkgZG9lcyBOT1QgbG9hZCB0aGlzIGZpbGUgZGlyZWN0bHkg4oCUIGEgYmFzZTY0IGNvcHkgaXMgZW1iZWRkZWQgaW5zaWRlIHRoZQ0KLy8gPHNjcmlwdCB0eXBlPSJ0ZXh0L3BsYWluIiBkYXRhLXJhbWFjPSJwbGF5ZXIiPuKApjwvc2NyaXB0PiBibG9jayBvZiByZW50YW1hYy1kZW1vLmh0bWwgYW5kIGRlY29kZWQrZXZhbCdkDQovLyBhdCBydW50aW1lIGJ5IHRoZSBTVkcvZGV0YWlscyBib290IGxvYWRlci4gQWZ0ZXIgZWRpdGluZyB0aGlzIGZpbGUsIHJ1biBgYnVpbGQtZGVtby1wbGF5ZXIucHlgIHRvDQovLyByZS1lbmNvZGUgaXQgaW50byByZW50YW1hYy1kZW1vLmh0bWwsIHRoZW4gZGVwbG95IHRoYXQgSFRNTCB0byBXb3JkUHJlc3MuIE5ldmVyIGhhbmQtZWRpdCB0aGUgYmFzZTY0Lg0KKGZ1bmN0aW9uKCl7DQogIGlmICh3aW5kb3cuX19yYW1hY19yYW5fcGxheWVyKSByZXR1cm47DQogIHdpbmRvdy5fX3JhbWFjX3Jhbl9wbGF5ZXIgPSB0cnVlOw0KICB2YXIgQ09ORklHID0gew0KICAgIHNyczogImh0dHA6Ly9zcnMtZGVtby1yZW50YW1hYy5nZXJtYW55d2VzdGNlbnRyYWwuYXp1cmVjb250YWluZXIuaW86MTk4NSIsDQogICAgYXBwOiAibGl2ZSIsDQogICAgc3RyZWFtOiAiY2FtIiwNCiAgICBiYWNrZW5kOiAiaHR0cHM6Ly9hcGkucmVudGFtYWMuaW8iDQogIH07DQogIHZhciBDT09MRE9XTl9NUyA9IDEwMDAwOw0KICAvLyBUaGUgT29rbGEgc3BlZWQgdGVzdCB0YWtlcyB+MjBzIHRvIGFjdHVhbGx5IHJ1biwgYW5kIHRoZSBORVhUIGFjdGlvbiBzdGFydHMgYnkga2lsbGluZyB0aGUgZGVtbyBhcHBzDQogIC8vIChraWxsYWxsIFNwZWVkdGVzdCkg4oCUIHNvIGEgMTBzIGdhdGUgd291bGQgbGV0IHNvbWVvbmUgY3V0IHRoZSB0ZXN0IG9mZiBtaWQtcnVuIGJlZm9yZSB0aGUgcmVzdWx0IHNob3dzLg0KICAvLyBLZWVwIHRoZSBidXR0b25zIChhbmQgdGhlIHBlci1NYWMgY29tbWFuZCBnYXRlKSBsb2NrZWQgMjBzIGFmdGVyIGEgc3BlZWR0ZXN0IHNvIGl0IGNhbiBmaW5pc2guDQogIHZhciBBQ1RJT05fQ09PTERPV05fTVMgPSB7IHNwZWVkdGVzdDogMjAwMDAgfTsNCiAgZnVuY3Rpb24gY29vbGRvd25Gb3IoYSl7IHJldHVybiBBQ1RJT05fQ09PTERPV05fTVNbYV0gfHwgQ09PTERPV05fTVM7IH0NCiAgdmFyIExBQkVMUyA9IHsgc2ltdWxhdG9yOiJ0aGUgaU9TIFNpbXVsYXRvciIsIHNwZWVkdGVzdDoiYSBzcGVlZHRlc3QiLCBjbGF1ZGU6InRoZSBDbGF1ZGUgYXBwIiwgeGNvZGU6Ilhjb2RlIiwgc3lzaW5mbzoidGhlIHN5c3RlbSBpbmZvIiwgcmVzZXQ6ImEgZGVza3RvcCByZXNldCIgfTsNCg0KICB2YXIgJCA9IGZ1bmN0aW9uKGlkKXsgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsgfTsNCiAgdmFyIHZpZGVvPSQoInJsLXZpZGVvIiksIG92ZXJsYXk9JCgicmwtb3ZlcmxheSIpLCBvdkJpZz0kKCJybC1vdi1iaWciKSwgb3ZTbWFsbD0kKCJybC1vdi1zbWFsbCIpLCBwYXVzZWRPdj0kKCJybC1wYXVzZWQiKTsNCiAgdmFyIGlzbGFuZD0kKCJybC1pc2xhbmQiKSwgd29yZD0kKCJybC13b3JkIiksIG1zZz0kKCJybC1tc2ciKSwgbGluZT0kKCJybC1saW5lIiksIHRpbGVzRWw9JCgicmwtdGlsZXMiKTsNCg0KICAvKiAtLS0tLS0tLS0tIGlzbGFuZDogcmVzdHMgYXQgTElWRSwgZXhwYW5kcyB0byBzcGVhaywgY29sbGFwc2VzIC0tLS0tLS0tLS0gKi8NCiAgdmFyIG1zZ1RpbWVyPW51bGw7DQogIGZ1bmN0aW9uIHNwZWFrKGh0bWwsIG1zKXsNCiAgICBpZighbXMpew0KICAgICAgdmFyIHdvcmRzPShodG1sLnJlcGxhY2UoLzxbXj5dKz4vZywiIikuc3BsaXQoL1xzKy8pLmxlbmd0aCk7DQogICAgICBtcyA9IDMwMDAgKyBNYXRoLmNlaWwod29yZHMvMykqMTAwMDsNCiAgICB9DQogICAgbXNnLmlubmVySFRNTCA9IGh0bWw7DQogICAgaXNsYW5kLmNsYXNzTGlzdC5hZGQoImV4cGFuZGVkIik7DQogICAgaWYobXNnVGltZXIpIGNsZWFyVGltZW91dChtc2dUaW1lcik7DQogICAgbXNnVGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7IGlzbGFuZC5jbGFzc0xpc3QucmVtb3ZlKCJleHBhbmRlZCIpOyB9LCBtcyk7DQogIH0NCiAgZnVuY3Rpb24gc2V0U3RhdGUoc3RhdGUpew0KICAgIGlzbGFuZC5zZXRBdHRyaWJ1dGUoImRhdGEtc3RhdGUiLCBzdGF0ZSk7DQogICAgd29yZC50ZXh0Q29udGVudCA9IHN0YXRlPT09ImxpdmUiID8gIkxpdmUiIDogc3RhdGU9PT0iY29ubmVjdGluZyIgPyAiQ29ubmVjdGluZyIgOiBzdGF0ZT09PSJwYXVzZWQiID8gIlBhdXNlZCIgOiAiT2ZmbGluZSI7DQogIH0NCg0KICBmdW5jdGlvbiBzaG93T3ZlcmxheShiaWcsIHNtYWxsKXsgb3ZCaWcudGV4dENvbnRlbnQ9YmlnOyBvdlNtYWxsLnRleHRDb250ZW50PXNtYWxsfHwiIjsgb3ZlcmxheS5jbGFzc0xpc3QucmVtb3ZlKCJoaWRkZW4iKTsgfQ0KICBmdW5jdGlvbiBoaWRlT3ZlcmxheSgpeyBvdmVybGF5LmNsYXNzTGlzdC5hZGQoImhpZGRlbiIpOyB9DQoNCiAgLyogLS0tLS0tLS0tLSBwcmVzZW5jZSAvIHRpbGVzIC0tLS0tLS0tLS0gKi8NCiAgdmFyIGFnZW50T25saW5lPWZhbHNlLCBzdHJlYW1VcD1mYWxzZSwgaWRsZVBhdXNlZD1mYWxzZTsNCiAgZnVuY3Rpb24gcmVmcmVzaFRpbGVzKCl7DQogICAgdmFyIGJsb2NrZWQgPSBpZGxlUGF1c2VkIHx8ICFhZ2VudE9ubGluZSB8fCBEYXRlLm5vdygpIDwgY29vbGRvd25VbnRpbDsNCiAgICB0aWxlc0VsLmNsYXNzTGlzdC50b2dnbGUoImNvb2xpbmciLCBEYXRlLm5vdygpIDwgY29vbGRvd25VbnRpbCk7DQogICAgdGlsZXNFbC5jbGFzc0xpc3QudG9nZ2xlKCJwYXVzZWQiLCBpZGxlUGF1c2VkIHx8ICFhZ2VudE9ubGluZSk7DQogICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbCh0aWxlc0VsLnF1ZXJ5U2VsZWN0b3JBbGwoIi50aWxlIiksIGZ1bmN0aW9uKGIpew0KICAgICAgYi5zZXRBdHRyaWJ1dGUoImFyaWEtZGlzYWJsZWQiLCBibG9ja2VkID8gInRydWUiIDogImZhbHNlIik7DQogICAgfSk7DQogIH0NCiAgZnVuY3Rpb24gc2V0UHJlc2VuY2Uob25saW5lKXsNCiAgICB2YXIgd2FzID0gYWdlbnRPbmxpbmU7DQogICAgYWdlbnRPbmxpbmUgPSAhIW9ubGluZTsNCiAgICBpc2xhbmQuY2xhc3NMaXN0LnRvZ2dsZSgicGF1c2VkIiwgIWFnZW50T25saW5lKTsNCiAgICBpZighYWdlbnRPbmxpbmUgJiYgd2FzKSBzcGVhaygiQWN0aW9ucyBhcmUgcGF1c2VkIG9uIHRoaXMgTWFjIHJpZ2h0IG5vdy4iKTsNCiAgICByZWZyZXNoVGlsZXMoKTsNCiAgfQ0KDQogIC8qIC0tLS0tLS0tLS0gc2hhcmVkIGNvb2xkb3duOiBhIDJweCBsaW5lIHRoYXQgZXhpc3RzIG9ubHkgd2hpbGUgZHJhaW5pbmcgLS0tLS0tLS0tLSAqLw0KICB2YXIgS0NfSFRNTCA9ICc8c3ZnIHZpZXdCb3g9IjAgMCAxMCAxMCIgZmlsbD0iY3VycmVudENvbG9yIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHBhdGggZD0iTTEuNSAxbDcgNC03IDR6Ii8+PC9zdmc+IFJ1bic7DQogIHZhciBjb29sZG93blVudGlsID0gMCwgY29vbGRvd25TcGFuID0gQ09PTERPV05fTVMsIHJhZk9uID0gZmFsc2UsIGNkS2MgPSBudWxsOw0KICBmdW5jdGlvbiByZXN0b3JlS2MoKXsNCiAgICBpZihjZEtjKXsgY2RLYy5pbm5lckhUTUwgPSBLQ19IVE1MOyBjZEtjLmNsYXNzTGlzdC5yZW1vdmUoImNvdW50Iik7IGNkS2MgPSBudWxsOyB9DQogIH0NCiAgZnVuY3Rpb24gcGFpbnRDb29sZG93bigpew0KICAgIHZhciBsZWZ0ID0gY29vbGRvd25VbnRpbCAtIERhdGUubm93KCk7DQogICAgaWYobGVmdCA8PSAwKXsgbGluZS5zdHlsZS53aWR0aD0iMCUiOyByYWZPbj1mYWxzZTsgcmVzdG9yZUtjKCk7IHJlZnJlc2hUaWxlcygpOyByZXR1cm47IH0NCiAgICBsaW5lLnN0eWxlLndpZHRoID0gKGxlZnQgLyBjb29sZG93blNwYW4gKiAxMDApICsgIiUiOw0KICAgIGlmKGNkS2MpeyBjZEtjLmNsYXNzTGlzdC5hZGQoImNvdW50Iik7IGNkS2MudGV4dENvbnRlbnQgPSBNYXRoLmNlaWwobGVmdC8xMDAwKSArICJzIjsgfQ0KICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShwYWludENvb2xkb3duKTsNCiAgfQ0KICBmdW5jdGlvbiBzdGFydENvb2xkb3duKG1zKXsNCiAgICBjb29sZG93blNwYW4gPSBtcyB8fCBDT09MRE9XTl9NUzsNCiAgICBjb29sZG93blVudGlsID0gRGF0ZS5ub3coKSArIGNvb2xkb3duU3BhbjsNCiAgICBsaW5lLnN0eWxlLndpZHRoID0gIjEwMCUiOw0KICAgIHJlZnJlc2hUaWxlcygpOw0KICAgIGlmKCFyYWZPbil7IHJhZk9uPXRydWU7IHJlcXVlc3RBbmltYXRpb25GcmFtZShwYWludENvb2xkb3duKTsgfQ0KICB9DQoNCiAgLyogLS0tLS0tLS0tLSBhY3Rpb25zIC0tLS0tLS0tLS0gKi8NCiAgLy8gVGlsZSBzdGF0ZSBpcyBkcml2ZW4gYnkgdGhlIFNpZ25hbFIgQ29tbWFuZFN0YXR1cyBzdHJlYW0gc28gRVZFUlkgdmlld2VyIGNvbnZlcmdlcyBvbiB0aGUgc2FtZSBwaWN0dXJlOg0KICAvLyBleGFjdGx5IG9uZSB0aWxlIGlzICJydW5uaW5nIiAobGF1bmNoaW5nKSBvciAiYWN0aXZlIiAob24gc2NyZWVuIG5vdykgYXQgYSB0aW1lLiBUaGlzIGlzIHdoYXQgc3RvcHMgYQ0KICAvLyB0aWxlIHRoYXQgYW5vdGhlciB2aWV3ZXIgbGVmdCBtaWQtcnVuIGZyb20gc3Bpbm5pbmcgZm9yZXZlciBvbiB5b3VyIHNjcmVlbi4NCiAgdmFyIHBlbmRpbmdNaW5lID0gbnVsbCwgYWN0aXZlQWN0aW9uID0gbnVsbDsNCiAgZnVuY3Rpb24gdGlsZUZvcihhKXsgcmV0dXJuIHRpbGVzRWwucXVlcnlTZWxlY3RvcignLnRpbGVbZGF0YS1hY3Rpb249IicgKyBhICsgJyJdJyk7IH0NCiAgZnVuY3Rpb24gY2xlYXJUaWxlU3RhdGVzKCl7DQogICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbCh0aWxlc0VsLnF1ZXJ5U2VsZWN0b3JBbGwoIi50aWxlLnJ1bm5pbmcsIC50aWxlLmFjdGl2ZSIpLCBmdW5jdGlvbihiKXsNCiAgICAgIGIuY2xhc3NMaXN0LnJlbW92ZSgicnVubmluZyIpOyBiLmNsYXNzTGlzdC5yZW1vdmUoImFjdGl2ZSIpOw0KICAgIH0pOw0KICB9DQogIGZ1bmN0aW9uIHNldFJ1bm5pbmcoYSl7IGNsZWFyVGlsZVN0YXRlcygpOyB2YXIgdCA9IHRpbGVGb3IoYSk7IGlmKHQpIHQuY2xhc3NMaXN0LmFkZCgicnVubmluZyIpOyB9DQogIGZ1bmN0aW9uIHNldEFjdGl2ZShhKXsgY2xlYXJUaWxlU3RhdGVzKCk7IGFjdGl2ZUFjdGlvbiA9IGE7IHZhciB0ID0gdGlsZUZvcihhKTsgaWYodCkgdC5jbGFzc0xpc3QuYWRkKCJhY3RpdmUiKTsgfQ0KICAvLyBBIGJyaWVmIHRvb2x0aXAgYWJvdmUgYSB0aWxlIHdoZW4gQU5PVEhFUiB2aWV3ZXIgdHJpZ2dlcnMgaXQsIHNvIHlvdSBjYW4gdGVsbCB0aGVpciBhY3Rpb24gZnJvbSB5b3VyIG93bi4NCiAgLy8gQ1NTICgudGlsZS50aXApIGZhZGVzIGl0IGluL291dCBvdmVyIH4zLjJzOyB3ZSByZXN0YXJ0IHRoZSBhbmltYXRpb24gdmlhIGEgcmVmbG93IHNvIGl0IHJlcGxheXMgZXZlbiB3aGVuDQogIC8vIHRoZSBzYW1lIHRpbGUgZmlyZXMgdHdpY2UgaW4gYSByb3cuDQogIHZhciB0aXBUaW1lciA9IG51bGw7DQogIGZ1bmN0aW9uIHNob3dPdGhlclRpcChhKXsNCiAgICB2YXIgdCA9IHRpbGVGb3IoYSk7IGlmKCF0KSByZXR1cm47DQogICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbCh0aWxlc0VsLnF1ZXJ5U2VsZWN0b3JBbGwoIi50aWxlLnRpcCIpLCBmdW5jdGlvbihiKXsgYi5jbGFzc0xpc3QucmVtb3ZlKCJ0aXAiKTsgYi5yZW1vdmVBdHRyaWJ1dGUoImRhdGEtdGlwIik7IH0pOw0KICAgIHQuc2V0QXR0cmlidXRlKCJkYXRhLXRpcCIsICJUcmlnZ2VyZWQgYnkgYW5vdGhlciB2aWV3ZXIiKTsNCiAgICB2b2lkIHQub2Zmc2V0V2lkdGg7ICAgICAgICAgICAgICAgICAgICAvLyBmb3JjZSByZWZsb3cgc28gdGhlIENTUyBhbmltYXRpb24gcmVwbGF5cw0KICAgIHQuY2xhc3NMaXN0LmFkZCgidGlwIik7DQogICAgaWYodGlwVGltZXIpIGNsZWFyVGltZW91dCh0aXBUaW1lcik7DQogICAgdGlwVGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7IHQuY2xhc3NMaXN0LnJlbW92ZSgidGlwIik7IHQucmVtb3ZlQXR0cmlidXRlKCJkYXRhLXRpcCIpOyB9LCAzMjAwKTsNCiAgfQ0KICB0aWxlc0VsLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgZnVuY3Rpb24oZSl7DQogICAgdmFyIGJ0biA9IGUudGFyZ2V0LmNsb3Nlc3QoIi50aWxlIik7DQogICAgaWYoIWJ0bikgcmV0dXJuOw0KICAgIHZhciBhY3Rpb24gPSBidG4uZ2V0QXR0cmlidXRlKCJkYXRhLWFjdGlvbiIpOw0KICAgIGlmKGlkbGVQYXVzZWQpIHJldHVybjsgICAvLyBzdHJlYW0gaXMgaWRsZS1wYXVzZWQ7IHRoZSBidXR0b25zIGFyZSBkaXNhYmxlZCB1bnRpbCB0aGUgdXNlciB0YXBzIHRvIHJlc3VtZQ0KICAgIGlmKERhdGUubm93KCkgPCBjb29sZG93blVudGlsKXsNCiAgICAgIHNwZWFrKCJOZXh0IGFjdGlvbiBpbiAiICsgTWF0aC5jZWlsKChjb29sZG93blVudGlsLURhdGUubm93KCkpLzEwMDApICsgInMuIiwgMzAwMCk7DQogICAgICByZXR1cm47DQogICAgfQ0KICAgIGlmKCFhZ2VudE9ubGluZSl7DQogICAgICBzcGVhaygiVGhlIE1hYyBpcyBub3QgYWNjZXB0aW5nIGFjdGlvbnMgcmlnaHQgbm93LiIpOw0KICAgICAgcmV0dXJuOw0KICAgIH0NCiAgICByZXN0b3JlS2MoKTsNCiAgICBjZEtjID0gYnRuLnF1ZXJ5U2VsZWN0b3IoIi5rYyIpOw0KICAgIHN0YXJ0Q29vbGRvd24oY29vbGRvd25Gb3IoYWN0aW9uKSk7DQogICAgYnRuLmNsYXNzTGlzdC5yZW1vdmUoImFjdGl2ZSIpOw0KICAgIGJ0bi5jbGFzc0xpc3QuYWRkKCJydW5uaW5nIik7ICAgICAgICAgIC8vIGluc3RhbnQgbG9jYWwgZmVlZGJhY2s7IHRoZSAic2VudCIgc3RhdHVzIHRoZW4gcmVjb25jaWxlcyBldmVyeSBjbGllbnQNCiAgICBwZW5kaW5nTWluZSA9IHsgYWN0aW9uOiBhY3Rpb24sIHVudGlsOiBEYXRlLm5vdygpICsgMjAwMDAgfTsNCiAgICBzcGVhaygiPGI+WW91OjwvYj4gcnVubmluZyAiICsgTEFCRUxTW2FjdGlvbl0gKyAiLi4uIik7DQogICAgZmV0Y2goQ09ORklHLmJhY2tlbmQgKyAiL2FwaS9kZW1vLXN0cmVhbS9hY3Rpb25zLyIgKyBhY3Rpb24sIHsgbWV0aG9kOiJQT1NUIiB9KQ0KICAgICAgLnRoZW4oZnVuY3Rpb24ocil7DQogICAgICAgIGlmKHIuc3RhdHVzID09PSA0Mjkpew0KICAgICAgICAgIHNwZWFrKCJUaGUgTWFjIGlzIG5vdCBhY2NlcHRpbmcgYWN0aW9ucyByaWdodCBub3cg4oCUIHlvdSd2ZSBtYWRlIHRvbyBtYW55IGFjdGlvbnMgaW4gdGhlIHBhc3QgZmV3IG1pbnV0ZXMuIEl0IGZyZWVzIHVwIHNob3J0bHkuIik7DQogICAgICAgICAgYnRuLmNsYXNzTGlzdC5yZW1vdmUoInJ1bm5pbmciKTsgcmV0dXJuOw0KICAgICAgICB9DQogICAgICAgIGlmKCFyLm9rKXsNCiAgICAgICAgICByLmpzb24oKS50aGVuKGZ1bmN0aW9uKGopew0KICAgICAgICAgICAgdmFyIG09KGouZXJyb3JzJiZqLmVycm9yc1swXSl8fGouZGV0YWlsfHxqLnRpdGxlfHwoIkVycm9yICIrci5zdGF0dXMpOw0KICAgICAgICAgICAgc3BlYWsobSk7DQogICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24oKXsgc3BlYWsoIkVycm9yICIgKyByLnN0YXR1cyk7IH0pOw0KICAgICAgICAgIGNvb2xkb3duVW50aWw9MDsgYnRuLmNsYXNzTGlzdC5yZW1vdmUoInJ1bm5pbmciKTsgcmVmcmVzaFRpbGVzKCk7IHJldHVybjsNCiAgICAgICAgfQ0KICAgICAgICBzcGVhaygiPGI+WW91OjwvYj4gcnVubmluZyAiICsgTEFCRUxTW2FjdGlvbl0gKyAiLCB3YXRjaCB0aGUgc2NyZWVuLiIpOw0KICAgICAgfSkNCiAgICAgIC5jYXRjaChmdW5jdGlvbigpew0KICAgICAgICBzcGVhaygiQ291bGQgbm90IHJlYWNoIHRoZSBkZW1vIGJhY2tlbmQuIik7DQogICAgICAgIGNvb2xkb3duVW50aWw9MDsgYnRuLmNsYXNzTGlzdC5yZW1vdmUoInJ1bm5pbmciKTsgcmVmcmVzaFRpbGVzKCk7DQogICAgICB9KTsNCiAgfSk7DQoNCiAgLyogLS0tLS0tLS0tLSBTaWduYWxSIC0tLS0tLS0tLS0gKi8NCiAgZnVuY3Rpb24gY29ubmVjdEh1Yigpew0KICAgIGlmKHR5cGVvZiBzaWduYWxSID09PSAidW5kZWZpbmVkIil7IHNldFByZXNlbmNlKGZhbHNlKTsgcmV0dXJuOyB9DQogICAgdmFyIGNvbm4gPSBuZXcgc2lnbmFsUi5IdWJDb25uZWN0aW9uQnVpbGRlcigpDQogICAgICAud2l0aFVybChDT05GSUcuYmFja2VuZCArICIvaHVicy9kZW1vLXN0cmVhbSIpDQogICAgICAud2l0aEF1dG9tYXRpY1JlY29ubmVjdCgpDQogICAgICAuYnVpbGQoKTsNCiAgICBjb25uLm9uKCJBZ2VudFByZXNlbmNlIiwgZnVuY3Rpb24ob25saW5lKXsgc2V0UHJlc2VuY2UoISFvbmxpbmUpOyB9KTsNCiAgICBjb25uLm9uKCJDb21tYW5kU3RhdHVzIiwgZnVuY3Rpb24ocyl7DQogICAgICB2YXIgYWN0aW9uID0gcy5hY3Rpb24gIT0gbnVsbCA\/IHMuYWN0aW9uIDogcy5BY3Rpb247DQogICAgICB2YXIgc3RhdHVzID0gcy5zdGF0dXMgIT0gbnVsbCA\/IHMuc3RhdHVzIDogcy5TdGF0dXM7DQogICAgICB2YXIgbWluZSA9IHBlbmRpbmdNaW5lICYmIHBlbmRpbmdNaW5lLmFjdGlvbiA9PT0gYWN0aW9uICYmIERhdGUubm93KCkgPCBwZW5kaW5nTWluZS51bnRpbDsNCiAgICAgIHZhciBsYWJlbCA9IExBQkVMU1thY3Rpb25dIHx8IGFjdGlvbjsNCiAgICAgIHZhciBzdCA9IChzdGF0dXMgfHwgIiIpLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKTsNCiAgICAgIHZhciBpc0ZhaWwgPSBzdC5pbmRleE9mKCJmYWlsIik+PTAgfHwgc3QuaW5kZXhPZigiZXJyb3IiKT49MDsNCiAgICAgIC8vIFRoZSBNYWMgYWdlbnQgb25seSBldmVyIGFja3MgInN0YXJ0ZWQiIChpdCBsYXVuY2hlcyBhbiBhcHAgdGhhdCB0aGVuIHN0YXlzIG9uIHNjcmVlbikg4oCUIHRoZXJlIGlzIG5vDQogICAgICAvLyAiZG9uZSIuIFNvICJzdGFydGVkIi9hbnkgc3VjY2VzcyBtZWFucyAidGhpcyBhY3Rpb24gaXMgbm93IHdoYXQncyBvbiBzY3JlZW4iOiBtYXJrIGl0cyB0aWxlIHNlbGVjdGVkLg0KICAgICAgdmFyIGlzVXAgPSAhaXNGYWlsICYmIChzdC5pbmRleE9mKCJzdGFydCIpPj0wIHx8IHN0LmluZGV4T2YoImNvbXBsZXRlIik+PTAgfHwgc3QuaW5kZXhPZigiZG9uZSIpPj0wIHx8IHN0LmluZGV4T2YoInN1Y2Nlc3MiKT49MCk7DQoNCiAgICAgIC8vIFNoYXJlZCAxMHMgZ2FwOiBldmVyeSB2aWV3ZXIgc3RhcnRzIGNvb2xpbmcgdGhlIG1vbWVudCB0aGUgYmFja2VuZCBhY2NlcHRzIGEgY29tbWFuZCAoInNlbnQiKSwgbm90DQogICAgICAvLyBqdXN0IHRoZSBjbGlja2VyLCBzbyBubyBvbmUgZmlyZXMgYW4gYWN0aW9uIHRoZSBiYWNrZW5kIHdvdWxkIG9ubHkgcmVqZWN0LiBBIG5vbi1taW5lICJzZW50IiBpcyBhbHNvDQogICAgICAvLyBleGFjdGx5IHRoZSAiYW5vdGhlciB2aWV3ZXIganVzdCB0cmlnZ2VyZWQgdGhpcyBidXR0b24iIG1vbWVudCwgc28gZmxhc2ggdGhlIHRvb2x0aXAgdGhlbi4NCiAgICAgIGlmKCFpc0ZhaWwgJiYgIWlzVXAgJiYgIW1pbmUpeyBzdGFydENvb2xkb3duKGNvb2xkb3duRm9yKGFjdGlvbikpOyBzaG93T3RoZXJUaXAoYWN0aW9uKTsgfQ0KDQogICAgICAvLyByZXNldCByZXR1cm5zIHRoZSBNYWMgdG8gYSBjbGVhbiBkZXNrdG9wIOKAlCBub3RoaW5nIGlzICJvbiBzY3JlZW4iLCBzbyBjbGVhciBldmVyeSB0aWxlIG9uIGFsbCBjbGllbnRzLg0KICAgICAgaWYoYWN0aW9uID09PSAicmVzZXQiKXsNCiAgICAgICAgY2xlYXJUaWxlU3RhdGVzKCk7IGFjdGl2ZUFjdGlvbiA9IG51bGw7DQogICAgICAgIGlmKGlzVXApIHNwZWFrKChtaW5lID8gIjxiPllvdTo8L2I+ICIgOiAiIikgKyAiZGVza3RvcCByZXNldCB0byBhIGNsZWFuIHNjcmVlbi4iKTsNCiAgICAgICAgcmV0dXJuOw0KICAgICAgfQ0KICAgICAgaWYoaXNGYWlsKXsNCiAgICAgICAgdmFyIGZ0ID0gdGlsZUZvcihhY3Rpb24pOyBpZihmdCl7IGZ0LmNsYXNzTGlzdC5yZW1vdmUoInJ1bm5pbmciKTsgZnQuY2xhc3NMaXN0LnJlbW92ZSgiYWN0aXZlIik7IH0NCiAgICAgICAgaWYoYWN0aXZlQWN0aW9uID09PSBhY3Rpb24pIGFjdGl2ZUFjdGlvbiA9IG51bGw7DQogICAgICAgIHNwZWFrKGxhYmVsICsgIiBoaXQgYSBzbmFnIG9uIHRoZSBNYWMuIFRyeSBhbm90aGVyIGFjdGlvbi4iKTsNCiAgICAgICAgcmV0dXJuOw0KICAgICAgfQ0KICAgICAgaWYoaXNVcCl7DQogICAgICAgIC8vIExhdW5jaGVkOiB0aGlzIHRpbGUgYmVjb21lcyB0aGUgc2VsZWN0ZWQvZm9jdXNlZCBjYXJkIG9uIEVWRVJZIHZpZXdlciwgY2xlYXJpbmcgdGhlIHByZXZpb3VzIG9uZS4NCiAgICAgICAgc2V0QWN0aXZlKGFjdGlvbik7DQogICAgICAgIHNwZWFrKChtaW5lID8gIjxiPllvdTo8L2I+ICIgOiAiIikgKyBsYWJlbCArICIgaXMgb24gdGhlIHNjcmVlbiBub3cuIik7DQogICAgICAgIHJldHVybjsNCiAgICAgIH0NCiAgICAgIC8vIGluaXRpYWwgInNlbnQiOiBhY2NlcHRlZCBhbmQgbGF1bmNoaW5nLiBTaG93IGl0IGxvYWRpbmcgb24gZXZlcnkgY2xpZW50IOKAlCB0aGlzIGlzIGFsc28gd2hhdCBjbGVhcnMgYQ0KICAgICAgLy8gdGlsZSBhIGRpZmZlcmVudCB2aWV3ZXIgbGVmdCBzcGlubmluZywgc2luY2UgdGhlaXIgYWN0aW9uIGlzIG5vIGxvbmdlciB0aGUgY3VycmVudCBvbmUuDQogICAgICBzZXRSdW5uaW5nKGFjdGlvbik7DQogICAgICBzcGVhayhtaW5lID8gIjxiPllvdTo8L2I+IHJ1bm5pbmcgIiArIGxhYmVsICsgIi4uLiIgOiAiU29tZW9uZSBpcyBydW5uaW5nICIgKyBsYWJlbCArICIuLi4iKTsNCiAgICB9KTsNCiAgICBjb25uLnN0YXJ0KCkuY2F0Y2goZnVuY3Rpb24oKXsgc2V0UHJlc2VuY2UoZmFsc2UpOyB9KTsNCiAgfQ0KICBmdW5jdGlvbiBpbml0U3RhdHVzKCl7DQogICAgZmV0Y2goQ09ORklHLmJhY2tlbmQgKyAiL2FwaS9kZW1vLXN0cmVhbS9zdGF0dXMiKQ0KICAgICAgLnRoZW4oZnVuY3Rpb24ocil7IHJldHVybiByLm9rID8gci5qc29uKCkgOiBudWxsOyB9KQ0KICAgICAgLnRoZW4oZnVuY3Rpb24oail7DQogICAgICAgIGlmKCFqKSByZXR1cm47DQogICAgICAgIHZhciB2ID0gai52YWx1ZSAhPSBudWxsID8gai52YWx1ZSA6IGo7DQogICAgICAgIHNldFByZXNlbmNlKCEhKHYuYWdlbnRPbmxpbmUgIT0gbnVsbCA\/IHYuYWdlbnRPbmxpbmUgOiB2LkFnZW50T25saW5lKSk7DQogICAgICAgIHZhciBjZCA9ICh2LmNvb2xkb3duU2Vjb25kcyAhPSBudWxsID8gdi5jb29sZG93blNlY29uZHMgOiB2LkNvb2xkb3duU2Vjb25kcykgfHwgMDsNCiAgICAgICAgaWYoY2QgPiAwKSBzdGFydENvb2xkb3duKGNkICogMTAwMCk7DQogICAgICAgIC8vIExhdGUtam9pbmVyczogc2hvdyB0aGUgdGlsZSB0aGF0J3MgY3VycmVudGx5IG9uIHNjcmVlbiBhcyBzZWxlY3RlZCwgZXZlbiB0aG91Z2ggdGhleSBtaXNzZWQgdGhlIGNsaWNrLg0KICAgICAgICB2YXIgYWN0ID0gdi5hY3RpdmVBY3Rpb24gIT0gbnVsbCA\/IHYuYWN0aXZlQWN0aW9uIDogdi5BY3RpdmVBY3Rpb247DQogICAgICAgIGlmKGFjdCkgc2V0QWN0aXZlKGFjdCk7DQogICAgICB9KQ0KICAgICAgLmNhdGNoKGZ1bmN0aW9uKCl7fSk7DQogIH0NCg0KICAvKiAtLS0tLS0tLS0tIFdIRVAgcGxheWVyIC0tLS0tLS0tLS0gKi8NCiAgdmFyIHBjPW51bGwsIHJldHJ5VGltZXI9bnVsbCwgbGFzdFQ9MCwgbGFzdEFkdmFuY2U9MDsNCiAgZnVuY3Rpb24gdGVhcmRvd25QYygpeyBpZihwYyl7IHRyeXtwYy5jbG9zZSgpO31jYXRjaChlKXt9IHBjPW51bGw7IH0gfQ0KICBmdW5jdGlvbiByZWxheURvd24oKXsNCiAgICBpZihpZGxlUGF1c2VkKSByZXR1cm47ICAgLy8gaWRsZS1wYXVzZWQgb24gcHVycG9zZSDigJQgZG9uJ3Qgc2hvdyB0aGUgcmVjb25uZWN0IG92ZXJsYXkgb3IgcmVzdGFydCB0aGUgbG9vcA0KICAgIHN0cmVhbVVwPWZhbHNlOyB0ZWFyZG93blBjKCk7DQogICAgc2V0U3RhdGUoIm9mZmxpbmUiKTsNCiAgICBzaG93T3ZlcmxheSgiUmVjb25uZWN0aW5nIHRvIHRoZSBNYWMgbWluaS4uLiIsICJUaGlzIG1hY2hpbmUgcnVucyAyNC83LiBPdXRhZ2VzIGFyZSByYXJlIGFuZCBicmllZi4iKTsNCiAgICBpZighcmV0cnlUaW1lcikgcmV0cnlUaW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKXsgcmV0cnlUaW1lcj1udWxsOyBzdGFydFdoZXAodHJ1ZSk7IH0sIDUwMDApOw0KICB9DQogIGZ1bmN0aW9uIHN0YXJ0V2hlcChpc1JldHJ5KXsNCiAgICB0ZWFyZG93blBjKCk7IHN0cmVhbVVwPWZhbHNlOw0KICAgIGlmKCFpc1JldHJ5KXsgc2V0U3RhdGUoImNvbm5lY3RpbmciKTsgc2hvd092ZXJsYXkoIkNvbm5lY3RpbmcgdG8gdGhlIGxpdmUgc3RyZWFtLi4uIiwiIik7IH0NCiAgICB2YXIgd2hlcCA9IENPTkZJRy5iYWNrZW5kICsgIi9hcGkvZGVtby1zdHJlYW0vd2hlcCI7DQogICAgdmFyIHRoaXNQYyA9IG5ldyBSVENQZWVyQ29ubmVjdGlvbih7IGljZVNlcnZlcnM6W3sgdXJsczoic3R1bjpzdHVuLmwuZ29vZ2xlLmNvbToxOTMwMiIgfV0gfSk7DQogICAgcGMgPSB0aGlzUGM7DQogICAgLy8gaU9TIFNhZmFyaS9XZWJLaXQgZG9lcyBOT1QgcmVsaWFibHkgaG9ub3IgdGhlIGxlZ2FjeSBjcmVhdGVPZmZlcih7b2ZmZXJUb1JlY2VpdmUqfSkgb3B0aW9ucywgc28gdGhlIG9mZmVyDQogICAgLy8gZW5kcyB1cCB3aXRoIG5vIHJlY2VpdmluZyBtLWxpbmVzLCB0aGUgbWVkaWEgbmV2ZXIgYXJyaXZlcywgYW5kIHRoZSBwYWdlIHNpdHMgc3R1Y2sgb24gIlJlY29ubmVjdGluZyAvDQogICAgLy8gT0ZGTElORSIg4oCUIHdoaWxlIENocm9tZS9BbmRyb2lkICh3aGljaCBkbyBob25vciB0aGUgbGVnYWN5IG9wdGlvbnMpIHdvcmsuIERlY2xhcmUgZXhwbGljaXQgcmVjdm9ubHkNCiAgICAvLyB0cmFuc2NlaXZlcnMgaW5zdGVhZCAodGhpcyBpcyB3aGF0IHRoZSBTUlMgcmVmZXJlbmNlIFdIRVAgcGxheWVyIGRvZXMsIGFuZCBpdCdzIGNyb3NzLWJyb3dzZXIgY29ycmVjdCkuDQogICAgdHJ5IHsgdGhpc1BjLmFkZFRyYW5zY2VpdmVyKCJ2aWRlbyIsIHsgZGlyZWN0aW9uOiJyZWN2b25seSIgfSk7IHRoaXNQYy5hZGRUcmFuc2NlaXZlcigiYXVkaW8iLCB7IGRpcmVjdGlvbjoicmVjdm9ubHkiIH0pOyB9IGNhdGNoKGUpe30NCiAgICB0aGlzUGMub250cmFjayA9IGZ1bmN0aW9uKGUpew0KICAgICAgaWYoIXZpZGVvLnNyY09iamVjdCkgdmlkZW8uc3JjT2JqZWN0ID0gZS5zdHJlYW1zWzBdOw0KICAgICAgLy8gaU9TIG9ubHkgYXV0b3BsYXlzIG11dGVkK2lubGluZSB2aWRlbzsgcmUtYXNzZXJ0IGl0IGFuZCByZXRyeSBvbmNlIGlmIHRoZSBmaXJzdCBwbGF5KCkgaXMgYmxvY2tlZC4NCiAgICAgIHZpZGVvLm11dGVkID0gdHJ1ZTsgdmlkZW8ucGxheXNJbmxpbmUgPSB0cnVlOyB2aWRlby5zZXRBdHRyaWJ1dGUoInBsYXlzaW5saW5lIiwiIik7DQogICAgICB2YXIgcCA9IHZpZGVvLnBsYXkoKTsgaWYocCAmJiBwLmNhdGNoKSBwLmNhdGNoKGZ1bmN0aW9uKCl7IHNldFRpbWVvdXQoZnVuY3Rpb24oKXsgdHJ5eyB2aWRlby5wbGF5KCk7IH1jYXRjaChfKXt9IH0sIDQwMCk7IH0pOw0KICAgIH07DQogICAgdGhpc1BjLm9uY29ubmVjdGlvbnN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKXsNCiAgICAgIGlmKHBjICE9PSB0aGlzUGMpIHJldHVybjsNCiAgICAgIGlmKHRoaXNQYy5jb25uZWN0aW9uU3RhdGUgPT09ICJjb25uZWN0ZWQiKXsNCiAgICAgICAgc3RyZWFtVXA9dHJ1ZTsgbGFzdFQ9dmlkZW8uY3VycmVudFRpbWU7IGxhc3RBZHZhbmNlPURhdGUubm93KCk7DQogICAgICAgIHNldFN0YXRlKCJsaXZlIik7IGhpZGVPdmVybGF5KCk7DQogICAgICB9IGVsc2UgaWYodGhpc1BjLmNvbm5lY3Rpb25TdGF0ZSA9PT0gImZhaWxlZCIpeyByZWxheURvd24oKTsgfQ0KICAgIH07DQogICAgdGhpc1BjLmNyZWF0ZU9mZmVyKCkNCiAgICAgIC50aGVuKGZ1bmN0aW9uKG9mZmVyKXsgcmV0dXJuIHRoaXNQYy5zZXRMb2NhbERlc2NyaXB0aW9uKG9mZmVyKS50aGVuKGZ1bmN0aW9uKCl7IHJldHVybiBvZmZlcjsgfSk7IH0pDQogICAgICAudGhlbihmdW5jdGlvbihvZmZlcil7DQogICAgICAgIHJldHVybiBmZXRjaCh3aGVwLCB7IG1ldGhvZDoiUE9TVCIsIGhlYWRlcnM6eyAiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vc2RwIiB9LCBib2R5OiBvZmZlci5zZHAgfSk7DQogICAgICB9KQ0KICAgICAgLnRoZW4oZnVuY3Rpb24ocmVzcCl7DQogICAgICAgIGlmKCFyZXNwLm9rKSB0aHJvdyBuZXcgRXJyb3IoIndoZXAgIiArIHJlc3Auc3RhdHVzKTsNCiAgICAgICAgcmV0dXJuIHJlc3AuanNvbigpOw0KICAgICAgfSkNCiAgICAgIC50aGVuKGZ1bmN0aW9uKGopew0KICAgICAgICB2YXIgc2RwID0gKGogJiYgdHlwZW9mIGogPT09ICJvYmplY3QiKSA\/IChqLnZhbHVlIHx8IGouVmFsdWUgfHwgIiIpIDogajsNCiAgICAgICAgaWYoIXNkcCkgdGhyb3cgbmV3IEVycm9yKCJlbXB0eSB3aGVwIGFuc3dlciIpOw0KICAgICAgICBpZihwYyA9PT0gdGhpc1BjKSByZXR1cm4gdGhpc1BjLnNldFJlbW90ZURlc2NyaXB0aW9uKHsgdHlwZToiYW5zd2VyIiwgc2RwOnNkcCB9KTsNCiAgICAgIH0pDQogICAgICAuY2F0Y2goZnVuY3Rpb24oKXsgaWYocGMgPT09IHRoaXNQYykgcmVsYXlEb3duKCk7IH0pOw0KICB9DQogIHNldEludGVydmFsKGZ1bmN0aW9uKCl7DQogICAgaWYoIXN0cmVhbVVwKSByZXR1cm47DQogICAgaWYodmlkZW8uY3VycmVudFRpbWUgPiBsYXN0VCArIDAuMDUpeyBsYXN0VD12aWRlby5jdXJyZW50VGltZTsgbGFzdEFkdmFuY2U9RGF0ZS5ub3coKTsgfQ0KICAgIGVsc2UgaWYoRGF0ZS5ub3coKSAtIGxhc3RBZHZhbmNlID4gNjAwMCl7IHJlbGF5RG93bigpOyB9DQogIH0sIDIwMDApOw0KDQogIC8qIC0tLS0tLS0tLS0gaWRsZSBhdXRvLXBhdXNlOiBkcm9wIHRoZSBzdHJlYW0gYWZ0ZXIgNjBzIG9mIG5vIGludGVyYWN0aW9uLCByZXN1bWUgb24gdGFwIC0tLS0tLS0tLS0gKi8NCiAgLy8gU3RyZWFtaW5nIHRvIGEgdGFiIG5vYm9keSBpcyB0b3VjaGluZyBqdXN0IGJ1cm5zIHJlbGF5IGJhbmR3aWR0aCwgc28gYWZ0ZXIgSURMRV9NUyB3aXRoIG5vIHVzZXIgaW5wdXQgd2UNCiAgLy8gdGVhciB0aGUgV2ViUlRDIHN0cmVhbSBkb3duLCBkaXNhYmxlIHRoZSBhY3Rpb24gYnV0dG9ucywgYW5kIHNob3cgYSB0YXAtdG8tcmVzdW1lIG92ZXJsYXkuIEFueSBwb2ludGVyL2tleS8NCiAgLy8gdG91Y2gvd2hlZWwgaW5wdXQgcmUtYXJtcyB0aGUgY291bnRkb3duOyBwYXNzaXZlIHdhdGNoaW5nIGRvZXMgTk9UIChvbmx5IHJlYWwgaW50ZXJhY3Rpb25zIHJlc2V0IGl0KS4NCiAgdmFyIElETEVfTVMgPSA2MDAwMCwgaWRsZVRpbWVyID0gbnVsbDsNCiAgZnVuY3Rpb24gc2hvd1BhdXNlZE92ZXJsYXkoKXsgaWYocGF1c2VkT3YpIHBhdXNlZE92LmNsYXNzTGlzdC5yZW1vdmUoImhpZGRlbiIpOyB9DQogIGZ1bmN0aW9uIGhpZGVQYXVzZWRPdmVybGF5KCl7IGlmKHBhdXNlZE92KSBwYXVzZWRPdi5jbGFzc0xpc3QuYWRkKCJoaWRkZW4iKTsgfQ0KICBmdW5jdGlvbiBwYXVzZVN0cmVhbSgpew0KICAgIGlmKGlkbGVQYXVzZWQpIHJldHVybjsNCiAgICBpZGxlUGF1c2VkID0gdHJ1ZTsNCiAgICBpZihpZGxlVGltZXIpeyBjbGVhclRpbWVvdXQoaWRsZVRpbWVyKTsgaWRsZVRpbWVyID0gbnVsbDsgfQ0KICAgIGlmKHJldHJ5VGltZXIpeyBjbGVhclRpbWVvdXQocmV0cnlUaW1lcik7IHJldHJ5VGltZXIgPSBudWxsOyB9ICAgLy8gc3RvcCBhbnkgcmVjb25uZWN0IGxvb3ANCiAgICBzdHJlYW1VcCA9IGZhbHNlOw0KICAgIHRlYXJkb3duUGMoKTsNCiAgICBpZih2aWRlbyl7IHRyeXsgdmlkZW8ucGF1c2UoKTsgfWNhdGNoKGUpe30gdmlkZW8uc3JjT2JqZWN0ID0gbnVsbDsgfQ0KICAgIGhpZGVPdmVybGF5KCk7ICAgICAgICAgICAgICAgICAvLyBjbGVhciBhbnkgY29ubmVjdGluZy9yZWNvbm5lY3Rpbmcgb3ZlcmxheSBmaXJzdA0KICAgIHNldFN0YXRlKCJwYXVzZWQiKTsNCiAgICBzaG93UGF1c2VkT3ZlcmxheSgpOw0KICAgIHJlZnJlc2hUaWxlcygpOyAgICAgICAgICAgICAgICAvLyBkaXNhYmxlcyB0aGUgYWN0aW9uIGJ1dHRvbnMNCiAgfQ0KICBmdW5jdGlvbiByZXN1bWVTdHJlYW0oKXsNCiAgICBpZighaWRsZVBhdXNlZCkgcmV0dXJuOw0KICAgIGlkbGVQYXVzZWQgPSBmYWxzZTsNCiAgICBoaWRlUGF1c2VkT3ZlcmxheSgpOw0KICAgIHJlZnJlc2hUaWxlcygpOw0KICAgIHN0YXJ0V2hlcChmYWxzZSk7ICAgICAgICAgICAgICAvLyByZWNvbm5lY3QgKHNob3dzICJDb25uZWN0aW5nLi4uIiB1bnRpbCBsaXZlKQ0KICAgIHJlc2V0SWRsZSgpOw0KICB9DQogIGZ1bmN0aW9uIHJlc2V0SWRsZSgpew0KICAgIGlmKGlkbGVQYXVzZWQpIHJldHVybjsgICAgICAgICAvLyBzdGF5cyBwYXVzZWQgdW50aWwgdGhlIHVzZXIgdGFwcyB0byByZXN1bWUNCiAgICBpZihpZGxlVGltZXIpIGNsZWFyVGltZW91dChpZGxlVGltZXIpOw0KICAgIGlkbGVUaW1lciA9IHNldFRpbWVvdXQocGF1c2VTdHJlYW0sIElETEVfTVMpOw0KICB9DQogIGlmKHBhdXNlZE92KXsNCiAgICBwYXVzZWRPdi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHJlc3VtZVN0cmVhbSk7DQogICAgcGF1c2VkT3YuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIGZ1bmN0aW9uKGUpew0KICAgICAgaWYoZS5rZXkgPT09ICJFbnRlciIgfHwgZS5rZXkgPT09ICIgIiB8fCBlLmtleSA9PT0gIlNwYWNlYmFyIil7IGUucHJldmVudERlZmF1bHQoKTsgcmVzdW1lU3RyZWFtKCk7IH0NCiAgICB9KTsNCiAgfQ0KICBbInBvaW50ZXJkb3duIiwia2V5ZG93biIsInRvdWNoc3RhcnQiLCJ3aGVlbCJdLmZvckVhY2goZnVuY3Rpb24oZXYpew0KICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoZXYsIHJlc2V0SWRsZSwgeyBwYXNzaXZlOnRydWUgfSk7DQogIH0pOw0KDQogIHJlZnJlc2hUaWxlcygpOw0KICBpbml0U3RhdHVzKCk7DQogIGNvbm5lY3RIdWIoKTsNCiAgc3RhcnRXaGVwKGZhbHNlKTsNCiAgcmVzZXRJZGxlKCk7DQoNCn0pKCk7DQo=<\/script>\n\n<svg style=\"position:absolute;width:0;height:0;overflow:hidden\" aria-hidden=\"true\" onload=\"if(!window.__ramac_boot_started){window.__ramac_boot_started=1;(function(){function d(t){var u=atob(t.replace(\/\\s+\/g,''));try{return new TextDecoder().decode(Uint8Array.from(u,function(c){return c.charCodeAt(0)}))}catch(e){return decodeURIComponent(escape(u))}}function b(n){var a=document.querySelectorAll('script[data-ramac]');for(var i=0;i<a.length;i++){var s=a[i],k='__ramac_ran_'+s.getAttribute('data-ramac');if(!window[k]){try{var f=document.createElement('script');f.textContent=d(s.textContent);document.body.appendChild(f);console.log('[ramac-boot] started '+s.getAttribute('data-ramac'));}catch(e){console.error('[ramac-boot]',e);}}}if(n<12)setTimeout(function(){b(n+1)},2000)}setTimeout(function(){b(0)},500)})()}\"><\/svg>\n<details style=\"display:none\" open ontoggle=\"if(!window.__ramac_boot_started){window.__ramac_boot_started=1;(function(){function d(t){var u=atob(t.replace(\/\\s+\/g,''));try{return new TextDecoder().decode(Uint8Array.from(u,function(c){return c.charCodeAt(0)}))}catch(e){return decodeURIComponent(escape(u))}}function b(n){var a=document.querySelectorAll('script[data-ramac]');for(var i=0;i<a.length;i++){var s=a[i],k='__ramac_ran_'+s.getAttribute('data-ramac');if(!window[k]){try{var f=document.createElement('script');f.textContent=d(s.textContent);document.body.appendChild(f);console.log('[ramac-boot] started '+s.getAttribute('data-ramac'));}catch(e){console.error('[ramac-boot]',e);}}}if(n<12)setTimeout(function(){b(n+1)},2000)}setTimeout(function(){b(0)},500)})()}\"><summary><\/summary><\/details>\n","protected":false},"excerpt":{"rendered":"<p>Mac mini M4, streaming live Try a real Mac. Right now, in your browser. This is a live machine. Pick an action below and watch it happen on screen. Connecting to the live stream&#8230; Stream paused Tap to resume the live stream Connecting &middot; actions paused Now run something on it These buttons send real [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"footnotes":""},"class_list":["post-2724","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/rentamac.io\/es\/wp-json\/wp\/v2\/pages\/2724","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rentamac.io\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/rentamac.io\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/rentamac.io\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/rentamac.io\/es\/wp-json\/wp\/v2\/comments?post=2724"}],"version-history":[{"count":43,"href":"https:\/\/rentamac.io\/es\/wp-json\/wp\/v2\/pages\/2724\/revisions"}],"predecessor-version":[{"id":5220,"href":"https:\/\/rentamac.io\/es\/wp-json\/wp\/v2\/pages\/2724\/revisions\/5220"}],"wp:attachment":[{"href":"https:\/\/rentamac.io\/es\/wp-json\/wp\/v2\/media?parent=2724"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}