{"id":305,"date":"2026-10-14T08:14:51","date_gmt":"2026-10-14T08:14:51","guid":{"rendered":"https:\/\/ongroundmedia.com\/?page_id=305"},"modified":"2026-10-14T08:17:27","modified_gmt":"2026-10-14T08:17:27","slug":"local-seo-tools","status":"publish","type":"page","link":"https:\/\/ongroundmedia.com\/?page_id=305","title":{"rendered":"Local SEO Tools"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"305\" class=\"elementor elementor-305\">\n\t\t\t\t<div class=\"elementor-element elementor-element-ba4440f e-con e-atomic-element e-flexbox-base e-default-div e-962d939 \" data-id=\"ba4440f\" data-element_type=\"e-flexbox\" data-e-type=\"e-flexbox\" data-interaction-id=\"ba4440f\">\n    \t\t<div class=\"elementor-element elementor-element-65c3376 elementor-widget elementor-widget-html\" data-id=\"65c3376\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!DOCTYPE html>\r\n<html lang=\"en\">\r\n<head>\r\n<meta charset=\"utf-8\">\r\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1, viewport-fit=cover\">\r\n<title>Local SEO Tools \u2013 Onground Media<\/title>\r\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Bricolage+Grotesque:wght@600;700;800&family=DM+Sans:wght@400;500;700&display=swap\" rel=\"stylesheet\">\r\n<script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/qrcodejs\/1.0.0\/qrcode.min.js\"><\/script>\r\n<style>\r\n:root{--primary:#4F46E5;--navy:#0F172A;--accent:#FF6B35;--green:#10B981;--bg:#F8FAFC;--surface:#FFFFFF;--text:#1E293B;--muted:#64748B;--border:#E2E8F0;--soft:#EEF2FF;box-sizing:border-box;padding-top:env(safe-area-inset-top,0px);padding-bottom:env(safe-area-inset-bottom,0px)}\r\n@media (prefers-color-scheme:dark){:root:not([data-theme=\"light\"]){--bg:#0B1120;--surface:#111A2E;--text:#E2E8F0;--muted:#94A3B8;--border:#243049;--soft:#1B2150;--navy:#020617}}\r\n:root[data-theme=\"dark\"]{--bg:#0B1120;--surface:#111A2E;--text:#E2E8F0;--muted:#94A3B8;--border:#243049;--soft:#1B2150;--navy:#020617}\r\n*,*::before,*::after{box-sizing:inherit}\r\nhtml{scroll-padding-top:calc(env(safe-area-inset-top,0px) + 76px);scroll-behavior:smooth}\r\nbody{margin:0;background:var(--bg);color:var(--text);font:400 16px\/1.55 \"DM Sans\",system-ui,sans-serif}\r\nh1,h2{font-family:\"Bricolage Grotesque\",\"DM Sans\",system-ui,sans-serif;margin:0;line-height:1.12;letter-spacing:-.02em}\r\na{color:var(--primary)}\r\n:focus-visible{outline:3px solid var(--accent);outline-offset:2px;border-radius:6px}\r\n.wrap{max-width:1180px;margin:0 auto;padding:0 20px}\r\nheader{position:sticky;top:0;z-index:5;background:var(--navy);color:#fff}\r\n.nav{display:flex;align-items:center;justify-content:space-between;height:64px;gap:12px}\r\n.brand{display:flex;align-items:center;gap:10px;color:#fff;text-decoration:none;font:700 18px \"Bricolage Grotesque\",sans-serif}\r\n.brand img{height:36px;width:auto;background:#fff;border-radius:8px;padding:2px}\r\n.nav small{color:#CBD5E1}\r\n.top{padding:36px 0 20px}\r\n.top h1{font-size:clamp(30px,4.4vw,46px);font-weight:800}\r\n.top p{color:var(--muted);max-width:64ch;margin:10px 0 0}\r\n.legend{display:flex;flex-wrap:wrap;gap:8px 18px;margin-top:16px;font-size:14px;color:var(--muted)}\r\n.dot{display:inline-block;width:10px;height:10px;border-radius:50%;margin-right:6px}\r\n.lv-e{background:var(--green)}.lv-m{background:var(--primary)}\r\n.app{display:grid;grid-template-columns:300px 1fr;gap:24px;align-items:start;padding-bottom:56px}\r\naside{position:sticky;top:78px;max-height:calc(100vh - 96px);overflow:auto;background:var(--surface);border:1px solid var(--border);border-radius:14px;padding:12px}\r\naside input{width:100%;font:inherit;color:var(--text);background:var(--bg);border:1px solid var(--border);border-radius:9px;padding:9px 12px;margin-bottom:8px}\r\n.item{display:block;width:100%;text-align:left;border:0;background:transparent;color:var(--text);cursor:pointer;font:inherit;padding:9px 10px;border-radius:9px}\r\n.item:hover{background:var(--soft)}\r\n.item[aria-current=\"true\"]{background:var(--primary);color:#fff}\r\n.item b{display:block;font-weight:700;font-size:15px}\r\n.item span{display:block;font-size:12.5px;opacity:.78;line-height:1.35}\r\n.panel{background:var(--surface);border:1px solid var(--border);border-radius:16px;padding:24px;min-width:0}\r\n.panel h2{font-size:28px;font-weight:700}\r\n.badge{display:inline-flex;align-items:center;font-size:13px;font-weight:700;border:1px solid var(--border);padding:3px 11px;border-radius:99px;margin-left:10px;vertical-align:middle;font-family:\"DM Sans\",sans-serif;letter-spacing:0}\r\n.badge .dot{margin-right:6px}\r\n.item .dot{margin-right:8px}\r\n.panel .d{color:var(--muted);margin:8px 0 18px;max-width:72ch}\r\n.form{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:12px 16px}\r\n.form .full{grid-column:1\/-1}\r\nlabel{display:block;font-weight:500;font-size:14px;margin-bottom:4px}\r\ninput[type=text],textarea,select{width:100%;font:inherit;color:var(--text);background:var(--bg);border:1px solid var(--border);border-radius:9px;padding:10px 12px}\r\ntextarea{resize:vertical;min-height:110px}\r\ninput:focus,textarea:focus,select:focus{border-color:var(--primary)}\r\n.chk{display:flex;gap:8px;align-items:center;font-size:14px}\r\n.chk input{width:auto}\r\n.btn{border:0;cursor:pointer;font:700 14px \"DM Sans\",sans-serif;padding:10px 16px;border-radius:10px;background:var(--accent);color:#fff}\r\n.btn:hover{filter:brightness(.92)}\r\n.btn.alt{background:var(--primary)}\r\n.btn.ghost{background:transparent;color:var(--text);border:1px solid var(--border)}\r\n.bar{display:flex;gap:10px;flex-wrap:wrap;align-items:center;margin:18px 0 10px}\r\n.sum{color:var(--muted);font-size:14px;flex:1;min-width:200px}\r\n.sum b{color:var(--text)}\r\n.tw{overflow:auto;max-height:560px;border:1px solid var(--border);border-radius:12px}\r\ntable{width:100%;border-collapse:collapse;font-size:14.5px}\r\nth{position:sticky;top:0;background:var(--soft);text-align:left;font-weight:700;padding:10px 12px;white-space:nowrap}\r\ntd{padding:9px 12px;border-top:1px solid var(--border);vertical-align:top;white-space:pre-wrap;word-break:break-word}\r\ntr:hover td{background:color-mix(in srgb,var(--soft) 50%,transparent)}\r\ntd input[type=checkbox]{width:20px;height:20px;accent-color:var(--green);cursor:pointer}\r\ntr.done td{opacity:.55}\r\n.pill{display:inline-block;font-size:12.5px;font-weight:700;padding:2px 10px;border-radius:99px;background:var(--soft);color:var(--primary);white-space:nowrap}\r\n.pill.g{background:rgba(16,185,129,.15);color:#047857}.pill.o{background:rgba(255,107,53,.16);color:#C2410C}\r\n.meter{display:inline-block;width:90px;height:7px;background:var(--border);border-radius:9px;margin-left:8px;vertical-align:middle;overflow:hidden}\r\n.meter i{display:block;height:100%;background:var(--green)}\r\n.empty{padding:28px;text-align:center;color:var(--muted)}\r\n.note{font-size:13.5px;color:var(--muted);margin-top:10px}\r\n.toast{color:var(--green);font-size:14px;font-weight:500}\r\n.qrbox{display:flex;gap:18px;align-items:center;flex-wrap:wrap;margin-bottom:14px;padding:14px;border:1px solid var(--border);border-radius:12px}\r\n#qr{background:#fff;padding:8px;border-radius:8px;min-width:192px;min-height:192px;color:#475569;font-size:13px}\r\n#qr img{display:none}\r\niframe{width:100%;height:320px;border:1px solid var(--border);border-radius:12px;margin-bottom:6px}\r\nfooter{border-top:1px solid var(--border);padding:24px 0;color:var(--muted);font-size:14px}\r\n@media (max-width:900px){.app{grid-template-columns:1fr}aside{position:static;max-height:none;display:flex;flex-direction:column}aside .list{display:flex;gap:6px;overflow-x:auto;padding-bottom:6px}.item{min-width:170px;border:1px solid var(--border)}.panel{padding:18px}}\r\n@media (prefers-reduced-motion:reduce){*{scroll-behavior:auto!important}}\r\n<\/style>\r\n<\/head>\r\n<body>\r\n<header><div class=\"wrap nav\"><a class=\"brand\" href=\"#\"><img decoding=\"async\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAAB0CAIAAACNAq5DAABCp0lEQVR42r19eZxcVbX12ufequohSaczDx0IIRASQojMQ5BBJaBMMkhQQED9QEF9iAOioD5Bn+AEMgoqgxB8TGKAgGGGBAIkBEKQJEDmgYydsbur6p71\/XHuOffcW9XdlaCv\/QlNdQ237j5nn73XXntt0VrD\/ZAQASAiJPFv+hER0Ly7\/U+AJCAQiPlk8\/dta7BlBVqXcP37aF2MrSuxvZXb1kppM3QZBAUqLKCuB+qaUeitewxEz6GqeXf2HSk9h6JxIMJC+uuYtwYQ\/yrus0Rqv353N\/6Nd2ZH38r7Ktk3yjwNxXYsfw9vvYADjgurP7XGDxbp9pkCAUFARAQgSVJERIQAykVuXobVc7HqdXz0Njd+gG2rpLgVUTm+VnddYi9fgG2ABggxFlMKuQZd11+adkX\/MTJ4PwzeH31GSqGHeQntCoK7R\/abVhraXF7mkcxfP46N3cs7exN3AamFBSFoHjUPiojZI8nPxtVYMFu\/8xIWvILFbyNXrw47WaIocrtq5663axubK\/O2LgCwYwvWzMWiZ\/nBc1j7DravEWc8kWStml\/pmTZZpc5eAvMRmsbqAKSuF\/uMRMthGH6UtByKXkPsB3smTi5s53fVf2LjVhhYAHr3Wdx9EIDFNqz4APOmc87zeO81rF+CcgQFANzv6ODqpyTlotNLutIndHNxIulNYp9MQAkAoebqt\/Gvv3PBE1z7tpQ7JDFq9tPi1QqCEBGC8dsnnxKvGO8zY18BahKIACXotauMOAZjTsewCSj0hO+l462cNXRnX7MW81c6gJ119ZJdiyLJ2t7wEd6fg7dfwDsvYfE73NoKDQSQnIhSJFHSmHQ5LvhlhYF39ACo+AKS8iH267Zv4oKpnHOPLHlJilsQAAKK29QCMN5QQoldr0CsHxP7\/pkL8nY7SLF\/oHlBvP4JDYSh7jtW7T0Je5+B5hHwDdz5je7CWv9HW9\/\/9GIHVryv506Xt57DgtexZomUyxRI6D1NAUoJqYvElQ\/KEad2auCMRb3IqMrTKsxv4yoAm1dg3oOYc49eOUsIBAAgSiCxHcU\/8wn3QuuYAEmis8wed9ZJrCrZU9O8BwHRmhrSawj3+ryM\/4oM+oSzYnyW0VtJ\/2FH3U3UIt79XL+KC2bh3Vdk\/iv8cK7esE4IKUACBQLa3DWIEuvIyIisa5brp8uuo9MGtjeslv2aeZp\/pMWrYctqzvoz5tyBjYsEgIrfPD4ElJgwIdlBxqQ2LIrfXNKHpUjqGI6PaPEjMmdegVDSVytApBkB9U0y5gw5+NvoP5adBJW1b9+dC8I7XUYi0tHGJfO4YLa8\/TzffVWvXSSECkAl0PY5iqD5SkQ6G9ElcuQB4fXTkc+H2QN4R35YZcMKBCxuxZy7Of33WL9QQkApQEPi81iU3VPe1dEdr0zCKRfq+h\/pImrPMKlvmHLjmVtHUERCoLQZs+\/gew9zn\/NxyLelaZhUBMyZUNb8UynVdSydOacqg\/DuVwPA1jW84VL91stSgIQI8gIBIwKQILkVNFGK+PudIERD9j4Q+Txh4q3OLFfT+hVASMZRgAAfPMO7P8spF0vrQskHUAGhGe80gVJQQoE5XxlHSExCJbH\/Yf0Dk5BLKpeh3cl0zhYmCRNUhGz2bc0aCQK0b+CM3\/DuoznnTuhyZ8ewu\/VxVNFdklOLITt7DkmQHLirXHUfJ55ZAhhAAiUiEKHbB+LOk\/g2xttZBAqSh4w60FxHrUFWpy7FHowUYPMKvvRLzP6zlNqgXGwMai0mnrKuNI6N48wu2Wpigy1nS7vxzCd4h7a4QNr9Ee4wdceugzpiAzPjrswfSaWw5+flqGvQd5QflP\/f50ipp5ZL0QO\/xsO\/CDq2UhQ0mYTSblPACx4AEdHU+Xq57gXscUDWwN1\/vAtDnJ0sGsV3\/86nfogN7yG0sa1IkpYbm6V9idgjn35iZ63scmBJzBU7JYpnNUlvCG9p2G3t4WWsdsIo4wA1erXgk9fIuHMlcfXcIbO5ULTy\/N6B1Mt+dHwcvP6EvvW\/5KOF8dFm7hnd6SSC9CouabbsKb9\/BT37gFTdOo0KT+c8vT1zS236n1fyb2fJxvcktKlpEnZTUC1acUmtEhHrgozrNv+jXRrmlxjSSD44\/tUcWul3jb87VZIrMwnOUzmSiAFKRAm2LpcnvsJp30bHFkrqPJfUGdGpW3YOXBKkjF3f22pOMb4urTUBOfCzmHih1mKsSe85gIiCfz9AIAKH7ys9ml3eVFMYVbmaY8Sxdam+70y8cLWgXQKFFOjkEBPvrsYxlMTbSmxk772veNGROEcvKShbqoCwYmI9pvIj8SPu5O9eNE4vz4ZE8voN+qHTsGGhPVNimMUZowsco8YHu86RkghCKZZK0d+uk8n\/rRT9MNaaN4sLmV\/U6EPcB6turs9f9f6Nh0BEL52p7z5BFk6RvEAJocVbXQAptFtTKKnN479bcosd7uhOATLefvRXQHJZTGOX9K0qtIvKj90kwUTjx+JMOF52oWDxND54ElfMRBxYdQMG7JC9uzY5vUhRbd7AX\/8\/3vF9KW8WZbMGJtl6fE6K86kUMMqF2OMAurC\/Ngwy\/Zt563f\/zntPkTVzkXMbQ+wZ6czmm5HJ7rZPYObY8SLotONwWLVUJk8iQruC421qfQPtYvfT5NSaTWHcNjgIRTa+h7+fhkVPe2nYjqEfnQXJXv2gq9vNxe\/wv0+V5+5UeVdscVdO74uIf+W6TOk7WIaOdI+qWkAy+nYwj8++mw+eK22rkRPv7+LSkQorEZWYb3K1YtamEJ6dWXEoxIezpp\/\/epdnX5MFtiU5wpMQVOCFXuLyjfglgcK2FZzyRS6c4nbuzhm1puPPeTQREeiXH9FXfg7zXkCdGIgKCawL72oq3kMDu45B38HIGNhfWRatyJ43Elf8wFdu5pSLpLxFlLs7AmXCnTi+MrGLF2ybcFW5OhfJBO4gxUOX3dkX7yfn3KFN1KbskhaCdIVDIO0zkq0ery6ChLgoQPwo2k+6QUBTRKRjLZ88Hx8+ydpOUs8GsmMWtkUVlIr82zX47dnSuhQFEUUqc4UCZcNMl3mQEmkDC5oTRgWQvQ6k52yqn8F2H6Qyx9jxvnornrhUojYod9NYmUvRc3jw6n0i3jGd1Gjp5e9+tuN2tE3l3ebLPDXBr+mw5QQUywRj9nyWGA9PRWHppyppX8\/Hz8eylzNrvZatLDu0m0WwZgmvPYv3\/RjcLrn4vBFJRUP2o4VlaslH\/XfVESVQogTUWimM2M\/3j6oGj+PtxTf\/iqcuE1WCUnHdx30ks04xdWdt2YdJDgNCMwlf3RuQBuSKtC5DR9RlskSUIGWgDGrqstZRRK0BHWM6Qih3DkuyHJFgKeZT3AmN2CFLklNmID+CmhCRttV44stc+664Nwe73aZd4\/m+B4GIKMHrU\/nTiXjtYckrCSSJyFQcLdoYiwAQkb36y8W3yrUv8ohJ1GUokiwXmtiyV2rZdItkOQvqd\/\/BB85W5S1UomzmkBx3kq49JHiz\/1eXlfo1IHGWZQQAklOsa0b9YN2rBb2HSmN\/yTWKykEJohLbN3LbGmxaIdtXYfsqKbbCvCoAVBBnzcrz8L5PSjDpbP0f1QsbljUSUQ89LDj9UdT3S5IlVokqaixRiINtBCy28+\/XyUO\/Ysc2hJLeFKCmOZ2SGKtIvft4ueQW7HWIACgX9b0\/5YPXSbGsRx4Q\/Pp51je60F+qc7IqaoVc9kZ050mqbZUEFkpUHqKVWbRSUWlNh8UUb39rMoKEwsZBesB4tesRMvRANO3CxgFS17vqPjAgpBQ3YetqbniPy6Zz+Qysnavat0BBFCBCUTZTc\/u1YoPRj8OrF3bsYiAjyL5fw8SbocLKgGtHS0+u9CkrP+Cdl+o3pqjAS\/YzUT9BDdGkBjXkyLPkq79B38FgjGNpQl6aLHd8B\/ufhG\/f5gfGaaiyyt0UCKR1mb7zRPnoLYQKpAihbMIqfiFHqoXvzFYjk31EEmzsj+HHyJhTMfQQ9BwKFaRfx058n3iwGlBux\/p\/yYdP44MpXPWqlEsIRURVRtheRTRTZUqXlGM6SQyu2YcDTrxd9vkybXDBrsHLLqh9JnKY8Yi+67tq3YfIB\/Fa1HEOYaMSawMtLEaR5HD6D4MvXiG5Qjo6FlEiC99gR7uMneCvZtFad5IEW2C43KHvmYR3\/67yIglK4KIdWlcGLwtJIEF\/K9vnEZoUYNAYGXce9jrNUCxcsuJviK53hg+yxw+Vi1jxMt+6Ax8+Ju1bJAChBPZ2x76xepZN3x7i15oNSYEA2WOYnPE0+u5JsiqrqyZ6mgi2bdJ\/+zme\/IOwaE5cV+injpFad10iCmXNQSN57rU89PMghFRK\/PQnDaEk9qx6BjsOJAjg+Wv14z+QMI45RSkLHZCZirAr9oj3Ccp6Q\/NHc6IM3h8HfgN7nYL6Pp3VoX0G4Q4g\/i6mXvk6Z92ABQ+pchtUSOqEhMhUZSLhtcGdHW4R0F+vIpoRuOfn5eT7ofKpHKyWc9flbfNf5V2XcuGrEgDKZI3iMnPSWtp4OE1dQnDA8er\/3YDBI22cRd+iPlc1A493GWSJ8IMXcPcpUt5sTCRCMf+3MQiTKjxijygV55sJXKlZBJoGyIQfyPivoK5pR5GBqqddZ+4nNtWS5\/DKNVj0DASiYmCemrZMlTqc3Uns4EnjbcTAwhaR0RQ54W7s\/SWkMSl2G1GLSLGdT1yPKb\/ilo3IOTieomPujU3jVJz2l6MoqOPJ31GnXa7qe3a9iIwpHU+hSwOb3bZtrf7jcbJ6tuSCZKn6OZBzzt7ehQV2HY4voogISulRZ6ijfoJ+ox2kXAvdrdKENdMTRQQstXHmb\/TMXwelTQjyossOeXZRsHgly9QaAQjtsGsLfGkOGCeTnkFdvyyOniaDpQimAD94E\/f+APOmmY2bLA5tEfOEIQyBoKwxbG+e+xvsN1Fr6ki3btpYLpXMkae1ji9cRCmlVNDc3DsMQqZrd0Kts6Gu\/bN+8kr882rJOwDYlQFsKhmfyUyqhxbIYoKDkxHQa5A69hcY92VAufyz232Kj01qFFdMXPYyXviBrJghNLQgFS9GneIHWZgofcg772lQEQVq4JNXy6FXdEJEFB9bFyVSLvKft+hHfiGta6QgceVAJ9GfGJKpqzmWERHhhEnqy9ei7zDzeFtb29e\/\/vWFCxfWFQpimUNaa60jQHr37v2HG2\/cdZddfKYHgJDZmMWmFcvn4OWbJLTxZ9yKIJYS5c4e2FjTD1hN0V6goctkyyeCk27l0IOkc7ZU9fPK8pt2GgQ2x5gIZNgEnvYPPnWRnvugCkVEUWt7wgi8qnmSycV+LKHlxrgIAWH0xg3B6DOl9+6Va8uFnzRx0IezcP9VeOcJEaAglmbiSA2uQmJNXkTUq3\/whatw7IUMc86NBUGwedPmDRvWFwp1SikbJJFal8vlUqlYKhYr70VYrVwF6DKf+rls24h8uvHDZ1KYQFpbpJh+NdbyKSKtxp6KE\/6AnkPSkX+tFEbHhPoYJBi7puv78rN3St0AzLmVUBIj2364nGGUmlgioQxY\/EkglC0f4c1bcdS1Xp+AV+g07qCjjVNviP5xrdq6QRVEKcnE3gRFJUEKqaGBTxyXO+d\/MHxfktQaNnQSkVw+F4ZhENfdY+8gQaiUCoOgaqwa+vUAsbRDzp3CeVMkUKJT6F2M1OuYRRnfC00HUokoS43VLEMOOFdOuAn5HvS39w4SVLtt9KiVRgNIrlGOvZ49BsnLP6PWsa1s0GzjzsQn+842gaqpdUTV0AARMgJCEfFKYKABTT+YyYd+gneeCggW4taEGN5nTMaI\/8s8UtJo6s+Tf6g+83Xk6lxeF\/MZlQn1AuVCxVS3lQRBaPx21sDJserw946t0bRfq6gUk6qQ4UgYn2xWqbJuBXEW6aL9EuWAL+PEW5Crr+UElZ3IiLp8vCpHH6CoEBOuZGkrX7o2yClCSZJ50x474pUrvM8S6JKOBDLyc8HhP5SWw7UmqOOA3K2ATWv55HV84VZp3yJ1IhqMQG1XT5xVJ3czinRUZjj2mOCc38jw8dUpAyRIZelNcYjioF6tNavHNWEmmACgZz8si16VAgwcIZLiYsGeueIwR7FxlnOGkcb+X5KTbmKuvhazdW3dLtr9utj6Xf4JPOK\/pW0D5\/wJQcCo5Fi3sK5JKqt6JCJi0Hh16PfVXqdLkIO37WmY\/ADefhyPXsXFs0VBQgEIZQE1bWI0sXsJ1EBZS69B4fGX4jMX6\/pGqWYlc2EpsoDYdNkl9lpXTUrC1P0VoGMLX7xROda8gHE1Iw6oYr+lTUAZOzRXwiXBssaen1In3IRcY9U0KGkf7Y6Q1m1ttYs+z64MDyAsqE\/\/jts+woIpcYubGG5gmlcUV6q0jiB9h+GgS2XceahrdlCJjXSEAq56l0\/9Gm\/+DeXtqiFgWcdEV1BUUl2grXXqkiagDj1DnfrfGLKXJqA1XeEfYvYRWYnZkklQJD51qdMd7JyYfucJWf4Gwji9oEd+NSGCpa8yQ8sQQ8eINHvvqk68yeAYXSe6O7d9q9q4VvdOr90p30M+87vymrmyYbFxffZo8yNFMiLqm2Tcl3HId6Rp15hs7aBaQ2Vt3yIv3FR+7reqda3KAYGCQELFshYNTaq46qegbfZRpu67m5x0BY88TwUhABUjA17jDaqxLSzV1O1dsx5UJ7cpFFvBMO3Y8sqd0IRpQXRrWdPPeGnxjdjS5hHD7sg1qpP\/gP6jKpuma9l2VTd6F6ba4S4xj\/VCUvfeHZ\/8pX70XKW0dwwRNqRFEMjYk3HoDzH4ADEbLO7eA2PfC\/3ek5h6DRa\/HAhQALXt2YAgsCituViCpC6CQU596qvBCT9Av12pvc6JakwCraksV4Ja02V+SJBXQ0pjehGngqz4Oy+eiYUvQuIOJ+MlkihSW4jDLuGkpimg6d078r9k9ImZ+tHOtXB1g0d2vnFr2dPxiaQpe58hi57CvLuoQhhQTxSiCAK2HCKHXY5RJ\/mfldR3ROGj+Xj6l5w1WaKi5JR5Q0vtijEmBCLaUrs1ocERB6oTf4wDT3LZ1e233\/723Lfr8gVLmY0\/rqOjo2+fvt+57Ds9evRwwYPXBSmODW0yPlbS8DIumjPuRtt2yXlWSSloILFrppFQg2XolvHBkZelWXr\/nh6QCu5\/N+B+5jDu1NgCJQGP\/AmWvyCtS2KKLiH9RuOgS9S4LyPXyIqqCgFsXYeZf8T0G7lhlQgQWGxehMrsftqcU8UEjDLRNBif+U5w1IW6ric0NWjwijlz5jz11FP5fE5EBUEQQ1RRVCyVdtll2De\/\/S2HEVI70JA+M5QeHzzzfUOHUuh1SznnCaVMY7wjYUkadmOcOHr6CXGapfLq0z9BfXMtB6rvtHe0VJ6hO7lWvspmgtTzq5k53o1Nw\/X4C\/W0y4XQ9U3qwIvkoP9Cj0FwHeQOwVACXeas+\/nM\/8hH8ySEhAkgQlKUEhrUQpvVItCMqMMcDviCHPcjNXQ0gMAml6ZWm8\/nGxoacrlcmoIXqkDV19ertHCKZTMm1GMTeCsb6Ga+ZgJV8q2psn4l6hBXUBQNDZOSqRAnNXKL6Am0lv1Ok3EnccdJh5VHsvIigMpFUNnzg4+jMWLu0bjz8M7fdPPuctjlGLp\/3NKUNFQIlAggi16Jpv0C7z4mYlMgW\/mRuL2GUKbcpqCpyyiXqYYfrD73Exl7vK0m0AEeJgDSWnvfl64Up0SCIPSrvKmGBvrcCumMB2jTpKiEOY\/GVQLjhTQRMzeqAK0JpUILRbO+lxzzPcQgelf7tdstWwXa7Q7nqnGJVP2U+NEeA9Wkf0iPQVqF1HQUWlG2UXP9h3zxBs78E7ZvVTmTyxrCDAy7NGnXAaEsutd3VznsYkz4mjT0dvmyCFL1ebIcRVEU0fbUJRGUClT6bngyNvAhNtfTWs3A5iVrF2HxTITwMgBTlGJc+POaCj2ymVDIEnDA6TLkEx6FQ7rdc7UjU5Xv03W+W+keWI1C5YLUGEHs1SKJ80z0I7B9I2fchhk3o3UZ4AQxBNRxHwfiW2QqQqRmiWjopQ7+enDExbp5mHHfFuRzhLSEBe74n66C6vykrgLpZNvi4v7gzpCs2HHPf162bpDQxRNioVWJK5d+i26CwxMkGnrKhItQQyddZ5XdGjvvas+IaoRQ\/MKWc55KiTbru9iu336Iz16rVr0Nwz5PMhFbpFJiOY8CEUSaKqfHflZ96nIOP8T1xicmEcs4EK8oYTsB4PUwi8SuO2Gl2nqiLfDScVJtCN0JkkUS855OKvp0sj0uTYpDLdFJidwC75C9Pi3D9tuZYLjzBp5aCFkfEwFNIdQ65gDEwmoCLngW037F96cp0HCmrIhBbDV78Ems4hORIEdMUMdcIaOO1SoQt0GlyofSa6Jk0iurvRY7aK21aRuF62mw2zUhr+k4AHChZ0UeDGxdiw9nifJ5keIcNX0RrlRjoGGIAftOggT4D8jS7IR1fRy0JhjctL\/EFBMlAFf9C89cy7cekNI2UWICCwcvMSHwQ6BARGUtGtIyjkd8C+MnodAogCJbW1vb2raLKAI6imBibHthffv2q6srGL+tqU3p3kMvjB01qTOkHE2zGul4bubJmhU6NS5N4sr3pHWFX9qOpcvEAJA0BH8\/74rR74jsN0LtcdT\/mV1rRC673b5+91Oc\/kCwcTmfv1nPuF22rlMFEaXEZ94wBRYKFHRULoH9dguO\/CYOOl\/qe7vDUIncedddk++7t7GxRxSVy+UyyUCpIMyRWqng5ptvHjNmTNJkYzxvmtwVR9fCFENWa6+TzHU82O6eCr5pCICLZqOtAwUvNjE1tHSTUUI4ZYxvsgQZ\/VnpOaB22Ymd05\/KFHczFO6u1SWrkmm8EFSMIKC8NpnTfsU1C1QAhDExz7CP6DIRFUsW0CS4zS1qv3Nx+IXSZxfxioHmn9u3bVuzZm1DwzazOwGaSp8Icrk8LUHOeFfaHesAGJM9aU0\/T7U7WCdntikaas20Z5aUi140G44i5GS44rYDj0cc2ztmXFEThVD2\/Sx3RAdvpw2feY7t+rDsyFqXTorpRxEpl\/jOY\/qZ69Xil0UiKQSekI5LJxIqGiPNMqSpvz74XDn8G+g7wvLwLCHS3mXHqjFsGwcHak0RqEAhfdxGkav3iSACGCPP6cKl8dCMdYtiK5vTunLpAwjRvhWrFtoM2OZVOqme0Qup\/XskEdh3mOy6P7zmR3aZztZSnK\/qhA3i00WA5sdl1Smr6dpWnLQsmsXHr9HzHlXUMSJg3YTBcYTKc3yaJegefdQBZ8vhF2LQmBh8jkttil6fsVlzOt671gEwkfHwL1NTm92aHIAOG6Nf5RWS1NQ6ovYImKAmIx2ZA5vZKHrTWr1uWZAcLTGp3cuHvdiMjoEFrYGhn2DP\/hWV8Zryk67rBDsXXqFCgjdFwY\/rmhAAaxdj2u858y7Z3hqERkGOMejs1rmoWOsp0iSkd3\/Z9\/TgiK\/LkH1s6KuNyxVRHy5a1NSrV58+fby8y5ThtSTNrto0Lngt7PZwhY5bTHRMwBcbfGW+Y0QtkbYsACvn6O3gijRp3RJpXetiw7hYpBw3Oo1iOVubTTv8QPjtv91mvehqi6NzlZNaybMVIgIVKomQLev43O184RbZsAx5wFSB7Klq+Ry0vAaNCLp5oBxwNiZ8DQNH0cMajMzRypUrJ0+ePHny5FtuvbVv376+GLDLmFXcKQ9tU6JUkxlJvxykY6RUa10uRxlwkJpatDgxJaOjpDtNGUJ+9KGUi8j5AoECHds4XbNIfifBIJBd9\/f0ENgtK4o7UfBJQ1qsFiimz6gMquruoqB9O169D8\/cgKVzEQCBiJEcjpseaCMwTQq0JiGDRuKgL6oDz5EBI10qHNf5FZYuXfrggw9MmfLY0iVLjdt0B4pSinEYrAHoyGO8UJfLZZf\/EDCeXFv7xluTEkVRFJUzOp1aRwaI9TpBJQ7CWdXAqz5wzQn0w2YLdyTwaZKkAQR69EH\/ERnb7Rw3o6qxfXNW9T9SAYnYCp0F\/12fEom50\/jo1Vj4kqFKxRoSGq6TWETIADrSZWhSDR0tR3wFB31RmgYneYiKGRzLVyx\/8IEH77\/\/\/lWrVtbV1eUL+SiKisWiIyIAaG\/b3t7WFijlSUOIwacs99QALOxob29vb0u3TpNEVC4DohxXkmxvb29ra8\/nI8AkcfGLtNaR1qjm+UJsWBOv3Yw3o9fI4LaDslSRCNLUgh79ulYMTyWOtbnZqg6ga2kq8RUSfVKV+XXxHP7jV5z9sOiiBAk8CB0T9qEILRBIFLFQkFGHBweew3EnsFe\/RJ2Jse7ckqVLJ9933z+mTPlo1SoJVF1dnYlsRVAsdtgqAgA0NfUaMnRoz5497IajRcF0XX1DQ0N9TNOMdL9+\/VqGDmtobLB5AS1FVXbbbbekQqx1v379hrW05AsFpSQIQgBRFJFaRPVubi7k81U2lf75CZjzGHKSuDK\/TSMmpMXUf1GxN9YlYt\/j1GWP0+\/B3alKfrfARS3JlR1pkIg3AMBHH+Kff8Ar92LTWoYxbYkO2rCOgQQ0VO9+2Pd4OexcjPwkwzwJUMPKywKYP3\/+ww8\/POWxKStXrMjl8ibzcTUcrfVNN9187LHHuh3Y1t7W3t6hVOD6PN2VK6UaGxuN4bXW27dvL5fLSqmMJLNSSilVXx8zU3Wkt7dtN\/7f3T7j2VWglKiGhoZABZkoJETblrhpIq0LGqMZPqUvDqLtd+810GDtHweirJr8qBQjjF0Vcl29zMEX5g23bOA\/b+O0G7FxpSpA8sqwLMxxG3cngaJR0uCAEcEBp2PCOWgZm7AYaHAJaK3feuut+ydPnvb0tE2bNgdBUFdXb3dknFikLtOW2hoaGhsaGru9A0qpnj171uLSgiDo1atXtzsmmwdz+xaJm9UdJSDNfEqR+SxqR6D3wCxw8DF2amfVwC4L9YkYqrbzAVjq4MsPyJO\/x5JZImAIT6yGrj2EEVhXJ3tNyB38Je4zkc2DdaxNaxUAlWzf3vbyyy898MADM1+buXXLllwul8vlRFzCmLACbcKaPmzTBCOfReqTBpFUn9nZfahKakgilXSvLtKirCHatjigtUKI2fZJebBRIkTaNMCVFWsJgGvh8ey4B4jBidjbvPU0H74W856WECofUGsD1xuBWiFZZimC9B8SHngKDj4LIw+WIEfDvpPkStasWfPMM888\/PDDb855s1wqFwqFQqFAv+Tglf5sphNDMUqJAaCSr1yVc5KRrq8mzVQr6p55afplIUrtImktZcvXIJPHbf1XLPWdDOuYudzOFK5r2LjZBV4te05LaKTuDxe\/hUeujV55UJWLkkvYnKb7VlMLwfoGjjokOPALMv449N\/VE\/tz4zxkzUdrbrn1lueee3bF8hUEgiAI64JEpCvRpWC1ZF05rwvgsSmPPff8c0EQWKl4I5aUMN3S3RM2hGC1ST9INHctU10hkbg1iimJtrP5IK11Y2OP0AsUmGoQZiXPVNycFB35vAR8\/Dirc\/6zpyadZYeJAFy3nFOux3N3Yvu6QMDQpJZgmRBImSVCBgwPDz4Zh01Sw\/dnmEtK7khanE3ktWDhgttuva2hoT7Mx\/WARPuz6mlib2wQhHV1Bd8hzZo96+67766rqwsC5aO4\/nAcVMx+SZTpmcoRrKJycrPdiqjQeYv9tI6i5ubeoWFv2\/QttWu9AkP8OsIvxkiSUXWKK33soq9UC5vNbdi2WU\/7C574g6z5gAEkDEQ0I2pAyqQCmvvI3keFB54hY45E8+BUsdMLzpgezNDQ2CCAjiKfABU376QJ5z4VJJfL9erV5Ip6SqkgCBoaGurqCk7wJK1nz3Q+X+VbZ\/R4fYeV2lN+nTdFN2W+UAgRFpy0tr+UUiIz1onGYKlp8I8idgYpVeBWPjunsjGpcxsnABn8SRJa47XH8dD\/8L0ZooCcEtjBECVEhTqO3C849DQc+DkMGqXighpFKhWss+ytLZs3U2sJgs7gsrSSmDgAsi6X69Gj0V+FtkAiHr01jl9cv4n9+omoTxzEeeK9jsMq\/txFeOQpXy49uaUxMBMi10ANI2\/GKpqbtgxMh3XRMAG4fbP40u81FwNqATFSKqbuXyYvWfQW770arz0iEqn6gOVIlzXLQEi12z446KTwEyfIbuNRqEt\/bucBQaJRK2vXrStHUSEMLUcuKxBvxa9SY0sY6bq6+kKhkIoqsnKHTGSWJWVdplUkvG5l8ZCnlFa3d3DRNVG4LeMOEFESoq4nvDAKiZqKOB1tcaqwPljZujpA9clh\/BjtKikY3lNYEAg3rOLDv8Ozf5bN66FAQtojyUk0cITa59NyyMkYfZg0NolHUeyeuAmhJ5y1sXWjlcFNtIRclJ4NduP8ByR79erZ0NCQSnBFuepuxZwuj3aSYlnCCSolG7+iXiMV7roTt2egysYmB3AnUlYijJmCrroOT+6AILB5Q2fhVWVbUdbknQyU8\/VBXRFDiaDYpp++G4\/8Xpa9Z\/ryEYjus4vsc6QcenI4+gj07i+AP9BG3NQVb+9W4X7Y2Yjmm65ds1Yk7vAUb0xi1WTQdf2T7N27uUdjD99RKaWS4oGv0pOJiXwOrXXXfonHi6fc\/UzpTMQ+usp5KQIJ0WsgzSglU+H3x23476x9rXEIIBtXoVxGGKI2iYU0slhD9qxN+A\/OeR73\/YxvPi8E65Xut4sac4Qc9vlgzGHSPLBzxCtpAqhk\/HiAA2iEyCCR1qtXrxZJxhK50LNaiSqJ6rXWAwcOyOVzqQVkVXOzwX82RXDCntUETFxHcTzi0zWdpQaAVbu1sWcP0auf5T7Hqb4nS+Ixop2Yjnl1AG5Yim0bDNzRRahVa62\/MrVVgpXv42\/X6Sf\/zGKZLbsEnzhGDjs1t9fB7D2AndUIa\/9Ah93Zilmxo2P16lWBQXo9bDsVDaV9kDmpSY7YffdsZp8eTlDRpU2rvZIdXe3ZyWpopse9VaKNpF+LSi2jEINHCDKabQlZJ0WVFgcNKopm60eyeY00DWAX+UzFI0wTHzNcHOcq0bYFj\/2RD96AQHDsOXLA8cHYCdJ3sEPNd4K9l9lesQ4XYvgJwNq1a9evX6\/i6o1ISk4hM6vL10FmEAS7ewa2fQy2+iqVzpkpYVl2tkqZAsHos9HS1fpK52yD61Ba9mCQA8veHHbxAEnbwOBFA\/GVFLdy1XwZNrYKI64rvmq3G0vjg7cw9c8Qpb53O\/bcD736+RmnP9MNO9387+O99j2WLVvW2rrJ7mBUZKuZf7nmbjY0NA4fPrwSBJEqRBdfyy5tcS+a9hmOTsqJfl+\/ixBTNY\/059DwovsMjeqagrZ1iYizQ7WYSRU9zNCswA9n8aDTIN3vmC66j7Jes9iGXIFf+rHqM9CV4lIglmSKwVJj54tUP+GSS\/3ggw86Ojry+bz3ZKkAilLohACR1v0H9B82bJdMpgzbtJ8SH5eUxDYrwHwHzIvjxVWsAuf6M+N2PT19cWOEFJv6Sp8h1NDG\/VGS4Yfaey\/aR3QCy8qCGSiXJCkjd4KG18DIcW5I5xu46xgY65IJpFzz+VrrXKOK7TVnzluqCsLs+LDOoaZqblFUHrn77r2bmjw5npS+ryeNFXtEerqUzPrkZDKSOwL8al4FPpNhvIunogWlRKFnHzVwN6EbuhTHftDJJZhmYX9QqHFg5SVz5aMP4A2kqb1zMGOSNP\/XG2xXs+W6KFd08vzUAtvU2jp37tsSBP7EEF+3w+EbaYVaRFG0116jlREm8m624UUzEcDWyR+ZjsjJLPqYMPMkczql+P7eXfJvmH2cYRgqiOLwcSwjmTjB7AimZHwJvZIERFo38N3pfhG0M6t0wcro4pDuZJfvFKbdGVpm7\/fC999ftmxpoJQIJS2QIMkI21ScZVLSXD4\/duxYL0iUjPVA7aHYmUky1hSmiSGeCZUUjkAdE3hI5z7ilwrSkyeYGpgFkMjnCwqAjDwgFvSW1DiyNLqZ1k5woy9m\/YOWM9i1omRVU+1ER2jXD+6YGoT3\/OkzpheLpWy9jsgMScv4AK11v779nIH9ayiVSoYqqZnM50v6A5GaZ+mmcdLJhdp5Qzq2ue2acSgOnbtn6r0TGhnr6uoUAAzfh70HEKkuccmE9XQIuRBCLSAkELz7IpbNcy0bgpqUYT\/mdOUuvPEO6CF62FBbW9vzzz0vlToIbjKbCCmJ\/Jhdn6VSafTo0QMGDHQ7x12SLsd9+w549DJjySY4buhbsnvpHVZM9Bs8wSTx\/KqkB0iZ3+vr60IB2L8Fw\/fB2x+Zo9Yr3tMDqCuqVBQocHMrZvyv7DqOWZxnZxBpS4pQO619VzttyO0hEfnXv\/41f\/6CIFSOtJMWZSDFJijar7lS6+iQgw\/O5UK6CWAeZNbWtp3UQRDYyVBkGov2OLIOvaVHMIrbvcMwqKurTyTHfQCFSBpQ6BtISDQ0NIYkJMjJPkdxztNKbCWCftYm\/qV55gU0RIEzHsDnvo1e\/TNgVu1mqBTxwH\/gpxOuiAB44okn2tvb8vlcZqoNrcaYpEvujtPYs1fPCUdMqIr5n3zKKSP3GCkiSgIVSHwI06r1wGdL2F6mRJNfAGqtzTSVJUuW3HXXXZGOVGoMmmXIp+6a9aMktW7u0xzG32KfI5krgEVB3HmWAdTF6bf5IAABBVm5kDMekuMuohLZKfPsxFLY0U7UVAUargGLIli9evWTTz4ZBIHr\/00SzGR4hwMoEk28KIr23nPsyJF7VF6lJvfff\/\/999\/\/37I0n3322TvuuCN2bOI4PEjKtfQBKmFMQkS\/vn2txOHwfdmyNyOmSpdMxX3wJV4044GSRhhg6h+wZV3GuvKf3IU7uoz8\/ilJf5snpk5dvny5Usp4KUpKEtzPeunh0iRL5fKEwyfU1dVl5TE8RgM\/xo+XoM+J6dASNxhawQcmaRgSeRUTeSmlhg5tUXFM19AT+05kKTlE6YPeRCaIhp9KicLidzntL92atUYC3r9l91f2vfk5jIOXW1tbJ993XxAoJ5CfiGRL6gsnwU7cZhD16NHj6GOOQeesh1rAuy4XJY2fmDNnTgp4ER+ppi+9RJfwkErUsGHDEpFSOfQkFOoT4zndFsLDsLwRzvH4RtuN+OjvsGx+19u22++2c1N2avms7LawHm3KlCkLFswPgsAloMnTtHupEVPQSNIVFIvF8ePH7z1mTKXMb7dAW416BOYCli1b9u6774ZBSKbaOJN8K9l+cCmV1lFdff3QoUOVw8Bk1H4YczhKRAVzAUzBWOkkwgrOr1vF+64UXc5M6Jaa99\/HGb6xwzve8p\/vvPNOoyFIpLJRVkynTqYJiTIByQknnFgoFDKF2W5Fwbre2WInzbuc7blnn\/1o9WqkY9DqGtKxqnycoA8cNHDgwEEq8VdhXo6cpCM4qmo8Sk\/bSVLetNG4G1G70YlEDvqVh\/jM3ZL9YvJxysQ7FH9VgcFT9y672m695daFCxeaLq4EPSRT0YdfeY7rNoiiaMiQIZ86+uiuS2Q1EvozT\/MoaFIsFp+YOtXwqX1QJD0AvMr4zijSw4YNa2pqUuJPGTzkJBmyJ4xSajytKR7PDaOxaY1qgFVxvGBtNBs1\/3oFFs3JpJvs3Mg7KgRQuT+q6um54BfecDP6KIDIy9On\/\/Wv9+TCMJ53wORl1vVROyAproQYZ61LpdLxxx8\/cNAgVA5DrLj4HQssJPXaN2a9MXfu2\/l8wcxHiqXRbCWSntl17H\/id4miaPTo0SJQ9GcS9O4vnz7Xyox6WZGrQmqBmcpM8WtTFvcQtH6kb7mIrWtYDdmXj+eiK1t0KgPOSsys6k3fsGHD1T+\/uq29zQggdBJ3JzcwAYTJKIr69u131llfrFpl+TjKbagoY\/zlz3\/Zvr0NieAKMyNX\/MXs398wDMbtMw7pCeACQD71pajvUJZ1BlhzACc0YfrWtYAi2k3wArRIoOTdmbj5G2jfZmtsIulTufYdXFUTvAv8uTJyTpXRbflNa\/2b3\/z2nXfmFgqFhNJuVbU9WNcJrDtBQSFQLhWPO+64PffcsyrHYUejhOoLQiAizz777DPPPJMLc4knsKrxNvDTjgJtFbpAMtLRgAEDxowZExtYJOEmceBwfPJsdjg4zqMKucBDEqDH5k62OUYTIfjSQ\/zLDySKHNJX49KuDC87a7WrGpF2+hHizSYVufPOOydPvs\/kr\/Q42Mlk0iRaZjrAJMnGHj3OPPPMf1dmX3VRAti0adMNN9xQLpdsKxSSO2xl5f22IV\/orlwujR49eujQobGB3fyvuJB5woUyeFiK36Vp6\/zmjJJOxS+NA89BHr+Jf7kc5VIXVeGuSwW1RChVqULVHIZjVeKxxx6\/5pprjJ4GvXQDftaRDKRKyneaWlO3tbUdd9xx48aN+zdiN1UfvummG998c3Yul\/fEPdKZkZupxURv1orhccKEI5RSAJVX\/bM\/g3eTE7+BiM4hu1mUcd3DzWyIjcoknI4LG0oU+MivefM3pX1bZ5rdXetC10jEqbJi0otPPLD3ueeeu+JHV5RKJVGmvd9XErRBleeTkyYE0gTPffv1u+iir2fKIcnzdwLJyeiTQETksccf\/9Of\/pTL5TzvyZQqdEXZ302L0Vr36tnz8MMPh9NLqvJz\/Ff1sLEsZVIFSU\/ISkpdDg\/xknARAR67jdedy9a1zDI9pSqguUM3qFMMKxOO2seff\/75Sy+9tHXjxlwYZj7b50n5lXOf1iNAqVQ6++yzR40aBVYnI3xMJMccqLNmzfrxj35cKpZirRYmrRfikY08Rj59uLFULO47fvyee+4Z++OsqzDLv6mfTPox45EdSaHXi6spFGjPruaFJubSQkPvyoHTH+bPTsS\/ZnrciLTiQc3ZcjcAUHp0rwMmzd1\/4IEHLr744g0bNgRBoL39Rk\/3McWycNvC7uqOYseoPfc6\/7zzAXw83YrqX8pc5zvvzLvkkkvWrF0ThqH1LGnn7A4Rd+n0K8daU3\/+5FNyubgypqrdHwKQo06Twz+PIh26nnZ9blYHU\/s4uzFFckrem8mrPod\/3AwzD1FEUMG\/qYFR1Y1CsBsfGPfBxjXwjo6O66677nvf++7mzZuDMHAcqGQCVgIfOJqD2BMndt5a61wu\/O73vjtgwADqbuxbUziJhCDl7sbs2bMvvPD\/LVm8uJDPudvteg\/TyZ+PcYjNgVkuRyNG7P7pz3zG\/VF1di8RhLjg6nKfYShrK33Giuglg1fHoYw\/iwkEAsHW9bzlYvz8C\/jw7Rg16aRxPC1nUjs9w7saj1nxwfvvf\/WrX\/3tb38DMgwDbyxNNvBwBIoUuclGbcVS8fTTv3D88cdXpns7xyrx2p3i65k6deoFF1ywaNGHhUIBaZ+cRiQRr1\/NhIdn93WxVDz11FON4F78Dp1pHMZt0VPvxu++IkGU6KBmjq9k\/FZqrENFX5xANEtAUz987mJ14oXoMzjTsF6pzcBsFssulG3TEtBoa2u77777br755hUrVhQKBa87IKGyGk\/SWVeB01UolUu77z7y\/vvvHzx4sNv\/\/ihlIM1v7oKRnxH9NU3JW7bceNONt\/\/x9o729ni4johUx\/HFr+ynpnKAUbk8cPDgR\/\/+aEtLi1tBYVd7gpDjztELXsejN0qdcrpopkM5+VpJcYJpcMHbV6aFIyfYug73\/Uw\/f58c9zUc80X0H5rqh023jxqWgXh5DioYnH5Obm5LuVx+5plnbr755pkzZwZBUCgUEmmLZKuKnz4xiycn+7AclYIwuOKKKwYPHmyjcceWhqPTCaUy83HKrolJKubXvfjii9dde91rr8\/M5wthLiQSaqvrzI7ZOFJxjrr7KwClVC6fd955LS0tqWwzs4OzCasINm\/QPzpJ\/jVd5QM3h6NTeFncjXQTRLyNJfHwEZS1LgGDdpUjJ8nRZ2L4WIS5VF9vaqqm0cFhJaUv4x63bNnywgsv3HvvX2dMn1Eql3Jhzhbtk92dimng17\/T\/sYykdva2r572fe+\/4Pvk0YOTx5\/\/IkZM2ace+45o0aNSiV4REr6MdFEAX2MKJac1K+99tqdd9311NQn29q35wuFVF7hNxsm8a2kWlw8kFlEisXSXnuNeuihh5qb+3Rl4OqZ+Idzox+dGKxfImEQhxiVwuu+eIXy1liqJ8qjlRjRBQ009OKeh6jDTpHxR+shuyFXkHQTZOIVVeymM5ugWCy+N3\/+M08\/PXXqE\/PmvVuOyoVc3lfTkM78uJ3x7fHKE30MAsWOjmMnTrz11tvq6+sMp2Lx4sWnnX76gvnzW1paJk6ceMLnTtjvgP37NDcje2R16qvXrFkzffr0Bx98cMaM6du3t+VyOSXCjFeW1PrwA56UmlXC82MU6VtuueXkk0\/OQmPdG9hgsDOnyi8nSfsWX7ok1fiYyWyl6jf2vL\/zQJqMIAL06svBe8mYQ2XMITJkdzYP1g29VF19pacol8tbtmxZsWLFgoUL35w9+\/U3Xn\/\/\/fc3b9ocBEEYhvBbMgkkMjp0SpWdatV6O6RYLI4ZM\/ruu+9paWkxXZDbtm0\/\/\/zzp037Z0N9PYFyuSwiu40YcdCBBx588MF77rlnS0tLU1NToVAIw3icTRRFpVKptbV12bJl8+fPnz59+qzZs5cuXaIjXSjkrfISU2I\/8FqTs3uJ3mmVbOz29vZJZ066\/vfXq0DVamDJlPYFnPonueHroks0Stl+V7kkSy5tVaZzJm8qEGwURkDFY5gZQQgphCz01Pme6Ds0aBn+Twx9bmtDqCMA7e3tra2t69evX7169bp16zZv3hSVoyAMwjBnhGDtOef6uiii6AnyqZhrJ0wFd\/Hr3M0pFjv69e179z337Lff\/sa6IvLTn\/3097\/7fV1dQanAIalRFJXLJa3Z1NTU3Nzc3Ny7V1NTn+Y+dfV1He0d5mo3btiwZevWtrY2O5op8JRckJ5o5gU0kAolBGYbiYFSuTRitxF\/+9v\/DhvWUgUPtoKc7KatyHyfyf+DP18hAQVBOstgSigmVcqhf\/yxamHJ9wWmqz8ynFEEOVy1uOE3yxoKErmvHQZBrNSpJKNOkni2CnJTlZPb02dGwleFpq6vr7\/xhj9MPO44c3+UUpMnT77ssss0tRKPZC5ixOLdGa51VCqXjVy4w8aDQIVhTikV834qC9t+I03CSE\/015GQrjybC7RmEAZ3\/PH2YydOrDrjIKyVWWJcxqQfsFTEX38KRe+gt0QHes2W9Ms4lUat2N8eY9EorgehmIlUEYJ8LqwP827qQTpGh6dtDXeC+Hpjfl5hB4N6VAA6Dax4Z9fX11937XUTjzsuRvuUeuGFF6+66ipNHVizuVhA00v5iSAIg0SFSfwA3pTr0xMSvOA0DV4krDD7qKbfu+CAydJll\/3w2IkTK9HTuDBcJaRiJwqjJETUOVdRhHf\/xIjae7fZ6g75Mluuid6N+bPDP3Sm394X\/2ISfEqqQuuuIu4HYVLITGco4ombM71d3dnAtB48NIlSuRwGwU+u+ukpp5zirDtv3rxLL720dVNrPpf3hNaFSU9Ccga4Am0WErIKVClvS6bmhjId6aVE8NyqSjL6tvb2c7509iXf\/CacBFLFj6osxVTQSzM2hpxzJb5yrWYekYbXOyv+rY43k1RkUV4Pj9dMKX7\/bPyICAEVhJbUikQow3VJ+0VRZjhUkuKc+EQ6wkKQHuimoijKBeE11\/zi7HPOdrDokiVLLr744mXLl9rCO4Ve8h+Dcqnai2N1+QRspiFGy1b0BlMyoViI93X8hjF6gG1bW9vEYydeffU1+Vyuk7mF6R1cq4iv2WyTvit9Buub\/0ttXceckhQlh5Wta0irPjFTtkllUOkYT4wMvg+TisfMZ1ZcganJq4n\/cwpNnvSCJH360Lrcu3fvX\/zil6eeeqqONIEgUCtXrrzooovmzXsnl887YMsfneGkqivRxATiqWyHcZcqTCfe8CNXzw3QDbA0j3V0tB999NHXX399z149k2+GLndwrZi+23PHfkn97BEOG812HYMpdshMKmtKKPIifgurk1mj909HAPLuh9Y+8Uq8w5cVLF47ZcInmjmysJNriJv1LIeduq1t+8CBA2+99bZTTz0VgCgx1r3gggteeWVGmMtRu+3n0kKvS5\/pqmr1kmayFWNnkplZ53sbpvsVKL7j3t62\/eijj77pppsGDBiAClQgE06pnaQOmdrDvhPkl0\/wkBNYNm9WEb16VcsEa9Qet97HmzU98wsdg5NZbSn6bQaWzZp8nNCrOWSEdBNWsVhqyratW8fts8\/d9\/z1qKOOcl922bJl55335enTpxcKdTFrOFVkT3X4uSO2KlnZm2cWK0sjoT8RnqU9Ep+\/Rj2+FdDe3v75k0+54447Bg0a5DO4OyOY1mrgqntakxw0PPjZA\/KVX7C+F8pRHFsqh8FIHFlopkgBMbdIYq4I3WDVmPYNIqaUEMpvOvFbK9xNtt8x9lUUX0cjia79NacBINIRyfO+fN4DDzy477hxWmszmnfBggXnnX\/+66+\/0djY6OkcpMtfTJytvTSxvCDxe7QT7RSBz2oWWwQSr03EdR65om9csdQ0Ey4vvvjim26+pbm5uQsxBZ+6FO40VSzpxcvX4Ys\/xNgJ0a3fl\/deVXlShXDjEp1Usj\/ClF7WHv\/D1RwSKQpJ2L8wc3LdPU7Jz8QjxSgOynTWdQ6fnlQfQepiW8eQIUMv\/8HlZ599tiijoitKyYxXZnzrm99avHhxXX0dNVOlItphznAlkCoFVEFKxSEWafanH7ijmUm90GfFZsAiAh0d7c29m6+86qoLzj+\/ap21M3urbr1xdTVYj3MTa+GMOyK47in52i\/RaxBKZdsp7YzquIuul91Fj9oXnLDqPv4+YJpv4EPGrm6f0axJRC6cIZxkpplx9JlPf+bBBx8859xzTLeuKCmXS\/fee+9Zk85asHBBGIZ20JVUxCeeGHASC7k2PUsR8DpA\/Oja6ZG5Kr0\/J9gxDNwMLoLtbW3jx4+fPHlybN1OQuaqXjbcOedcSYECicZe6qzLechJ+v5f4KX\/VcUSAuUEapxRE+0xv84IlYCfqW6LpIgvld0nfpEg0VF2ffN2Tl28fnQURaX20siRe1xyySWTJk2KOz+tETds2HDPPfesWrW6oaG+KmM33oxuYmdKRoupYq34f0rPRfCWt6RQANrZCnFFVohiqdSzZ49vXPSNS775rb59+3Q9d6x68FRTsWEneKBvPYeHb8AbU9nWISFgpqlqS\/xwyoDe+NZM7d7MZ5Qw+NHShhtW1TUEyXj1pNyTbgf1hQwsYB9bT2tdLHb0bup91hfP+tY3vz14yGDEc5PECYyQbG1t\/fNf\/vLH225bvXp1oZC3YK24iqwkfF4gkbJCBp71heq8nMgX9klkKulhGA6AKxY7oig64ohP\/uhHPzr00EN3lEGcMrA\/GXCnZzinDw4RAbTm7KejR26Qt55V7W0IBVRIuGOSYLo+JuTXZAEVqh8vb7xhZV19AH9we0pMzheORGasDMvlcrFY6t+\/34knnvSVr3x1n33Ger4hAzbEopVLliy9886\/3HvvX5cvX5Ev5PO5vNUHT4th0M3hSMZqiHhmk4zhs3Urb60kSUYURQT2HjPmq1\/92hlnnOFkqJM+0FhDW7qY\/5gQIv4tO7j6sjA3RWuZ\/wafvpcvP8SPVhgJY08swB+cR5vumMVOCCQMrlze84bVhXrRcUrr3EQsgJwl+cSjB8hSuUytW1qGnXDC584++2wjdlQ7M3f+\/Pl33nnXI39\/5KPVq0SU0Xjwy2ySlJxTSqtuxjYyvoRZ4lNC3YCQLBaLAEfvNfr88y844wtnNDc3J2x+7CSRc2cMXKXnIF3WEhGaqNVqHBPgmuV87Um8\/IgsfE02r0OUiGO6CZHp0JqigHzuyiWN16\/K14lmdpekmcmAJsvlsvlGPXv23HfffU897dTPHv\/ZQYMGZQ6q6sgPISqJ3EzwtXr16mnTpj388MOvvvrq5i2b82EuCMNkuByqlEc91wTNbI9eXO9Kqo26VCqRuk+fvocffviZZ5559NFHxxPOkvgxNa92h7xsYuCd6XXc8bNZtObqxZj7EmY\/rf81E2uXYnuHCJQCFUTZKNNcTCDIBVcsqr9+Zb4hiCsEZuKc1WhMfkynQp8+fcbuPfaYTx1z5JFH7733GKMs2plkexdnTIo9A5SKxbnvzHv++edeevGlt+e+vXbtWgBBEIgSM3PQmzTihs7DNZTATqJ3mE8URVprpaS5uXnUnqM+9elPT5w4ce+993ZLJxn80x2Rr2vDJQauUVSy9hVQ3av4L9+yEcsW6PffkgWzsPw9vWFVsHEVSttNPZhlQCEI8f1FhetXFXrkQyUSWaEhrQ1DioVC3eBBg4btssuYMWMOPOjAT4z\/xLBhw0Lbu9AlD7N71qOfKJgNHUXRokWLZs+e\/casN95+e+7SJUvWrVtnIAh4+pT+W5g7bDAUJZLP5Xo39x4yeOjYffY+7NDD9j\/ggBEjRsQMkBgtqMmutZiD5I4ZeAe2K3zGXOfBtlsKpRJa16J1jaz6gB8txvrlXLcCm9arctvvFrTdsrjco5Crr6+vr68v1NU1NTX169N30JDBu48YscceewweNLj\/gP7OqG757\/S5Vc3ASYzrfjo6OlavXr1y5ar5C+Z\/8P77a9as2bhx45YtW7Zt27a9rS0qRypQhUKhR2NjY2Nj7+be\/fr2Gz58+OjRY4YP33XAgIFmDM+OEqq7PTczdvz\/hs4wVppBD7oAAAAASUVORK5CYII=\" alt=\"\">Onground Media<\/a><small>Local SEO tools<\/small><\/div><\/header>\r\n<div class=\"wrap\">\r\n  <div class=\"top\">\r\n    <h1>Local SEO tools<\/h1>\r\n    <p>Eleven free tools to win customers in your city: Google Business Profile posts, review links, replies, local keywords, citations and audits. Pick a tool, edit the example, and results update as you type.<\/p>\r\n    <div class=\"legend\"><span><i class=\"dot lv-e\"><\/i>Easy: fill in and copy<\/span><span><i class=\"dot lv-m\"><\/i>Medium: smart rules, review the result before you use it<\/span><\/div>\r\n  <\/div>\r\n  <div class=\"app\">\r\n    <aside aria-label=\"Tools\"><input id=\"q\" type=\"search\" placeholder=\"Search tools\" aria-label=\"Search tools\"><div class=\"list\" id=\"list\"><\/div><\/aside>\r\n    <main class=\"panel\" id=\"panel\" aria-live=\"polite\"><\/main>\r\n  <\/div>\r\n<\/div>\r\n<footer><div class=\"wrap\">\u00a9 2026 Onground Media. Nothing you type here leaves your browser.<\/div><\/footer>\r\n<script>\r\nconst $=s=>document.querySelector(s);\r\nconst esc=s=>String(s).replace(\/[&<>\"]\/g,c=>({'&':'&amp;','<':'&lt;','>':'&gt;','\"':'&quot;'}[c]));\r\nconst lines=s=>(s||'').split(\/\\r?\\n\/).map(x=>x.trim()).filter(Boolean);\r\nconst uniq=a=>[...new Set(a)];\r\nconst E=m=>({e:m});\r\nconst tc=s=>s.replace(\/\\b\\w\/g,c=>c.toUpperCase());\r\nconst sl=s=>s.toLowerCase().replace(\/[^a-z0-9]+\/g,'-').replace(\/^-|-$\/g,'');\r\nconst LV={e:['Easy','lv-e'],m:['Medium','lv-m']};\r\nconst J=(a,b)=>{a=new Set(a);b=new Set(b);const i=[...a].filter(x=>b.has(x)).length,u=new Set([...a,...b]).size;return u?i\/u:1};\r\nlet S={};try{S=JSON.parse(localStorage.getItem('ogm_local')||'{}')}catch(e){}\r\nconst save=()=>{try{localStorage.setItem('ogm_local',JSON.stringify(S))}catch(e){}};\r\n\r\nconst ctaTxt=(c,p)=>({'Call now':p?'Call us on '+p+' today.':'Call us today.','Book':'Book your visit online today.','Order online':'Order online today.','Learn more':'Tap Learn more for details.','Sign up':'Sign up today to reserve your spot.','Buy':'Tap Buy to get yours today.'}[c]);\r\nconst GP={\r\n update:['Looking for {s} in {c}? {b} is here to help. {d}Our team keeps things simple: clear advice, fair prices and work you can rely on. {a}','Thank you, {c}, for trusting {b} with your {s} needs. {d}We are open and ready to help. {a}','Quick update from {b}. {d}If you need {s} in {c}, now is a good time to get in touch. {a}'],\r\n offer:['Offer for {c}: {D}. Available on {s} at {b}. {a} Terms apply, so ask our team for details.','Planning {s}? {D}. {b} is making it easy for {c} customers. {a}','{b} offer: {D}. If you have been thinking about {s}, now is the time. {a}'],\r\n event:['Join {b} in {c}: {D}. Everyone is welcome. {a}','Mark your calendar. {D}. Hosted by {b} in {c}. {a}','{b} invites you: {D}. Come along and meet our team. {a}'],\r\n product:['{s} at {b}, {c}. {d}Our team will explain your options, answer your questions and recommend what suits you. {a}','Why choose {b} for {s} in {c}? {d}We focus on clear communication and quality work. {a}','Spotlight: {s}. {d}Available now at {b} for customers across {c}. {a}']};\r\nconst RP={\r\n pos:[['Warm','Hi {n}, thank you for the {r}-star review! {t}We are glad you had a good experience at {b}. We look forward to seeing you again. \u2013 {o}'],['Short','Thank you, {n}! Feedback like this means a lot to our team at {b}. {t}See you next time. \u2013 {o}'],['Professional','Hello {n}, we appreciate you taking the time to review {b}. {t}If you need anything, just {k}. \u2013 {o}']],\r\n mid:[['Open','Hi {n}, thanks for your feedback on {b}. {t}We are glad some things went well and we would like to improve the rest. Could you {k} so we can hear more? \u2013 {o}'],['Short','Thank you, {n}. {t}We would like to do better next time. Please {k} and tell us how. \u2013 {o}'],['Professional','Hello {n}, thank you for your honest review of {b}. {t}We value it and would welcome the chance to improve your next visit. Please {k}. \u2013 {o}']],\r\n neg:[['Apology','Hi {n}, we are sorry that your experience at {b} fell short. {t}This is not the standard we aim for. Please {k} so we can understand what happened and put it right. \u2013 {o}'],['Short','Dear {n}, thank you for telling us, and we apologise. {t}We want to make this right. Please {k}. \u2013 {o}'],['Professional','Hello {n}, we take your feedback seriously. {t}We would like to look into this properly, so please {k} and we will follow up personally. \u2013 {o}']]};\r\nconst CIT=[['Google Business Profile','https:\/\/www.google.com\/business\/','Core','The most important listing. Verify it.'],['Bing Places','https:\/\/www.bingplaces.com\/','Core','Feeds Bing and several voice assistants.'],['Apple Business Connect','https:\/\/businessconnect.apple.com\/','Core','Shows in Apple Maps.'],['Facebook Page','https:\/\/www.facebook.com\/pages\/create','Core','Add address, hours and phone.'],['LinkedIn Company Page','https:\/\/www.linkedin.com\/company\/setup\/new\/','Core','Useful for B2B and trust.'],['Instagram business profile','https:\/\/business.instagram.com\/','Core','Add contact buttons.'],['Justdial','https:\/\/www.justdial.com\/','India','Large Indian local directory.'],['Sulekha','https:\/\/www.sulekha.com\/','India','Home and local services.'],['IndiaMART','https:\/\/www.indiamart.com\/','India','B2B and trade.'],['TradeIndia','https:\/\/www.tradeindia.com\/','India','B2B and trade.'],['Yellow Pages India','https:\/\/www.yellowpages.in\/','India','General business listing.'],['MouthShut','https:\/\/www.mouthshut.com\/','India','Reviews platform.'],['Hotfrog India','https:\/\/www.hotfrog.in\/','India','Free business listing.'],['Yelp','https:\/\/www.yelp.com\/biz','Global','Mostly useful for international customers.'],['Foursquare','https:\/\/foursquare.com\/','Global','Data used by several apps.'],['TripAdvisor','https:\/\/www.tripadvisor.in\/','Global','Hotels, food and attractions.'],['Trustpilot','https:\/\/www.trustpilot.com\/','Global','Independent reviews.'],['Practo','https:\/\/www.practo.com\/','Industry','Doctors and clinics.'],['Zomato','https:\/\/www.zomato.com\/partner-with-us','Industry','Restaurants and cafes.'],['99acres','https:\/\/www.99acres.com\/','Industry','Real estate.'],['MagicBricks','https:\/\/www.magicbricks.com\/','Industry','Real estate.'],['WedMeGood','https:\/\/www.wedmegood.com\/','Industry','Weddings and events.'],['Shiksha','https:\/\/www.shiksha.com\/','Industry','Education and coaching.'],['Booking.com partner','https:\/\/partner.booking.com\/','Industry','Hotels and stays.']];\r\nconst AUD={'Google Business Profile':['Claim and verify your profile','Choose the best primary category and add relevant extra ones','Use your real business name, with no keywords added','Add a full address or set a service area','Add a local phone number as the primary number','Set accurate hours, including holidays','Write a clear description of what you do and where','List your services or products with descriptions','Upload a logo, a cover photo and at least 10 real photos','Publish a post at least once a month','Answer questions in the Q&A section'],\r\n 'Reviews':['Share your review link by message, email and printed card','Ask every happy customer for a review','Reply to every review','Reply to negative reviews politely and offer to fix the problem offline','Never buy reviews or reward only positive ones'],\r\n 'Website':['Put city and service in the title tag and H1 of key pages','Show your name, address and phone in the footer on every page','Create a page for each main service and each city you serve','Embed a Google Map on the contact page','Add LocalBusiness schema markup','Write unique content for each location page','Add a tap-to-call button on mobile'],\r\n 'Citations':['Keep your name, address and phone identical everywhere','Submit to the main directories','Find and merge duplicate listings','Fix old addresses and phone numbers online'],\r\n 'Links':['Get listed with local associations or chambers','Sponsor or take part in a local event','Ask local blogs or news sites to feature you','Ask partners and suppliers to link to you'],\r\n 'Tracking':['Connect Google Search Console','Set up Google Analytics','Add UTM tags to your Google Business Profile website link','Check your map ranking for your top 3 keywords each month']};\r\nconst AUDR=[];Object.entries(AUD).forEach(([g,a])=>a.forEach(t=>AUDR.push([g,t])));\r\nconst CATS=`Dentist|dentist dental teeth braces root canal whitening orthodontic implant\r\nDoctor|doctor physician clinic general consultation\r\nHospital|hospital emergency surgery inpatient\r\nPhysiotherapist|physiotherapy physio rehabilitation back pain sports injury\r\nPharmacy|pharmacy medicine chemist drugs\r\nAyurvedic clinic|ayurveda ayurvedic panchakarma herbal\r\nOptician|optician glasses spectacles lenses eyewear\r\nRestaurant|restaurant dining food lunch dinner menu\r\nCafe|cafe coffee tea snacks\r\nBakery|bakery cakes bread pastries\r\nSweet shop|sweets mithai namkeen\r\nCaterer|catering caterer buffet party food\r\nBeauty salon|beauty salon facial makeup bridal waxing\r\nHair salon|hair haircut styling colour salon\r\nBarber shop|barber beard shave men haircut\r\nSpa|spa massage relaxation wellness\r\nGym|gym fitness workout weights training\r\nYoga studio|yoga meditation asana\r\nLawyer|lawyer advocate legal court litigation\r\nAccountant|accountant accounting bookkeeping audit gst\r\nTax consultant|tax itr income filing gst return\r\nFinancial consultant|financial investment planning mutual wealth loan\r\nInsurance agency|insurance policy life health motor\r\nReal estate agency|real estate property flat house plot buy sell rent\r\nInterior designer|interior design home decor modular kitchen\r\nArchitect|architect architecture building design plan\r\nConstruction company|construction builder contractor building civil\r\nPlumber|plumber plumbing pipe leak tap\r\nElectrician|electrician electrical wiring repair\r\nPainter|painter painting wall colour\r\nCarpenter|carpenter woodwork furniture repair\r\nAir conditioning repair service|ac air conditioner repair servicing cooling\r\nCleaning service|housekeeping deep-clean sofa maid janitorial\r\nPest control service|pest termite cockroach control\r\nAuto repair shop|car repair garage mechanic servicing\r\nCar dealer|car dealer showroom used new cars\r\nCar wash|car wash detailing polish\r\nMotorcycle dealer|bike motorcycle scooter showroom\r\nMoving company|movers packers relocation shifting\r\nCourier service|courier delivery parcel shipping\r\nTravel agency|travel tour package ticket visa\r\nTour operator|tour holiday sightseeing trip\r\nHotel|hotel rooms stay booking\r\nSchool|school kindergarten admission classes\r\nTutoring service|tuition coaching tutor exam preparation\r\nTraining center|training course institute skill certification\r\nSoftware company|software app development it\r\nMarketing agency|marketing agency branding campaigns\r\nInternet marketing service|seo digital marketing social media ppc\r\nAdvertising agency|advertising ads creative media\r\nWeb designer|website design web developer\r\nPrinting service|printing flex banner visiting cards\r\nPhotographer|photographer photography shoot portrait\r\nWedding photographer|wedding photography pre-wedding album\r\nWedding planner|wedding planner decor event management\r\nEvent planner|event planner events party corporate\r\nBanquet hall|banquet hall marriage lawn venue\r\nFlorist|florist flowers bouquet\r\nJewelry store|jewellery jewelry gold silver diamond\r\nClothing store|clothes clothing fashion garments\r\nBoutique|boutique designer tailoring ladies\r\nTailor|tailor stitching alteration\r\nFurniture store|furniture sofa bed wardrobe\r\nElectronics store|electronics appliances tv fridge\r\nMobile phone store|mobile phone smartphone accessories\r\nGrocery store|grocery kirana provisions daily needs\r\nVeterinarian|vet veterinary pet animal dog cat\r\nPet store|pet food dog cat supplies\r\nDry cleaner|dry-cleaning dry laundry ironing`.split('\\n').map(l=>{const[n,k]=l.split('|');return[n,k.split(' ')]});\r\nconst NA=s=>s.toLowerCase().replace(\/\\.\/g,'').replace(\/[^a-z0-9]+\/g,' ').trim().split(' ').map(w=>({st:'street',rd:'road',ave:'avenue',blvd:'boulevard',ln:'lane',ste:'suite',fl:'floor',apt:'apartment',nr:'near',opp:'opposite'}[w]||w)).filter(Boolean);\r\nconst NN=s=>NA(s).filter(w=>!['pvt','ltd','inc','llc','the'].includes(w));\r\nconst PH=s=>s.replace(\/\\D\/g,'').slice(-10);\r\nconst st=(j)=>j>=.9?'Match':j>=.6?'Close':'Differs';\r\n\r\nconst T=[\r\n{id:'gbp',n:'Google Business Profile Post Generator',lv:'m',d:'Write GBP updates, offers and events',\r\n long:'Creates three ready-to-paste post options. Add a photo, pick the matching button in your profile, and keep posts under 1,500 characters.',\r\n f:[{k:'b',l:'Business name',v:'Sharma Dental Clinic'},{k:'s',l:'Service or product',v:'teeth whitening'},{k:'c',l:'City',v:'Lucknow'},{k:'t',l:'Post type',t:'sel',v:'update',o:[['update','What\u2019s new'],['offer','Offer'],['event','Event'],['product','Service highlight']]},{k:'d',l:'Details (needed for offers and events)',v:'Free consultation for new patients'},{k:'cta',l:'Button',t:'sel',v:'Call now',o:['Call now','Book','Order online','Learn more','Sign up','Buy'].map(x=>[x,x])},{k:'p',l:'Phone (optional)',v:'+91 98765 43210'}],\r\n run(v){const b=v.b.trim(),s=v.s.trim(),c=v.c.trim(),dd=v.d.trim().replace(\/[.\\s]+$\/,'');if(!b||!s||!c)return E('Enter business name, service and city.');\r\n  if((v.t==='offer'||v.t==='event')&&!dd)return E(v.t==='offer'?'Add the offer details, such as \u201c20% off this month\u201d.':'Add the event name, date and time.');\r\n  const a=ctaTxt(v.cta,v.p.trim());\r\n  const r=GP[v.t].map((t,i)=>{const x=t.replace(\/\\{b\\}\/g,b).replace(\/\\{s\\}\/g,s).replace(\/\\{c\\}\/g,c).replace('{D}',dd).replace('{d}',dd?dd+'. ':'').replace('{a}',a).replace(\/\\s+\/g,' ').trim();return['Option '+(i+1),x,x.length]});\r\n  return{h:['Option','Post text','Characters'],r,c:1,n:'Limit is 1,500 characters.'}}},\r\n{id:'reviewlink',n:'Google Review Link Generator',lv:'e',d:'Review link, QR code and request messages',\r\n long:'Turns your Google Place ID into a direct review link, a QR code and ready messages. Google does not offer a short link, so paste the link into a URL shortener if you want one.',\r\n html:'<a href=\"https:\/\/developers.google.com\/maps\/documentation\/places\/web-service\/place-id\" target=\"_blank\" rel=\"noopener\">Find your Place ID with Google\u2019s Place ID Finder<\/a> (it usually starts with ChIJ).',\r\n f:[{k:'id',l:'Google Place ID',v:'ChIJN1t_tDeuEmsRUsoyG83frY4'},{k:'b',l:'Business name',v:'Sharma Dental Clinic'}],\r\n run(v){const id=v.id.trim(),b=v.b.trim()||'us';if(!id)return E('Paste your Place ID to build the link.');\r\n  const l='https:\/\/search.google.com\/local\/writereview?placeid='+encodeURIComponent(id);\r\n  return{h:['Item','Text'],r:[['Review link',l],['WhatsApp or SMS','Hi! Thank you for choosing '+b+'. If you were happy with our service, could you leave us a quick Google review? It takes under a minute: '+l],['Email subject','How was your visit to '+b+'?'],['Email body','Hello,\\n\\nThank you for visiting '+b+'. Your feedback helps other customers find us. Please leave a short review here:\\n'+l+'\\n\\nThank you!'],['Printed card','Enjoyed your visit? Scan the code to review '+b+' on Google.']],qr:l,c:1,n:id.startsWith('ChIJ')?'':'That Place ID does not start with ChIJ. Check it in the Place ID Finder.'}}},\r\n{id:'reply',n:'Review Reply Generator',lv:'m',d:'Replies for positive and negative reviews',\r\n long:'Pick the star rating and get three polite replies. Edit them so they sound like you, and never share a customer\u2019s private details in public.',\r\n f:[{k:'b',l:'Business name',v:'Sharma Dental Clinic'},{k:'o',l:'Sign-off name',v:'Dr. Sharma'},{k:'n',l:'Reviewer\u2019s first name',v:'Priya'},{k:'r',l:'Star rating',t:'sel',v:'5',o:[['5','5 stars'],['4','4 stars'],['3','3 stars'],['2','2 stars'],['1','1 star']]},{k:'t',l:'What they mentioned (optional)',v:'quick appointment'},{k:'k',l:'How to reach you',v:'call us on +91 98765 43210'}],\r\n run(v){const R=+v.r,set=R>=4?RP.pos:R===3?RP.mid:RP.neg;if(!v.b.trim())return E('Enter your business name.');\r\n  const tp=v.t.trim();const t=tp?(R>=4?'We are pleased you liked the '+tp+'. ':'We have noted your comments about '+tp+'. '):'';\r\n  const r=set.map(([l,x])=>{const y=x.replace(\/\\{n\\}\/g,v.n.trim()||'there').replace(\/\\{b\\}\/g,v.b.trim()).replace(\/\\{o\\}\/g,v.o.trim()||v.b.trim()).replace('{r}',R).replace('{t}',t).replace(\/\\{k\\}\/g,v.k.trim()||'contact us').replace(\/\\s+\/g,' ');return[l,y,y.length]});\r\n  return{h:['Style','Reply','Characters'],r,c:1}}},\r\n{id:'localkw',n:'Local Keyword Generator',lv:'e',d:'Service + city + \u201cnear me\u201d combinations',\r\n long:'Enter your services and the cities or areas you serve. The tool builds every local search phrase people are likely to type.',\r\n f:[{k:'s',l:'Services (one per line)',t:'area',v:'dentist\\nteeth whitening\\nroot canal treatment'},{k:'c',l:'Cities or areas (one per line)',t:'area',v:'Lucknow\\nGomti Nagar\\nHazratganj'},{k:'nm',l:'Add \u201cnear me\u201d',t:'chk',v:true},{k:'bs',l:'Add \u201cbest\u201d',t:'chk',v:true},{k:'af',l:'Add \u201caffordable\u201d',t:'chk',v:true},{k:'em',l:'Add \u201c24 hour\u201d',t:'chk',v:false}],\r\n run(v){const S=lines(v.s).map(x=>x.toLowerCase()),C=lines(v.c).map(x=>x.toLowerCase());if(!S.length||!C.length)return E('Add at least one service and one city.');\r\n  const r=[];S.forEach(s=>{if(v.nm)r.push([s+' near me','Near me'],['best '+s+' near me','Near me']);C.forEach(c=>{r.push([s+' in '+c,'Service in city'],[s+' '+c,'Service city'],[c+' '+s,'City service'],[s+' near '+c,'Near city']);if(v.bs)r.push(['best '+s+' in '+c,'Best']);if(v.af)r.push(['affordable '+s+' in '+c,'Affordable']);if(v.em)r.push(['24 hour '+s+' in '+c,'24 hour'])})});\r\n  const u=uniq(r.map(x=>x[0])),cap=u.length>3000;const m=new Map(r);const rows=u.slice(0,3000).map(k=>[k,m.get(k)]);\r\n  return{h:['Local keyword','Pattern'],r:rows,n:cap?'Showing the first 3,000 of '+u.length.toLocaleString()+'.':''}}},\r\n{id:'nap',n:'NAP Consistency Checker',lv:'m',d:'Compare name, address and phone across listings',\r\n long:'Enter your correct details, then paste each listing as \u201cSource | Name | Address | Phone\u201d. The tool ignores small differences like \u201cRd\u201d and \u201cRoad\u201d and flags real mismatches.',\r\n f:[{k:'n',l:'Correct business name',v:'Sharma Dental Clinic'},{k:'a',l:'Correct address',v:'12 MG Road, Hazratganj, Lucknow 226001'},{k:'p',l:'Correct phone',v:'+91 98765 43210'},{k:'L',l:'Listings (Source | Name | Address | Phone)',t:'area',v:'Google Business Profile | Sharma Dental Clinic | 12 MG Road, Hazratganj, Lucknow 226001 | +91 98765 43210\\nJustdial | Sharma Dental Clinic | 12 M.G. Rd, Hazratganj, Lucknow 226001 | 098765 43210\\nFacebook | Sharma Dental | 12 MG Road Hazratganj Lucknow | 9876543210\\nIndiaMART | Sharma Dentals Clinic | 14 MG Road, Lucknow | 9876543211'}],\r\n run(v){const L=lines(v.L);if(!v.n.trim()||!v.a.trim()||!v.p.trim())return E('Enter your correct name, address and phone first.');if(!L.length)return E('Paste at least one listing.');\r\n  const r=L.map(l=>{const q=l.split('|').map(x=>x.trim());const[src,nm='',ad='',ph='']=q;\r\n   const a=st(J(NN(nm),NN(v.n))),b=st(J(NA(ad),NA(v.a))),c=!PH(ph)?'Missing':PH(ph)===PH(v.p)?'Match':'Differs';\r\n   const bad=[a,b,c].filter(x=>x!=='Match').length,fix=[];if(a!=='Match')fix.push('Name: \u201c'+nm+'\u201d');if(b!=='Match')fix.push('Address: \u201c'+ad+'\u201d');if(c!=='Match')fix.push('Phone: \u201c'+ph+'\u201d');\r\n   return[src,a,b,c,bad?'Fix '+bad+' field'+(bad>1?'s':''):'Consistent',fix.join('\\n')]});\r\n  const ok=r.filter(x=>x[4]==='Consistent').length;\r\n  return{h:['Source','Name','Address','Phone','Result','What to fix'],r,n:ok+' of '+r.length+' listings are consistent.'}}},\r\n{id:'citations',n:'Local Citation Checklist',lv:'e',d:'Directories to submit your business to',\r\n long:'Tick off each directory as you list your business. Your progress is saved in this browser. Use the same name, address and phone everywhere.',\r\n f:[{k:'g',l:'Show',t:'sel',v:'all',o:[['all','All directories'],['Core','Core platforms'],['India','India directories'],['Global','Global directories'],['Industry','Industry-specific']]}],\r\n run(v){const rows=CIT.filter(x=>v.g==='all'||x[2]===v.g).map(x=>{const k='c-'+sl(x[0]);return[{k},x[0],x[2],{a:x[1],t:'Open site'},x[3]]});\r\n  return{h:['Done','Directory','Type','Link','Notes'],r:rows,chk:1,c:1}}},\r\n{id:'landing',n:'Local Landing Page Generator',lv:'m',d:'Location page content template',\r\n long:'Builds the title, headings, copy, FAQs and schema for a service-in-city page. Treat it as a first draft: add real details like photos, prices and local examples, and never publish the same copy for two cities.',\r\n f:[{k:'b',l:'Business name',v:'Sharma Dental Clinic'},{k:'s',l:'Service',v:'Teeth whitening'},{k:'c',l:'City',v:'Lucknow'},{k:'ar',l:'Nearby areas (comma separated)',v:'Gomti Nagar, Hazratganj, Aliganj'},{k:'a',l:'Address',v:'12 MG Road, Hazratganj, Lucknow 226001'},{k:'p',l:'Phone',v:'+91 98765 43210'},{k:'y',l:'Years in business (optional)',v:'10'},{k:'u',l:'What makes you different (optional)',v:'gentle treatment and clear pricing'}],\r\n run(v){const b=v.b.trim(),s=v.s.trim(),c=v.c.trim();if(!b||!s||!c)return E('Enter business name, service and city.');\r\n  const sv=s.toLowerCase(),ar=v.ar.split(',').map(x=>x.trim()).filter(Boolean),yr=v.y.trim(),u=v.u.trim();\r\n  const ti=`${tc(s)} in ${c} | ${b}`,md=`Looking for ${sv} in ${c}? ${b} offers ${u||'friendly, professional service'}. Call ${v.p.trim()||'us'} or visit today.`;\r\n  const P=[['Title tag ('+ti.length+' chars, aim for 60 or fewer)',ti],['Meta description ('+md.length+' chars, aim for 155 or fewer)',md],['URL','\/'+sl(s)+'-'+sl(c)+'\/'],['H1',`${tc(s)} in ${c}`],\r\n   ['Intro',`${b} provides ${sv} for customers in ${c}${ar.length?', including '+ar.join(', '):''}.${yr?' We have served the area for '+yr+' years.':''} ${u?'You can expect '+u+'.':''} Call ${v.p.trim()||'us'} to book.`.replace(\/\\s+\/g,' ')],\r\n   ['H2: Our '+sv+' services in '+c,`Explain what is included, who it suits, how long it takes and what it costs. Add 2 to 3 real photos from your ${c} location.`],\r\n   ['H2: Why choose '+b,`\u2022 ${yr?yr+' years serving '+c:'Local team that knows '+c}\\n\u2022 ${u?tc(u):'Clear advice and pricing'}\\n\u2022 Easy to reach: ${v.a.trim()||'add your address'}`],\r\n   ['H2: Areas we serve',ar.length?ar.map(x=>'\u2022 '+x).join('\\n'):'Add the areas you serve.'],\r\n   ['H2: How it works','1. Call or book online.\\n2. We discuss what you need and give a clear quote.\\n3. We complete the work and follow up.'],\r\n   ['H2: FAQs',`Q: How much does ${sv} cost in ${c}?\\nA: Give a real price range or explain what affects the price.\\n\\nQ: How long does ${sv} take?\\nA: Give a realistic time.\\n\\nQ: Do you serve ${ar[0]||'nearby areas'}?\\nA: Yes. Add travel or visit details.`],\r\n   ['Call to action',`Ready for ${sv} in ${c}? Call ${v.p.trim()||'us'} or visit ${v.a.trim()||'us'}.`],\r\n   ['Schema (JSON-LD)','<scr'+'ipt type=\"application\/ld+json\">\\n'+JSON.stringify({'@context':'https:\/\/schema.org','@type':'LocalBusiness',name:b,telephone:v.p.trim(),address:{'@type':'PostalAddress',streetAddress:v.a.trim(),addressLocality:c},areaServed:ar.length?ar:[c]},null,2)+'\\n<\/scr'+'ipt>']];\r\n  return{h:['Part','Content'],r:P,t:P.map(x=>x[0].split(' (')[0]+'\\n'+x[1]).join('\\n\\n')}}},\r\n{id:'maps',n:'Google Maps Embed Generator',lv:'e',d:'Embed code for a location',\r\n long:'Enter an address or business name plus city to get iframe code you can paste into any website. For an exact pin, you can also use \u201cShare > Embed a map\u201d inside Google Maps.',\r\n f:[{k:'a',l:'Address or business name and city',v:'Hazratganj, Lucknow, Uttar Pradesh'},{k:'w',l:'Width (px or %)',v:'100%'},{k:'h',l:'Height (px)',v:'400'},{k:'z',l:'Zoom',t:'sel',v:'15',o:[['12','Wide'],['14','City'],['15','Street'],['17','Close']]}],\r\n run(v){const a=v.a.trim();if(!a)return E('Enter an address or place to embed.');const q=encodeURIComponent(a),src=`https:\/\/www.google.com\/maps?q=${q}&z=${v.z}&output=embed`;\r\n  const w=\/%$\/.test(v.w.trim())?v.w.trim():(parseInt(v.w)||600),h=parseInt(v.h)||400;\r\n  const ifr=`<iframe src=\"${src}\" width=\"${w}\" height=\"${h}\" style=\"border:0\" allowfullscreen loading=\"lazy\" referrerpolicy=\"no-referrer-when-downgrade\" title=\"Map showing ${a.replace(\/\"\/g,'')}\"><\/iframe>`;\r\n  return{h:['Item','Code'],r:[['Iframe embed code',ifr],['Responsive wrapper',`<div style=\"position:relative;padding-bottom:56.25%;height:0;overflow:hidden\"><iframe src=\"${src}\" style=\"position:absolute;inset:0;width:100%;height:100%;border:0\" allowfullscreen loading=\"lazy\" title=\"Map\"><\/iframe><\/div>`],['Direct map link','https:\/\/www.google.com\/maps\/search\/?api=1&query='+q],['Directions link','https:\/\/www.google.com\/maps\/dir\/?api=1&destination='+q]],pv:src,c:1}}},\r\n{id:'areaplan',n:'Service Area Page Planner',lv:'e',d:'Plan pages by city and area',\r\n long:'Lists every page you could build for your services and cities, with URL, title and H1. Put your most important service and city first. Each page needs genuinely different content, or Google may treat it as thin.',\r\n f:[{k:'b',l:'Business name',v:'Sharma Dental Clinic'},{k:'s',l:'Services (one per line, most important first)',t:'area',v:'Dentist\\nTeeth whitening\\nRoot canal treatment'},{k:'c',l:'Cities or areas (one per line, most important first)',t:'area',v:'Lucknow\\nGomti Nagar\\nHazratganj'},{k:'m',l:'URL style',t:'sel',v:'a',o:[['a','\/service-city\/'],['b','\/city\/service\/']]}],\r\n run(v){const S=lines(v.s),C=lines(v.c),b=v.b.trim();if(!S.length||!C.length)return E('Add at least one service and one city.');const r=[];\r\n  S.forEach(s=>r.push(['\/'+sl(s)+'\/',`${s} | ${b}`.replace(\/ \\| $\/,''),s,'Service page','High']));\r\n  C.forEach(c=>r.push(['\/'+sl(c)+'\/',`${b||'Services'} in ${c}`,`Services in ${c}`,'City page','High']));\r\n  S.forEach((s,i)=>C.forEach((c,j)=>r.push([v.m==='a'?'\/'+sl(s)+'-'+sl(c)+'\/':'\/'+sl(c)+'\/'+sl(s)+'\/',`${s} in ${c}${b?' | '+b:''}`,`${s} in ${c}`,'Service + city page',i<2&&j<2?'High':i<2||j<2?'Medium':'Later'])));\r\n  return{h:['URL','Title tag','H1','Page type','Priority'],r,n:r.length+' pages. Build High priority pages first.'}}},\r\n{id:'category',n:'GBP Category Finder',lv:'m',d:'Choose primary and extra categories',\r\n long:'Describe what you do and get matching Google Business Profile categories. Your primary category matters most; you can add up to 9 more. The list here covers common businesses, so confirm the final names in your profile.',\r\n f:[{k:'d',l:'What does your business do?',t:'area',v:'We do teeth cleaning, braces, root canal and teeth whitening for families in Lucknow.'}],\r\n run(v){const w=v.d.toLowerCase().replace(\/[^a-z0-9\\s-]\/g,' ').split(\/\\s+\/).filter(Boolean);if(w.length<2)return E('Describe your business in a sentence or two.');\r\n  const sc=CATS.map(([n,k])=>{const hit=k.filter(x=>w.includes(x)||w.includes(x+'s')||w.includes(x.replace(\/s$\/,'')));const nm=n.toLowerCase().split(' ').filter(x=>w.includes(x)||w.includes(x+'s'));return[n,hit.length+nm.length,uniq([...hit,...nm])]}).filter(x=>x[1]>0).sort((a,b)=>b[1]-a[1]).slice(0,10);\r\n  if(!sc.length)return E('No match found. Try naming your main services, for example \u201cplumbing and pipe repair\u201d.');\r\n  return{h:['Rank','Category','Suggested use','Matched words'],r:sc.map((x,i)=>[i+1,x[0],i===0?'Primary':i<5?'Secondary':'Consider',x[2].join(', ')]),c:1,n:'Choose one primary category that describes your main service.'}}},\r\n{id:'audit',n:'Local SEO Audit Checklist',lv:'e',d:'Step-by-step checklist with progress',\r\n long:'Work through each step. Your ticks are saved in this browser, so you can come back later. Copy the remaining tasks to share with your team.',\r\n f:[{k:'g',l:'Show',t:'sel',v:'all',o:[['all','All areas'],...Object.keys(AUD).map(x=>[x,x])]}],\r\n run(v){const r=AUDR.map((x,i)=>[{k:'a-'+i},x[0],x[1]]).filter(x=>v.g==='all'||x[1]===v.g);return{h:['Done','Area','Task'],r,chk:1,c:2}}}\r\n];\r\n\r\nlet cur=null,res=null,timer;\r\nconst PILL={Match:'g',Close:'',Differs:'o',Missing:'o',Consistent:'g',Primary:'g',Secondary:'',Consider:''};\r\nfunction list(){const q=$('#q').value.trim().toLowerCase();const t=T.filter(x=>!q||(x.n+x.d).toLowerCase().includes(q));\r\n $('#list').innerHTML=t.length?t.map(x=>`<button class=\"item\" data-id=\"${x.id}\" aria-current=\"${!!cur&&cur.id===x.id}\"><b><i class=\"dot ${LV[x.lv][1]}\"><\/i>${esc(x.n)}<\/b><span>${esc(x.d)}<\/span><\/button>`).join(''):'<div class=\"empty\">No tool matches that search.<\/div>'}\r\nfunction open(id){cur=T.find(x=>x.id===id)||T[0];history.replaceState(null,'','#'+cur.id);list();\r\n const f=cur.f.map(x=>{const id='f-'+x.k;\r\n  if(x.t==='chk')return`<label class=\"chk\"><input type=\"checkbox\" id=\"${id}\" ${x.v?'checked':''}>${esc(x.l)}<\/label>`;\r\n  const c=x.t==='area'?`<textarea id=\"${id}\" rows=\"6\">${esc(x.v)}<\/textarea>`:x.t==='sel'?`<select id=\"${id}\">${x.o.map(o=>`<option value=\"${esc(o[0])}\" ${o[0]===x.v?'selected':''}>${esc(o[1])}<\/option>`).join('')}<\/select>`:`<input type=\"text\" id=\"${id}\" value=\"${esc(x.v)}\" autocomplete=\"off\">`;\r\n  return`<div class=\"${x.t==='area'?'full':''}\"><label for=\"${id}\">${esc(x.l)}<\/label>${c}<\/div>`}).join('');\r\n $('#panel').innerHTML=`<h2>${esc(cur.n)}<span class=\"badge\"><i class=\"dot ${LV[cur.lv][1]}\"><\/i>${LV[cur.lv][0]}<\/span><\/h2><p class=\"d\">${esc(cur.long)}<\/p>${cur.html?`<p class=\"note\" style=\"margin:-8px 0 14px\">${cur.html}<\/p>`:''}<div class=\"form\">${f}<\/div>\r\n <div class=\"bar\"><div class=\"sum\" id=\"sum\"><\/div><span class=\"toast\" id=\"toast\" role=\"status\"><\/span><button class=\"btn\" id=\"copy\">${cur.f.some(x=>x.k==='g')&&0?'':'Copy'}<\/button><button class=\"btn alt\" id=\"csv\">Download CSV<\/button><button class=\"btn ghost\" id=\"reset\">Reset example<\/button><\/div><div id=\"out\"><\/div>`;\r\n $('#copy').textContent=T.find(x=>x.id===cur.id).id==='citations'||cur.id==='audit'?'Copy remaining tasks':'Copy';\r\n const h=e=>{if(e.target.dataset.k){S[e.target.dataset.k]=e.target.checked;save();e.target.closest('tr').classList.toggle('done',e.target.checked);sum();return}clearTimeout(timer);timer=setTimeout(run,200)};\r\n $('#panel').oninput=h;$('#panel').onchange=h;\r\n $('#copy').onclick=copy;$('#csv').onclick=csv;$('#reset').onclick=()=>open(cur.id);run()}\r\nfunction vals(){const v={};cur.f.forEach(x=>{const e=$('#f-'+x.k);v[x.k]=x.t==='chk'?e.checked:e.value});return v}\r\nfunction cell(c){if(c&&typeof c==='object'){if(c.a)return`<a href=\"${esc(c.a)}\" target=\"_blank\" rel=\"noopener\">${esc(c.t)}<\/a>`;if(c.k)return`<input type=\"checkbox\" data-k=\"${esc(c.k)}\" ${S[c.k]?'checked':''} aria-label=\"Mark as done\">`}\r\n if(typeof c==='string'){if(c in PILL)return`<span class=\"pill ${PILL[c]}\">${esc(c)}<\/span>`;if(\/^Fix \\d\/.test(c))return`<span class=\"pill o\">${esc(c)}<\/span>`}return esc(c)}\r\nfunction sum(){if(!res||res.e)return;const s=$('#sum');\r\n if(res.chk){const k=res.r.map(r=>r[0].k),d=k.filter(x=>S[x]).length;s.innerHTML=`<b>${d}<\/b> of ${k.length} done<span class=\"meter\"><i style=\"width:${k.length?d\/k.length*100:0}%\"><\/i><\/span>`}\r\n else s.innerHTML=`<b>${res.r.length.toLocaleString()}<\/b> result${res.r.length===1?'':'s'}${res.n?' \u00b7 '+esc(res.n):''}`}\r\nfunction run(){res=cur.run(vals());const o=$('#out');\r\n if(res.e){o.innerHTML=`<div class=\"empty\">${esc(res.e)}<\/div>`;$('#sum').textContent='';return}\r\n let pre='';if(res.qr)pre='<div class=\"qrbox\"><div id=\"qr\"><\/div><div><b>Scan to leave a review<\/b><p class=\"note\">Print it on a card, receipt or counter sign.<\/p><button class=\"btn alt\" id=\"dlqr\">Download QR (PNG)<\/button><\/div><\/div>';\r\n if(res.pv)pre=`<iframe src=\"${esc(res.pv)}\" title=\"Map preview\" loading=\"lazy\"><\/iframe><p class=\"note\">If the preview stays blank, this page is blocking embedded maps. The code will still work on your own site.<\/p>`;\r\n const rows=res.r.slice(0,400);\r\n o.innerHTML=pre+(res.r.length?`<div class=\"tw\"><table><thead><tr>${res.h.map(h=>`<th>${esc(h)}<\/th>`).join('')}<\/tr><\/thead><tbody>${rows.map(r=>`<tr ${res.chk&&S[r[0].k]?'class=\"done\"':''}>${r.map(c=>`<td>${cell(c)}<\/td>`).join('')}<\/tr>`).join('')}<\/tbody><\/table><\/div>${res.r.length>400?'<p class=\"note\">Showing the first 400 rows. Copy or download to get all of them.<\/p>':''}`:'<div class=\"empty\">No results.<\/div>');\r\n if(res.qr){const q=$('#qr');if(window.QRCode){new QRCode(q,{text:res.qr,width:176,height:176,colorDark:'#0F172A',colorLight:'#ffffff'})}else q.textContent='The QR library could not load. Check your connection and reload.';\r\n  $('#dlqr').onclick=()=>{const c=q.querySelector('canvas');if(!c)return toast('QR not ready.');const a=document.createElement('a');a.href=c.toDataURL('image\/png');a.download='review-qr.png';document.body.appendChild(a);a.click();a.remove()}}\r\n sum()}\r\nfunction toast(m){const t=$('#toast');t.textContent=m;setTimeout(()=>t.textContent='',2400)}\r\nasync function copy(){if(!res||res.e||!res.r.length)return toast('Nothing to copy yet.');\r\n let t=res.t||(res.chk?res.r.filter(r=>!S[r[0].k]).map(r=>'\u2022 '+r[res.c]).join('\\n'):uniq(res.r.map(r=>r[res.c||0])).join('\\n'));\r\n if(!t)return toast('Everything is done.');\r\n try{await navigator.clipboard.writeText(t);toast('Copied')}catch(e){const a=document.createElement('textarea');a.value=t;document.body.appendChild(a);a.select();try{document.execCommand('copy');toast('Copied')}catch(x){toast('Copy failed. Select the text instead.')}a.remove()}}\r\nfunction csv(){if(!res||res.e||!res.r.length)return toast('Nothing to download yet.');\r\n const q=c=>'\"'+String(c&&typeof c==='object'?(c.a||(S[c.k]?'Done':'To do')):c).replace(\/\"\/g,'\"\"')+'\"';\r\n const a=document.createElement('a');a.href=URL.createObjectURL(new Blob(['\\ufeff'+[res.h,...res.r].map(r=>r.map(q).join(',')).join('\\r\\n')],{type:'text\/csv'}));a.download=cur.id+'.csv';document.body.appendChild(a);a.click();a.remove();toast('Download started')}\r\n$('#list').onclick=e=>{const b=e.target.closest('.item');if(b){open(b.dataset.id);if(innerWidth<900)$('#panel').scrollIntoView()}};\r\n$('#q').oninput=list;\r\nopen(location.hash.slice(1));\r\n<\/script>\r\n<\/body>\r\n<\/html>\r\n\t\t\t\t<\/div>\n\t\t\n<\/div>\n\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Local SEO Tools \u2013 Onground Media Onground MediaLocal SEO tools Local SEO tools Eleven free tools to win customers in [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"site-sidebar-layout":"no-sidebar","site-content-layout":"","ast-site-content-layout":"full-width-container","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"disabled","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"default","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-305","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/ongroundmedia.com\/index.php?rest_route=\/wp\/v2\/pages\/305","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ongroundmedia.com\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/ongroundmedia.com\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/ongroundmedia.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ongroundmedia.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=305"}],"version-history":[{"count":4,"href":"https:\/\/ongroundmedia.com\/index.php?rest_route=\/wp\/v2\/pages\/305\/revisions"}],"predecessor-version":[{"id":309,"href":"https:\/\/ongroundmedia.com\/index.php?rest_route=\/wp\/v2\/pages\/305\/revisions\/309"}],"wp:attachment":[{"href":"https:\/\/ongroundmedia.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=305"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}