{"id":4613,"date":"2026-06-24T03:37:14","date_gmt":"2026-06-24T03:37:14","guid":{"rendered":"https:\/\/allenglish4u.com\/cambridge-ket-7-test-3-rw\/"},"modified":"2026-07-05T02:44:03","modified_gmt":"2026-07-05T02:44:03","slug":"cambridge-ket-7-test-3-rw","status":"publish","type":"page","link":"https:\/\/allenglish4u.com\/vi\/cambridge-ket-7-test-3-rw\/","title":{"rendered":"Cambridge KET 7 Test 3 \u2013 Reading &#038; Writing"},"content":{"rendered":"\n<style>\n@import url('https:\/\/fonts.googleapis.com\/css2?family=Plus+Jakarta+Sans:wght@400%3B500%3B600%3B700%3B800&family=Fraunces:opsz,wght@9..144,700&display=swap');\n\n\/* escape WP wrapper *\/\n.entry-content,.wp-block-post-content,.is-layout-constrained{max-width:none !important;width:auto !important;margin-left:0 !important;margin-right:0 !important;padding-left:0 !important;padding-right:0 !important;}\n.wp-block-post-title{display:none !important;}\n\n:root{\n  --accent-1:#F97316;\n  --accent-2:#F43F5E;\n  --gold:#F9C74F;\n  --green:#10B981;\n  --red:#EF4444;\n  --light-1:#FFF7ED;\n  --light-2:#FFFBF5;\n  --white:#FFFFFF;\n  --text:#0F172A;\n  --muted:#475569;\n  --subtle:#64748B;\n  --border:#E2E8F0;\n  --dark-1:#1B0F02;\n  --dark-2:#2D1A06;\n  --r-10:10px; --r-16:16px; --r-22:22px;\n  --sh-card:0 2px 8px rgba(0,0,0,.06);\n  --sh-lg:0 12px 40px rgba(0,0,0,.12);\n}\n*{margin:0;padding:0;box-sizing:border-box}\nhtml{scroll-behavior:smooth}\nbody{\n  font-family:'Plus Jakarta Sans',system-ui,sans-serif !important;\n  color:var(--text);\n  background:var(--light-2);\n  -webkit-font-smoothing:antialiased;\n  overflow-x:hidden;\n}\n.serif{font-family:'Fraunces',Georgia,serif !important;font-weight:700;letter-spacing:-.01em}\n.wrap{max-width:1080px;margin:0 auto;padding:0 24px}\na{color:inherit;text-decoration:none}\nbutton{font-family:inherit !important;cursor:pointer;border:none;background:none}\n\n\/* HEADER (same pattern as cambridge index) *\/\n.header{position:fixed;top:0;left:0;right:0;z-index:100;transition:background .28s ease,box-shadow .28s ease;border-bottom:1px solid transparent;}\n.header.solid{background:rgba(255,255,255,.92);backdrop-filter:saturate(180%) blur(16px);border-bottom:1px solid var(--border);box-shadow:0 1px 0 rgba(15,23,42,.02);}\n.header-inner{display:flex;align-items:center;gap:28px;height:72px;max-width:1200px;margin:0 auto;padding:0 24px}\n.brand{display:flex;align-items:center;gap:11px;flex-shrink:0}\n.brand img{width:40px;height:40px;border-radius:11px;object-fit:cover;box-shadow:var(--sh-card)}\n.brand-name{font-weight:800;font-size:18px;letter-spacing:-.02em;color:#fff;transition:color .28s ease}\n.header.solid .brand-name{color:var(--text)}\n.nav{display:flex;align-items:center;gap:4px;margin-left:8px}\n.nav a{position:relative;padding:9px 13px;font-size:14.5px;font-weight:600;color:rgba(255,255,255,.82);border-radius:var(--r-10);transition:color .16s ease,background .16s ease;}\n.nav a:hover{color:#fff;background:rgba(255,255,255,.08)}\n.header.solid .nav a{color:var(--muted)}\n.header.solid .nav a:hover{color:var(--text);background:var(--light-1)}\n.header-right{margin-left:auto;display:flex;align-items:center;gap:10px}\n.btn-back{display:inline-flex;align-items:center;gap:7px;padding:9px 16px;border-radius:999px;font-weight:700;font-size:14px;background:rgba(255,255,255,.14);color:#fff;border:1px solid rgba(255,255,255,.22);transition:background .16s ease}\n.btn-back:hover{background:rgba(255,255,255,.22)}\n.header.solid .btn-back{background:linear-gradient(100deg,var(--accent-1),var(--accent-2));color:#fff;border-color:transparent}\n.hamburger{display:none;width:40px;height:40px;border-radius:50%;color:#fff;align-items:center;justify-content:center}\n.header.solid .hamburger{color:var(--text)}\n\n\/* HERO *\/\n.hero{\n  position:relative;min-height:380px;padding:120px 0 60px;\n  background:linear-gradient(135deg,#FB923C 0%,#F43F5E 55%,#7C2D12 100%);\n  color:#fff;overflow:hidden;\n}\n.hero::before{content:\"\";position:absolute;inset:0;background-image:radial-gradient(circle at 20% 30%,rgba(255,255,255,.15) 0%,transparent 50%),radial-gradient(circle at 80% 70%,rgba(255,255,255,.10) 0%,transparent 50%);pointer-events:none}\n.hero .wrap{position:relative;z-index:1}\n.kicker{display:inline-block;font-size:12px;letter-spacing:.18em;text-transform:uppercase;font-weight:700;opacity:.92;margin-bottom:14px}\n.hero h1{font-size:clamp(34px,5vw,52px);line-height:1.05;margin-bottom:14px}\n.hero h1 span{font-style:italic;color:var(--gold)}\n.hero p.sub{font-size:17px;line-height:1.6;max-width:680px;opacity:.95;margin-bottom:22px}\n.hero-meta{display:flex;flex-wrap:wrap;gap:10px;margin-bottom:24px}\n.meta-pill{display:inline-flex;align-items:center;gap:6px;padding:7px 14px;border-radius:999px;background:rgba(255,255,255,.18);backdrop-filter:blur(6px);border:1px solid rgba(255,255,255,.24);font-size:13px;font-weight:600}\n.meta-pill .dot{width:6px;height:6px;border-radius:50%;background:var(--gold)}\n.cta-row{display:flex;gap:12px;flex-wrap:wrap}\n.btn-primary{display:inline-flex;align-items:center;gap:8px;padding:13px 22px;border-radius:999px;background:#fff;color:var(--text);font-weight:700;font-size:15px;box-shadow:0 10px 30px rgba(0,0,0,.2);transition:transform .16s ease}\n.btn-primary:hover{transform:translateY(-2px)}\n.btn-ghost{display:inline-flex;align-items:center;gap:8px;padding:13px 22px;border-radius:999px;background:rgba(255,255,255,.12);color:#fff;font-weight:700;font-size:15px;border:1px solid rgba(255,255,255,.32);transition:background .16s ease}\n.btn-ghost:hover{background:rgba(255,255,255,.22)}\n\n\/* SCORE BAR *\/\n.score-bar{\n  position:sticky;top:72px;z-index:50;\n  background:rgba(255,255,255,.96);backdrop-filter:blur(12px);\n  border-bottom:1px solid var(--border);\n  padding:14px 0;\n}\n.sb-inner{display:flex;align-items:center;gap:16px;flex-wrap:wrap}\n.sb-prog{flex:1;min-width:200px}\n.sb-prog-bar{height:8px;background:var(--light-1);border-radius:999px;overflow:hidden}\n.sb-prog-fill{height:100%;background:linear-gradient(90deg,var(--accent-1),var(--accent-2));border-radius:999px;transition:width .3s ease;width:0}\n.sb-prog-label{font-size:12px;color:var(--muted);margin-top:5px;font-weight:600}\n.sb-score{display:flex;align-items:center;gap:10px;font-weight:700;font-size:14.5px;color:var(--text)}\n.sb-score b{font-size:18px;color:var(--accent-1)}\n.btn-submit{display:inline-flex;align-items:center;gap:7px;padding:10px 18px;border-radius:999px;background:linear-gradient(100deg,var(--accent-1),var(--accent-2));color:#fff;font-weight:700;font-size:14px;box-shadow:0 6px 18px rgba(249,115,22,.32);transition:transform .15s ease,opacity .15s ease}\n.btn-submit:hover{transform:translateY(-1px)}\n.btn-submit:disabled{opacity:.6;cursor:not-allowed;transform:none}\n.btn-reset{padding:10px 16px;border-radius:999px;background:#fff;color:var(--muted);font-weight:600;font-size:13px;border:1px solid var(--border);transition:background .15s ease}\n.btn-reset:hover{background:var(--light-1);color:var(--text)}\n\n\/* PARTS *\/\n.part-section{padding:48px 0;border-bottom:1px solid var(--border)}\n.part-section:nth-of-type(even){background:#fff}\n.part-head{display:flex;align-items:flex-start;gap:18px;margin-bottom:24px}\n.part-num{\n  flex-shrink:0;width:60px;height:60px;border-radius:18px;\n  background:linear-gradient(135deg,var(--accent-1),var(--accent-2));\n  color:#fff;display:grid;place-items:center;\n  font-family:'Fraunces',serif !important;font-weight:700;font-size:26px;\n  box-shadow:0 8px 22px rgba(249,115,22,.3);\n}\n.part-head-text h2{font-size:26px;line-height:1.15;margin-bottom:6px}\n.part-head-text .qrange{display:inline-block;font-size:12.5px;font-weight:700;color:var(--accent-1);background:var(--light-1);padding:4px 10px;border-radius:999px;letter-spacing:.04em;margin-bottom:8px}\n.part-head-text p{color:var(--muted);font-size:15px;line-height:1.55;max-width:740px}\n\n\/* PART 1 &#8212; notice match *\/\n.notices-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:14px;margin:20px 0 28px}\n.notice{\n  background:#fff;border:2px solid var(--border);border-radius:14px;padding:18px 14px;text-align:center;\n  font-weight:700;letter-spacing:.02em;color:var(--text);min-height:88px;display:grid;place-items:center;\n  font-size:14.5px;line-height:1.35;\n  box-shadow:0 1px 3px rgba(0,0,0,.04);\n}\n.notice-letter{position:absolute;top:6px;left:8px;font-size:11px;font-weight:800;color:var(--accent-1);background:var(--light-1);width:22px;height:22px;border-radius:50%;display:grid;place-items:center;}\n.notice{position:relative}\n\n\/* questions list *\/\n.q-list{display:flex;flex-direction:column;gap:14px;margin-top:8px}\n.q-item{\n  background:#fff;border:1px solid var(--border);border-radius:16px;padding:18px 20px;\n  display:flex;flex-direction:column;gap:12px;transition:border-color .2s ease,box-shadow .2s ease;\n}\n.q-item.correct{border-color:var(--green);box-shadow:0 0 0 3px rgba(16,185,129,.12)}\n.q-item.wrong{border-color:var(--red);box-shadow:0 0 0 3px rgba(239,68,68,.12)}\n.q-num{font-weight:800;color:var(--accent-1);font-size:14px;min-width:30px}\n.q-text{flex:1;font-size:15.5px;line-height:1.55;color:var(--text);display:flex;gap:10px;align-items:flex-start}\n.q-text b.qn{color:var(--accent-1);font-weight:800}\n.q-opts{display:flex;flex-wrap:wrap;gap:8px;margin-top:4px}\n.opt{\n  display:inline-flex;align-items:center;gap:7px;padding:8px 14px;border-radius:10px;\n  background:#F8FAFF;border:1.5px solid var(--border);font-weight:600;font-size:14px;color:var(--text);\n  cursor:pointer;transition:all .15s ease;user-select:none;\n}\n.opt:hover{background:var(--light-1);border-color:var(--accent-1)}\n.opt input{display:none}\n.opt .opt-letter{font-weight:800;color:var(--accent-1);background:#fff;width:22px;height:22px;border-radius:6px;display:grid;place-items:center;font-size:12.5px;border:1px solid var(--border)}\n.opt.selected{background:linear-gradient(100deg,rgba(249,115,22,.12),rgba(244,63,94,.12));border-color:var(--accent-1)}\n.opt.selected .opt-letter{background:linear-gradient(100deg,var(--accent-1),var(--accent-2));color:#fff;border-color:transparent}\n.opt.correct-opt{background:rgba(16,185,129,.12) !important;border-color:var(--green) !important}\n.opt.correct-opt .opt-letter{background:var(--green) !important;color:#fff !important;border-color:transparent !important}\n.opt.wrong-opt{background:rgba(239,68,68,.10) !important;border-color:var(--red) !important}\n.opt.wrong-opt .opt-letter{background:var(--red) !important;color:#fff !important;border-color:transparent !important}\n.feedback{font-size:13px;font-weight:600;display:none;padding:8px 12px;border-radius:8px;margin-top:4px}\n.q-item.answered .feedback{display:block}\n.q-item.correct .feedback{background:rgba(16,185,129,.12);color:#065F46}\n.q-item.wrong .feedback{background:rgba(239,68,68,.10);color:#991B1B}\n\n\/* PART 2 \/ cloze with input *\/\n.input-blank{\n  display:inline-block;min-width:90px;border:none;border-bottom:2px dashed var(--accent-1);\n  background:transparent;font-family:inherit !important;font-size:15.5px;color:var(--text);font-weight:600;\n  padding:2px 6px;margin:0 4px;text-align:center;outline:none;\n}\n.input-blank:focus{border-bottom-style:solid;background:var(--light-1)}\n.input-blank.correct{border-bottom-color:var(--green);color:#065F46;background:rgba(16,185,129,.10)}\n.input-blank.wrong{border-bottom-color:var(--red);color:#991B1B;background:rgba(239,68,68,.08)}\n\n\/* PART 4 &#8212; passage *\/\n.passage{\n  background:#fff;border:1px solid var(--border);border-radius:18px;\n  padding:24px 26px;margin:8px 0 20px;\n  font-size:15.5px;line-height:1.7;color:var(--text);\n  box-shadow:var(--sh-card);\n  position:relative;\n}\n.passage h3{font-family:'Fraunces',serif !important;font-size:22px;text-align:center;margin-bottom:14px;letter-spacing:.02em;color:var(--accent-2)}\n.passage p{margin-bottom:10px}\n\n\/* PART 5 &#8212; cloze passage *\/\n.cloze-passage{\n  background:#fff;border:1px solid var(--border);border-radius:18px;padding:22px 26px;\n  font-size:16px;line-height:1.8;color:var(--text);box-shadow:var(--sh-card);margin-bottom:24px;\n}\n.cloze-passage h3{font-family:'Fraunces',serif !important;font-size:24px;text-align:center;color:var(--accent-2);margin-bottom:14px}\n\n\/* PART 6 &#8212; single word with first letter *\/\n.word-row{display:flex;align-items:center;gap:14px;flex-wrap:wrap}\n.first-letter{font-weight:700;color:var(--accent-1);font-size:18px;font-family:'Fraunces',serif}\n.dashes{color:var(--muted);letter-spacing:6px;font-weight:600}\n\n\/* PART 8 &#8212; form *\/\n.form-card{background:#fff;border:1.5px solid var(--border);border-radius:16px;padding:22px;margin-top:18px;max-width:560px}\n.form-card h4{font-family:'Fraunces',serif !important;font-size:20px;text-align:center;color:var(--accent-2);margin-bottom:6px;border-bottom:2px solid var(--accent-1);padding-bottom:8px;display:inline-block;width:100%}\n.form-row{display:flex;gap:12px;align-items:center;margin-top:14px;flex-wrap:wrap}\n.form-row label{flex:0 0 200px;font-weight:600;color:var(--text);font-size:14.5px}\n.form-row .input-blank{flex:1;min-width:200px;text-align:left;font-size:14.5px}\n\n\/* PART 9 &#8212; writing *\/\n.writing-card{background:#fff;border:1.5px solid var(--border);border-radius:16px;padding:22px;margin-top:18px}\n.prompt-box{background:var(--light-1);border-left:4px solid var(--accent-1);padding:14px 18px;border-radius:0 12px 12px 0;margin-bottom:18px;font-size:15px;line-height:1.6}\n.prompt-box ul{margin:10px 0 4px 22px}\n.prompt-box li{margin-bottom:4px}\n.writing-area{width:100%;min-height:160px;padding:14px;font-family:inherit !important;font-size:15px;line-height:1.55;border:2px solid var(--border);border-radius:12px;background:#FAFBFC;color:var(--text);outline:none;resize:vertical;transition:border-color .2s ease}\n.writing-area:focus{border-color:var(--accent-1);background:#fff}\n.wc-counter{display:flex;justify-content:space-between;margin-top:8px;font-size:13px;color:var(--muted);font-weight:600}\n.wc-counter.ok{color:var(--green)}\n.wc-counter.over{color:var(--red)}\n.sample-toggle{margin-top:14px;display:inline-flex;align-items:center;gap:7px;padding:9px 16px;border-radius:999px;background:linear-gradient(100deg,var(--accent-1),var(--accent-2));color:#fff;font-weight:700;font-size:13.5px;border:none;cursor:pointer}\n.sample-box{display:none;margin-top:14px;padding:14px 18px;background:#FEF3C7;border-left:4px solid var(--gold);border-radius:0 12px 12px 0;font-size:14.5px;line-height:1.6}\n.sample-box.show{display:block}\n.sample-box h5{font-family:'Fraunces',serif !important;font-size:16px;margin-bottom:8px;color:#92400E}\n\n\/* SHOW ANSWER PER-Q BUTTONS *\/\n.show-ans-btn{\n  display:inline-flex;align-items:center;gap:6px;padding:5px 11px;border-radius:8px;\n  background:rgba(249,115,22,.10);color:var(--accent-1);font-weight:700;font-size:12px;\n  border:1px solid rgba(249,115,22,.30);cursor:pointer;transition:all .15s ease;\n  font-family:inherit !important;align-self:flex-start;margin-top:4px;letter-spacing:.02em;\n}\n.show-ans-btn:hover{background:rgba(249,115,22,.18);border-color:var(--accent-1)}\n.show-ans-btn[disabled]{opacity:.45;cursor:not-allowed}\n.show-ans-btn .emoji{width:14px;height:14px}\n.show-ans-btn-inline{\n  display:inline-flex;align-items:center;gap:4px;padding:3px 8px;border-radius:6px;\n  background:rgba(249,115,22,.10);color:var(--accent-1);font-weight:700;font-size:11.5px;\n  border:1px solid rgba(249,115,22,.28);cursor:pointer;font-family:inherit !important;\n  margin-left:4px;vertical-align:middle;transition:all .15s ease;\n}\n.show-ans-btn-inline:hover{background:rgba(249,115,22,.18)}\n.show-ans-btn-inline[disabled]{opacity:.45;cursor:not-allowed}\n\n\/* RESULTS BANNER *\/\n.results-banner{\n  display:none;margin:32px auto;padding:30px;border-radius:22px;\n  background:linear-gradient(135deg,#FB923C,#F43F5E);color:#fff;text-align:center;max-width:720px;\n  box-shadow:0 16px 50px rgba(249,115,22,.3);\n}\n.results-banner.show{display:block}\n.results-banner h3{font-size:30px;font-family:'Fraunces',serif !important;margin-bottom:10px}\n.results-banner .score-big{font-size:64px;font-weight:800;line-height:1;margin:14px 0;font-family:'Fraunces',serif}\n.results-banner p{opacity:.95;font-size:15px}\n\n\/* FOOTER *\/\n.footer{background:var(--dark-1);color:#9CA3AF;padding:36px 0;text-align:center;font-size:13.5px}\n.footer a{color:var(--gold);font-weight:600}\n\n\/* MOBILE *\/\n@media (max-width:820px){\n  .nav{display:none}\n  .hamburger{display:flex}\n  .hero{padding:110px 0 50px}\n  .part-head{flex-direction:column;gap:12px}\n  .part-num{width:50px;height:50px;font-size:22px}\n  .notices-grid{grid-template-columns:repeat(2,1fr)}\n  .form-row label{flex:1 1 100%}\n  .form-row .input-blank{width:100%}\n  .sb-inner{gap:10px}\n  .sb-prog{order:3;flex:1 1 100%}\n}\n\n\/* mobile drawer *\/\n.drawer{position:fixed;inset:0;background:rgba(15,23,42,.65);z-index:200;display:none;align-items:flex-start;justify-content:flex-end}\n.drawer.open{display:flex}\n.drawer-panel{width:280px;background:#fff;height:100%;padding:24px;display:flex;flex-direction:column;gap:8px}\n.drawer-panel a{padding:12px 14px;border-radius:10px;font-weight:600;color:var(--text)}\n.drawer-panel a:hover{background:var(--light-1)}\n.drawer-close{align-self:flex-end;width:40px;height:40px;border-radius:50%;display:grid;place-items:center;color:var(--muted)}\n\n\/* Submit panel *\/\n.submit-panel{margin:40px auto 24px;background:linear-gradient(135deg,#fff,var(--light-1));border:1.5px solid var(--border);padding:30px;border-radius:22px;text-align:center;max-width:720px;box-shadow:0 4px 20px rgba(0,0,0,.06)}\n.submit-panel h3{font-family:'Fraunces',serif !important;font-size:24px;margin-bottom:8px;color:var(--text)}\n.submit-panel p.intro{color:var(--muted);margin-bottom:18px;font-size:14.5px}\n.submit-panel .sp-buttons{display:flex;gap:14px;justify-content:center;flex-wrap:wrap}\n.btn-submit-big{display:inline-flex;align-items:center;gap:8px;padding:14px 28px;border-radius:999px;background:linear-gradient(100deg,var(--accent-1),var(--accent-2));color:#fff;font-weight:800;font-size:16px;box-shadow:0 10px 26px rgba(139,92,246,.35);cursor:pointer;transition:transform .15s ease}\n.btn-submit-big:hover{transform:translateY(-2px)}\n.btn-reset-big{padding:14px 24px;border-radius:999px;background:#fff;color:var(--text);font-weight:700;font-size:14.5px;border:1.5px solid var(--border);cursor:pointer}\n.btn-reset-big:hover{background:var(--light-1)}\n<\/style>\n\n<!-- HEADER -->\n<header class=\"header\" id=\"hdr\">\n  <div class=\"header-inner\">\n    <a href=\"https:\/\/allenglish4u.com\" class=\"brand\">\n      <img decoding=\"async\" src=\"https:\/\/allenglish4u.com\/wp-content\/uploads\/2026\/04\/Transparent-background-MacBook-Pro-cua-Hang.png\" alt=\"AE4U\">\n      <span class=\"brand-name\">All English 4U<\/span>\n    <\/a>\n    <nav class=\"nav\">\n      <a href=\"https:\/\/allenglish4u.com\/grammar\/\">Grammar<\/a>\n      <a href=\"https:\/\/allenglish4u.com\/ielts\/\">IELTS<\/a>\n      <a href=\"https:\/\/allenglish4u.com\/toefl\/\">TOEFL<\/a>\n      <a href=\"https:\/\/allenglish4u.com\/cambridge\/\" class=\"active\">Cambridge<\/a>\n      <a href=\"https:\/\/allenglish4u.com\/celpip\/\">CELPIP<\/a>\n      <a href=\"https:\/\/allenglish4u.com\/dictation\/\">Dictation<\/a>\n      <\/nav>\n    <div class=\"header-right\">\n      <a href=\"https:\/\/allenglish4u.com\/cambridge\/\" class=\"btn-back\">\n        <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.6\" stroke-linecap=\"round\"><path d=\"M19 12H5M11 18l-6-6 6-6\"\/><\/svg>\n        Back\n      <\/a>\n      <button class=\"hamburger\" id=\"hamb\" aria-label=\"Menu\">\n        <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.3\" stroke-linecap=\"round\"><path d=\"M3 6h18M3 12h18M3 18h18\"\/><\/svg>\n      <\/button>\n    <\/div>\n  <\/div>\n<\/header>\n\n<div class=\"drawer\" id=\"drawer\">\n  <div class=\"drawer-panel\">\n    <button class=\"drawer-close\" id=\"drawerClose\" aria-label=\"Close\">\n      <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.3\" stroke-linecap=\"round\"><path d=\"M18 6L6 18M6 6l12 12\"\/><\/svg>\n    <\/button>\n    <a href=\"https:\/\/allenglish4u.com\/grammar\/\">Grammar<\/a>\n    <a href=\"https:\/\/allenglish4u.com\/ielts\/\">IELTS<\/a>\n    <a href=\"https:\/\/allenglish4u.com\/toefl\/\">TOEFL<\/a>\n    <a href=\"https:\/\/allenglish4u.com\/cambridge\/\">Cambridge<\/a>\n    <a href=\"https:\/\/allenglish4u.com\/celpip\/\">CELPIP<\/a>\n    <a href=\"https:\/\/allenglish4u.com\/dictation\/\">Dictation<\/a>\n    <\/div>\n<\/div>\n\n<!-- HERO -->\n<section class=\"hero\">\n  <div class=\"wrap\">\n    <span class=\"kicker\">Cambridge English &#183; Key (KET)<\/span>\n    <h1 class=\"serif\">KET 7 &#8212; Test 3<br><span>Reading &amp; Writing<\/span><\/h1>\n    <p class=\"sub\">Practise the full A2 Key Reading &amp; Writing paper &#8212; 9 parts, 56 questions, instant auto-grading. Test yourself like the real exam, then check answers and learn from instant feedback.<\/p>\n    <div class=\"hero-meta\">\n      <span class=\"meta-pill\"><span class=\"dot\"><\/span>1 hour 10 minutes<\/span>\n      <span class=\"meta-pill\"><span class=\"dot\"><\/span>9 Parts<\/span>\n      <span class=\"meta-pill\"><span class=\"dot\"><\/span>55 auto-graded<\/span>\n      <span class=\"meta-pill\"><span class=\"dot\"><\/span>+ Writing prompt<\/span>\n    <\/div>\n    <div class=\"cta-row\">\n      <a href=\"#part1\" class=\"btn-primary\">\n        Start Test\n        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.6\" stroke-linecap=\"round\"><path d=\"M5 12h14M13 6l6 6-6 6\"\/><\/svg>\n      <\/a>\n      <a href=\"https:\/\/allenglish4u.com\/cambridge\/\" class=\"btn-ghost\">All Cambridge Tests<\/a>\n    <\/div>\n  <\/div>\n<\/section>\n\n<!-- SCORE BAR -->\n<div class=\"score-bar\" id=\"scoreBar\">\n  <div class=\"wrap sb-inner\">\n    <div class=\"sb-score\">Score <b><span id=\"scoreNow\">0<\/span>\/55<\/b><\/div>\n    <div class=\"sb-prog\">\n      <div class=\"sb-prog-bar\"><div class=\"sb-prog-fill\" id=\"progFill\"><\/div><\/div>\n      <div class=\"sb-prog-label\"><span id=\"answeredCount\">0<\/span> of 55 answered<\/div>\n    <\/div>\n    <button class=\"btn-submit\" id=\"submitBtn\">\n      <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.6\" stroke-linecap=\"round\"><path d=\"M20 6L9 17l-5-5\"\/><\/svg>\n      Submit &amp; Grade\n    <\/button>\n    <button class=\"btn-reset\" id=\"resetBtn\">Reset<\/button>\n  <\/div>\n<\/div>\n\n<!-- ============== PART 1 ============== -->\n<section class=\"part-section\" id=\"part1\">\n  <div class=\"wrap\">\n    <div class=\"part-head\">\n      <div class=\"part-num\">1<\/div>\n      <div class=\"part-head-text\">\n        <span class=\"qrange\">Questions 1&#8211;5<\/span>\n        <h2 class=\"serif\">Match the notice<\/h2>\n        <p>Which notice (A&#8211;H) says this (1&#8211;5)? For questions 1&#8211;5, choose the correct letter A&#8211;H.<\/p>\n      <\/div>\n    <\/div>\n\n    <div class=\"notices-grid\">\n      <div class=\"notice\"><span class=\"notice-letter\">A<\/span><b>This month only<\/b><br><sub style=\"font-size:11px;font-weight:600\">60% discount on all pet care magazines<\/sub><\/div>\n      <div class=\"notice\"><span class=\"notice-letter\">B<\/span><b>Special offer!<\/b><br><sub style=\"font-size:11px;font-weight:600\">Free toy with every box of dog food<\/sub><\/div>\n      <div class=\"notice\" style=\"opacity:.55\"><span class=\"notice-letter\">C<\/span><b>Animal World<\/b><br><sub style=\"font-size:11px;font-weight:600\">Free parking for customers (Monday&#8211;Saturday)<\/sub><br><sub style=\"font-size:10px;color:var(--muted);font-style:italic;font-weight:600\">(example)<\/sub><\/div>\n      <div class=\"notice\"><span class=\"notice-letter\">D<\/span><b>Pete&#8217;s Pets<\/b><br><sub style=\"font-size:11px;font-weight:600\">8 a.m.&#8211;6 p.m. weekdays &#183; 8 a.m.&#8211;midday weekends<\/sub><\/div>\n      <div class=\"notice\"><span class=\"notice-letter\">E<\/span><b>Wanted &#8211; Sales Assistants<\/b><br><sub style=\"font-size:11px;font-weight:600\">Saturday or Sunday 11 a.m.&#8211;4 p.m. &#183; &#163;6 per hour<\/sub><\/div>\n      <div class=\"notice\"><span class=\"notice-letter\">F<\/span>Japanese goldfish for sale<br><sub style=\"font-size:11px;font-weight:600\">&#163;5 each<\/sub><\/div>\n      <div class=\"notice\"><span class=\"notice-letter\">G<\/span><b>ALL CUSTOMERS<\/b><br><sub style=\"font-size:11px;font-weight:600\">During building work use side door only<\/sub><\/div>\n      <div class=\"notice\"><span class=\"notice-letter\">H<\/span>Bags of animal food too heavy? Our staff will carry them for you.<\/div>\n    <\/div>\n\n    <div class=\"q-list\" id=\"part1List\"><\/div>\n  <\/div>\n<\/section>\n\n<!-- ============== PART 2 ============== -->\n<section class=\"part-section\" id=\"part2\">\n  <div class=\"wrap\">\n    <div class=\"part-head\">\n      <div class=\"part-num\">2<\/div>\n      <div class=\"part-head-text\">\n        <span class=\"qrange\">Questions 6&#8211;10<\/span>\n        <h2 class=\"serif\">Going to a restaurant<\/h2>\n        <p>Read the sentences (6&#8211;10) about going to a restaurant. Choose the best word (A, B or C) for each space.<\/p>\n      <\/div>\n    <\/div>\n    <div style=\"background:#fff;border:1px solid var(--border);border-radius:14px;padding:14px 18px;margin-bottom:18px;font-size:14.5px;color:var(--muted)\">\n      <b style=\"color:var(--accent-1)\">Example:<\/b> Joe and his friends often go to their <u>favourite<\/u> pizza restaurant in town. <b>(Answer: C)<\/b>\n    <\/div>\n    <div class=\"q-list\" id=\"part2List\"><\/div>\n  <\/div>\n<\/section>\n\n<!-- ============== PART 3a ============== -->\n<section class=\"part-section\" id=\"part3a\">\n  <div class=\"wrap\">\n    <div class=\"part-head\">\n      <div class=\"part-num\">3<\/div>\n      <div class=\"part-head-text\">\n        <span class=\"qrange\">Questions 11&#8211;15<\/span>\n        <h2 class=\"serif\">Complete the conversations<\/h2>\n        <p>Complete the five conversations. Choose the correct answer (A, B or C).<\/p>\n      <\/div>\n    <\/div>\n    <div style=\"background:#fff;border:1px solid var(--border);border-radius:14px;padding:14px 18px;margin-bottom:18px;font-size:14.5px;color:var(--muted)\">\n      <b style=\"color:var(--accent-1)\">Example:<\/b> Where do you come from? &#8212; <b>A<\/b> New York.\n    <\/div>\n    <div class=\"q-list\" id=\"part3aList\"><\/div>\n  <\/div>\n<\/section>\n\n<!-- ============== PART 3b ============== -->\n<section class=\"part-section\" id=\"part3b\">\n  <div class=\"wrap\">\n    <div class=\"part-head\">\n      <div class=\"part-num\">3<\/div>\n      <div class=\"part-head-text\">\n        <span class=\"qrange\">Questions 16&#8211;20<\/span>\n        <h2 class=\"serif\">Guitar lessons: Toby &amp; Xavier<\/h2>\n        <p>Complete the conversation. What does Xavier say to Toby? For each blank, choose the correct letter A&#8211;H.<\/p>\n      <\/div>\n    <\/div>\n\n    <div style=\"background:#fff;border:1px solid var(--border);border-radius:14px;padding:18px 22px;margin-bottom:18px;font-size:14.5px;line-height:1.7\">\n      <p><b>Toby:<\/b> Hi, Xavier. It&#8217;s Toby here.<\/p>\n      <p><b>Xavier:<\/b> <span style=\"color:var(--accent-1);font-weight:700\">(Example: D)<\/span><\/p>\n      <p><b>Toby:<\/b> I&#8217;m fine, thanks. Listen, do you know about the new guitar lessons at school?<\/p>\n      <p><b>Xavier:<\/b> <select class=\"q-select\" data-qid=\"16\"><option value=\"\">&#8212; choose &#8212;<\/option><option>A<\/option><option>B<\/option><option>C<\/option><option>E<\/option><option>F<\/option><option>G<\/option><option>H<\/option><\/select><\/p>\n      <p><b>Toby:<\/b> Well, I might, but I&#8217;ll have to find out the cost of the instrument and lessons first.<\/p>\n      <p><b>Xavier:<\/b> <select class=\"q-select\" data-qid=\"17\"><option value=\"\">&#8212; choose &#8212;<\/option><option>A<\/option><option>B<\/option><option>C<\/option><option>E<\/option><option>F<\/option><option>G<\/option><option>H<\/option><\/select><\/p>\n      <p><b>Toby:<\/b> Really? Do you know why that is?<\/p>\n      <p><b>Xavier:<\/b> <select class=\"q-select\" data-qid=\"18\"><option value=\"\">&#8212; choose &#8212;<\/option><option>A<\/option><option>B<\/option><option>C<\/option><option>E<\/option><option>F<\/option><option>G<\/option><option>H<\/option><\/select><\/p>\n      <p><b>Toby:<\/b> That sounds great! I&#8217;ve always wanted to be in a band.<\/p>\n      <p><b>Xavier:<\/b> <select class=\"q-select\" data-qid=\"19\"><option value=\"\">&#8212; choose &#8212;<\/option><option>A<\/option><option>B<\/option><option>C<\/option><option>E<\/option><option>F<\/option><option>G<\/option><option>H<\/option><\/select><\/p>\n      <p><b>Toby:<\/b> Yes, but I don&#8217;t think they were very good.<\/p>\n      <p><b>Xavier:<\/b> <select class=\"q-select\" data-qid=\"20\"><option value=\"\">&#8212; choose &#8212;<\/option><option>A<\/option><option>B<\/option><option>C<\/option><option>E<\/option><option>F<\/option><option>G<\/option><option>H<\/option><\/select><\/p>\n      <p><b>Toby:<\/b> I&#8217;m sure you&#8217;re right!<\/p>\n    <\/div>\n\n    <div style=\"background:#fff;border:1px solid var(--border);border-radius:14px;padding:18px 22px;font-size:14px;line-height:1.85\">\n      <b style=\"color:var(--accent-1);display:block;margin-bottom:6px\">Choices:<\/b>\n      <div><b>A<\/b> Maybe we&#8217;ll be better!<\/div>\n      <div><b>B<\/b> Yes. Shall I ask the teacher?<\/div>\n      <div><b>C<\/b> Me too. Wasn&#8217;t your father in one with his mates?<\/div>\n      <div style=\"opacity:.5\"><b>D<\/b> Hi Toby. How are you? <i>(example)<\/i><\/div>\n      <div><b>E<\/b> Yes. Are you going to do them?<\/div>\n      <div><b>F<\/b> My friend Susie is a really good singer.<\/div>\n      <div><b>G<\/b> They want to make sure we are interested before we start playing.<\/div>\n      <div><b>H<\/b> I think the teacher said they are free the first term.<\/div>\n    <\/div>\n\n    <div id=\"part3bFeedback\" style=\"margin-top:14px\"><\/div>\n  <\/div>\n<\/section>\n\n<!-- ============== PART 4 ============== -->\n<section class=\"part-section\" id=\"part4\">\n  <div class=\"wrap\">\n    <div class=\"part-head\">\n      <div class=\"part-num\">4<\/div>\n      <div class=\"part-head-text\">\n        <span class=\"qrange\">Questions 21&#8211;27<\/span>\n        <h2 class=\"serif\">An Amazing Adventure<\/h2>\n        <p>Read the article about Erden Eru&#231;, a famous explorer. Are sentences 21&#8211;27 <b>&#8216;Right&#8217; (A)<\/b> or <b>&#8216;Wrong&#8217; (B)<\/b>? If there is not enough information to answer &#8216;Right&#8217; or &#8216;Wrong&#8217;, choose <b>&#8216;Doesn&#8217;t say&#8217; (C)<\/b>.<\/p>\n      <\/div>\n    <\/div>\n\n    <div class=\"passage\">\n      <h3>An Amazing Adventure<\/h3>\n      <p>Erden Eru&#231; is Turkish but now lives in Seattle, USA, with his wife Nancy. In July 2012, he completed an amazing 5-year journey, becoming the first person ever to travel all the way around the world with no help from engines or sails. All he used were his own arms and legs, to cycle, row, and walk around the world.<\/p>\n      <p>His plan before beginning the trip was to climb the highest mountain on each of the six continents that he went through. Unfortunately he was only able to climb three of them because of bad weather and money problems.<\/p>\n      <p>Erden spent a lot of his time on the trip rowing his boat. His journey across the Pacific Ocean took 312 days. Being alone for that much time was not at all easy, but he kept busy by listening to music and studying Spanish. He took dried food with him and had a water machine to make fresh water out of seawater. However, it only worked on sunny days.<\/p>\n      <p>Erden is sure he will have more adventures one day. But at the moment all he wants to do is rest, think about his trip and spend time with Nancy.<\/p>\n    <\/div>\n\n    <div style=\"background:#fff;border:1px solid var(--border);border-radius:14px;padding:12px 18px;margin-bottom:18px;font-size:14px;color:var(--muted)\">\n      <b style=\"color:var(--accent-1)\">Example (0):<\/b> Erden Eru&#231; comes from Turkey. &#8594; <b>A (Right)<\/b>\n    <\/div>\n\n    <div class=\"q-list\" id=\"part4List\"><\/div>\n  <\/div>\n<\/section>\n\n<!-- ============== PART 5 ============== -->\n<section class=\"part-section\" id=\"part5\">\n  <div class=\"wrap\">\n    <div class=\"part-head\">\n      <div class=\"part-num\">5<\/div>\n      <div class=\"part-head-text\">\n        <span class=\"qrange\">Questions 28&#8211;35<\/span>\n        <h2 class=\"serif\">The African Elephant &#8212; gap fill<\/h2>\n        <p>Read the article about African elephants. Choose the best word (A, B or C) for each space.<\/p>\n      <\/div>\n    <\/div>\n\n    <div class=\"cloze-passage\">\n      <h3>The African Elephant<\/h3>\n      <p>African elephants are the <u><b style=\"color:var(--accent-1)\">largest<\/b><\/u> land animals on earth. They live together in family groups and move from place <span data-q=\"28\" class=\"cloze-blank\">[28]<\/span> place looking for food and water. They do not sleep <span data-q=\"29\" class=\"cloze-blank\">[29]<\/span> much and can walk an amazing 80km without <span data-q=\"30\" class=\"cloze-blank\">[30]<\/span> a rest. Adult elephants eat up to 130kg of food a day. They eat plants of almost any size, from grass to trees.<\/p>\n      <p>Elephants must have water for cleaning <span data-q=\"31\" class=\"cloze-blank\">[31]<\/span> as well as for drinking, <span data-q=\"32\" class=\"cloze-blank\">[32]<\/span> they prefer to live as close to rivers and lakes as possible. Female elephants have a baby <span data-q=\"33\" class=\"cloze-blank\">[33]<\/span> four years. Other elephants in <span data-q=\"34\" class=\"cloze-blank\">[34]<\/span> same group help the females to look after the babies. This shows <span data-q=\"35\" class=\"cloze-blank\">[35]<\/span> family groups are very important for these wonderful animals.<\/p>\n    <\/div>\n\n    <div class=\"q-list\" id=\"part5List\"><\/div>\n  <\/div>\n<\/section>\n\n<!-- ============== PART 6 ============== -->\n<section class=\"part-section\" id=\"part6\">\n  <div class=\"wrap\">\n    <div class=\"part-head\">\n      <div class=\"part-num\">6<\/div>\n      <div class=\"part-head-text\">\n        <span class=\"qrange\">Questions 36&#8211;40<\/span>\n        <h2 class=\"serif\">Shopping words &#8212; spell the word<\/h2>\n        <p>Read the descriptions (36&#8211;40) of some words about shopping. The first letter is given. Type the word. <b>Example (0):<\/b> This person works in a shop and can help you find what you need. &#8594; <b>assistant<\/b><\/p>\n      <\/div>\n    <\/div>\n    <div class=\"q-list\" id=\"part6List\"><\/div>\n  <\/div>\n<\/section>\n\n<!-- ============== PART 7 ============== -->\n<section class=\"part-section\" id=\"part7\">\n  <div class=\"wrap\">\n    <div class=\"part-head\">\n      <div class=\"part-num\">7<\/div>\n      <div class=\"part-head-text\">\n        <span class=\"qrange\">Questions 41&#8211;50<\/span>\n        <h2 class=\"serif\">Complete this email<\/h2>\n        <p>Read the email from Conny to her friend Marcia. Type <b>ONE word<\/b> for each space (41&#8211;50). (Example: <i>to<\/i>)<\/p>\n      <\/div>\n    <\/div>\n\n    <div style=\"max-width:600px;margin:0 auto\">\n      <div style=\"background:#fff;border:1.5px solid var(--border);border-radius:16px;padding:24px 26px;font-size:14.5px;line-height:1.95;font-family:'Courier New',monospace\">\n        <div style=\"border-bottom:1px solid var(--border);padding-bottom:8px;margin-bottom:12px\"><b>From:<\/b> Conny<br><b>To:<\/b> Marcia<\/div>\n        <p>Hi Marcia,<\/p>\n        <p>Do you remember I wanted (Example: <u>to<\/u>) invite you, Sasha and John to my new house? Well, <input class=\"input-blank\" data-q=\"41\" type=\"text\"> about next Saturday evening? We <input class=\"input-blank\" data-q=\"42\" type=\"text\"> a beautiful garden with lots <input class=\"input-blank\" data-q=\"43\" type=\"text\"> trees. We may have a barbeque outside <input class=\"input-blank\" data-q=\"44\" type=\"text\"> it doesn&#8217;t rain. My mother is <input class=\"input-blank\" data-q=\"45\" type=\"text\"> really good cook and I <input class=\"input-blank\" data-q=\"46\" type=\"text\"> going to help her make the food.<\/p>\n        <p>Afterwards, <input class=\"input-blank\" data-q=\"47\" type=\"text\"> don&#8217;t we watch a film? <input class=\"input-blank\" data-q=\"48\" type=\"text\"> you bring a DVD with you as I haven&#8217;t got many here?<\/p>\n        <p>John&#8217;s coming <input class=\"input-blank\" data-q=\"49\" type=\"text\"> bike and Sasha is getting a lift <input class=\"input-blank\" data-q=\"50\" type=\"text\"> her father. I hope you&#8217;ll be able to come too.<\/p>\n        <p>Let me know soon!<\/p>\n        <p>Conny<\/p>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>\n\n<!-- ============== PART 8 ============== -->\n<section class=\"part-section\" id=\"part8\">\n  <div class=\"wrap\">\n    <div class=\"part-head\">\n      <div class=\"part-num\">8<\/div>\n      <div class=\"part-head-text\">\n        <span class=\"qrange\">Questions 51&#8211;55<\/span>\n        <h2 class=\"serif\">Paulo&#8217;s notes &#8212; swimming course<\/h2>\n        <p>Read the notice and the email. Fill in the information in Paulo&#8217;s notes (51&#8211;55).<\/p>\n      <\/div>\n    <\/div>\n\n    <div style=\"display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:14px;margin-bottom:18px\">\n      <div style=\"background:#fff;border:2px solid var(--text);border-radius:12px;padding:16px 18px;font-size:13.5px;line-height:1.6;height:fit-content\">\n        <div style=\"text-align:center;font-weight:800;letter-spacing:.03em\">Liston Sports Centre<\/div>\n        <div style=\"text-align:center;font-style:italic\">After-school swimming lessons<br>4 p.m. to 5 p.m. daily<\/div>\n        <div style=\"margin-top:8px\">Tom is teaching the over-18s this term, so <b>Julie<\/b> is teaching these classes:<\/div>\n        <table style=\"width:100%;border-collapse:collapse;margin-top:6px;font-size:13px\">\n          <tr><th style=\"text-align:left;border-bottom:1px solid var(--border)\">Level<\/th><th style=\"text-align:left;border-bottom:1px solid var(--border)\">Day<\/th><\/tr>\n          <tr><td>1<\/td><td>Monday<\/td><\/tr>\n          <tr><td>2<\/td><td>Tuesday<\/td><\/tr>\n          <tr><td>3<\/td><td>Wednesday<\/td><\/tr>\n          <tr><td>4<\/td><td>Thursday<\/td><\/tr>\n          <tr><td>5<\/td><td>Friday<\/td><\/tr>\n        <\/table>\n        <div style=\"margin-top:8px\"><b>Prices:<\/b> Ages 11&#8211;14: &#163;65 &#183; 15&#8211;18: &#163;85<\/div>\n      <\/div>\n      <div style=\"background:#fff;border:1.5px solid var(--border);border-radius:16px;padding:16px 18px;font-size:14px;line-height:1.6\">\n        <div style=\"border-bottom:1px solid var(--border);padding-bottom:8px;margin-bottom:10px\"><b>From:<\/b> Bali<br><b>To:<\/b> Paulo<\/div>\n        <p style=\"margin-bottom:0\">Thanks for booking our swimming lessons! We were level 3 last term so we&#8217;ll be level 4 now, and we&#8217;ve both turned 15, which means it&#8217;s a bit more expensive. Don&#8217;t forget Lena can&#8217;t come this time, so there&#8217;ll be two of us instead of three.<\/p>\n      <\/div>\n    <\/div>\n\n    <div class=\"form-card\" style=\"max-width:620px\">\n      <h4>Paulo&#8217;s notes &#8212; Swimming Course<\/h4>\n      <div class=\"form-row\"><label>Place:<\/label><span style=\"font-weight:600;color:var(--accent-2);font-style:italic\">Liston Sports Centre<\/span><\/div>\n      <div class=\"form-row\"><label>Time lesson starts:<\/label><input class=\"input-blank\" data-q=\"51\" type=\"text\" style=\"max-width:120px\"><span style=\"color:var(--muted)\">p.m.<\/span><\/div>\n      <div class=\"form-row\"><label>Price: &#163;<\/label><input class=\"input-blank\" data-q=\"52\" type=\"text\"><\/div>\n      <div class=\"form-row\"><label>Day:<\/label><input class=\"input-blank\" data-q=\"53\" type=\"text\"><\/div>\n      <div class=\"form-row\"><label>Name of our teacher:<\/label><input class=\"input-blank\" data-q=\"54\" type=\"text\"><\/div>\n      <div class=\"form-row\"><label>Number of people:<\/label><input class=\"input-blank\" data-q=\"55\" type=\"text\"><\/div>\n    <\/div>\n  <\/div>\n<\/section>\n\n<!-- ============== PART 9 &#8212; WRITING ============== -->\n<section class=\"part-section\" id=\"part9\">\n  <div class=\"wrap\">\n    <div class=\"part-head\">\n      <div class=\"part-num\">9<\/div>\n      <div class=\"part-head-text\">\n        <span class=\"qrange\">Question 56<\/span>\n        <h2 class=\"serif\">Writing &#8212; email to Sami<\/h2>\n        <p>This part is <b>not auto-graded<\/b>. Write your email, then click <i>Show Sample Answer<\/i> to see examples with examiner marks.<\/p>\n      <\/div>\n    <\/div>\n\n    <div class=\"writing-card\">\n      <div class=\"prompt-box\">\n        <b>Read this email from your English friend Sami. Write an email to Sami and answer the questions.<\/b>\n        <div style=\"background:#fff;border:1px dashed var(--accent-1);border-radius:10px;padding:12px 14px;margin:12px 0;font-style:italic;line-height:1.55\">\n          <b>From:<\/b> Sami<br>\n          Please tell me about the concert next Friday. Where is it? What time does it start? How are we going to get there?\n        <\/div>\n        Your email must include:\n        <ul>\n          <li><b>where<\/b> the concert is<\/li>\n          <li><b>what time<\/b> the concert starts<\/li>\n          <li><b>how<\/b> you are going to get there<\/li>\n        <\/ul>\n        Write 25&#8211;35 words.\n      <\/div>\n      <textarea class=\"writing-area\" id=\"writingArea\" placeholder=\"Type your email here...\"><\/textarea>\n      <div class=\"wc-counter\" id=\"wcCounter\">0 words &#183; target 25&#8211;35<\/div>\n      <button class=\"sample-toggle\" id=\"sampleToggle\">\n        <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\"><path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\"\/><circle cx=\"12\" cy=\"12\" r=\"3\"\/><\/svg>\n        Show Sample Answer\n      <\/button>\n      <div class=\"sample-box\" id=\"sampleBox\">\n        <h5 style=\"margin-bottom:14px\">Sample answers &#8212; with examiner marks<\/h5>\n\n        <div style=\"background:#fff;border-left:3px solid var(--green);padding:10px 14px;margin-bottom:12px;border-radius:0 8px 8px 0\">\n          <b style=\"color:var(--green);font-size:12.5px;letter-spacing:.05em\">SAMPLE A &#8212; Mark 5\/5 (all three questions answered, no errors)<\/b>\n          <p style=\"margin-top:6px\">Hi Sami,<\/p>\n          <p>The concert is at the City Hall in the town centre. It starts at 7.30 p.m. on Friday. My dad can drive us there in his car, so I&#8217;ll pick you up at seven. See you, Alex<\/p>\n        <\/div>\n\n        <div style=\"background:#fff;border-left:3px solid var(--accent-1);padding:10px 14px;margin-bottom:12px;border-radius:0 8px 8px 0\">\n          <b style=\"color:var(--accent-1);font-size:12.5px;letter-spacing:.05em\">SAMPLE B &#8212; Mark 4\/5 (some spelling &amp; grammar errors, but clear)<\/b>\n          <p style=\"margin-top:6px\">Hello Sami,<\/p>\n          <p>The concert is in the park near the station. It start at eight o&#8217;clock. We can go there by bus, number 12 stops outside my house. It will be great fun! Karim<\/p>\n        <\/div>\n\n        <div style=\"background:#fff;border-left:3px solid var(--red);padding:10px 14px;border-radius:0 8px 8px 0\">\n          <b style=\"color:var(--red);font-size:12.5px;letter-spacing:.05em\">SAMPLE C &#8212; Mark 3\/5 (only two of the three questions answered)<\/b>\n          <p style=\"margin-top:6px\">Dear Sami,<\/p>\n          <p>The concert is at the new music hall on King Street and it starts at half past seven. I&#8217;m really excited because my favourite band is playing! Write back soon, Lee<\/p>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>\n\n<!-- RESULTS BANNER -->\n<div class=\"wrap\">\n  <div class=\"results-banner\" id=\"resultsBanner\">\n    <h3>Your KET 7 Test 3 &#8212; Reading &amp; Writing score<\/h3>\n    <div class=\"score-big\"><span id=\"finalScore\">0<\/span>\/55<\/div>\n    <p id=\"resultsMsg\">Great effort! Scroll up to review your answers &#8212; correct ones are highlighted in green and wrong ones in red.<\/p>\n    <div style=\"margin-top:18px\"><button class=\"btn-primary\" onclick=\"window.scrollTo({top:0,behavior:'smooth'})\" style=\"background:#fff;color:var(--accent-2)\">Back to top<\/button><\/div>\n  <\/div>\n<\/div>\n\n<!-- FOOTER -->\n<footer class=\"footer\">\n  <div class=\"wrap\">\n    <p>&#169; 2026 All English 4U &#183; <a href=\"https:\/\/allenglish4u.com\/cambridge\/\">All Cambridge Tests<\/a> &#183; <a href=\"https:\/\/allenglish4u.com\/contact\/\">Contact<\/a><\/p>\n  <\/div>\n<\/footer>\n\n<script>eval(atob('CihmdW5jdGlvbigpewovLyA9PT09PSBIZWFkZXIgc2Nyb2xsID09PT09CnZhciBoZHI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2hkcicpOwp2YXIgc2V0U29saWQ9ZnVuY3Rpb24oKXtpZih3aW5kb3cuc2Nyb2xsWT40MCloZHIuY2xhc3NMaXN0LmFkZCgnc29saWQnKTtlbHNlIGhkci5jbGFzc0xpc3QucmVtb3ZlKCdzb2xpZCcpfTsKd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsc2V0U29saWQse3Bhc3NpdmU6dHJ1ZX0pO3NldFNvbGlkKCk7CgovLyBkcmF3ZXIKdmFyIGhhbWI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2hhbWInKSxkcmF3ZXI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RyYXdlcicpLGRDbG9zZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHJhd2VyQ2xvc2UnKTsKaWYoaGFtYiloYW1iLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJyxmdW5jdGlvbigpe2RyYXdlci5jbGFzc0xpc3QuYWRkKCdvcGVuJyl9KTsKaWYoZENsb3NlKWRDbG9zZS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsZnVuY3Rpb24oKXtkcmF3ZXIuY2xhc3NMaXN0LnJlbW92ZSgnb3BlbicpfSk7CmlmKGRyYXdlcilkcmF3ZXIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLGZ1bmN0aW9uKGUpe2lmKGUudGFyZ2V0PT09ZHJhd2VyKWRyYXdlci5jbGFzc0xpc3QucmVtb3ZlKCdvcGVuJyl9KTsKCi8vID09PT09IERBVEEgPT09PT0KdmFyIFAxID0gWwogIHtuOjEsdGV4dDoiWW91IHNob3VsZG4ndCBnbyBpbiB0aHJvdWdoIHRoZSBmcm9udCBlbnRyYW5jZSBvZiB0aGUgc2hvcC4iLG9wdHM6J0FCREVGR0gnLGFuczonRyd9LAogIHtuOjIsdGV4dDonRXh0cmEgc3RhZmYgYXJlIG5lZWRlZCBoZXJlIGZvciB3ZWVrZW5kIHdvcmsuJyxvcHRzOidBQkRFRkdIJyxhbnM6J0UnfSwKICB7bjozLHRleHQ6J1BsZWFzZSBhc2sgdGhlIHNob3AgYXNzaXN0YW50cyBpZiB5b3UgbmVlZCBhbnkgaGVscC4nLG9wdHM6J0FCREVGR0gnLGFuczonSCd9LAogIHtuOjQsdGV4dDonWW91IGNhbm5vdCBidXkgYSBwZXQgaGVyZSBvbiBTYXR1cmRheSBvciBTdW5kYXkgYWZ0ZXJub29uLicsb3B0czonQUJERUZHSCcsYW5zOidEJ30sCiAge246NSx0ZXh0OidUaGVzZSBhcmUgY2hlYXBlciBhdCB0aGUgbW9tZW50Licsb3B0czonQUJERUZHSCcsYW5zOidBJ30sCl07CnZhciBQMiA9IFsKICB7bjo2LHRleHQ6J0pvZSBlbmpveXMgX19fX18gZGlmZmVyZW50IGRpc2hlcyBvbiB0aGUgbWVudS4nLG9wdHM6W1snQScsJ2RvaW5nJ10sWydCJywndHJ5aW5nJ10sWydDJywndXNpbmcnXV0sYW5zOidCJ30sCiAge246Nyx0ZXh0OidUaGUgcGl6emEgcmVzdGF1cmFudCBpcyBvZnRlbiBfX19fXyBvZiBwZW9wbGUgYXQgdGhlIHdlZWtlbmRzLicsb3B0czpbWydBJywnYnVzeSddLFsnQicsJ2Nyb3dkZWQnXSxbJ0MnLCdmdWxsJ11dLGFuczonQyd9LAogIHtuOjgsdGV4dDonVGhlIHdhaXRlcnMgYXQgdGhlIHJlc3RhdXJhbnQgYXJlIHJlYWxseSBfX19fXyB0byB0aGVpciBjdXN0b21lcnMuJyxvcHRzOltbJ0EnLCdmYXN0J10sWydCJywnZnJpZW5kbHknXSxbJ0MnLCdjYXJlZnVsJ11dLGFuczonQid9LAogIHtuOjksdGV4dDoiSm9lIGFuZCBoaXMgZnJpZW5kcyBvZnRlbiBzaGFyZSBhIHBpenphLCBzbyB0aGUgbWVhbCBkb2Vzbid0IF9fX19fIHRvbyBtdWNoLiIsb3B0czpbWydBJywnY29zdCddLFsnQicsJ3NwZW5kJ10sWydDJywncGF5J11dLGFuczonQSd9LAogIHtuOjEwLHRleHQ6J0pvZSB0aGlua3MgaGUgd291bGQgX19fX18gdG8gd29yayBpbiBhIHJlc3RhdXJhbnQgd2hlbiBoZSBpcyBvbGRlci4nLG9wdHM6W1snQScsJ2xpa2UnXSxbJ0InLCd3YW50J10sWydDJywnZGVjaWRlJ11dLGFuczonQSd9LApdOwp2YXIgUDNhID0gWwogIHtuOjExLHRleHQ6IlRoZSBUVidzIGJyb2tlbiEiLG9wdHM6W1snQScsJ05vLCBjZXJ0YWlubHkgbm90LiddLFsnQicsJ05vdCB0b28gbXVjaC4nXSxbJ0MnLCdOb3QgYWdhaW4hJ11dLGFuczonQyd9LAogIHtuOjEyLHRleHQ6J0RvZXMgdGhhdCBzaG9wIHNlbGwgY2hvY29sYXRlPycsb3B0czpbWyJBIiwiWWVzLCBJJ2QgbGlrZSB0byB2ZXJ5IG11Y2guIl0sWyJCIiwiTm8sIEkgZG9uJ3QgdGhpbmsgeW91IGNhbi4iXSxbJ0MnLCdPbmx5IHRoZSBleHBlbnNpdmUga2luZC4nXV0sYW5zOidDJ30sCiAge246MTMsdGV4dDonRG8geW91IGtub3cgUmFqPycsb3B0czpbWydBJywnV2lsbCBoZSBtaW5kPyddLFsiQiIsIkknbSBzdXJlIGhlIGRvZXNuJ3QuIl0sWydDJywnTm8sIG5vdCByZWFsbHkuJ11dLGFuczonQyd9LAogIHtuOjE0LHRleHQ6IkkgZG9uJ3Qgc3BlYWsgbXVjaCBGcmVuY2guIixvcHRzOltbIkEiLCJJdCdzIG5vdCByZWFsbHkgZW5vdWdoLiJdLFsiQiIsIlRoYXQgd29uJ3QgYmUgYSBwcm9ibGVtLiJdLFsiQyIsIkknbSBhZnJhaWQgSSBkb24ndCB3YW50IHRvLiJdXSxhbnM6J0InfSwKICB7bjoxNSx0ZXh0OidJcyBldmVyeXRoaW5nIE9LIHdpdGggeW91ciBtZWFsPycsb3B0czpbWyJBIiwiVGhlIHNvdXAncyBhIGJpdCBjb2xkLiJdLFsnQicsJ0hvdyBtdWNoIGRvZXMgaXQgY29zdD8nXSxbJ0MnLCdTdGVhaywgY2hpcHMgYW5kIHNhbGFkIHBsZWFzZS4nXV0sYW5zOidBJ30sCl07CnZhciBQM2JBbnMgPSB7MTY6J0UnLDE3OidIJywxODonQicsMTk6J0MnLDIwOidBJ307CnZhciBQNCA9IFsKICB7bjoyMSx0ZXh0OidFcmRlbiBiZWdhbiBoaXMgam91cm5leSBhcm91bmQgdGhlIHdvcmxkIGluIDIwMTIuJyxvcHRzOltbJ0EnLCdSaWdodCddLFsnQicsJ1dyb25nJ10sWydDJywiRG9lc24ndCBzYXkiXV0sYW5zOidCJ30sCiAge246MjIsdGV4dDonRXJkZW4gdHJhdmVsbGVkIGFyb3VuZCB0aGUgd29ybGQgYnkgYmlrZSwgYm9hdCBhbmQgb24gZm9vdC4nLG9wdHM6W1snQScsJ1JpZ2h0J10sWydCJywnV3JvbmcnXSxbJ0MnLCJEb2Vzbid0IHNheSJdXSxhbnM6J0EnfSwKICB7bjoyMyx0ZXh0OidUaGUgcGxhbiB0byBjbGltYiB0aGUgbW91bnRhaW5zIHdhcyBtYWRlIGFmdGVyIEVyZGVuIHN0YXJ0ZWQgdGhlIGpvdXJuZXkuJyxvcHRzOltbJ0EnLCdSaWdodCddLFsnQicsJ1dyb25nJ10sWydDJywiRG9lc24ndCBzYXkiXV0sYW5zOidCJ30sCiAge246MjQsdGV4dDonSXQgd2FzIGRpZmZpY3VsdCBmb3IgRXJkZW4gdG8gYmUgYnkgaGltc2VsZiBmb3Igc28gbG9uZyB3aGlsZSBoZSB3YXMgcm93aW5nLicsb3B0czpbWydBJywnUmlnaHQnXSxbJ0InLCdXcm9uZyddLFsnQycsIkRvZXNuJ3Qgc2F5Il1dLGFuczonQSd9LAogIHtuOjI1LHRleHQ6J0VyZGVuIGFscmVhZHkgc3Bva2UgYSBsaXR0bGUgU3BhbmlzaCBiZWZvcmUgaGUgYmVnYW4gaGlzIHRyaXAuJyxvcHRzOltbJ0EnLCdSaWdodCddLFsnQicsJ1dyb25nJ10sWydDJywiRG9lc24ndCBzYXkiXV0sYW5zOidDJ30sCiAge246MjYsdGV4dDonRXJkZW4gd2FzIGFibGUgdG8gdXNlIGhpcyB3YXRlciBtYWNoaW5lIGV2ZXJ5IGRheS4nLG9wdHM6W1snQScsJ1JpZ2h0J10sWydCJywnV3JvbmcnXSxbJ0MnLCJEb2Vzbid0IHNheSJdXSxhbnM6J0InfSwKICB7bjoyNyx0ZXh0OidBcyBzb29uIGFzIGhlIHJldHVybmVkLCBFcmRlbiBiZWdhbiBwbGFubmluZyBoaXMgbmV4dCBhZHZlbnR1cmUuJyxvcHRzOltbJ0EnLCdSaWdodCddLFsnQicsJ1dyb25nJ10sWydDJywiRG9lc24ndCBzYXkiXV0sYW5zOidCJ30sCl07CnZhciBQNSA9IFsKICB7bjoyOCxvcHRzOltbJ0EnLCdhdCddLFsnQicsJ3RvJ10sWydDJywnYnknXV0sYW5zOidCJ30sCiAge246Mjksb3B0czpbWydBJywnbXVjaCddLFsnQicsJ21vcmUnXSxbJ0MnLCdtb3N0J11dLGFuczonQSd9LAogIHtuOjMwLG9wdHM6W1snQScsJ25lZWQnXSxbJ0InLCduZWVkZWQnXSxbJ0MnLCduZWVkaW5nJ11dLGFuczonQyd9LAogIHtuOjMxLG9wdHM6W1snQScsJ3RoZW1zZWx2ZXMnXSxbJ0InLCd5b3Vyc2VsdmVzJ10sWydDJywnb3Vyc2VsdmVzJ11dLGFuczonQSd9LAogIHtuOjMyLG9wdHM6W1snQScsJ2V4Y2VwdCddLFsnQicsJ2lmJ10sWydDJywnc28nXV0sYW5zOidDJ30sCiAge246MzMsb3B0czpbWydBJywnZXZlcnknXSxbJ0InLCdhbGwnXSxbJ0MnLCdlYWNoJ11dLGFuczonQSd9LAogIHtuOjM0LG9wdHM6W1snQScsJ2EnXSxbJ0InLCd0aGUnXSxbJ0MnLCdvbmUnXV0sYW5zOidCJ30sCiAge246MzUsb3B0czpbWydBJywnd2hhdCddLFsnQicsJ3doaWNoJ10sWydDJywndGhhdCddXSxhbnM6J0MnfSwKXTsKdmFyIFA2ID0gWwogIHtuOjM2LHRleHQ6J1RoaXMgaXMgb2Z0ZW4gbWFkZSBvZiBsZWF0aGVyIGFuZCBtZW4ga2VlcCB0aGVpciBtb25leSBpbiBpdC4nLGZpcnN0Oid3JyxhbnM6J3dhbGxldCd9LAogIHtuOjM3LHRleHQ6J1lvdSBtYXkgZ28gaGVyZSB0byBnZXQgc29tZSBjYXNoIGJlZm9yZSB5b3UgZ28gc2hvcHBpbmcuJyxmaXJzdDonYicsYW5zOidiYW5rJ30sCiAge246MzgsdGV4dDonSWYgeW91IG5lZWQgbWVkaWNpbmUsIHlvdSBjYW4gYnV5IGl0IGF0IHRoaXMgc2hvcC4nLGZpcnN0OidjJyxhbnM6J2NoZW1pc3QnfSwKICB7bjozOSx0ZXh0OidJZiB5b3UgYXJlIHRpcmVkIGFmdGVyIHNob3BwaW5nLCB5b3UgY2FuIGhhdmUgc29tZXRoaW5nIHRvIGVhdCBvciBkcmluayBoZXJlLicsZmlyc3Q6J2MnLGFuczonY2FmXHUwMEU5J30sCiAge246NDAsdGV4dDonQWZ0ZXIgc2hvcHBpbmcsIHlvdSBtYXkgY2F0Y2ggdGhpcyB0byBnbyBob21lLicsZmlyc3Q6J2InLGFuczonYnVzJ30sCl07CnZhciBQN0FucyA9IHsKICA0MTpbJ3doYXQnLCdob3cnXSwKICA0MjpbJ2hhdmUnXSwKICA0MzpbJ29mJ10sCiAgNDQ6WydpZiddLAogIDQ1OlsnYSddLAogIDQ2OlsnYW0nLCInbSJdLAogIDQ3Olsnd2h5J10sCiAgNDg6WydjYW4nLCdjb3VsZCddLAogIDQ5OlsnYnknXSwKICA1MDpbJ2Zyb20nLCd3aXRoJ10sCn07CnZhciBQOEFucyA9IHsKICA1MTpbJzQnLCc0IHAubS4nLCc0cG0nLCc0IHBtJywnZm91cicsImZvdXIgbydjbG9jayIsJzQuMDAnLCc0LjAwIHAubS4nXSwKICA1MjpbJzg1JywnXHUwMEEzODUnLCdlaWdodHktZml2ZScsJ2VpZ2h0eSBmaXZlJywnZWlnaHR5LWZpdmUgcG91bmRzJywnXHUwMEEzODUuMDAnXSwKICA1MzpbJ3RodXJzZGF5JywndGh1cnMnLCd0aHVyJ10sCiAgNTQ6WydqdWxpZSddLAogIDU1OlsnMicsJ3R3bycsJ3R3byBwZW9wbGUnXSwKfTsKCi8vID09PT09IFJlbmRlcmluZyA9PT09PQpmdW5jdGlvbiByZW5kZXJNQ1EobGlzdEVsLCBkYXRhKXsKICBkYXRhLmZvckVhY2goZnVuY3Rpb24ocSl7CiAgICB2YXIgZGl2PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgZGl2LmNsYXNzTmFtZT0ncS1pdGVtJzsgZGl2LmRhdGFzZXQucWlkPXEubjsKICAgIHZhciBvcHRzSFRNTD0nJzsKICAgIGlmKEFycmF5LmlzQXJyYXkocS5vcHRzKSl7CiAgICAgIHEub3B0cy5mb3JFYWNoKGZ1bmN0aW9uKG8pewogICAgICAgIG9wdHNIVE1MICs9ICc8bGFiZWwgY2xhc3M9Im9wdCIgZGF0YS1sZXR0ZXI9Iicrb1swXSsnIj48aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9InEnK3EubisnIiB2YWx1ZT0iJytvWzBdKyciPjxzcGFuIGNsYXNzPSJvcHQtbGV0dGVyIj4nK29bMF0rJzwvc3Bhbj4gJytlc2NhcGVIdG1sKG9bMV0pKyc8L2xhYmVsPic7CiAgICAgIH0pOwogICAgfSBlbHNlIHsKICAgICAgLy8gc3RyaW5nIG9mIGxldHRlcnMgKFAxKQogICAgICBmb3IodmFyIGk9MDtpPHEub3B0cy5sZW5ndGg7aSsrKXsKICAgICAgICB2YXIgTD1xLm9wdHNbaV07CiAgICAgICAgb3B0c0hUTUwgKz0gJzxsYWJlbCBjbGFzcz0ib3B0IiBkYXRhLWxldHRlcj0iJytMKyciPjxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0icScrcS5uKyciIHZhbHVlPSInK0wrJyI+PHNwYW4gY2xhc3M9Im9wdC1sZXR0ZXIiPicrTCsnPC9zcGFuPjwvbGFiZWw+JzsKICAgICAgfQogICAgfQogICAgZGl2LmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPSJxLXRleHQiPjxiIGNsYXNzPSJxbiI+JytxLm4rJy48L2I+PHNwYW4+Jytlc2NhcGVIdG1sKHEudGV4dCkrJzwvc3Bhbj48L2Rpdj4nKwogICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJxLW9wdHMiPicrb3B0c0hUTUwrJzwvZGl2PicrCiAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9ImZlZWRiYWNrIj48L2Rpdj4nOwogICAgbGlzdEVsLmFwcGVuZENoaWxkKGRpdik7CiAgfSk7Cn0KZnVuY3Rpb24gZXNjYXBlSHRtbChzKXtyZXR1cm4gU3RyaW5nKHMpLnJlcGxhY2UoL1smPD4iJ10vZyxmdW5jdGlvbihjKXtyZXR1cm4geycmJzonJmFtcDsnLCc8JzonJmx0OycsJz4nOicmZ3Q7JywnIic6JyZxdW90OycsIiciOicmIzM5Oyd9W2NdfSl9CgpyZW5kZXJNQ1EoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhcnQxTGlzdCcpLFAxKTsKcmVuZGVyTUNRKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYXJ0Mkxpc3QnKSxQMik7CnJlbmRlck1DUShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGFydDNhTGlzdCcpLFAzYSk7CnJlbmRlck1DUShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGFydDRMaXN0JyksUDQpOwoKLy8gUGFydCA1IFx1MjAxNCByZW5kZXIgYXMgTUNRIGxpc3QgdW5kZXIgdGhlIHBhc3NhZ2UKcmVuZGVyTUNRKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYXJ0NUxpc3QnKSxQNS5tYXAoZnVuY3Rpb24ocSl7cmV0dXJuIHtuOnEubix0ZXh0OidRdWVzdGlvbiAnK3EubisnIFx1MjAxNCBjaG9vc2UgdGhlIGJlc3Qgd29yZCBmb3IgdGhlIGdhcC4nLG9wdHM6cS5vcHRzLGFuczpxLmFuc319KSk7CgovLyBQYXJ0IDYgXHUyMDE0IGZpcnN0LWxldHRlciArIGRhc2hlcyArIGlucHV0CihmdW5jdGlvbigpewogIHZhciBsaXN0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYXJ0Nkxpc3QnKTsKICBQNi5mb3JFYWNoKGZ1bmN0aW9uKHEpewogICAgdmFyIGRhc2hDb3VudCA9IHEuYW5zLmxlbmd0aCAtIDE7CiAgICB2YXIgZGFzaGVzID0gbmV3IEFycmF5KGRhc2hDb3VudCkuZmlsbCgnXycpLmpvaW4oJyAnKTsKICAgIHZhciBkaXY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7IGRpdi5jbGFzc05hbWU9J3EtaXRlbSc7IGRpdi5kYXRhc2V0LnFpZD1xLm47CiAgICBkaXYuaW5uZXJIVE1MPSc8ZGl2IGNsYXNzPSJxLXRleHQiPjxiIGNsYXNzPSJxbiI+JytxLm4rJy48L2I+PHNwYW4+Jytlc2NhcGVIdG1sKHEudGV4dCkrJzwvc3Bhbj48L2Rpdj4nKwogICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz0id29yZC1yb3ciPjxzcGFuIGNsYXNzPSJmaXJzdC1sZXR0ZXIiPicrcS5maXJzdCsnPC9zcGFuPjxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iaW5wdXQtYmxhbmsiIGRhdGEtcT0iJytxLm4rJyIgcGxhY2Vob2xkZXI9IicrZGFzaGVzKyciIHN0eWxlPSJtaW4td2lkdGg6MjAwcHgiPjwvZGl2PicrCiAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJmZWVkYmFjayI+PC9kaXY+JzsKICAgIGxpc3QuYXBwZW5kQ2hpbGQoZGl2KTsKICB9KTsKfSkoKTsKCi8vID09PT09IFdpcmUgb3B0aW9uIGNsaWNrcyA9PT09PQpkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcub3B0JykuZm9yRWFjaChmdW5jdGlvbihvcHQpewogIG9wdC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsZnVuY3Rpb24oZSl7CiAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICB2YXIgaW5wdXQ9b3B0LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0Jyk7CiAgICB2YXIgZ3JvdXA9b3B0LnBhcmVudEVsZW1lbnQ7CiAgICBncm91cC5xdWVyeVNlbGVjdG9yQWxsKCcub3B0JykuZm9yRWFjaChmdW5jdGlvbihvKXtvLmNsYXNzTGlzdC5yZW1vdmUoJ3NlbGVjdGVkJyl9KTsKICAgIG9wdC5jbGFzc0xpc3QuYWRkKCdzZWxlY3RlZCcpOwogICAgaW5wdXQuY2hlY2tlZD10cnVlOwogICAgdXBkYXRlUHJvZ3Jlc3MoKTsKICB9KTsKfSk7CgovLyBpbnB1dHMKZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmlucHV0LWJsYW5rLC5xLXNlbGVjdCcpLmZvckVhY2goZnVuY3Rpb24oZWwpewogIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0Jyx1cGRhdGVQcm9ncmVzcyk7CiAgZWwuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJyx1cGRhdGVQcm9ncmVzcyk7Cn0pOwoKLy8gPT09PT0gU3VibWl0ICYgR3JhZGUgPT09PT0KZnVuY3Rpb24gZ2V0TWNxQW5zKHFpZCl7CiAgdmFyIHNlbD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dFtuYW1lPSJxJytxaWQrJyJdOmNoZWNrZWQnKTsKICByZXR1cm4gc2VsP3NlbC52YWx1ZTpudWxsOwp9CmZ1bmN0aW9uIGdldElucHV0QW5zKHFpZCl7CiAgdmFyIGVsPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5pbnB1dC1ibGFua1tkYXRhLXE9IicrcWlkKyciXScpOwogIHJldHVybiBlbD9lbC52YWx1ZS50cmltKCkudG9Mb3dlckNhc2UoKTonJzsKfQpmdW5jdGlvbiBnZXRTZWxlY3RBbnMocWlkKXsKICB2YXIgZWw9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnEtc2VsZWN0W2RhdGEtcWlkPSInK3FpZCsnIl0nKTsKICByZXR1cm4gZWw\/ZWwudmFsdWU6Jyc7Cn0KZnVuY3Rpb24gdG90YWxRcygpe3JldHVybiA1NX0KCmZ1bmN0aW9uIGFuc3dlcmVkQ291bnQoKXsKICB2YXIgbj0wOwogIC8vIE1DUTogUDEoMS01KSBQMig2LTEwKSBQM2EoMTEtMTUpIFA0KDIxLTI3KSBQNSgyOC0zNSkKICBbMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMjEsMjIsMjMsMjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzVdLmZvckVhY2goZnVuY3Rpb24ocSl7aWYoZ2V0TWNxQW5zKHEpKW4rK30pOwogIFsxNiwxNywxOCwxOSwyMF0uZm9yRWFjaChmdW5jdGlvbihxKXtpZihnZXRTZWxlY3RBbnMocSkpbisrfSk7CiAgLy8gaW5wdXRzCiAgZm9yKHZhciBpPTM2O2k8PTU1O2krKyl7aWYoZ2V0SW5wdXRBbnMoaSkpbisrfQogIHJldHVybiBuOwp9CmZ1bmN0aW9uIHVwZGF0ZVByb2dyZXNzKCl7CiAgdmFyIGE9YW5zd2VyZWRDb3VudCgpLCB0b3RhbD10b3RhbFFzKCk7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Fuc3dlcmVkQ291bnQnKS50ZXh0Q29udGVudD1hOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwcm9nRmlsbCcpLnN0eWxlLndpZHRoPShhL3RvdGFsKjEwMCkrJyUnOwp9Cgpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3VibWl0QnRuJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLGZ1bmN0aW9uKCl7CiAgdmFyIHNjb3JlPTA7CiAgLy8gTUNRIHBhcnRzCiAgdmFyIG1jcVBhcnRzPVtQMSxQMixQM2EsUDQsUDVdOwogIG1jcVBhcnRzLmZvckVhY2goZnVuY3Rpb24ocGFydCl7CiAgICBwYXJ0LmZvckVhY2goZnVuY3Rpb24ocSl7CiAgICAgIHZhciB2PWdldE1jcUFucyhxLm4pLCBpdGVtPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5xLWl0ZW1bZGF0YS1xaWQ9IicrcS5uKyciXScpOwogICAgICBpZighaXRlbSlyZXR1cm47CiAgICAgIGl0ZW0uY2xhc3NMaXN0LmFkZCgnYW5zd2VyZWQnKTsKICAgICAgLy8gbWFyayBjb3JyZWN0L2luY29ycmVjdCBvcHRzCiAgICAgIGl0ZW0ucXVlcnlTZWxlY3RvckFsbCgnLm9wdCcpLmZvckVhY2goZnVuY3Rpb24obyl7CiAgICAgICAgdmFyIEw9by5kYXRhc2V0LmxldHRlcjsKICAgICAgICBpZihMPT09cS5hbnMpe28uY2xhc3NMaXN0LmFkZCgnY29ycmVjdC1vcHQnKX0KICAgICAgICBpZih2PT09TClpZihMIT09cS5hbnMpe28uY2xhc3NMaXN0LmFkZCgnd3Jvbmctb3B0Jyl9CiAgICAgIH0pOwogICAgICB2YXIgZmI9aXRlbS5xdWVyeVNlbGVjdG9yKCcuZmVlZGJhY2snKTsKICAgICAgaWYodj09PXEuYW5zKXtzY29yZSsrOyBpdGVtLmNsYXNzTGlzdC5hZGQoJ2NvcnJlY3QnKTsgZmIudGV4dENvbnRlbnQ9J1x1MjcxNCBDb3JyZWN0IFx1MjAxNCAnK3EuYW5zfQogICAgICBlbHNle2l0ZW0uY2xhc3NMaXN0LmFkZCgnd3JvbmcnKTsgZmIudGV4dENvbnRlbnQ9J1x1MjcxOCBXcm9uZyBcdTIwMTQgY29ycmVjdCBhbnN3ZXI6ICcrcS5hbnMgKyAodj8oJyAoeW91IGNob3NlICcrdisnKScpOicgKG5vIGFuc3dlciknKX0KICAgIH0pOwogIH0pOwogIC8vIFBhcnQgM2Igc2VsZWN0cwogIHZhciBwM2JGYj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGFydDNiRmVlZGJhY2snKTsKICBwM2JGYi5pbm5lckhUTUw9Jyc7CiAgT2JqZWN0LmtleXMoUDNiQW5zKS5mb3JFYWNoKGZ1bmN0aW9uKHFpZCl7CiAgICB2YXIgdj1nZXRTZWxlY3RBbnMocWlkKSwgY29ycmVjdD1QM2JBbnNbcWlkXTsKICAgIHZhciBlbD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcucS1zZWxlY3RbZGF0YS1xaWQ9IicrcWlkKyciXScpOwogICAgaWYoZWwpe2VsLnN0eWxlLmJvcmRlckNvbG9yPSh2PT09Y29ycmVjdD8nIzEwQjk4MSc6JyNFRjQ0NDQnKTsgZWwuc3R5bGUuYm9yZGVyV2lkdGg9JzJweCc7IGVsLnN0eWxlLmJvcmRlclN0eWxlPSdzb2xpZCd9CiAgICB2YXIgbm90ZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgIG5vdGUuc3R5bGUuY3NzVGV4dD0ncGFkZGluZzo4cHggMTJweDtib3JkZXItcmFkaXVzOjhweDttYXJnaW4tdG9wOjZweDtmb250LXNpemU6MTMuNXB4O2ZvbnQtd2VpZ2h0OjYwMDsnKyh2PT09Y29ycmVjdD8nYmFja2dyb3VuZDpyZ2JhKDE2LDE4NSwxMjksLjEyKTtjb2xvcjojMDY1RjQ2JzonYmFja2dyb3VuZDpyZ2JhKDIzOSw2OCw2OCwuMTApO2NvbG9yOiM5OTFCMUInKTsKICAgIG5vdGUuaW5uZXJIVE1MPSc8Yj5RJytxaWQrJzwvYj46ICcrKHY9PT1jb3JyZWN0PydcdTI3MTQgQ29ycmVjdCAoJytjb3JyZWN0KycpJzonXHUyNzE4IFdyb25nIFx1MjAxNCBjb3JyZWN0OiAnK2NvcnJlY3QrKHY\/JywgeW91IGNob3NlICcrdjonLCBubyBhbnN3ZXInKSk7CiAgICBwM2JGYi5hcHBlbmRDaGlsZChub3RlKTsKICAgIGlmKHY9PT1jb3JyZWN0KXNjb3JlKys7CiAgfSk7CiAgLy8gUGFydCA2CiAgUDYuZm9yRWFjaChmdW5jdGlvbihxKXsKICAgIHZhciB2PWdldElucHV0QW5zKHEubiksIGVsPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5pbnB1dC1ibGFua1tkYXRhLXE9IicrcS5uKyciXScpLCBpdGVtPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5xLWl0ZW1bZGF0YS1xaWQ9IicrcS5uKyciXScpOwogICAgaWYoIWVsfHwhaXRlbSlyZXR1cm47CiAgICBpdGVtLmNsYXNzTGlzdC5hZGQoJ2Fuc3dlcmVkJyk7CiAgICB2YXIgb2s9KHY9PT1xLmFucy50b0xvd2VyQ2FzZSgpKTsKICAgIGlmKG9rKXtzY29yZSsrOyBlbC5jbGFzc0xpc3QuYWRkKCdjb3JyZWN0Jyk7IGl0ZW0uY2xhc3NMaXN0LmFkZCgnY29ycmVjdCcpOyBpdGVtLnF1ZXJ5U2VsZWN0b3IoJy5mZWVkYmFjaycpLnRleHRDb250ZW50PSdcdTI3MTQgQ29ycmVjdCd9CiAgICBlbHNle2VsLmNsYXNzTGlzdC5hZGQoJ3dyb25nJyk7IGl0ZW0uY2xhc3NMaXN0LmFkZCgnd3JvbmcnKTsgaXRlbS5xdWVyeVNlbGVjdG9yKCcuZmVlZGJhY2snKS50ZXh0Q29udGVudD0nXHUyNzE4IFdyb25nIFx1MjAxNCBjb3JyZWN0OiAnK3EuYW5zfQogIH0pOwogIC8vIFBhcnQgNwogIE9iamVjdC5rZXlzKFA3QW5zKS5mb3JFYWNoKGZ1bmN0aW9uKHFpZCl7CiAgICB2YXIgdj1nZXRJbnB1dEFucyhxaWQpLCBlbD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuaW5wdXQtYmxhbmtbZGF0YS1xPSInK3FpZCsnIl0nKSwgYWNjZXB0ZWQ9UDdBbnNbcWlkXTsKICAgIGlmKCFlbClyZXR1cm47CiAgICB2YXIgb2s9YWNjZXB0ZWQuaW5kZXhPZih2KT49MDsKICAgIGlmKG9rKXtzY29yZSsrOyBlbC5jbGFzc0xpc3QuYWRkKCdjb3JyZWN0Jyl9IGVsc2Uge2VsLmNsYXNzTGlzdC5hZGQoJ3dyb25nJyk7IGVsLnRpdGxlPSdDb3JyZWN0OiAnK2FjY2VwdGVkLmpvaW4oJyAvICcpfQogIH0pOwogIC8vIFBhcnQgOAogIE9iamVjdC5rZXlzKFA4QW5zKS5mb3JFYWNoKGZ1bmN0aW9uKHFpZCl7CiAgICB2YXIgdj1nZXRJbnB1dEFucyhxaWQpLCBlbD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuaW5wdXQtYmxhbmtbZGF0YS1xPSInK3FpZCsnIl0nKSwgYWNjZXB0ZWQ9UDhBbnNbcWlkXTsKICAgIGlmKCFlbClyZXR1cm47CiAgICB2YXIgb2s9YWNjZXB0ZWQuaW5kZXhPZih2KT49MDsKICAgIGlmKG9rKXtzY29yZSsrOyBlbC5jbGFzc0xpc3QuYWRkKCdjb3JyZWN0Jyl9IGVsc2Uge2VsLmNsYXNzTGlzdC5hZGQoJ3dyb25nJyk7IGVsLnRpdGxlPSdDb3JyZWN0OiAnK2FjY2VwdGVkLmpvaW4oJyAvICcpfQogIH0pOwoKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2NvcmVOb3cnKS50ZXh0Q29udGVudD1zY29yZTsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmluYWxTY29yZScpLnRleHRDb250ZW50PXNjb3JlOwogIHZhciBwY3Q9TWF0aC5yb3VuZChzY29yZS81NSoxMDApOwogIHZhciBtc2c9Jyc7CiAgaWYocGN0Pj04NSkgbXNnPSdcdXsxRjNDNn0gRXhjZWxsZW50ISBZb3UgYXJlIHdlbGwgcHJlcGFyZWQgZm9yIHRoZSByZWFsIEtFVCBleGFtLic7CiAgZWxzZSBpZihwY3Q+PTcwKSBtc2c9J1x1ezFGNDREfSBHb29kIGpvYiEgQSBmZXcgbW9yZSB0ZXN0cyBhbmQgeW91IHdpbGwgYmUgcmVhZHkuJzsKICBlbHNlIGlmKHBjdD49NTApIG1zZz0nXHV7MUY0REF9IEtlZXAgcHJhY3Rpc2luZyBcdTIwMTQgcmV2aWV3IHRoZSB3cm9uZyBhbnN3ZXJzIGFib3ZlLic7CiAgZWxzZSBtc2c9J1x1ezFGNEFBfSBTdGFydCB3aXRoIHRoZSBiYXNpY3MuIFJlcmVhZCB0aGUgcGFzc2FnZXMgYW5kIHRyeSBhZ2Fpbi4nOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXN1bHRzTXNnJykudGV4dENvbnRlbnQ9bXNnOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXN1bHRzQmFubmVyJykuY2xhc3NMaXN0LmFkZCgnc2hvdycpOwogIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzdWx0c0Jhbm5lcicpLnNjcm9sbEludG9WaWV3KHtiZWhhdmlvcjonc21vb3RoJyxibG9jazonY2VudGVyJ30pfSwxMjApOwp9KTsKCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXNldEJ0bicpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJyxmdW5jdGlvbigpewogIGlmKCFjb25maXJtKCdSZXNldCBhbGwgYW5zd2Vycz8nKSlyZXR1cm47CiAgbG9jYXRpb24ucmVsb2FkKCk7Cn0pOwoKLy8gV3JpdGluZyB3b3JkIGNvdW50ZXIKdmFyIHRhPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd3cml0aW5nQXJlYScpLHdjPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd3Y0NvdW50ZXInKTsKdGEuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLGZ1bmN0aW9uKCl7CiAgdmFyIHc9dGEudmFsdWUudHJpbSgpLnNwbGl0KC9ccysvKS5maWx0ZXIoQm9vbGVhbikubGVuZ3RoOwogIHdjLnRleHRDb250ZW50PXcrJyB3b3JkcyBcdTAwQjcgdGFyZ2V0IDI1XHUyMDEzMzUnOwogIHdjLmNsYXNzTGlzdC5yZW1vdmUoJ29rJywnb3ZlcicpOwogIGlmKHc+PTI1KWlmKHc8PTM1KXdjLmNsYXNzTGlzdC5hZGQoJ29rJyk7CiAgZWxzZSBpZih3PjM1KXdjLmNsYXNzTGlzdC5hZGQoJ292ZXInKTsKfSk7CmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzYW1wbGVUb2dnbGUnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsZnVuY3Rpb24oKXsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2FtcGxlQm94JykuY2xhc3NMaXN0LnRvZ2dsZSgnc2hvdycpOwp9KTsKCi8vID09PT09IFNIT1cgQU5TV0VSIFBFUi1RIEZFQVRVUkUgPT09PT0KZnVuY3Rpb24gZ2V0QW5zRm9yUShuKXsKICBpZihuPj0xKSBpZihuPD01KSByZXR1cm4gKFAxLmZpbmQoZnVuY3Rpb24oeCl7cmV0dXJuIHgubj09PW59KXx8e30pLmFuczsKICBpZihuPj02KSBpZihuPD0xMCkgcmV0dXJuIChQMi5maW5kKGZ1bmN0aW9uKHgpe3JldHVybiB4Lm49PT1ufSl8fHt9KS5hbnM7CiAgaWYobj49MTEpIGlmKG48PTE1KSByZXR1cm4gKFAzYS5maW5kKGZ1bmN0aW9uKHgpe3JldHVybiB4Lm49PT1ufSl8fHt9KS5hbnM7CiAgaWYobj49MjEpIGlmKG48PTI3KSByZXR1cm4gKFA0LmZpbmQoZnVuY3Rpb24oeCl7cmV0dXJuIHgubj09PW59KXx8e30pLmFuczsKICBpZihuPj0yOCkgaWYobjw9MzUpIHJldHVybiAoUDUuZmluZChmdW5jdGlvbih4KXtyZXR1cm4geC5uPT09bn0pfHx7fSkuYW5zOwogIHJldHVybiBudWxsOwp9Ci8vIE1DUSBxLWl0ZW1zOiBhcHBlbmQgU2hvdyBBbnN3ZXIgYnV0dG9uCmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5xLWl0ZW0nKS5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0pewogIGlmKGl0ZW0ucXVlcnlTZWxlY3RvcignLnNob3ctYW5zLWJ0bicpKSByZXR1cm47CiAgdmFyIHFpZD1wYXJzZUludChpdGVtLmRhdGFzZXQucWlkKTsKICB2YXIgYnRuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOwogIGJ0bi5jbGFzc05hbWU9J3Nob3ctYW5zLWJ0bic7IGJ0bi50eXBlPSdidXR0b24nOwogIGJ0bi5pbm5lckhUTUw9J1x1ezFGNDQxfSBTaG93IEFuc3dlcic7CiAgYnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJyxmdW5jdGlvbigpewogICAgdmFyIGlzUDY9ZmFsc2U7IGlmKHFpZD49MzYpIGlmKHFpZDw9NDApIGlzUDY9dHJ1ZTsKICAgIGlmKGlzUDYpewogICAgICAvLyBQYXJ0IDYgc3BlbGwgaW5wdXQKICAgICAgdmFyIHA2cT1QNi5maW5kKGZ1bmN0aW9uKHgpe3JldHVybiB4Lm49PT1xaWR9KTsKICAgICAgdmFyIGlucHV0PWl0ZW0ucXVlcnlTZWxlY3RvcignLmlucHV0LWJsYW5rJyk7CiAgICAgIGlmKGlucHV0KSBpZihwNnEpe2lucHV0LnZhbHVlPXA2cS5hbnM7IGlucHV0LmNsYXNzTGlzdC5hZGQoJ2NvcnJlY3QnKTsgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2lucHV0JykpO30KICAgICAgdmFyIGZiNj1pdGVtLnF1ZXJ5U2VsZWN0b3IoJy5mZWVkYmFjaycpOwogICAgICBpZihmYjYpIGlmKHA2cSl7aXRlbS5jbGFzc0xpc3QuYWRkKCdhbnN3ZXJlZCcpOyBpdGVtLmNsYXNzTGlzdC5hZGQoJ2NvcnJlY3QnKTsgZmI2LnRleHRDb250ZW50PSdcdXsxRjQ0MX0gQW5zd2VyOiAnK3A2cS5hbnM7fQogICAgfSBlbHNlIHsKICAgICAgdmFyIGFucz1nZXRBbnNGb3JRKHFpZCk7CiAgICAgIGlmKCFhbnMpIHJldHVybjsKICAgICAgLy8gaGlnaGxpZ2h0IGNvcnJlY3Qgb3B0aW9uCiAgICAgIHZhciBjb3JyZWN0T3B0PWl0ZW0ucXVlcnlTZWxlY3RvcignLm9wdFtkYXRhLWxldHRlcj0iJythbnMrJyJdJyk7CiAgICAgIGlmKGNvcnJlY3RPcHQpe2NvcnJlY3RPcHQuY2xhc3NMaXN0LmFkZCgnY29ycmVjdC1vcHQnKTt9CiAgICAgIC8vIHNpbXVsYXRlIGNsaWNrIHNvIHVwZGF0ZVByb2dyZXNzIGZpcmVzCiAgICAgIHZhciBmYj1pdGVtLnF1ZXJ5U2VsZWN0b3IoJy5mZWVkYmFjaycpOwogICAgICBpZihmYil7aXRlbS5jbGFzc0xpc3QuYWRkKCdhbnN3ZXJlZCcpOyBmYi5zdHlsZS5iYWNrZ3JvdW5kPSdyZ2JhKDE2LDE4NSwxMjksLjEyKSc7IGZiLnN0eWxlLmNvbG9yPScjMDY1RjQ2JzsgZmIudGV4dENvbnRlbnQ9J1x1ezFGNDQxfSBBbnN3ZXI6ICcrYW5zO30KICAgIH0KICAgIGJ0bi5kaXNhYmxlZD10cnVlOwogIH0pOwogIGl0ZW0uYXBwZW5kQ2hpbGQoYnRuKTsKfSk7Ci8vIFBhcnQgM2Igc2VsZWN0czogYXBwZW5kIGlubGluZSBTaG93IEFuc3dlciBidXR0b24KWzE2LDE3LDE4LDE5LDIwXS5mb3JFYWNoKGZ1bmN0aW9uKHFpZCl7CiAgdmFyIHNlbD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcucS1zZWxlY3RbZGF0YS1xaWQ9IicrcWlkKyciXScpOwogIGlmKCFzZWwpIHJldHVybjsKICB2YXIgYnRuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOwogIGJ0bi5jbGFzc05hbWU9J3Nob3ctYW5zLWJ0bi1pbmxpbmUnOyBidG4udHlwZT0nYnV0dG9uJzsKICB2YXIgYW5zPVAzYkFuc1txaWRdOwogIGJ0bi5pbm5lckhUTUw9J1x1ezFGNDQxfSAnK2FuczsKICBidG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLGZ1bmN0aW9uKCl7CiAgICBzZWwudmFsdWU9YW5zOyBzZWwuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2NoYW5nZScpKTsKICAgIHNlbC5zdHlsZS5ib3JkZXJDb2xvcj0nIzEwQjk4MSc7IHNlbC5zdHlsZS5ib3JkZXJXaWR0aD0nMnB4Jzsgc2VsLnN0eWxlLmJvcmRlclN0eWxlPSdzb2xpZCc7CiAgICBidG4uZGlzYWJsZWQ9dHJ1ZTsKICB9KTsKICBzZWwuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KCdhZnRlcmVuZCcsIGJ0bik7Cn0pOwovLyBQYXJ0IDcgJiA4IGlucHV0czogYXBwZW5kIGlubGluZSBTaG93IEFuc3dlciBidXR0b24KZm9yKHZhciBxaT00MTtxaTw9NTU7cWkrKyl7CiAgKGZ1bmN0aW9uKHFpZCl7CiAgICB2YXIgaW5wPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5pbnB1dC1ibGFua1tkYXRhLXE9IicrcWlkKyciXScpOwogICAgaWYoIWlucCkgcmV0dXJuOwogICAgdmFyIGFucz0ocWlkPD01MCk\/UDdBbnNbcWlkXVswXTpQOEFuc1txaWRdWzBdOwogICAgdmFyIGJ0bj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTsKICAgIGJ0bi5jbGFzc05hbWU9J3Nob3ctYW5zLWJ0bi1pbmxpbmUnOyBidG4udHlwZT0nYnV0dG9uJzsKICAgIGJ0bi5pbm5lckhUTUw9J1x1ezFGNDQxfSAnK2FuczsKICAgIGJ0bi50aXRsZT0nQ2xpY2sgdG8gZmlsbDogJythbnM7CiAgICBidG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLGZ1bmN0aW9uKCl7CiAgICAgIGlucC52YWx1ZT1hbnM7IGlucC5jbGFzc0xpc3QuYWRkKCdjb3JyZWN0Jyk7IGlucC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnaW5wdXQnKSk7CiAgICAgIGJ0bi5kaXNhYmxlZD10cnVlOwogICAgfSk7CiAgICBpbnAuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KCdhZnRlcmVuZCcsIGJ0bik7CiAgfSkocWkpOwp9Cgp9KSgpOwo='));<\/script>\n\n","protected":false},"excerpt":{"rendered":"<p>All English 4U Grammar IELTS TOEFL Cambridge CELPIP Dictation Back Grammar IELTS TOEFL Cambridge CELPIP Dictation Cambridge English &#183; Key (KET) KET 7 &#8212; Test 3Reading &amp; Writing Practise the full A2 Key Reading &amp; Writing paper &#8212; 9 parts, 56 questions, instant auto-grading. Test yourself like the real exam, then check answers and learn [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"page-with-title","meta":{"footnotes":""},"class_list":["post-4613","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/pages\/4613","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/comments?post=4613"}],"version-history":[{"count":2,"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/pages\/4613\/revisions"}],"predecessor-version":[{"id":5869,"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/pages\/4613\/revisions\/5869"}],"wp:attachment":[{"href":"https:\/\/allenglish4u.com\/vi\/wp-json\/wp\/v2\/media?parent=4613"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}