@canonry/canonry 5.19.1 → 5.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/agent-workspace/skills/canonry/references/canonry-cli.md +3 -1
- package/assets/assets/{AuditHistoryPanel-ddq5tdlB.js → AuditHistoryPanel-BSh3Oezj.js} +1 -1
- package/assets/assets/{BacklinksPage-g57_xzTX.js → BacklinksPage-DQ59dhCx.js} +1 -1
- package/assets/assets/{HistoryPage-C-TdCUQ2.js → HistoryPage-BBvgid3o.js} +1 -1
- package/assets/assets/{MeasurementPropertyPage-CAADmNfw.js → MeasurementPropertyPage-Dmb18JbT.js} +1 -1
- package/assets/assets/{ProjectPage-CoBwpHmA.js → ProjectPage-CPg0q2Dy.js} +1 -1
- package/assets/assets/{RunRow-BpG0Zy-x.js → RunRow-BK8sZCID.js} +1 -1
- package/assets/assets/{RunsPage-DK3pb1LH.js → RunsPage-CIcVBTdP.js} +1 -1
- package/assets/assets/{SettingsPage-BruiY8Zh.js → SettingsPage-Bc3aR-gz.js} +1 -1
- package/assets/assets/{SiteHealthSection-De4U11Gv.js → SiteHealthSection-FF14aIXT.js} +3 -3
- package/assets/assets/{TrafficPage-BVolLXT2.js → TrafficPage-C_qoeGDl.js} +1 -1
- package/assets/assets/{TrafficSourceDetailPage-CFDb6lPD.js → TrafficSourceDetailPage-B3i_B2MI.js} +1 -1
- package/assets/assets/{extract-error-message-Bk1RTjzo.js → extract-error-message-BisUn6nN.js} +1 -1
- package/assets/assets/{index-B--AA1mG.js → index-Dht7JNX5.js} +3 -3
- package/assets/assets/{react-sigma_core.esm.min--QXVK1JS.js → react-sigma_core.esm.min-tWhS09SS.js} +1 -1
- package/assets/assets/{v2-overview-adapter-CpjJPZsC.js → v2-overview-adapter-CAoeWKQJ.js} +1 -1
- package/assets/index.html +1 -1
- package/dist/{chunk-PGOID3LE.js → chunk-4PENJKRN.js} +2 -2
- package/dist/{chunk-EJXDABGU.js → chunk-5FKR2K76.js} +4 -3
- package/dist/{chunk-EJZFTNZG.js → chunk-DRZWMFRV.js} +195 -90
- package/dist/{chunk-SOCYTKTF.js → chunk-QF7SY7AF.js} +27 -6
- package/dist/{chunk-J3JXJIST.js → chunk-TSFKNQ5X.js} +3 -3
- package/dist/{chunk-3IAIW5KH.js → chunk-WL27HO5C.js} +36 -8
- package/dist/{chunk-4WROKFN6.js → chunk-XBGPHZKA.js} +1 -1
- package/dist/cli.js +9 -9
- package/dist/{demo-server-BLDYKCFS.js → demo-server-OCBV5OMS.js} +4 -4
- package/dist/index.js +6 -6
- package/dist/{intelligence-service-3MHYLKMS.js → intelligence-service-MKHINDHN.js} +2 -2
- package/dist/mcp.js +4 -4
- package/package.json +13 -13
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./SiteHealthSection-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./SiteHealthSection-FF14aIXT.js","./vendor-tanstack-ZXXkndVj.js","./vendor-lucide-N6vOpZmh.js","./ChartPrimitives-BQC2VH0O.js","./vendor-recharts-llkUFBGR.js","./ProjectPage-CPg0q2Dy.js","./RunRow-BK8sZCID.js","./extract-error-message-BisUn6nN.js","./v2-overview-adapter-CAoeWKQJ.js","./vendor-markdown-B4giJcws.js","./AuditHistoryPanel-BSh3Oezj.js","./vendor-radix-twS1M3FF.js","./vendor-yaml-GWJz5H2G.js","./RunsPage-CIcVBTdP.js","./HistoryPage-BBvgid3o.js","./SettingsPage-Bc3aR-gz.js","./BacklinksPage-DQ59dhCx.js","./TrafficPage-C_qoeGDl.js","./TrafficSourceDetailPage-B3i_B2MI.js","./MeasurementPropertyPage-Dmb18JbT.js"])))=>i.map(i=>d[i]);
|
|
2
2
|
import{c as l4,d as c4,r as C,j as c,Q as u4,M as d4,q as ge,e as sc,L as Fe,a as m4,t as sr,u as _t,f as p4,h as ia,k as gs,l as Ew,m as h4,n as zw,O as Hh,o as ys,p as f4,s as zt,v as Dw,x as bs,y as g4,z as y4,A as b4}from"./vendor-tanstack-ZXXkndVj.js";import{S as v4,O as Df,P as Ow,C as Of,a as Iw,T as If,D as Pw,R as qw}from"./vendor-radix-twS1M3FF.js";import{c as Mw}from"./vendor-recharts-llkUFBGR.js";import{A as Xl,X as Cr,S as Pf,a as Bw,G as Lw,C as vd,L as gr,R as _u,M as x4,b as w4,P as Qh,H as Vw,c as k4,d as S4,e as xd,f as qf,T as $w,W as j4,g as Mf,h as A4,i as C4,j as N4,k as _4,l as T4,m as R4,n as E4,B as z4,F as D4,o as O4,p as I4,q as P4,r as q4,s as Uw,t as Gw,u as Fh,v as Kw,w as M4,x as Hw,E as B4}from"./vendor-lucide-N6vOpZmh.js";import{M as L4,r as V4}from"./vendor-markdown-B4giJcws.js";import{p as $4}from"./vendor-yaml-GWJz5H2G.js";(function(){const n=document.createElement("link").relList;if(n&&n.supports&&n.supports("modulepreload"))return;for(const u of document.querySelectorAll('link[rel="modulepreload"]'))r(u);new MutationObserver(u=>{for(const h of u)if(h.type==="childList")for(const g of h.addedNodes)g.tagName==="LINK"&&g.rel==="modulepreload"&&r(g)}).observe(document,{childList:!0,subtree:!0});function i(u){const h={};return u.integrity&&(h.integrity=u.integrity),u.referrerPolicy&&(h.referrerPolicy=u.referrerPolicy),u.crossOrigin==="use-credentials"?h.credentials="include":u.crossOrigin==="anonymous"?h.credentials="omit":h.credentials="same-origin",h}function r(u){if(u.ep)return;u.ep=!0;const h=i(u);fetch(u.href,h)}})();var uh={exports:{}},ql={},dh={exports:{}},mh={};var Yb;function U4(){return Yb||(Yb=1,(function(e){function n(I,Y){var fe=I.length;I.push(Y);e:for(;0<fe;){var xe=fe-1>>>1,ee=I[xe];if(0<u(ee,Y))I[xe]=Y,I[fe]=ee,fe=xe;else break e}}function i(I){return I.length===0?null:I[0]}function r(I){if(I.length===0)return null;var Y=I[0],fe=I.pop();if(fe!==Y){I[0]=fe;e:for(var xe=0,ee=I.length,Ne=ee>>>1;xe<Ne;){var De=2*(xe+1)-1,ye=I[De],le=De+1,ce=I[le];if(0>u(ye,fe))le<ee&&0>u(ce,ye)?(I[xe]=ce,I[le]=fe,xe=le):(I[xe]=ye,I[De]=fe,xe=De);else if(le<ee&&0>u(ce,fe))I[xe]=ce,I[le]=fe,xe=le;else break e}}return Y}function u(I,Y){var fe=I.sortIndex-Y.sortIndex;return fe!==0?fe:I.id-Y.id}if(e.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var h=performance;e.unstable_now=function(){return h.now()}}else{var g=Date,b=g.now();e.unstable_now=function(){return g.now()-b}}var v=[],w=[],k=1,j=null,T=3,_=!1,G=!1,R=!1,q=!1,F=typeof setTimeout=="function"?setTimeout:null,ae=typeof clearTimeout=="function"?clearTimeout:null,L=typeof setImmediate<"u"?setImmediate:null;function W(I){for(var Y=i(w);Y!==null;){if(Y.callback===null)r(w);else if(Y.startTime<=I)r(w),Y.sortIndex=Y.expirationTime,n(v,Y);else break;Y=i(w)}}function J(I){if(R=!1,W(I),!G)if(i(v)!==null)G=!0,se||(se=!0,Ve());else{var Y=i(w);Y!==null&&Pe(J,Y.startTime-I)}}var se=!1,V=-1,H=5,we=-1;function We(){return q?!0:!(e.unstable_now()-we<H)}function nt(){if(q=!1,se){var I=e.unstable_now();we=I;var Y=!0;try{e:{G=!1,R&&(R=!1,ae(V),V=-1),_=!0;var fe=T;try{t:{for(W(I),j=i(v);j!==null&&!(j.expirationTime>I&&We());){var xe=j.callback;if(typeof xe=="function"){j.callback=null,T=j.priorityLevel;var ee=xe(j.expirationTime<=I);if(I=e.unstable_now(),typeof ee=="function"){j.callback=ee,W(I),Y=!0;break t}j===i(v)&&r(v),W(I)}else r(v);j=i(v)}if(j!==null)Y=!0;else{var Ne=i(w);Ne!==null&&Pe(J,Ne.startTime-I),Y=!1}}break e}finally{j=null,T=fe,_=!1}Y=void 0}}finally{Y?Ve():se=!1}}}var Ve;if(typeof L=="function")Ve=function(){L(nt)};else if(typeof MessageChannel<"u"){var He=new MessageChannel,Ce=He.port2;He.port1.onmessage=nt,Ve=function(){Ce.postMessage(null)}}else Ve=function(){F(nt,0)};function Pe(I,Y){V=F(function(){I(e.unstable_now())},Y)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(I){I.callback=null},e.unstable_forceFrameRate=function(I){0>I||125<I?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):H=0<I?Math.floor(1e3/I):5},e.unstable_getCurrentPriorityLevel=function(){return T},e.unstable_next=function(I){switch(T){case 1:case 2:case 3:var Y=3;break;default:Y=T}var fe=T;T=Y;try{return I()}finally{T=fe}},e.unstable_requestPaint=function(){q=!0},e.unstable_runWithPriority=function(I,Y){switch(I){case 1:case 2:case 3:case 4:case 5:break;default:I=3}var fe=T;T=I;try{return Y()}finally{T=fe}},e.unstable_scheduleCallback=function(I,Y,fe){var xe=e.unstable_now();switch(typeof fe=="object"&&fe!==null?(fe=fe.delay,fe=typeof fe=="number"&&0<fe?xe+fe:xe):fe=xe,I){case 1:var ee=-1;break;case 2:ee=250;break;case 5:ee=1073741823;break;case 4:ee=1e4;break;default:ee=5e3}return ee=fe+ee,I={id:k++,callback:Y,priorityLevel:I,startTime:fe,expirationTime:ee,sortIndex:-1},fe>xe?(I.sortIndex=fe,n(w,I),i(v)===null&&I===i(w)&&(R?(ae(V),V=-1):R=!0,Pe(J,fe-xe))):(I.sortIndex=ee,n(v,I),G||_||(G=!0,se||(se=!0,Ve()))),I},e.unstable_shouldYield=We,e.unstable_wrapCallback=function(I){var Y=T;return function(){var fe=T;T=Y;try{return I.apply(this,arguments)}finally{T=fe}}}})(mh)),mh}var Xb;function G4(){return Xb||(Xb=1,dh.exports=U4()),dh.exports}var Wb;function K4(){if(Wb)return ql;Wb=1;var e=G4(),n=l4(),i=c4();function r(t){var a="https://react.dev/errors/"+t;if(1<arguments.length){a+="?args[]="+encodeURIComponent(arguments[1]);for(var s=2;s<arguments.length;s++)a+="&args[]="+encodeURIComponent(arguments[s])}return"Minified React error #"+t+"; visit "+a+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}function u(t){return!(!t||t.nodeType!==1&&t.nodeType!==9&&t.nodeType!==11)}function h(t){var a=t,s=t;if(t.alternate)for(;a.return;)a=a.return;else{t=a;do a=t,(a.flags&4098)!==0&&(s=a.return),t=a.return;while(t)}return a.tag===3?s:null}function g(t){if(t.tag===13){var a=t.memoizedState;if(a===null&&(t=t.alternate,t!==null&&(a=t.memoizedState)),a!==null)return a.dehydrated}return null}function b(t){if(t.tag===31){var a=t.memoizedState;if(a===null&&(t=t.alternate,t!==null&&(a=t.memoizedState)),a!==null)return a.dehydrated}return null}function v(t){if(h(t)!==t)throw Error(r(188))}function w(t){var a=t.alternate;if(!a){if(a=h(t),a===null)throw Error(r(188));return a!==t?null:t}for(var s=t,l=a;;){var p=s.return;if(p===null)break;var f=p.alternate;if(f===null){if(l=p.return,l!==null){s=l;continue}break}if(p.child===f.child){for(f=p.child;f;){if(f===s)return v(p),t;if(f===l)return v(p),a;f=f.sibling}throw Error(r(188))}if(s.return!==l.return)s=p,l=f;else{for(var x=!1,S=p.child;S;){if(S===s){x=!0,s=p,l=f;break}if(S===l){x=!0,l=p,s=f;break}S=S.sibling}if(!x){for(S=f.child;S;){if(S===s){x=!0,s=f,l=p;break}if(S===l){x=!0,l=f,s=p;break}S=S.sibling}if(!x)throw Error(r(189))}}if(s.alternate!==l)throw Error(r(190))}if(s.tag!==3)throw Error(r(188));return s.stateNode.current===s?t:a}function k(t){var a=t.tag;if(a===5||a===26||a===27||a===6)return t;for(t=t.child;t!==null;){if(a=k(t),a!==null)return a;t=t.sibling}return null}var j=Object.assign,T=Symbol.for("react.element"),_=Symbol.for("react.transitional.element"),G=Symbol.for("react.portal"),R=Symbol.for("react.fragment"),q=Symbol.for("react.strict_mode"),F=Symbol.for("react.profiler"),ae=Symbol.for("react.consumer"),L=Symbol.for("react.context"),W=Symbol.for("react.forward_ref"),J=Symbol.for("react.suspense"),se=Symbol.for("react.suspense_list"),V=Symbol.for("react.memo"),H=Symbol.for("react.lazy"),we=Symbol.for("react.activity"),We=Symbol.for("react.memo_cache_sentinel"),nt=Symbol.iterator;function Ve(t){return t===null||typeof t!="object"?null:(t=nt&&t[nt]||t["@@iterator"],typeof t=="function"?t:null)}var He=Symbol.for("react.client.reference");function Ce(t){if(t==null)return null;if(typeof t=="function")return t.$$typeof===He?null:t.displayName||t.name||null;if(typeof t=="string")return t;switch(t){case R:return"Fragment";case F:return"Profiler";case q:return"StrictMode";case J:return"Suspense";case se:return"SuspenseList";case we:return"Activity"}if(typeof t=="object")switch(t.$$typeof){case G:return"Portal";case L:return t.displayName||"Context";case ae:return(t._context.displayName||"Context")+".Consumer";case W:var a=t.render;return t=t.displayName,t||(t=a.displayName||a.name||"",t=t!==""?"ForwardRef("+t+")":"ForwardRef"),t;case V:return a=t.displayName||null,a!==null?a:Ce(t.type)||"Memo";case H:a=t._payload,t=t._init;try{return Ce(t(a))}catch{}}return null}var Pe=Array.isArray,I=n.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,Y=i.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,fe={pending:!1,data:null,method:null,action:null},xe=[],ee=-1;function Ne(t){return{current:t}}function De(t){0>ee||(t.current=xe[ee],xe[ee]=null,ee--)}function ye(t,a){ee++,xe[ee]=t.current,t.current=a}var le=Ne(null),ce=Ne(null),K=Ne(null),ue=Ne(null);function Re(t,a){switch(ye(K,a),ye(ce,t),ye(le,null),a.nodeType){case 9:case 11:t=(t=a.documentElement)&&(t=t.namespaceURI)?vb(t):0;break;default:if(t=a.tagName,a=a.namespaceURI)a=vb(a),t=xb(a,t);else switch(t){case"svg":t=1;break;case"math":t=2;break;default:t=0}}De(le),ye(le,t)}function ke(){De(le),De(ce),De(K)}function et(t){t.memoizedState!==null&&ye(ue,t);var a=le.current,s=xb(a,t.type);a!==s&&(ye(ce,t),ye(le,s))}function Me(t){ce.current===t&&(De(le),De(ce)),ue.current===t&&(De(ue),Dl._currentValue=fe)}var yt,Le;function re(t){if(yt===void 0)try{throw Error()}catch(s){var a=s.stack.trim().match(/\n( *(at )?)/);yt=a&&a[1]||"",Le=-1<s.stack.indexOf(`
|
|
3
3
|
at`)?" (<anonymous>)":-1<s.stack.indexOf("@")?"@unknown:0:0":""}return`
|
|
4
4
|
`+yt+t+Le}var at=!1;function Bt(t,a){if(!t||at)return"";at=!0;var s=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{var l={DetermineComponentFrameRoot:function(){try{if(a){var ie=function(){throw Error()};if(Object.defineProperty(ie.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(ie,[])}catch(Q){var U=Q}Reflect.construct(t,[],ie)}else{try{ie.call()}catch(Q){U=Q}t.call(ie.prototype)}}else{try{throw Error()}catch(Q){U=Q}(ie=t())&&typeof ie.catch=="function"&&ie.catch(function(){})}}catch(Q){if(Q&&U&&typeof Q.stack=="string")return[Q.stack,U.stack]}return[null,null]}};l.DetermineComponentFrameRoot.displayName="DetermineComponentFrameRoot";var p=Object.getOwnPropertyDescriptor(l.DetermineComponentFrameRoot,"name");p&&p.configurable&&Object.defineProperty(l.DetermineComponentFrameRoot,"name",{value:"DetermineComponentFrameRoot"});var f=l.DetermineComponentFrameRoot(),x=f[0],S=f[1];if(x&&S){var E=x.split(`
|
|
@@ -49,7 +49,7 @@ Error generating stack: `+l.message+`
|
|
|
49
49
|
|
|
50
50
|
`)}_.write("payload.value = newResult;"),_.write("return payload;");const ae=_.compile();return(L,W)=>ae(T,L,W)};let h;const g=Wl,b=!lk.jitless,w=b&&k_.value,k=n.catchall;let j;e._zod.parse=(T,_)=>{j??(j=r.value);const G=T.value;return g(G)?b&&w&&_?.async===!1&&_.jitless!==!0?(h||(h=u(n.shape)),T=h(T,_),k?Ak([],G,T,_,j,e):T):i(T,_):(T.issues.push({expected:"object",code:"invalid_type",input:G,inst:e}),T)}});function ov(e,n,i,r){for(const h of e)if(h.issues.length===0)return n.value=h.value,n;const u=e.filter(h=>!ur(h));return u.length===1?(n.value=u[0].value,u[0]):(n.issues.push({code:"invalid_union",input:n.value,inst:i,errors:e.map(h=>h.issues.map(g=>hs(g,r,ps())))}),n)}const Ck=X("$ZodUnion",(e,n)=>{Pt.init(e,n),vt(e._zod,"optin",()=>n.options.some(u=>u._zod.optin==="optional")?"optional":void 0),vt(e._zod,"optout",()=>n.options.some(u=>u._zod.optout==="optional")?"optional":void 0),vt(e._zod,"values",()=>{if(n.options.every(u=>u._zod.values))return new Set(n.options.flatMap(u=>Array.from(u._zod.values)))}),vt(e._zod,"pattern",()=>{if(n.options.every(u=>u._zod.pattern)){const u=n.options.map(h=>h._zod.pattern);return new RegExp(`^(${u.map(h=>Lf(h.source)).join("|")})$`)}});const i=n.options.length===1,r=n.options[0]._zod.run;e._zod.parse=(u,h)=>{if(i)return r(u,h);let g=!1;const b=[];for(const v of n.options){const w=v._zod.run({value:u.value,issues:[]},h);if(w instanceof Promise)b.push(w),g=!0;else{if(w.issues.length===0)return w;b.push(w)}}return g?Promise.all(b).then(v=>ov(v,u,e,h)):ov(b,u,e,h)}}),u7=X("$ZodDiscriminatedUnion",(e,n)=>{n.inclusive=!1,Ck.init(e,n);const i=e._zod.parse;vt(e._zod,"propValues",()=>{const u={};for(const h of n.options){const g=h._zod.propValues;if(!g||Object.keys(g).length===0)throw new Error(`Invalid discriminated union option at index "${n.options.indexOf(h)}"`);for(const[b,v]of Object.entries(g)){u[b]||(u[b]=new Set);for(const w of v)u[b].add(w)}}return u});const r=kd(()=>{const u=n.options,h=new Map;for(const g of u){const b=g._zod.propValues?.[n.discriminator];if(!b||b.size===0)throw new Error(`Invalid discriminated union option at index "${n.options.indexOf(g)}"`);for(const v of b){if(h.has(v))throw new Error(`Duplicate discriminator value "${String(v)}"`);h.set(v,g)}}return h});e._zod.parse=(u,h)=>{const g=u.value;if(!Wl(g))return u.issues.push({code:"invalid_type",expected:"object",input:g,inst:e}),u;const b=r.value.get(g?.[n.discriminator]);return b?b._zod.run(u,h):n.unionFallback?i(u,h):(u.issues.push({code:"invalid_union",errors:[],note:"No matching discriminator",discriminator:n.discriminator,input:g,path:[n.discriminator],inst:e}),u)}}),d7=X("$ZodIntersection",(e,n)=>{Pt.init(e,n),e._zod.parse=(i,r)=>{const u=i.value,h=n.left._zod.run({value:u,issues:[]},r),g=n.right._zod.run({value:u,issues:[]},r);return h instanceof Promise||g instanceof Promise?Promise.all([h,g]).then(([v,w])=>rv(i,v,w)):rv(i,h,g)}});function Yh(e,n){if(e===n)return{valid:!0,data:e};if(e instanceof Date&&n instanceof Date&&+e==+n)return{valid:!0,data:e};if(yr(e)&&yr(n)){const i=Object.keys(n),r=Object.keys(e).filter(h=>i.indexOf(h)!==-1),u={...e,...n};for(const h of r){const g=Yh(e[h],n[h]);if(!g.valid)return{valid:!1,mergeErrorPath:[h,...g.mergeErrorPath]};u[h]=g.data}return{valid:!0,data:u}}if(Array.isArray(e)&&Array.isArray(n)){if(e.length!==n.length)return{valid:!1,mergeErrorPath:[]};const i=[];for(let r=0;r<e.length;r++){const u=e[r],h=n[r],g=Yh(u,h);if(!g.valid)return{valid:!1,mergeErrorPath:[r,...g.mergeErrorPath]};i.push(g.data)}return{valid:!0,data:i}}return{valid:!1,mergeErrorPath:[]}}function rv(e,n,i){const r=new Map;let u;for(const b of n.issues)if(b.code==="unrecognized_keys"){u??(u=b);for(const v of b.keys)r.has(v)||r.set(v,{}),r.get(v).l=!0}else e.issues.push(b);for(const b of i.issues)if(b.code==="unrecognized_keys")for(const v of b.keys)r.has(v)||r.set(v,{}),r.get(v).r=!0;else e.issues.push(b);const h=[...r].filter(([,b])=>b.l&&b.r).map(([b])=>b);if(h.length&&u&&e.issues.push({...u,keys:h}),ur(e))return e;const g=Yh(n.value,i.value);if(!g.valid)throw new Error(`Unmergable intersection. Error path: ${JSON.stringify(g.mergeErrorPath)}`);return e.value=g.data,e}const m7=X("$ZodRecord",(e,n)=>{Pt.init(e,n),e._zod.parse=(i,r)=>{const u=i.value;if(!yr(u))return i.issues.push({expected:"record",code:"invalid_type",input:u,inst:e}),i;const h=[],g=n.keyType._zod.values;if(g){i.value={};const b=new Set;for(const w of g)if(typeof w=="string"||typeof w=="number"||typeof w=="symbol"){b.add(typeof w=="number"?w.toString():w);const k=n.valueType._zod.run({value:u[w],issues:[]},r);k instanceof Promise?h.push(k.then(j=>{j.issues.length&&i.issues.push(...dr(w,j.issues)),i.value[w]=j.value})):(k.issues.length&&i.issues.push(...dr(w,k.issues)),i.value[w]=k.value)}let v;for(const w in u)b.has(w)||(v=v??[],v.push(w));v&&v.length>0&&i.issues.push({code:"unrecognized_keys",input:u,inst:e,keys:v})}else{i.value={};for(const b of Reflect.ownKeys(u)){if(b==="__proto__")continue;let v=n.keyType._zod.run({value:b,issues:[]},r);if(v instanceof Promise)throw new Error("Async schemas not supported in object keys currently");if(typeof b=="string"&&bk.test(b)&&v.issues.length){const j=n.keyType._zod.run({value:Number(b),issues:[]},r);if(j instanceof Promise)throw new Error("Async schemas not supported in object keys currently");j.issues.length===0&&(v=j)}if(v.issues.length){n.mode==="loose"?i.value[b]=u[b]:i.issues.push({code:"invalid_key",origin:"record",issues:v.issues.map(j=>hs(j,r,ps())),input:b,path:[b],inst:e});continue}const k=n.valueType._zod.run({value:u[b],issues:[]},r);k instanceof Promise?h.push(k.then(j=>{j.issues.length&&i.issues.push(...dr(b,j.issues)),i.value[v.value]=j.value})):(k.issues.length&&i.issues.push(...dr(b,k.issues)),i.value[v.value]=k.value)}}return h.length?Promise.all(h).then(()=>i):i}}),p7=X("$ZodEnum",(e,n)=>{Pt.init(e,n);const i=ck(n.entries),r=new Set(i);e._zod.values=r,e._zod.pattern=new RegExp(`^(${i.filter(u=>S_.has(typeof u)).map(u=>typeof u=="string"?br(u):u.toString()).join("|")})$`),e._zod.parse=(u,h)=>{const g=u.value;return r.has(g)||u.issues.push({code:"invalid_value",values:i,input:g,inst:e}),u}}),h7=X("$ZodLiteral",(e,n)=>{if(Pt.init(e,n),n.values.length===0)throw new Error("Cannot create literal schema with no valid values");const i=new Set(n.values);e._zod.values=i,e._zod.pattern=new RegExp(`^(${n.values.map(r=>typeof r=="string"?br(r):r?br(r.toString()):String(r)).join("|")})$`),e._zod.parse=(r,u)=>{const h=r.value;return i.has(h)||r.issues.push({code:"invalid_value",values:n.values,input:h,inst:e}),r}}),f7=X("$ZodTransform",(e,n)=>{Pt.init(e,n),e._zod.parse=(i,r)=>{if(r.direction==="backward")throw new rk(e.constructor.name);const u=n.transform(i.value,i);if(r.async)return(u instanceof Promise?u:Promise.resolve(u)).then(g=>(i.value=g,i));if(u instanceof Promise)throw new pr;return i.value=u,i}});function lv(e,n){return e.issues.length&&n===void 0?{issues:[],value:void 0}:e}const Nk=X("$ZodOptional",(e,n)=>{Pt.init(e,n),e._zod.optin="optional",e._zod.optout="optional",vt(e._zod,"values",()=>n.innerType._zod.values?new Set([...n.innerType._zod.values,void 0]):void 0),vt(e._zod,"pattern",()=>{const i=n.innerType._zod.pattern;return i?new RegExp(`^(${Lf(i.source)})?$`):void 0}),e._zod.parse=(i,r)=>{if(n.innerType._zod.optin==="optional"){const u=n.innerType._zod.run(i,r);return u instanceof Promise?u.then(h=>lv(h,i.value)):lv(u,i.value)}return i.value===void 0?i:n.innerType._zod.run(i,r)}}),g7=X("$ZodExactOptional",(e,n)=>{Nk.init(e,n),vt(e._zod,"values",()=>n.innerType._zod.values),vt(e._zod,"pattern",()=>n.innerType._zod.pattern),e._zod.parse=(i,r)=>n.innerType._zod.run(i,r)}),y7=X("$ZodNullable",(e,n)=>{Pt.init(e,n),vt(e._zod,"optin",()=>n.innerType._zod.optin),vt(e._zod,"optout",()=>n.innerType._zod.optout),vt(e._zod,"pattern",()=>{const i=n.innerType._zod.pattern;return i?new RegExp(`^(${Lf(i.source)}|null)$`):void 0}),vt(e._zod,"values",()=>n.innerType._zod.values?new Set([...n.innerType._zod.values,null]):void 0),e._zod.parse=(i,r)=>i.value===null?i:n.innerType._zod.run(i,r)}),b7=X("$ZodDefault",(e,n)=>{Pt.init(e,n),e._zod.optin="optional",vt(e._zod,"values",()=>n.innerType._zod.values),e._zod.parse=(i,r)=>{if(r.direction==="backward")return n.innerType._zod.run(i,r);if(i.value===void 0)return i.value=n.defaultValue,i;const u=n.innerType._zod.run(i,r);return u instanceof Promise?u.then(h=>cv(h,n)):cv(u,n)}});function cv(e,n){return e.value===void 0&&(e.value=n.defaultValue),e}const v7=X("$ZodPrefault",(e,n)=>{Pt.init(e,n),e._zod.optin="optional",vt(e._zod,"values",()=>n.innerType._zod.values),e._zod.parse=(i,r)=>(r.direction==="backward"||i.value===void 0&&(i.value=n.defaultValue),n.innerType._zod.run(i,r))}),x7=X("$ZodNonOptional",(e,n)=>{Pt.init(e,n),vt(e._zod,"values",()=>{const i=n.innerType._zod.values;return i?new Set([...i].filter(r=>r!==void 0)):void 0}),e._zod.parse=(i,r)=>{const u=n.innerType._zod.run(i,r);return u instanceof Promise?u.then(h=>uv(h,e)):uv(u,e)}});function uv(e,n){return!e.issues.length&&e.value===void 0&&e.issues.push({code:"invalid_type",expected:"nonoptional",input:e.value,inst:n}),e}const w7=X("$ZodCatch",(e,n)=>{Pt.init(e,n),vt(e._zod,"optin",()=>n.innerType._zod.optin),vt(e._zod,"optout",()=>n.innerType._zod.optout),vt(e._zod,"values",()=>n.innerType._zod.values),e._zod.parse=(i,r)=>{if(r.direction==="backward")return n.innerType._zod.run(i,r);const u=n.innerType._zod.run(i,r);return u instanceof Promise?u.then(h=>(i.value=h.value,h.issues.length&&(i.value=n.catchValue({...i,error:{issues:h.issues.map(g=>hs(g,r,ps()))},input:i.value}),i.issues=[]),i)):(i.value=u.value,u.issues.length&&(i.value=n.catchValue({...i,error:{issues:u.issues.map(h=>hs(h,r,ps()))},input:i.value}),i.issues=[]),i)}}),k7=X("$ZodPipe",(e,n)=>{Pt.init(e,n),vt(e._zod,"values",()=>n.in._zod.values),vt(e._zod,"optin",()=>n.in._zod.optin),vt(e._zod,"optout",()=>n.out._zod.optout),vt(e._zod,"propValues",()=>n.in._zod.propValues),e._zod.parse=(i,r)=>{if(r.direction==="backward"){const h=n.out._zod.run(i,r);return h instanceof Promise?h.then(g=>Ru(g,n.in,r)):Ru(h,n.in,r)}const u=n.in._zod.run(i,r);return u instanceof Promise?u.then(h=>Ru(h,n.out,r)):Ru(u,n.out,r)}});function Ru(e,n,i){return e.issues.length?(e.aborted=!0,e):n._zod.run({value:e.value,issues:e.issues},i)}const S7=X("$ZodReadonly",(e,n)=>{Pt.init(e,n),vt(e._zod,"propValues",()=>n.innerType._zod.propValues),vt(e._zod,"values",()=>n.innerType._zod.values),vt(e._zod,"optin",()=>n.innerType?._zod?.optin),vt(e._zod,"optout",()=>n.innerType?._zod?.optout),e._zod.parse=(i,r)=>{if(r.direction==="backward")return n.innerType._zod.run(i,r);const u=n.innerType._zod.run(i,r);return u instanceof Promise?u.then(dv):dv(u)}});function dv(e){return e.value=Object.freeze(e.value),e}const j7=X("$ZodCustom",(e,n)=>{Hn.init(e,n),Pt.init(e,n),e._zod.parse=(i,r)=>i,e._zod.check=i=>{const r=i.value,u=n.fn(r);if(u instanceof Promise)return u.then(h=>mv(h,i,r,e));mv(u,i,r,e)}});function mv(e,n,i,r){if(!e){const u={code:"custom",input:i,inst:r,path:[...r._zod.def.path??[]],continue:!r._zod.def.abort};r._zod.def.params&&(u.params=r._zod.def.params),n.issues.push(Jl(u))}}var pv;class A7{constructor(){this._map=new WeakMap,this._idmap=new Map}add(n,...i){const r=i[0];return this._map.set(n,r),r&&typeof r=="object"&&"id"in r&&this._idmap.set(r.id,n),this}clear(){return this._map=new WeakMap,this._idmap=new Map,this}remove(n){const i=this._map.get(n);return i&&typeof i=="object"&&"id"in i&&this._idmap.delete(i.id),this._map.delete(n),this}get(n){const i=n._zod.parent;if(i){const r={...this.get(i)??{}};delete r.id;const u={...r,...this._map.get(n)};return Object.keys(u).length?u:void 0}return this._map.get(n)}has(n){return this._map.has(n)}}function C7(){return new A7}(pv=globalThis).__zod_globalRegistry??(pv.__zod_globalRegistry=C7());const Gl=globalThis.__zod_globalRegistry;function N7(e,n){return new e({type:"string",...Te(n)})}function _7(e,n){return new e({type:"string",format:"email",check:"string_format",abort:!1,...Te(n)})}function hv(e,n){return new e({type:"string",format:"guid",check:"string_format",abort:!1,...Te(n)})}function _k(e,n){return new e({type:"string",format:"uuid",check:"string_format",abort:!1,...Te(n)})}function T7(e,n){return new e({type:"string",format:"uuid",check:"string_format",abort:!1,version:"v4",...Te(n)})}function R7(e,n){return new e({type:"string",format:"uuid",check:"string_format",abort:!1,version:"v6",...Te(n)})}function E7(e,n){return new e({type:"string",format:"uuid",check:"string_format",abort:!1,version:"v7",...Te(n)})}function z7(e,n){return new e({type:"string",format:"url",check:"string_format",abort:!1,...Te(n)})}function D7(e,n){return new e({type:"string",format:"emoji",check:"string_format",abort:!1,...Te(n)})}function O7(e,n){return new e({type:"string",format:"nanoid",check:"string_format",abort:!1,...Te(n)})}function I7(e,n){return new e({type:"string",format:"cuid",check:"string_format",abort:!1,...Te(n)})}function P7(e,n){return new e({type:"string",format:"cuid2",check:"string_format",abort:!1,...Te(n)})}function q7(e,n){return new e({type:"string",format:"ulid",check:"string_format",abort:!1,...Te(n)})}function M7(e,n){return new e({type:"string",format:"xid",check:"string_format",abort:!1,...Te(n)})}function B7(e,n){return new e({type:"string",format:"ksuid",check:"string_format",abort:!1,...Te(n)})}function L7(e,n){return new e({type:"string",format:"ipv4",check:"string_format",abort:!1,...Te(n)})}function V7(e,n){return new e({type:"string",format:"ipv6",check:"string_format",abort:!1,...Te(n)})}function $7(e,n){return new e({type:"string",format:"cidrv4",check:"string_format",abort:!1,...Te(n)})}function U7(e,n){return new e({type:"string",format:"cidrv6",check:"string_format",abort:!1,...Te(n)})}function G7(e,n){return new e({type:"string",format:"base64",check:"string_format",abort:!1,...Te(n)})}function K7(e,n){return new e({type:"string",format:"base64url",check:"string_format",abort:!1,...Te(n)})}function H7(e,n){return new e({type:"string",format:"e164",check:"string_format",abort:!1,...Te(n)})}function Q7(e,n){return new e({type:"string",format:"jwt",check:"string_format",abort:!1,...Te(n)})}function F7(e,n){return new e({type:"string",format:"datetime",check:"string_format",offset:!1,local:!1,precision:null,...Te(n)})}function Z7(e,n){return new e({type:"string",format:"date",check:"string_format",...Te(n)})}function Y7(e,n){return new e({type:"string",format:"time",check:"string_format",precision:null,...Te(n)})}function X7(e,n){return new e({type:"string",format:"duration",check:"string_format",...Te(n)})}function W7(e,n){return new e({type:"number",checks:[],...Te(n)})}function J7(e,n){return new e({type:"number",coerce:!0,checks:[],...Te(n)})}function eT(e,n){return new e({type:"number",check:"number_format",abort:!1,format:"safeint",...Te(n)})}function tT(e,n){return new e({type:"boolean",...Te(n)})}function nT(e,n){return new e({type:"null",...Te(n)})}function aT(e){return new e({type:"unknown"})}function iT(e,n){return new e({type:"never",...Te(n)})}function fv(e,n){return new xk({check:"less_than",...Te(n),value:e,inclusive:!1})}function hh(e,n){return new xk({check:"less_than",...Te(n),value:e,inclusive:!0})}function gv(e,n){return new wk({check:"greater_than",...Te(n),value:e,inclusive:!1})}function fh(e,n){return new wk({check:"greater_than",...Te(n),value:e,inclusive:!0})}function yv(e,n){return new y8({check:"multiple_of",...Te(n),value:e})}function Tk(e,n){return new v8({check:"max_length",...Te(n),maximum:e})}function Ju(e,n){return new x8({check:"min_length",...Te(n),minimum:e})}function Rk(e,n){return new w8({check:"length_equals",...Te(n),length:e})}function sT(e,n){return new k8({check:"string_format",format:"regex",...Te(n),pattern:e})}function oT(e){return new S8({check:"string_format",format:"lowercase",...Te(e)})}function rT(e){return new j8({check:"string_format",format:"uppercase",...Te(e)})}function lT(e,n){return new A8({check:"string_format",format:"includes",...Te(n),includes:e})}function cT(e,n){return new C8({check:"string_format",format:"starts_with",...Te(n),prefix:e})}function uT(e,n){return new N8({check:"string_format",format:"ends_with",...Te(n),suffix:e})}function Nr(e){return new _8({check:"overwrite",tx:e})}function dT(e){return Nr(n=>n.normalize(e))}function mT(){return Nr(e=>e.trim())}function pT(){return Nr(e=>e.toLowerCase())}function hT(){return Nr(e=>e.toUpperCase())}function fT(){return Nr(e=>w_(e))}function gT(e,n,i){return new e({type:"array",element:n,...Te(i)})}function yT(e,n,i){return new e({type:"custom",check:"custom",fn:n,...Te(i)})}function bT(e){const n=vT(i=>(i.addIssue=r=>{if(typeof r=="string")i.issues.push(Jl(r,i.value,n._zod.def));else{const u=r;u.fatal&&(u.continue=!1),u.code??(u.code="custom"),u.input??(u.input=i.value),u.inst??(u.inst=n),u.continue??(u.continue=!n._zod.def.abort),i.issues.push(Jl(u))}},e(i.value,i)));return n}function vT(e,n){const i=new Hn({check:"custom",...Te(n)});return i._zod.check=e,i}function Ek(e){let n=e?.target??"draft-2020-12";return n==="draft-4"&&(n="draft-04"),n==="draft-7"&&(n="draft-07"),{processors:e.processors??{},metadataRegistry:e?.metadata??Gl,target:n,unrepresentable:e?.unrepresentable??"throw",override:e?.override??(()=>{}),io:e?.io??"output",counter:0,seen:new Map,cycles:e?.cycles??"ref",reused:e?.reused??"inline",external:e?.external??void 0}}function an(e,n,i={path:[],schemaPath:[]}){var r;const u=e._zod.def,h=n.seen.get(e);if(h)return h.count++,i.schemaPath.includes(e)&&(h.cycle=i.path),h.schema;const g={schema:{},count:1,cycle:void 0,path:i.path};n.seen.set(e,g);const b=e._zod.toJSONSchema?.();if(b)g.schema=b;else{const k={...i,schemaPath:[...i.schemaPath,e],path:i.path};if(e._zod.processJSONSchema)e._zod.processJSONSchema(n,g.schema,k);else{const T=g.schema,_=n.processors[u.type];if(!_)throw new Error(`[toJSONSchema]: Non-representable type encountered: ${u.type}`);_(e,n,T,k)}const j=e._zod.parent;j&&(g.ref||(g.ref=j),an(j,n,k),n.seen.get(j).isParent=!0)}const v=n.metadataRegistry.get(e);return v&&Object.assign(g.schema,v),n.io==="input"&&On(e)&&(delete g.schema.examples,delete g.schema.default),n.io==="input"&&g.schema._prefault&&((r=g.schema).default??(r.default=g.schema._prefault)),delete g.schema._prefault,n.seen.get(e).schema}function zk(e,n){const i=e.seen.get(n);if(!i)throw new Error("Unprocessed schema. This is a bug in Zod.");const r=new Map;for(const g of e.seen.entries()){const b=e.metadataRegistry.get(g[0])?.id;if(b){const v=r.get(b);if(v&&v!==g[0])throw new Error(`Duplicate schema id "${b}" detected during JSON Schema conversion. Two different schemas cannot share the same id when converted together.`);r.set(b,g[0])}}const u=g=>{const b=e.target==="draft-2020-12"?"$defs":"definitions";if(e.external){const j=e.external.registry.get(g[0])?.id,T=e.external.uri??(G=>G);if(j)return{ref:T(j)};const _=g[1].defId??g[1].schema.id??`schema${e.counter++}`;return g[1].defId=_,{defId:_,ref:`${T("__shared")}#/${b}/${_}`}}if(g[1]===i)return{ref:"#"};const w=`#/${b}/`,k=g[1].schema.id??`__schema${e.counter++}`;return{defId:k,ref:w+k}},h=g=>{if(g[1].schema.$ref)return;const b=g[1],{ref:v,defId:w}=u(g);b.def={...b.schema},w&&(b.defId=w);const k=b.schema;for(const j in k)delete k[j];k.$ref=v};if(e.cycles==="throw")for(const g of e.seen.entries()){const b=g[1];if(b.cycle)throw new Error(`Cycle detected: #/${b.cycle?.join("/")}/<root>
|
|
51
51
|
|
|
52
|
-
Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.`)}for(const g of e.seen.entries()){const b=g[1];if(n===g[0]){h(g);continue}if(e.external){const w=e.external.registry.get(g[0])?.id;if(n!==g[0]&&w){h(g);continue}}if(e.metadataRegistry.get(g[0])?.id){h(g);continue}if(b.cycle){h(g);continue}if(b.count>1&&e.reused==="ref"){h(g);continue}}}function Dk(e,n){const i=e.seen.get(n);if(!i)throw new Error("Unprocessed schema. This is a bug in Zod.");const r=g=>{const b=e.seen.get(g);if(b.ref===null)return;const v=b.def??b.schema,w={...v},k=b.ref;if(b.ref=null,k){r(k);const T=e.seen.get(k),_=T.schema;if(_.$ref&&(e.target==="draft-07"||e.target==="draft-04"||e.target==="openapi-3.0")?(v.allOf=v.allOf??[],v.allOf.push(_)):Object.assign(v,_),Object.assign(v,w),g._zod.parent===k)for(const R in v)R==="$ref"||R==="allOf"||R in w||delete v[R];if(_.$ref&&T.def)for(const R in v)R==="$ref"||R==="allOf"||R in T.def&&JSON.stringify(v[R])===JSON.stringify(T.def[R])&&delete v[R]}const j=g._zod.parent;if(j&&j!==k){r(j);const T=e.seen.get(j);if(T?.schema.$ref&&(v.$ref=T.schema.$ref,T.def))for(const _ in v)_==="$ref"||_==="allOf"||_ in T.def&&JSON.stringify(v[_])===JSON.stringify(T.def[_])&&delete v[_]}e.override({zodSchema:g,jsonSchema:v,path:b.path??[]})};for(const g of[...e.seen.entries()].reverse())r(g[0]);const u={};if(e.target==="draft-2020-12"?u.$schema="https://json-schema.org/draft/2020-12/schema":e.target==="draft-07"?u.$schema="http://json-schema.org/draft-07/schema#":e.target==="draft-04"?u.$schema="http://json-schema.org/draft-04/schema#":e.target,e.external?.uri){const g=e.external.registry.get(n)?.id;if(!g)throw new Error("Schema is missing an `id` property");u.$id=e.external.uri(g)}Object.assign(u,i.def??i.schema);const h=e.external?.defs??{};for(const g of e.seen.entries()){const b=g[1];b.def&&b.defId&&(h[b.defId]=b.def)}e.external||Object.keys(h).length>0&&(e.target==="draft-2020-12"?u.$defs=h:u.definitions=h);try{const g=JSON.parse(JSON.stringify(u));return Object.defineProperty(g,"~standard",{value:{...n["~standard"],jsonSchema:{input:ed(n,"input",e.processors),output:ed(n,"output",e.processors)}},enumerable:!1,writable:!1}),g}catch{throw new Error("Error converting schema to JSON.")}}function On(e,n){const i=n??{seen:new Set};if(i.seen.has(e))return!1;i.seen.add(e);const r=e._zod.def;if(r.type==="transform")return!0;if(r.type==="array")return On(r.element,i);if(r.type==="set")return On(r.valueType,i);if(r.type==="lazy")return On(r.getter(),i);if(r.type==="promise"||r.type==="optional"||r.type==="nonoptional"||r.type==="nullable"||r.type==="readonly"||r.type==="default"||r.type==="prefault")return On(r.innerType,i);if(r.type==="intersection")return On(r.left,i)||On(r.right,i);if(r.type==="record"||r.type==="map")return On(r.keyType,i)||On(r.valueType,i);if(r.type==="pipe")return On(r.in,i)||On(r.out,i);if(r.type==="object"){for(const u in r.shape)if(On(r.shape[u],i))return!0;return!1}if(r.type==="union"){for(const u of r.options)if(On(u,i))return!0;return!1}if(r.type==="tuple"){for(const u of r.items)if(On(u,i))return!0;return!!(r.rest&&On(r.rest,i))}return!1}const xT=(e,n={})=>i=>{const r=Ek({...i,processors:n});return an(e,r),zk(r,e),Dk(r,e)},ed=(e,n,i={})=>r=>{const{libraryOptions:u,target:h}=r??{},g=Ek({...u??{},target:h,io:n,processors:i});return an(e,g),zk(g,e),Dk(g,e)},wT={guid:"uuid",url:"uri",datetime:"date-time",json_string:"json-string",regex:""},kT=(e,n,i,r)=>{const u=i;u.type="string";const{minimum:h,maximum:g,format:b,patterns:v,contentEncoding:w}=e._zod.bag;if(typeof h=="number"&&(u.minLength=h),typeof g=="number"&&(u.maxLength=g),b&&(u.format=wT[b]??b,u.format===""&&delete u.format,b==="time"&&delete u.format),w&&(u.contentEncoding=w),v&&v.size>0){const k=[...v];k.length===1?u.pattern=k[0].source:k.length>1&&(u.allOf=[...k.map(j=>({...n.target==="draft-07"||n.target==="draft-04"||n.target==="openapi-3.0"?{type:"string"}:{},pattern:j.source}))])}},ST=(e,n,i,r)=>{const u=i,{minimum:h,maximum:g,format:b,multipleOf:v,exclusiveMaximum:w,exclusiveMinimum:k}=e._zod.bag;typeof b=="string"&&b.includes("int")?u.type="integer":u.type="number",typeof k=="number"&&(n.target==="draft-04"||n.target==="openapi-3.0"?(u.minimum=k,u.exclusiveMinimum=!0):u.exclusiveMinimum=k),typeof h=="number"&&(u.minimum=h,typeof k=="number"&&n.target!=="draft-04"&&(k>=h?delete u.minimum:delete u.exclusiveMinimum)),typeof w=="number"&&(n.target==="draft-04"||n.target==="openapi-3.0"?(u.maximum=w,u.exclusiveMaximum=!0):u.exclusiveMaximum=w),typeof g=="number"&&(u.maximum=g,typeof w=="number"&&n.target!=="draft-04"&&(w<=g?delete u.maximum:delete u.exclusiveMaximum)),typeof v=="number"&&(u.multipleOf=v)},jT=(e,n,i,r)=>{i.type="boolean"},AT=(e,n,i,r)=>{n.target==="openapi-3.0"?(i.type="string",i.nullable=!0,i.enum=[null]):i.type="null"},CT=(e,n,i,r)=>{i.not={}},NT=(e,n,i,r)=>{},_T=(e,n,i,r)=>{const u=e._zod.def,h=ck(u.entries);h.every(g=>typeof g=="number")&&(i.type="number"),h.every(g=>typeof g=="string")&&(i.type="string"),i.enum=h},TT=(e,n,i,r)=>{const u=e._zod.def,h=[];for(const g of u.values)if(g===void 0){if(n.unrepresentable==="throw")throw new Error("Literal `undefined` cannot be represented in JSON Schema")}else if(typeof g=="bigint"){if(n.unrepresentable==="throw")throw new Error("BigInt literals cannot be represented in JSON Schema");h.push(Number(g))}else h.push(g);if(h.length!==0)if(h.length===1){const g=h[0];i.type=g===null?"null":typeof g,n.target==="draft-04"||n.target==="openapi-3.0"?i.enum=[g]:i.const=g}else h.every(g=>typeof g=="number")&&(i.type="number"),h.every(g=>typeof g=="string")&&(i.type="string"),h.every(g=>typeof g=="boolean")&&(i.type="boolean"),h.every(g=>g===null)&&(i.type="null"),i.enum=h},RT=(e,n,i,r)=>{if(n.unrepresentable==="throw")throw new Error("Custom types cannot be represented in JSON Schema")},ET=(e,n,i,r)=>{if(n.unrepresentable==="throw")throw new Error("Transforms cannot be represented in JSON Schema")},zT=(e,n,i,r)=>{const u=i,h=e._zod.def,{minimum:g,maximum:b}=e._zod.bag;typeof g=="number"&&(u.minItems=g),typeof b=="number"&&(u.maxItems=b),u.type="array",u.items=an(h.element,n,{...r,path:[...r.path,"items"]})},DT=(e,n,i,r)=>{const u=i,h=e._zod.def;u.type="object",u.properties={};const g=h.shape;for(const w in g)u.properties[w]=an(g[w],n,{...r,path:[...r.path,"properties",w]});const b=new Set(Object.keys(g)),v=new Set([...b].filter(w=>{const k=h.shape[w]._zod;return n.io==="input"?k.optin===void 0:k.optout===void 0}));v.size>0&&(u.required=Array.from(v)),h.catchall?._zod.def.type==="never"?u.additionalProperties=!1:h.catchall?h.catchall&&(u.additionalProperties=an(h.catchall,n,{...r,path:[...r.path,"additionalProperties"]})):n.io==="output"&&(u.additionalProperties=!1)},OT=(e,n,i,r)=>{const u=e._zod.def,h=u.inclusive===!1,g=u.options.map((b,v)=>an(b,n,{...r,path:[...r.path,h?"oneOf":"anyOf",v]}));h?i.oneOf=g:i.anyOf=g},IT=(e,n,i,r)=>{const u=e._zod.def,h=an(u.left,n,{...r,path:[...r.path,"allOf",0]}),g=an(u.right,n,{...r,path:[...r.path,"allOf",1]}),b=w=>"allOf"in w&&Object.keys(w).length===1,v=[...b(h)?h.allOf:[h],...b(g)?g.allOf:[g]];i.allOf=v},PT=(e,n,i,r)=>{const u=i,h=e._zod.def;u.type="object";const g=h.keyType,v=g._zod.bag?.patterns;if(h.mode==="loose"&&v&&v.size>0){const k=an(h.valueType,n,{...r,path:[...r.path,"patternProperties","*"]});u.patternProperties={};for(const j of v)u.patternProperties[j.source]=k}else(n.target==="draft-07"||n.target==="draft-2020-12")&&(u.propertyNames=an(h.keyType,n,{...r,path:[...r.path,"propertyNames"]})),u.additionalProperties=an(h.valueType,n,{...r,path:[...r.path,"additionalProperties"]});const w=g._zod.values;if(w){const k=[...w].filter(j=>typeof j=="string"||typeof j=="number");k.length>0&&(u.required=k)}},qT=(e,n,i,r)=>{const u=e._zod.def,h=an(u.innerType,n,r),g=n.seen.get(e);n.target==="openapi-3.0"?(g.ref=u.innerType,i.nullable=!0):i.anyOf=[h,{type:"null"}]},MT=(e,n,i,r)=>{const u=e._zod.def;an(u.innerType,n,r);const h=n.seen.get(e);h.ref=u.innerType},BT=(e,n,i,r)=>{const u=e._zod.def;an(u.innerType,n,r);const h=n.seen.get(e);h.ref=u.innerType,i.default=JSON.parse(JSON.stringify(u.defaultValue))},LT=(e,n,i,r)=>{const u=e._zod.def;an(u.innerType,n,r);const h=n.seen.get(e);h.ref=u.innerType,n.io==="input"&&(i._prefault=JSON.parse(JSON.stringify(u.defaultValue)))},VT=(e,n,i,r)=>{const u=e._zod.def;an(u.innerType,n,r);const h=n.seen.get(e);h.ref=u.innerType;let g;try{g=u.catchValue(void 0)}catch{throw new Error("Dynamic catch values are not supported in JSON Schema")}i.default=g},$T=(e,n,i,r)=>{const u=e._zod.def,h=n.io==="input"?u.in._zod.def.type==="transform"?u.out:u.in:u.out;an(h,n,r);const g=n.seen.get(e);g.ref=h},UT=(e,n,i,r)=>{const u=e._zod.def;an(u.innerType,n,r);const h=n.seen.get(e);h.ref=u.innerType,i.readOnly=!0},Ok=(e,n,i,r)=>{const u=e._zod.def;an(u.innerType,n,r);const h=n.seen.get(e);h.ref=u.innerType},GT=X("ZodISODateTime",(e,n)=>{$8.init(e,n),Ut.init(e,n)});function Ik(e){return F7(GT,e)}const KT=X("ZodISODate",(e,n)=>{U8.init(e,n),Ut.init(e,n)});function Pk(e){return Z7(KT,e)}const HT=X("ZodISOTime",(e,n)=>{G8.init(e,n),Ut.init(e,n)});function QT(e){return Y7(HT,e)}const FT=X("ZodISODuration",(e,n)=>{K8.init(e,n),Ut.init(e,n)});function ZT(e){return X7(FT,e)}const YT=(e,n)=>{pk.init(e,n),e.name="ZodError",Object.defineProperties(e,{format:{value:i=>O_(e,i)},flatten:{value:i=>D_(e,i)},addIssue:{value:i=>{e.issues.push(i),e.message=JSON.stringify(e.issues,Zh,2)}},addIssues:{value:i=>{e.issues.push(...i),e.message=JSON.stringify(e.issues,Zh,2)}},isEmpty:{get(){return e.issues.length===0}}})},Ca=X("ZodError",YT,{Parent:Error}),XT=$f(Ca),WT=Uf(Ca),JT=Sd(Ca),eR=jd(Ca),tR=q_(Ca),nR=M_(Ca),aR=B_(Ca),iR=L_(Ca),sR=V_(Ca),oR=$_(Ca),rR=U_(Ca),lR=G_(Ca),Mt=X("ZodType",(e,n)=>(Pt.init(e,n),Object.assign(e["~standard"],{jsonSchema:{input:ed(e,"input"),output:ed(e,"output")}}),e.toJSONSchema=xT(e,{}),e.def=n,e.type=n.type,Object.defineProperty(e,"_def",{value:n}),e.check=(...i)=>e.clone(vs(n,{checks:[...n.checks??[],...i.map(r=>typeof r=="function"?{_zod:{check:r,def:{check:"custom"},onattach:[]}}:r)]}),{parent:!0}),e.with=e.check,e.clone=(i,r)=>xs(e,i,r),e.brand=()=>e,e.register=((i,r)=>(i.add(e,r),e)),e.parse=(i,r)=>XT(e,i,r,{callee:e.parse}),e.safeParse=(i,r)=>JT(e,i,r),e.parseAsync=async(i,r)=>WT(e,i,r,{callee:e.parseAsync}),e.safeParseAsync=async(i,r)=>eR(e,i,r),e.spa=e.safeParseAsync,e.encode=(i,r)=>tR(e,i,r),e.decode=(i,r)=>nR(e,i,r),e.encodeAsync=async(i,r)=>aR(e,i,r),e.decodeAsync=async(i,r)=>iR(e,i,r),e.safeEncode=(i,r)=>sR(e,i,r),e.safeDecode=(i,r)=>oR(e,i,r),e.safeEncodeAsync=async(i,r)=>rR(e,i,r),e.safeDecodeAsync=async(i,r)=>lR(e,i,r),e.refine=(i,r)=>e.check(nE(i,r)),e.superRefine=i=>e.check(aE(i)),e.overwrite=i=>e.check(Nr(i)),e.optional=()=>xv(e),e.exactOptional=()=>UR(e),e.nullable=()=>wv(e),e.nullish=()=>xv(wv(e)),e.nonoptional=i=>ZR(e,i),e.array=()=>y(e),e.or=i=>Ze([e,i]),e.and=i=>MR(e,i),e.transform=i=>Wh(e,Lk(i)),e.default=i=>HR(e,i),e.prefault=i=>FR(e,i),e.catch=i=>XR(e,i),e.pipe=i=>Wh(e,i),e.readonly=()=>eE(e),e.describe=i=>{const r=e.clone();return Gl.add(r,{description:i}),r},Object.defineProperty(e,"description",{get(){return Gl.get(e)?.description},configurable:!0}),e.meta=(...i)=>{if(i.length===0)return Gl.get(e);const r=e.clone();return Gl.add(r,i[0]),r},e.isOptional=()=>e.safeParse(void 0).success,e.isNullable=()=>e.safeParse(null).success,e.apply=i=>i(e),e)),qk=X("_ZodString",(e,n)=>{Gf.init(e,n),Mt.init(e,n),e._zod.processJSONSchema=(r,u,h)=>kT(e,r,u);const i=e._zod.bag;e.format=i.format??null,e.minLength=i.minimum??null,e.maxLength=i.maximum??null,e.regex=(...r)=>e.check(sT(...r)),e.includes=(...r)=>e.check(lT(...r)),e.startsWith=(...r)=>e.check(cT(...r)),e.endsWith=(...r)=>e.check(uT(...r)),e.min=(...r)=>e.check(Ju(...r)),e.max=(...r)=>e.check(Tk(...r)),e.length=(...r)=>e.check(Rk(...r)),e.nonempty=(...r)=>e.check(Ju(1,...r)),e.lowercase=r=>e.check(oT(r)),e.uppercase=r=>e.check(rT(r)),e.trim=()=>e.check(mT()),e.normalize=(...r)=>e.check(dT(...r)),e.toLowerCase=()=>e.check(pT()),e.toUpperCase=()=>e.check(hT()),e.slugify=()=>e.check(fT())}),cR=X("ZodString",(e,n)=>{Gf.init(e,n),qk.init(e,n),e.email=i=>e.check(_7(uR,i)),e.url=i=>e.check(z7(mR,i)),e.jwt=i=>e.check(Q7(NR,i)),e.emoji=i=>e.check(D7(pR,i)),e.guid=i=>e.check(hv(bv,i)),e.uuid=i=>e.check(_k(Kl,i)),e.uuidv4=i=>e.check(T7(Kl,i)),e.uuidv6=i=>e.check(R7(Kl,i)),e.uuidv7=i=>e.check(E7(Kl,i)),e.nanoid=i=>e.check(O7(hR,i)),e.guid=i=>e.check(hv(bv,i)),e.cuid=i=>e.check(I7(fR,i)),e.cuid2=i=>e.check(P7(gR,i)),e.ulid=i=>e.check(q7(yR,i)),e.base64=i=>e.check(G7(jR,i)),e.base64url=i=>e.check(K7(AR,i)),e.xid=i=>e.check(M7(bR,i)),e.ksuid=i=>e.check(B7(vR,i)),e.ipv4=i=>e.check(L7(xR,i)),e.ipv6=i=>e.check(V7(wR,i)),e.cidrv4=i=>e.check($7(kR,i)),e.cidrv6=i=>e.check(U7(SR,i)),e.e164=i=>e.check(H7(CR,i)),e.datetime=i=>e.check(Ik(i)),e.date=i=>e.check(Pk(i)),e.time=i=>e.check(QT(i)),e.duration=i=>e.check(ZT(i))});function o(e){return N7(cR,e)}const Ut=X("ZodStringFormat",(e,n)=>{qt.init(e,n),qk.init(e,n)}),uR=X("ZodEmail",(e,n)=>{D8.init(e,n),Ut.init(e,n)}),bv=X("ZodGUID",(e,n)=>{E8.init(e,n),Ut.init(e,n)}),Kl=X("ZodUUID",(e,n)=>{z8.init(e,n),Ut.init(e,n)});function dR(e){return _k(Kl,e)}const mR=X("ZodURL",(e,n)=>{O8.init(e,n),Ut.init(e,n)}),pR=X("ZodEmoji",(e,n)=>{I8.init(e,n),Ut.init(e,n)}),hR=X("ZodNanoID",(e,n)=>{P8.init(e,n),Ut.init(e,n)}),fR=X("ZodCUID",(e,n)=>{q8.init(e,n),Ut.init(e,n)}),gR=X("ZodCUID2",(e,n)=>{M8.init(e,n),Ut.init(e,n)}),yR=X("ZodULID",(e,n)=>{B8.init(e,n),Ut.init(e,n)}),bR=X("ZodXID",(e,n)=>{L8.init(e,n),Ut.init(e,n)}),vR=X("ZodKSUID",(e,n)=>{V8.init(e,n),Ut.init(e,n)}),xR=X("ZodIPv4",(e,n)=>{H8.init(e,n),Ut.init(e,n)}),wR=X("ZodIPv6",(e,n)=>{Q8.init(e,n),Ut.init(e,n)}),kR=X("ZodCIDRv4",(e,n)=>{F8.init(e,n),Ut.init(e,n)}),SR=X("ZodCIDRv6",(e,n)=>{Z8.init(e,n),Ut.init(e,n)}),jR=X("ZodBase64",(e,n)=>{Y8.init(e,n),Ut.init(e,n)}),AR=X("ZodBase64URL",(e,n)=>{W8.init(e,n),Ut.init(e,n)}),CR=X("ZodE164",(e,n)=>{J8.init(e,n),Ut.init(e,n)}),NR=X("ZodJWT",(e,n)=>{t7.init(e,n),Ut.init(e,n)}),Kf=X("ZodNumber",(e,n)=>{Sk.init(e,n),Mt.init(e,n),e._zod.processJSONSchema=(r,u,h)=>ST(e,r,u),e.gt=(r,u)=>e.check(gv(r,u)),e.gte=(r,u)=>e.check(fh(r,u)),e.min=(r,u)=>e.check(fh(r,u)),e.lt=(r,u)=>e.check(fv(r,u)),e.lte=(r,u)=>e.check(hh(r,u)),e.max=(r,u)=>e.check(hh(r,u)),e.int=r=>e.check(vv(r)),e.safe=r=>e.check(vv(r)),e.positive=r=>e.check(gv(0,r)),e.nonnegative=r=>e.check(fh(0,r)),e.negative=r=>e.check(fv(0,r)),e.nonpositive=r=>e.check(hh(0,r)),e.multipleOf=(r,u)=>e.check(yv(r,u)),e.step=(r,u)=>e.check(yv(r,u)),e.finite=()=>e;const i=e._zod.bag;e.minValue=Math.max(i.minimum??Number.NEGATIVE_INFINITY,i.exclusiveMinimum??Number.NEGATIVE_INFINITY)??null,e.maxValue=Math.min(i.maximum??Number.POSITIVE_INFINITY,i.exclusiveMaximum??Number.POSITIVE_INFINITY)??null,e.isInt=(i.format??"").includes("int")||Number.isSafeInteger(i.multipleOf??.5),e.isFinite=!0,e.format=i.format??null});function d(e){return W7(Kf,e)}const _R=X("ZodNumberFormat",(e,n)=>{n7.init(e,n),Kf.init(e,n)});function vv(e){return eT(_R,e)}const TR=X("ZodBoolean",(e,n)=>{a7.init(e,n),Mt.init(e,n),e._zod.processJSONSchema=(i,r,u)=>jT(e,i,r)});function N(e){return tT(TR,e)}const RR=X("ZodNull",(e,n)=>{i7.init(e,n),Mt.init(e,n),e._zod.processJSONSchema=(i,r,u)=>AT(e,i,r)});function de(e){return nT(RR,e)}const ER=X("ZodUnknown",(e,n)=>{s7.init(e,n),Mt.init(e,n),e._zod.processJSONSchema=(i,r,u)=>NT()});function fn(){return aT(ER)}const zR=X("ZodNever",(e,n)=>{o7.init(e,n),Mt.init(e,n),e._zod.processJSONSchema=(i,r,u)=>CT(e,i,r)});function DR(e){return iT(zR,e)}const OR=X("ZodArray",(e,n)=>{r7.init(e,n),Mt.init(e,n),e._zod.processJSONSchema=(i,r,u)=>zT(e,i,r,u),e.element=n.element,e.min=(i,r)=>e.check(Ju(i,r)),e.nonempty=i=>e.check(Ju(1,i)),e.max=(i,r)=>e.check(Tk(i,r)),e.length=(i,r)=>e.check(Rk(i,r)),e.unwrap=()=>e.element});function y(e,n){return gT(OR,e,n)}const Mk=X("ZodObject",(e,n)=>{c7.init(e,n),Mt.init(e,n),e._zod.processJSONSchema=(i,r,u)=>DT(e,i,r,u),vt(e,"shape",()=>n.shape),e.keyof=()=>A(Object.keys(e._zod.def.shape)),e.catchall=i=>e.clone({...e._zod.def,catchall:i}),e.passthrough=()=>e.clone({...e._zod.def,catchall:fn()}),e.loose=()=>e.clone({...e._zod.def,catchall:fn()}),e.strict=()=>e.clone({...e._zod.def,catchall:DR()}),e.strip=()=>e.clone({...e._zod.def,catchall:void 0}),e.extend=i=>__(e,i),e.safeExtend=i=>T_(e,i),e.merge=i=>R_(e,i),e.pick=i=>C_(e,i),e.omit=i=>N_(e,i),e.partial=(...i)=>E_(Vk,e,i[0]),e.required=(...i)=>z_($k,e,i[0])});function m(e,n){const i={type:"object",shape:e??{},...Te(n)};return new Mk(i)}function IR(e,n){return new Mk({type:"object",shape:e,catchall:fn(),...Te(n)})}const Bk=X("ZodUnion",(e,n)=>{Ck.init(e,n),Mt.init(e,n),e._zod.processJSONSchema=(i,r,u)=>OT(e,i,r,u),e.options=n.options});function Ze(e,n){return new Bk({type:"union",options:e,...Te(n)})}const PR=X("ZodDiscriminatedUnion",(e,n)=>{Bk.init(e,n),u7.init(e,n)});function qe(e,n,i){return new PR({type:"union",options:n,discriminator:e,...Te(i)})}const qR=X("ZodIntersection",(e,n)=>{d7.init(e,n),Mt.init(e,n),e._zod.processJSONSchema=(i,r,u)=>IT(e,i,r,u)});function MR(e,n){return new qR({type:"intersection",left:e,right:n})}const BR=X("ZodRecord",(e,n)=>{m7.init(e,n),Mt.init(e,n),e._zod.processJSONSchema=(i,r,u)=>PT(e,i,r,u),e.keyType=n.keyType,e.valueType=n.valueType});function Ue(e,n,i){return new BR({type:"record",keyType:e,valueType:n,...Te(i)})}const Xh=X("ZodEnum",(e,n)=>{p7.init(e,n),Mt.init(e,n),e._zod.processJSONSchema=(r,u,h)=>_T(e,r,u),e.enum=n.entries,e.options=Object.values(n.entries);const i=new Set(Object.keys(n.entries));e.extract=(r,u)=>{const h={};for(const g of r)if(i.has(g))h[g]=n.entries[g];else throw new Error(`Key ${g} not found in enum`);return new Xh({...n,checks:[],...Te(u),entries:h})},e.exclude=(r,u)=>{const h={...n.entries};for(const g of r)if(i.has(g))delete h[g];else throw new Error(`Key ${g} not found in enum`);return new Xh({...n,checks:[],...Te(u),entries:h})}});function A(e,n){const i=Array.isArray(e)?Object.fromEntries(e.map(r=>[r,r])):e;return new Xh({type:"enum",entries:i,...Te(n)})}const LR=X("ZodLiteral",(e,n)=>{h7.init(e,n),Mt.init(e,n),e._zod.processJSONSchema=(i,r,u)=>TT(e,i,r),e.values=new Set(n.values),Object.defineProperty(e,"value",{get(){if(n.values.length>1)throw new Error("This schema contains multiple valid literal values. Use `.values` instead.");return n.values[0]}})});function z(e,n){return new LR({type:"literal",values:Array.isArray(e)?e:[e],...Te(n)})}const VR=X("ZodTransform",(e,n)=>{f7.init(e,n),Mt.init(e,n),e._zod.processJSONSchema=(i,r,u)=>ET(e,i),e._zod.parse=(i,r)=>{if(r.direction==="backward")throw new rk(e.constructor.name);i.addIssue=h=>{if(typeof h=="string")i.issues.push(Jl(h,i.value,n));else{const g=h;g.fatal&&(g.continue=!1),g.code??(g.code="custom"),g.input??(g.input=i.value),g.inst??(g.inst=e),i.issues.push(Jl(g))}};const u=n.transform(i.value,i);return u instanceof Promise?u.then(h=>(i.value=h,i)):(i.value=u,i)}});function Lk(e){return new VR({type:"transform",transform:e})}const Vk=X("ZodOptional",(e,n)=>{Nk.init(e,n),Mt.init(e,n),e._zod.processJSONSchema=(i,r,u)=>Ok(e,i,r,u),e.unwrap=()=>e._zod.def.innerType});function xv(e){return new Vk({type:"optional",innerType:e})}const $R=X("ZodExactOptional",(e,n)=>{g7.init(e,n),Mt.init(e,n),e._zod.processJSONSchema=(i,r,u)=>Ok(e,i,r,u),e.unwrap=()=>e._zod.def.innerType});function UR(e){return new $R({type:"optional",innerType:e})}const GR=X("ZodNullable",(e,n)=>{y7.init(e,n),Mt.init(e,n),e._zod.processJSONSchema=(i,r,u)=>qT(e,i,r,u),e.unwrap=()=>e._zod.def.innerType});function wv(e){return new GR({type:"nullable",innerType:e})}const KR=X("ZodDefault",(e,n)=>{b7.init(e,n),Mt.init(e,n),e._zod.processJSONSchema=(i,r,u)=>BT(e,i,r,u),e.unwrap=()=>e._zod.def.innerType,e.removeDefault=e.unwrap});function HR(e,n){return new KR({type:"default",innerType:e,get defaultValue(){return typeof n=="function"?n():dk(n)}})}const QR=X("ZodPrefault",(e,n)=>{v7.init(e,n),Mt.init(e,n),e._zod.processJSONSchema=(i,r,u)=>LT(e,i,r,u),e.unwrap=()=>e._zod.def.innerType});function FR(e,n){return new QR({type:"prefault",innerType:e,get defaultValue(){return typeof n=="function"?n():dk(n)}})}const $k=X("ZodNonOptional",(e,n)=>{x7.init(e,n),Mt.init(e,n),e._zod.processJSONSchema=(i,r,u)=>MT(e,i,r,u),e.unwrap=()=>e._zod.def.innerType});function ZR(e,n){return new $k({type:"nonoptional",innerType:e,...Te(n)})}const YR=X("ZodCatch",(e,n)=>{w7.init(e,n),Mt.init(e,n),e._zod.processJSONSchema=(i,r,u)=>VT(e,i,r,u),e.unwrap=()=>e._zod.def.innerType,e.removeCatch=e.unwrap});function XR(e,n){return new YR({type:"catch",innerType:e,catchValue:typeof n=="function"?n:()=>n})}const WR=X("ZodPipe",(e,n)=>{k7.init(e,n),Mt.init(e,n),e._zod.processJSONSchema=(i,r,u)=>$T(e,i,r,u),e.in=n.in,e.out=n.out});function Wh(e,n){return new WR({type:"pipe",in:e,out:n})}const JR=X("ZodReadonly",(e,n)=>{S7.init(e,n),Mt.init(e,n),e._zod.processJSONSchema=(i,r,u)=>UT(e,i,r,u),e.unwrap=()=>e._zod.def.innerType});function eE(e){return new JR({type:"readonly",innerType:e})}const tE=X("ZodCustom",(e,n)=>{j7.init(e,n),Mt.init(e,n),e._zod.processJSONSchema=(i,r,u)=>RT(e,i)});function nE(e,n={}){return yT(tE,e,n)}function aE(e){return bT(e)}function Hf(e,n){return Wh(Lk(e),n)}const ve={custom:"custom"};function ec(e){return J7(Kf,e)}const Uk=m({id:o(),name:o(),keyPrefix:o(),scopes:y(o()),projectId:o().nullable(),projectName:o().nullable(),readOnly:N(),operator:N().optional(),createdAt:o(),lastUsedAt:o().nullable(),revokedAt:o().nullable()});m({keys:y(Uk)});m({name:o().min(1).max(100),scopes:y(o()).min(1).optional(),projectId:o().optional()});Uk.extend({key:o()});const iE=m({maxConcurrency:d().int().positive(),maxRequestsPerMinute:d().int().positive(),maxRequestsPerDay:d().int().positive()}),gt=o().min(1),Qf=Ue(o(),o().trim().min(1));o().min(1);const cn=m({label:o().min(1),city:o().min(1),region:o().min(1),country:o().length(2),timezone:o().optional()}),Ff=A(["answer-visibility","traffic-sync","gbp-sync","data-refresh","backlinks-sync","site-audit","ads-sync","doctor"]);Ff.enum;const Zf=m({everyDays:d().int().min(1).max(3650),startDate:o().date(),time:o().regex(/^([01]\d|2[0-3]):[0-5]\d$/,"Time must be HH:mm")}).strict();m({id:o(),projectId:o(),kind:Ff,cronExpr:o(),recurrence:Zf.nullable().optional(),preset:o().nullable().optional(),timezone:o().default("UTC"),enabled:N().default(!0),providers:y(gt).default([]),sourceId:o().nullable().optional(),lastRunAt:o().nullable().optional(),nextRunAt:o().nullable().optional(),createdAt:o(),updatedAt:o()});const sE=o().datetime();m({kind:Ff.optional(),preset:o().min(1).optional(),cron:o().min(1).optional(),recurrence:Zf.optional(),timezone:o().optional().default("UTC"),enabled:N().optional().default(!0),providers:y(gt).optional().default([]),sourceId:o().optional(),expectedUpdatedAt:sE.nullable().optional()}).refine(e=>[e.preset,e.cron,e.recurrence].filter(n=>n!==void 0).length===1,{message:'Exactly one of "preset", "cron", or "recurrence" must be provided'});const Yf=A(["citation.lost","citation.gained","run.completed","run.failed","insight.critical","insight.high","health.degraded","health.recovered"]);m({id:o(),projectId:o(),channel:z("webhook"),url:o().url(),urlDisplay:o(),urlHost:o(),events:y(Yf),enabled:N().default(!0),source:o().optional(),webhookSecret:o().optional(),createdAt:o(),updatedAt:o()});m({channel:z("webhook"),url:o().url(),events:y(Yf).min(1),source:o().optional()});class oE extends Error{code;statusCode;details;constructor(n,i,r,u){super(i),this.name="AppError",this.code=n,this.statusCode=r,this.details=u}toJSON(){return{error:{code:this.code,message:this.message,...this.details?{details:this.details}:{}}}}}function kv(e,n){return new oE("VALIDATION_ERROR",e,400,n)}function lr(e){if(e instanceof Error)return e.message;if(typeof e=="string")return e;if(e==null)return"unknown error";try{const n=JSON.stringify(e);if(n!==void 0)return n}catch{}try{return String(e)}catch{return"unknown error"}}function gh(e,n=!1){const i=new Set,r=[];for(const u of e){const h=n?u.toLowerCase():u;i.has(h)||(i.add(h),r.push(u))}return r}function Sv(e){try{const n=e.includes("://"),i=new URL(n?e:`https://${e}`);if(!n&&(i.pathname!=="/"||i.search||i.hash)||i.username||i.password||i.port)return null;const r=i.hostname.trim().toLowerCase().replace(/^www\./,"");return!r||r.includes("/")||r.includes("?")||r.includes("#")?null:r}catch{return null}}const rE=o().trim().min(1).refine(e=>Sv(e)!==null,{message:"Marketing hosts must be valid hostnames without credentials or ports"}).overwrite(e=>Sv(e)??e),lE=o().trim().min(1),cE=o().trim().regex(/^[a-z]\w{0,39}$/i,{message:"GA4 event names must start with a letter and contain only letters, numbers, or underscores"}),Xf=m({marketingHosts:y(rE).overwrite(e=>gh(e,!0)),brandTerms:y(lE).overwrite(e=>gh(e,!0)),leadEventNames:y(cE).overwrite(e=>gh(e))});function uE(){return{marketingHosts:[],brandTerms:[],leadEventNames:["generate_lead"]}}const yh=Object.freeze({marketingHosts:Object.freeze([]),brandTerms:Object.freeze([]),leadEventNames:Object.freeze(["generate_lead"])}),Gk=()=>uE(),jv=A(["never-synced","ready","error"]),dE=A(["landing-page","channel"]),mE=A(["30d","60d","90d"]),pE=A(["marketing","all"]),Hl=Pk(),oc=m({label:A(["earliest","middle","previous","latest"]),startDate:Hl,endDate:Hl}),bh=oc.extend({sessions:d().int().nonnegative()}),Av=oc.extend({eventCount:d().int().nonnegative()}),Cv=oc.extend({clicks:d().int().nonnegative(),impressions:d().int().nonnegative()}),hE=oc.extend({propertyClicks:d().int().nonnegative(),propertyImpressions:d().int().nonnegative(),reportedQueryClicks:d().int().nonnegative(),reportedQueryImpressions:d().int().nonnegative(),brandedClicks:d().int().nonnegative(),brandedImpressions:d().int().nonnegative(),nonBrandedClicks:d().int().nonnegative(),nonBrandedImpressions:d().int().nonnegative(),unreportedClicks:d().int().nonnegative(),unreportedImpressions:d().int().nonnegative()}),fE=oc.extend({sessions:d().int().nonnegative(),engagementRate:d().min(0).max(1).nullable(),dailyTotalUsers:d().int().nonnegative().nullable(),dailyNewUsers:d().int().nonnegative().nullable(),metricsAvailable:N(),daysInPeriod:d().int().nonnegative(),daysWithEngagementRate:d().int().nonnegative(),daysWithUserSplit:d().int().nonnegative()}),gE=m({window:mE,bucketDays:z(30),filters:m({hostScope:pE,marketingHosts:y(o()),pathPrefix:o().nullable(),brandTerms:y(o()),queryMixScope:z("property")}),acquisition:m({status:jv,error:o().nullable(),syncedAt:o().datetime().nullable(),periods:y(bh),channels:y(m({channelGroup:o(),periods:y(bh)})),pages:y(m({hostName:o(),landingPage:o(),periods:y(bh)}))}),leads:m({status:jv,error:o().nullable(),syncedAt:o().datetime().nullable(),attributionScope:dE.nullable(),hostAndPathFiltersApplied:N(),periods:y(Av),channels:y(m({channelGroup:o(),periods:y(Av)}))}),engagement:m({status:A(["ready","unavailable"]),availableFromDate:Hl.nullable(),latestDate:Hl.nullable(),periods:y(fE)}),searchDemand:m({status:A(["ready","unavailable"]),periods:y(hE),queries:y(m({query:o(),classification:A(["branded","non-branded"]),periods:y(Cv)})),pages:y(m({hostName:o(),landingPage:o(),periods:y(Cv)})),latestDate:Hl.nullable()})}),yE=/[\0-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,bE=/[\0-\x1F\x7F-\x9F]/,vE=/[!-#%-\*,-\/:;\?@\[-\]_\{\}\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061D-\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B4E\u1B4F\u1B5A-\u1B60\u1B7D-\u1B7F\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52-\u2E5D\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]|\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD803[\uDD6E\uDEAD\uDED0\uDF55-\uDF59\uDF86-\uDF89]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9\uDFD4\uDFD5\uDFD7\uDFD8]|\uD805[\uDC4B-\uDC4F\uDC5A\uDC5B\uDC5D\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDE60-\uDE6C\uDEB9\uDF3C-\uDF3E]|\uD806[\uDC3B\uDD44-\uDD46\uDDE2\uDE3F-\uDE46\uDE9A-\uDE9C\uDE9E-\uDEA2\uDF00-\uDF09\uDFE1]|\uD807[\uDC41-\uDC45\uDC70\uDC71\uDEF7\uDEF8\uDF43-\uDF4F\uDFFF]|\uD809[\uDC70-\uDC74]|\uD80B[\uDFF1\uDFF2]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD81B[\uDD6D-\uDD6F\uDE97-\uDE9A\uDFE2]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]|\uD839\uDDFF|\uD83A[\uDD5E\uDD5F]/,xE=/[ \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]/;var wE=class{src_Any=yE.source;src_Cc=bE.source;src_Z=xE.source;src_P=vE.source;src_ZPCc=[this.src_Z,this.src_P,this.src_Cc].join("|");src_ZCc=[this.src_Z,this.src_Cc].join("|");cache={};opts={maxLength:1e4,urlAuth:!1,schema_names:[]};constructor(e={}){this.opts={...this.opts,...e}}set(e={}){return this.opts={...this.opts,...e},this.cache={},this}escapeRE(e){return e.replace(/[.?*+^$[\]\\(){}|-]/g,"\\$&")}nestedPairRE(e,n,i=4){const r=this.escapeRE(e),u=this.escapeRE(n),h=`(?:(?!${this.src_ZCc}|${r}|${u}).)`;let g=`${r}${h}{0,1000}${u}`;for(let b=2;b<=i;b++)g=`${r}(?:${h}|${g}){0,1000}${u}`;return g}get_text_separators(){return this.cache.text_separators??=/[><\uff5c]/}get_pseudo_letter(){return this.cache.src_pseudo_letter??=new RegExp(`(?:(?!${this.get_text_separators().source}|${this.src_ZPCc})${this.src_Any})`)}get_ipv4_addr(){return this.cache.src_ip4??=new RegExp("(?:(?:25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])[.]){3}(?:25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])")}get_ipv6_addr(){const e="[0-9A-Fa-f]{1,4}",n=`(?:(?:${e}:${e})|${this.get_ipv4_addr().source})`;return this.cache.src_ip6_addr??=new RegExp(`(?:(?:${e}:){6}${n}|::(?:${e}:){5}${n}|(?:${e})?::(?:${e}:){4}${n}|(?:(?:${e}:){0,1}${e})?::(?:${e}:){3}${n}|(?:(?:${e}:){0,2}${e})?::(?:${e}:){2}${n}|(?:(?:${e}:){0,3}${e})?::${e}:${n}|(?:(?:${e}:){0,4}${e})?::${n}|(?:(?:${e}:){0,5}${e})?::${e}|(?:(?:${e}:){0,6}${e})?::)`)}get_ipv6_url_host(){return this.cache.src_ip6_host??=new RegExp(`\\[${this.get_ipv6_addr().source}\\]`)}get_ipv6_mail_host(){return this.cache.src_ipv6_mail_host??=new RegExp(`\\[IPv6:${this.get_ipv6_addr().source}\\]`)}get_auth(){return this.cache.src_auth??=new RegExp(`(?:(?:(?!${this.src_ZCc}|[@/\\[\\]()]).){1,50}@)?`)}get_port(){return this.cache.src_port??=new RegExp("(?::(?:6(?:[0-4]\\d{3}|5(?:[0-4]\\d{2}|5(?:[0-2]\\d|3[0-5])))|[1-5]?\\d{1,4}))?")}get_host_terminator(){return this.cache.src_host_terminator??=new RegExp(`(?=$|${this.get_text_separators().source}|${this.src_ZPCc})(?!${this.opts["---"]?"-(?!--)|":"-|"}_|:\\d|\\.-|\\.(?!$|${this.src_ZPCc}))`)}get_path_terminator(){return this.cache.src_path_terminator??=new RegExp(`${this.src_ZPCc}|${this.get_text_separators().source}`)}get_path(){return this.cache.src_path??=new RegExp(`(?:[/?#](?:${this.nestedPairRE("[","]")}|${this.nestedPairRE("(",")")}|${this.nestedPairRE("{","}")}|\\"(?:(?!${this.src_ZCc}|["]).){1,100}\\"|\\'(?:(?!${this.src_ZCc}|[']).){1,100}\\'|\\'(?=${this.get_pseudo_letter().source}|[-])|\\.{2,20}[:]?[a-zA-Z0-9%/&]|\\.(?!${this.src_ZCc}|[.]|$)|`+(this.opts["---"]?"\\-(?!--(?:[^-]|$))(?:-{0,19})|":"\\-{1,20}|")+`,(?!${this.src_ZCc}|$)|;(?!${this.src_ZCc}|$)|\\!{1,20}(?!${this.src_ZCc}|[!]|$)|\\?(?!${this.src_ZCc}|[?]|$)|`+this.get_path_extra().source+`[\\\\/:%@#&=_~*]|(?!${this.get_path_terminator().source}).){1,${this.opts.maxLength}}|\\/)?`)}get_mail_name(){return this.cache.src_mail_name??=new RegExp("[-!#$%&'*+/=?^_`{|}~a-zA-Z0-9](?:[-!#$%&'*+/=?^_`{|}~a-zA-Z0-9]|[.](?=[-!#$%&'*+/=?^_`{|}~a-zA-Z0-9])){0,63}")}get_xn(){return this.cache.src_xn??=new RegExp("xn--[a-z0-9\\-]{1,59}")}get_tld(){if(this.cache.tld)return this.cache.tld;const e=[...new Set(this.opts.tlds||[])].sort().reverse().join("|");return this.cache.tld=new RegExp(`${e||"$#none#$"}|${this.get_xn().source}`),this.cache.tld}get_domain_root(){return this.cache.src_domain_root??=new RegExp("(?:"+this.get_xn().source+`|${this.get_pseudo_letter().source}{1,63})`)}get_domain(){return this.cache.src_domain??=new RegExp("(?:"+this.get_xn().source+`|(?:${this.get_pseudo_letter().source})|(?:${this.get_pseudo_letter().source}(?:-|${this.get_pseudo_letter().source}){0,61}${this.get_pseudo_letter().source}))`)}get_url_host_port(){return this.cache.url_host_port??=new RegExp("(?:"+this.get_ipv6_url_host().source+`|(?:(?:(?:${this.get_domain().source})\\.){0,10}${this.get_domain().source}))`+this.get_port().source+this.get_host_terminator().source)}get_fuzzy_url_host_port(){return this.cache.fuzzy_url_host_port??=new RegExp("(?:"+(this.opts.fuzzyIP?this.get_ipv4_addr().source+"|":"")+`(?:(?:(?:${this.get_domain().source})\\.){1,10}(?:${this.get_tld().source})))`+this.get_host_terminator().source)}get_mail_host(){return this.cache.src_mail_host??=new RegExp("(?:"+this.get_ipv6_mail_host().source+`|(?:(?:(?:${this.get_domain().source})\\.){0,4}${this.get_domain().source}))`+this.get_host_terminator().source)}get_fuzzy_mail_host(){return this.cache.src_fuzzy_mail_host??=new RegExp("(?:"+this.get_ipv6_mail_host().source+`|(?:(?:(?:${this.get_domain().source})[.]){1,4}${this.get_domain_root().source}))`+this.get_host_terminator().source)}get_path_extra(){return this.cache.src_path_extra??=new RegExp("")}get_fuzzy_mail_host_search(){return this.cache.mail_fuzzy_host_search??=new RegExp(`@${this.get_fuzzy_mail_host().source}`,"ig")}get_fuzzy_link_search(){return this.cache.link_fuzzy_search??=new RegExp(`(^|(?![.:/\\-_@])(?:[$+<=>^\`||]|${this.src_ZPCc}))(?:(?![$+<=>^\`||])${this.get_fuzzy_url_host_port().source}${this.get_path().source})`,"ig")}get_http_validator(){return this.cache.http_validator??=new RegExp("\\/\\/"+(this.opts.urlAuth?this.get_auth().source:"")+this.get_url_host_port().source+this.get_path().source,"iy")}get_relative_proto_validator(){return this.cache.relative_proto_validator??=new RegExp((this.opts.urlAuth?this.get_auth().source:"")+`(?:localhost|${this.get_ipv6_url_host().source}|(?:(?:${this.get_domain().source})[.]){1,10}${this.get_domain_root().source})`+this.get_port().source+this.get_host_terminator().source+this.get_path().source,"iy")}get_mail_name_validator(){return this.cache.mail_name_validator??=new RegExp(`(?:^|${this.get_text_separators().source}|"|\\(|${this.src_ZCc})(${this.get_mail_name().source})$`)}get_mailto_validator(){return this.cache.mailto_validator??=new RegExp(`${this.get_mail_name().source}@${this.get_mail_host().source}`,"iy")}get_schema_names(){return this.cache.schema_names??=new RegExp((this.opts.schema_names||[]).map(e=>this.escapeRE(e)).join("|"))}get_schema_search(){return this.cache.schema_search??=new RegExp(`(^|(?!_)(?:[><|]|${this.src_ZPCc}))(${this.get_schema_names().source})`,"ig")}get_schema_at_start(){return this.cache.schema_at_start??=new RegExp(`^${this.get_schema_search().source}`,"i")}},vh={validate:(e,n,i)=>{const r=i.re.get_http_validator();r.lastIndex=n;const u=r.exec(e);return u?u[0].length:0},normalize:(e,n)=>n.normalize(e)},kE={"http:":vh,"https:":vh,"ftp:":vh,"//":{validate:function(e,n,i){const r=i.re.get_relative_proto_validator();r.lastIndex=n;const u=r.exec(e);return u?n>=3&&e[n-3]===":"||n>=3&&e[n-3]==="/"?0:u[0].length:0},normalize:(e,n)=>n.normalize(e)},"mailto:":{validate:function(e,n,i){const r=i.re.get_mailto_validator();r.lastIndex=n;const u=r.exec(e);return u?u[0].length:0},normalize:(e,n)=>n.normalize(e)}},SE="a:cdefgilmnoqrstuwxz|b:abdefghijmnorstvwyz|c:acdfghiklmnoruvwxyz|d:ejkmoz|e:cegrstu|f:ijkmor|g:abdefghilmnpqrstuwy|h:kmnrtu|i:delmnoqrst|j:emop|k:eghimnprwyz|l:abcikrstuvy|m:acdeghklmnopqrstuvwxyz|n:acefgilopruz|o:m|p:aefghklmnrstwy|q:a|r:eosuw|s:abcdeghijklmnortuvxyz|t:cdfghjklmnortvwz|u:agksyz|v:aceginu|w:fs|y:et|z:amw",jE="biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф";function AE(){const e=jE.split("|");return SE.split("|").forEach(n=>{const i=n.indexOf(":"),r=n.slice(0,i);for(const u of n.slice(i+1))e.push(r+u)}),e}var CE={fuzzyLink:!1,fuzzyEmail:!0,fuzzyIP:!1,"---":!1,tlds:AE(),urlAuth:!1,maxLength:1e4},Nv=class{schema;index;lastIndex;raw;text;url;constructor(e,n,i,r){const u=e.slice(i,r);this.schema=n.toLowerCase(),this.index=i,this.lastIndex=r,this.raw=u,this.text=u,this.url=u}},NE=class{__opts__;__schemas__;re;constructor(e={}){const{rebuilder:n,...i}=e;this.__opts__={...CE,...i},this.__schemas__={...kE},this.re=n||new wE,this.re.set({...this.__opts__,schema_names:Object.keys(this.__schemas__)})}add(e,n=null){if(!n)delete this.__schemas__[e];else{const i={normalize:(r,u)=>u.normalize(r),...n};this.__schemas__[e]=i}return this.re.set({...this.__opts__,schema_names:Object.keys(this.__schemas__)}),this}set(e={}){return this.__opts__={...this.__opts__,...e},this.re.set({...this.__opts__,schema_names:Object.keys(this.__schemas__)}),this}test(e){if(!e.length)return!1;let n,i;for(i=this.re.get_schema_search(),i.lastIndex=0;(n=i.exec(e))!==null;)if(this.testSchemaAt(e,n[2],i.lastIndex))return!0;if(this.__opts__.fuzzyLink&&this.__schemas__["http:"]&&(i=this.re.get_fuzzy_link_search(),i.lastIndex=0,i.exec(e)!==null))return!0;if(this.__opts__.fuzzyEmail&&this.__schemas__["mailto:"]&&e.indexOf("@")>=0){const r=this.re.get_fuzzy_mail_host_search(),u=this.re.get_mail_name_validator();for(r.lastIndex=0;(n=r.exec(e))!==null;){const h=e.slice(Math.max(0,n.index-65),n.index);if(u.test(h))return!0}}return!1}testSchemaAt(e,n,i){return this.__schemas__[n.toLowerCase()]?this.__schemas__[n.toLowerCase()].validate(e.slice(0,i+this.__opts__.maxLength),i,this):0}match(e){const n=[],i=this.re.get_schema_search();let r,u,h,g,b,v,w=!1,k=!1,j=!1,T=0;if(!e.length)return null;for(i.lastIndex=0,this.__opts__.fuzzyLink&&this.__schemas__["http:"]&&(r=this.re.get_fuzzy_link_search(),r.lastIndex=0),this.__opts__.fuzzyEmail&&this.__schemas__["mailto:"]&&(u=this.re.get_fuzzy_mail_host_search(),u.lastIndex=0,h=this.re.get_mail_name_validator());;){const _=Math.max(T-1,0);if(u&&h&&!j&&(!b||b.index<T))for(u.lastIndex<_&&(u.lastIndex=_);;){const ae=u.exec(e);if(!ae){j=!0,b=void 0;break}const L=h.exec(e.slice(Math.max(0,ae.index-65),ae.index));if(L){if(b={schema:"mailto:",index:ae.index-L[1].length,lastIndex:ae.index+ae[0].length},b.index>=T)break;u.lastIndex<_&&(u.lastIndex=_)}}if(r&&!k&&(!g||g.index<T))for(r.lastIndex<_&&(r.lastIndex=_);;){const ae=r.exec(e);if(!ae){k=!0,g=void 0;break}if(g={schema:"",index:ae.index+ae[1].length,lastIndex:ae.index+ae[0].length},g.index>=T)break;r.lastIndex<_&&(r.lastIndex=_)}let G=b;(!G||g&&(g.index<G.index||g.index===G.index&&g.lastIndex>G.lastIndex))&&(G=g);let R;if(!w)for(;;){if(!v){i.lastIndex<_&&(i.lastIndex=_);const W=i.exec(e);if(!W){w=!0;break}v={schema:W[2],index:W.index+W[1].length,lastIndex:W.index+W[0].length}}if(v.index<T){v=void 0;continue}if(G&&v.index>G.index)break;const ae=v;v=void 0;const L=this.testSchemaAt(e,ae.schema,ae.lastIndex);if(L){R={schema:ae.schema,index:ae.index,lastIndex:ae.lastIndex+L};break}}let q=R;if((!q||b&&(b.index<q.index||b.index===q.index&&b.lastIndex>q.lastIndex))&&(q=b),(!q||g&&(g.index<q.index||g.index===q.index&&g.lastIndex>q.lastIndex))&&(q=g),!q)break;q===b?b=void 0:q===g&&(g=void 0);const F=new Nv(e,q.schema,q.index,q.lastIndex);F.schema?this.__schemas__[F.schema].normalize(F,this):this.normalize(F),n.push(F),T=q.lastIndex}return n.length?n:null}matchAtStart(e){if(!e.length)return null;const n=this.re.get_schema_at_start().exec(e);if(!n)return null;const i=this.testSchemaAt(e,n[2],n[0].length);if(!i)return null;const r=new Nv(e,n[2],n.index+n[1].length,n.index+n[0].length+i);return this.__schemas__[r.schema].normalize(r,this),r}tlds(e,n=!1){return e=Array.isArray(e)?e:[e],n?this.__opts__.tlds=this.__opts__.tlds.concat(e):this.__opts__.tlds=e,this.re.set({...this.__opts__,schema_names:Object.keys(this.__schemas__)}),this}normalize(e){e.schema||(e.url=`http://${e.url}`),e.schema==="mailto:"&&!/^mailto:/i.test(e.url)&&(e.url=`mailto:${e.url}`)}};const _E=JSON.parse('["aaa","aarp","abb","abbott","abbvie","abc","able","abogado","abudhabi","ac","academy","accenture","accountant","accountants","aco","actor","ad","ads","adult","ae","aeg","aero","aetna","af","afl","africa","ag","agakhan","agency","ai","aig","airbus","airforce","airtel","akdn","al","alibaba","alipay","allfinanz","allstate","ally","alsace","alstom","am","amazon","americanexpress","americanfamily","amex","amfam","amica","amsterdam","analytics","android","anquan","anz","ao","aol","apartments","app","apple","aq","aquarelle","ar","arab","aramco","archi","army","arpa","art","arte","as","asda","asia","associates","at","athleta","attorney","au","auction","audi","audible","audio","auspost","author","auto","autos","aw","aws","ax","axa","az","azure","ba","baby","baidu","banamex","band","bank","bar","barcelona","barclaycard","barclays","barefoot","bargains","baseball","basketball","bauhaus","bayern","bb","bbc","bbt","bbva","bcg","bcn","bd","be","beats","beauty","beer","berlin","best","bestbuy","bet","bf","bg","bh","bharti","bi","bible","bid","bike","bing","bingo","bio","biz","bj","black","blackfriday","blockbuster","blog","bloomberg","blue","bm","bms","bmw","bn","bnpparibas","bo","boats","boehringer","bofa","bom","bond","boo","book","booking","bosch","bostik","boston","bot","boutique","box","br","bradesco","bridgestone","broadway","broker","brother","brussels","bs","bt","build","builders","business","buy","buzz","bv","bw","by","bz","bzh","ca","cab","cafe","cal","call","calvinklein","cam","camera","camp","canon","capetown","capital","capitalone","car","caravan","cards","care","career","careers","cars","casa","case","cash","casino","cat","catering","catholic","cba","cbn","cbre","cc","cd","center","ceo","cern","cf","cfa","cfd","cg","ch","chanel","channel","charity","chase","chat","cheap","chintai","christmas","chrome","church","ci","cipriani","circle","cisco","citadel","citi","citic","city","ck","cl","claims","cleaning","click","clinic","clinique","clothing","cloud","club","clubmed","cm","cn","co","coach","codes","coffee","college","cologne","com","commbank","community","company","compare","computer","comsec","condos","construction","consulting","contact","contractors","cooking","cool","coop","corsica","country","coupon","coupons","courses","cpa","cr","credit","creditcard","creditunion","cricket","crown","crs","cruise","cruises","cu","cuisinella","cv","cw","cx","cy","cymru","cyou","cz","dad","dance","data","date","dating","datsun","day","dclk","dds","de","deal","dealer","deals","degree","delivery","dell","deloitte","delta","democrat","dental","dentist","desi","design","dev","dhl","diamonds","diet","digital","direct","directory","discount","discover","dish","diy","dj","dk","dm","dnp","do","docs","doctor","dog","domains","dot","download","drive","dtv","dubai","dupont","durban","dvag","dvr","dz","earth","eat","ec","eco","edeka","edu","education","ee","eg","email","emerck","energy","engineer","engineering","enterprises","epson","equipment","er","ericsson","erni","es","esq","estate","et","eu","eurovision","eus","events","exchange","expert","exposed","express","extraspace","fage","fail","fairwinds","faith","family","fan","fans","farm","farmers","fashion","fast","fedex","feedback","ferrari","ferrero","fi","fidelity","fido","film","final","finance","financial","fire","firestone","firmdale","fish","fishing","fit","fitness","fj","fk","flickr","flights","flir","florist","flowers","fly","fm","fo","foo","food","football","ford","forex","forsale","forum","foundation","fox","fr","free","fresenius","frl","frogans","frontier","ftr","fujitsu","fun","fund","furniture","futbol","fyi","ga","gal","gallery","gallo","gallup","game","games","gap","garden","gay","gb","gbiz","gd","gdn","ge","gea","gent","genting","george","gf","gg","ggee","gh","gi","gift","gifts","gives","giving","gl","glass","gle","global","globo","gm","gmail","gmbh","gmo","gmx","gn","godaddy","gold","goldpoint","golf","goo","goodyear","goog","google","gop","got","gov","gp","gq","gr","grainger","graphics","gratis","green","gripe","grocery","group","gs","gt","gu","gucci","guge","guide","guitars","guru","gw","gy","hair","hamburg","hangout","haus","hbo","hdfc","hdfcbank","health","healthcare","help","helsinki","here","hermes","hiphop","hisamitsu","hitachi","hiv","hk","hkt","hm","hn","hockey","holdings","holiday","homedepot","homegoods","homes","homesense","honda","horse","hospital","host","hosting","hot","hotels","hotmail","house","how","hr","hsbc","ht","hu","hughes","hyatt","hyundai","ibm","icbc","ice","icu","id","ie","ieee","ifm","ikano","il","im","imamat","imdb","immo","immobilien","in","inc","industries","infiniti","info","ing","ink","institute","insurance","insure","int","international","intuit","investments","io","ipiranga","iq","ir","irish","is","ismaili","ist","istanbul","it","itau","itv","jaguar","java","jcb","je","jeep","jetzt","jewelry","jio","jll","jm","jmp","jnj","jo","jobs","joburg","jot","joy","jp","jpmorgan","jprs","juegos","juniper","kaufen","kddi","ke","kerryhotels","kerryproperties","kfh","kg","kh","ki","kia","kids","kim","kindle","kitchen","kiwi","km","kn","koeln","komatsu","kosher","kp","kpmg","kpn","kr","krd","kred","kuokgroup","kw","ky","kyoto","kz","la","lacaixa","lamborghini","lamer","land","landrover","lanxess","lasalle","lat","latino","latrobe","law","lawyer","lb","lc","lds","lease","leclerc","lefrak","legal","lego","lexus","lgbt","li","lidl","life","lifeinsurance","lifestyle","lighting","like","lilly","limited","limo","lincoln","link","live","living","lk","llc","llp","loan","loans","locker","locus","lol","london","lotte","lotto","love","lpl","lplfinancial","lr","ls","lt","ltd","ltda","lu","lundbeck","luxe","luxury","lv","ly","ma","madrid","maif","maison","makeup","man","management","mango","map","market","marketing","markets","marriott","marshalls","mattel","mba","mc","mckinsey","md","me","med","media","meet","melbourne","meme","memorial","men","menu","merckmsd","mg","mh","miami","microsoft","mil","mini","mint","mit","mitsubishi","mk","ml","mlb","mls","mm","mma","mn","mo","mobi","mobile","moda","moe","moi","mom","monash","money","monster","mormon","mortgage","moscow","moto","motorcycles","mov","movie","mp","mq","mr","ms","msd","mt","mtn","mtr","mu","museum","music","mv","mw","mx","my","mz","na","nab","nagoya","name","navy","nba","nc","ne","nec","net","netbank","netflix","network","neustar","new","news","next","nextdirect","nexus","nf","nfl","ng","ngo","nhk","ni","nico","nike","nikon","ninja","nissan","nissay","nl","no","nokia","norton","now","nowruz","nowtv","np","nr","nra","nrw","ntt","nu","nyc","nz","obi","observer","office","okinawa","olayan","olayangroup","ollo","om","omega","one","ong","onl","online","ooo","open","oracle","orange","org","organic","origins","osaka","otsuka","ott","ovh","pa","page","panasonic","paris","pars","partners","parts","party","pay","pccw","pe","pet","pf","pfizer","pg","ph","pharmacy","phd","philips","phone","photo","photography","photos","physio","pics","pictet","pictures","pid","pin","ping","pink","pioneer","pizza","pk","pl","place","play","playstation","plumbing","plus","pm","pn","pnc","pohl","poker","politie","porn","post","pr","praxi","press","prime","pro","prod","productions","prof","progressive","promo","properties","property","protection","pru","prudential","ps","pt","pub","pw","pwc","py","qa","qpon","quebec","quest","racing","radio","re","read","realestate","realtor","realty","recipes","red","redumbrella","rehab","reise","reisen","reit","reliance","ren","rent","rentals","repair","report","republican","rest","restaurant","review","reviews","rexroth","rich","richardli","ricoh","ril","rio","rip","ro","rocks","rodeo","rogers","room","rs","rsvp","ru","rugby","ruhr","run","rw","rwe","ryukyu","sa","saarland","safe","safety","sakura","sale","salon","samsclub","samsung","sandvik","sandvikcoromant","sanofi","sap","sarl","sas","save","saxo","sb","sbi","sbs","sc","scb","schaeffler","schmidt","scholarships","school","schule","schwarz","science","scot","sd","se","search","seat","secure","security","seek","select","sener","services","seven","sew","sex","sexy","sfr","sg","sh","shangrila","sharp","shell","shia","shiksha","shoes","shop","shopping","shouji","show","si","silk","sina","singles","site","sj","sk","ski","skin","sky","skype","sl","sling","sm","smart","smile","sn","sncf","so","soccer","social","softbank","software","sohu","solar","solutions","song","sony","soy","spa","space","sport","spot","sr","srl","ss","st","stada","staples","star","statebank","statefarm","stc","stcgroup","stockholm","storage","store","stream","studio","study","style","su","sucks","supplies","supply","support","surf","surgery","suzuki","sv","swatch","swiss","sx","sy","sydney","systems","sz","tab","taipei","talk","taobao","target","tatamotors","tatar","tattoo","tax","taxi","tc","tci","td","tdk","team","tech","technology","tel","temasek","tennis","teva","tf","tg","th","thd","theater","theatre","tiaa","tickets","tienda","tips","tires","tirol","tj","tjmaxx","tjx","tk","tkmaxx","tl","tm","tmall","tn","to","today","tokyo","tools","top","toray","toshiba","total","tours","town","toyota","toys","tr","trade","trading","training","travel","travelers","travelersinsurance","trust","trv","tt","tube","tui","tunes","tushu","tv","tvs","tw","tz","ua","ubank","ubs","ug","uk","unicom","university","uno","uol","ups","us","uy","uz","va","vacations","vana","vanguard","vc","ve","vegas","ventures","verisign","vermögensberater","vermögensberatung","versicherung","vet","vg","vi","viajes","video","vig","viking","villas","vin","vip","virgin","visa","vision","viva","vivo","vlaanderen","vn","vodka","volvo","vote","voting","voto","voyage","vu","wales","walmart","walter","wang","wanggou","watch","watches","weather","weatherchannel","webcam","weber","website","wed","wedding","weibo","weir","wf","whoswho","wien","wiki","williamhill","win","windows","wine","winners","wme","wolterskluwer","woodside","work","works","world","wow","ws","wtc","wtf","xbox","xerox","xihuan","xin","xxx","xyz","yachts","yahoo","yamaxun","yandex","ye","yodobashi","yoga","yokohama","you","youtube","yt","yun","za","zappos","zara","zero","zip","zm","zone","zuerich","zw","ελ","ευ","бг","бел","дети","ею","католик","ком","мкд","мон","москва","онлайн","орг","рус","рф","сайт","срб","укр","қаз","հայ","ישראל","קום","ابوظبي","ارامكو","الاردن","البحرين","الجزائر","السعودية","العليان","المغرب","امارات","ایران","بارت","بازار","بيتك","بھارت","تونس","سودان","سورية","شبكة","عراق","عرب","عمان","فلسطين","قطر","كاثوليك","كوم","مصر","مليسيا","موريتانيا","موقع","همراه","پاکستان","ڀارت","कॉम","नेट","भारत","भारतम्","भारोत","संगठन","বাংলা","ভারত","ভাৰত","ਭਾਰਤ","ભારત","ଭାରତ","இந்தியா","இலங்கை","சிங்கப்பூர்","భారత్","ಭಾರತ","ഭാരതം","ලංකා","คอม","ไทย","ລາວ","გე","みんな","アマゾン","クラウド","グーグル","コム","ストア","セール","ファッション","ポイント","世界","中信","中国","中國","中文网","亚马逊","企业","佛山","信息","健康","八卦","公司","公益","台湾","台灣","商城","商店","商标","嘉里","嘉里大酒店","在线","大拿","天主教","娱乐","家電","广东","微博","慈善","我爱你","手机","招聘","政务","政府","新加坡","新闻","时尚","書籍","机构","淡马锡","游戏","澳門","点看","移动","组织机构","网址","网店","网站","网络","联通","谷歌","购物","通販","集团","電訊盈科","飞利浦","食品","餐厅","香格里拉","香港","닷넷","닷컴","삼성","한국"]');function TE(e,n){return e.endsWith(n)?e.length===n.length||e[e.length-n.length-1]===".":!1}function RE(e,n){const i=e.length-n.length-2,r=e.lastIndexOf(".",i);return r===-1?e:e.slice(r+1)}function EE(e,n,i){if(i.validHosts!==null){const u=i.validHosts;for(const h of u)if(TE(n,h))return h}let r=0;if(n.startsWith("."))for(;r<n.length&&n[r]===".";)r+=1;return e.length===n.length-r?null:RE(n,e)}function zE(e,n){return e.slice(0,-n.length-1)}const xh=/[\t\n\r]/g;let Jh=!1;function _v(e){return e>=97&&e<=122||e>=48&&e<=57||e>127||e>=65&&e<=90||e===45||e===95}function Tv(e,n,i){const r=i-n,u=e.charCodeAt(n)|32;if(r===2)return u===119&&(e.charCodeAt(n+1)|32)===115?1:0;if(r===3){const h=e.charCodeAt(n+1)|32,g=e.charCodeAt(n+2)|32;return u===119&&h===115&&g===115||u===102&&h===116&&g===112?1:0}else if(r===4){const h=e.charCodeAt(n+1)|32,g=e.charCodeAt(n+2)|32,b=e.charCodeAt(n+3)|32;return u===104&&h===116&&g===116&&b===112?1:u===102&&h===105&&g===108&&b===101?2:0}else if(r===5)return u===104&&(e.charCodeAt(n+1)|32)===116&&(e.charCodeAt(n+2)|32)===116&&(e.charCodeAt(n+3)|32)===112&&(e.charCodeAt(n+4)|32)===115?1:0;return 0}function Ql(e,n,i=!1){let r=0,u=e.length,h=!1,g=!1;if(Jh=!1,!n){if(e.startsWith("data:"))return null;for(;r<e.length&&e.charCodeAt(r)<=32;)r+=1;for(;u>r+1&&e.charCodeAt(u-1)<=32;)u-=1;if(e.charCodeAt(r)===47&&e.charCodeAt(r+1)===47)r+=2;else{const q=e.indexOf(":/",r);if(q!==-1){const F=Tv(e,r,q);if(F===1)for(g=!0,r=q+2;e.charCodeAt(r)===47||e.charCodeAt(r)===92;)r+=1;else if(F===2){g=!0,r=q+1;let ae=0;for(;(e.charCodeAt(r)===47||e.charCodeAt(r)===92)&&ae<2;)r+=1,ae+=1;if(ae<2)return null}else{for(let ae=r;ae<q;ae+=1){const L=e.charCodeAt(ae)|32;if(!(L>=97&&L<=122||L>=48&&L<=57||L===46||L===45||L===43)){const W=e.charCodeAt(ae);return W===9||W===10||W===13?Ql(e.replace(xh,""),n,i):null}}if(e.charCodeAt(q+2)===47)r=q+3;else return null}}else if(e.charCodeAt(r)!==91){let F=-1;for(let ae=r;ae<u;ae+=1){const L=e.charCodeAt(ae);if(L===9||L===10||L===13)return Ql(e.replace(xh,""),n,i);if(L===58){F=ae;break}if(L===47||L===92||L===63||L===35)break}if(F!==-1){let ae=!1;for(let L=F+1;L<u;L+=1){const W=e.charCodeAt(L);if(W===47||W===92||W===63||W===35)break;if(W===64){ae=!0;break}}if(!ae){let L=!0,W=F+1;for(;W<u;W+=1){const J=e.charCodeAt(W);if(J===47||J===92||J===63||J===35)break;if(J<48||J>57){L=!1;break}}if(W===F+1&&(L=!1),!L){const J=Tv(e,r,F);if(J===0){let se=!1;for(let V=F+1;V<u;V+=1){const H=e.charCodeAt(V);if(H===47||H===92||H===63||H===35)break;if(H===58){se=!0;break}}if(!se)return null}else if(g=!0,r=F+1,J===2){let se=0;for(;(e.charCodeAt(r)===47||e.charCodeAt(r)===92)&&se<2;)r+=1,se+=1;if(se<2)return null}else for(;e.charCodeAt(r)===47||e.charCodeAt(r)===92;)r+=1}}}}}let v=-1,w=-1,k=-1,j=-1,T=!1,_=i,G=r-1,R=-1;if(i&&r<u){const q=e.charCodeAt(r);(!(_v(q)||q===46||q===95)||q===45)&&(_=!1)}for(let q=r;q<u;q+=1){const F=e.charCodeAt(q);if(F<64)if(F===47||F===35||F===63){u=q;break}else F===58?(j===-1&&(j=q),k=q):F===9||F===10||F===13?T=!0:i&&(F===46?((q-G>64||R===46||R===45)&&(_=!1),G=q):(F<48||F>57)&&(F!==45||R===46)&&(_=!1));else if(g&&F===92){u=q;break}else F===64?(v=q,j=-1):F===93?w=q:F>=65&&F<=90?h=!0:i&&!_v(F)&&(_=!1);i&&(R=F)}if(T)return Ql(e.replace(xh,""),n,i);if(v!==-1&&v>=r&&v<u&&(r=v+1),e.charCodeAt(r)===91)return w!==-1?e.slice(r+1,w).toLowerCase():null;if(k!==-1&&k>r&&k<u&&j===k&&(u=k),r>=u)return null;i&&_&&v===-1&&k===-1&&w===-1&&e.charCodeAt(u-1)!==46&&u-r<=255&&u-G-1<=63&&R!==45&&(Jh=!0)}for(;u>r+1&&e.charCodeAt(u-1)===46;)u-=1;const b=r!==0||u!==e.length?e.slice(r,u):e;return h?b.toLowerCase():b}function DE(e){if(e.length<7||e.length>15)return!1;let n=0;for(let i=0;i<e.length;i+=1){const r=e.charCodeAt(i);if(r===46)n+=1;else if(r<48||r>57)return!1}return n===3&&e.charCodeAt(0)!==46&&e.charCodeAt(e.length-1)!==46}function OE(e){if(e.length<3)return!1;let n=e.startsWith("[")?1:0,i=e.length;if(e[i-1]==="]"&&(i-=1),i-n>39)return!1;let r=!1;for(;n<i;n+=1){const u=e.charCodeAt(n);if(u===58)r=!0;else if(!(u>=48&&u<=57||u>=97&&u<=102||u>=65&&u<=70))return!1}return r}function IE(e){return OE(e)||DE(e)}const PE=["test","localhost","invalid","example","example.com","example.net","example.org","local","onion","alt","home.arpa","ipv4only.arpa","resolver.arpa","service.arpa","6tisch.arpa","eap.arpa"];function qE(e){for(const n of PE)if(e.endsWith(n)&&(e.length===n.length||e.charCodeAt(e.length-n.length-1)===46))return!0;return!1}function Rv(e){return e>=97&&e<=122||e>=48&&e<=57||e>127}function Ev(e){if(e.length>255||e.length===0||!Rv(e.charCodeAt(0))&&e.charCodeAt(0)!==46&&e.charCodeAt(0)!==95)return!1;let n=-1,i=-1;const r=e.length;for(let u=0;u<r;u+=1){const h=e.charCodeAt(u);if(h===46){if(u-n>64||i===46||i===45)return!1;n=u}else if(!(Rv(h)||h===45||h===95)||h===45&&i===46)return!1;i=h}return r-n-1<=63&&i!==45}function Kk({allowIcannDomains:e=!0,allowPrivateDomains:n=!1,detectIp:i=!0,detectSpecialUse:r=!1,extractHostname:u=!0,mixedInputs:h=!0,validHosts:g=null,validateHostname:b=!0}){return{allowIcannDomains:e,allowPrivateDomains:n,detectIp:i,detectSpecialUse:r,extractHostname:u,mixedInputs:h,validHosts:g,validateHostname:b}}const ME=Kk({});function BE(e){return e===void 0?ME:Kk(e)}function LE(e,n){return n.length===e.length?"":e.slice(0,-n.length-1)}function VE(){return{domain:null,domainWithoutSuffix:null,hostname:null,isIcann:null,isIp:null,isPrivate:null,isSpecialUse:null,publicSuffix:null,subdomain:null}}function Hk(e){e.domain=null,e.domainWithoutSuffix=null,e.hostname=null,e.isIcann=null,e.isIp=null,e.isPrivate=null,e.isSpecialUse=null,e.publicSuffix=null,e.subdomain=null}function Qk(e,n,i,r,u){const h=BE(r);if(typeof e!="string")return u;let g=!1;return h.extractHostname?h.mixedInputs?(g=Ev(e),u.hostname=Ql(e,g,h.validateHostname)):u.hostname=Ql(e,!1,h.validateHostname):u.hostname=e,h.detectIp&&u.hostname!==null&&(u.isIp=IE(u.hostname),u.isIp)?u:h.validateHostname&&h.extractHostname&&u.hostname!==null&&!(g&&u.hostname===e)&&!Jh&&!Ev(u.hostname)?(u.hostname=null,u):(n===0||u.hostname===null||(n===5&&h.detectSpecialUse&&(u.isSpecialUse=qE(u.hostname)),i(u.hostname,h,u),n===2||u.publicSuffix===null)||(u.domain=EE(u.publicSuffix,u.hostname,h),n===3||u.domain===null)||(u.subdomain=LE(u.hostname,u.domain),n===4)||(u.domainWithoutSuffix=zE(u.domain,u.publicSuffix)),u)}function $E(e,n,i){if(!n.allowPrivateDomains&&e.length>3){const r=e.length-1,u=e.charCodeAt(r),h=e.charCodeAt(r-1),g=e.charCodeAt(r-2),b=e.charCodeAt(r-3);if(u===109&&h===111&&g===99&&b===46)return i.isIcann=!0,i.isPrivate=!1,i.publicSuffix="com",!0;if(u===103&&h===114&&g===111&&b===46)return i.isIcann=!0,i.isPrivate=!1,i.publicSuffix="org",!0;if(u===117&&h===100&&g===101&&b===46)return i.isIcann=!0,i.isPrivate=!1,i.publicSuffix="edu",!0;if(u===118&&h===111&&g===103&&b===46)return i.isIcann=!0,i.isPrivate=!1,i.publicSuffix="gov",!0;if(u===116&&h===101&&g===110&&b===46)return i.isIcann=!0,i.isPrivate=!1,i.publicSuffix="net",!0;if(u===101&&h===100&&g===46)return i.isIcann=!0,i.isPrivate=!1,i.publicSuffix="de",!0}return!1}const io=new Uint8Array([1,2,1,1,1,1,1,1,1,1,1,1,0,2,2,2,0,2,2,0,2,0,0,1,0,0,2,1,1,1,1,1,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,0,1,0,1,1,0,1,1,0,0,0,0,0,0,1,1,1,0,2,0,0,0,0,0,0,0,2,0,2,2,0,0,2,2,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,2,1,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,2,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,2,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,2,2,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,0,1,0,2,2,0,0,0,2,0,1,1,0,2,0,2,2,0,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,0,0,0,0,1,0,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,2,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,2,2,0,2,2,0,0,0,0,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,2,0,2,2,2,2,0,0,0,0,2,0,0,0,0,0,0,2,2,0,0,0,2,2,1,1,1,1,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,2,2,0,0,2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,2,2,1,2,1,1,1,2,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,2,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,0,0,0,0,0]),td=new Uint16Array([0,0,0,10,11,18,106,111,117,124,130,136,145,146,147,148,149,150,151,153,154,155,157,159,226,239,241,242,243,258,265,266,269,270,271,274,276,295,296,298,307,312,313,331,332,335,337,338,340,374,375,377,380,381,385,387,391,394,426,429,442,443,451,452,454,464,478,479,480,489,490,527,532,548,568,574,615,616,643,670,671,819,825,828,829,830,835,840,849,871,872,873,874,875,876,877,895,897,898,901,903,904,906,908,923,938,943,944,946,947,948,949,950,952,955,960,961,962,964,965,968,971,972,973,986,988,1e3,1011,1019,1021,1061,1064,1068,1069,1071,1074,1085,1087,1097,1099,1105,1107,1108,1110,1113,1114,1115,1167,1169,1171,1191,1192,1193,1194,1196,1207,1238,1249,1261,1270,1277,1282,1295,1306,1319,1320,1331,1365,1366,1367,1382,1397,1469,1470,1472,1473,1507,1508,1509,1512,1516,1518,1547,1548,1556,1557,1558,1560,1562,1563,1565,1566,1567,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,1591,1592,1594,1595,1596,1598,2053,2056,2057,2059,2066,2073,2083,2087,2098,2099,2100,2112,2113,2115,2117,2118,2125,2126,2128,2129,2131,2132,2133,2134,2135,2209,2211,2232,2233,2234,2236,2262,2263,2314,2315,2317,2324,2330,2340,2350,2403,2404,2405,2415,2429,2430,2433,2440,2441,2449,2450,2451,2452,2453,2464,2465,2466,2468,2469,2470,2471,2473,2483,2495,2501,2533,2537,2539,2540,2542,2543,2554,2555,2557,2565,2572,2578,2583,2584,2590,2593,2599,2606,2607,2614,2622,2623,2624,2662,2668,2683,2684,2689,2707,2738,2756,2758,2761,2769,2771,2778,2830,2854,2855,2856,2857,2858,2859,2860,2861,2868,2869,2870,2871,2872,2873,2875,2876,2880,2964,2977,2978,3414,3418,3432,3484,3512,3534,3592,3614,3629,3692,3743,3781,3817,3842,3984,4030,4081,4100,4134,4149,4169,4199,4230,4253,4284,4314,4346,4373,4448,4470,4508,4518,4552,4571,4597,4639,4689,4715,4784,4785,4787,4810,4833,4869,4900,4917,4974,4987,5011,5040,5042,5076,5092,5120,5425,5434,5443,5450,5467,5471,5477,5516,5518,5525,5532,5541,5548,5549,5560,5563,5578,5579,5588,5589,5598,5607,5613,5615,5616,5617,5653,5654,5656,5664,5671,5684,5688,5690,5691,5697,5704,5718,5728,5733,5741,5749,5755,5756,5760,5762,5763,5775,5776,5777,5778,5780,5781,5784,5786,5789,5793,5794,5800,5801,5802,5804,5806,5808,5809,5810,5813,5815,5818,5819,5821,6019,6026,6027,6037,6042,6059,6073,6082,6083,6084,6088,6089,6091,6093,6099,6100,6103,6104,6106,6107,6108,7008,7009,7013,7031,7040,7043,7050,7051,7053,7054,7055,7057,7109,7110,7113,7114,7231,7232,7243,7254,7261,7264,7273,7274,7275,7290,7345,7536,7538,7539,7541,7546,7559,7574,7581,7590,7593,7596,7603,7611,7615,7616,7617,7631,7635,7644,7645,7646,7650,7685,7686,7703,7710,7718,7719,7724,7732,7776,7777,7783,7786,7797,7802,7803,7806,7839,7840,7846,7853,7854,7863,7872,7887,7891,7943,7944,7949,7951,7954,7956,7957,7958,7967,7981,7989,8003,8015,8016,8018,8020,8042,8053,8059,8060,8072,8084,8171,8183,8185,8194,8197,8203,8228,8231,8232,8233,8235,8238,8241,8252,8254,8256,8284,8358,8365,8369,8370,8379,8401,8402,8407,8408,8487,8489,8491,8500,8504,8510,8516,8522,8532,8537,8538,8556,8567,8572,8577,8587,8593,8597,8603,8609,10217,10218,10219,10226,10228]),nd=new Uint8Array([3,3,3,3,3,3,3,3,5,8,8,2,2,3,3,3,3,3,8,5,5,5,5,5,3,3,5,5,9,12,19,8,19,8,11,9,9,8,7,7,6,8,9,16,10,7,7,11,8,6,6,9,7,11,7,14,4,4,4,4,4,4,10,7,6,6,6,6,10,10,6,10,10,22,11,9,10,10,10,9,10,8,7,7,7,8,21,13,11,11,9,10,9,13,10,8,8,9,12,9,7,10,7,7,13,7,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,8,6,3,3,3,3,3,3,2,5,3,3,3,7,2,2,2,2,2,2,3,3,3,1,1,7,8,5,2,2,7,2,2,1,4,1,11,9,9,5,5,8,5,5,5,5,5,5,5,3,3,3,3,3,5,11,9,9,13,7,14,7,6,6,6,7,6,6,6,6,6,10,7,11,9,4,4,4,4,4,4,6,6,6,6,6,8,7,10,9,9,9,8,9,8,10,6,9,9,8,10,10,7,8,1,9,10,12,12,12,10,9,9,10,10,9,9,1,1,5,3,3,3,3,3,3,3,3,3,3,3,3,6,6,6,4,3,3,3,7,4,4,4,3,3,6,7,3,4,1,2,2,2,6,1,2,2,2,2,2,12,5,3,8,9,13,4,4,13,9,9,11,7,3,12,9,2,2,2,3,3,3,3,3,8,2,2,3,3,3,3,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,4,4,3,7,10,15,7,15,15,20,15,9,10,10,12,14,14,14,12,12,12,12,12,14,14,10,10,10,10,14,9,9,9,10,14,14,14,13,13,9,9,9,9,9,9,7,8,6,8,8,6,8,13,8,8,6,13,8,11,13,8,6,13,8,6,9,10,10,12,14,14,14,12,12,12,12,14,14,10,10,10,10,9,9,9,10,14,14,11,13,13,9,9,9,9,9,9,2,6,9,2,2,3,3,3,3,3,3,3,3,3,4,4,4,2,3,3,3,3,3,3,7,7,2,3,2,2,5,3,3,3,3,3,3,4,2,2,2,2,2,2,3,3,3,3,3,3,3,4,5,7,2,2,12,8,10,8,10,7,18,4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,2,2,3,3,3,5,5,3,8,8,6,8,6,6,4,6,7,7,7,10,11,2,5,5,3,3,3,3,3,3,5,5,6,11,10,7,7,7,4,4,4,2,3,3,3,3,3,2,7,5,5,3,3,3,3,3,3,3,3,7,7,7,11,7,6,9,6,6,8,10,8,6,8,13,4,4,4,4,4,10,8,11,8,8,8,10,10,7,10,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,5,5,5,5,5,5,5,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,7,10,13,7,8,7,11,8,8,6,9,8,8,6,6,6,8,8,6,6,6,6,6,9,7,6,4,4,4,4,4,4,4,6,6,6,9,7,8,10,8,8,2,3,3,3,3,3,2,8,9,9,2,2,2,3,3,3,2,3,3,3,9,2,2,3,3,3,3,3,3,5,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,12,5,5,3,5,4,2,3,2,4,3,9,2,2,2,2,2,5,5,3,8,8,13,6,10,9,4,7,9,11,2,3,7,3,3,4,1,3,4,2,9,3,3,12,5,3,7,10,10,7,4,4,6,14,7,9,7,13,2,2,2,2,2,2,3,3,3,3,3,8,15,4,4,2,3,3,3,7,4,9,9,2,3,3,3,5,3,2,2,7,2,7,6,6,7,2,4,2,2,2,2,2,2,8,8,8,9,5,2,3,3,3,3,3,3,10,7,4,4,4,4,3,4,2,3,3,3,3,3,10,7,4,4,4,4,2,3,3,3,3,10,7,4,4,4,4,3,9,6,6,6,9,13,9,2,2,2,8,7,9,5,3,3,3,5,5,12,9,10,7,8,7,6,8,6,11,12,7,9,10,4,4,7,8,11,6,7,9,8,7,10,8,9,15,7,8,5,4,7,2,3,3,3,2,14,10,2,14,10,2,14,3,9,13,13,10,14,16,17,11,2,14,2,14,3,9,13,10,14,16,17,11,14,10,14,2,7,3,10,7,14,10,2,14,10,9,9,17,6,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,10,10,10,12,9,4,10,11,8,8,8,7,9,5,3,3,3,3,3,3,3,3,5,8,4,4,4,4,4,4,6,16,3,3,14,3,14,2,14,9,13,10,10,14,16,17,11,6,9,10,10,12,14,14,14,12,12,12,12,14,14,10,10,10,10,14,9,9,9,10,14,14,14,9,9,9,9,9,9,2,14,9,13,10,10,14,16,17,11,6,2,14,9,17,13,10,10,14,16,17,11,6,2,14,9,13,10,14,16,17,11,2,14,9,13,10,16,11,2,14,10,19,7,2,14,9,13,10,19,10,7,14,16,17,11,6,2,14,9,13,10,19,7,14,16,17,11,2,14,9,13,17,13,10,10,14,16,17,11,6,3,2,14,9,13,10,10,14,16,17,11,6,9,10,12,14,14,14,12,12,12,12,12,14,14,14,10,10,10,14,9,9,9,9,14,14,14,13,13,14,9,9,9,9,9,9,4,11,2,14,9,13,17,13,10,19,10,7,14,16,17,11,6,2,14,9,13,17,13,10,19,10,7,14,16,17,11,6,2,9,10,10,7,17,3,3,12,12,16,15,15,12,14,14,14,20,20,13,12,12,12,12,12,12,20,25,14,14,12,12,10,10,10,10,9,9,9,25,4,9,17,10,7,14,16,21,13,13,14,20,14,13,17,24,9,12,13,25,13,21,20,17,9,9,9,9,9,9,12,17,4,4,9,9,9,10,10,12,14,14,14,12,12,12,12,12,14,14,10,10,10,10,14,9,9,9,10,14,14,14,13,13,9,9,9,9,9,9,1,8,7,11,11,1,3,3,3,4,8,9,10,14,14,12,12,12,12,14,14,10,10,10,10,14,9,9,9,10,14,14,14,13,13,9,9,9,9,9,7,4,4,4,4,4,4,4,4,4,4,9,12,6,14,4,12,7,2,2,1,2,7,6,4,4,4,6,8,8,7,4,5,6,3,3,3,3,4,16,8,3,5,4,3,3,3,5,2,2,8,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,11,12,7,7,13,9,10,12,8,9,7,8,5,12,10,13,14,5,5,5,13,5,5,5,3,3,3,5,16,5,5,5,5,5,7,12,14,8,12,8,10,12,9,11,7,9,7,10,7,13,9,7,12,8,17,7,7,16,10,13,13,8,10,10,14,17,7,16,16,15,8,10,10,12,17,7,17,14,7,10,17,8,7,7,7,8,15,15,7,14,10,10,10,11,11,7,7,13,8,10,7,16,7,8,7,14,17,12,10,11,21,8,9,7,13,9,8,13,6,12,7,6,13,10,10,10,8,18,9,17,13,10,12,6,13,6,11,8,13,10,13,18,13,11,13,8,16,7,10,8,16,12,10,8,8,6,14,11,8,15,8,8,7,7,12,7,8,9,14,15,8,9,10,9,15,7,8,8,12,13,9,10,15,15,13,7,10,10,20,7,6,9,6,6,14,11,14,11,12,9,10,16,16,12,7,11,28,8,11,10,7,21,8,7,9,4,4,4,17,7,8,6,9,6,6,13,6,6,6,6,18,20,14,8,11,12,9,10,13,15,19,8,9,12,7,10,16,12,9,9,9,14,12,11,9,12,11,18,9,9,9,10,7,7,16,8,9,7,13,12,10,18,7,8,11,7,7,8,8,13,7,7,7,11,15,13,11,7,8,15,11,7,8,18,14,13,18,15,10,12,12,9,7,11,11,8,7,10,8,14,12,10,18,7,10,9,7,8,13,10,14,9,10,8,8,23,7,7,11,12,12,17,7,7,11,11,17,16,16,7,8,11,14,14,8,10,7,7,16,16,13,9,11,9,15,15,11,11,7,7,14,7,9,7,7,16,10,13,10,11,14,7,11,10,11,7,11,10,11,15,11,15,10,12,17,10,14,13,11,11,12,13,10,7,13,10,16,12,21,9,10,10,7,11,14,17,7,7,8,11,12,8,15,14,14,8,17,12,10,10,7,9,11,7,10,7,11,18,7,11,7,12,11,8,8,14,12,7,8,15,3,7,7,5,2,9,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,5,3,3,3,3,3,3,4,4,3,3,3,3,3,3,5,11,6,4,7,10,7,7,11,1,10,2,2,3,3,3,3,3,3,3,3,5,7,3,5,6,3,3,5,2,2,5,3,4,13,11,3,3,6,3,5,14,2,2,3,8,2,2,12,5,18,5,3,3,3,16,5,5,5,10,7,13,12,13,9,12,14,19,9,9,21,9,9,10,6,9,6,15,10,6,12,8,6,10,15,4,4,6,6,9,9,12,16,14,23,7,7,7,14,9,7,7,11,14,10,7,10,10,10,12,6,11,10,13,11,15,11,7,12,10,3,7,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,4,3,7,2,5,5,3,3,5,5,5,5,7,6,6,6,4,4,4,4,4,4,6,6,6,6,6,7,10,2,2,2,5,5,5,5,3,3,3,3,3,5,5,10,9,11,8,7,12,8,9,7,6,13,11,6,13,7,9,9,4,4,4,4,4,4,6,10,7,8,13,8,8,9,14,8,10,7,7,7,9,6,9,7,2,12,5,3,3,13,4,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,4,5,5,5,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,8,4,4,4,4,4,4,4,4,4,4,4,4,9,3,3,3,3,3,3,3,3,3,3,4,2,2,2,5,3,3,3,3,3,3,3,3,4,4,1,7,6,4,12,3,3,3,3,3,8,7,3,3,3,3,3,3,4,4,11,14,2,8,3,5,5,8,10,8,6,4,7,17,7,4,5,2,6,3,5,2,4,4,2,12,5,5,3,15,13,10,8,11,2,2,3,3,3,3,3,3,3,3,4,4,5,3,3,3,3,4,18,2,12,5,3,3,3,3,3,5,16,8,8,9,6,6,4,4,4,4,31,6,6,10,11,21,10,9,7,10,7,7,2,4,4,4,4,6,5,3,3,4,3,3,3,3,3,3,3,3,3,6,6,6,2,2,2,5,3,3,3,7,7,4,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,8,2,3,3,3,3,3,5,9,11,3,3,3,3,4,4,3,3,3,3,3,5,10,9,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,11,10,10,10,10,10,11,10,11,10,11,10,9,9,11,3,3,3,3,3,3,5,3,7,8,8,7,6,6,11,4,4,4,7,8,9,9,2,3,7,4,4,2,5,5,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,2,2,5,5,5,5,5,3,3,5,5,5,7,7,6,6,6,4,4,4,4,4,4,4,4,4,4,6,6,8,8,1,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,6,9,12,3,7,10,7,2,2,3,3,3,3,3,4,3,3,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,5,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,5,5,8,8,6,6,8,6,7,4,4,4,4,4,4,6,7,5,5,20,19,8,10,9,7,10,6,8,11,6,6,6,6,13,12,8,6,7,14,11,9,2,5,3,3,6,2,3,2,2,2,2,2,2,2,5,4,3,7,6,4,7,4,3,6,4,7,2,7,7,7,5,5,5,5,3,3,3,3,3,3,3,3,3,3,5,9,10,10,8,11,7,8,20,7,8,9,8,12,6,6,6,8,9,8,12,6,6,8,13,10,12,6,6,7,7,8,9,6,4,4,4,4,4,4,4,10,6,6,6,7,14,11,10,7,8,10,8,11,14,11,11,9,7,9,8,11,9,17,10,9,2,2,2,9,3,3,3,3,15,14,9,5,5,2,8,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,15,12,22,19,17,18,18,19,21,7,16,16,5,5,5,5,5,5,5,5,5,5,5,7,5,5,5,5,5,5,5,5,5,5,5,9,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,5,7,16,11,11,7,7,7,7,17,7,8,12,15,9,19,7,19,8,16,21,11,12,19,14,22,7,7,7,7,7,7,7,7,7,7,7,16,16,19,24,12,7,14,7,12,7,8,10,10,13,7,12,12,7,7,10,18,15,12,16,7,14,12,17,10,16,17,12,17,25,7,7,7,13,6,9,6,9,18,6,6,11,20,10,6,6,6,6,6,6,6,17,6,6,6,15,6,6,6,6,6,8,14,11,12,15,13,19,17,21,7,18,8,13,13,8,12,8,6,6,13,6,15,15,16,6,6,16,6,6,6,14,6,18,6,6,6,17,18,9,13,15,8,19,8,15,15,18,14,16,4,4,4,4,4,4,4,4,4,4,4,4,6,11,10,11,6,21,23,12,17,12,11,14,13,22,15,15,11,12,14,12,7,12,8,14,12,18,10,8,16,19,17,12,14,15,8,9,19,17,12,13,13,15,18,13,23,24,23,21,17,24,8,21,8,14,14,16,14,8,8,15,20,8,19,21,9,8,13,12,13,15,11,8,11,9,9,8,11,8,21,14,21,15,15,13,7,19,7,7,7,7,7,7,16,12,17,18,7,7,11,11,7,9,9,2,2,3,3,2,2,2,3,3,3,3,3,3,3,3,3,3,4,5,5,5,5,5,5,5,5,3,3,10,10,7,9,7,7,7,6,8,6,6,6,6,6,6,6,7,6,8,6,6,9,7,7,7,4,4,4,4,4,4,4,4,8,9,8,7,8,7,8,10,7,5,5,5,5,5,5,3,9,7,7,8,6,6,6,6,6,6,6,6,9,6,6,9,11,13,7,8,9,9,5,5,5,7,8,6,6,6,6,6,6,6,7,8,9,7,10,9,10,7,8,5,5,5,5,5,5,7,7,9,8,7,7,6,6,6,6,6,6,10,6,6,6,6,6,6,6,6,6,6,6,9,10,4,4,4,4,8,7,7,10,10,9,8,8,15,9,8,8,8,8,8,9,10,9,10,7,8,13,5,5,5,5,5,3,3,7,7,8,6,6,6,4,4,11,9,7,8,9,10,7,5,5,5,5,5,3,3,7,6,6,13,7,9,8,7,5,5,5,5,5,5,5,5,3,3,3,3,7,8,7,8,13,6,6,6,6,6,6,6,6,6,6,6,6,6,6,8,8,6,6,6,6,7,6,7,6,6,9,7,4,4,4,4,4,4,4,7,8,7,8,9,8,8,8,7,10,7,8,5,5,5,5,5,5,5,5,3,7,7,7,7,9,7,10,9,6,6,6,6,6,8,8,6,6,6,7,6,6,6,9,9,4,4,13,7,10,9,9,12,7,8,8,10,8,8,8,8,8,8,5,5,5,5,3,7,7,11,7,9,8,8,6,6,10,6,8,8,8,6,7,6,6,12,4,4,4,4,4,4,4,4,4,9,8,8,16,8,9,8,7,5,5,5,5,5,3,3,7,7,7,10,15,8,9,8,9,9,6,6,6,6,6,6,7,4,8,7,8,8,7,8,11,8,5,5,5,5,5,3,7,7,6,11,16,7,6,4,4,4,4,9,9,8,8,8,13,12,8,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,11,7,8,8,9,13,7,7,7,9,8,8,9,12,7,12,7,12,8,7,10,12,9,9,6,6,8,8,6,6,6,6,6,6,6,9,8,9,11,8,6,6,6,6,6,12,7,6,6,6,9,7,7,6,6,6,6,6,11,9,6,6,6,6,6,7,9,4,4,4,4,4,4,4,4,9,9,9,9,7,7,7,7,7,11,7,7,8,8,8,8,8,8,9,8,9,9,7,7,11,11,7,12,8,8,8,8,8,7,8,8,8,8,8,13,12,8,8,8,8,7,7,7,9,5,5,5,5,5,5,5,3,3,7,7,11,7,8,8,8,6,6,6,6,6,6,6,6,6,6,6,10,11,6,7,9,4,4,4,4,4,4,9,9,8,9,8,8,8,7,7,5,5,5,5,5,5,5,5,5,5,3,3,11,7,7,7,9,6,6,11,8,10,6,6,6,12,8,8,7,6,6,8,7,4,4,4,4,4,4,4,4,9,10,9,9,8,10,9,11,8,5,5,5,7,6,6,8,7,4,4,4,4,8,7,7,8,7,8,8,5,5,5,5,7,7,8,8,8,6,6,6,6,6,10,8,9,13,6,7,6,6,8,7,8,4,4,4,4,11,8,8,8,10,5,5,8,7,8,13,8,7,6,8,6,9,7,8,7,5,5,5,5,5,5,3,3,7,8,9,6,4,8,10,10,8,12,9,13,2,7,5,5,5,5,5,7,7,10,6,6,6,6,6,6,6,8,4,4,9,8,8,8,14,8,8,8,9,8,5,5,5,5,5,3,3,9,6,6,6,6,10,12,6,6,6,6,6,6,6,4,4,4,4,11,8,7,8,8,8,5,5,3,3,3,3,7,7,6,8,6,8,11,7,6,6,6,7,4,8,11,9,10,5,5,5,3,3,3,7,7,8,9,8,15,9,6,6,6,6,6,6,11,11,4,4,4,4,4,7,9,9,10,8,7,5,5,5,5,5,5,3,3,8,6,6,6,6,6,6,6,6,6,9,7,4,4,4,4,4,9,9,8,8,10,13,5,5,5,3,17,7,7,7,7,7,8,6,8,13,6,6,6,6,6,6,6,6,4,4,4,9,10,8,8,8,5,5,5,5,3,7,7,7,8,8,6,6,6,8,8,8,9,10,8,4,8,10,9,8,8,8,9,13,10,5,5,5,5,5,5,5,5,5,5,3,3,7,8,9,9,7,7,7,10,9,9,8,9,8,8,8,6,6,6,6,6,6,6,6,6,6,6,6,6,8,12,6,6,6,6,6,6,6,6,6,12,4,4,4,4,4,4,4,4,4,4,4,11,8,8,9,9,10,8,9,7,7,5,5,5,5,5,5,3,7,8,7,6,6,8,6,6,10,4,7,8,9,12,8,7,7,5,5,5,5,5,5,3,3,7,14,7,9,8,8,6,6,8,12,12,6,6,7,7,10,4,4,4,4,4,9,9,14,9,13,8,7,5,5,5,6,6,6,7,4,8,7,5,5,5,5,5,5,5,5,3,3,7,7,7,8,6,6,6,6,6,6,12,6,6,6,6,4,4,9,9,8,8,11,7,7,7,5,5,5,3,9,8,6,6,7,4,4,4,4,4,4,8,8,11,5,5,5,7,7,7,9,6,6,6,6,6,6,9,8,4,4,4,4,7,12,9,8,8,8,7,10,10,5,5,5,5,5,5,5,3,11,14,8,7,8,8,6,6,6,6,6,8,7,6,6,6,7,6,8,9,4,4,4,7,8,9,7,9,7,7,9,8,5,5,5,5,5,5,5,5,5,11,3,9,7,7,12,14,8,6,6,12,11,8,6,6,6,6,6,6,6,6,6,15,7,4,4,4,16,9,9,9,8,9,9,9,9,9,8,8,8,13,11,8,5,5,5,5,3,7,6,6,8,8,8,6,6,7,10,7,4,4,4,4,9,7,8,7,7,7,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,7,7,9,6,6,6,6,6,8,8,7,7,9,6,6,6,7,6,6,6,6,6,15,4,4,4,4,4,8,8,7,8,12,9,8,8,8,8,8,9,8,8,10,8,8,8,8,16,9,10,2,5,5,5,5,5,5,5,9,7,6,8,9,4,4,4,4,4,7,8,8,8,9,8,11,10,5,5,5,5,3,7,8,6,6,6,6,6,8,6,6,6,6,4,12,10,12,7,7,7,7,7,7,7,5,5,5,5,3,3,7,7,10,8,9,7,6,10,7,6,6,4,4,8,9,7,9,9,9,9,8,8,8,8,10,5,5,5,5,5,5,8,7,6,6,6,10,6,7,10,7,4,4,4,4,4,4,4,12,9,10,7,7,10,8,10,5,12,9,6,6,6,6,6,7,6,4,4,4,10,9,9,8,7,7,5,5,5,5,5,5,3,3,13,7,7,9,7,7,7,8,9,9,7,8,6,6,6,6,6,6,6,6,6,6,6,6,6,7,13,9,15,15,4,4,4,4,4,10,10,9,8,9,8,8,9,7,8,7,8,5,5,7,6,6,6,4,4,4,7,8,11,8,5,5,5,5,5,5,5,7,6,6,6,6,6,6,9,11,10,7,4,4,4,9,8,8,5,5,5,5,5,9,9,6,6,6,6,6,6,6,9,9,4,4,4,4,8,8,8,9,9,8,8,8,13,2,4,2,7,5,5,5,5,5,5,9,9,6,6,6,6,10,8,8,8,6,6,6,4,4,9,8,10,8,9,8,8,8,9,8,8,5,3,3,3,11,6,6,6,7,6,6,6,4,4,9,8,5,5,5,5,5,3,11,8,6,6,6,6,6,9,7,4,4,14,10,9,8,12,8,8,8,11,15,8,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,11,11,11,10,10,7,7,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,5,5,5,5,5,5,5,5,5,5,3,3,3,7,11,7,7,11,11,7,8,9,10,7,7,9,9,9,9,7,7,10,8,13,8,8,8,8,11,10,6,6,8,10,11,14,14,6,6,6,6,6,6,9,11,7,7,6,8,12,11,11,6,6,10,6,6,6,6,6,10,7,7,6,6,11,6,6,6,11,8,9,7,6,10,11,9,10,11,7,11,8,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,8,6,6,8,9,10,9,6,6,6,10,6,6,6,6,11,10,11,10,9,8,7,7,7,7,11,14,8,10,9,9,8,8,7,11,8,8,8,11,11,10,10,9,10,8,11,10,8,11,9,12,8,10,8,11,8,9,9,11,11,10,11,13,8,7,8,8,9,7,8,8,8,8,7,8,2,2,2,2,2,2,2,4,4,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,4,2,3,3,3,3,3,3,3,3,8,6,4,4,4,11,7,11,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,5,5,5,5,3,3,3,3,8,7,7,8,8,4,8,7,7,7,9,7,8,9,8,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,6,3,3,3,3,3,3,3,3,4,2,2,3,3,3,3,3,4,5,5,3,8,8,6,9,4,4,10,7,3,3,3,2,5,3,3,3,3,3,3,3,3,3,3,3,3,4,3,2,2,2,3,3,3,3,3,4,10,2,3,3,3,3,3,3,3,4,2,3,3,3,3,3,3,3,3,2,2,3,3,3,5,2,4,2,6,2,2,9,5,5,3,3,3,3,3,3,3,5,5,5,9,8,7,6,6,11,4,4,4,4,4,4,4,4,6,6,7,7,11,8,8,6,5,11,2,3,3,3,3,3,3,3,3,3,3,3,3,3,4,2,2,3,3,3,3,3,3,6,4,4,4,4,3,3,3,3,5,7,2,3,3,3,3,3,8,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,6,4,4,4,4,2,2,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,4,2,2,3,3,3,3,3,3,2,3,3,3,3,3,6,3,3,8,10,3,4,4,1,1,1,1,1,1,1,8,9,10,7,7,1,1,3,8,7,7,8,8,8,1,6,1,1,6,3,3,4,7,3,5,5,4,4,4,4,4,2,7,7,8,12,3,4,5,1,3,4,4,10,4,3,3,3,8,7,7,2,2,2,2,2,2,2,2,2,12,9,20,7,5,5,5,9,13,5,5,5,5,5,3,3,3,16,5,5,5,13,7,8,8,11,8,7,9,7,11,12,9,9,8,8,11,10,14,7,12,10,11,13,7,9,11,17,17,14,13,7,8,7,10,10,7,16,13,7,8,17,12,9,8,6,7,10,6,6,12,6,8,10,8,8,8,6,8,6,14,6,6,6,13,6,10,6,6,7,14,8,6,6,10,11,10,9,9,7,7,6,6,6,9,9,7,9,10,9,13,12,4,4,4,4,4,4,4,4,4,6,6,6,8,8,6,8,9,10,9,7,10,10,8,7,8,7,10,12,9,8,15,8,7,8,8,7,7,15,13,7,10,9,14,18,16,7,24,7,8,10,11,16,8,14,7,9,9,9,11,13,19,14,15,14,11,7,13,9,10,7,13,9,10,11,12,8,9,2,3,5,8,7,4,4,10,5,3,3,3,3,3,5,4,4,4,2,2,2,2,2,1,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,2,2,2,3,3,3,3,3,3,3,3,3,3,4,2,12,5,3,8,10,15,6,7,2,3,2,5,5,12,2,5,5,5,5,2,2,5,5,12,9,5,2,2,9,5,5,12,12,5,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,9,12,5,8,8,9,5,5,5,8,19,7,16,15,14,9,9,9,9,7,11,11,11,7,14,10,10,5,5,5,5,5,5,5,5,5,15,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,9,9,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,14,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,15,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,5,5,5,5,5,5,5,12,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,9,9,12,9,9,12,12,12,15,7,11,7,14,11,18,13,8,18,15,18,12,14,12,8,8,8,8,9,9,9,12,7,10,10,8,8,12,12,12,7,12,12,9,7,7,7,7,7,8,15,12,9,10,10,7,10,10,13,11,10,9,22,11,9,8,8,8,8,8,13,18,13,9,15,19,9,7,7,10,7,7,7,11,8,13,17,7,7,10,10,10,7,20,16,7,7,7,7,7,7,11,21,12,12,13,11,14,16,8,8,13,11,7,7,13,7,7,14,15,15,6,6,6,6,6,6,6,6,6,6,13,10,18,6,6,6,6,6,6,6,6,6,11,8,8,12,12,11,11,8,12,9,9,9,13,13,9,9,9,9,9,9,6,10,12,6,6,6,6,17,11,7,7,7,7,14,14,12,6,7,7,6,6,15,10,13,10,6,8,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,13,9,9,15,13,6,12,12,6,19,11,10,7,7,16,8,19,17,9,9,9,9,9,6,6,6,10,8,16,8,6,6,9,6,6,6,6,6,6,6,6,8,8,8,6,7,6,6,6,6,6,6,6,6,6,6,6,14,6,6,6,6,20,6,9,6,14,9,9,9,6,9,8,8,12,9,8,8,8,8,7,8,12,7,8,8,8,6,8,6,6,6,6,6,6,6,9,8,8,6,6,13,9,12,13,12,14,13,12,11,11,6,8,8,8,6,13,12,11,11,12,6,11,12,11,13,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,15,6,6,6,6,6,6,6,13,6,6,6,6,6,6,6,6,6,6,6,6,6,8,8,8,8,6,18,6,12,13,13,13,9,10,15,9,12,6,6,6,6,6,6,6,6,9,15,10,9,10,13,9,19,8,18,17,10,10,8,8,6,6,6,6,6,6,10,14,8,16,16,9,8,15,8,8,10,12,14,7,7,8,8,7,7,7,7,8,13,13,11,9,9,9,12,10,17,8,11,9,7,7,14,8,14,14,7,7,7,7,7,7,14,7,7,7,7,7,10,10,8,14,7,7,7,7,8,8,8,8,8,17,9,7,15,7,8,12,7,9,14,7,7,7,9,13,8,14,7,16,18,13,15,14,12,13,10,15,9,7,7,7,10,13,15,15,9,9,9,9,19,11,7,11,11,13,8,8,8,8,7,12,19,17,9,9,13,7,7,7,9,7,7,7,12,13,15,10,8,8,14,15,12,13,13,8,12,14,7,11,7,14,15,13,12,8,8,8,8,11,13,15,15,8,13,12,8,8,8,13,10,16,14,11,8,8,12,12,9,15,15,12,12,13,8,8,9,12,13,9,8,8,8,8,8,8,8,8,8,8,8,11,12,11,7,14,7,13,13,13,12,18,16,7,12,11,10,10,15,9,9,9,21,7,7,7,11,16,8,8,11,11,7,7,7,7,7,19,7,7,7,7,7,7,7,7,7,12,8,9,12,14,11,9,9,9,22,12,3,8,8,15,4,2,2,5,5,3,3,3,3,3,3,6,6,4,4,4,12,7,10,2,3,3,3,3,3,3,3,6,7,3,7,5,14,4,4,7,8,10,4,1,3,3,6,2,4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,2,2,5,3,4,2,2,2,2,2,2,11,5,5,5,11,5,5,3,5,5,5,5,11,14,13,9,11,9,12,8,11,11,8,11,16,9,9,7,10,9,12,8,15,6,7,6,6,13,10,8,11,8,6,6,6,12,16,6,11,7,8,9,18,6,6,9,4,4,6,13,6,6,6,6,8,8,9,16,7,7,14,7,8,8,8,7,7,7,7,7,7,15,13,7,10,7,7,10,12,16,15,7,9,9,14,11,11,10,9,10,8,12,7,8,7,7,10,12,7,12,8,7,2,3,3,3,3,3,3,3,3,3,3,5,3,3,5,5,5,10,4,8,7,10,3,3,3,3,3,3,3,3,3,3,1,3,3,3,3,3,3,3,7,4,5,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,5,5,5,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,5,6,6,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,9,8,2,2,2,8,12,7,7,5,5,5,5,5,5,5,5,5,5,5,5,8,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,5,5,5,7,11,9,8,8,8,7,8,9,7,7,9,7,7,7,10,7,7,10,9,10,6,6,6,6,6,6,15,7,8,9,9,8,6,6,10,9,6,8,13,9,7,6,6,6,6,6,6,12,6,6,7,6,7,6,6,6,10,10,7,6,6,6,4,4,4,4,4,4,4,4,4,4,4,4,4,4,6,14,6,6,7,7,9,6,6,6,6,9,9,8,9,10,9,8,9,12,7,7,7,8,7,10,12,11,9,10,7,7,7,9,10,10,8,12,9,7,7,9,8,8,8,10,7,7,8,9,9,7,7,7,8,2,4,6,3,4,2,3,3,3,3,2,3,3,3,3,3,3,3,3,4,4,4,4,5,5,3,3,3,3,3,3,3,3,5,8,6,4,7,3,3,3,3,3,3,3,12,3,3,3,3,3,3,4,4,2,3,5,3,4,7,3,3,3,3,3,3,4,3,3,3,3,3,3,3,4,3,3,6,4,3,4,2,2,2,5,3,3,3,3,3,5,4,4,4,4,7,6,8,9,2,2,2,2,3,3,3,5,7,2,3,3,8,7,7,2,2,8,5,3,3,3,3,3,3,3,3,3,3,3,3,3,5,5,8,8,7,7,6,10,6,9,7,11,4,6,8,8,7,8,4,5,5,5,3,3,11,8,9,6,6,8,7,4,4,7,8,7,2,2,3,3,3,3,4,3,3,3,3,3,3,3,3,7,2,2,5,3,3,2,3,3,3,3,3,3,4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,12,5,5,3,3,3,5,10,12,6,15,4,6,6,7,14,9,3,3,3,3,3,8,2,2,3,5,3,3,3,3,3,3,8,8,8,7,5,8,4,6,11,2,2,6,7,2,9,8,5,5,3,3,5,5,7,7,6,6,10,6,6,8,9,7,4,4,4,4,7,6,6,7,7,10,9,8,11,8,3,3,3,3,3,4,4,2,3,3,3,3,3,7,6,2,5,6,7,6,4,8,9,11,2,2,3,3,3,3,3,3,3,2,2,5,3,3,3,3,3,9,9,6,4,8,7,7,5,9,8,6,8,7,8,5,5,5,5,5,3,3,3,16,8,7,7,7,8,7,7,7,7,9,6,9,6,10,7,7,7,6,10,8,9,11,11,8,4,4,10,8,8,6,9,6,11,8,8,8,15,7,8,9,5,3,3,3,3,3,5,11,2,2,3,8,9,10,3,2,2,2,2,2,2,3,6,4,2,2,3,3,3,3,3,3,3,3,3,3,4,4,2,3,3,3,3,3,3,3,11,5,3,3,3,3,3,3,3,3,6,7,4,4,2,3,3,3,3,3,3,3,3,12,7,4,12,4,6,5,4,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,2,3,3,3,3,3,3,3,3,4,4,11,10,6,4,6,10,8,3,3,3,3,3,3,3,3,5,4,4,4,2,2,2,2,2,2,2,2,5,3,4,4,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,10,5,5,5,5,5,5,3,3,3,3,3,3,3,3,7,8,8,7,13,12,10,10,8,8,7,7,9,12,11,6,6,8,8,9,7,7,7,10,15,10,4,4,4,4,4,11,8,8,9,7,9,14,14,12,2,2,2,2,2,2,2,3,3,3,3,3,2,2,12,5,5,5,8,11,10,7,9,3,8,7,3,15,13,11,4,4,2,2,2,19,7,5,5,3,3,3,3,3,3,3,5,22,18,6,14,17,4,4,19,16,18,2,3,3,2,3,2,3,3,6,4,2,3,3,2,5,3,3,3,3,3,3,3,9,9,2,3,2,2,2,3,3,3,5,7,14,7,7,12,9,13,6,11,6,10,9,7,7,8,12,12,8,8,8,10,7,7,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,5,8,10,7,8,11,8,12,9,4,7,7,9,13,2,3,3,3,3,3,3,2,3,3,3,1,2,2,3,3,3,3,3,3,5,2,2,5,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,8,4,4,4,3,2,3,3,3,3,5,2,2,2,2,5,5,5,5,3,3,3,3,3,3,3,3,3,7,7,7,7,7,8,8,8,8,8,12,9,8,8,9,8,6,17,6,6,6,8,8,6,6,6,6,6,6,6,6,6,6,6,7,4,4,8,8,9,9,9,7,7,7,7,7,7,7,9,9,9,7,8,8,8,10,7,13,10,8,9,3,3,5,13,3,3,3,3,3,7,7,6,6,10,13,11,11,8,8,9,8,9,9,10,10,10,11,10,10,13,13,16,15,11,12,9,9,10,9,11,10,9,9,14,7,8,3,10,7,7,3,2,2,2,5,3,3,3,3,3,3,3,3,3,3,3,3,6,7,2,2,3,3,3,3,3,3,3,3,4,11,6,7,4,6,2,2,3,3,3,1,3,3,3,3,3,3,6,4,4,2,2,2,3,3,3,3,4,4,6,6,6,6,5,4,4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,9,11,6,10,9,12,7,7,11,14,9,7,12,3,3,7,12,11,12,7,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,9,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,3,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,11,5,5,5,5,5,5,5,5,11,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,5,5,5,5,5,5,5,3,3,3,5,5,5,5,5,5,5,5,5,5,5,3,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,5,5,5,5,5,5,5,5,5,5,5,5,5,3,10,3,3,3,11,3,5,9,11,8,12,14,9,7,8,7,7,11,11,7,7,10,9,8,10,9,7,7,7,7,7,7,8,8,7,11,8,8,8,7,7,10,8,7,13,12,7,17,10,8,8,11,7,11,11,14,7,11,7,8,6,9,20,8,7,9,16,7,10,6,11,10,8,9,7,16,11,11,9,8,9,8,8,8,11,8,15,8,8,9,7,8,8,11,10,7,5,7,10,10,15,7,7,7,8,7,8,8,10,11,10,10,10,11,11,7,8,6,8,8,8,10,6,8,6,6,7,8,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,16,6,15,6,7,11,11,7,9,10,11,13,10,6,16,8,10,12,11,6,6,6,6,6,6,6,10,6,10,7,7,7,7,11,7,11,6,6,6,6,6,6,17,7,7,6,6,12,22,6,6,6,6,6,8,6,6,6,6,7,6,6,5,6,6,8,11,6,9,14,11,9,11,7,7,8,6,6,6,8,10,9,6,6,6,6,9,7,6,6,6,6,6,15,6,4,4,4,6,4,17,8,11,6,6,9,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,6,6,6,6,10,6,10,6,6,6,6,12,8,6,6,6,6,6,6,6,6,6,9,6,6,6,6,18,6,6,6,8,9,10,7,8,9,10,11,7,13,6,8,8,6,6,14,7,7,7,7,10,7,14,9,6,6,9,15,9,7,14,6,11,14,13,7,12,8,7,7,7,7,7,12,7,10,9,16,6,8,6,5,17,6,8,10,4,6,4,10,15,17,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,8,4,4,11,7,4,4,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,19,17,6,10,11,6,6,6,6,18,6,6,11,4,4,4,5,6,6,6,9,5,6,4,6,6,4,6,6,6,6,10,6,6,4,6,6,10,6,10,6,6,6,6,11,6,6,10,6,6,8,6,6,6,8,6,11,4,11,9,10,9,11,4,8,4,11,12,7,9,8,6,7,7,8,12,12,11,13,10,11,7,7,7,9,7,11,10,7,7,7,16,11,10,11,17,9,9,8,8,7,7,7,9,7,7,7,14,7,13,9,11,10,14,10,10,12,11,10,7,10,5,14,8,8,8,9,7,8,7,7,9,8,7,8,7,7,7,7,7,7,7,11,8,10,8,7,8,14,11,8,9,9,9,8,24,10,10,12,7,7,15,11,8,8,12,11,8,9,9,7,8,9,10,11,10,11,7,12,7,7,11,9,8,14,13,12,8,11,10,8,8,7,7,14,9,10,8,9,11,7,14,8,8,13,8,8,12,7,10,14,14,11,9,10,9,9,7,7,11,11,13,9,13,5,5,5,7,9,5,11,12,14,8,7,7,11,10,9,7,8,8,7,10,11,11,5,5,7,5,5,5,7,7,15,7,7,8,7,15,12,12,10,7,8,7,11,7,7,7,23,11,8,8,11,10,7,8,11,7,19,7,7,6,9,9,9,11,3,4,7,8,6,6,4,10,8,2,2]),zv=new Uint16Array([0,0,0,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,12,1,1,1,1,1,17,1,1,1,12,1,12,1,12,13,1,1,1,1,12,1,12,1,1,1,1,1,14,21,1,1,1,1,1,1,1,19,12,1,1,1,1,1,1,1,20,1,1,1,16,1,18,1,1,15,1,1,1,1,12,1,1,1,1,1,1,22,1,1,1,12,1,1,1,1,1,1,1,1,1,12,12,12,12,12,12,12,12,12,12,12,12,1,24,25,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,12,12,12,12,1,32,0,0,0,1,1,1,1,35,34,1,1,1,1,1,33,1,1,1,1,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,38,0,0,0,0,39,40,0,0,0,41,0,12,1,1,12,1,1,1,1,44,45,45,45,44,45,44,44,46,45,44,45,44,44,44,44,44,44,46,44,44,44,44,44,44,45,47,47,45,44,44,44,44,44,12,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,50,52,50,50,50,52,50,51,50,53,50,51,51,50,50,50,51,53,51,53,50,51,51,12,55,55,54,56,51,53,50,50,48,49,57,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,60,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,67,1,12,1,1,66,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,78,0,0,0,0,0,0,0,0,0,0,0,0,0,76,79,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,77,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,12,1,1,1,1,89,1,91,1,1,1,1,1,1,1,1,94,1,1,1,1,1,1,1,1,1,1,1,1,0,1,97,97,1,1,12,1,100,1,1,1,1,1,1,1,98,1,99,1,101,1,1,1,1,1,102,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,110,111,1,1,1,1,1,1,113,113,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,121,122,1,1,1,1,1,1,1,1,1,1,1,1,1,122,1,1,1,1,1,1,1,1,1,1,122,1,1,1,1,1,1,1,1,1,126,123,125,120,1,124,1,1,114,1,1,1,1,117,1,127,1,1,1,1,1,119,1,108,1,109,1,12,128,106,1,112,1,1,1,1,1,107,115,1,12,12,12,118,116,1,1,1,1,1,1,0,0,0,0,1,12,12,1,1,1,1,1,12,134,1,1,1,1,1,1,1,1,1,1,1,12,136,1,1,1,1,1,1,1,1,137,138,12,12,135,133,45,45,140,50,50,139,142,141,1,1,0,0,0,0,0,0,0,0,0,0,0,0,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,143,0,0,0,0,1,0,144,132,1,0,1,12,12,1,1,1,1,1,0,0,0,0,0,0,0,1,148,147,20,1,1,12,12,1,20,12,12,1,1,1,1,1,134,1,1,152,1,1,1,1,153,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,1,1,136,1,1,152,1,1,1,1,153,1,1,134,1,1,1,152,1,1,1,1,153,1,1,134,1,1,1,1,1,1,1,1,134,1,1,1,1,1,1,1,1,1,1,1,160,1,1,1,152,1,1,1,1,1,153,1,1,160,1,1,1,1,1,1,1,1,1,1,134,1,1,1,1,152,1,1,1,1,153,1,1,1,134,1,1,152,1,1,1,1,164,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,1,167,1,1,160,1,1,1,1,1,152,1,1,1,1,1,153,1,1,160,1,1,1,1,1,152,1,1,1,1,1,153,1,154,158,158,12,1,12,166,1,1,1,1,1,158,158,158,154,1,1,1,157,158,161,165,1,1,1,1,157,157,1,1,156,154,154,157,170,156,170,1,1,168,1,156,155,157,1,1,1,1,157,1,159,1,1,1,12,1,162,1,162,1,1,1,162,161,163,169,156,154,1,1,1,1,1,1,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,173,172,173,172,172,172,172,174,174,172,173,172,173,172,172,12,12,12,12,12,1,12,12,12,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,12,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,193,1,1,1,1,12,199,200,201,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,151,1,1,1,1,1,1,1,1,1,1,1,196,1,1,1,184,1,210,1,1,1,208,1,1,205,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,12,1,1,1,1,1,12,1,1,1,1,1,1,1,1,190,1,1,1,186,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,182,1,1,1,1,1,1,1,191,1,1,1,1,195,1,1,1,1,171,1,1,189,1,1,1,192,1,1,1,12,1,1,1,1,1,1,1,1,1,1,1,1,180,1,12,1,1,12,1,1,1,1,183,1,1,1,188,1,203,12,1,1,1,1,1,1,1,1,1,1,1,1,1,1,12,1,1,209,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,194,1,1,1,1,1,12,1,1,1,1,1,1,1,1,176,12,1,1,1,178,12,1,1,1,1,1,1,1,198,1,1,1,1,1,1,1,1,1,1,177,1,1,1,1,1,1,204,1,1,1,181,1,1,1,187,1,12,1,1,12,1,1,1,1,1,1,1,1,1,1,191,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,175,1,1,1,1,1,1,1,1,1,1,185,1,1,1,1,1,1,1,1,1,1,1,206,1,1,1,1,1,1,1,1,1,1,1,1,1,207,1,1,12,1,1,1,1,179,1,1,1,185,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,12,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,12,1,1,1,197,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,12,12,1,1,1,1,1,1,1,1,1,202,1,1,12,1,1,1,12,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,220,0,0,0,0,0,221,0,0,0,0,0,0,1,12,1,1,1,225,1,1,1,0,226,223,224,1,1,1,1,1,1,231,1,233,1,1,1,1,1,1,1,1,1,1,1,229,1,1,1,1,1,235,1,1,12,1,12,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,234,1,1,1,12,1,1,1,1,230,1,1,1,228,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,232,1,1,1,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,1,12,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,241,13,1,1,1,12,12,238,239,1,1,1,1,240,1,1,12,1,1,1,1,1,1,1,242,1,1,12,16,1,1,1,1,1,1,1,243,1,1,1,12,12,1,1,1,1,1,243,12,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,252,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,256,256,1,0,0,0,0,0,1,12,0,0,0,0,0,0,0,0,172,261,262,1,12,1,1,1,1,12,264,1,1,263,1,1,266,1,1,1,1,1,1,1,1,1,0,1,1,1,271,272,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,12,1,0,1,0,0,0,0,1,0,1,0,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,12,0,283,0,0,284,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,12,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,60,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,1,1,0,308,0,0,0,0,0,0,0,0,0,310,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,12,1,1,1,1,1,1,1,1,1,12,1,1,1,1,1,327,327,328,327,0,185,1,1,13,323,1,321,0,0,0,0,1,0,0,0,324,1,1,329,1,205,1,1,1,1,1,322,1,319,1,325,1,317,1,326,1,318,1,1,1,1,1,1,1,12,1,1,1,12,1,12,320,320,1,1,1,316,184,1,1,12,1,1,1,1,1,1,1,1,1,1,12,1,1,1,1,12,1,1,1,1,315,1,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,332,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,266,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,372,372,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,364,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,1,340,351,1,1,339,374,1,345,1,1,337,369,1,1,355,336,341,1,1,1,348,379,357,1,1,1,1,1,1,358,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,0,367,371,0,0,79,1,1,0,365,342,378,343,346,353,1,368,0,1,0,79,362,360,1,0,0,1,1,1,0,0,0,0,381,1,1,352,1,79,1,0,1,1,1,384,1,0,0,79,359,0,1,338,1,1,1,0,1,1,361,1,0,1,1,1,0,1,386,349,1,1,0,1,0,0,377,0,1,1,1,79,370,1,1,366,363,1,1,1,1,1,1,1,1,1,1,1,344,1,1,1,1,1,1,1,1,1,1,1,376,0,79,1,1,1,1,0,1,1,1,1,1,1,0,0,1,1,380,1,1,1,0,0,383,0,0,0,1,356,1,0,79,382,1,0,0,0,0,385,1,1,0,0,1,0,1,0,354,0,350,0,1,1,1,0,1,1,0,373,347,375,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,1,1,400,400,1,1,12,12,1,400,1,1,12,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,412,1,1,0,1,1,1,1,205,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,430,430,1,1,0,0,317,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,442,1,441,1,1,1,1,1,1,1,1,445,1,12,12,1,1,1,1,1,12,1,1,1,1,453,1,1,1,455,1,1,1,1,1,1,1,1,1,1,452,1,447,1,1,1,1,435,1,1,1,1,1,1,1,1,448,12,1,1,1,1,454,1,1,1,449,444,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,317,1,433,1,1,12,451,1,1,317,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,437,1,1,1,1,1,1,1,1,1,1,1,454,1,1,1,1,317,1,450,1,1,1,439,1,1,1,1,1,440,1,456,443,1,1,1,1,1,438,1,1,1,1,1,1,1,1,1,434,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,446,1,1,1,1,1,1,1,12,1,1,1,1,1,436,1,1,1,1,1,1,1,220,457,1,1,1,1,1,12,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,0,1,0,1,0,1,1,0,0,0,462,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,12,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,466,0,466,466,466,466,466,466,466,0,466,466,466,466,466,1,466,466,466,0,466,466,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,471,470,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,475,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,468,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,469,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,477,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,466,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,474,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,467,0,0,478,473,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,472,0,0,0,0,0,0,0,0,0,0,0,0,0,466,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,467,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,466,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,476,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,12,1,1,1,1,1,1,1,1,1,1,1,1,488,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,198,198,1,492,1,1,1,491,1,1,1,1,487,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,489,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,493,1,1,490,1,1,1,1,1,1,1,1,372,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,494,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,505,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,1,0,0,0,1,0,0,0,0,1,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,1,0,1,0,0,12,1,507,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,12,12,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,1,0,0,0,1,0,0,0,1,60,1,1,12,12,12,12,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,526,1,1,1,1,1,1,1,527,1,1,1,1,1,1,1,525,1,1,12,1,529,239,1,1,12,12,1,1,12,1,12,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,533,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,1,1,1,539,1,1,1,1,1,1,1,1,1,1,1,1,1,1,132,1,12,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,107,1,1,12,1,1,1,12,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,548,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,144,1,1,1,228,1,1,12,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,1,572,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,577,1,220,1,328,1,1,1,1,1,1,1,1,1,0,0,578,1,1,1,1,0,580,0,79,0,579,0,1,1,1,0,1,1,1,1,1,1,12,0,0,0,0,1,0,0,0,0,0,0,586,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,582,582,0,585,583,582,582,582,582,582,587,582,582,591,582,582,582,582,582,582,582,582,582,582,588,585,582,582,585,582,582,582,582,582,582,582,582,582,582,582,582,582,583,582,582,582,582,582,589,582,582,582,582,582,582,0,0,0,1,590,1,1,1,1,584,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,12,595,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,12,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,12,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,12,1,1,12,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,96,65,280,306,411,535,0,4,68,236,254,282,307,334,388,413,0,499,519,536,597,9,0,61,88,398,409,429,575,0,497,518,532,612,0,30,6,0,461,500,602,560,70,0,7,285,255,389,463,416,538,79,598,0,576,309,418,465,9,105,288,506,6,30,0,311,79,391,79,483,10,6,131,248,275,0,613,509,0,563,0,64,6,6,251,95,2,432,399,410,596,0,6,0,6,286,103,6,561,501,540,0,464,390,273,287,8,71,104,599,543,392,312,300,419,146,74,290,546,510,601,564,335,330,479,6,75,149,11,0,249,522,547,565,514,551,570,611,36,6,260,295,333,304,218,30,528,553,218,42,216,265,296,305,406,423,481,274,0,73,562,0,403,417,299,79,247,79,0,581,545,504,292,421,79,393,387,0,0,0,9,555,571,217,0,424,407,531,516,573,615,85,218,43,297,396,425,569,0,511,293,276,79,215,80,28,390,30,6,394,331,303,604,592,524,550,513,0,258,81,30,405,422,0,30,426,0,219,593,517,9,408,427,218,248,86,222,594,574,557,482,428,397,250,227,87,59,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,620,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,414,0,0,0,0,0,0,0,0,82,0,129,0,0,84,549,0,0,0,0,0,0,0,27,0,552,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,414,0,0,0,0,503,0,257,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,294,0,0,0,0,0,0,0,617,0,0,0,0,0,616,0,0,0,0,0,0,0,0,0,0,0,0,0,0,395,0,0,0,484,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,69,0,0,0,0,0,0,495,0,0,0,0,0,0,404,0,0,0,0,0,0,0,0,0,0,0,0,0,211,0,0,0,0,0,0,0,0,0,0,515,0,0,0,0,0,0,0,0,0,0,0,0,496,0,0,0,0,0,0,0,0,0,0,0,0,0,0,269,281,0,0,0,0,0,530,277,0,0,0,0,0,0,0,0,0,0,0,0,0,512,0,0,0,0,0,0,0,0,0,0,0,458,0,0,0,314,0,0,0,0,0,0,253,0,0,0,0,0,0,23,0,0,0,0,568,0,0,0,0,600,521,0,0,0,0,244,0,0,0,0,0,0,0,0,0,480,0,0,0,0,0,62,0,0,0,267,58,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,0,0,0,0,0,279,610,0,72,0,0,0,0,0,0,0,0,0,619,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,150,0,278,0,0,0,0,0,0,567,0,0,0,0,0,0,523,0,0,0,0,0,0,0,0,0,566,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,84,0,502,0,0,0,0,0,554,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,84,83,0,0,0,0,0,0,0,0,0,0,0,0,486,0,485,0,0,0,0,0,0,0,0,0,0,259,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,459,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,289,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,537,0,0,0,0,0,0,0,0,298,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,69,237,0,0,0,0,0,0,0,0,0,0,84,0,606,0,0,0,0,0,0,0,0,0,0,0,0,245,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,609,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,520,0,0,0,84,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,498,0,614,0,0,431,0,0,0,0,0,0,0,0,0,0,0,0,402,0,0,0,544,0,93,0,0,0,0,0,0,0,0,0,0,31,0,0,0,0,0,0,29,92,0,0,0,0,0,0,0,0,0,0,0,0,291,0,0,0,214,0,0,0,0,0,0,558,0,270,0,0,130,0,0,0,0,0,559,0,0,0,0,0,0,0,414,420,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,313,0,0,0,0,0,5,0,0,0,0,0,0,0,301,0,0,0,0,0,0,0,0,0,0,0,0,0,534,0,0,0,415,0,0,401,0,0,0,0,0,0,603,0,0,0,541,0,0,90,0,542,0,0,0,0,0,0,0,0,0,0,508,460,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,268,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,414,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,608,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,607,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,618,0,0,0,0,0,556,0,0,0,0,0,0,0,0,0,0,302,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,605,0,0,212,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,623,623,623,623,623,623,623,622,624]),ef="orgmilcomschnetedugovdrrformsfeedbackofficialaccoorgmilschnetgovmagazinemediaunioncargopilotgroupcaarespressworksaerodromeworkinggroupair-traffic-controlaircraftaccident-preventioneducatormarketplaceambulanceinsurancecateringairportrepbodyenginesoftwaremodellingair-surveillanceconsultingchartertrainermaintenanceservicesdesignflightskydivingfreightassociationstudentgroundhandlingdgcafuelclubtaxicrewshowballooningexpresstraderbrokerauthoragentsairtrafficjournalistsafetyconsultantmicrolightaccident-investigationparachutingequipmentproductionfederationrecreationscientistnavigationengineertradingglidingleasingresearchpassenger-associationentertainmentparaglidinghangglidingaerobaticrotorcraftemergencycertificationgovernmentaeroclubexchangelogisticschampionshiphomebuiltcouncilconferencecontrolairlinecivilaviationjournalorgcomnetedugovcoorgcomnomnetobjofforgcomnetuwukiloappsframerorgmilcomnetedugovcoradioorgcomnetcommuneedogpbcoitgvorgedugov*spreviewfrontendrelayononstagingupid*mtls*privatelinktypedreamdeveloperbravemochawindsurfaivenmirenupsunwnextbegetngrokclerkwale2bwebcsbrunputerflutterflowspawnbaseshiptodaymagicpatternsnetlifyondigitaloceanrailwayhostedclaudehasurabotdashvercelgithubluyanigadgetreplitcloudflaretelebitedgecomputeevervaultdetaexponyatnoopencrpplxzeaburwasmerframerzeropsconvexmedusajsspritesonherculeseasypanelstreamlitsnowflakemesserliloginlinehackclubnorthflankbase44corespeedadaptableleapcellngrok-freeclerkstagelovableon-fleek*us-west-3ap-south-2us-central-2us-central-1eu-central-1ap-south-1us-west-2us-east-2eu-north-1ap-north-1us-west-1us-east-1*rcloudintsegorgmilcomgobbetnetintedugovturmusicasenasamutualcoopip6uriurnin-addre164homeirisgovdixdaemoncloudnssthwien*inexexkunden4accogvormymyspreadshop4lima2ixortsinfofuturecmsfuturehosting12hpprivfuturemailinglima-cityfunkfeuer123webseitednshomemelmyspreadshopcloudletswasantqldvicactnswtascatholicwasaqldvictasvpsidwasantozqldorgcomvicasnactnetedugovnswtasconfhrsncomairflowlambda-urltransfer-webappairflowtransfer-webapptransfer-webapptransfer-webapp-fipstransfer-webappeu-west-3ap-south-2eu-south-2eu-central-2ap-southeast-3ap-southeast-4ap-northeast-3eu-central-1mx-central-1me-central-1ca-central-1il-central-1ap-northeast-1ap-southeast-1me-south-1af-south-1eu-south-1ap-south-1ap-southeast-7us-west-2eu-west-2us-east-2eu-north-1ap-southeast-2ap-northeast-2ap-southeast-5us-gov-west-1us-gov-east-1ca-west-1us-west-1eu-west-1us-east-1ap-east-1sa-east-1privatenotebookstudiolabelingnotebookstudionotebooknotebook-fipslabelingnotebookstudionotebook-fipsnotebookstudio-fipsnotebook-fipsnotebookstudionotebook-fipsnotebookstudioeu-west-3ap-south-2eu-south-2eu-central-2ap-southeast-3ap-southeast-4ap-northeast-3eu-central-1me-central-1ca-central-1il-central-1ap-northeast-1ap-southeast-1me-south-1af-south-1eu-south-1ap-south-1us-west-2eu-west-2us-east-2eu-north-1ap-southeast-2ap-northeast-2experimentsus-gov-west-1us-gov-east-1ca-west-1us-west-1eu-west-1us-east-1ap-east-1sa-east-1onrepostsagemakercopporgmilcompronetintedugovbiznameinfoshoprsorgmilcomnetedugovbrendlyresolvenzauscotvstoreorgcomnetedugovbizinfoidacaicoittvorgmilcomschnetedugovinfocloudezproxyacmymyspreadshopkuleuvenwebhostingtransurl123websitecloudnsinterhostsolutionsddns5476103298edgfacbmlonihkjutwvqpsryxzbarsycoororgcomedumyftpno-iporxcloud-ipfor-somemmafanfor-morewebhopselfipjozidyndnscloudnsdscloudfor-thefor-betteractivetrailcoeconorestooteorgcomeconeteduassurmoneyafricaarchitectesrestaurantloisirstourismavocatsinfoagrounivcoorgcomnetedugovtvdeportesaludtksatorgmilcomwebgobnetinteducienciaboliviarevistacooperativaempresanombreindustriamusicapatriamedicinademocraciapoliticapuebloindigenaplurinacionalarteblogwikiinfoagrotransportenoticiasprofesionalacademiaeconomiaecologiamovimientotecnologianaturalsimplesitecepesebamapadfmgalampbacscpirngorotomtrjspaprrprrsesmscepesebamapadfmgalampbacscpirngorotomtrjspaprrprrsesms*biaamfmtcmptvfeirasampajampanatalbelemananiradiog12medindfndbmdtrdthepoaggfjdfdefinfenflegsegongengcngorgzlgslglogppgmillelqslcimcomnomadmjabimbbibbsbabcrectecsjcetcpscpvhudieticriapipsiecnbiorioecogeoteoodoproatoartfstmatvetdetbetnetcntnotfotgrueduajuespappreptmpemparqsrvadvdevgovntrturagrjorfarjusmusdesvixxyzcozfozslzbhzmaringasantamariacampinagrandegoianiasorocabafloripasaobernardocuritibaboavistarecifeaparecidasaogoncasalvadorcuiabamorenamacapalondrinacontagemsocialfortalmaceioleilaoosascoriobranconiteroi9guacutcheblogflogvlogwikitaxicoopmanauspalmascaxiasjoinvillebaruericampinassantoandreribeiraoriopretoweorgcomnetedugovv0windsurfshiptodaycloudsitecoaccoorgnetgovofmilcomgovmediatechzacoorgcomnetedugsjgovmydnspenfnlabnbmbgcbcqconcontnuyksknsmyspreadshopno-ipawdevboxbarsyonidatemfuinabusavinstanceseceuguukussryzespawncsxcloud-ipmyphotosfantasyleaguetwmailcleverappsscrappingccwucloudnsftpaccessgame-serverccgovobjectsrmalpgcust*svcalp1aeappenginermalpgmyspreadshop4lima2ixsquare7cloudscale123websitefirenet12hpflowgotdnslinkyard-cloudcloudnslima-citydnskingobjectstorageedaccogoorusorgcomnetinteduaéroportxn--aroport-byaassogouvcomilgobgovcloudnses-1eu-west-1us-east-1euvipit1eurarubait1s3lbwebsites3websiteru-spbru-mskelasticcsrunstnukukcaukusnl-ams-1fr-par-1fr-par-2functionsnodess3ddlwhmrdbfnck8sifrs3-websitecockpitscblmgdbdtwhkafkpubprivs3ddlwhmrdbk8sifrs3-websitecockpitscblmgdbdtwhkafks3ddlrdbk8sifrs3-websitecockpitscblmgdbdtwhkafkk8sscalebookpl-wawfr-parnl-amsbaremetalsmartlabelinginstancesdechk2kuleuvenlaravelvoorloperurownoxazapscwhstgrvaporobservablehqelementorantagonistreclaimjoteluluencowaydiademjelasticmatlabmagentositetrendhostingaxarnetperspectajenv-arubajelejoteravendbemergenttrafficplexconvexkeliwebserveboltbegetcdnstaticson-rancherprimetelonstackitunison-servicesdnshomelinkyardbarsyjelecloudnscocomnetgovmycn-northwest-1cn-north-1s3s3-accesspoints3-websites3s3-accesspointrdsdualstacks3-deprecatedemrappui-prods3-websiteemrstudio-prods3-object-lambdaemrnotebooks-prodexecute-apis3s3-accesspoints3s3-accesspointrdsdualstackemrappui-prods3-websiteemrstudio-prods3-object-lambdaemrnotebooks-prodexecute-apicn-northwest-1cn-north-1cn-northwest-1ebcomputeelbcn-north-1airflowcn-northwest-1cn-north-1oncn-northwest-1cn-north-1amazonawssagemakeramazonwebservicesdirectasgdsdhehahljlnmhbacscahqhshhihnlnynsnmofjbjzjxjtjhkcqtwgsjssxnxjxgxxzgz網絡网络公司orgmilcomnetedugovxn--55qx5dcanva-appsxn--io0a7iquickconnectcanvasitekhsjxn--od0algmyqnapcloudsrvrlessclustersrealtimestorageleadpagescarrdcrdorgmilcomnomnetedugovhidnssupabaserdpareplmypiumsoxmitotaplpagesfirewalledreplitowodevwebview-assetsvfswebview-assetss3s3-accesspointdualstackemrappui-prods3-websiteaws-cloud9emrstudio-prods3-object-lambdaemrnotebooks-prodexecute-apicloud9eu-west-3ap-south-2eu-south-2eu-central-2ap-southeast-3ap-southeast-4ap-northeast-3eu-central-1me-central-1ca-central-1il-central-1ap-northeast-1ap-southeast-1me-south-1af-south-1eu-south-1ap-south-1ap-southeast-7us-west-2eu-west-2us-east-2eu-north-1ap-southeast-2ap-northeast-2ap-southeast-5ca-west-1us-west-1eu-west-1us-east-1ap-east-1sa-east-1s3s3-accesspointdualstackemrappui-prods3-websiteaws-cloud9emrstudio-prods3-object-lambdaemrnotebooks-prodexecute-apicloud9s3s3-accesspointdualstackanalytics-gatewayemrappui-prods3-websiteaws-cloud9emrstudio-prods3-object-lambdaemrnotebooks-prodexecute-apicloud9s3s3-accesspointdualstackemrappui-prods3-websiteemrstudio-prods3-object-lambdaemrnotebooks-prodexecute-apis3s3-accesspointdualstacks3-deprecateds3-websites3-object-lambdaexecute-apis3s3-accesspoints3-websites3-accesspoint-fipss3-fipss3s3-accesspointdualstackemrappui-prods3-websites3-accesspoint-fipsaws-cloud9s3-fipsemrstudio-prods3-object-lambdaemrnotebooks-prodexecute-apicloud9s3s3-accesspointdualstackemrappui-prods3-websites3-accesspoint-fipss3-fipsemrstudio-prods3-object-lambdaemrnotebooks-prodexecute-apis3s3-accesspointdualstacks3-deprecatedanalytics-gatewayemrappui-prods3-websiteaws-cloud9emrstudio-prods3-object-lambdaemrnotebooks-prodexecute-apicloud9vfss3s3-accesspointdualstackemrappui-prods3-websiteaws-cloud9emrstudio-prods3-object-lambdaemrnotebooks-prodexecute-apicloud9eu-west-3ap-south-2eu-central-2ap-southeast-3ap-southeast-4ap-northeast-3eu-central-1mx-central-1me-central-1ca-central-1il-central-1ap-northeast-1us-northeast-1ap-southeast-1me-south-1af-south-1ap-south-1ap-southeast-7us-west-2eu-west-2ap-east-2us-east-2ap-southeast-2ap-northeast-2ap-southeast-5us-gov-west-1us-gov-east-1ap-southeast-6ca-west-1us-west-1eu-west-1us-east-1ap-east-1sa-east-1mrapaccesspoints3s3-accesspointdualstacks3-deprecatedanalytics-gatewayemrappui-prods3-websites3-accesspoint-fipsaws-cloud9s3-fipsemrstudio-prods3-object-lambdaemrnotebooks-prodexecute-apicloud9s3s3-accesspointdualstacks3-deprecatedanalytics-gatewayemrappui-prods3-websites3-accesspoint-fipsaws-cloud9s3-fipsemrstudio-prods3-object-lambdaemrnotebooks-prodexecute-apicloud9s3eu-west-3ap-south-2eu-south-2computes3-ap-northeast-2elbrdss3-ap-east-1s3-sa-east-1s3-us-gov-west-1s3-eu-central-1s3-ca-central-1eu-central-2ap-southeast-3ap-southeast-4ap-northeast-3s3-website-us-west-2s3-website-eu-west-1s3-external-1eu-central-1me-central-1ca-central-1il-central-1s3-us-west-1s3-eu-west-1s3-website-sa-east-1s3-website-ap-southeast-2ap-northeast-1ap-southeast-1s3-us-west-2s3-eu-west-2me-south-1af-south-1eu-south-1ap-south-1us-west-2eu-west-2us-east-2s3-website-ap-southeast-1s3-1s3-globals3-ap-northeast-3eu-north-1airflowap-southeast-2s3-us-gov-east-1s3-fips-us-gov-east-1s3-me-south-1s3-ap-south-1ap-northeast-2s3-website-us-west-1ap-southeast-5s3-eu-north-1s3-ap-southeast-1s3-website-us-gov-west-1compute-1s3-eu-west-3us-gov-west-1s3-website-ap-northeast-1us-gov-east-1s3-fips-us-gov-west-1s3-website-us-east-1s3-ap-southeast-2ca-west-1us-west-1eu-west-1us-east-1ap-east-1sa-east-1s3-us-east-2s3-ap-northeast-1authauthauth-fipsauth-fipseu-west-3ap-south-2eu-south-2eu-central-2ap-southeast-3ap-southeast-4ap-northeast-3eu-central-1mx-central-1me-central-1ca-central-1il-central-1ap-northeast-1ap-southeast-1me-south-1af-south-1eu-south-1ap-south-1ap-southeast-7us-west-2eu-west-2us-east-2eu-north-1ap-southeast-2ap-northeast-2ap-southeast-5us-gov-west-1us-gov-east-1ca-west-1us-west-1eu-west-1us-east-1ap-east-1sa-east-1rservicesbuilderstg-builderdev-builder*ociocpocsdemoinstanceeu-west-3eu-south-2ap-southeast-3ap-northeast-3eu-central-1me-central-1ca-central-1il-central-1ap-northeast-1ap-southeast-1me-south-1af-south-1eu-south-1ap-south-1ap-southeast-7us-west-2eu-west-2us-east-2eu-north-1ap-southeast-2ap-northeast-2ap-southeast-5us-gov-west-1us-gov-east-1us-west-1eu-west-1us-east-1ap-east-1sa-east-1previeweu-4us-4us-1eu-1us-2eu-2us-3eu-3appspaasrag-cloudrag-cloud-chjcloudjcloud-ver-jpcdemonodebalancermembersipeuxvsoncillaocelotonzayalilynxsphinxfentigercustomercaracalo365cloudstaticxendevapp001testcode-builder-stgplatformapimediasiteprojedrydpagesjsu2u2-localx0desazacncoitrueu4uhkukgrbrushatenadiarymyspreadshopfrom-flfrom-wvwebspace-hosttheworkpchatenablogservesarcasmapplinzisakuratanwixsiteappchizigiizeis-into-carsdnsiskinkyadobeaemcloudis-a-therapistpgfogmyvncdojinis-an-actress1kappfldrvkozowqa2jpnmexprgmrfirewall-gatewaydynnscafjsfbsbxooguyxnbayfrom-gawoltlab-demois-a-anarchistwiardwebteaches-yogadattowebtb-hostinglive-websiteservegamegotpantheonfrom-nhsubsc-payfrom-ohvipsinaappfrom-cadyndns-officehomelinuxfrom-mahercules-appservebbsstreakusercontentfrom-okfrom-wyfastly-terrariumis-a-llamaqualyhqportalserveexchangeon-vaporvivenushopciscofreakgrayjayleaguesmetaaiusercontentfrom-iais-a-libertariansaves-the-whalestaveusercontentyolasiteoperaunitepoint2thisis-a-catererlinodeusercontentfrom-vagithubusercontentsells-for-lesshosteurcanva-appsplaystation-cloudddnsfreefrom-pafrom-prfrom-waddnskingoutsystemscloudhotelwithflightmydattois-a-nascarfanmydbserverminiserverdamnserverservehumouris-a-playerfrom-nvfrom-nmemergentagentgentappsamplifyappfrom-kyis-an-accountantnfshostserveircfrom-akpythonanywherestackhero-networkpostman-echolikescandydyndns-mailobservableusercontentserveftpfreeboxosfrom-utcdn77-storageamazonawsneat-urldyndns-serverlinodeis-a-teacherfrom-vtgleezemythic-beastsus1-pleniteu1-plenitla1-plenitpaywhirlservecounterstrikejdevcloudhealth-carereformis-into-animegoogleapisis-a-painterafricaisa-hockeynutatmetais-an-actora2hostedis-a-democratdatadetectest-le-patrondigitaloceanspacesis-a-designeris-a-hunterlinodeobjectstemp-dnsissmarterthanyoufrom-arsimplesiteevennodetownnews-stagingis-a-liberalgooglecodejelasticservemp3stdlibqualyhqpartnerdyndns-free1cooldnsest-a-la-masiondrayddnsdynuddnsfrom-orfrom-miis-a-bloggerfrom-himydobisscanvacodeis-an-engineerest-a-la-maisonupsunappdevinappswafflecellmyasustorwpenginepoweredfrom-ctservep2psame-appmyshopblocksthingdustdatalikes-piediscordsezis-with-thebanddev-myqnapcloudlpusercontentis-leetshopitsite3utilitiesis-a-personaltrainersinaappladeskis-a-cheflogoipselfipbase44-sandboxnospamproxyalibabacloudcsmesswithdnsauthgearappsiamallamawithgooglelutrausercontentmochausercontentframercanvasmytabitdyndns-homew-credentialless-staticblitzcpserverdiscordsaysis-a-nurseappspotatlassian-isolated-3premotewdfrom-mtwixstudiocode0emm180rmyactivedirectoryawsappsmytuleapdnsabrpolyspaceqbuserrenderbuiltwithdarkboutirgotdnsabrdnsdopaascanva-hosted-embedawsglobalacceleratorhomesecuritypcmyiphostditchyouripclever-clouddyndns-ipon-aptibleis-a-musiciansecuritytacticsappspaceusercontenthomeunixstrapiappsame-previewcf-ipfsmycloudnaselasticbeanstalkis-certifieddontexistkasserverik-serverdrive-platformatlassian-3pfirebaseappherokuappawsapprunnerbarsycenteris-a-cubicle-slaveservehttpmyshopifyis-a-guruquicksytessiiitesorsitesmagicpatternsappis-a-cpameteorappfrom-wiis-a-rockstarbumbleshrimpdattolocalreadthedocs-hostedfrom-rifamilydsdyndns-picsplesknsbplaceddnsaliasdynaliasdyndns-remotedoomdnsip-ddnsblogdnsis-a-doctorroutingthecloudamazoncognitobarsyonlinedsmynasddnsgurucloudflare-ipfsdeus-canvasfrom-idsmushcdnpagespeedmobilizerdyndns-at-homeunusualpersonhosted-by-previderis-a-republicandyn-o-saurstreamlitappworkisboringonthewificprapidqualifioappis-uberleetis-slickgetmyipwpdevcloudtypeformdyndns-at-workgentlentapismynascloudw-corp-staticblitzfrom-ingeekgalaxyservebeerfrom-mdonrenderspace-to-rentaivencloudappspacehostedonfabricawafaicloudcodespotblogspotatlassian-3p-us-gov-modfrom-ndfrom-msis-a-techieis-a-studentcustomer-ociis-a-photographerdurumisfrom-ksmassivegriddyndns-wikiis-an-entertaineris-a-hard-workermysecuritycamerafrom-mnrackmazedyndns-blogis-a-bulls-fanwritesthisblogfreemyipsimple-urlfrom-sdreservdauthgear-stagingest-mon-blogueuris-into-gamesrice-labsxtooldevicesakurawebis-an-anarchistoraclecloudappsdyndns-worksells-for-urhcloudfrom-dcfastvps-serverwpmucdnis-a-geekscrysecfrom-txis-into-cartoonsmodelscapetrycloudflarelocaltonetstreak-linkbalena-devicesfrom-njforgeblocksfreebox-oswebadorsitefrom-ncdoesntexisthobby-sitestreaklinkshomesecuritymacownprovidertuleap-partnersdattorelaywphostedmailalpha-myqnapcloudservequakeis-a-socialistservehalflifepivohostingdynuhostingquipelementsw-staticblitzdyndns-webfrom-deproject-studyaliases121is-not-certifiedhercules-devis-a-financialadvisorservepicsis-a-greenloseyouripfrom-ilwithyoutubemwcloudnonprodwiredbladehostingdnsdojofrom-tnpixolinomyqnapcloudis-an-artisthostedpiis-a-landscaperauiusercontentoaiusercontenton-forgeis-a-conservativedreamhostersnet-freaksapps-1and1is-goneencoreapifastly-edgefrom-nesalesforcefrom-scdeployagentoraclegovcloudappsfrom-alis-a-lawyercechirevultrobjectsstufftoreadisa-geekddnsgeeklovableprojecttry-snowplowfrom-moblogsyteis-a-bookkeepernogmyforumravendbmyboxdeelementoredsaacficogoorinforgcomgobnatneteduidstoreorgcomnetintedudevnomepublorgcomneteduathgovtestscalculatorspaynowinfoquizzesresearchedcloudnsfunnelsassessmentsjscaleforcetmacltdorgmilcompronetgovbizpresseklogesrsccloudcustomfltusrcloude4corealmgovmunicontentproxy9metacentrumdyndyndyndnsdynpagespages-researchitionoccustomercomymyspreadshopipv64diskussionsbereich4limacomrub2ixfirewall-gatewayddnssspdnsbarsykeymachinesquare7myhome-serverspeedpartnercommunity-proschuldockxenonconnectgünstigliefernbwcloud-os-instancedyndnssecmy-routerxn--gnstigliefern-wobin-butterl-o-g-i-nisteingeekin-dslin-berlinin-brbfuettertdasnetzleitungsenin-vpnlcube-serverdyn-ip24logoipdyn-berlinruhr-uni-bochum12hpgoipsrvdnsfruskygit-repossvn-reposinternet-dnsgünstigbestellenhome-webserverxn--gnstigbestellen-zvbbplacedheimdnscosidnswebspaceconfiglima-citydyndns1istmeinvirtualuserschulplattformmy-gatewayddnsseclebtimnetztest-iservmein-iservvirtual-userhome64iservschuletaifun-dnstraeumtgeradeschulserverdynamisches-dns123webseitednshomehs-heilbronndnsupdaterbssgraphicdwadpdwdaepeweaawapaafpfwfabwbpbacwcpcciwebuserapiobjectsidsiskospockkimodorikerbonesteamsparisjanewaypicardglobaltarpitreedpikekiraworfsulukirkarchertuckerhackercanarywesleystagingprereleaset3r2lpbravepanelngrokiservstglclcrmerpflypagesbarsyvivenushoplocalcertlocalplayerbearbloggatewaydeno-stagingis-not-ais-a-goodbotdashvercelmocha-sandboxplatter-appreplitgithubpreviewworkersinbrowserevervaultdetais-ahrsndenoxmitmodxmyaddrstorageapipayloadgrebedocruncontainersstgstagelclstageloginlineis-a-fullstackleapcellngrok-freeis-coolstoragewebharemediatechlibp2pdiscourseimaginecomyspreadshopstoreregbiz123hjemmesidefirmcoorgcomnetedugovsldorgmilcomwebgobartnetedugovtmorgpolcomsocartnetedugovassoagrondiscoodontk12medcuegyecpaabgengorgmilgalsaltulcomadmesmgobpubdocmonfindgnriouioproartlatvetnetfotedulojgovntrturibrbarxxxofficialbasechefprofmktgpsictechinfoarqtcontdentrrpppsiqgit-pagesritmedfieorgcomlibprieduaipgovriikmeactvsportorgmilcomscieunnetedugovnameinfopintouchtawktotawkmyspreadshoporgcomnomgobedu123miwebcomputeorgcomnetedugovbiznameinfocognito-idpeusc-de-east-1onjelasticnxaspdnsbarsydirectwpdeuxfleurstransurldogadoprvwcloudnsamazonwebservicesdnshomeuserpartycokoobinmkmstorjfidemopaasdymyspreadshopalandkapsiikixn--hkkinen-5wacloudplatformdatacenterhäkkinen123kotisivuidacorgmilcompronetedugovbiznameinforadioorgcomneteduuserexperts-comptablestmmyspreadshopgretaprdcomnomynhccifbxoshuissier-justicenotairesaeroportfreeboxoson-webavocatassoportgouvkdnschirurgiens-dentistes-en-franceavouesfbx-os123sitewebveterinairechirurgiens-dentistespharmacienchambagrimedecinfreebox-osdediboxgoupilemszicpyicpvicppleysheezypagesedugovcnpyorgcomcybllcpvtnetedugovtnxonlineschooldaemond6atcopanelorgnetplybotdashstackitkaasorgmilcomnetedugovbizmodltdorgcomedugovcoorgcomneteduappwriteacorgcomnetedugovcloudtranslateusercontentorgcomnetedumobiassoorgcomnetedugovbarsysimplesitediscourseindorgmilcomgobneteduorgcomwebnetedugovguaminfonxhra教育敎育網絡网絡组織組織网络網络组织組织公司政府個人个人箇人ltdorgcomincneteduidvgovxn--uc0ay4axn--55qx5dxn--mk0axixn--io0a7ixn--uc0atvxn--zf0avxxn--lcvr32dxn--od0algxn--wcvs22dxn--gmqw5axn--od0aq3bxn--mxtq1mxn--ciqpnxn--tn0agxn--gmq050iorgmilcomgobneteduiservwp2tempurlmircloudfreesitewpmudevmyfastgadgetcloudaccessjelehalfboltfastvpsemergenteasypanelopencraftizcombrendlynamefromrtpersoadultmedorgpolrelcomproartnetedufirminfoassoshopcoopgouvtmcomediahotelforumvideosportorgsexagrargameslakaseroticaerotikatozsdereklamcasino2000filmsuliinfoboltshopprivnewsszexcityutazasjogaszkonyveloingatlaneacaicogoormyᬩᬮᬶmilwebschnetkopbizzonedesaponpesxn--9tfkymyspreadshopgovmytabittabitorderravpageaccok12idforgnetgovmuniltdplcaccotttvorgcomnetmeca6g5gpgamubacaicniocoukuptverdruscsdelhiindorgmilcomwebnicfingenpronetintedugovresbizbiharbarsyinternetbusinessschooltravelsupabasealumnigujaratfirminfoaeropostbankcoopindevscloudnsno-ipbarsybarrell-of-knowledgebarrel-of-knowledgensupdategroks-thisdnsupdatefor-ourknowsitalldvrcammittwalddynamic-dnsv-infowebhopselfipdyndnshere-for-moreilovecollegemayfirstforumzcloudnsmittwaldservertypo3servergroks-theeusekd1uk0cdndyndnsidrawsainaueuapjpusstagemocksysdevicesclientcustreservdcustdevdisrecprodtestingcobeebyteutwenteboxfusebravepstmndedynngrokorgmilcomnomhzcnetedugovqcxqzzbarsythingdustmo-siemensrb-hostingprotonetfh-muenstergitbookbluebitecloudbeesusercontentnodeartkiloappsforgerockdarklangresinstagingapigeebubbleb-datascryptedhypernodedappnodepantheonsitegitlabgithubkeeneticvirtualservercleverappshostyhostingon-rioedugitticketstelebiton-acornwixstudioon-k3sicp0icp12038jeleqotobigvlairbubbleappsmyaddrstolosmyrdbxwebflowdrive-platformbeagleboardhasura-applolipopdefinimavaporcloudmusicianwebflowtestazurecontainerresindevicereadthedocsloginlineeditorxmoonscalesandcatsbasicserverwebthingsbrowsersafetymarkbeebyteappbitbucketidaccovistablogorgschnetgovxn--mgba3a4f16axn--mgba3a4fraarvanedgeايرانایرانjclaspeziapdudcefegelemeperetevebacanatavaparasabgagfgogrgpgalclblimfmrmcbmbvbfclcmcvcrcpcchlimifibicivipirisimncnbnanenrnpntnnolomobocoaogorosopotoptvtatctbtmtltotpulunutpspapaqsvpvvvtvavvrtrsrprgrfrcrbrarorkrvstsssbscsmsispzczbzbozen-suedtirolmyspreadshopxn--bulsan-sdtirol-nsbxn--valledaoste-ebbtrentinoaltoadigetrentin-sued-tirolxn--forlcesena-c8axn--forl-cesena-fcbxn--bozen-sdtirol-2obtriestetrentinsuedtiroltrentino-s-tirollecceudineaostesienaparmaluccapaviagenoapaduaaostamonzaabruzzoternirietiturinmilanbozenlaziofermoleccocuneonuoropratola-speziavdataaligfvgpugmolcalcamlomumbsicpmnvenvaoedugovabrsarmaremrbastoslazibxosfirenzetrentinosüdtirolval-d-aostavalle-aostamessinacremonaravennatoscanatrentin-suedtirolbolognacalabriaurbinopesarofriuli-v-giuliaogliastraxn--valle-aoste-ebblaquilaandriatranibarlettasyncloudtrentinosudtirolxn--valle-d-aoste-ehbaostavalleyvalled-aostatrentino-alto-adigevallee-d-aostexn--balsan-sdtirol-nsbpistoiasicilialucaniacataniaiserniaperugiabresciaveneziagorizialiguriaimperiabulsan-suedtirolbalsan-suedtirolbarlettatraniandriaxn--trentino-sdtirol-szbforlì-cesenatuscanyvallée-d-aostemantovavallée-aostecasertapiemontevalleaostaval-daostafriulivgiuliatrevisoforli-cesenavalléedaosteferrarapescaravald-aostatrentino-altoadigefriuli-vegiuliavallee-aostecarboniaiglesiastarantomediocampidanovalleedaostetrentinosud-tirolcampobassotrentinsüd-tiroltrentinosüd-tirolmonzabrianzatrentino-südtirolxn--trentino-sd-tirol-c3bpotenzacosenzavicenzaemiliaromagnavenicefrosinonemarchepordenonetrentinosued-tirolvaresemolisevalléeaostefriuli-veneziagiuliabasilicatalatinaanconasavonaveronamodenaaquilabiellabolzano-altoadigepugliafoggiaumbriatrentino-stirolgenovapadovamateranovararagusapiacenzatrentinostirolvalleeaostetempio-olbiatrentinsudtirolmassa-carrarafriuliveneziagiuliatrentinosuedtirolandria-barletta-tranitrapanixn--cesenaforl-i8amaceratacaltanissettaascoli-picenobrindisicarraramassacagliaririmininapolivibo-valentiachietibulsan-sudtirolbalsan-sudtiroltrentino-a-adigebulsanbalsaniglesiascarboniamilanotorinoteramodell-ogliastraarezzotrentinoalto-adigerovigotrentovenetoiglesias-carboniatrentino-sud-tirolaltoadigereggio-emiliareggio-calabriasardegnatranibarlettaandriapiedmontxn--sdtirol-n2amedio-campidanotrentino-süd-tirolfriuli-vgiuliafriuli-ve-giuliaromeennaromapisa32-b16-b64-blodiastibarineencomonaplesforlicesenailiadboxosalessandriasicilytrani-barletta-andriaxn--trentin-sdtirol-7vbpesarourbinotrentinsued-tirolcesena-forliforlìcesenaemilia-romagnamonzaebrianzaxn--trentinsdtirol-nsbtrentinos-tiroltrentinsüdtirolvalledaostaolbia-tempiocampidanomediovibovalentiasassarivalle-daostalombardyfriulivegiuliareggioemiliamonzaedellabrianzaalto-adigevercellitrentin-sudtiroltraniandriabarlettatrentino-sudtirolascolipicenobozen-südtirolfriulive-giuliaflorencevaldaostaxn--cesena-forl-mcbcarbonia-iglesiasaosta-valleycarrara-massadellogliastratrentinoa-adigexn--valleaoste-e7apesaro-urbinoxn--trentinosdtirol-7vbxn--trentin-sd-tirol-rzbxn--trentinsd-tirol-6vbtrani-andria-barlettatrentin-süd-tirolxn--trentinosd-tirol-rzbgrossetomonza-e-della-brianzasüdtirolreggiocalabriatrentinoaadigetrentin-südtirolfriuliv-giuliaverbaniacampaniatrentino-aadigefriulivenezia-giuliasardiniaandriabarlettatranibarletta-trani-andriacatanzarooristanourbino-pesarocesena-forlìvalle-d-aostacampidano-medio123homepagesiracusatempioolbiasuedtirollombardiaavellinocesenaforlìtrentinofriuli-venezia-giuliabozen-sudtirolandria-trani-barlettabulsan-südtirolbalsan-südtirolmonza-brianzabolzanotrentino-sued-tirolbellunosalernolivornocrotonesondriodnshometrentinsud-tirolmassacarraratrentin-sud-tiroltrentino-suedtirolviterbobergamocesenaforliolbiatempiopalermobeneventoagrigentoofcoorgnetfmaitvphdengorgmilcomschnetedugovperagrikanieasukehandachitatokaiaisaikonanoharuamaobuhigashiuraowariasahiinuyamatobishimaiwakurashitarainazawatoyonegamagorimihamatoyotataharakariyayatomioguchikomakimiyoshinishiotokonamekiyosuchiryutoyohashiokazakiisshikikasugaikotakiratoeianjotogofusosetohazutsushimashinshirotakahamanisshinshikatsuhekinantoyokawaichinomiyatoyoakeodateogataakitaikawakyowahonjoogayurihonjonoshirokamiokakatagamimitanegojomeyokotekosakadaisenkazunonikahohonjyomoriyoshimisatohappoukamikoanihachirogatahigashinarusesembokufujisatokitaakitaitayanagiowanitakkomutsutsurutahirosakigonoheoirasetowadamisawanohejiaomorishingohiranairokunohehashikamitsugarushichinohehachinohenakadomarisannohekuroishisakaeisumiasahiotakiinzaiabikomatsudoyachiyomutsuzawakujukuriomigawakashiwatoganemihamanaritasakuranagaramobarahanamigawachoshishiroichoseikozakishisuikatorimidorichonankyonanfuttsuonjukufunabashinagareyamanodasosatakochuotohnoshourayasukimitsuyokaichibayotsukaidosodegauratateyamakamagayayokoshibahikariyachimatakatsuuratomisatokisarazukamogawaichikawanarashinoichinomiyashimofusaminamibososhirakoichiharaoamishirasatoikatahonaiainansaijoseiyoiyoozuuwajimaniihamanamikatamasakiuchikokihokutobetoonshikokuchuomatsuyamaimabarikamijimakumakogenyawatahamamatsunosabaeikedaobamasakaifukuiohionotsurugamihamawakasaminamiechizeneiheijikatsuyamatakahamaechizensoedaukihaomutaokawanishiogoribuzenonojosueumiokiotochikugosasagurisaigawamizumakishinyoshitomikurumekurateyamadakasuganakamamiyamanogatatakatahakataiizukakawaratagawakasuyaashiyainatsukimunakataminamitsuikishonaikurogifukuchikeisenhigashimiyakoshinguyukuhashiokagakiyamekogaongausuikahotohochuotoyotsumiyawakadazaifuhisayamatachiaraiyanagawanakagawahirokawachikujochikushinochikuhochikuzennamieotamaokumashowateneiiwakikoorinangoononishigoshimogoomotegomishimafukushimaasakawakagamiishishirakawaiitatefutabahiratayugawahanawakitakatakawamatakunimiyabukibandaihigashihironoyamatomiharuyamatsuriaizubangedatesomaaizuwakamatsuyanaizuaizumisatonishiaizuizumizakikitashiobarataishinkaneyamakoriyamainawashirotanagurafurudonosamegawasukagawaishikawatamakawaikedaogakitaruiginanenahashimahichisonakatsugawaibigawashirakawamizunamiminokamomitakekawauesekigaharatomikasakahogikitagatayamagatatajimianpachimotosuyaotsukakamigaharahidakanisekitokigujominogodoyorogifukasamatsutakayamawanouchihigashishirakawakasaharashimonitatsumagoichiyodakannakanrashowameiwakiryuotaoratomiokafujiokaitakuranaganoharahigashiagatsumatakasakishibukawaminakamikatashinatsukiyonokawabanumataannakaoizumimidorishintoisesakiuenoyoshiokakusatsutakayamanakanojonanmokutamamuratatebayashimaebashiotakekaitadaiwahongofuchukuietajimashobaramiharahatsukaichihigashihiroshimamiyoshikumanokurenakasakaseraseranishiasaminamifukuyamashinichionomichiosakikamijimajinsekikogentakeharaotobenanaeikedatohmaozoraobiraabirakyowaeniwataikibibaisharirebunerimohiroooketootarupippunishiokoppechitosefurubirahakodateshiranukakitahiroshimakushiroobihironanporoiwamizawaniikappukunneppufukushimanakasatsunaitoyourakuromatsunaiakabirakamisunagawashibechaurakawakamifuranonakatombetsuasahikawashimokawakayabeokoppebiratoriabashirisaromaatsumanumatahidakabifukamukawamikasahorokanaitoyotomisarufutsuhigashikawaishikarikitamiyoichiesashiiwanaitomariminamifuranoakkeshifuranotoyakoyakumootoineppushikaoishiraoinemuronayorohaboroashorobihororishirifujiutashinaihokutotakasuebetsuurausuassabukikonaishimamakinaiedatetoyabieinikiesanuryuoumuteshikagarikubetsuashibetsukimobetsuaibetsutobetsusobetsuembetsushimizuchippubetsurishirihokuryuhoronobeshintokutsubetsushibetsuhonbetsumombetsutsukigatakuriyamakoshimizushiriuchikutchanmurorannoboribetsukamishihorowassamushinshinotsukembuchiwakkanaikamoenaikiyosatotakinoueshikabesunagawafukagawanakagawatakikawakamikawahigashikagurahamatonbetsumatsumaemoseushirankoshishakotanimakanemashikeotofuketomakomaisandatambaitamiawajikasaiasagoshisoonoakoyashirotoyookaminamiawajiinagawafukusakitakasagokamigorikasugaharimayokawaashiyahimejiakashitaishiaogakisannantakinosumototakarazukanishinomiyashingugoshikinishiwakiyokatakaaioimikisayoyabukawanishiamagasakisasayamashinonsenkakogawaichikawakamikawatatsunotsukubaiwamaogawaasahisakaitokaioaraiitakobandodaigosuifuinaamikasumigaurakashimaomitamayachiyoshimodatetomobetoridehitachinakainashikisakuragawakasamayawaramoriyahitachiomiyanamegatayamagatahitachikamisuushikutakahagiibarakitonekoganakasowayukimihojosomitoryugasakishimotsumafujishirotsuchiurachikuseihitachiotashirosatotamatsukuriuchiharashikahakuinanaotsubatawajimakahokukawakitatsurugikaganominotosuzuuchinadakomatsuanamizunakanotohakusannonoichikanazawaiwateshiwafudaikawaimoriokaofunatohanamakikuzumakikitakamininohekunoheyamadayahabasumitaichinosekitanohatahiraizumirikuzentakatajobojiotsuchihironomiyakoiwaizumikarumaiichinohenodakujitonooshushizukuishifujisawamizusawakamaishikanegasakimannoutazukotohiraayagawazentsujihigashikagawauchinomikanonjisanukimarugamemitoyotakamatsutadotsunaoshimatonoshoakuneamamiizumihiokiyusuikinkoisasookouyamanakatanekagoshimakanoyaisenkawanabeminamitanemakurazakitarumizunishinoomotematsumotosatsumasendaioimatsudaayaseebinamiurazushinakaiodawaraiseharasagamiharahakoneaikawakaiseiatsugitsukuihadanoyamatoyamakitazamaoisochigasakininomiyayokosukakamakuraminamiashigarafujisawasamukawakiyokawahiratsukayugawaraokawaumajikochitsunootoyoakiinonishitosayasudahidakamiharasakawaniyodogawahigashitsunokagamigeiseisusakiotsukinaharisukumomurototosakamiochitoyotosashimizumotoyamanankokunakamurakitagawayusuharaogunichoyoukiasoutoozugyokutoamakusamifunetakamoriyamagaminamataminamiogunikikuchisumotoyamatonagasumashikiaraokumamotokamiamakusanishiharayatsushiroayabeseikasakyoideineujinakagyokameokakyotangokyotanabekyotambaminamiyamashiroyamashinatanabeyawatawazukaminaminantanmiyazuhigashiyamafukuchiyamakitamukokamojoyokizumaizuruujitawaraoyamazakinagaokakyokumiyamakawagoeinabeshimameiwaasahitaikiudonoisetsukisosakikuwanamihamamiyamasuzukatamakimisuginabarikumanokomonominamiisewataraitobakiwatakikihotadomatsusakayokkaichikameyamaureshinoishinomakishichikashukuohirataiwaosakizaohigashimatsushimashikamaiwanumashibataogawaraonagawakawasakiseminemarumoriminamisanrikukakudamuratawakuyatomiyanatoriwataritagajomisatotomekamirifushiroishimatsushimayamamotoshiogamafurukawahyugaebinotsunosaitoayakushimanobeokakitauramiyazakitakazakigokaseshiibamimatashintomikunitomikitakatakobayashikawaminamitakaharukijotakanabemiyakonojonishimeranichinankitagawakadogawamorotsukakisofukushimaminamimakisakaeobuseikedaogawamiasaokayaasahiotakiotarichinoinaomichikumakomaganechikuhokukaruizawayasuokaooshikaikusakaminamiaikitogakushimatsukawakawakamitateshinatakamorikitaaikishiojirimiyadahakubaiizunaiijimaiiyamamiyotasuzakayasakatoguraookuwanagawaminowahirayayamagataminamiminowafujimiomachisakakitakaginaganonakanosakuhokomoronagisoshinanomachiwadauedaiidaharasuwatomiachiaokianankisosakunozawaonsenagematsutakayamashimosuwamatsumotoyamanouchinakagawamochizukiazuminotatsunoobamaomuraseihiunzenosetofutsuikichijiwanagasakiisahayahasamisaikaikawatanasasebohiradokuchinotsugototogitsutsushimashimabarashinkamigotomatsuurayamazoekashibaikomakawaitenrioyodosangokoryoudaojiikarugayamatokoriyamatenkawakatsuragikurotakikawakamimiyakemitsuetakatorikamikitayamayamatotakadahegurishinjokanmakisakuraitawaramotogoseoudanarasoniandokawanishishimoichihigashiyoshinokashiharashimokitayamanosegawayoshinomintsivorytopazsakuragehirnsumomoaseinetopalmail-boxmokurenyoitamuikaojiyagosensanjoaganomyokoseiroagaomishibataniigatanagaokamurakamiuonumayuzawakariwatagamitainaitsunanminamiuonumatochioyahikojoetsuseiroukamosadoizumozakitokamachiitoigawasekikawakashiwazakitsubamemitsukekokonoesaikiusukibeppuusahimeshimakunisakihasamataketatsukumihitaoitahijikusuyufukujukamitsuebungoonobungotakadaibaraniimibizentsuyamaokayamakasaokahayashimayakagemaniwaakaiwamisakishinjotamanotakahashikibichuowakesojanagishookumenannishiawakurakurashikiasakuchisetouchikagaminosatoshotomigusukunakagusukuyaeseizenaurumaiheyaaguniogiminanjokinminamidaitokitanakagusukuyonaguniokinawaishigakikunigamiurasoekadenataramahiraraginozataketomishimojizamamitonakiitomanhigashimotobuyonabarugushikamionnanahanagohaebarukumejimakitadaitonakijinnishiharayomitanginowantokashikiishikawaikedasuitaminohizuminishisakaikananabenodaitoosakasayamayaokishiwadatadaokakaizukatondabayashichihayaakasakakumatorikadomasayamahigashiosakashijonawatehirakatataishimisakitajirihannansennankatanotoyonominatosettsuhigashiyodogawaibarakinosekitachuohigashisumiyoshifujiiderakashiwaraizumiotsutoyonakamatsubaramoriguchiizumisanoshimamototakatsukineyagawahabikinotakaishikawachinaganoyoshinogarikamiminearitaouchiimarihizenogikashimaariakekiyamafukudomikitagatakitahataomachigenkaikanzakinishiaritakyuragisagataratosutakushiroishikaratsuhamatamakouhokukawagoeyoshidasatteogoseirumaasakaurawaogawaniizaomiyayoriiotakishikihonjooganohannohanyuinasaitamaokegawaarakawayoshikawayokozehasudasayamahidakafukayachichibuiwatsukiryokamiyoshimikamiizumifujimiwarabiranzanmiyoshiminanoyashiosakadosugitomisatohigashichichibutodasokakukiyonokazoshiraokakasukabekounosukawajimatsurugashimamiyashirokitamotohatoyamamoroyamahatogayakumagayakawaguchinagatorokamisatomatsubushinamegawatokigawakamikawafujiminohigashimatsuyamakoshigayatokorozawas3isk01isk02ryuohkoseikonanaishorittotakashimamaibarahikonetorahimenishiazaikokagamokotoyasuotsukusatsunagahamamoriyamatoyosatotakatsukinotogawaomihachimanhigashiomiakagiunnanizumogotsuamayatsukakakinokimatsuehamadamasudahikawahikimiokuizumoyasugiyakumomisatotamayuohdahigashiizumookinoshimanishinoshimatsuwanoshimaneshimadafujiedayoshidashimodagotembaiwataatamikosaiyaizuitoizumishimahaibaramakinoharaomaezakikawanehonkannamisusonohigashiizufukuroinumazukawazufujiaraishizuokahamamatsushimizuizunokunimatsuzakimorimachiminamiizunishiizukikugawakakegawafujikawafujinomiyaujiietsugaoyamayaitaohiranikkoashikagakuroisokanumasakurashioyakarasuyamamotegiichikaikaminokawatochigihagamokanogisanobatonasumibunasushiobaranishikatautsunomiyaiwafunemashikoshimotsukeohtawaratakanezawaitanokomatsushimatokushimaichibaminamiaizumiwajikikainanmiyoshinarutomimamugiananmatsushigesanagochishishikuinakagawamachidachiyodakomaefussainagitaitochofufuchuomeotahigashiyamatotoshimaokutamaaogashimakodairaedogawaarakawahachiojishinagawatachikawashibuyasuginamihinodekiyosesumidaoshimanerimamitakahamuraadachinakanomizuhobunkyomegurominatokoganeihigashikurumekokubunjihigashimurayamamusashimurayamatamakitahinochuokotokatsushikakouzushimaogasawaraakishimakunitachishinjukusetagayamusashinohachijoitabashiakirunohinoharachizunanbukotouramisasawakasayonagokogehinoyazutottorinichinansakaiminatokawaharaoyabetairainamiasahinantoimizufuchutakaokakurobeyamadajohanatoyamatonaminyuzenfunahashinakaniikawanamerikawaunazukitogahimiuozufukumitsutateyamakamiichiiwadearidayuasainamitaijikatsuragiaridagawatanabemihamahidakakainankiminomisatoshingushirahamakamitondayurakozakoyagobokitayamawakayamakudoyamahashimotokushimotokozagawahirogawakinokawanachikatsuurarsuseroeoishidasagaeoguniasahinagaitendonanyoobanazawanishikawasakataohkuratozawamikawamamurogawayamagatafunagatatakahatashonaishinjokahokuiideyuzakawanishitsuruokakaminoyamayamanobeshiratakamurayamanakayamakaneyamahigashineyonezawasakegawamitouubeyuuabushimonosekitabuseoshimatoyotaiwakunihikarishunannagatohagihofukudamatsutokuyamashowadoshitsurunanbukoshukaiminami-alpsnirasakikosugeotsukioshinohokutominobuyamanashifuefukichuokofuichikawamisatoyamanakakonakamichitabayamanishikatsuranarusawafujikawahayakawafujiyoshidafujikawaguchikouenohara長野京都岐阜大阪三重群馬千葉滋賀佐賀奈良adednelgaccogogror秋田愛知高知埼玉沖縄栃木熊本岩手青森山梨新潟島根鳥取長崎香川宮城石川大分宮崎茨城山口兵庫山形徳島広島福島福岡岡山富山静岡愛媛福井東京xn--4it168dhatenadiaryxn--vgu402ckawaiishophatenablogcocottenamaste北海道penneehimeiwateversestabachibashigagonnagunmapermahaccaakitaosakauh-ohblushkochiaichifukuikuroncapooitigohyogotokyokyotopunyuthickcheap0t00g00j0mie2-ddaapyawjg0amfemsubxiiboomoobutchueekpgwrgrherskrboyrdyupperunderflierchipsmydnsheavyangryhippygirlyrulez神奈川鹿児島和歌山bambinaxn--nit225kokayamasaitamaxn--k7yn95exn--1lqs03nsapporoparasitelolipopmcxn--efvn9sniigatafukuokatokushimafukushimahiroshimakagoshimafakefurokinawaxn--8pvr4ucoolblogxn--0trq7p7nnkawasakinagasakimiyazakichilloutxn--8ltr62kxn--klty5xpeeweezombiecutegirlxn--rny31hxn--uuwu58axn--ntso0iqx3axn--djrs72d6uytoyamanikitanyantakagawamimozanagoyaboyfriendxn--2m4a15egreaterchowderegoismyamagatafashionstorexn--elqq16hxn--pssu33lsendaimiyagixn--rht27zpecoriaomorisaloonwatsonvivianxn--djty4knobushipigboatnaganopinokoxn--f6qx53asadistvelvetsecretxn--5js045dchicappayamanashiibarakidigickgirlfriendxn--1lqs71dmongolianxn--c3s14mxn--qqqt11mtochigixn--5rtq34kparallelo0o0mondkobesagabonadecaoitanarafoolkilldecimainhiholomosblokilociaoundopupugifutankcrapflopnooroopsmodsholyjeezstripperpepperbittershizuokaxn--rht3dkitakyushureadymadeicurusversusmatrixxn--rht61ehungryfloppygloomycrankyhandcraftedlittlestarxn--klt787dxn--kltx9awhitesnowsunnydaytottorilovepoptheshopbuyshopxn--5rtp49cxn--d5qv7z876cwebaccelxn--kbrq7oxn--4pvxsxn--1ctwolovesickkumamotocatfoodxn--tor131oyokohamawakayamatonkotsuxn--ehqz56nxn--uist22hxn--6btw5axn--kltp7dyamaguchifrenchkisspussycatxn--4it797kxn--uisz3gbabybluexn--zbx025dnetgamersxn--7t0a264ckanagawaxn--6orx2rishikawaxn--ntsq17ghalfmoonschoolbusjellybeanxn--mkru45iusercontentlolitapunkxn--32vp30hsakurastoragehokkaidoshimanecandypopbabymilksupersaleweblikeraindropbackdropwebsozaikikirarahateblodaynightmeneacsccogoormobiinfoaeusxxorgmilcomnetedugovorgcomnetedugovbizinfotmprdorgmilcomnomedugovassnotairespresseassocoopgouvveterinairemedecinpharmaciensorgnetedugovtraorgcomedurepgovmeneperekgacscaiiocogoitoresmshsseoulbusanulsandaeguc01milvkimmvchungnamjeonnamjeonbukeliv-dnsgyeonggijejueliv-cdnincheondaejeongangwongyeongbukgwangjuchungbukgyeongnameliv-apicoeduindorgcomembnetedugovorgmilcomnetedugovjcloudorgcomnetintedugovperbnrinfocooyorgcomnetedugovipfscanvamypepw3sstorachakeeneticjoinmcinbrowserdwebcyonnftstoragemyfritzaemewphlxachotelltdorgcomwebsocschngonetintedugrpgovassnomgacsccoorgnetedugovbizinfo123websiteidorgmilcomasnnetedugovconfidmedorgcomplcschnetedugovaccoorgnetgovpresstmassoirseproxaccosoundcasthoptocraftvp4c66orgnetedugovitsmcdirmyboxbarsyedgestacksynologylogintonohostwebhopdiskstationi234tcp4hoocgroknoipprivmydsddnsdnsforlohmustransipdscloudfilegear-sgbrasiliafilegearframerbarsybarsyonlinecoprdorgmilcomnomedugovinforgcomnetedugovnameacprorgcomartnetedugovpresseinfoassoinstgouvorgnycedugovbarsydscloudjuorgcomnetedugovminisiteaccoororgcomnetgovorgmilcompronetintedugovbizmuseumnameinfoaerocoopaccoorgcomnetintedugovbizcooporgcomgobneteduorgmilcomnetedugovbiznameaccoorgmilneteduadvgovcoorgcomnetaltgovforgotherhiskeeneticispmanagernomassoprod5476132eastasiacentraluswesteuropewestus2eastus2rucdnwest1-usfra1-desandboxjls-sto1jls-sto3jls-sto2aglobalabglobalsslmapprodfreetlsmaplon-1lon-2ny-1fr-1sg-1ny-2paassnwebpaashostingjelasticnordeste-idcsocuserpagescwebfileblobservicebuscoreatlricnjsjelasticwebsitestoragesezagbinruhuukjptsmyspreadshopmynetnameakamaiorigin-stagingfrom-coipv64dynv6cdn77serveblogadobeaemcloudhicamsprytdnsupno-ipownipde5ovhicpfirewall-gatewaysytesmypsxbarsyusgovcloudapimyamazemyradwebakamaihdsaveincloudfastlylbfrom-lasubsc-paysquare7in-the-bandblackbaudcdnhomelinuxoninfernoctfcloudservebbsdns-dynamiccloudfrontakamai-stagingipifonyham-radio-opsenseeringclickrisingcommunity-profrom-nylocalcertgrafana-devedgesuite-stagingcloudflareanycasteating-organicatlassian-devmydattofeste-iplocaltotorprojectknx-serveredgekeycloudflareglobalcloudyclustercasacamserveftpakamaized-stagingakamaiorigindns-cloudmyeffectboomlabotdashbuyshousestwmailhetemlazure-mobilein-dslthruhereredirectmedynuddnsbouncemesupabaseluyanicloudappakamaicloudfunctionsdebiannhlfanpgafanstatic-accessin-vpnmysynologymafeloappudohomeftptrafficmanagersiteleafseidatmemsetcloudflarecloudaccesskeyword-onazure-apiis-a-chefdoes-itgets-itwebhopselfiphomeipkicks-assedgesuitewindowsserver-ontunnelmolemydissentscrapper-sitecloudflarecnuni5srcfggffiobbzabcdenodynuopikddnsvpndnsakadnselastxkinghostvps-hostfastlyhomeunixazureedgeshopselectdontexistmyfritzcloudjiffyalwaysdatasells-itsquaresbroke-itazurefddattolocalat-band-campmeinforumfamilydsazurestaticappsdefinimabplaceddnsaliasdynaliasnow-dnsblogdnsroutingthecloudendofinternetdsmynasakamaiedgemymediapcadobeio-staticakamaiedge-stagingakamaihd-stagingddns-ipprivatizehealthinsurancelive-onkrellianschokokeksmassivegridmysecuritycamerarackmazeserveminecraftfrom-azis-a-geekakamaizedmoonscalecryptonomicoffice-on-theusgovtrafficmanageradobeioruntimeedgekey-stagingreserve-onlinechannelsdvrdnsdojousgovcloudappcdn77-sslapps-1and1podzoneazurewebsitesdynathomescaleforceyandexcloudvusercontentisa-geekcdn-edgescoaemalcesappwriteazimuthtlonarvonoticeablestorecomwebrecnetperotherfirminfoartslgdloncogoiltdorgmilcolcomplcschgenngonetedugovbiznamefirmmobiacincoorgmilcomnomwebgobnetintedubizinfocomyspreadshopdemongovtransurl123websitehosting-clusterkhplaycistrongsnesosvalervålerxn--vler-qoaossandeheroysandeherøybøboheroyherøyxn--hery-iraxn--b-5gavalerbøboxn--b-5gasandesandexn--hery-iraxn--vler-qoavålerhåreålaahavaofsfvfhlolnlalrlhmfmtmahcostntbuåstrmreigersundmyspreadshopgálsáeidsvolltingvollgildeskalflorøvadsøvardøvanylvenxn--bhccavuotna-k7astrandaxn--kvnangen-k0axn--sknland-fxaxn--mosjen-eyarakkestadhyllestadnannestadvevelstadvaapstenordre-landsondre-landsøndre-landtjieltexn--vrggt-xqadsør-aurdalsor-aurdalheradstordmoldefordeførdeseljefedjeryggehemnexn--krehamn-dxasognegranesøgnebrynetjomevallebykletokkegiskedovretjømehobølvoldasaudatolgasømnaviknadønnasomnadonnatranafrananesnaraumasmolatrænafrænalesjasmølaørstaorstahitrafloraaukraloppafrøyarissasnasahalsagalsaromsaraisaráisafroyasnåsagronghobolfjelltydalårdalardalaskimharamkraanghkekråanghkesorumbarumhurumbærumsørummodumsálátbálátfrognbjugnvåganvagangulenskienløtenlotenstrynvefsnxn--merker-kuaskaunsveiobømlobomloskjåkvardoflorovadsosalatbalatsálatklæbuklabuselbubarduulvikskjakklepprisørxn--nttery-byaeflåeidflahofmilgolholsellomskifetvikdepvgsfhsaskerrisorhamarasnesåsnesrørosrorosxn--slat-5namasoynaroyvaroyluroydyroyaskoyradoyandoyrodoymeloyradøyandøyrødøymeløyaskøylurøydyrøymåsøyværøynærøyhoylandethøylandetdivtasvuodnalørenskoglorenskognesoddtangenxn--tjme-hraxn--smla-hraxn--stjrdal-s1aunjargalillehammerunjárgaxn--hamary-fyadavvenjargaxn--bearalvhki-y4a123hjemmesidegjerdrumxn--brnnysund-m8acxn--tnsberg-q1axn--mlatvuopmi-s4axn--snsa-roaxn--skierv-utaxn--brum-voatysfjordkvafjordeidfjordkvæfjordsongdalenmjondalenmjøndalenxn--gls-elackragerogáŋgaviikagangaviikasørreisasorreisasør-varangersor-varangerxn--risr-iraskiervaxn--frna-woaxn--trna-woakvinesdalleksvikleirvikrøyrvikroyrviksvelvikvenneslaevje-og-hornnessandnessjøenmarnardalvindafjordsandefjordenebakksnillfjordullensvangxn--trany-yuabrønnøysundnamsskoganaustevollxn--stjrdalshalsen-sqbnord-aurdalnord-frontrøgstadtrogstadgrimstadflakstadgjerstadxn--sandy-yuaxn--leagaviika-52bnore-og-uvdalvegarsheixn--rlingen-mxaxn--ggaviika-8ya47hvegårsheikarlsoykvitsoymasfjordenhamaroyinderoyosteroydavvenjárgasauheradguovdageaidnuxn--vre-eiker-k8abronnoysiellakkrødsheradkrodsheradkvinnheradbrønnøyxn--mtta-vrjjat-k7afxn--lrenskog-54akvitsøyvárggátkarlsøyosterøyinderøyhamarøybronnoysundxn--aurskog-hland-jnbbahccavuotnabáhccavuotnagiehtavuoatnastor-elvdalmidtre-gauldalxn--gildeskl-g0akarasjokevenassixn--bievt-0qaxn--yer-znalebesbynessebyxn--hbmer-xqamalselvmålselvxn--unjrga-rtamøre-og-romsdalmore-og-romsdalhareidmelandørlandorlandstrandålgårdsolundalgardafjordåfjorddielddanuorrikautokeinoxn--stre-toten-zcbskodjeaejriestangeliernebamblestokkefauskesnåasesnaasekongsvingerlangevagberlevagxn--flor-jrahattfjelldalostre-totenøstre-totenvestfoldxn--mely-iraálaheadjualaheadjunordreisaxn--troms-zuaxn--lgrd-poacporsangerflatangerstavangerleikangerbremangersamnangergieldakarasjohkaxn--rdy-0nabfrostautsirasnoasatromsaxn--sr-aurdal-l8aflekkefjordjølsterjolsteraremarkhedmarknååmesjevuemienaamesjevuemiexn--vard-jrarollagmeråkermerakerorskogørskogxn--bdddj-mrabdákŋoluoktaxn--osyro-wuaaknoluoktatrysilskjervøymandaljondalbindalrindalmeldalsuldalorkdalsigdalalvdallærdalhurdalsirdalverdallerdallardaloppdalåseralaseralhadselkragerødivttasvuotnaoverhallasteinkjerxn--hnefoss-q1askedsmokorsettromsøxn--dyry-iravestre-totenmuseumxn--sandnessjen-ogbrahkkeravjufylkesbiblbájddarbajddarxn--laheadju-7yarennesøyxn--koluokta-7ya57hxn--hgebostad-g3aleirfjordstorfjordbalsfjordbåtsfjordbatsfjordmuosátbievátloabátkárášjohkanøtterøyxn--mjndalen-64anordkappláhppilahppialstahaugsiljanverranrøykenroykenhaldenlyngenbergenhortenhønefosshonefosstroandinbeiarnvarggatosoyroosøyrotromsoidrettmuosatbievatruovatloabatvoagattynsetnessetxn--indery-fyaskánitskanitraholtråholtxn--ystre-slidre-ujbandebusarpsborgbearduxn--karlsy-fyahordalandjorpelandjørpelanddeatnuringsakersør-odalsor-odalxn--slt-elabringerikeaudnedalnittedalnissedalhemsedalslattumsurnadalxn--blt-elabelverumstjørdalnaustdalhjartdalgjøvikfyresdalhasviknarviklarvikgjovikmalvikgamviklenvikporsgrunnstjordalengerdaldrobakdrøbakxn--msy-ula0hvestvagoyxn--vgan-qoaxn--ryken-vuaxn--lten-graxn--stfold-9xaxn--hpmir-xqaxn--lury-iramálatvuopmimalatvuopmitysværkirkenesbirkenesmoskenesbáidárxn--fjord-lraxn--rdal-poabahcavuotnabáhcavuotnaxn--frde-gralindåsbearalvahkixn--hobl-iraráhkkerávjuxn--loabt-0qavågåáltábodøsundlundraderådeetnetimeholeauregrueoddavagavegaranatanaarnasolasulaaltalekafusavangbergkvamåmliamlibokntinnroangranosenoslobodorøstroststatåmotamotivguprivøyeroyerliermossvossxn--nvuotna-hwalusterlunnermarkerhábmerhabmerhvalerfjalerxn--rholt-mratysvarbaidarfitjargaularhápmirhapmirmelhusfosnesøksnesoksnestysneshemnesevenesflesbergeidsbergtonsbergtønsberglindasxn--sndre-land-0cbnamsosxn--srum-graøystre-slidreoystre-slidrevestre-slidretrondheimbalestrandxn--langevg-jxaaustrheimxn--skjk-soavagsoyaveroysandoykarmoyfinnoytranoyvestbytranbysykkylvenxn--hyanger-q1aspjelkavikandasuoloxn--fl-ziaxn--drbak-wuastathellexn--sr-varanger-ggbtelemarkxn--bhcavuotna-s4axn--porsgu-sta26fčáhcesuolocahcesuoloakrehamnåkrehamnsandøykarmøyfinnøytranøyvågsøyaverøynamdalseidxn--lesund-huabadaddjaxn--vegrshei-c0axn--btsfjord-9zagildeskålporsanguxn--trgstad-r1anávuotnanavuotnahammerfestxn--sgne-graxn--brnny-wuacibestadharstadnarviikaevenáššivestnesgjemnessandnesagdenesrennesoyxn--avery-yuaxn--tysvr-vrabearalváhkikongsbergspydebergrandabergxn--andy-iradavvesiidaxn--krdsherad-m8aporsáŋgufredrikstadbjerkreimringeburennebuaurskog-holandnotteroyxn--vgsy-qoa0jxn--rmskog-byaskierváivelandbyglandfrolandaurlandforsandxn--bjddar-ptamidsundålesundalesundfetsundfarsundovre-eikerøvre-eikerakershusxn--moreke-juasørfoldøstfoldostfoldsorfoldhøyangerhoyangerlevangerorkangertanangerxn--vestvgy-ixa6olillesandulsteinxn--rennesy-v1agranvinskjervoyxn--klbu-woalavagisxn--h-2faxn--ryrvik-byakafjordkåfjordseljordfolkebiblxn--gjvik-wuajevnakerxn--kfjord-iuabudejjuxn--kranghke-b0axn--davvenjrga-y4axn--rland-uuaxn--ldingen-q1axn--mlselv-iuaxn--rady-iraxn--linds-prabrumunddalxn--ygarden-p1amo-i-ranaeidskogrømskogromskoghjelmelandxn--finny-yuaxn--sr-odal-q1axn--skjervy-v1aballangenkvanangenkvænangengratangenxn--hmmrfeasta-s4acvossevangensuohkanxn--rde-ulaxn--mli-tlaxn--ksnes-uuanordlandskanlandskånlandsortlandfuoiskuxn--rros-graxn--hcesuolo-7ya35bxn--eveni-0qa01gagaivuotnagáivuotnaxn--seral-lradrammenmodalenmosjoenjan-mayentorskensteigengloppenxn--snes-poamatta-varjjatxn--sr-fron-q1aomasvuotnajessheimbådåddjåxn--krager-gyaxn--kvfjord-nxaxn--asky-iraxn--snase-nraxn--bidr-5nacholtålenxn--vads-jraxn--jlster-byamosjøenxn--rst-0nastavernxn--ostery-fyaxn--oppegrd-ixaxn--sknit-yqaxn--risa-5naoppegårdskiptvetrendalenholtalenxn--mot-tlaxn--lhppi-xqaxn--holtlen-hxaxn--srreisa-q1akopervikxn--muost-0qaxn--bmlo-grahokksundkvalsundegersundxn--karmy-yuaullensakerxn--hylandet-54axn--kvitsy-fyaxn--bod-2nalangevågberlevågkristiansandxn--rsta-frahornindalstjørdalshalsenstjordalshalsensandnessjoenhámmárfeastaxn--lrdal-srasør-fronsor-fronnord-odalkristiansundmátta-várjjatvestvågøynesoddennotoddenbuskerudøygardenoygardensalangenlavangenralingenrælingenlodingenlødingenleaŋgaviikalaakesvuemieleangaviikauenorgexn--srfold-byaaskvollxn--rskog-uuaxn--nry-yla5gxn--vry-yla5ghammarfeastaxn--rhkkervju-01afxn--givuotna-8yakommunekrokstadelvanedre-eikerhagebostadhægebostadxn--berlevg-jxakviteseidxn--s-1faxn--l-1faxn--nmesjevuemie-tcbafuosskomoårekemoarekexn--lt-liacxn--jrpeland-54asvalbardoppegardholmestrandtvedestrandsogndalsokndalarendalsunndalfolldalxn--krjohka-hwab49jlyngdaletnedalnorddalsaltdalgausdalskedsmovaksdalgjesdalstordalxn--frya-hraaarbortedrangedalxn--smna-graaurskog-hølandxn--vg-yiabtjeldsundhaugesundlindesnesxn--mre-og-romsdal-qqbxn--dnna-gradynmerseineshacknetenterprisecloudmineaccomaorimāoriorgmilcriiwigennetschoolhealthkiwigovtgeekxn--mori-qsacloudnsparliamentcomedorgcompronetedugovmuseumwebsitekinservicebarsywebsitebuildereerobookheimdnsleapcelleero-stagetechcrscsslorigingohomecdbedeeeiemesecabgngilnlalplchfisiincnnoroptatitmtltruauhulumkdkukskjplvtrgrfrkrhrusesismycynzcznetinteduassoososcloudstgbetaaezaeuhkusjshatenadiarycdn77hoptozaptois-a-knightmyftpno-ipjpnddnssdpdnsspdnsbarsysweetpepperis-a-bruinsfanis-very-sweetservegameis-a-soxfanhomelinuxcdn77-secureservebbsmisconfusedwebredirectblogsitefreedesktopcouchpotatofriestoolforgeaccesscamis-lostreadmyblogsmall-webfedorapeopleserveftpis-a-celticsfanmywirepotagertwmailin-dslsellsyourhomeread-booksfreeddnscable-modemis-savednflfanufcfanmlbfanstuff-4-saleendoftheinternetin-vpnmy-firewallhomeftpis-localis-a-chefboldlygoingnowherewebhopselfipkicks-assroxatunkcamdvrfedoraprojectgotdnsdvrdnsdyndnspubtlspimientahomeunixdontexistfedorainfracloudwmflabsfspagesbmoattachmentsteckidsfamilydsdnsaliasdynaliasnow-dnscloudnsdoomdnsduckdnsblogdnshomednsroutingthecloudendofinternetdsmynasip-dynamicpoivronhttpbinmyfirewallis-very-evilmysecuritycamerais-a-linux-userwmcloudis-a-geektuxfamilyis-a-candidatedoesntexistis-very-badhobby-sitegame-hostaltervistais-foundis-a-patsfandnsdojohepforgepodzonedynservcollegefanis-very-goodfrom-meis-very-niceisa-geeknerdpolacmedsldingorgcomnomgobabonetedupleskaemhlxmyboxrockyprvcydeuxfleurspdnscodebergheyflowstatichostorgmilcomnomgobneteduorgcomeduiorgmilcomngonetedugovcloudns1337ngrokacorggogfamcomwebgobnetedugokgopgkpgovgosbizpasaugumicsopozpapuwmwsrprusiskwpspkppspkmpspokeoiawsawifoumsdnskokwpmuppuppsppiwwiwoowuzswkzoschrzpisdnwzmiuwwitdpssewsseumigugimoirmpinbwinbwiihupporzgwgriwupowwskrwioswuozstarostwokonsulattmpccopruszkowmyspreadshopostrodakartuzyopolegminamediaustkazgorajgoraolawailawalomzawloclradombytomjaworznotargilubinkoninzagantorunkutnokepnonakloczestsopotsanokturekplockslasksklepzarowlukowmedaidgdaorgmilrelcomnomatmgsmartneteduelkgovwawsossexbiztgorysejnytychypomorzeboleslawiechomesklepsdscloudunicloudzakopanelegnicarawa-mazbydgoszczswidnikkrasnikwloclawekbielawamragowograjeworealestatebeskidykaszubymalopolskaprzeworskswiebodzinlecznadfirmaszkolawarmiagdyniamiastakazimierz-dolnymalborkswidnicadlugolekaostrolekapodlasieelblagtravelsimplesitezachpomormielecszczecinnieruchomosciwalbrzychlezajsklublinbedzinpoznanwielunmielnooleckostarachowicedkontopowiatwroclawrybniksuwalkileborkslupskgdanskostrowwlkptarnobrzegtourismwegrowkrakowglogowyou2pilanysamailwrocinfoagroautobeepshopprivlapypiszlodzcfolksecommerce-shopmazurypulawyskoczowrzeszowpomorskiezgierzkaliszolkuszlowiczostrowiecsosnowiecmazowszewodzislawbialowiezazgorzeleckatowicepabianicejelenia-gorawolominkarpaczsieradznowarudaczeladzkonskowolaskierniewiceswinoujscieturystykabieszczadycieszynketrzynolsztynbialystokbabia-goraprochowicewarszawastalowa-wolapolkowicegorlicegliwiceponiatowalimanowalubartowaugustowkobierzyceopocznognieznoszczytnokolobrzegshoparenapodhalebielskoklodzkostargardatwithplayitownnamecoorgnetedugovacorgcomproestnetedugovbiznameislaprofinforechtngrokmedaaaacacpaenglawjurbarbarsykeeneticavocatacctcloudnsorgcomsecplonetedugov123paginaweborgcomnetintedugovnomepublidkinbarsygovx443cloudnsorgmilcomnetedugovcooporgmilcomschnetedugovnamecomcannetlibassoaemclantmcontstoreorgcomnomrecwwwbarsyfirminfoshopartsstackitmyddnswebspacelima-cityacincooxorgedugovbarsybrendlyhbvpsvpsspectrumlandinghostingacppmordoviamcprecbgorgmilcomspbnetintedumsknovgovbirrasmcdirmytismircloudvladimirnalchikadygeyamarinepyatigorskmyjinobashkiriaeurodirvladikavkazna4ugroznykustanaikalmykiacldmaildagestaniranbuildcanvaliaravalwixdevelopmentappwritemigrationneedleverceldatabasestackitcodereplravendbonporterlovableaccoorgmilnetgovcoopmedorgcompubschnetedugovservicemecomygovorggovtvmedorgcomnetedugovinfoedgfacbmlonihkutwpsryxzbdtmacfhppmyspreadshopbrandpartiorgcomfhvpress123minsidaitcouldbeworlanbibkommunalforbundfhskiopsyskomvuxkomforbnaturbruksgymnloginlineorgcomnetedugovenscaledeuusentbotdaorgmilcomnetgovnowteleporthashbangplatformlovablebarsyshopwarebasehoplixbarsyonlinemsf5gitappgitpagecofigma-govcaffeinefigmacanvasoltstputerbarsysupportchatgptsquareomniweopensocialcpanelnotionnovecorewpsquaredpreviewjelecyonbyensrhtfastvpspieboxconvexjouwwebheyflowplatformshloginlinemadethissourcecraftclouderaorgorgcomartedugouvunivmeorgcomnetedugovsurveysstatichfheiyuxs4allprojectmyfastubervibehostapp-ionosdeployagentmecoorgcomschnetedugovbizcncostoreorgmilcomneteduembaixadaconsuladokiraranohoprincipesaotomeheliohobarsystorebaseshopwaresellfyabkhaziavologdamordoviapenzalenugsochinavoiexnetspbmsknovnorth-kazakhstanashgabadkareliaarmeniageorgiavladimirnalchikivanovobukharaadygeyakhakassiakalugakrasnodarjambylaktyubinsktroitskbryanskobninskkurganazerbaijanpokrovskbashkiriatselinogradvladikavkazmurmansktulatuvamangyshlaktashkentchimkentgroznykaragandatermezarkhangelskkustanaikalmykiabalashoveast-kazakhstankaracoldagestantogliattibarsyredorgcomgobedumirenknightpointaccoorgjelasticdiscoursecleverappsschacmiincogoornetonlineshopcogoorgmilcomwebnicnetintedugovbiznametestcoorgmilcomnomnetedugovorangecloudpersoindorgcomfinnatnetgovensmincomtourismintlinfox0611oyaorgmilcomnetedugovquickconnectvpnplusnettprequalifymeaddrmyaddrntdllwadlnctvavdrk12orgmilpolbeltelcomwebgennetedutskkepgovbbsbiznameinfocoorgmilcompronetedugovbiznameinfobetter-thanworse-thansakurafromdyndnson-the-webmymailerorgmilurlcomneteduidvgovmydnsgameclubebizmeneacsccogotvorhotelmilmobiinfovodteiflgplkmsmsbcckhincndnvncoztltmkckppzpdprvcvkvlvcrkrkscxuzchernovtsyrivneyaltaodesavolynrovnolutskltdinforgcomnetedugovbizvinnicazhitomirternopilpoltavakropyvnytskyizaporizhzhiasevastopolsebastopoluzhgoroduzhhorodkharkovkharkivvinnytsiakhmelnytskyizaporizhzhecrimeaodessazhytomyrnikolaevcherkassydonetskluganskluhanskkirovogradivano-frankivskchernivtsikrymkievkyivlvivsumyzakarpattiamykolaivcherkasychernigovkhersonchernihivdnipropetrovskdnepropetrovskkhmelnitskiyneacsccogoorusorgmilcomedugovvmdhmyspreadshopadimono-ipbarsybytemarkbarsyonlinelayershiftnh-servretrosnubapicampaignservicelugaffinitylotteryweeklylotteryraffleentrygluglugsmeaccoindependent-inquestnimsitecopropymntltdorgplcschnetgovnhsbarsyindependent-commissionindependent-reviewpolicepublic-inquiryindependent-panelconnhospindependent-inquiryroyal-commissionoraclegovcloudappscck12libccphxcclibpvtparochchtrcck12libcceatonk12coglibtecgendstmusann-arborwashtenawcck12glghcck12sealibforksolympiabainbridge-islkeyporthoquiamyarrow-pointcentraliaport-townsendsequimport-ludlowrentonsilverdalebremertonredmondsheltonbellevueport-orchardport-angeleskingstonchehalisaberdeengig-harborseattlepoulsboidmdndsddemenegacalamaiavawapailalflnmdcncscohnhmihiviwiriinmntnmocoutvtctmtgunjokakwvnvprarorasmskstxwynykyazisadninsnngosrvis-bymircloudservernamepointtoenscaledland-4-salefreeddnsstuff-4-saleazure-apinoipcloudnsgolffanheliohostazurewebsitesgvorgmilcomgubneteducoorgcomnetd0egvorgmilcomnetedugovmydnsiacostoree12orgmilcomnomwebgobbibrectecnetintedugovraremprendefirminfoartseducok12orgcomnethidnsidacaiiosonlahanamhanoicamauhueorgcompronetintedugovbizbacninhtayninhhoabinhnamdinhtravinhhaiphongvinhlonghaiduongquangnamquangtrithuathienhuequangninhbacgianghaugiangquangbinhsoctrangbentrethanhphohochiminhdanangkontumhatinhkhanhhoathanhhoahealthgialailaocaiyenbaibackanngheanlonganphuyenphuthocanthodaklakdongnainameinfovinhphucdongthapkiengiangtiengiangquangngailaichaulangsonlamdongdaknonghagiangangiangcaobangbinhduongninhthuanbinhthuanbaclieuthaibinhninhbinhbinhdinhtuyenquanghungyenbaria-vungtauthainguyendienbienbinhphuocschbizputerimagine-proxyorgcomnetedugovcloud66advisormypetsdyndnsxn--8dbq2axn--4dbgdty6cxn--5dbhl8dxn--hebda8bxn--80auxn--d1atxn--c1avgxn--o1acxn--o1achxn--90azhxn--55qx5dxn--uc0atvxn--od0algxn--wcvs22dxn--gmqw5axn--mxtq1mxn--12c1fe0brxn--h3cuzk1dixn--12co0c3b4evaxn--12cfi8ixb8lxn--o3cyx2axn--m3ch0j3axn--j1adpxn--90amcxn--90a1afxn--h1ahnxn--j1ael8bxn--h1alizxn--c1avgxn--j1aefxn--80aaa0cvacxn--41acaffeineexeopentunnelbotdashtelebitorgtmaccoagricorgmilnomwebnicngonetaltedugovlawnisschoolgrondaraccoorgmilcomschnetedugovbizinfoprg1-zeropstritonstackitlimazeropsaccoorgmilgovяспборгкоммскбизмирсамаракрымсочиакодпроргобрупрצהלממשלישובאקדמיהองค์กรธุรกิจรัฐบาลศึกษาทหารเน็ต教育網絡組織公司政府個人닷넷한국澳门新闻澳門联通家電嘉里招聘通販닷컴삼성コムგეбгрфеюadcdbdgdidmdsdtdaebedeeegeiejekemenepereseveyegabacalamanauavapaqasazacfbfafgfnfpfwftfbgcgagggegkgngmgsgpgvgtgugilmlnlalclglplsltlhmimjmkmmmomambmcmdmfmgmzmpmsmtmgbbblbsbecccacnclcmcvctcscmhkhghchbhthphshlinikifigiaibicivisikninhnmncnbngnsnpnvntnjoionomobocoaofodorosotoptstttytatbtetgtithtmtltrusuvuaucueuguhulumunufjdjbjtjsjlkmkhkfkdkcktkukskpkgpmpnpkpjpgqaqmqiqsvtvcvbvmvlvrwpwtwzwbwcwawgwkwmwtrsrprgrfrercrbrarnrmrlrkrirhrwsusrssspsgsesbsaslsmsissxmxaxcxuypysylymykygybycyuztzsznzmzkzdzczbzazελευ世界台灣购物公益点看臺灣网络書籍在线网站手机机构大拿游戏信息台湾谷歌慈善商标香港中国餐厅网址中國商城食品微博政务移动集团公司八卦商店健康网店政府时尚佛山中信娱乐广东企业homedepotengineeringاماراتrepublicankuokgroupversicherungchannelcitadelxn--pgbs0dhxn--b4w605ferdstatebankwebsitexn--mgb9awbf亚马逊淡马锡alibabaxn--ngbc5azdxn--mgbbh1axn--45br5cyltoshibabuildworldcloudtradeguideplacespacedancemoviephoneprimesmilebiblestyleappleazurestoreskypegripexn--l1accdrivelottehorsehouseleasechasereisestadahondaomegaaetnaamicaninjanokiamediadeltavodkaedekaosakapizzaslingemailgmailtirolshelltmallfinallegaltotalhotelamfamforumrehabmusicciticricohcoachwatchboschearthfaithirishmiamiarchidubaiguccipraxiみんなストアセールcanonsalononionnikonepsonkoelngreensevencrownikanoradioaudioweiboglobopromogalloyahoociscorodeovideomangobingotokyovolvolottokyotophotosmartsportquesttrusthyattjetztadultcymrubaidutushuxn--kprw13dubankclickblackmerckgroupsharpcheapnowtvxn--h2brj9cקוםհայоргсрбмонкомбелмкдқазрусукрمصرقطرعربكومdadcfdmedwedredphdthdbidpidkrdmsdltdiceonewmeglemoerwecfageacbanbambaaaammakianraspacpaaxawtfbcgaegongingaigvigorgdogdhlmilrilonlaolloluoljllcalgalnflafltelsrlfrllplkimibmcamcombommomifmabbjcbscbcabnabtabmlbpubabcbbcnecincpncllcstcwtcpwcnyckfhbzhovhmoiskiobisbitcifyituipinvinwinxincbnbcnmanfangdnmenrenkpnmtnyunrunfununobiojioriohbogmofooboooooacoecoceongoproartistottnttbbtcateatlatvetpetbetnethktmitfitintjothotgotdotbotprueduicujnjyouinknhktdkappsapgapmapdnptopgopllpjmpzipvipripesqtrvdtvitvdevmovgovhivnrwlawsewnewbmwwownowhowdvrftrmtrsfrbarcartvscrseusawsupsubssbsadsddsldssasbmsmlsxxxboxfoxgmxtjxsextaxbuyflydiysoyjoyskypaydaygayxyzanzbizwebersenerpokerlameractortatarsolarລາວคอมไทยtourslocusnexuslexusgiftsbeatsboatspartspressglassswissकॉमनेटtiresgivescodeshomesgamestunesshoescardswalesloansvegastoolsdealsautosparisファッションworkssucksrocksxeroxforexfedexpartylillymoneystudyrugbytoraytoday中文网xn--unup4y天主教飞利浦新加坡enterprises我爱你嘉里大酒店christmasxn--fct429kholdingsxn--8y0a063axn--mgbx4cd0ablifestyleabogadoallstatenetbankكاثوليكxn--s9brj9cxn--gk3at1ebestbuycharityxn--55qx5dmicrosoftpropertybasketballhomegoodscorsicajewelrygallerygrocerysurgerycountrybrusselsverisignferreroxn--czr694bhdfcbankcommbanksoftbankپاكستانپاکستانnextdirectالسعوديهالعليانxn--h2brj9c8cxn--80adxhksshikshaxn--mgbai9azgqp6jcuisinellabarclayscatholicxn--kpry57dcompanyxn--xhq521bblackfridayxn--mgba3a3ejtsandvikxn--d1acj3bacademydownloadمليسياxn--j1amhxn--w4r85el8fhu5dnraipirangaathletaxn--fhbeixn--mgbqly7cvafrzuerichxn--c2br7gஇலங்கைcontractorsxn--io0a7igraphicsinsurancetemasekxn--xkc2al3hye2amotorcyclesphotographydirectoryplumbingxn--vhquvclothingtrainingcleaningwilliamhilllightingxn--mgba3a4f16ashoppingcateringeducationokinawapicturesventuresproductionsxn--9et52uwalmartഭാരതംsupportrealestatecapitalonexn--nqv7fs00emaauspostfloristdentistxn--qxamgodaddybradescobargainsmitsubishikerryhotelsxn--9dbq2axn--3pxu8kimmobilienxn--fjq720axn--mgbtx2bholidaymckinseymadridbusinessbuildershelsinkixn--4gbrimмоскваالسعودیةcoffeedegreelacaixapartnersalsaceofficeabbvievoyageorangegeorgeonlinechromemobilekindlegoogleoraclecircleschulesecureinsurexn--mgba7c0bbn0aestatexn--mgbc0a9azcgcruisehangoutxn--vuq861bxn--42c2d9arexrothfirestoneuniversityxn--nnx388alifeinsuranceextraspaceонлайнvermögensberatersoftwarexn--fiqs8sxn--mgbab2bdxn--w4rs40ltiendaभारतम्africatoyotaotsukasakuracameracreditcardnagoyaconsultingnetworkjunipertheatermonsterprogressivepioneerxn--55qw42gracingdatingvotingvikinglivinggivingxn--bck1b9a5dre4cbrotherweatherjoburgفلسطينlplfinancialxn--clchc0ea0b2g2a9gcdfutbolschoolsocialglobaldentalwoodsidechanelairtelmatteltravelrealtorwebcamstreamభారత్unicomalstomxn--nodexn--6frz82gmuseumfurniturexn--rvc1e0am3exn--mix891faccenturexn--11b4c3dismailineustardiscountquebeccomsecclinicservicesxn--y9a3aqxn--c1avgswatchchurchsearchالاردنmarketingcontacthealthmonashshoujisanofitaipeiamericanexpresssuzukiアマゾンクラウドポイントbhartiグーグルxn--mgberp4a5d4armemorialxn--1qqw23alondonmormoninstitutevisionbostonnortoncouponmaisonamazonvirginberlindesigndurbanolayannissananquanxihuanhitachikaufengardenreisenbayerntechnologydatsunxn--90a3aclatinocasinostudiophysioxn--ngbe9e0apharmacytattootaobaoaramcoexpertreportabbottdirectselectimamatfairwindspictettargetmarketintuittravelersinsurancecreditdupontryukyusuppliesxn--tckwebnpparibasschmidtmerckmsdyodobashirestaurantbridgestonecricketxn--fpcrj9c3dbostikbroadwayattorneylefrakemerckxn--fiq228c5hscareersfarmerswinnersflowersxn--wgbh1cguitarsxn--54b7fta0ccxn--p1acfmakeupgalluplandroverxn--kcrx77d1x4agoldpointbauhausxn--mgbayh7gpahiphopplaystationxn--mgba3a4fraxn--eckvdtc9dhyundaixn--gckr3f0fistanbulticketsmarketsflightschintaireviewsxn--3e0b707ewindowsxn--fiqz9sfinancialxn--fzys8d69uvgmابوظبيdiscoverreviewবাংলাxn--5su34j936bgsgmoscowobserverapartmentsдетиارامكوсайтeurovisionxn--i1b6b1a6a2exn--xkc2dl3a5ee0hتونسموقعبارتڀارتشبكةعمانبيتكعراقreadkredbondlandbandfundfoodprodgoldfordtubecafesafelifeggeeieeefreefagepagegugezonewinememenamegamesaleablebikenikelikecarecbreherefiresaveloveliveblueartedatesitevotecaseluxebofamodaltdaasdatiaayogasinavanashiaasiajavabbvatevavivadatazaraarpacasavisasncfprofmaifsurfgolfdvagsongbingpingwangkpmggoogblogpohlfailcooldellcalldeallidlsarlfilmteamroomfarmimdbarabclubhdfcicbchsbcgmbhrichtechfishdishcashminiernikddiaudiwikimobitaxicitikiwidesiqponskinloanakdnwienopenporncerntownimmolimoolloinfonicofidolegosaxozeroaerovivoautovotomotofastbestresthostpostnextlgbtchatseatgiftmeetdietreitmintrentgentspotscotguruitausohumenucyoubanklinkpinkdclktalksilkbookseekworkrsvpaarpjeepshopcoophelpcamppccwshowbeerstarruhrflirweirhaircarsparsjprshausplusnewstipstoysjobskidsfanspicsdocsxboxamexsexynavycitysonyarmyallybabyplaydeliverybuzzgbizlamborghiniphilipsලංකාಭಾರತfitnessexpresslanxesspfizercenterwalterlawyersoccercareerkosherbrokerlockerdealerdoctorauthorxn--mgbqly7c0a67fbcvermögensberatungjaguarxn--pssy2uxn--hxt814eflickrrepairrogersairbusxn--mgbai9a5eva00beventsyachtsxn--t60b56aভাৰতভারতभारतभारोतviajeshermeshughesxn--j1aefसंगठनvillasଭାରତclaimshotelsભારતzapposphotosjuegoscondostatamotorsgratistennisਭਾਰਤtkmaxxtjmaxxschaeffleryandexxn--80aswgrealtysafetybeautyluxuryxn--3ds443gsupplyfamilyxn--o3cw4hhockeysydneyxn--90aenissayalipayenergycomputeragencyxn--rovu88b電訊盈科xn--gecrj9cstatefarmaccountantaquarelleolayangroup香格里拉xn--p1ai组织机构xn--1ck2e1bxn--mgbt3dhdschwarzموريتانياabudhabinowruzkomatsufujitsuhospitalxn--80asehdbxn--mgbtf8flxn--j6w193gxn--yfro4i67oprudentialxn--flw351ecruisescoursesrecipesxn--e1a4cferrarixn--ses554gxn--wgbl6awatchesstaplessinglesxn--mgbcpq6gpa1axn--otu796dpropertiescreditunionxn--mgbah1a3hjkrdstockholmhisamitsuالسعوديةstcgroupdomainsoriginscouponsbloombergclubmedfroganslimitedxn--80aqecdr1aexposedinternationalequipmentbarclaycardxn--q7ce6axn--mgbi4ecexpprotectionassociatesconstructionxn--cck2b3bxn--45q11candroidfoundationישראלxn--mgbca7dzdocliniqueboutiqueengineerxn--qxa6asystemsfirmdalefashionauctionxn--nqv7finfinitirentalsreliancetradingweddingfishinghostinggentingbookingcookingxn--3hcrj9cgraingerxn--czrs0tdemocratsamsungyokohamaxn--h2breg3evexn--nyqy26alundbeckmelbournevacationssolutionsfrontierxn--vermgensberatung-pwbmanagementxn--cg4bkixn--mgb2ddeslincolnhamburgsandvikcoromantblockbusterairforcebarefootxn--4dbrk0ceinvestmentsfeedbackcommunityxn--ngbrxالبحرينdiamondsamsterdamhealthcareredumbrellaxn--mxtq1mxn--2scrj9cagakhanxn--mgbpl2fhкатоликcaravanசிங்கப்பூர்richardlimortgageamericanfamilyxn--fzc2c9e2cscholarshipssaarlandxn--imr513nvlaanderensamsclubgoodyearkitchenஇந்தியாweatherchannelallfinanzxn--kput3iالسعودیۃxn--90aisxn--efvy88hالجزائرxn--mgbaam7a8hexchangejpmorganxn--tiq49xqyjfidelitysecurityxn--mk1bu44cwanggouxn--fiq64bxn--6qq986b3xlxn--mgbbh1a71exn--80ao21amarshallsxn--5tzm5gtravelerspanasoniclatrobeyoutubeaccountantsxn--rhqv96gxn--cckwcxetdanalyticsxn--ygbi2ammxبازاربھارتسوريةorganicfreseniusسورياxn--9krt00axn--qcka1pmcxn--jlq480n2rgdeloittesciencefinancexn--jvr189mxn--30rr7yhomesensehotmailbaseballfootballleclercboehringerxn--q9jyb4cxn--mix082fاليمنهمراهpolitieسودانايرانایرانnetflixyamaxunxn--lgbbat1ad8jcollegestoragecapetowncolognekerrypropertiesxn--mgbgu82axn--ogbpf8flxn--czru2dwhoswhociprianilasallexn--g2xx48cforsalebanamexaudiblexn--vermgensberater-ctbxn--zfr164bericssonvanguardxn--45brj9cindustriestheatremarriottxn--3bst00mcomparexn--mgberp4a5d4a87gcapitaldigitalالمغربbarcelonashangrilaxn--d1alfcalvinkleinwwwcitysapporokawasakinagoyasendaikobekitakyushuyokohamackjp",UE=621,GE=625,Fk=io.length,Zk=nd.length,Yk=new Uint32Array(Zk),Hu=new Uint32Array(Zk),tf=new Int32Array(Fk).fill(-1);for(let e=0,n=0;e<Fk;e+=1)for(let i=td[e];i<td[e+1];i+=1){Yk[i]=n;const r=n+nd[i];let u=5381;for(let h=r-1;h>=n;h-=1)u=u*33^ef.charCodeAt(h);Hu[i]=u>>>0,nd[i]===1&&ef.charCodeAt(n)===42&&(tf[e]=i),n=r}let Ai=-1,nf=0,af=0;function Dv(e,n,i,r){if(nd[e]!==r)return!1;const u=Yk[e];for(let h=0;h<r;h+=1)if(ef.charCodeAt(u+h)!==n.charCodeAt(i+h))return!1;return!0}function Ov(e,n,i,r,u){let h=td[e],g=td[e+1];for(;h<g;){const b=h+g>>>1,v=Hu[b];if(v<n)h=b+1;else if(v>n)g=b;else{for(let w=b;w>=h&&Hu[w]===n;w-=1)if(Dv(w,i,r,u))return w;for(let w=b+1;w<g&&Hu[w]===n;w+=1)if(Dv(w,i,r,u))return w;return-1}}return-1}function Iv(e,n,i){let r=n,u=e.length,h=5381;Ai=-1;for(let b=e.length-1;b>=0;b-=1){const v=e.charCodeAt(b);if(v===46){const w=b+1;let k=Ov(r,h>>>0,e,w,u-w);if(k===-1&&(k=tf[r]),k===-1)return Ai!==-1;r=zv[k],(io[r]&i)!==0&&(Ai=r,nf=w,af=u),u=b,h=5381}else h=h*33^v}let g=Ov(r,h>>>0,e,0,u);return g===-1&&(g=tf[r]),g!==-1&&(r=zv[g],(io[r]&i)!==0&&(Ai=r,nf=0,af=u)),Ai!==-1}function Xk(e,n,i){if($E(e,n,i))return;const r=(n.allowPrivateDomains?2:0)|(n.allowIcannDomains?1:0);if(Iv(e,GE,r)){i.isIcann=(io[Ai]&1)!==0,i.isPrivate=(io[Ai]&2)!==0,i.publicSuffix=e.slice(af+1);return}if(Iv(e,UE,r)){i.isIcann=(io[Ai]&1)!==0,i.isPrivate=(io[Ai]&2)!==0,i.publicSuffix=e.slice(nf);return}i.isIcann=!1,i.isPrivate=!1;const u=e.lastIndexOf(".");i.publicSuffix=u===-1?e:e.slice(u+1)}const ad=VE();function KE(e,n){return Hk(ad),Qk(e,0,Xk,n,ad).hostname}function HE(e,n){return Hk(ad),Qk(e,5,Xk,n,ad).domainWithoutSuffix}const QE={allowPrivateDomains:!0};new NE({fuzzyLink:!0,fuzzyEmail:!1}).tlds(_E);function vY(e,n){if(!e)return"";const i=e.trim();if(!i)return"";if(/^https?:\/\//i.test(i))return i;if(i.startsWith("//"))return`https:${i}`;const r=n.trim().replace(/^https?:\/\//i,"").replace(/\/+$/,"");return r?i.startsWith("/")?`https://${r}${i}`:`https://${r}/${i}`:i}function xY(e){const n=(e??"").trim();return n&&(n.startsWith("/")||/^https?:\/\//i.test(n)||/^mailto:/i.test(n))?n:"#"}function wY(e){const n=e??"",i=n.indexOf("?"),r=i===-1?n:n.slice(0,i),u=i===-1?"":n.slice(i+1),h=r||"/";if(!u)return{path:h,querySummary:null,raw:n};let g="";try{g=FE(new URLSearchParams(u))}catch{g="tracking params"}return{path:h,querySummary:g||null,raw:n}}function FE(e){const i=Array.from(e.keys()).length;if(i===0)return"";const r=i===1?"param":"params",u=ZE(e);return u?`${u} · ${i} ${r}`:`${i} tracking ${r}`}function ZE(e){if(e.has("fbclid"))return"Facebook Ad";if(e.has("gclid")||e.has("gbraid")||e.has("wbraid"))return"Google Ad";if(e.has("msclkid"))return"Microsoft Ad";if(e.has("ttclid"))return"TikTok Ad";if(e.has("li_fat_id"))return"LinkedIn Ad";if(e.has("twclid"))return"X / Twitter Ad";if(e.has("epik"))return"Pinterest Ad";for(const r of e.keys())if(r.startsWith("hsa_"))return"Search Ad";const n=e.get("utm_source"),i=e.get("utm_medium");return n&&i?`${n} / ${i}`:n?`Source: ${n}`:i?`Medium: ${i}`:null}function rc(e){if(e==null)return null;const n=e.trim();if(!n)return null;const i=KE(n);return i?i.replace(/^www\./i,"").toLowerCase():null}function Wk(e){return e==null||e.trim()===""?"":HE(e,QE)?.toLowerCase()??""}const YE=new Intl.Segmenter("en",{granularity:"word"}),XE=/[^\p{L}\p{N}]+/gu,WE=/[\p{L}\p{N}]+/gu,JE=/[\p{Script=Latin}\p{Script=Greek}\p{Script=Cyrillic}]/u,ez=new RegExp("\\P{ASCII}","u");function tz(e){if(!ez.test(e))return e;let n="";for(const i of e){if(i.charCodeAt(0)<128){n+=i;continue}const r=i.normalize("NFD"),u=r[0];n+=r.length>1&&JE.test(u)?u:i}return n}function Jk(e){return tz(e.normalize("NFKC")).toLocaleLowerCase("en")}function e2(e){const n=[];for(const i of YE.segment(e))if(i.isWordLike)for(const r of i.segment.match(WE)??[])n.push(r);return n}function nz(e){return e2(Jk(e))}function Pa(e){return nz(e).join("")}const Pv=new WeakMap;function az(e){if(!e)return null;const n=Jk(e);return{normalized:n,stripped:n.replace(XE,"")}}function iz(e){const n=Pv.get(e);if(n)return n;const i=e2(e.normalized);return Pv.set(e,i),i}function sz(e){const n=new Set;let i=0;for(const r of e){if(!r)continue;const u=Pa(r);u&&(n.add(u),u.length>i&&(i=u.length))}return{keys:n,longest:i}}function oz(e,n){if(!n||e.keys.size===0)return!1;const i=typeof n=="string"?az(n):n;if(!i)return!1;let r=!1;for(const h of e.keys)if(i.stripped.includes(h)){r=!0;break}if(!r)return!1;const u=iz(i);for(let h=0;h<u.length;h++){let g="";for(let b=h;b<u.length;b++){if(g+=u[b],e.keys.has(g))return!0;if(g.length>=e.longest)break}}return!1}const rz=4,t2=A(["cli","api","config-file"]);function lz(e){const n=new Set,i=new Set;for(const r of e){if(n.has(r.label)){i.add(r.label);continue}n.add(r.label)}return[...i]}function cz(e,n){return n?e.some(i=>i.label===n):!0}const uz=m({displayName:o().min(1),canonicalDomain:o().min(1),ownedDomains:y(o().min(1)).optional(),aliases:y(o()).optional(),country:o().length(2),language:o().min(2),tags:y(o()).optional(),labels:Ue(o(),o()).optional(),providers:y(gt).optional(),providerModels:Qf.optional(),locations:y(cn).optional(),defaultLocation:o().nullable().optional(),measurement:Xf.optional(),autoExtractBacklinks:N().optional(),configSource:t2.optional()});uz.extend({name:o().trim().min(1).max(120)});const dz=m({id:o(),name:o(),displayName:o().optional(),canonicalDomain:o(),ownedDomains:y(o()).default([]),aliases:y(o()).default([]),country:o().length(2),language:o().min(2),tags:y(o()).default([]),labels:Ue(o(),o()).default({}),providers:y(o()).default([]),providerModels:Qf.default({}),locations:y(cn).default([]),defaultLocation:o().nullable().optional(),measurement:Xf.default(Gk),autoExtractBacklinks:N().default(!1),configSource:t2.default("cli"),configRevision:d().int().positive().default(1),createdAt:o().optional(),updatedAt:o().optional()});m({id:o(),query:o(),createdAt:o()});m({id:o(),keyword:o(),createdAt:o()});m({queries:y(o().trim().min(1)).min(1)});m({keywords:y(o().trim().min(1)).min(1)});m({provider:gt,count:d().int().min(1).max(20).optional()});m({id:o(),domain:o(),createdAt:o()});m({competitors:y(o().trim().min(1)).min(1)});function id(e){return rc(e)??e.trim().toLowerCase().replace(/^www\./,"")}function n2(e){const n=[e.canonicalDomain,...e.ownedDomains??[]],i=new Set,r=[];for(const u of n){const h=u.trim();if(!h)continue;const g=id(h);i.has(g)||(i.add(g),r.push(h))}return r}function mz(e,n){if(!n||n.length===0)return[];const i=e?.trim().toLowerCase()??"",r=new Set,u=[];for(const h of n){const g=h.trim();if(!g)continue;const b=g.toLowerCase();b!==i&&(r.has(b)||(r.add(b),u.push(g)))}return u}function pz(e){const n=[],i=new Set,r=h=>{const g=Pa(h);!g||i.has(g)||(i.add(g),n.push(h))},u=e.displayName?.trim()??"";u&&r(u);for(const h of mz(e.displayName,e.aliases))r(h);for(const h of n2({canonicalDomain:e.canonicalDomain??"",ownedDomains:e.ownedDomains??[]})){const g=Wk(h);if(Pa(g).length>=rz)r(g);else{const b=id(h);b.includes(".")&&r(b)}}return n}const hz=m({name:o().min(1).max(63).regex(/^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/,{message:"Name must be a lowercase slug (letters, numbers, hyphens)"}),labels:Ue(o(),o()).optional().default({})}),fz=m({preset:o().min(1).optional(),cron:o().min(1).optional(),recurrence:Zf.optional(),timezone:o().optional().default("UTC"),providers:y(gt).optional().default([]),enabled:N().optional()}).refine(e=>[e.preset,e.cron,e.recurrence].filter(n=>n!==void 0).length===1,{message:'Exactly one of "preset", "cron", or "recurrence" must be provided'}).optional(),gz=m({channel:z("webhook"),url:o().url(),events:y(Yf).min(1)}),yz=m({gsc:m({propertyUrl:o()}).optional(),syncSchedule:m({preset:o().optional(),cron:o().optional()}).optional()}).optional(),qv=y(o().min(1)),bz=m({displayName:o().min(1),canonicalDomain:o().min(1),ownedDomains:y(o().min(1)).optional().default([]),aliases:y(o().min(1)).optional().default([]),country:o().length(2),language:o().min(2),queries:qv.optional(),keywords:qv.optional(),competitors:y(o().min(1)).optional().default([]),providers:y(gt).optional().default([]),providerModels:Qf.optional().default({}),locations:y(cn).optional().default([]),defaultLocation:o().optional(),measurement:Xf.optional().default(Gk),schedule:fz,notifications:y(gz).optional().default([]),google:yz,autoExtractBacklinks:N().optional().default(!1)}).superRefine((e,n)=>{e.queries!==void 0&&e.keywords!==void 0&&n.addIssue({code:"custom",message:"Use spec.queries; spec.keywords is accepted only as a legacy alias when spec.queries is omitted",path:["keywords"]});const i=lz(e.locations);i.length>0&&n.addIssue({code:"custom",message:`Duplicate location labels are not allowed: ${i.join(", ")}`,path:["locations"]}),cz(e.locations,e.defaultLocation)||n.addIssue({code:"custom",message:`defaultLocation "${e.defaultLocation}" must match a configured location label`,path:["defaultLocation"]})});m({apiVersion:z("canonry/v1"),kind:z("Project"),metadata:hz,spec:bz});const vz=["branded","non-brand"],_r=A(vz),Wf=A(["all","branded","non-brand"]);function xz(e){const n=e.filter(r=>Pa(r).length>0);if(n.length===0)return null;const i=sz(n);return i.keys.size===0?null:{matcher:i,classify(r){return oz(i,r)?"branded":"non-brand"}}}const wz=2,kz=o().regex(/^[a-f0-9]{64}$/),Cd=o().trim().min(1).max(256),Mv=A(["sensitive","insensitive"]),he=o().trim().min(1).max(128).regex(/^[a-z0-9][\w.~-]*$/i,"Must be a URL-safe stable key"),Sz=o().trim().min(1).refine(e=>rc(e)!==null,"A competitor domain must be a valid hostname"),jz=qe("kind",[m({kind:z("exact"),url:o().min(1),pathCase:Mv}).strict(),m({kind:z("prefix"),host:o().min(1),pathPrefix:o().min(1),pathCase:Mv}).strict(),m({kind:z("host"),host:o().min(1)}).strict()]),Az=m({canonicalHost:o().min(1),ownedHosts:y(o().min(1)),names:y(o().min(1))}).strict(),Cz=m({projectBrand:Az}).strict(),Nz=m({stableKey:he,label:o().trim().min(1),aliases:y(o().min(1)),identityAliases:y(o().trim().min(1)).optional(),urlMatchers:y(jz),mentionNotApplicable:N(),discoveryIdentity:o().min(1).nullable()}).strict(),a2=m({stableKey:he,label:o().trim().min(1),domain:Sz,aliases:y(o().min(1))}).strict(),_z=m({stableKey:he,label:o().trim().min(1),parentGroupKey:he.optional(),targetKeys:y(he),competitors:y(a2)}).strict(),Tz=A(["manual","query-set","template","discovery","research"]),Rz=m({templateId:o().trim().min(1).max(256),templateVersion:o().trim().min(1).max(256),template:o().trim().min(1).max(4e3),bindings:Ue(o().trim().min(1).max(128),o().trim().min(1).max(128)),output:o().trim().min(1).max(4e3)}).strict(),i2=m({source:Tz,sourceId:o().min(1).nullable(),capturedAt:o().datetime(),template:Rz.optional()}).strict(),Ez=m({queryId:Cd,queryText:o().min(1),provenance:i2}).strict(),Nd=m({providers:y(gt).min(1),models:Ue(gt,o().min(1)),location:cn.nullable()}).strict(),zz=m({stableKey:o().min(1),queryId:Cd,queryText:o().min(1),context:Nd,expectedSnapshots:d().int().nonnegative()}).strict(),Jf=_r,Dz=m({targetKey:he,queryId:Cd,queryClass:Jf,classificationSource:A(["server","operator"]).optional(),executionNodeKey:o().min(1)}).strict(),e0=m({executionNodeKey:o().min(1),targetKey:he,queryId:Cd}).strict(),s2=m({stableKey:he,label:o().trim().min(1),kind:z("market"),groupKey:he.optional(),usageEdges:y(e0)}).strict();function Bv(e){return[e.executionNodeKey,e.targetKey,e.queryId].join("\0")}const _d=m({schemaVersion:z(wz),identities:Cz,targets:y(Nz),groups:y(_z),querySnapshots:y(Ez),assignments:y(Dz),executionNodes:y(zz),usageEdges:y(e0),reportingScopes:y(s2).optional(),compiledChecksum:kz}).strict().superRefine((e,n)=>{const i=new Set;for(const b of e.executionNodes)i.has(b.stableKey)&&n.addIssue({code:ve.custom,path:["executionNodes"],message:`Duplicate execution node key "${b.stableKey}"`}),i.add(b.stableKey);const r=new Set(e.targets.map(b=>b.stableKey));e.usageEdges.forEach((b,v)=>{i.has(b.executionNodeKey)||n.addIssue({code:ve.custom,path:["usageEdges",v,"executionNodeKey"],message:`Usage edge references unknown execution node "${b.executionNodeKey}"`}),r.has(b.targetKey)||n.addIssue({code:ve.custom,path:["usageEdges",v,"targetKey"],message:`Usage edge references unknown Target "${b.targetKey}"`})});const u=new Set(e.usageEdges.map(Bv)),h=new Set;e.reportingScopes?.forEach((b,v)=>{if(h.has(b.stableKey)&&n.addIssue({code:ve.custom,path:["reportingScopes",v,"stableKey"],message:`Duplicate reporting scope key "${b.stableKey}"`}),h.add(b.stableKey),b.groupKey!==void 0){const k=e.groups.find(j=>j.stableKey===b.groupKey);(!k||b.usageEdges.some(j=>!k.targetKeys.includes(j.targetKey)))&&n.addIssue({code:ve.custom,path:["reportingScopes",v,"groupKey"],message:"A market must link to an existing group containing all its assigned properties."})}const w=new Set;b.usageEdges.forEach((k,j)=>{const T=Bv(k);u.has(T)||n.addIssue({code:ve.custom,path:["reportingScopes",v,"usageEdges",j],message:`Reporting scope "${b.stableKey}" references a usage edge that this revision does not contain.`}),w.has(T)&&n.addIssue({code:ve.custom,path:["reportingScopes",v,"usageEdges",j],message:`Reporting scope "${b.stableKey}" repeats a usage edge.`}),w.add(T)})}),e.assignments.forEach((b,v)=>{r.has(b.targetKey)||n.addIssue({code:ve.custom,path:["assignments",v,"targetKey"],message:`Assignment references unknown Target "${b.targetKey}"`})});const g=new Map;e.groups.forEach((b,v)=>{g.has(b.stableKey)&&n.addIssue({code:ve.custom,path:["groups",v,"stableKey"],message:"Duplicate group stable key "+b.stableKey}),g.set(b.stableKey,b)}),e.groups.forEach((b,v)=>{const w=b.parentGroupKey;if(w===void 0)return;if(w===b.stableKey){n.addIssue({code:ve.custom,path:["groups",v,"parentGroupKey"],message:"A group cannot be its own parent."});return}const k=g.get(w);if(!k){n.addIssue({code:ve.custom,path:["groups",v,"parentGroupKey"],message:"Group parent does not exist: "+w});return}const j=new Set(k.targetKeys);b.targetKeys.forEach((G,R)=>{j.has(G)||n.addIssue({code:ve.custom,path:["groups",v,"targetKeys",R],message:"Group target membership must be a subset of its parent."})});const T=new Set([b.stableKey]);let _=k;for(;_.parentGroupKey!==void 0;){if(T.has(_.stableKey)){n.addIssue({code:ve.custom,path:["groups",v,"parentGroupKey"],message:"Group parent relationships cannot contain a cycle."});break}T.add(_.stableKey);const G=g.get(_.parentGroupKey);if(!G)break;_=G}});for(const b of e.groups)for(const v of b.targetKeys)r.has(v)||n.addIssue({code:ve.custom,path:["groups"],message:`Group "${b.stableKey}" references unknown Target "${v}"`})}),t0=100;function vr(e){return m({items:y(e),nextCursor:o().min(1).nullable(),totalEstimate:d().int().nonnegative().optional()}).strict()}const Td=A(["no_completed_run","plan_v1","no_population","evidence_incomplete","identity_ambiguous","not_applicable"]),Xt=qe("state",[m({state:z("available"),value:d(),numerator:d().int().nonnegative().optional(),denominator:d().int().positive().optional(),unattributed:d().int().positive().optional()}).strict(),m({state:z("unavailable"),reason:Td}).strict()]),n0=A(["all","group","property"]),La=Wf,Oz=A(["label-asc","label-desc","citationCoverage-asc","citationCoverage-desc","mentionCoverage-asc","mentionCoverage-desc"]),a0=A(["not_measured","queued","running","complete","partial","failed"]),Iz=A(["run_measurement","review_flags","complete_setup","republish_setup","none"]);m({scope:n0,groupKey:he.optional(),targetKey:he.optional(),queryClass:La.optional(),provider:gt.optional(),location:o().trim().min(1).optional(),from:o().trim().min(1).optional(),to:o().trim().min(1).optional(),runId:o().trim().min(1).optional(),search:o().optional(),sort:Oz.optional(),cursor:o().trim().min(1).optional(),limit:d().int().positive().max(t0).optional()}).strict();const Pz=m({provider:gt,mentionCoverage:Xt,citationCoverage:Xt}).strict(),qz=m({bothSignals:d().int().nonnegative(),mentionedOnly:d().int().nonnegative(),citedOnly:d().int().nonnegative(),neither:d().int().nonnegative(),notMeasured:d().int().nonnegative(),total:d().int().nonnegative()}).strict(),Mz=m({targetKey:he,label:o().min(1),mentionCoverage:Xt,citationCoverage:Xt,providers:y(Pz),flags:d().int().nonnegative()}).strict(),Bz=m({kind:A(["project","competitor"]),stableKey:o().min(1),label:o().min(1),domain:o().min(1),credits:d().int().nonnegative(),share:d().min(0).max(1)}).strict(),Lz=m({groupKey:he,queryClass:z("non-brand"),denominator:d().int().positive(),entries:y(Bz)}).strict();m({mode:A(["active-v1","active-v2"]),scope:m({kind:n0,key:o().min(1).optional(),label:o().min(1)}).strict(),queryClass:La,measurement:m({state:a0,currentRunId:o().min(1).optional(),displayedRunId:o().min(1).optional(),completed:d().int().nonnegative(),expected:d().int().nonnegative(),completedAt:o().datetime().optional(),includesHistoricalData:N().optional()}).strict(),nextAction:m({kind:Iz,count:d().int().nonnegative().optional()}).strict(),metrics:m({propertiesMentioned:Xt,mentionCoverage:Xt,citationCoverage:Xt,brandPresence:Xt,sov:Xt.describe("Deprecated alias of brandPresence carrying the identical value. Remove once the browser migrates.")}).strict(),properties:vr(Mz),outcomes:qz,flags:m({total:d().int().nonnegative()}).strict(),namedShareOfVoice:Lz.optional()}).strict();const o2=A(["sources","answers"]),Vz=o2.enum;Vz.sources;m({targetKey:he,queryClass:La.optional(),provider:gt.optional(),location:o().trim().min(1).optional(),runId:o().trim().min(1).optional(),shape:o2.optional(),cursor:o().trim().min(1).optional(),limit:d().int().positive().max(t0).optional()}).strict();const r2=1,lc=d().int().positive(),ln=o().trim().min(1).max(128).regex(/^[a-z0-9][\w.~-]*$/i,"Must be a URL-safe stable key"),cc=o().trim().min(1).max(256),Lv=A(["sensitive","insensitive"]);function sd(e){const n=rc(e);if(!n)throw new Error(`Invalid measurement host: ${e}`);return n}function $z(e){const n=[];let i=!1;for(let r=0;r<e.length;r++){const u=e[r];u==="/"?(i||n.push(u),i=!0):(n.push(u),i=!1)}for(;n.length>1&&n.at(-1)==="/";)n.pop();return n.length?n.join(""):"/"}function Vv(e){try{return decodeURI(e).normalize("NFC").toLowerCase()}catch{return e.normalize("NFC").toLowerCase()}}function l2(e){const n=new URL(`https://measurement.invalid${e}`).pathname;return $z(n.replace(/%[0-9a-f]{2}/gi,i=>i.toUpperCase()))}function sf(e){const n=e.trim();if(!n||n.includes("?")||n.includes("#")||n.includes("://")||n.includes("\\"))throw new Error(`Invalid measurement path prefix: ${e}`);const i=n.startsWith("/")?n:`/${n}`;for(const r of i.split("/")){let u;try{u=decodeURIComponent(r)}catch{throw new Error(`Invalid measurement path prefix: ${e}`)}if(u==="."||u==="..")throw new Error(`Invalid measurement path prefix: ${e}`)}try{return l2(i)}catch{throw new Error(`Invalid measurement path prefix: ${e}`)}}function Uz(e){const n=/^[a-z][a-z0-9+.-]*:\/\/[^/?#]*/i.exec(e);if(!n)throw new Error(`Invalid exact measurement URL: ${e}`);return e.slice(n[0].length).split(/[?#]/,1)[0]||"/"}function $v(e){const n=e.trim();if(!n||n.includes("\\"))throw new Error(`Invalid exact measurement URL: ${e}`);let i;try{i=new URL(n)}catch{throw new Error(`Invalid exact measurement URL: ${e}`)}if(i.protocol!=="http:"&&i.protocol!=="https:"||i.username||i.password||i.port||i.search||i.hash)throw new Error(`Invalid exact measurement URL: ${e}`);const r=sd(i.hostname),u=sf(Uz(n));return`https://${r}${u}`}const tc=o().trim().min(1).refine(e=>{try{return sd(e),!0}catch{return!1}},"A target URL matcher host must be a valid hostname").overwrite(e=>sd(e)),Gz=o().trim().min(1).refine(e=>{try{return sf(e),!0}catch{return!1}},"A target URL matcher pathPrefix must be an absolute path without query or fragment").overwrite(e=>sf(e)),Kz=o().trim().min(1).refine(e=>{try{return $v(e),!0}catch{return!1}},"A target exact matcher must be an HTTP(S) URL without credentials, port, query, or fragment").overwrite(e=>$v(e)),Hz=qe("kind",[m({kind:z("exact"),url:Kz,pathCase:Lv}).strict(),m({kind:z("prefix"),host:tc,pathPrefix:Gz,pathCase:Lv}).strict(),m({kind:z("host"),host:tc}).strict()]),c2=o().trim().min(1).max(256).refine(e=>Pa(e).length>0,"A target alias must contain mention text"),Qz=Ue(o().trim().min(1),o()),Fz=tc,u2=m({stableKey:ln,label:o().trim().min(1),urls:y(Hz).min(1),aliases:y(c2),metadata:Qz.optional()}).strict(),i0=m({stableKey:ln,label:o().trim().min(1),targetKeys:y(ln).min(1),competitors:y(Fz).optional()}).strict(),d2=m({targetKey:ln,queryIds:y(cc).min(1),context:cn.nullable().optional()}).strict();function Zz(e,n){return e<n?-1:e>n?1:0}function Yz(e,n=i=>i){const i=new Set,r=new Set;for(const u of e){const h=n(u);i.has(h)&&r.add(h),i.add(h)}return r}function wh(e,n,i,r,u){for(const h of Yz(n,u))e.addIssue({code:"custom",path:[...i],message:`Duplicate ${r}: ${h}`})}function Uv(e){if(e.kind==="host")return{host:e.host,pathname:null};if(e.kind==="prefix")return{host:e.host,pathname:e.pathPrefix};const n=new URL(e.url);return{host:sd(n.hostname),pathname:l2(n.pathname||"/")}}function Xz(e,n,i,r){return e===i||(n==="insensitive"||r==="insensitive")&&Vv(e)===Vv(i)}function Wz(e,n){if(e.kind!==n.kind)return!1;const i=Uv(e),r=Uv(n);return i.host!==r.host?!1:e.kind==="host"||n.kind==="host"?!0:Xz(i.pathname,e.pathCase,r.pathname,n.pathCase)}function Jz(e){const n=new Set;return[...e].sort(Zz).filter(i=>{const r=Pa(i);return n.has(r)?!1:(n.add(r),!0)})}const m2=m({schemaVersion:z(r2),targets:y(u2).min(1),groups:y(i0).optional(),targetQuerySelections:y(d2).optional()}).strict().superRefine((e,n)=>{const i=e.groups??[],r=e.targetQuerySelections??[];wh(n,e.targets.map(v=>v.stableKey),["targets"],"target stable key"),wh(n,i.map(v=>v.stableKey),["groups"],"group stable key");const u=new Set(e.targets.map(v=>v.stableKey)),h=new Set(i.map(v=>v.stableKey));for(const v of u)h.has(v)&&n.addIssue({code:"custom",path:["groups"],message:`Target and group stable keys must be globally unique: ${v}`});const g=new Map,b=[];e.targets.forEach((v,w)=>{for(const k of Jz(v.aliases)){const j=Pa(k),T=g.get(j);T&&T!==v.stableKey&&n.addIssue({code:"custom",path:["targets",w,"aliases"],message:`Target alias is already assigned to target ${T}: ${k}`}),g.set(j,v.stableKey)}v.urls.forEach((k,j)=>{b.find(_=>_.targetKey!==v.stableKey&&Wz(_.matcher,k))&&n.addIssue({code:"custom",path:["targets",w,"urls",j],message:"Target URL matcher has an equal-specificity cross-target tie"}),b.push({targetKey:v.stableKey,matcher:k})})}),i.forEach((v,w)=>{wh(n,v.targetKeys,["groups",w,"targetKeys"],"group target key");for(let k=0;k<v.targetKeys.length;k++){const j=v.targetKeys[k];u.has(j)||n.addIssue({code:"custom",path:["groups",w,"targetKeys",k],message:`Unknown target: ${j}`})}}),r.forEach((v,w)=>{u.has(v.targetKey)||n.addIssue({code:"custom",path:["targetQuerySelections",w,"targetKey"],message:`Unknown target: ${v.targetKey}`})})});m2.transform(e=>({...e,groups:e.groups??[],targetQuerySelections:e.targetQuerySelections??[]}));m({expectedActiveRevision:lc.nullable(),plan:m2}).strict();const eD=m({queryId:cc,queryText:o().min(1)}).strict(),s0=m({stableKey:o().min(1),queryText:o().min(1),context:cn.nullable(),expectedSnapshots:d().int().nonnegative()}).strict(),tD=m({kind:z("baseline"),executionNodeKey:o().min(1),queryId:cc}).strict(),nD=m({kind:z("target"),executionNodeKey:o().min(1),queryId:cc,targetKey:ln}).strict(),of=qe("kind",[tD,nD]),p2=m({code:z("target-alias-prefix-overlap"),message:o().min(1),targetKeys:y(ln).min(1),aliases:y(o().min(1)).min(1)}).strict(),h2=u2.extend({mentionNotApplicable:N()}),f2=m({schemaVersion:z(r2),defaultContext:cn.nullable(),effectiveOwnedHosts:y(tc),projectCanonicalHost:tc,projectBrandNames:y(c2),targets:y(h2),groups:y(i0),targetQuerySelections:y(d2),querySnapshots:y(eD),executionNodes:y(s0),usageEdges:y(of),warnings:y(p2)}).strict(),aD=f2,g2=qe("schemaVersion",[f2,_d]),o0=o().regex(/^[a-f0-9]{64}$/),r0=o().datetime(),y2=m({schemaVersion:z(1),providers:y(o().min(1)).min(1),models:Ue(o().min(1),o().min(1)),checksum:o().regex(/^[a-f0-9]{64}$/)}).strict(),iD=m({groups:y(ln).optional(),targets:y(ln).optional()}).strict(),sD=m({groups:y(ln),targets:y(ln),queries:y(o().min(1)),resolvedTargets:y(ln)}).strict().superRefine((e,n)=>{e.resolvedTargets.length===0&&e.queries.length===0&&n.addIssue({code:"custom",path:["resolvedTargets"],message:"A recorded scope must name something it measured"})});m({stableKey:ln,retiredAt:o().datetime()});m({active:m({revision:lc,checksum:o0,createdAt:r0,plan:g2}).nullable()});m({versions:y(m({revision:lc,checksum:o0,createdAt:r0,active:N()}))});m({version:m({revision:lc,checksum:o0,createdAt:r0,active:N(),plan:g2})});const Qu=m({targets:d().int(),groups:d().int(),queries:d().int(),executionNodes:d().int(),usageEdges:d().int(),baselineEdges:d().int(),targetEdges:d().int(),dedupSavings:d().int()}).strict(),oD=A(["invalid-authoring","duplicate-identity","unknown-target","unknown-query","invalid-project-context","unowned-target-url","owned-competitor","target-query-context-conflict","target-url-ownership-tie","target-alias-cross-target-collision","target-alias-project-brand-collision","target-alias-prefix-overlap"]),b2=m({id:oD,severity:A(["fail","warn"]),message:o().min(1),path:y(Ze([o(),d().int()]))}).strict(),rD=m({baseline:d().int().nonnegative(),target:d().int().nonnegative()}).strict(),v2=m({ok:z(!0),checks:y(b2),executionNodes:y(s0),dedupSaved:d().int().nonnegative(),usageEdges:rD,estCostUsd:de(),plan:aD,warnings:y(p2),counts:Qu}).strict(),x2=m({ok:z(!1),checks:y(b2).min(1),executionNodes:y(s0).length(0),dedupSaved:z(0),usageEdges:m({baseline:z(0),target:z(0)}).strict(),estCostUsd:de()}).strict();qe("ok",[v2,x2]);const Eu=m({targetKey:ln,context:cn.nullable(),queryIds:y(cc)}).strict();function Gv(e){return m({added:y(e),removed:y(e),changed:y(m({stableKey:ln,before:e,after:e}).strict()),unchanged:y(ln)}).strict()}const lD=v2.extend({diff:m({activeRevision:lc.nullable(),targets:Gv(h2),groups:Gv(i0),querySelections:m({added:y(Eu),removed:y(Eu),changed:y(m({targetKey:ln,before:Eu,after:Eu}).strict()),unchanged:y(m({targetKey:ln,context:cn.nullable()}).strict())}).strict(),execution:m({addedNodeKeys:y(o().min(1)),removedNodeKeys:y(o().min(1)),addedUsageEdges:y(of),removedUsageEdges:y(of),counts:m({before:Qu.nullable(),after:Qu,delta:Qu.nullable()}).strict()}).strict()}).strict()}).strict(),cD=x2.extend({diff:de()}).strict();qe("ok",[lD,cD]);const uD=1,dD=o().refine(e=>e.trim().length>0,{message:"Must not be blank"}),w2=m({displayName:o(),aliases:y(o()),canonicalDomain:o(),ownedDomains:y(o())}).strict(),k2=m({provider:gt.refine(e=>e.trim().length>0,{message:"Provider must not be blank"}),requestedModel:o().nullable()}).strict(),S2=m({domain:o(),label:o(),aliases:y(o())}).strict(),j2=m({queryId:dD,queryText:o(),provenance:o().nullable()}).strict(),mD=j2.extend({queryClass:_r.nullable()}).strict();function A2(e,n){const i=new Set;e.engines.forEach((h,g)=>{const b=h.provider.trim().toLocaleLowerCase("en");i.has(b)&&n.addIssue({code:ve.custom,path:["engines",g,"provider"],message:`Duplicate engine provider "${h.provider}"`}),i.add(b)});const r=new Set;e.queries.forEach((h,g)=>{r.has(h.queryId)&&n.addIssue({code:ve.custom,path:["queries",g,"queryId"],message:`Duplicate query id "${h.queryId}"`}),r.add(h.queryId)});const u=new Set;e.competitors?.forEach((h,g)=>{const b=h.domain;u.has(b)&&n.addIssue({code:ve.custom,path:["competitors",g,"domain"],message:`Duplicate competitor domain "${h.domain}"`}),u.add(b)})}m({capturedAt:o().datetime(),identity:w2,country:o(),language:o(),location:cn.nullable(),engines:y(k2).min(1),competitors:y(S2).optional(),queries:y(j2)}).strict().superRefine(A2);m({schemaVersion:z(uD),capturedAt:o().datetime(),identity:w2,country:o(),language:o(),location:cn.nullable(),engines:y(k2).min(1),competitors:y(S2).optional(),queries:y(mD)}).strict().superRefine(A2);const pD=A(["auto","simple","advanced"]),C2=A(["simple","advanced"]),N2=A(["branded","non-brand","unknown","all"]),hD=A(["branded","non-brand","unknown"]),l0=A(["project","group","market","property"]),_2=qe("kind",[m({kind:z("all")}).strict(),m({kind:z("none")}).strict(),m({kind:z("exact"),value:o().trim().min(1)}).strict()]);function fD(e){if(e===void 0||e==="")return{kind:"all"};const n=e.normalize("NFKC").trim();return n===""?{kind:"all"}:n.toLocaleLowerCase("en")==="none"?{kind:"none"}:{kind:"exact",value:n}}const bt=o().trim().min(1),Ni=o().datetime(),gD={mode:pD.default("auto"),queryClass:N2.default("non-brand"),scope:l0.default("project"),scopeKey:bt.optional(),marketKey:bt.optional(),provider:bt.optional(),model:bt.optional(),location:o().trim().min(1).optional(),from:Ni.optional(),to:Ni.optional(),revision:d().int().positive().optional(),runId:bt.optional(),queryKey:bt.optional(),queryId:bt.optional(),search:o().trim().min(1).optional(),cursor:bt.optional(),limit:d().int().min(1).max(100).default(50)},od=m(gD).strict().superRefine((e,n)=>{e.scope!=="project"&&e.scopeKey===void 0&&n.addIssue({code:ve.custom,path:["scopeKey"],message:`scopeKey is required for ${e.scope} scope`}),e.scope==="project"&&e.scopeKey!==void 0&&n.addIssue({code:ve.custom,path:["scopeKey"],message:"scopeKey is not valid for project scope"}),e.scope==="market"&&e.marketKey!==void 0&&n.addIssue({code:ve.custom,path:["marketKey"],message:"marketKey is not valid for market scope"}),e.from!==void 0&&e.to!==void 0&&e.from>e.to&&n.addIssue({code:ve.custom,path:["to"],message:"to must be on or after from"}),e.queryKey!==void 0&&e.queryId!==void 0&&n.addIssue({code:ve.custom,path:["queryId"],message:"queryKey and queryId cannot both be supplied"})});od.transform(e=>({...e,location:fD(e.location)}));const ja=m({numerator:d().int().nonnegative().nullable(),denominator:d().int().nonnegative().nullable(),rate:d().min(0).max(1).nullable(),reason:A(["no-population","incomplete","evidence-incomplete","identity-ambiguous","not-applicable"]).optional(),unattributed:d().int().positive().optional()}).strict().superRefine((e,n)=>{if(e.numerator===null||e.denominator===null||e.rate===null){(e.numerator!==null||e.denominator!==null||e.rate!==null||e.reason===void 0)&&n.addIssue({code:ve.custom,message:"Unavailable rates require null values and a reason"}),e.unattributed!==void 0&&n.addIssue({code:ve.custom,path:["unattributed"],message:"Only an available rate can leave answers out"});return}e.reason!==void 0&&n.addIssue({code:ve.custom,message:"Available rates cannot carry a reason"});const{numerator:r,denominator:u}=e;u===null||r===null||(u===0&&n.addIssue({code:ve.custom,path:["denominator"],message:"Available rates require a positive denominator"}),r>u&&n.addIssue({code:ve.custom,path:["numerator"],message:"Numerator cannot exceed denominator"}))}),T2=qe("kind",[m({kind:z("frozen-simple"),definitionRevision:de()}).strict(),m({kind:z("legacy-simple"),definitionRevision:de()}).strict(),m({kind:z("frozen-advanced"),definitionRevision:d().int().positive()}).strict(),m({kind:z("unsupported-advanced-v1"),definitionRevision:d().int().positive()}).strict()]),rd=m({id:bt,label:o().trim().min(1),kind:l0,targetCount:d().int().nonnegative(),parentGroupIds:y(bt).optional(),marketKeys:y(bt).optional()}).strict(),yD=m({provider:bt,model:bt}).strict(),bD=m({providers:y(bt),models:y(yD),locations:y(_2)}).strict(),vD=m({queryCount:d().int().nonnegative(),answerCount:d().int().nonnegative(),mentionCoverage:ja,citationCoverage:ja,propertyReach:ja,outcomes:m({bothSignals:d().int().nonnegative(),mentionedOnly:d().int().nonnegative(),citedOnly:d().int().nonnegative(),neither:d().int().nonnegative(),notMeasured:d().int().nonnegative(),total:d().int().nonnegative()}).strict().superRefine((e,n)=>{e.bothSignals+e.mentionedOnly+e.citedOnly+e.neither+e.notMeasured!==e.total&&n.addIssue({code:ve.custom,message:"Outcome partition must sum to total"})})}).strict(),xD=m({runId:bt,createdAt:Ni,revision:d().int().positive().nullable(),provenance:T2,queryCount:d().int().nonnegative(),answerCount:d().int().nonnegative(),mentionCoverage:ja,citationCoverage:ja,continuity:m({state:A(["first","comparable","definition-changed","model-changed","legacy-unknown"]),comparedRunId:o().nullable()}).strict()}).strict(),wD=m({queryKey:bt,queryId:o().nullable(),query:o(),provider:bt,model:o().nullable(),location:o().nullable(),targetKeys:y(bt),marketKeys:y(bt).optional(),answerCount:d().int().nonnegative(),mentionCoverage:ja,citationCoverage:ja}).strict(),kD=m({answerId:bt,runId:bt,queryKey:bt,query:o(),provider:bt,model:o().nullable(),location:o().nullable(),targetKeys:y(bt),mentioned:N().nullable(),mentionUnavailableReason:z("identity-ambiguous").optional(),cited:N().nullable(),answerText:o().nullable(),createdAt:Ni,sources:y(o()),observedCompetitors:y(bt)}).strict(),SD=m({domain:bt,answerCount:d().int().nonnegative(),mentionCoverage:ja,citationCoverage:ja}).strict(),jD=m({name:bt,answerCount:d().int().nonnegative()}).strict(),AD=qe("state",[m({state:z("available")}).strict(),m({state:z("unavailable"),reason:z("frozen-competitor-identity-missing")}).strict()]),Kv=m({id:bt,label:o().trim().min(1),queryCount:d().int().nonnegative(),mentionCoverage:ja,citationCoverage:ja}).strict();function Hv(e){return m({items:y(e),nextCursor:o().nullable(),total:d().int().nonnegative()}).strict()}const R2=A(["current-unavailable","previous-unavailable","not-applicable"]),kY=R2.enum,kh=qe("state",[m({state:z("available"),previous:ja,delta:d().min(-1).max(1)}).strict(),m({state:z("unavailable"),reason:R2}).strict()]),Qv=m({id:bt,createdAt:Ni,completedAt:Ni.nullable()}).strict(),E2=A(["no-selected-run","no-previous-run","scoped-run","partial-run","definition-changed","model-changed","legacy-unknown"]),SY=E2.enum,CD=qe("state",[m({state:z("available"),previousRun:Qv,mentionCoverage:kh,citationCoverage:kh,propertyReach:kh}).strict(),m({state:z("unavailable"),reason:E2,previousRun:Qv.nullable()}).strict()]),z2=m({queryClass:hD,summary:vD,trend:y(xD),comparison:CD.optional(),queries:Hv(wD),evidence:Hv(kD),competitorAvailability:AD,competitors:y(SD),observedCompetitors:y(jD),breakdown:m({properties:y(Kv),groups:y(Kv)}).strict()}).strict(),ND=A(["measured","not-measured","partial"]),_D=m({state:ND,activeRevision:d().int().positive().nullable(),measuredRevision:d().int().positive().nullable(),awaitingSweep:N(),pendingAssignmentCount:d().int().nonnegative(),completedAt:Ni.nullable()}).strict(),D2=m({mode:C2,queryClass:N2,scope:rd,market:rd.optional(),provider:o().nullable(),model:o().nullable(),location:_2,time:m({from:Ni.nullable(),to:Ni.nullable()}).strict(),revision:d().int().positive().nullable(),run:m({id:o().nullable(),explicit:N()}).strict(),provenance:T2,measurement:_D,availability:qe("state",[m({state:z("available")}).strict(),m({state:z("unsupported"),reason:z("advanced-v1")}).strict()])}).strict();m({selection:D2,scopeOptions:y(rd),filterOptions:bD,populations:y(z2).min(1)}).strict().superRefine((e,n)=>{const i=e.selection.queryClass==="all"?["branded","non-brand","unknown"]:[e.selection.queryClass],r=e.populations.map(u=>u.queryClass);(r.length!==i.length||r.some((u,h)=>u!==i[h]))&&n.addIssue({code:ve.custom,path:["populations"],message:"Populations must exactly match the selected query class order"});for(const[u,h]of e.populations.entries()){const g=h.comparison;if(g?.state==="available")for(const b of["mentionCoverage","citationCoverage","propertyReach"]){const v=g[b];if(v.state!=="available")continue;const w=["populations",u,"comparison",b],k=h.summary[b].rate,j=v.previous.rate;k===null&&n.addIssue({code:ve.custom,path:w,message:"Available changes require a current rate"}),j===null&&n.addIssue({code:ve.custom,path:[...w,"previous","rate"],message:"Available changes require a previous rate"}),k!==null&&j!==null&&Math.abs(v.delta-(k-j))>Number.EPSILON&&n.addIssue({code:ve.custom,path:[...w,"delta"],message:"Delta must equal current minus previous"}),e.selection.run.id===null&&n.addIssue({code:ve.custom,path:w,message:"Available changes require a selected run"})}}});const O2=A(["retired-scope","retired-market"]),TD=O2.enum,RD=m({reason:O2,kind:l0.exclude(["project"]),key:bt}).strict().superRefine((e,n)=>{e.reason===TD["retired-market"]&&e.kind!=="market"&&n.addIssue({code:ve.custom,path:["kind"],message:"retired-market details must name a market"})});function jY(e){const n=RD.safeParse(e);return n.success?n.data:void 0}function ED(e,n){let i=e;for(const[r,u]of Object.entries(n))i=i.split(`{${r}}`).join(u);return i.trim()}const c0=o().regex(/^[a-f0-9]{64}$/),na=o().trim().min(1).max(256),qa=o().trim().min(1).max(4e3),u0=o().datetime(),Rd=o().regex(/^qtw_[a-f0-9]{64}$/),I2=o().regex(/^qtp_[a-f0-9]{64}$/),d0=A(["simple","advanced"]),P2=m({templateId:na,templateVersion:o().trim().min(1).max(256),template:qa,bindings:Ue(o().trim().min(1).max(128),o().trim().min(1).max(128)),output:qa}).strict(),zD=m({source:A(["manual","query-set","template","research","discovery"]),sourceId:na.nullable(),capturedAt:o().datetime(),template:P2.optional()}).strict().superRefine((e,n)=>{e.source==="template"&&e.template===void 0&&n.addIssue({code:ve.custom,path:["template"],message:"Template provenance is required for a template query."}),e.source!=="template"&&e.template!==void 0&&n.addIssue({code:ve.custom,path:["template"],message:"Only a template query may carry template provenance."})}),DD=qe("source",[m({source:z("manual"),text:qa}).strict(),m({source:z("template"),templateId:na,templateVersion:o().trim().min(1).max(256),template:qa}).strict(),m({source:z("research"),researchRunQueryId:na}).strict(),m({source:z("discovery"),discoveryProbeId:na}).strict()]),m0=m({targetKeys:y(he).optional(),groupKeys:y(he).optional(),marketKeys:y(he).optional()}).strict(),OD=m({providers:y(gt).min(1),models:Ue(gt,o().trim().min(1)),location:o().trim().min(1).nullable()}).strict(),ID=m({input:DD,audience:m0.optional(),contexts:y(OD).min(1).optional(),queryClass:_r.optional()}).strict(),PD=m({queryId:na.optional(),queryText:qa.optional(),audience:m0.optional()}).strict().superRefine((e,n)=>{e.queryId===void 0==(e.queryText===void 0)&&n.addIssue({code:ve.custom,message:"Provide exactly one of queryId or queryText."})}),qD=m({queryId:na,audience:m0.optional(),text:qa.optional(),queryClass:Ze([_r,de()]).optional()}).strict().superRefine((e,n)=>{e.text===void 0&&e.queryClass===void 0&&n.addIssue({code:ve.custom,message:"Provide query text or a classification change."})}),MD=m({additions:y(ID),removals:y(PD),edits:y(qD).optional()}).strict(),BD=MD.extend({expectedWorkspaceVersion:Rd}).strict();BD.extend({previewToken:I2,reviewedAt:u0}).strict();const LD=m({stableKey:he,label:o().trim().min(1)}).strict(),VD=m({stableKey:he,parentGroupKey:he.optional(),label:o().trim().min(1),targetKeys:y(he)}).strict(),$D=m({stableKey:he,groupKey:he.optional(),label:o().trim().min(1),usageEdges:y(e0)}).strict(),UD=m({targetKey:he,groupKeys:y(he),marketKeys:y(he),queryClass:_r.nullable(),classificationSource:A(["frozen","server","operator"]),contexts:y(Nd).min(1)}).strict(),q2=m({queryId:na,queryText:qa,normalizedText:qa,provenance:zD.nullable(),state:A(["tracked","awaiting-sweep"]),lastMeasuredAt:o().datetime().nullable(),assignments:y(UD)}).strict(),GD=m({researchRunId:na,researchRunQueryId:na,queryText:qa,createdAt:o().datetime()}).strict(),KD=m({discoverySessionId:na,discoveryProbeId:na,queryText:qa,createdAt:o().datetime()}).strict();m({mode:d0,workspaceVersion:Rd,active:m({revision:d().int().positive(),compiledChecksum:c0}).strict().nullable(),defaultContexts:y(Nd),targets:y(LD),groups:y(VD),markets:y($D),scopeOptions:y(rd).optional(),tracked:y(q2),savedSources:m({research:y(GD),discovery:y(KD)}).strict()}).strict();const zu=m({queryId:na,queryText:qa,assignmentCount:d().int().nonnegative()}).strict(),M2=m({added:y(zu),removed:y(zu),reused:y(zu),unchanged:y(zu),noOp:N()}).strict(),B2=m({existingNodes:d().int().nonnegative(),existingProviderCalls:d().int().nonnegative(),nextSweepNodes:d().int().nonnegative(),nextSweepProviderCalls:d().int().nonnegative(),addedNodes:d().int().nonnegative(),addedProviderCalls:d().int().nonnegative(),removedNodes:d().int().nonnegative(),removedProviderCalls:d().int().nonnegative()}).strict();m({mode:d0,workspaceVersion:Rd,previewToken:I2,reviewedAt:u0,active:m({revision:d().int().positive(),compiledChecksum:c0}).strict().nullable(),tracked:y(q2),diff:M2,workload:B2}).strict();m({committed:N(),mode:d0,workspaceVersion:Rd,reviewedAt:u0,active:m({revision:d().int().positive(),compiledChecksum:c0}).strict().nullable(),diff:M2,workload:B2}).strict();const Ed=A(["complete","partial","failed","unsupported"]);Ed.enum;A(["proposed","alias","shared","unmatched","excluded"]);A(["primary-match","exact-slug-match","excluded-slug","shared-path","unmatched-path","alias-without-primary","unsupported-slug"]);const HD=A(["invalid-url","unowned-host","duplicate-url","url-cap-reached"]),QD=m({kind:A(["exact","prefix","suffix","contains"]),value:o().trim().min(1)}).strict(),Fv=m({host:o().trim().min(1),pathTemplate:o().trim().min(1)}).strict(),p0=m({primary:Fv,aliases:y(Fv).optional(),excludedSlugSuffixes:y(o().trim().min(1)).optional(),excludedSlugPatterns:y(QD).optional()}).strict();m({sitemapUrl:o().url().refine(e=>{try{const n=new URL(e).protocol;return n==="http:"||n==="https:"}catch{return!1}},"Sitemap URL must use http or https"),rule:p0,maxUrls:d().int().positive().max(1e4).optional()}).strict();const Sh=m({url:o(),canonicalUrl:o().nullable(),classification:A(["shared","unmatched","excluded"]),reason:A(["excluded-slug","shared-path","unmatched-path","alias-without-primary","unsupported-slug"])}).strict().superRefine((e,n)=>{({shared:["shared-path"],unmatched:["unmatched-path","alias-without-primary","unsupported-slug"],excluded:["excluded-slug"]})[e.classification].includes(e.reason)||n.addIssue({code:"custom",message:"Discovery classification and reason do not match"})}),FD=m({classification:z("proposed"),reason:z("primary-match"),stableKey:ln,slug:o().trim().min(1),label:o().trim().min(1),primaryUrl:o().url(),aliasCoverageUrls:y(o().url())}).strict(),ZD=m({classification:z("alias"),reason:z("exact-slug-match"),slug:o().trim().min(1),url:o().url(),targetStableKey:ln}).strict(),YD=m({kind:HD,url:o(),canonicalUrl:o().nullable(),duplicateOf:o().optional()}).strict();m({proposed:y(FD),aliases:y(ZD),shared:y(Sh),unmatched:y(Sh),excluded:y(Sh),diagnostics:y(YD)}).strict().superRefine((e,n)=>{const i=[["shared",["shared"]],["unmatched",["unmatched"]],["excluded",["excluded"]]];for(const[r,u]of i)for(const h of e[r])u.includes(h.classification)||n.addIssue({code:"custom",path:[r],message:"Discovery item is in the wrong result bucket"})});const h0=A(["assigned","sibling","ownedUnmapped","external","ambiguous","invalid"]),L2=A(["baseline","target"]),V2=A(["incomplete","evidence-incomplete","identity-ambiguous","no-population","aliasless","no-competitors","no-project-aliases"]),ro=Ze([m({numerator:d().int().nonnegative(),denominator:d().int().positive(),rate:d().min(0).max(1),unattributed:d().int().positive().optional()}).strict(),m({numerator:de(),denominator:de(),rate:de(),reason:V2}).strict()]).superRefine((e,n)=>{e.numerator!==null&&e.numerator>e.denominator&&n.addIssue({code:"custom",path:["numerator"],message:"Rate numerator cannot exceed denominator"})}),XD=o().trim().min(1).overwrite(e=>e.toLocaleLowerCase("en")),WD=m({executionId:o().trim().min(1),queryText:o().trim().min(1),provider:XD,context:cn.nullable(),requestedModel:o().trim().min(1).optional()}).strict();m({schemaVersion:z(1),expectedSlots:y(WD)}).strict().superRefine((e,n)=>{const i=new Set;for(const[r,u]of e.expectedSlots.entries()){const h=[u.executionId,u.provider].join("\0");i.has(h)&&n.addIssue({code:"custom",path:["expectedSlots",r],message:"Duplicate expected provider slot"}),i.add(h)}});const zd=m({executed:d().int().nonnegative(),expected:d().int().nonnegative(),complete:N(),sourceComplete:N(),sourceCompleteObservations:d().int().nonnegative(),answerComplete:N()}).strict(),Zv=Ze([m({domain:o().trim().min(1),own:N(),presentIn:d().int().nonnegative(),of:d().int().positive()}).strict(),m({domain:o().trim().min(1),own:N(),presentIn:de(),of:de(),reason:V2}).strict()]),JD=m({domains:y(Zv),providers:y(m({provider:gt,domains:y(Zv)}).strict())}).strict(),e9=m({provider:gt,completeness:zd,answerCoverage:ro}).strict(),t9=m({id:o().trim().min(1),label:o().trim().min(1),targetIds:y(o().trim().min(1)),completeness:zd,answerCoverage:ro,targetCoverage:ro,sov:JD,providers:y(e9)}).strict(),n9=m({provider:gt,completeness:zd,citationCoverage:ro,mentionCoverage:ro}).strict(),a9=m({id:o().trim().min(1),label:o().trim().min(1),completeness:zd,citationCoverage:ro,mentionCoverage:ro,providers:y(n9)}).strict(),$2=m({observationId:o().trim().min(1),expectedSlotId:o().trim().min(1),executionId:o().trim().min(1),usageEdgeId:o().trim().min(1),usageEdgeType:L2,provider:gt,queryText:o().trim().min(1),location:o().nullable(),sourceUrl:o(),bridged:N(),historical:N(),evidenceComplete:N(),classification:h0,normalizedUrl:o().nullable(),matchedTargetIds:y(o().trim().min(1)),matchedUrlIds:y(o().trim().min(1))}).strict(),i9=m({sourceUrl:o(),normalizedUrl:o().nullable(),classification:h0,matchedTargetIds:y(o().trim().min(1)),matchedUrlIds:y(o().trim().min(1))}).strict(),s9=m({observationId:o().trim().min(1),expectedSlotId:o().trim().min(1),executionId:o().trim().min(1),usageEdgeId:o().trim().min(1),usageEdgeType:L2,provider:gt,queryText:o().trim().min(1),location:o().nullable(),queryClass:Ze([A(["branded","non-brand"]),de()]),mentioned:N().nullable(),cited:N().nullable(),sources:y(i9),sourceCount:d().int().nonnegative(),sourcesTruncated:N(),bridged:N(),historical:N(),evidenceComplete:N()}).strict(),o9=m({bridgedObservationIds:y(o()),historicalObservationIds:y(o()),evidenceIncompleteObservationIds:y(o()),ambiguousObservationIds:y(o()),unmatchedObservationIds:y(o())}).strict(),r9=m({id:o().trim().min(1),status:A(["completed","partial"]),createdAt:o().datetime(),startedAt:o().datetime().nullable(),finishedAt:o().datetime().nullable()}).strict();m({revision:d().int().positive(),run:r9.nullable(),groups:y(t9),targets:y(a9),evidence:y($2),diagnostics:o9}).strict();m({property:m({targetKey:he,label:o().min(1)}).strict(),queryClass:La,measurement:m({state:a0,displayedRunId:o().min(1).optional(),completedAt:o().datetime().optional()}).strict(),evidence:vr($2).optional(),answers:vr(s9).optional()}).strict().refine(e=>e.evidence===void 0!=(e.answers===void 0),{message:"Exactly one of evidence or answers is present, naming the shape that was served."});const f0=A(["used","not-used","unknown","not-applicable"]);f0.enum;const g0=A(["native-auto-v1","search-required-v1"]);g0.enum;const Ma=o().trim().min(1),po=o().trim().min(1),l9=o().trim().min(1),Ke=d().int().nonnegative(),uc=m({state:a0,displayedRunId:Ma.nullable(),planRevision:d().int().positive(),completedAt:o().datetime().nullable()}).strict(),ho=m({targetKey:he,label:po}).strict(),aa={runId:Ma.optional(),provider:gt.optional(),location:l9.optional()},xr=o().trim().min(1),jh=5,c9=10,u9="tied Properties are ordered by name, not ranked";m({runId:aa.runId,groupKey:he.optional(),queryClass:La.default("non-brand"),provider:aa.provider,location:aa.location,limit:d().int().positive().max(50).optional(),includeNestedMarkets:N().optional()}).strict();const Yv=m({groupKey:he,label:po}).strict(),U2={metro:Yv.nullable(),otherMetros:y(Yv).min(1).optional(),submarkets:y(po),queries:Ke},d9=m({name:xr,answers:Ke}).strict(),m9=m({name:xr,occurrences:Ke}).strict(),G2=m({domain:o().trim().min(1),answers:Ke}).strict(),p9=ho.extend({...U2,mentionCoverage:Xt,citationCoverage:Xt,flags:Ke,namedInsteadInAnswerText:y(d9).max(jh),namedInsteadInAnswerTextTotal:Ke,citedDomains:y(G2).max(jh),citedDomainsTotal:Ke,recommendedInstead:y(m9).max(jh).meta({deprecated:!0,description:"Deprecated: read namedInsteadInAnswerText, which carries the same names in the same order. occurrences counts answers, exactly as answers does there."}),recommendedInsteadTotal:Ke.meta({deprecated:!0,description:"Deprecated: read namedInsteadInAnswerTextTotal, which it always equals."}),recommendedInsteadTruncated:N().meta({deprecated:!0,description:"Deprecated: true when namedInsteadInAnswerTextTotal exceeds the names returned in namedInsteadInAnswerText."})}).strict().superRefine((e,n)=>{e.namedInsteadInAnswerText.length>e.namedInsteadInAnswerTextTotal&&n.addIssue({code:ve.custom,path:["namedInsteadInAnswerTextTotal"],message:"Total cannot be smaller than the returned names"}),e.citedDomains.length>e.citedDomainsTotal&&n.addIssue({code:ve.custom,path:["citedDomainsTotal"],message:"Total cannot be smaller than the returned domains"}),e.recommendedInsteadTotal!==e.namedInsteadInAnswerTextTotal&&n.addIssue({code:ve.custom,path:["recommendedInsteadTotal"],message:"The deprecated total must equal namedInsteadInAnswerTextTotal"}),e.recommendedInstead.length>e.recommendedInsteadTotal&&n.addIssue({code:ve.custom,path:["recommendedInsteadTotal"],message:"Total cannot be smaller than the returned replacements"}),e.recommendedInsteadTruncated!==e.recommendedInstead.length<e.recommendedInsteadTotal&&n.addIssue({code:ve.custom,path:["recommendedInsteadTruncated"],message:"Truncation must agree with the replacement total"})}),h9=m({count:d().int().min(2),mentionRate:d(),citationRate:d(),note:z(u9)}).strict(),f9=m({properties:Ke,answers:Ke,domains:y(G2).max(c9),domainTotal:Ke}).strict().superRefine((e,n)=>{e.domains.length>e.domainTotal&&n.addIssue({code:ve.custom,path:["domainTotal"],message:"Total cannot be smaller than the returned domains"}),e.domains.some(i=>i.answers>e.answers)&&n.addIssue({code:ve.custom,path:["domains"],message:"A domain cannot be cited by more answers than the basis holds"})}),g9=m({groupKey:he,label:po,parentGroupKey:he.nullable(),childMarketCount:Ke,propertyCount:Ke,propertiesMentioned:Xt,mentionCoverage:Xt,citationCoverage:Xt}).strict(),Xv=ho.extend({...U2,mentionCoverage:Xt.options[0],citationCoverage:Xt}).strict(),y9=m({eligiblePropertyCount:Ke,strongest:y(Xv).max(50),weakest:y(Xv).max(50),excluded:y(ho.extend({reason:Td}).strict()),truncated:N()}).strict();m({portfolio:m({groupKey:he.nullable(),label:po.nullable(),measurementScope:Ze([A(["full","spot_check"]),de()])}).strict(),measurement:uc,queryClass:La,engines:y(gt),metrics:m({propertiesMentioned:Xt,mentionCoverage:Xt,citationCoverage:Xt}).strict(),weakestProperties:y(p9),tiedAtWeakest:h9.nullable(),weakestAnswerSources:f9.nullable(),mentionRanking:y9,markets:y(g9),totalMarkets:Ke,marketsTruncated:N(),totalProperties:Ke,truncated:N()}).strict().superRefine((e,n)=>{e.marketsTruncated!==e.markets.length<e.totalMarkets&&n.addIssue({code:ve.custom,path:["marketsTruncated"],message:"Market truncation must agree with the market total"})});m({targetKey:he,runId:aa.runId,provider:aa.provider,location:aa.location,queryClass:La.optional(),offset:d().int().nonnegative().optional(),limit:d().int().positive().max(100).optional()}).strict();A(["answered","missing"]);const rf={queryId:Ma,text:po,class:Jf,provider:gt,requestedModel:o().nullable(),servedModel:o().nullable(),location:o().nullable()},b9=qe("status",[m({resultId:Ma,...rf,status:z("answered"),mentioned:N().nullable(),cited:N().nullable(),recommendedInstead:y(xr),answerExcerpt:o().nullable()}).strict(),m({resultId:de(),...rf,status:z("missing"),mentioned:de(),cited:de(),recommendedInstead:y(xr).length(0),answerExcerpt:de()}).strict()]);m({property:ho,measurement:uc,queryClass:La,questions:y(b9),total:Ke,truncated:N()}).strict();m({targetKey:he,resultId:Ma}).strict();const v9=m({url:Ma,classification:h0,matchedTargetKeys:y(he),assigned:N(),historical:N(),evidenceComplete:N()}).strict().superRefine((e,n)=>{e.assigned!==(e.classification==="assigned")&&n.addIssue({code:ve.custom,path:["assigned"],message:"Assigned must agree with the source attribution classification"})});m({property:ho,measurement:uc,question:m({resultId:Ma,...rf,status:z("answered")}).strict(),mentioned:N().nullable(),cited:N().nullable(),recommendedInstead:y(xr),answer:o().nullable(),sources:y(v9),captureStatus:Ze([Ed,de()]),retrievalStatus:Ze([f0,de()]),retrievalContract:Ze([g0,de()])}).strict();m({targetKey:he,runId:aa.runId,provider:aa.provider,location:aa.location,queryClass:La.optional(),limit:d().int().positive().max(50).optional()}).strict();const x9=qe("state",[m({state:z("available"),answeredResults:Ke,targetMissResults:Ke,recommendationOccurrences:Ke}).strict(),m({state:z("unavailable"),reason:Td}).strict()]),w9=m({name:xr,occurrences:Ke,providers:y(gt).max(5),providerTotal:Ke,providersTruncated:N(),questions:y(po).max(5),questionTotal:Ke,questionsTruncated:N()}).strict().superRefine((e,n)=>{(e.providers.length>e.providerTotal||e.questions.length>e.questionTotal)&&n.addIssue({code:ve.custom,message:"Evidence totals cannot be smaller than returned evidence"}),e.providersTruncated!==e.providers.length<e.providerTotal&&n.addIssue({code:ve.custom,path:["providersTruncated"],message:"Provider truncation must agree with its total"}),e.questionsTruncated!==e.questions.length<e.questionTotal&&n.addIssue({code:ve.custom,path:["questionsTruncated"],message:"Question truncation must agree with its total"})});m({property:ho,measurement:uc,queryClass:La,basis:x9,competitors:y(w9),total:Ke,truncated:N()}).strict();m({runId:aa.runId,scope:n0.default("all"),groupKey:he.optional(),targetKey:he.optional(),queryClass:La.default("all"),provider:aa.provider,location:aa.location,limit:d().int().positive().max(50).optional()}).strict().superRefine((e,n)=>{e.scope==="all"&&(e.groupKey!==void 0||e.targetKey!==void 0)&&n.addIssue({code:ve.custom,path:["scope"],message:"All scope cannot name a group or Property"}),e.scope==="group"&&(e.groupKey===void 0||e.targetKey!==void 0)&&n.addIssue({code:ve.custom,path:["groupKey"],message:"Group scope requires groupKey only"}),e.scope==="property"&&(e.targetKey===void 0||e.groupKey!==void 0)&&n.addIssue({code:ve.custom,path:["targetKey"],message:"Property scope requires targetKey only"})});const K2=A(["no_previous_run","execution_identity_changed","incomplete","not_comparable"]),H2=uc.extend({executionIdentity:Ma.nullable(),measurementScope:Ze([A(["full","spot_check"]),de()])}).strict(),Ml=qe("state",[m({state:z("available"),previous:Xt,current:Xt,delta:d()}).strict().superRefine((e,n)=>{if(e.previous.state!=="available"||e.current.state!=="available"){n.addIssue({code:ve.custom,message:"Available deltas require two available metrics"});return}Math.abs(e.delta-(e.current.value-e.previous.value))>Number.EPSILON&&n.addIssue({code:ve.custom,path:["delta"],message:"Delta must equal current minus previous"})}),m({state:z("unavailable"),reason:Td}).strict()]);m({current:H2,comparison:qe("state",[m({state:z("available"),previous:m({displayedRunId:Ma,planRevision:d().int().positive(),completedAt:o().datetime().nullable(),executionIdentity:Ma,measurementScope:A(["full","spot_check"])}).strict(),metrics:m({propertiesMentioned:Ml,mentionCoverage:Ml,citationCoverage:Ml}).strict(),changedProperties:y(ho.extend({mentionCoverage:Ml,citationCoverage:Ml,flags:Ke}).strict()),totalProperties:Ke,truncated:N()}).strict(),m({state:z("unavailable"),reason:K2}).strict()])}).strict().superRefine((e,n)=>{if(e.comparison.state==="available"){if(e.current.displayedRunId===null||e.current.executionIdentity===null){n.addIssue({code:ve.custom,path:["current"],message:"A comparison requires an identified current run"});return}e.comparison.previous.planRevision!==e.current.planRevision&&n.addIssue({code:ve.custom,path:["comparison","previous","planRevision"],message:"Comparisons cannot cross plan revisions"}),e.comparison.previous.executionIdentity!==e.current.executionIdentity&&n.addIssue({code:ve.custom,path:["comparison","previous","executionIdentity"],message:"Comparisons cannot cross execution identities"})}});m({runId:aa.runId}).strict();const k9=A(["no_completed_run","incomplete","evidence_incomplete","no_population","not_applicable"]),Dd=m({state:z("unavailable"),reason:k9}).strict(),S9=m({state:z("available"),expected:Ke,executed:Ke,answered:Ke,missing:Ke}).strict(),j9=qe("state",[S9,Dd]).superRefine((e,n)=>{e.state==="available"&&(e.executed+e.missing!==e.expected&&n.addIssue({code:ve.custom,message:"Expected must equal executed plus missing"}),e.answered>e.executed&&n.addIssue({code:ve.custom,path:["answered"],message:"Answered cannot exceed executed"}))}),A9=m({state:z("available"),complete:Ke,partial:Ke,failed:Ke,unsupported:Ke,notRecorded:Ke}).strict(),C9=qe("state",[A9,Dd]),N9=m({state:z("available"),used:Ke,notUsed:Ke,unknown:Ke,notApplicable:Ke,notRecorded:Ke}).strict(),_9=qe("state",[N9,Dd]),T9=m({state:z("available"),expectedQuestions:Ke,answeredQuestions:Ke,missingQuestions:Ke}).strict(),R9=qe("state",[T9,Dd]).superRefine((e,n)=>{e.state==="available"&&e.answeredQuestions+e.missingQuestions!==e.expectedQuestions&&n.addIssue({code:ve.custom,message:"Expected questions must equal answered plus missing"})});m({run:H2,completeness:j9,capture:C9,retrieval:_9,population:R9,comparison:qe("state",[m({state:z("available"),previousDisplayedRunId:Ma}).strict(),m({state:z("unavailable"),reason:K2}).strict()])}).strict().superRefine((e,n)=>{if(e.completeness.state!=="available")return;const i=e.completeness.executed;e.capture.state==="available"&&e.capture.complete+e.capture.partial+e.capture.failed+e.capture.unsupported+e.capture.notRecorded!==i&&n.addIssue({code:ve.custom,path:["capture"],message:"Capture counts must total executed snapshots"}),e.retrieval.state==="available"&&e.retrieval.used+e.retrieval.notUsed+e.retrieval.unknown+e.retrieval.notApplicable+e.retrieval.notRecorded!==i&&n.addIssue({code:ve.custom,path:["retrieval"],message:"Retrieval counts must total executed snapshots"})});const wr=o().regex(/^[a-f0-9]{64}$/),Ba=o().trim().min(1).max(256),ei=d().int().positive(),Wv=m({kind:A(["user","api-key","system"]),id:o().trim().min(1),label:o().trim().min(1)}).strict(),E9=A(["proposed","included","excluded"]),z9=A(["manual","sitemap"]),y0=m({stableKey:he,label:o().trim().min(1),status:E9,aliases:y(o().trim().min(1)),identityAliases:y(o().trim().min(1)).optional(),urlMatchers:y(o().trim().min(1)),source:z9,discoveredUrl:o().trim().min(1).optional(),discoveryIdentity:o().trim().min(1).optional()}).strict(),Od=m({providers:y(gt).optional(),models:Ue(gt,o().trim().min(1)).optional(),locations:y(o().trim().min(1)).optional()}).strict(),D9=A(["branded","non-brand","unclassified"]),O9=A(["rule","operator"]),Q2=m({targetKey:he,queryId:Ba,contextOverride:Od.optional(),executionContexts:y(Nd.extend({executionNodeKey:o().min(1).optional()})).min(1).optional(),queryProvenance:i2.optional(),queryClass:D9,classificationSource:O9}).strict().superRefine((e,n)=>{e.contextOverride!==void 0&&e.executionContexts!==void 0&&n.addIssue({code:"custom",path:["executionContexts"],message:"Use either frozen execution contexts or a context override, not both."})}),Id=a2,F2=m({stableKey:he,label:o().trim().min(1),parentGroupKey:he.optional(),targetKeys:y(he),competitors:y(Id)}).strict(),I9=m({sitemapUrl:o().url(),rule:p0,exclusions:y(o().trim().min(1)),inputChecksum:wr,reviewedAt:o().datetime().optional()}).strict(),P9=m({providers:y(gt),models:Ue(gt,o().trim().min(1)).optional(),locations:y(o().trim().min(1))}).strict(),Z2=s2,q9=m({defaultContext:P9,targets:y(y0),assignments:y(Q2),groups:y(F2),reportingScopes:y(Z2).optional(),discovery:I9.optional()}).strict(),M9=m({id:o().trim().min(1),projectId:o().trim().min(1),schemaVersion:z(2),baseActiveVersionId:o().trim().min(1).nullable(),baseActiveRevision:ei.nullable(),authoring:q9,createdBy:Wv,updatedBy:Wv,createdAt:o().datetime(),updatedAt:o().datetime()}).strict(),b0=m({targets:d().int().nonnegative(),includedTargets:d().int().nonnegative(),assignments:d().int().nonnegative(),unclassifiedAssignments:d().int().nonnegative(),groups:d().int().nonnegative(),competitors:d().int().nonnegative()}).strict(),B9=m({code:o().trim().min(1),message:o().trim().min(1),path:y(Ze([o(),d().int()]))}).strict(),Y2=m({etag:o().trim().min(1),changed:N(),warnings:y(B9),counts:b0}).strict();m({draft:M9.nullable(),etag:o().trim().min(1).nullable()}).strict();vr(y0);vr(Q2);vr(F2);m({search:o().optional(),cursor:o().trim().min(1).optional(),limit:d().int().positive().max(t0).optional()}).strict();m({expectedActiveRevision:ei.nullable()}).strict();m({sitemapUrl:o().url(),rule:p0,exclusions:y(o().trim().min(1)).optional()}).strict();const L9=m({discoveryIdentity:o().trim().min(1),action:A(["create","rebind","ignore"]),targetKey:he.optional(),label:o().trim().min(1).optional()}).strict();m({selections:y(L9),selectedTargetKeys:y(he).optional()}).strict().superRefine((e,n)=>{e.selections.length===0&&e.selectedTargetKeys===void 0&&n.addIssue({code:"custom",message:"A proposal or reviewed Property selection is required."}),e.selectedTargetKeys&&new Set(e.selectedTargetKeys).size!==e.selectedTargetKeys.length&&n.addIssue({code:"custom",path:["selectedTargetKeys"],message:"Property keys must be unique."})});m({target:y0}).strict();m({targetKey:he,label:o().trim().min(1)}).strict();m({targetKey:he,mergedKeys:y(he).min(1)}).strict();m({targetKey:he,cleanup:z("assignments-and-group-memberships").optional()}).strict();m({targetKey:he,discoveryIdentity:o().trim().min(1),discoveredUrl:o().url()}).strict();const X2={targetKeys:y(he).optional(),groupKeys:y(he).optional()};function W2(e,n){(e.targetKeys?.length??0)===0&&(e.groupKeys?.length??0)===0&&n.addIssue({code:"custom",message:"At least one Target or group selector is required."})}m(X2).strict().superRefine(W2);const V9=m({...X2,queryIds:y(Ba).min(1),contextOverride:Od.optional()}).strict().superRefine(W2);Ze([m({targetKey:he,queryIds:y(Ba).min(1),contextOverride:Od.optional()}).strict(),V9]);const $9=m({groupKey:he,label:o().trim().min(1),memberCount:d().int().positive()}).strict();m({draftEtag:o().trim().min(1),groups:y($9),resolvedTargetKeys:y(he),overlapCount:d().int().nonnegative(),assignments:m({requested:d().int().nonnegative(),added:d().int().nonnegative(),alreadyPresent:d().int().nonnegative()}).strict(),execution:m({addedNodes:d().int().nonnegative(),addedProviderCalls:d().int().nonnegative(),fullRunNodes:d().int().nonnegative(),fullRunProviderCalls:d().int().nonnegative()}).strict()}).strict();m({pairs:y(m({targetKey:he,queryId:Ba}).strict()).min(1),contextOverride:Od.optional()}).strict();Ze([m({targetKey:he,queryId:Ba}).strict(),m({targetKeys:y(he).min(1),queryId:Ba}).strict()]);m({targetKey:he}).strict();m({queryClass:Jf,assignments:y(m({targetKey:he,queryId:Ba}).strict()).min(1)}).strict();m({group:m({stableKey:he,label:o().trim().min(1),parentGroupKey:he.nullable().optional(),targetKeys:y(he),competitors:y(Id).optional()}).strict()}).strict();m({market:Z2}).strict();m({groupKey:he}).strict();m({groupKey:he,competitor:Id}).strict();m({expectedActiveRevision:ei,groupKey:he,domain:o().trim().min(1).refine(e=>rc(e)!==null,"A competitor domain must be a valid hostname"),label:o().trim().min(1).optional(),aliases:y(o().trim().min(1)).optional()}).strict();Y2.extend({groupKey:he,competitor:Id,draftCreated:N(),published:m({revision:ei,competitorsChanged:z(!1)}).strict()}).strict();m({groupKey:he,competitorKey:he}).strict();const ld=m({ruleId:o().trim().min(1),severity:A(["fail","warn"]),message:o().trim().min(1),path:y(Ze([o(),d().int()]))}).strict();qe("ok",[m({ok:z(!0),compiledChecksum:wr,checks:y(ld),counts:b0,plan:_d}).strict(),m({ok:z(!1),compiledChecksum:de(),checks:y(ld).min(1)}).strict()]);const Jv=m({added:y(o().trim().min(1)),removed:y(o().trim().min(1)),changed:y(o().trim().min(1)),unchanged:y(o().trim().min(1))}).strict(),U9=m({activeRevision:ei.nullable(),targets:Jv,groups:Jv,assignments:m({added:d().int().nonnegative(),removed:d().int().nonnegative(),reclassified:d().int().nonnegative()}).strict(),execution:m({addedNodeKeys:y(o().trim().min(1)),removedNodeKeys:y(o().trim().min(1))}).strict()}).strict();qe("ok",[m({ok:z(!0),compiledChecksum:wr,checks:y(ld),counts:b0,plan:_d,diff:U9}).strict(),m({ok:z(!1),compiledChecksum:de(),checks:y(ld).min(1),diff:de()}).strict()]);m({expectedActiveRevision:ei.nullable(),expectedCompiledChecksum:wr}).strict();m({published:N(),active:m({revision:ei,checksum:wr,compiledChecksum:wr,createdAt:o().datetime(),plan:_d}).strict()}).strict();m({discarded:N()}).strict();m({expectedActiveRevision:ei}).strict();m({deactivated:N(),previousRevision:ei.nullable()}).strict();const G9=A(["republish_required","setup_in_progress","awaiting_first_run","operational","simple"]),K9=A(["republish_setup","continue_setup","run_measurement","view_measurement","start_setup"]),H9=A(["simple","draft-only","active-v1","active-v2"]);m({state:G9,nextAction:K9,mode:H9,answerVisibilityProviderReady:N(),activeRevision:ei.nullable(),activeSchemaVersion:Ze([z(1),z(2)]).nullable(),draft:m({etag:o().trim().min(1),updatedAt:o().datetime()}).strict().nullable()}).strict();const J2=m({id:o().trim().min(1),projectId:o().trim().min(1),name:o().trim().min(1),description:o().nullable(),itemCount:d().int().nonnegative(),createdAt:o().datetime(),updatedAt:o().datetime()}).strict(),Q9=m({queryId:Ba,queryText:o().min(1),position:d().int().nonnegative()}).strict();J2.extend({items:y(Q9)}).strict();m({querySets:y(J2)}).strict();m({name:o().trim().min(1),description:o().nullable().optional(),queryIds:y(Ba)}).strict();const F9=m({id:o().trim().min(1),projectId:o().trim().min(1),name:o().trim().min(1),description:o().nullable(),pattern:o().trim().min(1),variables:y(o().trim().min(1)),createdAt:o().datetime(),updatedAt:o().datetime()}).strict();m({templates:y(F9)}).strict();m({name:o().trim().min(1),description:o().nullable().optional(),pattern:o().trim().min(1),variables:y(o().trim().min(1))}).strict();m({bindings:y(Ue(o().trim().min(1),o().trim().min(1))).min(1),querySetId:o().trim().min(1).optional()}).strict();m({created:y(m({queryId:Ba,queryText:o().min(1)}).strict()),existing:y(m({queryId:Ba,queryText:o().min(1)}).strict())}).strict();const cd=o().regex(/^[a-f0-9]{64}$/),Pd=d().int().positive();m({stableKey:he,kind:A(["target","group"]),retiredAt:o().datetime().nullable()}).strict();m({csv:o()}).strict();A(["matched","ambiguous","unmatched","invalid","duplicate","proposed","excluded"]);const Z9=A(["column-count","missing-property","missing-group","invalid-url","property-not-found","property-label-ambiguous","url-not-exact-match","target-proposed","target-excluded","group-label-ambiguous","group-key-conflict"]),lf=m({dataRow:Pd,property:o(),group:o(),url:o().nullable(),normalizedProperty:o(),normalizedGroupLabel:o()}).strict(),Bl=lf.extend({reason:Z9}),Y9=m({source:A(["draft-target","draft-group","persisted-segment","retired-segment","proposed-group"]),stableKey:he,kind:A(["target","group"]).optional(),retiredAt:o().datetime().nullable().optional(),normalizedGroupLabel:o().optional()}).strict(),X9=m({proposedGroupKey:he,evidence:y(Y9).min(1)}).strict(),W9=qe("status",[lf.extend({status:z("matched"),targetKey:he,groupKey:he}).strict(),Bl.extend({status:z("ambiguous"),candidateTargetKeys:y(he).min(1).optional(),candidateGroupKeys:y(he).min(1).optional()}).strict(),Bl.extend({status:z("unmatched")}).strict(),Bl.extend({status:z("invalid"),groupKeyConflict:X9.optional()}).strict(),lf.extend({status:z("duplicate"),duplicateOfRow:Pd,targetKey:he,groupKey:he}).strict(),Bl.extend({status:z("proposed"),targetKey:he}).strict(),Bl.extend({status:z("excluded"),targetKey:he}).strict()]),J9=m({normalizedGroupLabel:o(),groupKey:he,label:o().trim().min(1),action:A(["create","extend"]),matchedRows:y(Pd),targetKeys:y(he),addedTargetKeys:y(he),unchangedTargetKeys:y(he)}).strict(),eO=m({dataRows:d().int().nonnegative(),matchedRows:d().int().nonnegative(),ambiguousRows:d().int().nonnegative(),unmatchedRows:d().int().nonnegative(),invalidRows:d().int().nonnegative(),duplicateRows:d().int().nonnegative(),proposedRows:d().int().nonnegative(),excludedRows:d().int().nonnegative(),needsAttention:d().int().nonnegative(),groupsReady:d().int().nonnegative(),groupsToCreate:d().int().nonnegative(),groupsToExtend:d().int().nonnegative(),membershipsReady:d().int().nonnegative(),addedMemberships:d().int().nonnegative(),unchangedMemberships:d().int().nonnegative()}).strict();m({draftEtag:o().trim().min(1),sourceChecksum:cd,previewChecksum:cd,rows:y(W9),groupChanges:y(J9),counts:eO}).strict();m({csv:o(),sourceChecksum:cd,previewChecksum:cd,acceptedRows:y(Pd).min(1)}).strict().superRefine((e,n)=>{new Set(e.acceptedRows).size!==e.acceptedRows.length&&n.addIssue({code:"custom",path:["acceptedRows"],message:"Accepted CSV data rows must be unique."})});Y2.extend({appliedRows:d().int().nonnegative(),addedMemberships:d().int().nonnegative(),unchangedMemberships:d().int().nonnegative()}).strict();function tO(e){return!Number.isFinite(e)||e===0?"0%":`${(e*100).toFixed(1)}%`}function nO(e){return Number.isFinite(e)?`${Math.round(Number((e*100).toFixed(6)))}%`:"0%"}function In(e){return Number.isFinite(e)?Math.abs(e)>=1e6?`${(e/1e6).toFixed(1)}M`:Math.abs(e)>=1e3?`${(e/1e3).toFixed(1)}K`:e.toLocaleString("en-US"):"—"}function oo(e){if(!e)return"—";try{const n=/^(\d{4})-(\d{2})-(\d{2})$/.exec(e),i={month:"short",day:"numeric",year:"numeric"},r=n&&n[1]&&n[2]&&n[3]?new Date(Date.UTC(Number(n[1]),Number(n[2])-1,Number(n[3]))):new Date(e);return Number.isNaN(r.getTime())?e:r.toLocaleDateString("en-US",n?{...i,timeZone:"UTC"}:i)}catch{return e}}function AY(e,n,i=800){const r=[];if(!/^\d{4}-\d{2}-\d{2}$/.test(e)||!/^\d{4}-\d{2}-\d{2}$/.test(n))return r;for(let u=e;u<=n&&(r.push(u),!(r.length>=i));u=aO(u,1));return r}function aO(e,n){if(!Number.isFinite(n))return e;const i=/^(\d{4})-(\d{2})-(\d{2})$/.exec(e);if(!i?.[1]||!i[2]||!i[3])return e;const r=new Date(Date.UTC(Number(i[1]),Number(i[2])-1,Number(i[3])+Math.trunc(n)));if(Number.isNaN(r.getTime()))return e;const u=r.getUTCFullYear(),h=String(r.getUTCMonth()+1).padStart(2,"0"),g=String(r.getUTCDate()).padStart(2,"0");return`${u}-${h}-${g}`}function iO(e,n){return!e&&!n?"":e&&n?`${oo(e)} → ${oo(n)}`:oo(e||n)}function sO(e,n){if(!Number.isFinite(e)||!Number.isFinite(n)||n<=0)return null;const i=(e-n)/n;return Number.isFinite(i)?i:null}function CY(e,n){const i=sO(e,n);return i===null?null:Math.round(i*100)}function NY(e){return e===null||e===0?"neutral":e>0?"positive":"negative"}function _Y(e,n,i="vs prior 7 days"){return e.deltaPct===null?e.prior===0?"First baseline week":"":e.deltaPct>0?`Up ${e.deltaPct}% ${i} (${In(e.prior)} ${n})`:e.deltaPct<0?`Down ${Math.abs(e.deltaPct)}% ${i} (${In(e.prior)} ${n})`:`Flat ${i} (${In(e.prior)} ${n})`}const eS=30;function ex(e){return Math.round(e*10)/10}function oO(e){return e.prior>=eS&&e.deltaPct!==null?`${e.deltaPct>0?"+":""}${e.deltaPct}% vs prior`:`${e.deltaAbs>0?"+":""}${ex(e.deltaAbs)} vs ${ex(e.prior)}`}function TY(e,n,i){return e.prior>=eS&&e.deltaPct!==null?`${e.deltaPct>0?"+":""}${e.deltaPct}% ${i}`:`${e.deltaAbs>0?"+":""}${In(Math.round(e.deltaAbs))} ${n} ${i}`}function RY(e){if(e===0)return{direction:"none",magnitude:"0"};const n=Math.abs(e)*100;return{direction:e>0?"up":"down",magnitude:n<.05?"<0.1":n.toFixed(1)}}function EY(e,n="UTC"){const i=new Date(e);if(!Number.isFinite(i.getTime()))return null;const r={weekday:"short",year:"numeric",month:"short",day:"numeric",hour:"numeric",minute:"2-digit",timeZoneName:"short"};try{return i.toLocaleString("en-US",{...r,timeZone:n})}catch{return i.toLocaleString("en-US",{...r,timeZone:"UTC"})}}const tS=A(["introduced","repointed","retired"]),rO=tS.enum;m({modelId:o().trim().min(1),date:o().regex(/^\d{4}-\d{2}-\d{2}$/,"date must be YYYY-MM-DD"),kind:tS,confirmed:N(),sourceUrl:o().url(),note:o().min(1)});const lO=[{modelId:"chatgpt-4o-latest",date:"2024-08-15",kind:"introduced",confirmed:!0,sourceUrl:"https://developers.openai.com/api/docs/changelog",note:'Verbatim: "Released dynamic model for chatgpt-4o-latest—this model will point to the latest GPT-4o model used by ChatGPT." First moving id in the lineage.'},{modelId:"chatgpt-4o-latest",date:"2026-02-17",kind:"retired",confirmed:!0,sourceUrl:"https://developers.openai.com/api/docs/deprecations.md",note:'Shutdown 2026-02-17, replacement gpt-5.1-chat-latest. Announced under the heading "2025-11-18: chatgpt-4o-latest snapshot".'},{modelId:"gpt-5.1-chat-latest",date:"2025-11-13",kind:"introduced",confirmed:!0,sourceUrl:"https://developers.openai.com/api/docs/changelog",note:"Introduced inside the GPT-5.1 launch entry, not as a standalone entry."},{modelId:"gpt-5.2-chat-latest",date:"2025-12-11",kind:"introduced",confirmed:!0,sourceUrl:"https://developers.openai.com/api/docs/changelog",note:"Introduced inside the GPT-5.2 launch entry."},{modelId:"gpt-5.2-chat-latest",date:"2026-02-10",kind:"repointed",confirmed:!0,sourceUrl:"https://developers.openai.com/api/docs/changelog",note:'Verbatim: "Updated the gpt-5.2-chat-latest slug to point to the latest model currently used in ChatGPT." Target model NOT named.'},{modelId:"gpt-5.3-chat-latest",date:"2026-03-03",kind:"introduced",confirmed:!0,sourceUrl:"https://developers.openai.com/api/docs/changelog",note:'Verbatim: "Released gpt-5.3-chat-latest to the Chat Completions and Responses API. This model points to the GPT-5.3 Instant snapshot currently used in ChatGPT."'},{modelId:"gpt-5.3-chat-latest",date:"2026-03-16",kind:"repointed",confirmed:!0,sourceUrl:"https://developers.openai.com/api/docs/changelog",note:'Verbatim: "Updated the gpt-5.3-chat-latest slug to point to the latest model currently used in ChatGPT." Target model NOT named.'},{modelId:"chat-latest",date:"2026-05-05",kind:"introduced",confirmed:!0,sourceUrl:"https://developers.openai.com/api/docs/changelog",note:'Verbatim: "Released chat-latest snapshot which points to the latest Instant model currently used in ChatGPT... The underlying model snapshot will be regularly updated."'},{modelId:"chat-latest",date:"2026-05-28",kind:"repointed",confirmed:!1,sourceUrl:"https://developers.openai.com/api/docs/changelog",note:'UNCONFIRMED. The entry reads "Released chat-latest snapshot..." — the verb is "Released", the same boilerplate as the 2026-05-05 entry, not "Updated" as used on 2026-06-24. Only "the latest improvements" vs "our latest improvements" differs. Either a real change logged with copy-pasted text, or a duplicated entry; the record does not disambiguate.'},{modelId:"chat-latest",date:"2026-06-24",kind:"repointed",confirmed:!0,sourceUrl:"https://developers.openai.com/api/docs/changelog",note:'Verbatim (re-read at source 2026-07-20): "Updated the chat-latest snapshot, which points to the latest Instant model currently used in ChatGPT." The verb is "Updated", unlike the "Released" boilerplate of 2026-05-05 and 2026-05-28, which is the wording the changelog reserves for a real change. Target model NOT named. The only unambiguous chat-latest change on record.'}];rO.repointed;new Set(lO.map(e=>e.modelId.toLowerCase()));const cO=A(["not-exposed","no-known-change","known-change"]);cO.enum;const uO=m({modelId:o().trim().min(1),date:o().regex(/^\d{4}-\d{2}-\d{2}$/),confirmed:N(),sourceUrl:o().url()}),dO=m({status:A(["no-known-change","known-change"]),modelIds:y(o().trim().min(1)).min(1),changes:y(uO),changeCount:d().int().nonnegative(),unverifiedChangeCount:d().int().nonnegative(),firstChangeDate:o().optional(),lastChangeDate:o().optional(),knownGoodAsOf:o(),checkedThroughPeriodEnd:N()}),mO={openai:"ChatGPT",chatgpt:"ChatGPT",anthropic:"Claude",claude:"Claude",google:"Gemini",gemini:"Gemini",perplexity:"Perplexity"};function pO(e){const n=e.trim().toLowerCase();return mO[n]??e.charAt(0).toUpperCase()+e.slice(1)}function Ah(e){return typeof e=="number"&&Number.isFinite(e)&&e>0?Math.floor(e):0}function Ll(e){return typeof e=="string"&&e.trim().length>=10?e.trim().slice(0,10):null}function Ch(e){return[...new Set(e.filter(n=>n!==null))].sort()}function hO(e,n){const i=pO(e),r=Array.isArray(n.changes)?n.changes:[],u=Ah(n.changeCount)||r.length,h=Math.min(u,Ah(n.unverifiedChangeCount)||Ah(n.unconfirmedChangeCount)||r.filter(k=>k.confirmed===!1).length),g=Ll(n.knownGoodAsOf),b=n.checkedThroughPeriodEnd!==!1,v={engine:i,confirmedCount:u-h,unconfirmedCount:h,knownGoodAsOf:g,checkedThroughPeriodEnd:b};if(r.length>0)return{...v,confirmedDates:Ch(r.filter(k=>k.confirmed!==!1).map(k=>Ll(k.date))),unconfirmedDates:Ch(r.filter(k=>k.confirmed===!1).map(k=>Ll(k.date)))};const w=Ch([Ll(n.firstChangeDate),Ll(n.lastChangeDate)]);return u===0?{...v,confirmedDates:[],unconfirmedDates:[]}:h===0?{...v,confirmedDates:w,unconfirmedDates:[]}:v.confirmedCount===0?{...v,confirmedDates:[],unconfirmedDates:w}:{...v,confirmedDates:[],unconfirmedDates:[]}}function fO(e){return e.length===1?e[0]:e.length===2?`${e[0]} and ${e[1]}`:`${e.slice(0,-1).join(", ")}, and ${e[e.length-1]}`}function tx(e,n){return e.length===0?null:e.length===1&&n<=1?`on ${e[0]}`:`more than once between ${e[0]} and ${e[e.length-1]}`}function gO(e){const n=tx(e.confirmedDates,e.confirmedCount),i=tx(e.unconfirmedDates,e.unconfirmedCount),r=`The model behind ${e.engine}`;if(e.confirmedCount>0&&e.unconfirmedCount===0)return n?`${r} was updated ${n}, inside this period.`:`${r} was updated inside this period.`;if(e.confirmedCount===0)return i?`${r} may have been updated ${i}, inside this period, though that is not confirmed.`:`${r} may have been updated inside this period, though that is not confirmed.`;if(n&&i)return`${r} was updated ${n}, inside this period, and may also have been updated ${i}.`;const u=e.unconfirmedCount>1?"more times":"once more";return`${r} was updated inside this period, and may have been updated ${u}, though that is not confirmed.`}function nx(e){const n=e.filter(r=>!r.checkedThroughPeriodEnd&&r.knownGoodAsOf!==null);return n.length===0?null:`We last checked for model updates on ${n.map(r=>r.knownGoodAsOf).sort()[0]}, and this period runs past that date, so there may be later updates we do not know about.`}function zY(e){const n=Object.entries(e??{}).map(([v,w])=>hO(v,w??{})).sort((v,w)=>v.engine.localeCompare(w.engine));if(n.length===0)return null;const i=n.filter(v=>v.confirmedCount+v.unconfirmedCount>0);if(i.length===0){const v=[...new Set(n.map(_=>_.engine))],w=v.length>1,k=nx(n),j=[...new Set(n.map(_=>_.knownGoodAsOf).filter(_=>_!==null))].sort(),T=k??(j.length>0?`We last checked for model updates on ${j[0]}.`:null);return{kind:"no-known-change",text:`No model updates are on record for ${fO(v)} in this period.`,detail:`${w?"These engines":"This engine"} can be moved onto a different underlying model without the data ever showing a different model name, so we check each period against a record of known updates. Nothing is listed inside this one.${T?` ${T}`:""}`}}const r=i.reduce((v,w)=>v+w.confirmedCount+w.unconfirmedCount,0),u=i.some(v=>v.confirmedCount>0),h=r===1?"this update":"these updates",g=u?`Some of the movement in these numbers may come from ${h} rather than from a real change in how AI answers about you, so compare periods carefully.`:`If so, some of the movement in these numbers may come from ${h} rather than from a real change in how AI answers about you, so compare periods carefully.`,b=nx(n);return{kind:"change",text:`${i.map(gO).join(" ")} ${g}${b?` ${b}`:""}`}}const so=m({slope:d(),intercept:d(),r2:d(),start:d(),end:d(),n:d(),startIndex:d(),endIndex:d()}),yO=A(["gsc","ga4","gbp"]);m({id:o(),domain:o(),connectionType:yO,propertyId:o().nullable().optional(),sitemapUrl:o().nullable().optional(),scopes:y(o()).default([]),createdAt:o(),updatedAt:o()});const bO=m({date:o(),query:o(),page:o(),country:o().nullable().optional(),device:o().nullable().optional(),clicks:d(),impressions:d(),ctr:d(),position:d()});A(["clicks","impressions","date"]);m({rows:y(bO),totalMatching:d(),truncated:N(),latestAvailableDate:o().nullable()});const vO=m({date:o(),clicks:d(),impressions:d(),ctr:d(),position:d().nullable()}),xO=m({startDate:o().nullable(),endDate:o().nullable(),latestDataDate:o().nullable(),daysSinceLatestData:d().nullable()}),wO=m({clicks:so.nullable(),impressions:so.nullable(),ctr:so.nullable(),position:so.nullable()}),ax=m({startDate:o(),endDate:o(),clicks:d(),impressions:d(),ctr:d().nullable(),position:d().nullable(),source:A(["property-daily","dimensioned","mixed","empty"])}),kO=m({days:d(),basis:A(["prior-window","split-window"]).optional(),prior:ax,trailing:ax,comparable:N(),change:m({clicks:d().nullable(),impressions:d().nullable(),ctr:d().nullable(),position:d().nullable()})});m({totals:m({clicks:d(),impressions:d(),ctr:d(),position:d().nullable(),positionDays:d(),days:d()}),daily:y(vO),window:xO.optional(),trends:wO.optional(),periodComparison:kO.nullable().optional()});const SO=m({page:o(),clicks:d(),impressions:d(),ctr:d()});m({rows:y(SO),totals:m({clicks:d(),impressions:d(),ctr:d(),days:d(),coveredFrom:o().nullable(),coveredThrough:o().nullable(),complete:N()}).nullable(),totalsSource:z("property-daily"),rankedFrom:o().nullable(),rankedThrough:o().nullable()});const cf=m({id:o(),url:o(),indexingState:o().nullable().optional(),verdict:o().nullable().optional(),coverageState:o().nullable().optional(),pageFetchState:o().nullable().optional(),robotsTxtState:o().nullable().optional(),crawlTime:o().nullable().optional(),lastCrawlResult:o().nullable().optional(),isMobileFriendly:N().nullable().optional(),richResults:y(o()).default([]),referringUrls:y(o()).default([]),inspectedAt:o()});A(["stable","reindexed","deindexed","still-missing","new"]);const jO=m({url:o(),previousState:o().nullable(),currentState:o().nullable(),transitionDate:o()}),AO=m({reason:o(),count:d(),urls:y(cf).default([])});m({summary:m({total:d(),indexed:d(),notIndexed:d(),deindexed:d(),percentage:d()}),lastInspectedAt:o().nullable(),lastSyncedAt:o().nullable(),indexed:y(cf).default([]),notIndexed:y(cf).default([]),deindexed:y(jO).default([]),reasonGroups:y(AO).default([])});m({url:o(),type:A(["URL_UPDATED","URL_DELETED"]),notifiedAt:o()});const CO=m({url:o(),type:A(["URL_UPDATED","URL_DELETED"]),notifiedAt:o(),status:A(["success","error"]),error:o().optional()});m({summary:m({total:d().int().nonnegative(),succeeded:d().int().nonnegative(),failed:d().int().nonnegative()}),results:y(CO).default([])});m({date:o(),indexed:d(),notIndexed:d(),unknownPages:d().default(0),verifiedByInspection:d().default(0),derivedFromImpressions:d().default(0),reasonBreakdown:Ue(o(),d()).default({})});const NO=m({siteUrl:o(),permissionLevel:o()});m({sites:y(NO).default([])});const _O=m({type:o(),submitted:o(),indexed:o().optional().describe("Deprecated compatibility field.")}),nS=m({path:o(),parentSitemapUrl:o().optional(),lastSubmitted:o().optional(),isPending:N().optional(),isSitemapsIndex:N().optional(),type:o().optional(),lastDownloaded:o().optional(),warnings:o().optional(),errors:o().optional(),contents:y(_O).optional()});m({sitemaps:y(nS).default([]),summary:m({total:d().int().nonnegative(),indexes:d().int().nonnegative(),files:d().int().nonnegative()}),preferredSubmissionUrls:y(o()).default([])});m({sitemapUrls:y(o().url().refine(e=>{const n=new URL(e).protocol;return n==="http:"||n==="https:"},{message:"Sitemap URL must use http or https."})).min(1).max(50)});const TO=m({sitemapUrl:o(),status:A(["accepted","error"]),submittedAt:o().optional(),error:o().optional()});m({summary:m({total:d().int().nonnegative(),accepted:d().int().nonnegative(),failed:d().int().nonnegative()}),results:y(TO)});m({sitemaps:y(nS),primarySitemapUrl:o(),run:m({id:o(),projectId:o(),kind:o(),status:o(),trigger:o(),createdAt:o()}).nullable()});const ut=o().trim().min(1),ix=o().regex(/^[a-f0-9]{64}$/i);function RO(e){if(!/^\d{4}-\d{2}-\d{2}$/.test(e))return!1;const n=new Date(`${e}T00:00:00.000Z`);return!Number.isNaN(n.getTime())&&n.toISOString().slice(0,10)===e}const Ja=o().refine(RO,{message:"Expected a calendar date as YYYY-MM-DD."});function EO(e,n){const i=Date.parse(`${e}T00:00:00.000Z`),r=Date.parse(`${n}T00:00:00.000Z`);return Math.floor((r-i)/864e5)+1}const zO=A(["not-connected","selection-required","connected","stale"]),Du=zO.enum,aS=A(["enabled","suspended","closed","canceled","unspecified","unknown"]);aS.enum;const v0=A(["enabled","paused","removed","unknown"]);v0.enum;const iS=A(["enabled","hidden","removed","unknown"]);iS.enum;const x0=A(["customer","campaign"]);x0.enum;const sS=A(["customer-goal","campaign-goal","custom-goal"]);sS.enum;const oS=m({loginCustomerId:ut.nullable(),customerId:ut.nullable(),selectedAt:o().nullable()}).strict(),Nh=m({id:ut,projectId:ut,scopes:y(o()).default([]),selection:oS,lastValidatedAt:o().nullable(),lastInventorySnapshotAt:o().nullable(),lastMetricsSnapshotAt:o().nullable(),createdAt:o(),updatedAt:o()}).strict(),uf=m({resourceName:ut,customerId:ut,parentCustomerId:ut.nullable(),descriptiveName:o().nullable(),currencyCode:o().nullable(),timeZone:o().nullable(),manager:N(),hidden:N(),testAccount:N(),level:d().int().nonnegative(),status:aS}).strict(),DO=m({customers:y(uf),totalAccessible:d().int().nonnegative(),truncated:N(),selection:oS,fetchedAt:o()}).strict();qe("status",[m({connected:z(!1),status:z(Du["not-connected"]),connection:de(),selectedCustomer:de()}).strict(),m({connected:z(!0),status:z(Du["selection-required"]),connection:Nh,selectedCustomer:de()}).strict(),m({connected:z(!0),status:z(Du.connected),connection:Nh,selectedCustomer:uf}).strict(),m({connected:z(!0),status:z(Du.stale),connection:Nh,selectedCustomer:uf}).strict()]);const OO=m({id:ut,resourceName:ut,name:o(),status:v0,advertisingChannelType:o().nullable(),biddingStrategyType:o().nullable()}).strict(),IO=m({id:ut,resourceName:ut,name:o(),status:iS,category:o(),origin:o(),primaryForGoal:N(),includeInConversionsMetric:N()}).strict(),PO=m({category:o(),origin:o(),biddable:N()}).strict(),qO=m({campaignId:ut,category:o(),origin:o(),biddable:N()}).strict(),MO=m({id:ut,name:o(),conversionActionIds:y(ut)}).strict(),BO=m({campaignId:ut,goalConfigLevel:x0,customGoalId:ut.nullable()}).strict(),LO=m({customerId:ut,fetchedAt:o(),campaigns:y(OO),conversionActions:y(IO),customerConversionGoals:y(PO),campaignConversionGoals:y(qO),campaignConversionGoalsComplete:N().optional(),customConversionGoals:y(MO),campaignGoalConfigurations:y(BO)}).strict(),VO=m({source:sS,category:o().nullable(),origin:o().nullable(),customGoalId:ut.nullable(),biddable:N().nullable(),conversionActionIds:y(ut),primaryConversionActionIds:y(ut),secondaryConversionActionIds:y(ut),missingConversionActionIds:y(ut)}).strict(),$O=m({campaignId:ut,goalConfigLevel:x0,customGoalId:ut.nullable(),missingCustomGoalId:ut.nullable(),goals:y(VO)}).strict();m({customerId:ut,derivedAt:o(),campaigns:y($O)}).strict();const rS=50,df=31,UO=rS*df,GO=m({campaignIds:y(ut).min(1).max(rS),startDate:Ja,endDate:Ja}).strict().superRefine((e,n)=>{if(new Set(e.campaignIds).size!==e.campaignIds.length&&n.addIssue({code:ve.custom,path:["campaignIds"],message:"Campaign IDs must be unique."}),e.endDate<e.startDate){n.addIssue({code:ve.custom,path:["endDate"],message:"endDate must not precede startDate."});return}EO(e.startDate,e.endDate)>df&&n.addIssue({code:ve.custom,path:["endDate"],message:`Campaign metrics may cover at most ${df} calendar days.`})}),KO=m({campaignId:ut,date:Ja,impressions:d().int().nonnegative(),clicks:d().int().nonnegative(),costMicros:d().int().nonnegative(),conversions:d().nonnegative(),conversionValueMicros:d().int().nonnegative().nullable()}).strict(),HO=m({query:GO,rows:y(KO).max(UO),truncated:N(),fetchedAt:o()}).strict(),lS=A(["accessible-customers","inventory","campaign-metrics"]),_h=lS.enum,w0=m({id:ut,projectId:ut,connectionId:ut,runId:ut,kind:lS,customerId:ut.nullable(),payloadChecksum:ix,rawPayloadSha256:ix.nullable(),rawPayloadBytes:d().int().nonnegative().nullable(),redactedFieldCount:d().int().nonnegative(),capturedAt:o(),createdAt:o()}).strict(),QO=qe("kind",[m({kind:z(_h["accessible-customers"]),data:DO}).strict(),m({kind:z(_h.inventory),data:LO}).strict(),m({kind:z(_h["campaign-metrics"]),data:HO}).strict()]),FO=m({metadata:w0,payload:QO}).strict().superRefine((e,n)=>{e.metadata.kind!==e.payload.kind&&n.addIssue({code:ve.custom,path:["payload","kind"],message:"Snapshot metadata and payload kinds must match."})}),ZO=A(["7d","14d","30d"]),k0=m({impressions:d().int().nonnegative(),clicks:d().int().nonnegative(),costMicros:d().int().nonnegative(),conversions:d().nonnegative(),conversionValueMicros:d().int().nonnegative().nullable(),ctr:d().nullable(),cpcMicros:d().int().nonnegative().nullable(),conversionRate:d().nullable(),costPerConversionMicros:d().int().nonnegative().nullable()}),YO=m({date:Ja,origin:A(["provider","filled"]),impressions:d().int().nonnegative(),clicks:d().int().nonnegative(),costMicros:d().int().nonnegative(),conversions:d().nonnegative(),ctr:d().nullable()}),XO=m({campaignId:ut,name:o().nullable(),status:v0,totals:k0}),WO=m({snapshotId:ut,capturedAt:o(),customerId:ut,currencyCode:o().nullable(),timeZone:o().nullable(),asOfDate:Ja,openDate:Ja.nullable(),truncated:N(),campaignsQueried:d().int().nonnegative(),campaignsInInventory:d().int().nonnegative()}),JO=m({startDate:Ja,endDate:Ja,days:d().int().positive(),totals:k0}),eI=m({days:d().int().positive(),prior:JO,change:m({impressions:d().nullable(),clicks:d().nullable(),costMicros:d().nullable(),conversions:d().nullable(),ctr:d().nullable(),conversionRate:d().nullable()})});m({window:ZO,startDate:Ja,endDate:Ja,days:d().int().positive(),totals:k0,daily:y(YO),campaigns:y(XO),comparison:eI.nullable(),comparisonUnavailableReason:A(["insufficient-history","no-snapshot"]).nullable(),source:WO.nullable()});const ct=o().trim().min(1),sx=o().regex(/^[a-f0-9]{64}$/i),tI=A(["not-connected","selection-required","connected","stale"]),Ou=tI.enum,nI=A(["live","draft"]),cS=nI.enum,Fu=m({accountId:ct.nullable(),containerId:ct.nullable(),workspaceId:ct.nullable(),selectedAt:o().nullable()}).strict(),Th=m({id:ct,projectId:ct,scopes:y(o()).default([]),selection:Fu,lastValidatedAt:o().nullable(),lastSnapshotAt:o().nullable(),createdAt:o(),updatedAt:o()}).strict(),uS=m({id:ct,path:o(),name:o(),shareData:N().nullable()}).strict(),dS=m({accountId:ct,id:ct,path:o(),name:o(),publicId:o().nullable(),domainName:o().nullable(),usageContexts:y(o())}).strict(),S0=m({accountId:ct,containerId:ct,id:ct,path:o(),name:o(),description:o().nullable(),fingerprint:o().nullable()}).strict(),aI=m({accounts:y(uS),totalAccessible:d().int().nonnegative(),truncated:N(),fetchedAt:o()}).strict();m({accountId:ct,containers:y(dS),totalAccessible:d().int().nonnegative(),truncated:N(),fetchedAt:o()}).strict();m({accountId:ct,containerId:ct,workspaces:y(S0),totalAccessible:d().int().nonnegative(),truncated:N(),fetchedAt:o()}).strict();const iI=m({id:ct,name:o(),type:o(),paused:N(),firingTriggerIds:y(ct),blockingTriggerIds:y(ct),referencedVariableIds:y(ct),parameterKeys:y(o()),fingerprint:o().nullable()}).strict(),sI=m({id:ct,name:o(),type:o(),customEventNames:y(o()),filterKeys:y(o()),autoEventFilterKeys:y(o()),fingerprint:o().nullable()}).strict(),oI=m({id:ct,name:o(),type:o(),dataLayerVariableName:o().nullable(),parameterKeys:y(o()),fingerprint:o().nullable()}).strict(),mS=A(["recognized","unknown"]),ox=mS.enum,rI=A(["literal","variable-ref","absent","unknown"]),qd=rI.enum,lI=o().trim().min(5).max(132).regex(/^\{\{\w[\w ./-]{0,127}\}\}$/),Tr=m({source:z(qd.absent),literal:de(),variableRef:de()}).strict(),Rr=m({source:z(qd.unknown),literal:de(),variableRef:de()}).strict(),Er=m({source:z(qd["variable-ref"]),literal:de(),variableRef:lI}).strict();function dc(e){return m({source:z(qd.literal),literal:e,variableRef:de()}).strict()}const cI=o().trim().max(23).regex(/^(?:AW-)?\d{1,20}$/i),uI=o().trim().min(1).max(128).regex(/^[\w-]+$/),dI=o().trim().min(1).max(20).regex(/^(?:0|[1-9]\d{0,11})(?:\.\d{1,6})?$/),mI=o().trim().length(3).regex(/^[a-z]{3}$/i);qe("source",[dc(o().trim().min(1).max(256)),Er,Tr,Rr]);const pI=qe("source",[dc(cI),Er,Tr,Rr]),hI=qe("source",[dc(uI),Er,Tr,Rr]),fI=qe("source",[dc(dI),Er,Tr,Rr]),gI=qe("source",[Er,Tr,Rr]),yI=qe("source",[dc(mI),Er,Tr,Rr]),pS=A(["all-pages","custom-event","filtered","unknown"]);pS.enum;const rx=m({operator:o().trim().min(1).max(64),value:o().max(2048),negated:N(),ignoreCase:N()}).strict(),bI=m({triggerId:ct,triggerType:o(),eventPredicates:y(rx),hostnamePredicates:y(rx),unsupportedConditionCount:d().int().nonnegative()}).strict(),hS=A(["not-google-ads-tag","unsupported-tag-type","custom-html-opaque","conversion-id-unresolved","conversion-label-unresolved","value-mapping-missing","transaction-id-mapping-missing","currency-mapping-missing","trigger-unresolved","hostname-filter-unresolved"]);hS.enum;const vI=m({tagId:ct,tagType:o(),recognition:mS,recognitionReason:o().nullable(),conversionId:pI,conversionLabel:hI,value:fI,transactionId:gI,currency:yI,triggerStrategy:pS,triggerIds:y(ct),triggerPredicates:y(bI),reviewReasons:y(hS)}).strict().superRefine((e,n)=>{e.recognition===ox.recognized&&e.recognitionReason!==null&&n.addIssue({code:ve.custom,path:["recognitionReason"],message:"Recognized assessments cannot carry an unknown-recognition reason."}),e.recognition===ox.unknown&&!e.recognitionReason&&n.addIssue({code:ve.custom,path:["recognitionReason"],message:"Unknown assessments require a recognition reason."})}),fS=m({accountId:ct,containerId:ct,workspaceId:ct.nullable(),tags:y(iI),triggers:y(sI),variables:y(oI),googleAdsTagAssessments:y(vI).default([])}).strict(),xI=m({accountId:ct,containerId:ct,id:ct,path:o(),name:o(),description:o().nullable(),fingerprint:o().nullable(),deleted:N()}).strict(),gS=m({source:z(cS.live),version:xI,graph:fS,fetchedAt:o()}).strict(),yS=m({source:z(cS.draft),workspace:S0,graph:fS,conflictCount:d().int().nonnegative(),fetchedAt:o()}).strict(),wI=m({account:uS,container:dS,workspaces:y(S0),live:gS.nullable(),draft:yS.nullable(),fetchedAt:o()}).strict();qe("status",[m({connected:z(!1),status:z(Ou["not-connected"]),connection:de(),selection:de()}).strict(),m({connected:z(!0),status:z(Ou["selection-required"]),connection:Th,selection:Fu}).strict(),m({connected:z(!0),status:z(Ou.connected),connection:Th,selection:Fu}).strict(),m({connected:z(!0),status:z(Ou.stale),connection:Th,selection:Fu}).strict()]);const bS=A(["accounts","container","live","draft"]),Iu=bS.enum,j0=m({id:ct,projectId:ct,connectionId:ct,runId:ct,kind:bS,accountId:ct.nullable(),containerId:ct.nullable(),workspaceId:ct.nullable(),payloadChecksum:sx,rawPayloadSha256:sx.nullable(),rawPayloadBytes:d().int().nonnegative().nullable(),redactedFieldCount:d().int().nonnegative(),capturedAt:o(),createdAt:o()}).strict(),kI=qe("kind",[m({kind:z(Iu.accounts),data:aI}).strict(),m({kind:z(Iu.container),data:wI}).strict(),m({kind:z(Iu.live),data:gS}).strict(),m({kind:z(Iu.draft),data:yS}).strict()]),SI=m({metadata:j0,payload:kI}).strict().superRefine((e,n)=>{e.metadata.kind!==e.payload.kind&&n.addIssue({code:ve.custom,path:["payload","kind"],message:"Snapshot metadata and payload kinds must match."})}),Kn=o().trim().min(1),jI=o().trim().min(1).refine(e=>rc(e)!==null,"Expected a hostname or http(s) URL."),A0=A(["configured","statically-consistent","runtime-unverified","observed"]);A0.enum;const vS=A(["pass","fail","unknown"]);vS.enum;const xS=A(["ads-connection-missing","ads-conversion-action-missing","ads-goal-missing","ads-goal-not-biddable","ads-action-not-primary","gtm-connection-missing","gtm-live-graph-missing","gtm-tag-missing","gtm-tag-unrecognized","gtm-tag-paused","gtm-trigger-missing","gtm-variable-missing","gtm-event-mismatch","gtm-hostname-mismatch","gtm-value-mapping-missing","gtm-transaction-id-mapping-missing","gtm-currency-mapping-missing","gtm-conversion-id-mismatch","gtm-conversion-label-mismatch","runtime-event-not-observed","runtime-gtm-not-observed","runtime-ads-not-observed"]);xS.enum;const wS=m({id:Kn,projectId:Kn,name:o().trim().min(1),eventName:o().trim().min(1),googleAds:m({customerId:Kn,conversionActionId:Kn,conversionId:o().trim().min(1).optional(),conversionLabel:o().trim().min(1).optional(),campaignIds:y(Kn).max(50).default([]),requireBiddableGoal:N().default(!0),requirePrimaryAction:N().default(!0)}).strict(),gtm:m({accountId:Kn,containerId:Kn,tagId:Kn,triggerIds:y(Kn).default([]),variableIds:y(Kn).default([])}).strict(),runtime:m({verificationRequired:N().default(!0),requireTransactionId:N().default(!0),requireValue:N().default(!0),requireCurrency:N().default(!0),productionHosts:y(jI).default([])}).strict(),createdAt:o(),updatedAt:o()}).strict();wS.omit({id:!0,projectId:!0,createdAt:!0,updatedAt:!0});const kS=A(["not-run","consistent","inconsistent"]);kS.enum;const SS=A(["not-run","not-observed","observed"]);SS.enum;m({staticCheck:kS,runtimeVerificationRequired:N(),runtimeObservation:SS}).strict();const AI=m({code:xS,subject:o().trim().min(1),outcome:vS,status:A0,evidenceIds:y(Kn).default([])}).strict(),CI=m({contract:wS,status:A0,findings:y(AI),evaluatedAt:o()}).strict(),lx=m({id:Kn,name:o(),detail:o(),active:N()});m({googleAds:m({customerId:Kn.nullable(),syncedAt:o().nullable(),conversionActions:y(lx)}),gtm:m({containerId:Kn.nullable(),syncedAt:o().nullable(),tags:y(lx)})});const Fl=o().trim().min(1);function cx(e){const n=e.trim();return/^\d{10}$/.test(n)?n:/^\d{3}-\d{3}-\d{4}$/.test(n)?n.replaceAll("-",""):null}const NI=/^[\w-]+$/;function C0(e){const n=e.trim();return NI.test(n)?n:null}function _I(e){const n=e.trim();return/^accounts\/([\w-]+)$/.exec(n)?.[1]??C0(n)}function TI(e,n){const i=e.trim(),r=/^accounts\/([\w-]+)\/containers\/([\w-]+)$/.exec(i);return r?r[1]===n?r[2]:null:C0(i)}function RI(e,n,i){const r=e.trim(),u=/^accounts\/([\w-]+)\/containers\/([\w-]+)\/workspaces\/([\w-]+)$/.exec(r);return u?u[1]===n&&u[2]===i?u[3]:null:C0(r)}function EI(e){const n=cx(e.customerId);if(!n)return null;if(e.loginCustomerId===null)return{loginCustomerId:null,customerId:n};if(e.loginCustomerId===void 0)return{customerId:n};const i=cx(e.loginCustomerId);return i?{loginCustomerId:i,customerId:n}:null}function zI(e){const n=_I(e.accountId);if(!n)return null;const i=TI(e.containerId,n);if(!i)return null;if(e.workspaceId===void 0)return{accountId:n,containerId:i};const r=RI(e.workspaceId,n,i);return r?{accountId:n,containerId:i,workspaceId:r}:null}const Md=A(["google-ads","gtm"]);Md.enum;m({provider:Md,publicUrl:o().url().optional(),developerToken:o().trim().min(1).max(512).optional()}).strict();m({provider:Md,authorizationUrl:o().url(),redirectUri:o().url(),expiresAt:o().nullable()}).strict();m({loginCustomerId:Fl.nullable().optional(),customerId:Fl}).strict().superRefine((e,n)=>{EI(e)||n.addIssue({code:ve.custom,message:"Expected ten-digit Google Ads customer IDs, with optional 3-3-4 display hyphens."})});m({accountId:Fl,containerId:Fl,workspaceId:Fl.optional()}).strict().superRefine((e,n)=>{zI(e)||n.addIssue({code:ve.custom,message:"GTM resource paths must match the selected account and container."})});m({provider:Md,disconnected:N()}).strict();const jS=100;m({snapshots:y(w0).max(jS),nextCursor:o().nullable(),total:d().int().nonnegative()}).strict();m({snapshot:FO}).strict();m({snapshots:y(j0).max(jS),nextCursor:o().nullable(),total:d().int().nonnegative()}).strict();m({snapshot:SI}).strict();m({assessment:CI,googleAdsSnapshot:w0.nullable(),gtmSnapshot:j0.nullable()}).strict();const DI=m({name:o(),accountName:o().nullable(),type:o().nullable(),role:o().nullable()});m({accounts:y(DI),total:d().int().nonnegative()});const OI=m({id:o(),projectId:o(),accountName:o(),locationName:o(),displayName:o(),primaryCategoryDisplayName:o().nullable(),storefrontAddress:o().nullable(),websiteUri:o().nullable(),placeId:o().nullable(),mapsUri:o().nullable(),additionalCategories:y(o()),description:o().nullable(),serviceArea:Ue(o(),fn()).nullable(),regularHours:Ue(o(),fn()).nullable(),primaryPhone:o().nullable(),openStatus:o().nullable(),openingDate:o().nullable(),selected:N(),syncedAt:o().nullable(),createdAt:o(),updatedAt:o()});m({locations:y(OI),totalDiscovered:d().int().nonnegative(),totalSelected:d().int().nonnegative()});m({selectAllNew:N().default(!0),accountName:o().optional(),switchAccount:N().default(!1)});m({selected:N()});m({locationNames:y(o()).optional(),daysOfMetrics:d().int().positive().max(540).optional(),monthsOfKeywords:d().int().positive().max(18).optional()});m({runId:o(),status:o()});const II=m({locationName:o(),date:o(),metric:o(),value:d().int()});m({metrics:y(II),total:d().int().nonnegative()});const PI=m({locationName:o(),periodStart:o(),periodEnd:o(),keyword:o(),valueCount:d().int().nullable(),valueThreshold:d().int().nullable()});m({keywords:y(PI),total:d().int().nonnegative(),thresholdedPct:d().int().min(0).max(100)});const qI=m({locationName:o(),placeActionLinkName:o(),placeActionType:o(),uri:o().nullable(),isPreferred:N(),providerType:o().nullable()});m({placeActions:y(qI),total:d().int().nonnegative()});const MI=m({locationName:o(),populatedGroupCount:d().int().nonnegative(),syncedAt:o(),attributes:Ue(o(),fn())});m({lodging:y(MI),total:d().int().nonnegative()});const BI=m({name:o(),valueType:o(),values:y(Ze([N(),o()])),unsetValues:y(o()),uris:y(o())}),LI=m({locationName:o(),attributeCount:d().int().nonnegative(),syncedAt:o(),attributes:y(BI)});m({attributes:y(LI),total:d().int().nonnegative()});const VI=m({locationName:o(),placeId:o(),tier:o(),amenities:y(o()),syncedAt:o(),place:Ue(o(),fn())});m({places:y(VI),total:d().int().nonnegative()});m({scope:m({locationName:o().nullable(),locationCount:d().int().nonnegative()}),performance:m({totals:Ue(o(),d()),recent7d:Ue(o(),d()),prior7d:Ue(o(),d()),deltaPct:Ue(o(),d().nullable())}),freshness:m({dataThroughDate:o().nullable(),latestStoredDate:o().nullable(),pendingDays:d().int().nonnegative()}),timeseries:y(m({date:o(),pending:N(),metrics:Ue(o(),d())})),keywords:m({total:d().int().nonnegative(),thresholdedCount:d().int().nonnegative(),thresholdedPct:d().int().min(0).max(100)}),placeActions:m({total:d().int().nonnegative(),hasReservationCta:N(),hasBookingCta:N(),hasDirectMerchantCta:N()}),lodging:m({lodgingLocationCount:d().int().nonnegative(),populatedLodgingCount:d().int().nonnegative(),emptyLodgingCount:d().int().nonnegative()}),profileCompleteness:m({locationCount:d().int().nonnegative(),withSecondaryCategories:d().int().nonnegative(),secondaryCategoryTotal:d().int().nonnegative(),withDescription:d().int().nonnegative(),withServiceArea:d().int().nonnegative(),withHours:d().int().nonnegative(),withPrimaryPhone:d().int().nonnegative(),permanentlyClosed:d().int().nonnegative(),temporarilyClosed:d().int().nonnegative()})});const $I={BUSINESS_DIRECTION_REQUESTS:"Direction requests",WEBSITE_CLICKS:"Website clicks",CALL_CLICKS:"Call clicks",BUSINESS_BOOKINGS:"Bookings",BUSINESS_CONVERSATIONS:"Conversations",BUSINESS_FOOD_ORDERS:"Food orders",BUSINESS_FOOD_MENU_CLICKS:"Food menu clicks",BUSINESS_IMPRESSIONS_DESKTOP_SEARCH:"Search impressions (desktop)",BUSINESS_IMPRESSIONS_MOBILE_SEARCH:"Search impressions (mobile)",BUSINESS_IMPRESSIONS_DESKTOP_MAPS:"Maps impressions (desktop)",BUSINESS_IMPRESSIONS_MOBILE_MAPS:"Maps impressions (mobile)"};function UI(e){const n=e.replace(/^BUSINESS_/,"").split("_").filter(Boolean).map(r=>r.toLowerCase());if(n.length===0)return e;const i=n.join(" ");return i.charAt(0).toUpperCase()+i.slice(1)}function DY(e){return $I[e]??UI(e)}const GI=["BUSINESS_DIRECTION_REQUESTS","WEBSITE_CLICKS","CALL_CLICKS"],KI=["BUSINESS_IMPRESSIONS_DESKTOP_SEARCH","BUSINESS_IMPRESSIONS_MOBILE_SEARCH","BUSINESS_IMPRESSIONS_DESKTOP_MAPS","BUSINESS_IMPRESSIONS_MOBILE_MAPS"];function OY(e){return GI.includes(e)?"conversion":KI.includes(e)?"reach":"other"}m({id:o(),domain:o(),siteUrl:o().nullable().optional(),createdAt:o(),updatedAt:o()});const Rh=m({id:o(),url:o(),httpCode:d().nullable().optional(),inIndex:N().nullable().optional(),lastCrawledDate:o().nullable().optional(),inIndexDate:o().nullable().optional(),inspectedAt:o(),documentSize:d().nullable().optional(),anchorCount:d().nullable().optional(),discoveryDate:o().nullable().optional()});m({summary:m({total:d(),indexed:d(),notIndexed:d(),unknown:d().optional(),percentage:d()}),lastInspectedAt:o().nullable(),indexed:y(Rh).default([]),notIndexed:y(Rh).default([]),unknown:y(Rh).default([]).optional()});m({query:o(),impressions:d(),clicks:d(),ctr:d(),averagePosition:d()});m({date:o(),indexed:d(),notIndexed:d(),unknown:d()});const HI=m({url:o(),status:A(["success","error"]),submittedAt:o(),error:o().optional()});m({summary:m({total:d().int().nonnegative(),succeeded:d().int().nonnegative(),failed:d().int().nonnegative()}),results:y(HI).default([])});const AS=m({url:o(),verified:N()});m({sites:y(AS).default([])});m({connected:N(),domain:o(),siteUrl:o().nullable(),createdAt:o().nullable(),updatedAt:o().nullable()});m({connected:N(),domain:o(),siteUrl:o().nullable(),availableSites:y(AS).default([])});m({siteUrl:o()});const QI=m({name:o(),alive:N(),lastUsed:o().nullable()});m({connected:N(),endpoint:o(),version:o().optional(),browserVersion:o().optional(),targets:y(QI).default([])});const zr=A(["live","staging"]);m({projectName:o(),url:o(),stagingUrl:o().optional(),username:o(),defaultEnv:zr,createdAt:o(),updatedAt:o()});const ux=m({url:o(),reachable:N(),pageCount:d().nullable().optional(),version:o().nullable().optional(),error:o().nullable().optional(),plugins:y(o()).optional(),authenticatedUser:m({id:d(),slug:o()}).nullable().optional()});m({connected:N(),projectName:o(),defaultEnv:zr,live:ux.nullable(),staging:ux.nullable(),adminUrl:o().nullable().optional()});const FI=m({id:d(),slug:o(),title:o(),status:o(),modifiedAt:o().nullable().optional(),link:o().nullable().optional()}),CS=m({title:o().nullable(),description:o().nullable(),noindex:N().nullable(),writable:N().default(!1),writeTargets:y(o()).default([])}),ZI=m({type:o(),json:Ue(o(),fn())}),YI=FI.extend({env:zr,content:o(),seo:CS,schemaBlocks:y(ZI).default([])}),dx=YI.extend({contentHash:o(),contentSnippet:o()}),NS=m({manualRequired:z(!0),targetUrl:o(),adminUrl:o().nullable().optional(),content:o(),nextSteps:y(o()).default([])}),XI=m({slug:o(),severity:A(["high","medium","low"]),code:A(["noindex","missing-seo-title","missing-meta-description","missing-schema","thin-content"]),message:o()});m({slug:o(),title:o(),status:o(),wordCount:d(),seo:CS,schemaPresent:N(),issues:y(XI).default([])});const WI=m({slug:o(),status:A(["applied","skipped","manual"]),error:o().optional(),manualAssist:NS.optional()});m({env:zr,strategy:A(["plugin","manual"]),results:y(WI)});const JI=m({slug:o(),status:A(["deployed","stripped","skipped","failed"]),schemasInjected:y(o()).optional(),manualAssist:NS.optional(),error:o().optional()});m({env:zr,results:y(JI)});const eP=m({slug:o(),title:o(),canonrySchemas:y(o()),thirdPartySchemas:y(o()),hasCanonrySchema:N()});m({env:zr,pages:y(eP)});const tP=m({name:o(),status:A(["completed","skipped","failed"]),summary:o().optional(),error:o().optional()});m({projectName:o(),steps:y(tP)});m({slug:o(),live:dx,staging:dx,hasDifferences:N(),differences:m({title:N(),slug:N(),content:N(),seoTitle:N(),seoDescription:N(),noindex:N(),schema:N()})});const nP=m({name:o(),displayName:o().optional(),keyUrl:o().optional(),modelHint:o().optional(),model:o().optional(),defaultModel:o().optional(),configured:N(),quota:iE.optional(),vertexConfigured:N().optional()}),aP=m({name:o(),displayName:o(),mode:A(["api","browser"]),modelConfigurable:N(),defaultModel:o(),knownModels:y(m({id:o(),displayName:o(),tier:A(["flagship","standard","fast","economy"])})).default([]),modelValidationPattern:m({source:o(),flags:o()}),modelValidationHint:o()}),mx=m({configured:N()});m({providers:y(nP).default([]),providerCatalog:y(aP).default([]),google:mx,bing:mx});const sa=A(["queued","running","completed","partial","failed","cancelled"]),Yt=sa.enum,N0=A(["answer-visibility","site-audit","gsc-sync","inspect-sitemap","ga-sync","bing-inspect","bing-inspect-sitemap","backlink-extract","traffic-sync","aeo-discover-seed","aeo-discover-probe","gbp-sync","ads-sync","google-ads-sync","gtm-sync"]),Ee=N0.enum;m({kind:N0.optional(),status:sa.optional()});const _0=A(["manual","scheduled","config-apply","backfill","probe"]),ms=_0.enum,_i=A(["cited","not-cited"]),ud=_i.enum,dd=A(["visible","not-visible"]);dd.enum;const nc=A(["mentioned","not-mentioned"]);nc.enum;const _S=A(["new","cited","lost","emerging","not-cited"]);_S.enum;const iP=A(["new","mentioned","lost","emerging","not-mentioned"]);iP.enum;const sP=A([ms.manual,ms.probe]);m({kind:z(Ee["answer-visibility"]).optional(),trigger:sP.optional(),providers:y(gt).optional(),queries:y(o().min(1)).min(1).optional(),measurementScope:iD.optional(),location:o().min(1).optional(),allLocations:N().optional(),noLocation:N().optional()}).refine(e=>+!!e.location+ +!!e.allLocations+ +!!e.noLocation<=1,{message:'Only one of "location", "allLocations", or "noLocation" may be provided'});const oP=m({message:o(),raw:fn().optional()}),rP=m({message:o().optional(),providers:Ue(o(),oP).optional()}),lP=m({id:o(),projectId:o(),kind:N0,status:sa,trigger:_0.default("manual"),measurementPlanVersionId:o().nullable().optional(),measurementManifest:Ue(o(),fn()).nullable().optional(),measurementScope:sD.nullable().optional(),measurementExecutionIdentity:y2.nullable().optional(),location:o().nullable().optional(),queries:y(o()).nullable().optional(),startedAt:o().nullable().optional(),finishedAt:o().nullable().optional(),error:rP.nullable().optional(),queryBasketRevision:d().int().nullable().optional(),createdAt:o()});function T0(e){if(e.providers){const n=Object.entries(e.providers);if(n.length===1){const[i,r]=n[0];return`${i}: ${r.message}`}if(n.length>1)return n.map(([i,r])=>`${i}: ${r.message}`).join(" • ")}return e.message??"Run failed."}const Bd=m({uri:o(),title:o()}),cP=m({status:A(["applied","ignored","browser-implicit","unknown"]),resolved:cn.nullable().optional()}),TS=m({id:o(),runId:o(),queryId:o(),query:o().optional(),provider:gt,citationState:_i,answerMentioned:N().optional(),visibilityState:dd.optional(),mentionState:nc.optional(),transition:_S.optional(),answerText:o().nullable().optional(),citedDomains:y(o()).default([]),citedUrls:y(o()).nullable().default(null),captureStatus:Ze([Ed,de()]).default(null),sourceCount:d().int().nonnegative().nullable().default(null),resolvedCount:d().int().nonnegative().nullable().default(null),captureVersion:d().int().positive().nullable().default(null),retrievalStatus:Ze([f0,de()]).default(null),retrievalContract:Ze([g0,de()]).default(null),competitorOverlap:y(o()).default([]),citedCompetitorDomains:y(o()).default([]),mentionedCompetitorDomains:y(o()).default([]),recommendedCompetitors:y(o()).default([]),matchedTerms:y(o()).default([]),groundingSources:y(Bd).default([]),searchQueries:y(o()).default([]),model:o().nullable().optional(),servedModel:o().nullable().optional(),location:o().nullable().optional(),requestedContext:cn.nullable().optional(),supportedContext:cP.nullable().optional(),createdAt:o()});m({snapshots:y(TS),total:d().int().nonnegative()});const uP=m({queryId:o().nullable(),query:o().nullable(),run1State:_i.nullable(),run2State:_i.nullable(),run1AnswerMentioned:N().nullable(),run2AnswerMentioned:N().nullable(),run1VisibilityState:dd.nullable(),run2VisibilityState:dd.nullable(),run1MentionState:nc.nullable().optional(),run2MentionState:nc.nullable().optional(),changed:N(),visibilityChanged:N()});m({run1:o(),run2:o(),diff:y(uP)});const dP=lP.extend({snapshots:y(TS).optional()}),mP=m({totalRuns:d().int().nonnegative(),run:dP.nullable()});m({id:o(),projectId:o().nullable().optional(),actor:o(),action:o(),entityType:o(),entityId:o().nullable().optional(),diff:fn().optional(),userAgent:o().nullable().optional(),actorSession:o().nullable().optional(),requestId:o().nullable().optional(),credentialId:o().nullable().optional(),createdAt:o()});const RS=A(["queued","running","completed","partial","failed"]);RS.enum;const ES=A(["not_answer_visibility","not_plan_run","scoped_or_probe","status_not_partial","plan_revision_changed","manifest_unreadable","model_not_frozen","provider_not_in_plan","provider_nothing_missing","provider_not_configured","too_old","superseded","quota_insufficient"]);ES.enum;m({providers:y(gt).min(1).optional(),dryRun:N().optional()}).strict();const zS=m({id:o(),runId:o(),projectId:o(),status:RS,providers:y(o()),expected:d().int().nonnegative(),filled:d().int().nonnegative(),error:o().nullable(),createdAt:o(),startedAt:o().nullable(),finishedAt:o().nullable()}),pP=m({runId:o(),status:sa,planned:N(),readable:N(),expected:d().int().nonnegative(),executed:d().int().nonnegative(),missing:d().int().nonnegative(),missingByProvider:Ue(o(),d().int().nonnegative()),fillable:N(),refusal:m({code:ES,message:o()}).nullable(),latestFill:zS.nullable()}),hP=A(["queued","already-complete","dry-run"]);m({outcome:hP,completeness:pP,fill:zS.nullable()});const DS=A(["all","api","browser"]);DS.enum;const fP=A(["yes","no","unknown","not-mentioned"]),px=y(o().min(1)),hx=m({companyName:o().min(1),domain:o().min(1),queries:px.optional(),phrases:px.optional(),competitors:y(o().min(1)).optional(),providers:y(o().trim().min(1)).min(1).optional().describe("Configured provider names to use for both answers and analysis. Omit to use all providers matching providerMode."),providerMode:DS.optional().describe("Filter providers by transport; defaults to all. Browser-only selection requires manual queries and uses no API provider for analysis.")}).superRefine((e,n)=>{e.queries!==void 0&&e.phrases!==void 0&&n.addIssue({code:"custom",message:"Use queries; phrases is accepted only as a legacy alias when queries is omitted",path:["phrases"]})});hx.safeExtend({competitors:hx.shape.competitors.default([])});const gP=m({name:o(),count:d().int().nonnegative()}),yP=m({id:o(),name:o(),weight:d(),score:d(),findings:y(m({type:o(),message:o()})).default([]),recommendations:y(o()).default([])}),bP=m({url:o(),finalUrl:o(),auditedAt:o(),overallScore:d(),summary:o(),factors:y(yP).default([])}),vP=m({industry:o(),summary:o(),services:y(o()).default([]),categoryTerms:y(o()).default([])}),xP=m({provider:o(),displayName:o(),model:o().nullable().optional(),mentioned:N(),cited:N(),describedAccurately:fP,accuracyNotes:o().nullable().optional(),incorrectClaims:y(o()).default([]),recommendedCompetitors:y(o()).default([]),citedDomains:y(o()).default([]),groundingSources:y(Bd).default([]),searchQueries:y(o()).default([]),answerText:o(),error:o().nullable().optional()}),wP=m({query:o(),providerResults:y(xP).default([])}),kP=m({totalQueries:d().int().nonnegative(),totalProviders:d().int().nonnegative(),totalComparisons:d().int().nonnegative(),mentionCount:d().int().nonnegative(),citationCount:d().int().nonnegative(),topCompetitors:y(gP).default([]),visibilityGap:o(),whatThisMeans:y(o()).default([]),recommendedActions:y(o()).default([])});m({companyName:o(),domain:o(),homepageUrl:o(),generatedAt:o(),queries:y(o()).default([]),competitors:y(o()).default([]),profile:vP,audit:bP,queryResults:y(wP).default([]),summary:kP});const OS=Ze([sa,de()]),R0=A(["pass","partial","fail"]);R0.enum;const IS=A(["up","down","flat"]);IS.enum;const SP=m({id:o(),name:o(),weight:d(),avgScore:d(),status:R0,pagesPassing:d().int().nonnegative(),pagesPartial:d().int().nonnegative(),pagesFailing:d().int().nonnegative()}),jP=m({factorId:o(),factorName:o(),avgScore:d(),affectedPages:d().int().nonnegative(),totalPages:d().int().nonnegative(),affectedPct:d().int().nonnegative(),topRecommendations:y(o()).default([])});m({project:o(),hasData:N(),runId:o().nullable(),runStatus:OS,sitemapUrl:o().nullable(),auditedAt:o().nullable(),aggregateScore:d(),pagesDiscovered:d().int().nonnegative(),pagesAudited:d().int().nonnegative(),pagesSkipped:d().int().nonnegative(),pagesErrored:d().int().nonnegative(),deltaScore:d().nullable(),trend:Ze([IS,de()]),previousScore:d().nullable(),previousAuditedAt:o().nullable(),factors:y(SP).default([]),crossCuttingIssues:y(jP).default([]),prioritizedFixes:y(o()).default([])});const PS=m({id:o(),name:o(),weight:d(),score:d()}),AP=m({url:o(),overallScore:d(),status:A(["success","error"]),error:o().nullable().optional(),factors:y(PS).default([])});m({project:o(),runId:o().nullable(),auditedAt:o().nullable(),total:d().int().nonnegative(),pages:y(AP).default([])});const CP=m({runId:o(),auditedAt:o(),aggregateScore:d(),pagesAudited:d().int().nonnegative()});m({project:o(),points:y(CP).default([])});const NP=A(["disabled","complete","partial","unavailable"]);NP.enum;const _P=m({pagesDiscovered:d().int().nonnegative(),pagesFetched:d().int().nonnegative(),pagesEligible:d().int().nonnegative(),edges:d().int().nonnegative(),findings:d().int().nonnegative()}),TP=qe("state",[m({state:z("unavailable")}),m({state:z("disabled")}),m({state:z("complete"),checked:d().int().nonnegative(),found:d().int().nonnegative(),unverified:d().int().nonnegative()}),m({state:z("partial"),checked:d().int().nonnegative(),found:d().int().nonnegative(),unverified:d().int().nonnegative()})]);m({project:o(),hasCrawlData:N(),legacyAuditAvailable:N(),runId:o().nullable(),runStatus:OS,requestedRootUrl:o().nullable(),rootUrl:o().nullable(),crawlSchemaVersion:o().nullable().optional(),engineVersion:o().nullable().optional(),normalizationVersion:o().nullable().optional(),indexabilityVersion:o().nullable().optional(),linkScoreVersion:o().nullable().optional(),effectiveOptions:Ue(o(),fn()).default({}),complete:N(),termination:o().nullable(),detailsAvailable:N(),counts:_P,deadLinks:TP});A(["complete","unknown","max-pages","max-edges","max-fetches","max-duration","max-bytes","max-page-bytes","max-depth","max-links-per-page","max-query-variants","max-sitemap-fanout","max-sitemap-urls","root-host-redirect"]);const Ld=A(["eligible","hidden","resource","redirect","failed","unchecked"]),IY=Ld.enum,PY=Ld.options,or={discovered:"discovered",robotsBlocked:"robots-blocked",html:"html",redirect:"redirect",nonHtml:"non-html",fetchError:"fetch-error"},Pu={indexable:"indexable",noindex:"noindex",blocked:"blocked",unknown:"unknown"},RP={robotsDisallow:"robots-disallow",redirectTerminal:"redirect-terminal",metaRobotsNoindex:"meta-robots-noindex",xRobotsNoindex:"x-robots-noindex",canonicalToOther:"canonical-to-other",notHtmlOrUnavailable:"not-html-or-unavailable"};function EP(e){return e.indexabilityReasons?.some(n=>n===RP.canonicalToOther)===!0||e.nodeKey!==void 0&&e.canonicalNodeKey!==null&&e.canonicalNodeKey!==void 0&&e.canonicalNodeKey!==e.nodeKey}function qY(e){switch(e.fetchState){case or.fetchError:return"failed";case or.discovered:return"unchecked";case or.nonHtml:return"resource";case or.redirect:return"redirect";case or.robotsBlocked:return"hidden";case or.html:break;default:return"unchecked"}if(EP(e))return"hidden";switch(e.indexabilityState){case Pu.indexable:return"eligible";case Pu.noindex:case Pu.blocked:return"hidden";case Pu.unknown:default:return"unchecked"}}const MY=15,zP=A(["navigation","content","unknown"]);zP.enum;const DP=m({navigation:d().int().nonnegative(),content:d().int().nonnegative(),unknown:d().int().nonnegative()}),qS=A(["placement","ubiquity","unmeasured"]);qS.enum;const Vd=A(["applied","applied-placement","applied-placement-with-ubiquity","applied-placement-partial","unavailable-too-few-pages","unavailable-legacy-scan"]);Vd.enum;function BY(e){switch(e){case"applied":case"applied-placement":case"applied-placement-with-ubiquity":case"applied-placement-partial":return!0;case"unavailable-too-few-pages":case"unavailable-legacy-scan":return!1}}const $d=A(["all","content","template"]);$d.enum;const OP=A(["anchor","redirect","canonical","link"]);OP.enum;const ac=m({nodeKey:o(),url:o(),finalUrl:o().nullable(),path:o(),parentPath:o(),discoverySource:o(),fetchState:o(),httpStatus:d().int().nullable(),canonicalUrl:o().nullable(),indexabilityState:o(),indexabilityReasons:y(o()).default([]),auditState:o(),auditScore:d().nullable(),inventoryEligible:N(),depth:d().int().nullable(),inboundUniqueEdges:d().int().nonnegative(),outboundUniqueEdges:d().int().nonnegative(),inboundOccurrences:d().int().nonnegative(),outboundOccurrences:d().int().nonnegative(),linkScoreRaw:d().nullable(),linkScoreNormalized:d().nullable(),healthState:Ld}),IP=m({type:A(["found","missing","info","timeout","unreachable"]),code:o().min(1),message:o().min(1)}),fx=PS.extend({status:R0,applicable:N().nullable(),findings:y(IP).default([]),recommendations:y(o()).default([])}),gx=m({id:o().min(1),severity:A(["critical","warning"]),detail:o().min(1),recommendation:o().min(1)}),qu=m({project:o(),runId:o(),complete:N(),termination:o().nullable()}),yx=m({nodeKey:o(),url:o(),auditState:o()});qe("state",[m({state:z("no-crawl"),project:o(),runId:de()}),qu.extend({state:z("details-unavailable")}),qu.extend({state:z("not-found")}),qu.merge(yx).extend({state:z("not-audited"),auditScore:de(),factors:y(fx).length(0).default([]),criticalDefects:y(gx).length(0).default([])}),qu.merge(yx).extend({state:z("ready"),auditScore:d(),evidenceState:A(["complete","scores-only"]),factors:y(fx).default([]),criticalDefects:y(gx).default([])})]);const PP=A(["applied","unavailable-legacy-scan"]);m({project:o(),hasCrawlData:N(),runId:o().nullable(),total:d().int().nonnegative(),nextCursor:o().nullable(),healthStateFilter:Ze([PP,de()]).default(null),pages:y(ac).default([])});const qP=m({path:o(),url:o().nullable(),hasPage:N(),pageCount:d().int().positive(),inventoryEligibleCount:d().int().nonnegative(),fetchedCount:d().int().nonnegative()});m({project:o(),hasCrawlData:N(),runId:o().nullable(),parentPath:o(),nextCursor:o().nullable(),children:y(qP).default([])});const lo=m({edgeKey:o(),sourceNodeKey:o(),sourceUrl:o(),targetNodeKey:o().nullable(),targetUrl:o(),relation:o(),internal:N(),followable:N(),occurrences:d().int().positive(),followableOccurrences:d().int().nonnegative(),nofollowOccurrences:d().int().nonnegative(),anchors:y(o()).default([]),isTemplate:Ze([N(),de()]),templateRatio:Ze([d(),de()]),templateSource:qS,placementOccurrences:Ze([DP,de()])}),MP=m({nodeKey:o(),url:o(),path:o(),depth:d().int().nonnegative().nullable(),indexabilityState:o(),fetchState:o(),auditState:o(),auditScore:d().nullable(),inventoryEligible:N(),inboundUniqueEdges:d().int().nonnegative(),outboundUniqueEdges:d().int().nonnegative(),linkScoreNormalized:d().nullable(),healthState:Ld,x:d(),y:d()}),BP=m({edgeKey:o(),sourceNodeKey:o(),targetNodeKey:o(),followable:N(),occurrences:d().int().positive(),isTemplate:N()}),LP=A(["no-crawl","legacy-snapshot","details-unavailable","layout-failed","empty-crawl"]),VP=qe("state",[m({state:z("ready"),version:o().min(1),computedAt:o().min(1),templateLinksExcluded:N()}),m({state:z("unavailable"),version:de(),reason:LP})]);m({project:o(),hasCrawlData:N(),runId:o().nullable(),rootNodeKey:o().nullable(),layout:VP,templateDetection:Vd,linkKind:$d,totalNodes:d().int().nonnegative(),totalEdges:d().int().nonnegative(),totalTemplateEdges:d().int().nonnegative(),totalContentEdges:d().int().nonnegative(),nodes:y(MP).default([]),edges:y(BP).default([]),omittedNodes:d().int().nonnegative(),omittedEdges:d().int().nonnegative(),sampled:N()});const LY=2e4,VY=5e4,$P=A(["focus","inbound","outbound","both","transitive"]),UP=ac.extend({distance:d().int().nonnegative(),relationToFocus:$P});m({project:o(),hasCrawlData:N(),runId:o().nullable(),complete:N(),termination:o().nullable(),state:A(["no-crawl","details-unavailable","ready"]),focusNodeKey:o().nullable(),focusUrl:o().nullable(),hops:d().int().min(0).max(3),totalNodes:d().int().nonnegative(),totalEdges:d().int().nonnegative(),nodes:y(UP).default([]),edges:y(lo).default([]),omittedNodes:d().int().nonnegative(),omittedEdges:d().int().nonnegative(),countAccuracy:A(["exact","lower-bound"]),truncated:N()});const bx=m({nodeKey:o(),url:o(),path:o()});m({project:o(),runId:o().nullable(),complete:N(),termination:o().nullable(),state:A(["no-crawl","details-unavailable","found","unreachable","truncated"]),from:bx.nullable(),to:bx.nullable(),maxDepth:d().int().positive(),visitedNodes:d().int().nonnegative(),nodes:y(ac).default([]),edges:y(lo).default([])});const MS=A(["added","removed","changed"]),GP=m({entity:z("page"),change:MS,key:o(),changedFields:y(o()).default([]),before:ac.nullable(),after:ac.nullable()}),KP=m({entity:z("link"),change:MS,key:o(),changedFields:y(o()).default([]),before:lo.nullable(),after:lo.nullable()}),HP=qe("entity",[GP,KP]),vx=m({added:d().int().nonnegative(),removed:d().int().nonnegative(),changed:d().int().nonnegative()}),QP=m({scope:A(["all","pages","links"]),change:A(["all","added","removed","changed"])});qe("state",[m({project:o(),state:z("unavailable"),reason:A(["no-crawl","insufficient-history","details-unavailable","partial-not-comparable"]),fromRunId:o().nullable(),toRunId:o().nullable()}),m({project:o(),state:z("incompatible"),reason:z("incompatible-versions"),fromRunId:o(),toRunId:o(),mismatchedVersions:y(o()).min(1)}),m({project:o(),state:z("ready"),fromRunId:o(),toRunId:o(),versions:m({crawlSchema:o(),normalization:o(),indexability:o(),linkScore:o()}),filters:QP,summaryState:A(["exact","omitted-on-continuation"]),summary:m({pages:vx,links:vx}).nullable(),total:d().int().nonnegative().nullable(),nextCursor:o().nullable(),changes:y(HP).default([])})]);m({project:o(),hasCrawlData:N(),runId:o().nullable(),total:d().int().nonnegative(),nextCursor:o().nullable(),templateDetection:Vd,linkKind:$d,edges:y(lo).default([])});m({project:o(),hasCrawlData:N(),runId:o().nullable(),nodeKey:o().nullable(),url:o().nullable(),templateDetection:Vd,linkKind:$d,inbound:y(lo).default([]),outbound:y(lo).default([]),inboundTruncated:N(),outboundTruncated:N()});const xx=m({findingKey:o(),severity:o(),sourceNodeKey:o().nullable(),sourceUrl:o().nullable(),targetNodeKey:o().nullable(),targetUrl:o().nullable(),evidence:Ue(o(),fn()).default({})});qe("state",[m({project:o(),runId:o().nullable(),state:z("unavailable"),legacyAuditAvailable:N()}),m({project:o(),runId:o(),state:z("disabled"),checkDeadLinks:z(!1)}),m({project:o(),runId:o(),state:z("complete"),checkDeadLinks:z(!0),checked:d().int().nonnegative(),found:d().int().nonnegative(),unverified:d().int().nonnegative(),total:d().int().nonnegative(),nextCursor:o().nullable(),deadLinks:y(xx).default([])}),m({project:o(),runId:o(),state:z("partial"),checkDeadLinks:z(!0),checked:d().int().nonnegative(),found:d().int().nonnegative(),unverified:d().int().nonnegative(),total:d().int().nonnegative(),nextCursor:o().nullable(),deadLinks:y(xx).default([])})]);const $Y=1e3,UY=10,BS=100;m({sitemapUrl:o().url().optional(),limit:d().int().positive().max(2e3).optional(),maxPages:d().int().positive().max(5e4).optional(),maxEdges:d().int().positive().max(1e6).optional(),maxDepth:d().int().min(0).max(100).optional(),checkDeadLinks:N().default(!1)});m({runId:o(),status:sa});const FP=m({runId:o(),status:sa,createdAt:o(),startedAt:o().nullable(),finishedAt:o().nullable(),hasCrawlData:N()});m({project:o(),scans:y(FP).default([])});const ZP=A(["queued","discovering","checking","arranging-map","completed","partial","failed","cancelled"]),YP=m({state:A(["pending","ready","unavailable"]),layoutVersion:o().nullable(),failureCode:o().nullable(),updatedAt:o().nullable()}),XP=m({id:o(),state:o(),pagesDiscovered:d().int().nonnegative(),pagesFetched:d().int().nonnegative(),pagesEligible:d().int().nonnegative(),pagesErrored:d().int().nonnegative(),edgesDiscovered:d().int().nonnegative(),lastUpdatedAt:o(),startedAt:o().nullable(),finishedAt:o().nullable(),error:o().nullable()});m({project:o(),runId:o(),status:sa,phase:ZP,attempt:XP.nullable(),layout:YP,error:o().nullable()});const WP=A(["waiting","collecting","terminal"]),JP=m({nodeKey:o(),url:o(),auditScore:d(),checksNeedingAttention:d().int().nonnegative()});m({project:o(),runId:o(),status:sa,state:WP,attemptId:o().nullable(),pagesAudited:d().int().nonnegative(),updatedAt:o().nullable(),examples:y(JP).max(12).default([])});const eq=m({basis:A(["tracked","observed"]).nullable(),availability:A(["measured","not-measured","unavailable"]),reason:A(["select-query-class","no-competitors","insufficient-observed","no-answers","no-mentions","unavailable"]).nullable()}),E0=eq.partial().shape;function GY(e){switch(e){case"select-query-class":return"Select a query class.";case"no-competitors":return"No competitors configured.";case"insufficient-observed":return"Requires 3 observed competitors mentioned in at least 3 answers each.";case"no-answers":return"No answer text in scope.";case"no-mentions":return"No brands mentioned in scope.";case"unavailable":return"Competitor evidence is unavailable.";default:return""}}function tq(e,n){const i=n?.availability==="unavailable"?"Unavailable":n?.availability==="not-measured"||e===null?"Not measured":`${e.toFixed(1)}%`;return n?.basis?`${i} · ${n.basis} competitors`:i}function KY(e,n,i){return`Share of voice · ${n} queries: ${tq(e,i)}${i?.measurementScope==="all-markets"?" · all markets":""}`}const z0=A(["competitor","directory","social","forum","news","reference","blog","ecommerce","video","academic","other"]),Zu=z0.enum,D0=A(["cited","aspirational","wasted-surface"]),wx=D0.enum;wx.cited,wx.aspirational;const Ud=A(["direct-competitor","ota-aggregator","editorial-media","other","unknown"]),nq=Ud.enum;nq["direct-competitor"];const Gd=A(["queued","seeding","probing","completed","failed"]);Gd.enum;const LS=m({domain:o().min(1),hits:d().int().positive(),competitorType:Ud.default("unknown")}),aq=m({id:o(),sessionId:o(),projectId:o(),query:o(),bucket:D0.nullable().default(null),citationState:_i,citedDomains:y(o()).default([]),answerMentioned:N().nullable().default(null),createdAt:o()}),iq=m({id:o(),projectId:o(),status:Gd,icpDescription:o().nullable().optional(),seedProvider:o().nullable().optional(),seedCountRaw:d().int().nullable().optional(),seedCount:d().int().nullable().optional(),seedFromAnswerCount:d().int().nullable().optional(),seedFromGroundingCount:d().int().nullable().optional(),seedBrandFilteredCount:d().int().nullable().optional(),buyerDescription:o().nullable().optional(),locations:y(cn).nullable().optional(),seedRawCandidates:y(o()).nullable().optional(),dedupClusterMinSims:y(d()).nullable().optional(),dedupBandPairFraction:d().nullable().optional(),dedupPairsTotal:d().int().nullable().optional(),seedProviders:y(o()).nullable().optional(),seedProviderCounts:Ue(o(),d().int()).nullable().optional(),canonicalCount:d().int().nullable().optional(),dedupThreshold:d().nullable().optional(),probeCount:d().int().nullable().optional(),citedCount:d().int().nullable().default(null),aspirationalCount:d().int().nullable().default(null),wastedCount:d().int().nullable().default(null),competitorMap:y(LS).default([]),warning:o().nullable().optional(),error:o().nullable().optional(),startedAt:o().nullable().optional(),finishedAt:o().nullable().optional(),createdAt:o()});iq.extend({probes:y(aq).default([])});const sq=500,oq=8,rq=["gemini","openai"],lq=A(rq);m({icpDescription:o().min(1).optional(),buyerDescription:o().min(1).optional(),seedProviders:y(lq).min(1).transform(e=>[...new Set(e)].sort()).optional(),dedupThreshold:d().min(0).max(1).optional(),maxProbes:d().int().positive().max(sq).optional(),probeConcurrency:d().int().min(1).max(oq).optional(),locations:y(o().min(1)).optional()});m({buckets:y(D0).min(1).optional(),includeCompetitors:N().optional(),competitorTypes:y(Ud).min(1).optional()});m({sessionId:o(),projectId:o(),status:Gd,queriesByBucket:m({cited:y(o()),aspirational:y(o()),"wasted-surface":y(o())}),suggestedCompetitors:y(LS)});m({sessionId:o(),projectId:o(),promoted:m({queries:y(o()),competitors:y(o())}),skipped:m({queries:y(o()),competitors:y(o())})});Ze([z("cli"),o().regex(/^discovery:.+$/)]);const cq=m({query:o().min(1),probeHits:d().int().positive()}),uq=m({rawCandidates:d().int().nonnegative(),admitted:d().int().nonnegative(),rejected:m({belowFloor:d().int().nonnegative(),length:d().int().nonnegative(),navigational:d().int().nonnegative(),duplicate:d().int().nonnegative(),offAnchor:d().int().nonnegative(),semanticDuplicate:d().int().nonnegative()})});m({sessionId:o(),projectId:o(),provider:o(),status:Gd,minProbeHits:d().int().positive(),anchorApplied:N(),semanticNoveltyApplied:N(),candidates:y(cq),stats:uq});const O0=A(["own","direct-competitor","ota-aggregator","editorial-media","other"]);O0.enum;const Kd=A(["7d","30d","90d","all"]),kx=A(["improving","declining","stable"]),dq=A(["mentioned","cited"]);dq.enum;const mf=m({citationRate:d(),cited:d().int(),total:d().int(),mentionRate:d(),mentionedCount:d().int()}),Dr=o().trim().min(1),mq=y(Dr).min(1).superRefine((e,n)=>{for(let i=1;i<e.length;i+=1)e[i-1]>=e[i]&&n.addIssue({code:"custom",message:"mixed model IDs must be sorted and unique",path:[i]})}),co=qe("status",[m({status:z("known"),model:Dr}),m({status:z("unknown")}),m({status:z("mixed"),models:mq,includesUnknown:N()})]),pq=m({observedAt:o(),bucketStartDate:o(),from:co,to:co,fromPreWindowAnchor:N().optional(),anchorObservedAt:o().optional()}),VS=m({latestObservation:m({observedAt:o(),state:co}),events:y(pq),eventTotal:d().int().nonnegative().optional(),anchorUnavailable:N().optional()}),hq=Ue(o(),VS),fq=VS.extend({latestServedModelIds:y(Dr).default([])}),gq=Ue(o(),fq),yq=m({observedAt:o(),configured:co,served:co}),bq=m({scope:A(["non-brand","pooled"]),rate:d().nullable(),projectMentionSnapshots:d().int().nonnegative(),competitorMentionSnapshots:d().int().nonnegative()}),vq=m({startDate:o(),endDate:o(),dataStartDate:o(),dataEndDate:o(),sweepCount:d().int().nonnegative(),citationRate:d(),cited:d().int(),total:d().int(),queryCount:d().int(),mentionRate:d(),mentionedCount:d().int(),mentionShare:bq,byProvider:Ue(o(),mf),modelEvidenceByProvider:Ue(o(),co).default({}),basketRevision:d().int().nullable().default(null)}),xq=m({revision:d().int(),at:o(),added:y(o()),removed:y(o())}),wq=m({date:o(),delta:d().int(),label:o()}),kq=m({at:o(),identity:y2});m({window:Kd,mentionShareScope:A(["non-brand","pooled"]),buckets:y(vq),overall:mf,byProvider:Ue(o(),mf),trend:kx,mentionTrend:kx,queryChanges:y(wq),basketChanges:y(xq).default([]),executionIdentityChanges:y(kq).default([]),referenceBasketRevision:d().int().nullable().default(null),modelAttribution:hq.default({}),servedModelAttribution:gq.default({}),modelServiceMismatch:Ue(o(),yq).default({}),modelPointerChanges:Ue(o(),dO).default({})});const Sx=m({category:z0,label:o(),count:d().int(),percentage:d(),topDomains:y(m({domain:o(),count:d().int()}))}),Sq=m({domain:o(),count:d().int(),percentage:d(),answerShare:d().optional(),category:z0,label:o(),surfaceClass:O0}),jq=m({surfaceClass:O0,label:o(),count:d().int(),percentage:d(),domainCount:d().int()}),jx=m({totalCitedSlots:d().int(),answerTotal:d().int().optional(),answersWithSources:d().int().optional(),domainTotal:d().int(),entries:y(Sq),truncatedDomainCount:d().int(),truncatedCitedSlots:d().int(),bySurfaceClass:y(jq)}),Aq=A(["measurement-plan","query-text"]);m({runId:o().trim().min(1).optional(),queryClass:Wf.optional(),includeByQuery:A(["true","false","1","0"]).optional()});m({ranked:jx,byProvider:Ue(o(),jx),providersWithoutSources:y(o()).optional(),answerTotal:d().int().optional(),runCount:d().int().optional(),unclassifiedAnswers:d().int().optional(),filters:m({runId:o().nullable(),queryClass:Wf,queryClassBasis:Ze([Aq,de()]),includeByQuery:N()}).optional(),runId:o(),window:Kd,limit:d().int().nullable(),overall:y(Sx),byQuery:Ue(o(),y(Sx)).optional()});const Cq=A(["own","direct-competitor","ota-aggregator","editorial-media","other","unknown"]),Nq=qe("kind",[m({kind:z("project")}).strict(),m({kind:z("group"),groupKey:o().trim().min(1)}).strict(),m({kind:z("all-markets")}).strict()]),$S=A(["all","branded","non-brand"]),US=A(["project","all-markets"]);m({window:Kd.optional(),groupKey:o().trim().min(1).optional(),scope:US.optional(),provider:o().trim().min(1).optional(),model:Dr.optional(),groupBy:z("model").optional(),queryClass:$S.optional(),location:o().trim().min(1).optional(),runId:o().trim().min(1).optional()}).strict().superRefine((e,n)=>{e.scope==="all-markets"&&e.groupKey!==void 0&&n.addIssue({code:"custom",path:["groupKey"],message:"groupKey cannot be combined with scope=all-markets"}),e.model!==void 0&&e.provider===void 0&&n.addIssue({code:"custom",path:["provider"],message:"provider is required when filtering by model"})});const ds=m({domain:o().trim().min(1),label:o().trim().min(1),surfaceClass:Cq,pinned:N(),mentionCount:d().int().nonnegative(),shareOfVoice:d().min(0).max(100).nullable(),citationCount:d().int().nonnegative(),answeredResults:d().int().nonnegative(),firstSeenAt:o().datetime().nullable(),lastSeenAt:o().datetime().nullable(),sampleUrls:y(o().url()).max(3)}).strict(),GS=m({answeredResults:d().int().nonnegative(),sourceResults:d().int().nonnegative(),missingAnswerTextResults:d().int().nonnegative(),mentionCredits:d().int().nonnegative(),incompleteSourceResults:d().int().nonnegative(),excludedProbeResults:d().int().nonnegative(),excludedNonCompletedResults:d().int().nonnegative()}).strict(),_q=50,Tq=m({...E0,comparison:y(m({domain:o(),mentions:d().int().nonnegative()})).optional(),observedNames:y(m({name:o(),answerCount:d().int().nonnegative()})).optional(),observedNamesTotal:d().int().nonnegative().optional(),provider:o().trim().min(1),model:Dr.nullable(),servedModels:co,snapshotCount:d().int().positive(),project:ds,pinned:y(ds),observed:y(ds),otherSources:y(ds),evidence:GS,truncated:N()}).strict(),Rq=m({basis:z("requested-model"),groups:y(Tq).max(_q),totalGroups:d().int().nonnegative(),truncated:N()}).strict();m({...E0,comparison:y(m({domain:o(),mentions:d().int().nonnegative()})).optional(),observedNames:y(m({name:o(),answerCount:d().int().nonnegative()})).optional(),observedNamesTotal:d().int().nonnegative().optional(),window:Kd,scope:Nq,project:ds,pinned:y(ds),observed:y(ds),otherSources:y(ds),evidence:GS,modelComparison:Rq.optional(),marketState:m({activeRevision:d().int().positive(),draft:m({etag:o().trim().min(1),pendingCompetitorDomains:y(o().trim().min(1))}).strict().nullable()}).strict().nullable(),filters:m({scope:US,groupKey:o().nullable(),provider:o().nullable(),model:Dr.optional(),groupBy:z("model").optional(),queryClass:$S,location:o().nullable(),runId:o().nullable()}).strict(),truncated:N()}).strict();const I0=m({total:d().int(),checked:d().int(),mentioned:d().int(),cited:d().int(),mentionRate:d().nullable(),citedRate:d().nullable()}),KS=I0.extend({provider:o(),firstObserved:o(),lastObserved:o()}),Eq=I0.extend({queryId:o().nullable(),query:o(),firstObserved:o(),lastObserved:o(),providers:y(KS).optional()}),zq=m({since:o().nullable(),until:o().nullable(),lastRuns:d().int().nullable(),runCount:d().int()}),Dq=A(["provider"]),pf=m({domain:o(),mentions:d().int()}),HS=m({...E0,measurementScope:A(["project","all-markets"]).optional(),queryClass:A(["branded","non-brand","pooled"]),percent:d().nullable(),competitorCount:d().int().nonnegative(),projectMentions:d().int(),competitorMentions:d().int(),snapshotsWithAnswerText:d().int(),perCompetitor:y(pf)});m({project:o(),groupBy:Dq.optional(),window:zq,totals:I0,byProvider:y(KS).optional(),queries:y(Eq),shareOfVoice:HS.optional()});const Oq=A(["within-noise","moved","insufficient-data","model-discontinuous","model-unknown"]),Iq=A(["up","down","flat"]),Ax=m({availability:A(["available","no-observations","no-competitive-frame"]),point:d().nullable(),ciLow:d().nullable(),ciHigh:d().nullable(),numerator:d().int(),denominator:d().int()}),Pq=A(["mention-share-of-voice","cited-share-of-voice","mention-rate","cited-rate"]),qq=m({key:Pq,label:o(),queryClass:A(["all","non-brand","pooled"]),driftRobust:N(),from:Ax,to:Ax,rateRatio:d().nullable(),direction:Ze([Iq,de()]),verdict:Oq}),Cx=m({month:o(),since:o(),until:o(),runCount:d().int(),lowRunCount:N()}),Mq=m({queryCount:d().int(),excludedFromOnly:d().int(),excludedToOnly:d().int(),providers:y(o()),excludedProviders:y(o())}),Bq=m({provider:o(),fromModels:y(o()),toModels:y(o())}),Lq=A(["included","model-discontinuous","model-unknown"]),Vq=m({provider:o(),status:Lq,fromModels:y(o()),toModels:y(o())}),$q=A(["comparable","model-discontinuous","model-unknown","insufficient-data"]),Uq=m({status:$q,comparedProviders:y(o()),providers:y(Vq)}),Gq=m({provider:o(),from:m({checked:d().int(),mentioned:d().int(),cited:d().int()}),to:m({checked:d().int(),mentioned:d().int(),cited:d().int()})}),Kq=m({from:m({count:d().int(),of:d().int()}),to:m({count:d().int(),of:d().int()})});m({project:o(),from:Cx,to:Cx,basket:Mq,metrics:y(qq),queriesMentioned:Kq,byProvider:y(Gq),modelChanges:y(Bq),continuity:Uq,competitors:m({from:y(pf),to:y(pf)})});A(["json","csv"]);const Hq=m({runId:o(),runKind:z("answer-visibility"),runStatus:sa,runTrigger:_0,runCreatedAt:o(),runStartedAt:o().nullable(),runFinishedAt:o().nullable(),snapshotId:o(),snapshotCreatedAt:o(),queryId:o().nullable(),query:o().nullable(),provider:o(),model:o().nullable(),location:o().nullable(),citationState:_i,cited:N(),answerMentioned:N().nullable(),mentionState:Ze([nc,de()]),citedDomains:y(o()),citedUrls:y(o()).nullable(),captureStatus:Ze([Ed,de()]),sourceCount:d().int().nonnegative().nullable(),resolvedCount:d().int().nonnegative().nullable(),captureVersion:d().int().positive().nullable(),competitorOverlap:y(o()),recommendedCompetitors:y(o()),answerText:o().nullable(),groundingSources:y(Bd),searchQueries:y(o())}),Qq=m({since:o().nullable(),until:o().nullable(),includeProbes:N()});m({schemaVersion:z("canonry.results-export/v1"),generatedAt:o(),project:m({id:o(),name:o(),displayName:o(),canonicalDomain:o(),country:o(),language:o()}),filters:Qq,recordCount:d().int().nonnegative(),records:y(Hq)});m({runIds:y(o().trim().min(1)).max(100).default([]),researchRunIds:y(o().trim().min(1)).max(100).default([]),confirm:N().default(!1)}).strict().superRefine((e,n)=>{e.runIds.length+e.researchRunIds.length===0&&n.addIssue({code:"custom",message:"Select at least one saved run."}),(new Set(e.runIds).size!==e.runIds.length||new Set(e.researchRunIds).size!==e.researchRunIds.length)&&n.addIssue({code:"custom",message:"Run IDs must be unique."})});m({dryRun:N(),runIds:y(o()),researchRunIds:y(o()),querySnapshots:d().int().nonnegative(),researchQueries:d().int().nonnegative(),insights:d().int().nonnegative(),healthSnapshots:d().int().nonnegative()});const Hd=A(["organic","paid"]);Hd.enum;m({id:o(),projectId:o(),propertyId:o(),clientEmail:o(),connected:N(),createdAt:o(),updatedAt:o()});m({date:o(),landingPage:o(),sessions:d(),organicSessions:d(),users:d()});const P0=A(["session","first_user","manual_utm"]),Fq=m({source:o(),medium:o(),trafficClass:Hd,sessions:d(),users:d().optional(),sourceDimension:P0}),Zq=m({source:o(),medium:o(),trafficClass:Hd,sourceDimension:P0,landingPage:o(),sessions:d(),users:d().optional()}),Yq=m({source:o(),medium:o(),sessions:d(),users:d(),channelGroup:o()}),Vl=m({sessions:d(),sharePct:d(),sharePctDisplay:o()}),Xq=m({organic:Vl,social:Vl,direct:Vl,ai:Vl,other:Vl});m({totalSessions:d(),totalOrganicSessions:d(),totalDirectSessions:d(),totalUsers:d().nullable(),topPages:y(m({landingPage:o(),sessions:d(),organicSessions:d(),directSessions:d(),users:d()})),aiReferrals:y(Fq),aiReferralLandingPages:y(Zq),aiSessionsDeduped:d(),aiUsersDeduped:d().optional(),paidAiSessionsDeduped:d(),paidAiUsersDeduped:d().optional(),organicAiSessionsDeduped:d(),organicAiUsersDeduped:d().optional(),aiSessionsBySession:d(),aiUsersBySession:d().optional(),paidAiSessionsBySession:d(),paidAiUsersBySession:d().optional(),organicAiSessionsBySession:d(),organicAiUsersBySession:d().optional(),socialReferrals:y(Yq),socialSessions:d(),socialUsers:d().optional(),channelBreakdown:Xq,organicSharePct:d(),aiSharePct:d(),aiSharePctBySession:d(),paidAiSharePct:d(),paidAiSharePctBySession:d(),organicAiSharePct:d(),organicAiSharePctBySession:d(),directSharePct:d(),socialSharePct:d(),organicSharePctDisplay:o(),aiSharePctDisplay:o(),aiSharePctBySessionDisplay:o(),paidAiSharePctDisplay:o(),paidAiSharePctBySessionDisplay:o(),organicAiSharePctDisplay:o(),organicAiSharePctBySessionDisplay:o(),directSharePctDisplay:o(),socialSharePctDisplay:o(),otherSessions:d(),otherSharePct:d(),otherSharePctDisplay:o(),lastSyncedAt:o().nullable()});m({connected:N(),propertyId:o().nullable(),clientEmail:o().nullable(),authMethod:A(["service-account","oauth"]).nullable(),lastSyncedAt:o().nullable(),createdAt:o().nullable().optional(),updatedAt:o().nullable().optional()});const Wq=m({propertyId:o(),displayName:o(),accountName:o()});m({properties:y(Wq)});m({synced:N(),rowCount:d().int().nonnegative(),aiReferralCount:d().int().nonnegative(),socialReferralCount:d().int().nonnegative(),days:d().int().nonnegative(),requestedDays:d().int().nonnegative(),clamped:N(),syncedAt:o(),measurement:m({acquisition:m({days:d().int().nonnegative(),status:A(["ready","error"]),rowCount:d().int().nonnegative(),error:o().optional()}),leads:m({days:d().int().nonnegative(),status:A(["ready","error","not-configured"]),rowCount:d().int().nonnegative(),attributionScope:A(["landing-page","channel"]).optional(),error:o().optional()})}),syncedComponents:y(o()).optional()});m({date:o(),source:o(),medium:o(),trafficClass:Hd,landingPage:o(),sessions:d(),users:d(),sourceDimension:P0});const Jq=m({source:o(),sessions:d(),paidSessions:d(),organicSessions:d()}),eM=m({date:o(),sessions:d(),paidSessions:d(),organicSessions:d(),bySource:y(Jq)});m({days:y(eM),sources:y(o()),totalSessions:d(),totalPaidSessions:d(),totalOrganicSessions:d()});m({date:o(),source:o(),medium:o(),sessions:d(),users:d(),channelGroup:o()});m({date:o(),sessions:d(),organicSessions:d(),users:d(),usersSource:A(["deduplicated","landing-page-sum"])});m({id:o(),projectId:o(),runId:o().nullable(),overallCitedRate:d(),overallMentionRate:d(),totalPairs:d().int().nonnegative(),citedPairs:d().int().nonnegative(),mentionedPairs:d().int().nonnegative(),providerBreakdown:Ue(o(),m({citedRate:d(),mentionRate:d(),cited:d().int().nonnegative(),mentioned:d().int().nonnegative(),total:d().int().nonnegative()})),createdAt:o(),status:A(["ready","no-data"]),reason:z("no-runs-yet").optional()});const tM=m({view:A(["project","visibility","property","queries","site-health"]),unavailableReason:o().trim().min(1).max(512).optional(),selection:od.optional(),page:m({runId:o().trim().min(1).max(256).optional(),nodeKey:o().trim().min(1).max(2048).optional()}).strict().optional()}).strict().superRefine((e,n)=>{e.page&&e.view!=="site-health"&&n.addIssue({code:"custom",message:"Page context requires Site Health."}),e.selection&&!["visibility","property","queries"].includes(e.view)&&n.addIssue({code:"custom",message:"Measurement selection requires a measurement view."})}),nM=m({maxToolCalls:d().int().min(1).max(100).default(30),timeoutMs:d().int().min(1e3).max(6e5).default(18e4)}).strict(),q0=A(["claude","openai","gemini","zai","deepinfra"]),aM=m({id:q0,label:o(),defaultModel:o(),configured:N(),keySource:A(["config","env"]).nullable()});m({providers:y(aM).default([]),defaultProvider:q0.nullable()});const iM=A(["aero","user","compaction"]);iM.enum;const QS=128;m({key:o().min(1).max(QS),value:o().min(1)});m({key:o().min(1).max(QS)});m({prompt:o().trim().min(1),conversationId:o().min(1).nullable().optional(),provider:q0.optional(),modelId:o().trim().min(1).optional(),scope:A(["all","read-only"]).optional(),profile:A(["default","ads-operator"]).optional(),context:tM.optional(),limits:nM.optional()});const sM=IR({role:o(),content:fn().optional()}),FS=m({id:o(),title:o(),active:N(),modelProvider:o(),modelId:o(),createdAt:o(),updatedAt:o()});FS.extend({messages:y(sM),isStreaming:N()});m({conversations:y(FS),currentConversationId:o().nullable(),nextOffset:d().int().nullable()});m({id:dR()}).strict();m({id:o(),status:z("deleted")});const oM=["status","changes","gaps","insights"],rM=A(oM),lM=m({text:o().optional(),tool:m({name:o(),label:o(),arguments:Ue(o(),fn()),result:fn(),durationMs:d().int().nonnegative()})}),cM=m({id:rM,steps:y(lM),answer:o()});m({project:o(),seededAt:o(),starters:y(cM)});m({offset:ec().int().min(0).default(0),limit:ec().int().min(1).max(100).default(50)}).strict();const Or=A(["commoncrawl","bing-webmaster"]);Or.enum;const M0=A(["queued","downloading","querying","ready","failed"]);M0.enum;m({id:o(),release:o(),status:M0,phaseDetail:o().nullable().optional(),vertexPath:o().nullable().optional(),edgesPath:o().nullable().optional(),vertexSha256:o().nullable().optional(),edgesSha256:o().nullable().optional(),vertexBytes:d().int().nullable().optional(),edgesBytes:d().int().nullable().optional(),projectsProcessed:d().int().nullable().optional(),domainsDiscovered:d().int().nullable().optional(),downloadStartedAt:o().nullable().optional(),downloadFinishedAt:o().nullable().optional(),queryStartedAt:o().nullable().optional(),queryFinishedAt:o().nullable().optional(),error:o().nullable().optional(),createdAt:o(),updatedAt:o()});const uM=m({linkingDomain:o(),numHosts:d().int(),source:Or}),dM=m({projectId:o(),release:o(),targetDomain:o(),totalLinkingDomains:d().int(),totalHosts:d().int(),top10HostsShare:o(),queriedAt:o(),source:Or,excludedLinkingDomains:d().int().optional(),excludedHosts:d().int().optional()});m({source:Or,summary:dM.nullable(),total:d().int(),rows:y(uM)});m({release:o(),totalLinkingDomains:d().int(),totalHosts:d().int(),top10HostsShare:o(),queriedAt:o(),source:Or});const mM=m({source:Or,connected:N(),hasData:N(),latestRelease:o().nullable(),totalLinkingDomains:d().int(),lastSyncedAt:o().nullable()});m({projectId:o(),targetDomain:o(),sources:y(mM),anyConnected:N(),anyData:N()});m({duckdbInstalled:N(),duckdbVersion:o().nullable().optional(),duckdbSpec:o(),pluginDir:o()});m({installed:N(),version:o(),path:o(),alreadyPresent:N()});m({release:o(),vertexUrl:o(),edgesUrl:o(),vertexBytes:d().int().nullable(),edgesBytes:d().int().nullable(),lastModified:o().nullable()});m({release:o(),syncStatus:M0.nullable(),bytes:d().int(),lastUsedAt:o().nullable()});const B0=A(["positive","caution","negative","neutral"]),us=m({label:o(),value:o(),delta:o(),tone:B0,description:o(),tooltip:o().optional(),trend:y(d()),progress:d().optional(),providerCoverage:o().optional()}),Nx=m({projectMentionSnapshots:d().int().nonnegative(),competitorMentionSnapshots:d().int().nonnegative(),perCompetitor:y(m({domain:o(),mentionSnapshots:d().int().nonnegative(),shareOfCompetitiveTotal:d()})),snapshotsWithAnswerText:d().int().nonnegative(),snapshotsTotal:d().int().nonnegative(),score:d().int().min(0).max(100).nullable()}),pM=us.extend({breakdown:Nx,scope:A(["non-brand","pooled"]),branded:Nx}),Eh=m({gained:d().int().nonnegative(),lost:d().int().nonnegative(),tone:B0,hasPreviousRun:N(),gainedQueries:y(o()).optional(),lostQueries:y(o()).optional()}),hM=m({hasPreviousRun:N(),comparable:N(),querySetChanged:N(),previousRunAt:o().nullable(),currentQueryCount:d().int().nonnegative(),previousQueryCount:d().int().nonnegative(),comparableQueryCount:d().int().nonnegative(),addedQueryCount:d().int().nonnegative(),removedQueryCount:d().int().nonnegative(),addedQueries:y(o()),removedQueries:y(o())}),fM=m({id:o(),projectId:o(),runId:o().nullable(),type:A(["regression","gain","opportunity","first-citation","provider-pickup","persistent-gap","competitor-gained","competitor-lost","gbp-lodging-gap","gbp-listing-discrepancy","gbp-cta-gap","gbp-description-missing","gbp-metric-drop","gbp-keyword-drop"]),severity:A(["critical","high","medium","low"]),title:o(),query:o(),provider:o(),recommendation:m({action:o(),target:o().optional(),reason:o()}).optional(),cause:m({cause:o(),competitorDomain:o().optional(),details:o().optional()}).optional(),dismissed:N(),createdAt:o()}),gM=m({id:o(),projectId:o(),runId:o().nullable(),overallCitedRate:d(),overallMentionRate:d(),totalPairs:d().int().nonnegative(),citedPairs:d().int().nonnegative(),mentionedPairs:d().int().nonnegative(),providerBreakdown:Ue(o(),m({citedRate:d(),mentionRate:d(),cited:d().int().nonnegative(),mentioned:d().int().nonnegative(),total:d().int().nonnegative()})),createdAt:o(),status:A(["ready","no-data"]),reason:z("no-runs-yet").optional()});m({project:dz,latestRun:mP,health:gM.nullable(),topInsights:y(fM),queryCounts:m({totalQueries:d().int().nonnegative(),citedQueries:d().int().nonnegative(),notCitedQueries:d().int().nonnegative(),citedRate:d(),mentionedQueries:d().int().nonnegative(),notMentionedQueries:d().int().nonnegative(),mentionRate:d()}),providers:y(m({provider:o(),citedRate:d(),cited:d().int().nonnegative(),total:d().int().nonnegative()})),transitions:m({since:o().nullable(),gained:d().int().nonnegative(),lost:d().int().nonnegative(),emerging:d().int().nonnegative()}),scores:m({mention:us,visibility:us,mentionShare:pM,gapQueries:us,mentionGaps:us,indexCoverage:us,competitorPressure:us,runStatus:us}),movementSummary:Eh,citationMovement:Eh,mentionMovement:Eh,movementComparison:hM,competitors:y(m({id:o(),domain:o(),citationCount:d().int().nonnegative(),totalQueries:d().int().nonnegative(),pressureLabel:A(["None","Low","Moderate","High"]),citedQueries:y(o())})),providerScores:y(m({provider:o(),model:o().nullable(),score:d(),cited:d().int().nonnegative(),total:d().int().nonnegative(),trend:y(d()).optional()})),attentionItems:y(m({id:o(),tone:B0,title:o(),detail:o(),actionLabel:o(),href:o()})),runHistory:y(m({runId:o(),createdAt:o(),citedCount:d().int().nonnegative(),totalCount:d().int().nonnegative(),citationRate:d(),mentionedCount:d().int().nonnegative(),mentionRate:d(),status:o()})),suggestedQueries:m({rows:y(m({query:o(),impressions:d(),clicks:d(),avgPosition:d(),reason:o()})),totalCandidates:d().int().nonnegative(),skippedAlreadyTracked:d().int().nonnegative()}),dateRangeLabel:o(),contextLabel:o()});A(["snapshot","insight"]);const yM=m({kind:z("snapshot"),id:o(),runId:o(),query:o(),provider:o(),model:o().nullable(),citationState:_i,matchedField:A(["answerText","citedDomains","citedUrls","searchQueries","query"]),snippet:o(),createdAt:o()}),bM=m({kind:z("insight"),id:o(),runId:o().nullable(),type:A(["regression","gain","opportunity","first-citation","provider-pickup","persistent-gap","competitor-gained","competitor-lost","gbp-lodging-gap","gbp-listing-discrepancy","gbp-cta-gap","gbp-description-missing","gbp-metric-drop","gbp-keyword-drop"]),severity:A(["critical","high","medium","low"]),title:o(),query:o(),provider:o(),matchedField:A(["title","query","recommendation","cause"]),snippet:o(),dismissed:N(),createdAt:o()}),vM=qe("kind",[yM,bM]);m({query:o(),totalHits:d().int().nonnegative(),truncated:N(),hits:y(vM)});const ZS=A(["create","expand","refresh","add-schema"]);ZS.enum;function xM(e){switch(e){case"create":return"Create";case"expand":return"Expand";case"refresh":return"Refresh";case"add-schema":return"Add schema"}}const YS=A(["gsc","competitor-evidence","both"]);YS.enum;const XS=A(["high","medium","low"]);XS.enum;function wM(e){switch(e){case"high":return"High";case"medium":return"Medium";case"low":return"Low"}}const kM=A(["blog-post","comparison","listicle","how-to","guide","glossary"]);kM.enum;const WS=A(["proposed","briefed","payload-generated","draft-created","published","validated","dismissed"]);WS.enum;const L0=A(["ownable","ceded"]),HY=L0.enum;function QY(e){switch(e){case"ownable":return"Ownable";case"ceded":return"Ceded"}}const SM=m({url:o(),gscImpressions:d().nonnegative(),gscClicks:d().nonnegative(),gscAvgPosition:d().nonnegative().nullable(),organicSessions:d().nonnegative()}),jM=m({domain:o(),url:o(),title:o(),citationCount:d().int().nonnegative()}),AM=m({demand:d(),competitor:d(),absence:d(),gapSeverity:d()}),CM=m({actionId:o(),state:WS,lastUpdated:o()}),JS=m({targetRef:o(),query:o(),action:ZS,ourBestPage:SM.nullable(),winningCompetitor:jM.nullable(),score:d(),scoreBreakdown:AM,drivers:y(o()),demandSource:YS,actionConfidence:XS,existingAction:CM.nullable(),winnabilityClass:L0,winnability:d().min(0).max(1).nullable()});m({targets:y(JS),contextMetrics:m({totalAiReferralSessions:d().int().nonnegative(),latestRunId:o(),runTimestamp:o()})});const NM=m({targetRef:o(),addressedUrl:o().nullable(),note:o().nullable(),dismissedAt:o()});m({dismissals:y(NM)});m({targetRef:o().min(1),addressedUrl:o().url().optional(),note:o().max(500).optional()});m({targetRef:o(),promptVersion:o(),provider:o(),model:o(),responseText:o(),costMillicents:d().int().nonnegative(),generatedAt:o()});m({provider:o().optional(),model:o().optional(),forceRefresh:N().optional()});const _M=m({targetQuery:o().trim().min(1),winnabilityClass:L0,angle:o().trim().min(1),whyWinnable:o().trim().min(1),schemaHookup:o().trim().min(1),controllableSurfaceRationale:o().trim().min(1)});m({targetRef:o(),promptVersion:o(),provider:o(),model:o(),brief:_M,costMillicents:d().int().nonnegative(),generatedAt:o()});const TM=m({domain:o(),competitorType:Ud,hits:d().int().nonnegative(),updatedAt:o()});m({classifications:y(TM)});const RM=m({uri:o(),title:o(),domain:o(),isOurDomain:N(),isCompetitor:N(),citationCount:d().int().nonnegative(),providers:y(gt)}),e3=m({query:o(),groundingSources:y(RM)});m({sources:y(e3),latestRunId:o()});const t3=m({query:o(),competitorDomains:y(o()),competitorCount:d().int().nonnegative(),missRate:d().min(0).max(1),lastSeenInRunId:o()});m({gaps:y(t3),latestRunId:o()});const n3=A(["ok","warn","fail","skipped"]);n3.enum;const V0=A(["global","project"]);V0.enum;const a3=A(["auth","config","providers","integrations","database","schedules","agent"]);a3.enum;const EM=m({id:o(),category:a3,scope:V0,title:o(),status:n3,code:o().describe('Stable machine-readable code (e.g. "google.token.refresh-failed"). Use this for filtering and remediation logic.'),summary:o(),remediation:o().nullable().optional().describe('Operator-facing next step. Null when status is "ok" or no specific remediation applies.'),details:Ue(o(),fn()).optional().describe("Structured context — principal email, redirect URI, missing scopes, etc. Stable per check id."),durationMs:d().int().nonnegative().describe("How long the check took to execute.")});m({scope:V0,project:o().nullable().describe('Project name when scope is "project", null otherwise.'),generatedAt:o().describe("ISO-8601 timestamp when this doctor run started."),durationMs:d().int().nonnegative(),summary:m({total:d().int().nonnegative(),ok:d().int().nonnegative(),warn:d().int().nonnegative(),fail:d().int().nonnegative(),skipped:d().int().nonnegative()}),checks:y(EM)});function zM(e){return e.trim().toLowerCase()}const DM=m({provider:o(),citationState:_i,cited:N(),mentioned:N(),runId:o(),runCreatedAt:o()}),OM=m({queryId:o(),query:o(),providers:y(DM),citedCount:d().int().nonnegative(),mentionedCount:d().int().nonnegative(),totalProviders:d().int().nonnegative()}),IM=m({queryId:o(),query:o(),provider:o(),citingCompetitors:y(o()),runId:o(),runCreatedAt:o()}),PM=m({providersConfigured:d().int().nonnegative(),providersCiting:d().int().nonnegative(),providersMentioning:d().int().nonnegative(),totalQueries:d().int().nonnegative(),queriesCitedAndMentioned:d().int().nonnegative(),queriesCitedOnly:d().int().nonnegative(),queriesMentionedOnly:d().int().nonnegative(),queriesInvisible:d().int().nonnegative(),latestRunId:o().nullable(),latestRunAt:o().nullable()});m({summary:PM,byQuery:y(OM),competitorGaps:y(IM),status:A(["ready","no-data"]),reason:A(["no-runs-yet","no-queries"]).optional()});const qM=m({selection:D2,historyWindow:m({from:o().datetime(),to:o().datetime()}).optional(),populations:y(z2.pick({queryClass:!0,summary:!0,trend:!0}))}),Sn={title:"AI visibility",description:"Each answer is counted once for its assigned properties. Branded and non-brand queries are measured separately.",simpleDescription:"Each saved answer is counted once. Branded and non-brand queries are measured separately.",queryType:"Query type",queries:"Queries measured",answers:"Answers measured",mentioned:"Mentioned",cited:"Cited",history:"Measurement history",latestMeasurement:"Latest measurement",allLocations:"All measured locations",noLocation:"No provider location",location:"Location",previousOutsideWindow:"Previous measurement outside this period",date:"Date",comparison:"Comparison",notMeasured:"Not measured",incomplete:"Evidence incomplete",ambiguous:"Property identity unverified",noPopulation:"No measured answers",notApplicable:"Not applicable",comparable:"Comparable",baseline:"Baseline",changed:"Measurement changed",unknownHistory:"Comparison unavailable"};function FY(e){return{branded:"Branded","non-brand":"Non-brand",unknown:"Unclassified"}[e]}function ZY(e){return e.rate===null?Sn.notMeasured:`${Number((e.rate*100).toFixed(1))}%`}function YY(e){if(e.numerator!==null&&e.denominator!==null)return`${e.numerator} of ${e.denominator} answers`;switch(e.reason){case"no-population":return Sn.noPopulation;case"not-applicable":return Sn.notApplicable;case"identity-ambiguous":return Sn.ambiguous;default:return Sn.incomplete}}const XY="No answer could be tied to one property";function WY(e){return e.denominator===null||e.denominator===void 0||e.unattributed===void 0||e.unattributed<=0?null:`${e.unattributed} of ${e.denominator+e.unattributed} answers could not be tied to one property`}function JY(e,n=!1){const i=e==="first"?Sn.baseline:e==="comparable"?Sn.comparable:e==="legacy-unknown"?Sn.unknownHistory:Sn.changed;return n?`${i} · ${Sn.previousOutsideWindow}`:i}function eX(e){const n=e.selection.measurement.completedAt?.slice(0,10)??Sn.notMeasured;return`${Sn.latestMeasurement}: ${n}`}function tX(e){const n=e.historyWindow;return n===void 0?Sn.history:`${Sn.history} (${n.from.slice(0,10)} – ${n.to.slice(0,10)})`}function nX(e){const n=e.selection.location;return n.kind==="all"?Sn.allLocations:n.kind==="none"?Sn.noLocation:`${Sn.location}: ${n.value}`}const aX=[7,14,30,90],iX=30;Ze([z(7),z(14),z(30),z(90)]).describe("Report window in days (7, 14, 30, or 90). Defaults to 30 when omitted.");const MM=A(["prompt","request-param","browser-geo","ignored"]),BM=m({label:o(),city:o(),region:o(),country:o(),otherConfiguredLabels:y(o())}),LM=m({provider:o(),treatment:MM,description:o()}),VM=m({generatedAt:o(),project:m({id:o(),name:o(),displayName:o(),canonicalDomain:o(),country:o(),language:o()}),location:BM.nullable(),providerLocationHandling:y(LM),periodStart:o().nullable(),periodEnd:o().nullable(),periodDays:d().int().positive()}),$M=m({visibilityBasis:A(["legacy-project-queries","frozen-populations"]).optional(),citationRate:d().nullable(),citedQueryCount:d().nullable(),totalQueryCount:d().nullable(),mentionRate:d().nullable(),mentionedQueryCount:d().nullable(),trend:A(["up","down","flat","unknown"]),queryCount:d(),competitorCount:d(),providerCount:d(),gsc:m({clicks:d(),impressions:d(),ctr:d(),avgPosition:d(),periodStart:o(),periodEnd:o()}).nullable(),ga:m({sessions:d(),users:d(),periodStart:o(),periodEnd:o()}).nullable(),findings:y(m({title:o(),detail:o(),tone:A(["positive","caution","negative","neutral"])}))}),UM=m({citationState:A(["cited","not-cited","pending"]),answerMentioned:N().nullable(),model:o().nullable()}),GM=m({queries:y(o()),providers:y(o()),matrix:y(y(UM.nullable())),providerRates:y(m({provider:o(),citedCount:d(),mentionedCount:d(),totalCount:d(),citationRate:d(),mentionRate:d()}))}),KM=m({domain:o(),citationCount:d(),totalCount:d(),pressureLabel:A(["High","Moderate","Low","None"]),citedQueries:y(o()),sharePct:d(),theirCitedPages:y(m({url:o(),citedFor:y(o())}))}),HM=m({projectCitationCount:d(),competitors:y(KM)}),QM=m({domain:o(),mentionCount:d(),totalCount:d(),pressureLabel:A(["High","Moderate","Low","None"]),mentionedQueries:y(o()),sharePct:d().nullable()}),zh=m({shareOfVoice:HS.optional(),projectMentionCount:d(),totalAnswerSnapshots:d(),competitors:y(QM)}),FM=zh.extend({scope:A(["non-brand","pooled"]),nonBrand:zh,branded:zh}),ZM=m({category:o(),label:o(),count:d(),sharePct:d()}),YM=m({categories:y(ZM),topDomains:y(m({domain:o(),count:d(),isCompetitor:N()}))}),XM=m({query:o(),clicks:d(),impressions:d(),ctr:d(),avgPosition:d(),category:A(["brand","lead-gen","industry","other"])}),WM=m({periodStart:o(),periodEnd:o(),totalClicks:d(),totalImpressions:d(),ctr:d(),avgPosition:d(),topQueries:y(XM),categoryBreakdown:y(m({category:A(["brand","lead-gen","industry","other"]),clicks:d(),impressions:d(),sharePct:d()})),trend:y(m({date:o(),clicks:d(),impressions:d()})),trackedButNoGsc:y(o()),gscButNotTracked:y(o())}),JM=m({totalSessions:d(),totalUsers:d(),totalOrganicSessions:d(),periodStart:o(),periodEnd:o(),topLandingPages:y(m({page:o(),sessions:d(),users:d().optional(),organicSessions:d()})),channelBreakdown:y(m({channel:o(),sessions:d(),sharePct:d()}))}),eB=m({totalSessions:d(),organicSessions:d(),paidSessions:d(),channels:y(m({channelGroup:o(),sessions:d(),sharePct:d()})),topCampaigns:y(m({source:o(),medium:o(),sessions:d()}))}),tB=m({totalSessions:d(),paidSessions:d(),organicSessions:d(),totalUsers:d().optional(),paidUsers:d().optional(),organicUsers:d().optional(),bySource:y(m({source:o(),sessions:d(),users:d().optional(),paidSessions:d(),organicSessions:d(),sharePct:d()})),trend:y(m({date:o(),sessions:d()})),topLandingPages:y(m({page:o(),sessions:d(),users:d().optional()}))}),nB=m({windowStart:o(),windowEnd:o(),hasData:N(),verifiedCrawlerHits:m({current:d(),prior:d(),deltaPct:d().nullable()}),unverifiedCrawlerHits:m({current:d(),prior:d(),deltaPct:d().nullable()}),aiUserFetchHits:m({current:d(),prior:d(),deltaPct:d().nullable()}),referralArrivals:m({current:d(),prior:d(),deltaPct:d().nullable()}),referralRedirects:d().int().nonnegative(),referralArrivalsByClass:m({paid:m({current:d(),prior:d(),deltaPct:d().nullable()}),organic:m({current:d(),prior:d(),deltaPct:d().nullable()}),unclassified:m({current:d(),prior:d(),deltaPct:d().nullable()})}),referralArrivalsClassSummary:o(),byOperator:y(m({operator:o(),verifiedHits:d(),unverifiedHits:d(),userFetchHits:d(),referralArrivals:d(),deltaPct:d().nullable()})),topCrawledPaths:y(m({path:o(),verifiedHits:d(),unverifiedHits:d().default(0),distinctOperators:d()})),referralProducts:y(m({product:o(),arrivals:d(),distinctLandingPaths:d()})),dailyTrend:y(m({date:o(),verifiedCrawlerHits:d(),unverifiedCrawlerHits:d().default(0),userFetchHits:d(),referralArrivals:d()})),topReferralLandingPaths:y(m({path:o(),arrivals:d(),distinctProducts:d()}))}),aB=m({provider:A(["google","bing"]).nullable(),total:d(),indexed:d(),notIndexed:d(),deindexed:d(),unknown:d(),indexedPct:d()}),iB=m({runId:o(),date:o(),citationRate:d(),citedQueryCount:d(),totalQueryCount:d(),mentionRate:d(),mentionedQueryCount:d(),providerRates:y(m({provider:o(),citationRate:d(),mentionRate:d()}))}),i3=A(["regression","gain","opportunity"]),sB=i3.enum,hf=m({id:o(),type:i3,severity:A(["critical","high","medium","low"]),title:o(),query:o(),provider:o(),recommendation:o().nullable(),createdAt:o(),instanceCount:d()}),oB=m({horizon:A(["immediate","short-term","medium-term"]),title:o(),rationale:o()}),rr=m({current:d(),prior:d(),deltaAbs:d(),deltaPct:d().nullable(),direction:A(["up","down","flat"]),window:d().optional()}),rB=m({provider:o(),current:d(),prior:d(),deltaAbs:d(),direction:A(["up","down","flat"])}),lB=m({enoughHistory:N(),headline:o(),citationRate:rr.nullable(),mentionRate:rr.nullable(),citedQueryCount:rr.nullable(),mentionedQueryCount:rr.nullable(),gscClicksDelta:rr.nullable(),aiReferralsDelta:rr.nullable(),comparisonWindowDays:d().int().positive(),providerMovements:y(rB),wins:y(hf),regressions:y(hf)}),cB=A(["agency","client"]),s3=A(["agency","client","both"]),uB=A(["immediate","short-term","medium-term"]),dB=A(["high","medium","low"]);A(["positive","caution","negative","neutral"]);const mB=A(["content","competitors","provider","search-demand","indexing","location","monitoring"]),$0=m({audience:s3,priority:d(),horizon:uB,category:mB,title:o(),action:o(),why:y(o()),evidence:y(o()),successMetric:o(),confidence:dB,targetRef:o().optional()}),pB=m({headline:o(),overview:o(),actionItems:y($0),confidenceNotes:y(o())}),hB=m({title:o(),detail:o(),severity:A(["positive","caution","negative","neutral"]),evidence:y(o())}),fB=m({priorities:y($0),diagnostics:y(hB)});function sX(e){return e.horizon==="immediate"?"negative":e.confidence==="high"?"caution":e.confidence==="low"?"neutral":"caution"}function oX(e){return e==="High"?"negative":e==="Moderate"?"caution":e==="Low"?"positive":"neutral"}function gB(e){switch(e){case"critical":return"negative";case"high":return"negative";case"medium":return"caution";case"low":return"neutral"}}function rX(e){return e.type===sB.gain?"positive":gB(e.severity)}function lX(e){switch(e){case Zu.competitor:return"negative";case Zu.directory:case Zu.forum:return"caution";default:return"neutral"}}function cX(e){switch(e){case"critical":return"Critical";case"high":return"High";case"medium":return"Medium";case"low":return"Low"}}function yB(e){switch(e){case"immediate":return"Immediate";case"short-term":return"Short term";case"medium-term":return"Medium term"}}function uX(e){switch(e){case"content":return"Content";case"competitors":return"Competitors";case"provider":return"Provider";case"search-demand":return"Search demand";case"indexing":return"Indexing";case"location":return"Location";case"monitoring":return"Monitoring"}}function bB(e){switch(e){case"high":return"High";case"medium":return"Medium";case"low":return"Low"}}m({visibility:qM.optional(),meta:VM,executiveSummary:$M,citationScorecard:GM,competitorLandscape:HM,mentionLandscape:FM,aiSourceOrigin:YM,gsc:WM.nullable(),ga:JM.nullable(),socialReferrals:eB.nullable(),aiReferrals:tB.nullable(),serverActivity:nB.nullable(),indexingHealth:aB.nullable(),citationsTrend:y(iB),whatsChanged:lB,insights:y(hf),recommendedNextSteps:y(oB),actionPlan:y($0),clientSummary:pB,agencyDiagnostics:fB,contentOpportunities:y(JS),contentGaps:y(t3),groundingSources:y(e3)});const vB=Ze([z(60),z(90)]),xB=A(["earliest","middle","prior","latest"]),cr=m({clicks:d().int().nonnegative(),impressions:d().int().nonnegative()}),o3=m({name:xB,startDate:o(),endDate:o()}),wB=o3.extend({totals:cr}),kB=o3.extend({organicSessions:d().int().nonnegative()}),Dh=m({startDate:o(),endDate:o(),observedDays:d().int().nonnegative()}),Mu=m({verified:d().int().nonnegative(),claimedUnverified:d().int().nonnegative(),unknownAiLike:d().int().nonnegative()}),_x=m({total:d().int().nonnegative(),paid:d().int().nonnegative(),organic:d().int().nonnegative(),unknown:d().int().nonnegative()});m({contractVersion:z("organic-evidence/v1"),periodDays:vB,asOfDate:o().nullable(),coverage:m({gsc:N(),ga4:N(),server:N(),visibility:N()}),sourceCoverage:m({gsc:Dh.nullable(),ga4:Dh.nullable(),server:Dh.nullable(),visibility:m({completedAt:o(),ageDays:d().nonnegative()}).nullable()}),gsc:m({propertyTotals:cr,namedBrand:cr,namedNonBrand:cr,suppressedOrUnreportedResidual:cr,cohorts:y(wB)}).nullable(),ga4:m({organicSessions:d().int().nonnegative(),cohorts:y(kB)}).nullable(),gaAiReferrals:m({paidSessions:d().int().nonnegative(),organicSessions:d().int().nonnegative()}).nullable(),server:m({crawlerHits:Mu,userFetchHits:Mu,referralSessions:_x}).nullable(),visibility:m({runId:o(),completedAt:o(),ageDays:d().nonnegative(),answerPairs:d().int().nonnegative(),mentionedPairs:d().int().nonnegative(),citedPairs:d().int().nonnegative()}).nullable(),measurement:gE,pages:y(m({path:o(),gsc:cr,ga4OrganicSessions:d().int().nonnegative(),server:m({crawlerHits:Mu,userFetchHits:Mu,referralSessions:_x})})),findings:y(m({tone:A(["positive","caution","neutral"]),title:o(),detail:o()})),limitations:y(m({code:o(),detail:o()}))});const SB=new Set(["a","an","and","for","from","in","near","of","on","or","the","to"]);function r3(e){return e.toLowerCase().match(/[a-z0-9]+/g)??[]}function l3(e){return e.length>4&&e.endsWith("ies")?`${e.slice(0,-3)}y`:e.length>4&&e.endsWith("s")&&!e.endsWith("ss")?e.slice(0,-1):e}function c3(e){const n=e.meta.location;return n?new Set([n.label,n.city,n.region,n.country].flatMap(r3).map(l3).filter(Boolean)):new Set}function u3(e,n){const i=r3(e).map(l3).filter(Boolean).filter(r=>!SB.has(r)).filter(r=>!n.has(r));return[...new Set(i)].sort().join(" ")}function jB(e){return e.title.match(/"([^"]+)"/)?.[1]??e.successMetric.match(/"([^"]+)"/)?.[1]??e.title}function d3(e,n){const i=c3(e);if(n.length<=1||i.size===0)return[...n];const r=new Set,u=[];for(const h of n){if(h.category!=="content"){u.push(h);continue}const g=u3(jB(h),i);!g||r.has(g)||(r.add(g),u.push(h))}return u}function AB(e){const n=c3(e),i=e.contentOpportunities;if(i.length<=1||n.size===0)return i;const r=new Set;return i.filter(u=>{const h=u3(u.query,n);return!h||r.has(h)?!1:(r.add(h),!0)})}const CB=A(["claude","codex"]);CB.enum;const NB=A(["claude","codex","all"]);NB.enum;const m3=m({content:d().int().nonnegative(),sitemap:d().int().nonnegative(),robots:d().int().nonnegative(),asset:d().int().nonnegative(),other:d().int().nonnegative()}),_B=A(["content","sitemap","robots","asset","other"]),U0=A(["cloud-run","wordpress","cloudflare","vercel","generic-log"]);U0.enum;const TB=A(["raw-request-events","aggregate-request-metrics","request-url","status-code","user-agent","remote-ip","referer","cursor-pull"]);TB.enum;const RB=A(["raw-request","aggregate-bucket"]),EB=RB.enum,zB=A(["observed","provider-aggregated","inferred"]),DB=zB.enum,OB=m({type:o().nullable(),labels:Ue(o(),o())}),IB=m({sourceType:U0,evidenceKind:z(EB["raw-request"]),confidence:z(DB.observed),eventId:o().min(1),observedAt:o().min(1),method:o().nullable(),requestUrl:o().nullable(),host:o().nullable(),path:o().min(1),queryString:o().nullable(),status:d().int().nullable(),userAgent:o().nullable(),remoteIp:o().nullable(),referer:o().nullable(),latencyMs:d().nullable(),requestSizeBytes:d().int().nullable(),responseSizeBytes:d().int().nullable(),providerResource:OB,providerLabels:Ue(o(),o())});m({events:y(IB),rawEntryCount:d().int().nonnegative(),skippedEntryCount:d().int().nonnegative(),nextPageToken:o().optional(),filter:o()});const p3=A(["connected","paused","error","archived"]),dX=p3.enum,h3=A(["oauth","service-account"]);h3.enum;const PB=A(["verified","claimed_unverified","unknown_ai_like"]),mX=PB.enum,qB=m({id:o().min(1),source:o().min(1),version:o().min(1)}),f3=m({manifestId:o().min(1),manifest:qB.nullable(),hits:d().int().nonnegative()});m({gcpProjectId:o().min(1),serviceName:o().nullable().optional(),location:o().nullable().optional(),authMode:h3});m({baseUrl:o().url(),username:o().min(1)});const G0=A(["production","preview"]);G0.enum;m({projectId:o().min(1),teamId:o().min(1),environment:G0});const g3=m({id:o(),projectId:o(),sourceType:U0,displayName:o(),status:p3,lastSyncedAt:o().nullable(),lastCursor:o().nullable(),lastError:o().nullable(),skippedThroughAt:o().nullable(),queueBacklogCount:d().int().nonnegative().nullable(),queueBacklogObservedAt:o().nullable(),archivedAt:o().nullable(),config:Ue(o(),fn()),createdAt:o(),updatedAt:o()});m({gcpProjectId:o().min(1),serviceName:o().min(1).optional(),location:o().min(1).optional(),displayName:o().min(1).optional(),keyJson:o().optional()});m({baseUrl:o().url(),username:o().min(1),applicationPassword:o().min(1),displayName:o().min(1).optional()});m({projectId:o().min(1),teamId:o().min(1),token:o().min(1),environment:G0.optional(),displayName:o().min(1).optional()});const MB=A(["direct-push","queue-pull"]),Ir=MB.enum,K0=o().regex(/^(?=.{1,63}$)[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,"Cloudflare Queue name must be 1-63 characters, use only letters, numbers, or dashes, and start and end with a letter or number"),y3=m({schemaVersion:z(1),workerVersion:o().min(1),expectedBotListVersion:o().min(1),zoneId:o().nullable()}),BB=y3.extend({deliveryMode:z(Ir["direct-push"]),accountId:o().nullable()}),LB=y3.extend({deliveryMode:z(Ir["queue-pull"]),accountId:o().min(1),queueId:o().min(1),queueName:K0,retentionSeconds:d().int().min(60).max(1209600)});function b3(e){if(typeof e!="object"||e===null||Array.isArray(e))return e;const n=e;return"deliveryMode"in n?e:{...n,deliveryMode:"direct-push"}}Hf(b3,qe("deliveryMode",[BB,LB]));const v3=m({displayName:o().min(1).optional(),zoneId:o().min(1).optional()}),VB=v3.extend({deliveryMode:z(Ir["direct-push"]),accountId:o().min(1).optional()}),$B=v3.extend({deliveryMode:z(Ir["queue-pull"]),accountId:o().min(1),queueId:o().min(1),queueName:K0,retentionSeconds:d().int().min(60).max(1209600),apiToken:o().min(1)});Hf(b3,qe("deliveryMode",[VB,$B]));const x3=m({sourceId:o().min(1),workerScript:o().min(1),wranglerToml:o().min(1),workerVersion:o().min(1),instructions:o().min(1)}),UB=x3.extend({deliveryMode:z(Ir["direct-push"]),activationRequired:N().default(!1)}),GB=x3.extend({deliveryMode:z(Ir["queue-pull"]),activationRequired:N().default(!1),accountId:o().min(1),queueId:o().min(1),queueName:K0,retentionSeconds:d().int().min(60).max(1209600)});qe("deliveryMode",[UB,GB]);const KB=m({eventId:o().min(1),observedAt:o().datetime(),method:o().nullable(),host:o().nullable(),path:o().min(1),queryString:o().nullable(),status:d().int().nullable(),userAgent:o().nullable(),remoteIp:o().nullable(),referer:o().nullable(),cf:m({verifiedBot:N().nullable(),botScore:d().int().nullable(),country:o().nullable(),asn:d().int().nullable(),asOrganization:o().nullable()}).nullable()});m({schemaVersion:z(1),workerVersion:o().min(1),events:y(KB).min(1).max(100)});m({acceptedEvents:d().int(),droppedEvents:d().int(),workerVersionAck:o(),crawlerBucketRows:d().int(),aiUserFetchBucketRows:d().int(),aiReferralBucketRows:d().int(),sampleRows:d().int()});m({sourceId:o(),runId:o(),syncedAt:o(),pulledEvents:d().int().nonnegative(),selfTrafficExcluded:d().int().nonnegative(),crawlerHits:d().int().nonnegative(),aiUserFetchHits:d().int().nonnegative(),aiReferralHits:d().int().nonnegative(),unknownHits:d().int().nonnegative(),crawlerBucketRows:d().int().nonnegative(),aiUserFetchBucketRows:d().int().nonnegative(),aiReferralBucketRows:d().int().nonnegative(),sampleRows:d().int().nonnegative(),remainingBacklogCount:d().int().nonnegative().optional(),windowStart:o(),windowEnd:o()});m({days:d().int().positive().optional()});m({advanceToNow:z(!0)});m({sourceId:o(),runId:o(),status:sa,windowStart:o(),windowEnd:o(),daysRequested:d().int().positive(),daysApplied:d().int().positive()});const HB=m({crawlerHits:d().int().nonnegative(),crawlerContentHits:d().int().nonnegative(),crawlerInfraHits:d().int().nonnegative(),crawlerSegments:m3,aiUserFetchHits:d().int().nonnegative(),aiReferralHits:d().int().nonnegative(),aiReferralLandedHits:d().int().nonnegative(),aiReferralRedirectedHits:d().int().nonnegative(),sampleCount:d().int().nonnegative()});m({sources:y(g3)});const QB=g3.extend({totals24h:HB,latestRun:m({runId:o(),status:sa,startedAt:o().nullable(),finishedAt:o().nullable(),error:o().nullable()}).nullable()});m({sources:y(QB)});const FB=A(["crawler","ai-user-fetch","ai-referral"]),H0=FB.enum,w3=A(["hour","day"]);w3.enum;const ZB=m({bucket:o(),crawlerHits:d().int().nonnegative(),aiUserFetchHits:d().int().nonnegative(),aiReferralHits:d().int().nonnegative(),aiReferralLandedHits:d().int().nonnegative(),crawlerContentHits:d().int().nonnegative(),measured:N()}),YB=m({kind:z(H0.crawler),sourceId:o(),tsHour:o(),botId:o(),operator:o(),verificationStatus:o(),verificationManifests:y(f3).optional(),verificationUnattributedHits:d().int().nonnegative().optional(),pathNormalized:o(),pathClass:_B,status:d().int(),hits:d().int().nonnegative()}),XB=m({kind:z(H0["ai-user-fetch"]),sourceId:o(),tsHour:o(),botId:o(),operator:o(),verificationStatus:o(),verificationManifests:y(f3).optional(),verificationUnattributedHits:d().int().nonnegative().optional(),pathNormalized:o(),status:d().int(),hits:d().int().nonnegative()}),WB=m({kind:z(H0["ai-referral"]),sourceId:o(),tsHour:o(),product:o(),operator:o(),sourceDomain:o(),evidenceType:o(),landingPathNormalized:o(),status:d().int(),hits:d().int().nonnegative(),paidHits:d().int().nonnegative(),organicHits:d().int().nonnegative(),unknownHits:d().int().nonnegative()}),JB=qe("kind",[YB,XB,WB]);m({windowStart:o(),windowEnd:o(),series:m({granularity:w3,points:y(ZB),coverageStart:o().nullable(),trends:m({crawlerContentHits:so.nullable(),aiUserFetchHits:so.nullable(),aiReferralLandedHits:so.nullable()})}),totals:m({crawlerHits:d().int().nonnegative(),crawlerContentHits:d().int().nonnegative(),crawlerInfraHits:d().int().nonnegative(),crawlerSegments:m3,aiUserFetchHits:d().int().nonnegative(),aiReferralHits:d().int().nonnegative(),aiReferralLandedHits:d().int().nonnegative(),aiReferralRedirectedHits:d().int().nonnegative(),aiReferralPaidHits:d().int().nonnegative(),aiReferralOrganicHits:d().int().nonnegative(),aiReferralUnknownHits:d().int().nonnegative()}),eventRows:m({total:d().int().nonnegative(),returned:d().int().nonnegative(),truncated:N()}),events:y(JB)});const Q0=A(["admin","viewer"]),eL=/^[a-z\d][\w.-]{0,63}$/i,tL=o().regex(eL,"A name may use letters, digits, dots, dashes and underscores, and must start with a letter or digit."),Tx=12,nL=o().min(Tx,`A password must be at least ${Tx} characters.`),k3=m({id:o(),name:o(),role:Q0,createdAt:o(),lastLoginAt:o().nullable()});m({users:y(k3)});m({name:tL,password:nL,role:Q0});m({name:o().min(1),password:o().min(1)});m({authRequired:N(),user:k3.pick({name:!0,role:!0}).nullable()});const S3=A(["queued","running","completed","partial","failed"]),pX=S3.enum,j3=A(["queued","running","completed","failed"]),hX=j3.enum,aL=20,iL=20,ff=50,A3=m({kind:A(["market","property"]),key:he,expectedPlanRevision:d().int().positive().optional()}).strict(),sL=m({kind:A(["market","property"]),key:he,label:o().trim().min(1),planRevision:d().int().positive()}).strict(),C3=o().min(1).max(4e3).refine(e=>e.trim().length>0,"Research queries cannot be blank.");function fX(e){const n=new Set;return e.filter(i=>{const r=zM(i);return!r||n.has(r)?!1:(n.add(r),!0)})}function oL(e,n){const i=e?e.kind==="market"?{market:e.label,submarket:e.label}:{property:e.label,propertyBrand:e.label}:{};return n?{...i,location:n.label}:i}function gX(e,n,i){const r=new Set(e.variables),u=[...e.pattern.matchAll(/\{([^{}]+)\}/g)].map(w=>w[1]),h=[...new Set(u.filter(w=>!r.has(w)))];if(h.length)throw kv("The selected research template contains undeclared placeholders: "+h.join(", "));const g=oL(n,i),b=e.variables.filter(w=>g[w]===void 0);if(b.length)throw kv("The selected research template requires unavailable bindings: "+b.join(", "));const v=Object.fromEntries(e.variables.map(w=>[w,g[w]]));return{bindings:v,output:ED(e.pattern,v)}}const N3=m({templateId:o().trim().min(1).max(256),templateVersion:o().trim().min(1).max(256),bindingLocation:cn.nullable().optional()}).strict();m({queries:y(C3).min(1).max(50),provider:o().trim().min(1).optional(),model:o().trim().min(1).max(200).optional(),location:cn.nullable().optional(),scope:A3.optional(),template:N3.optional(),idempotencyKey:o().trim().min(1).max(128).optional()}).superRefine((e,n)=>{e.model&&!e.provider&&n.addIssue({code:ve.custom,path:["provider"],message:"provider is required when model is supplied"})});const rL=A3.extend({expectedPlanRevision:d().int().positive()}).strict(),lL=m({queries:y(C3).min(1).max(ff),provider:o().trim().min(1),model:o().trim().min(1).max(200),location:cn.nullable(),scope:rL.optional(),template:N3.optional()}).strict();m({idempotencyKey:o().trim().min(1).max(128),runs:y(lL).min(1).max(iL)}).strict().superRefine((e,n)=>{e.runs.reduce((r,u)=>r+u.queries.length,0)>ff&&n.addIssue({code:ve.custom,path:["runs"],message:`A research batch may contain at most ${ff} concrete queries across all destinations`})});const cL=m({kind:A(["api-key","user"]),id:o(),name:o(),role:Q0.nullable(),limited:N().optional()}),_3=m({id:o(),projectId:o(),status:S3,provider:o(),requestedModel:o().nullable(),resolvedModel:o(),location:cn.nullable(),scope:sL.nullable().optional(),template:P2.nullable().optional(),totalQueries:d().int(),completedQueries:d().int(),failedQueries:d().int(),error:o().nullable(),initiatedBy:cL.nullable(),startedAt:o().nullable(),finishedAt:o().nullable(),createdAt:o()}),uL=m({id:o(),position:d().int(),query:o(),queryClass:_r.nullable().optional(),status:j3,requestedModel:o().nullable(),resolvedModel:o(),servedModel:o().nullable(),answerText:o().nullable(),groundingSources:y(Bd),citedDomains:y(o()),searchQueries:y(o()),namedCompetitors:y(o()).default([]),citedCompetitorDomains:y(o()).default([]),answerMentioned:N().nullable(),citationState:_i.nullable(),error:o().nullable(),startedAt:o().nullable(),finishedAt:o().nullable(),createdAt:o()}),dL=_3.extend({queries:y(uL)});m({runs:y(dL)});const mL=m({name:o(),displayName:o(),modelConfigurable:N(),defaultModel:o(),knownModels:y(m({id:o(),displayName:o()}))});m({runs:y(_3),nextCursor:o().nullable().optional(),providers:y(mL).optional(),access:m({canRun:N(),dailyRunLimit:d().int().positive().nullable()}).optional()});m({apiKey:o().min(1)});m({id:o(),name:o(),status:o(),currencyCode:o().nullable(),timezone:o().nullable(),url:o().nullable(),reviewStatus:o().nullable(),integrityReviewStatus:o().nullable(),integrityDecision:o().nullable()});m({q:o().trim().min(1).max(200),limit:d().int().min(1).max(100).default(20)});const pL=m({id:o(),type:o(),canonicalName:o(),countryCode:o(),name:o(),regionCode:o().nullable()});m({count:d().int().nonnegative(),query:o(),results:y(pL)});const hL=m({id:o(),clientType:o().optional(),name:o().optional(),pixelId:o().optional()});m({pixels:y(hL)});const fL=m({id:o(),name:o().optional()}),gL=m({id:o(),name:o().optional(),eventType:o().optional(),customEventName:o().nullable().optional(),attributionWindowDays:d().int().positive().optional(),adAccountId:o().optional(),sourceIds:y(o()).optional(),sources:y(fL).optional(),archived:N().optional(),version:d().int().nonnegative().optional()});m({eventSettings:y(gL)});m({connected:N(),adAccountId:o().nullable().optional(),displayName:o().nullable().optional(),currencyCode:o().nullable().optional(),timezone:o().nullable().optional(),status:o().nullable().optional(),reviewStatus:o().nullable().optional(),integrityReviewStatus:o().nullable().optional(),integrityDecision:o().nullable().optional(),lastSyncedAt:o().nullable().optional(),conversionTrackingConfigured:N().optional()});m({disconnected:N()});m({runId:o(),status:o()});const yL=["campaign_id","ad_group_id","ad_id","ad_account_id","oppref"],bL=/^[\w.-]+=[^&#\s]*$/,vL=/\{([^}]*)\}/g,fo=o().min(1).max(1e3).superRefine((e,n)=>{const i=u=>n.addIssue({code:"custom",message:u});if(e.startsWith("?")||e.startsWith("&")){i("Tracking template must not start with ? or &");return}const r=new Set;for(const u of e.split("&")){if(!bL.test(u)){i(`Tracking template pair '${u}' must be key=value without whitespace, # or &`);return}const h=u.slice(0,u.indexOf("="));if(r.has(h)){i(`Tracking template repeats the parameter '${h}'`);return}r.add(h)}for(const u of e.matchAll(vL)){const h=u[1];if(!yL.includes(h)){i(`Tracking template macro '{${h}}' is not supported`);return}}}),xL=m({type:o().nullable().optional(),title:o().nullable().optional(),body:o().nullable().optional(),targetUrl:o().nullable().optional(),fileId:o().nullable().optional()}),mc=A(["impressions","clicks"]);mc.enum;const pc=A(["impression","click"]);pc.enum;const wL=m({id:o(),adGroupId:o(),name:o(),status:o(),reviewStatus:o().nullable().optional(),creative:xL.nullable().optional(),landingPageQueryStringTemplate:o().nullable().optional(),upstreamUpdatedAt:d().int().nullable().optional(),syncedAt:o().optional()}),kL=m({id:o(),campaignId:o(),name:o(),description:o().nullable().optional(),status:o(),billingEventType:Ze([pc,de()]).optional(),maxBidMicros:d().int().nullable().optional(),contextHints:y(o()).default([]),ads:y(wL).default([]),landingPageQueryStringTemplate:o().nullable().optional(),upstreamUpdatedAt:d().int().nullable().optional(),syncedAt:o().optional()}),SL=m({id:o(),name:o(),description:o().nullable().optional(),status:o(),startTime:d().int().nullable().optional(),endTime:d().int().nullable().optional(),biddingType:Ze([mc,de()]).optional(),dailySpendLimitMicros:d().int().nullable().optional(),lifetimeSpendLimitMicros:d().int().nullable().optional(),conversionEventSettingIds:y(o()).default([]),locationIds:y(o()).optional(),adGroups:y(kL).default([]),landingPageQueryStringTemplate:o().nullable().optional(),upstreamUpdatedAt:d().int().nullable().optional(),syncedAt:o().optional()});m({campaigns:y(SL)});const T3=A(["campaign","ad_group"]);T3.enum;const jL=m({level:T3,entityId:o(),date:o(),impressions:d().int(),clicks:d().int(),spendMicros:d().int(),conversions:d().int(),ctr:d().nullable(),cpcMicros:d().int().nullable(),inProgress:N()});m({rows:y(jL),currencyCode:o().nullable().optional()});const R3=m({from:o().nullable(),to:o().nullable(),inProgressDate:o().nullable()}),E3=m({impressions:d().int(),clicks:d().int(),spendMicros:d().int(),conversions:d().int(),ctr:d().nullable(),cpcMicros:d().int().nullable()});m({connected:N(),displayName:o().nullable().optional(),currencyCode:o().nullable().optional(),lastSyncedAt:o().nullable().optional(),campaignCount:d().int(),adGroupCount:d().int(),adCount:d().int(),window:R3,totals:E3});const z3=A(["unavailable","partial","complete"]);z3.enum;const D3=A(["no_ads_connection","connection_not_synced","no_ads_sync","entity_rows_missing_sync_run_id","entity_rows_span_multiple_sync_runs","source_sync_missing","source_sync_not_ads_sync","source_sync_not_completed"]);D3.enum;const O3=A(["unavailable","reported"]);O3.enum;const AL={storedSnapshot:"stored_ads_snapshot"},I3=A(["unavailable","partial_snapshot","metrics_unavailable","observed_activity","no_observed_activity"]);I3.enum;const CL=m({id:o(),name:o(),status:o(),reviewStatus:o().nullable()}),NL=m({id:o(),name:o(),status:o(),billingEventType:Ze([pc,de()]),maxBidMicros:d().int().nullable(),contextHints:y(o()),ads:y(CL)}),_L=m({id:o(),name:o(),status:o(),biddingType:Ze([mc,de()]),dailySpendLimitMicros:d().int().nullable(),lifetimeSpendLimitMicros:d().int().nullable(),conversionEventSettingIds:y(o()),adGroups:y(NL)});m({snapshot:m({status:z3,issue:Ze([D3,de()]),lastSyncedAt:o().nullable(),campaignCount:d().int().nonnegative(),adGroupCount:d().int().nonnegative(),adCount:d().int().nonnegative(),sourceSync:m({runId:o(),status:sa}).nullable()}),historicalCampaignRollups:m({status:O3,window:R3,totals:E3.nullable()}),storedConfiguration:m({basis:z(AL.storedSnapshot),connection:m({status:o().nullable(),reviewStatus:o().nullable(),integrityReviewStatus:o().nullable(),integrityDecision:o().nullable(),conversionTrackingConfigured:N()}).nullable(),campaigns:y(_L)}),assessment:m({state:I3})});const ti=o().min(8).max(128).regex(/^[\w.:-]+$/,"operationKey may contain letters, numbers, dot, underscore, colon, and hyphen"),It=o().min(1).max(200),go=o().min(3).max(1e3).refine(e=>e.trim().length>0),kr=d().int().min(946684800).max(4102444800),Sr=d().int().positive().max(Number.MAX_SAFE_INTEGER),F0=o().regex(/^[a-f0-9]{64}$/),P3=y(It).max(100).refine(e=>new Set(e).size===e.length,"conversionEventSettingIds must be unique"),q3=o().url().refine(e=>new URL(e).protocol==="https:",{message:"URL must use https"}),M3=A(["image_upload","campaign_create","campaign_update","campaign_pause","campaign_archive","campaign_tree_activate","ad_group_create","ad_group_update","ad_group_pause","ad_group_archive","ad_create","ad_update","ad_pause","ad_archive"]);M3.enum;const B3=A(["pending","reconciling","succeeded","failed","unknown"]),hr=B3.enum,L3=A(["known_entity","create_fingerprint","manual_only"]);L3.enum;const V3=A([hr.pending,hr.unknown,hr.reconciling]);V3.enum;const $3=A(["active","paused","archived"]);$3.enum;const U3=A(["file","campaign","ad_group","ad"]);U3.enum;const G3=A(["campaign","ad_group","ad"]);G3.enum;const Z0=m({id:It,expectedUpdatedAt:d().int().nonnegative()}).strict(),TL=Z0,md=1e3;function RL(e){return 1+e.campaign.adGroups.reduce((n,i)=>n+1+i.ads.length,0)}const EL=Z0.extend({ads:y(TL).min(1).max(md-1)}).strict(),zL=Z0.extend({adGroups:y(EL).min(1).max(md-1)}).strict();function DL(e,n){return e<n?-1:e>n?1:0}function Rx(e,n,i){for(let r=1;r<e.length;r+=1)if(DL(e[r-1].id,e[r].id)>=0){i.addIssue({code:"custom",path:n,message:"Activation manifest entities must be uniquely sorted by id"});return}}const K3=m({campaign:zL}).strict().superRefine((e,n)=>{RL(e)>md&&n.addIssue({code:"custom",path:["campaign"],message:`Activation manifests may contain at most ${md} entities`}),Rx(e.campaign.adGroups,["campaign","adGroups"],n);const r=new Set;for(let u=0;u<e.campaign.adGroups.length;u+=1){const h=e.campaign.adGroups[u];Rx(h.ads,["campaign","adGroups",u,"ads"],n);for(let g=0;g<h.ads.length;g+=1){const b=h.ads[g];r.has(b.id)&&n.addIssue({code:"custom",path:["campaign","adGroups",u,"ads",g,"id"],message:"An ad may appear only once in an activation manifest"}),r.add(b.id)}}}),H3=F0,OL=A(["approved","executing","consumed","revoked","expired","unknown"]),Ci=OL.enum,IL=A(["pending","executing","active","failed","rollback_executing","rolled_back","rollback_failed","unknown"]),ws=IL.enum,PL=m({name:go.optional(),description:o().max(4e3).nullable().optional(),status:$3.optional(),startTime:kr.nullable().optional(),endTime:kr.nullable().optional(),lifetimeSpendLimitMicros:Sr.min(1e6).optional(),locationIds:y(It).max(100).optional(),biddingType:mc.optional(),conversionEventSettingIds:P3.optional(),campaignId:It.optional(),contextHints:y(o().min(1).max(1e3)).max(100).optional(),maxBidMicros:Sr.max(1e8).optional(),billingEventType:pc.optional(),adGroupId:It.optional(),creativeFingerprint:F0.optional(),landingPageQueryStringTemplate:fo.nullable().optional()}).strict();m({operationKey:ti,imageUrl:q3});m({operationKey:ti,name:go,description:o().max(4e3).optional(),startTime:kr.optional(),endTime:kr.optional(),lifetimeSpendLimitMicros:Sr.min(1e6),locationIds:y(It).min(1).max(100),biddingType:mc.optional(),conversionEventSettingIds:P3.optional(),landingPageQueryStringTemplate:fo.optional()}).superRefine((e,n)=>{e.startTime!==void 0&&e.endTime!==void 0&&e.endTime<=e.startTime&&n.addIssue({code:"custom",path:["endTime"],message:"endTime must be after startTime"})});m({operationKey:ti,campaignId:It,name:go,description:o().max(4e3).optional(),contextHints:y(o().min(1).max(1e3)).min(1).max(100),maxBidMicros:Sr.max(1e8),billingEventType:pc.optional(),landingPageQueryStringTemplate:fo.optional()});const Q3=m({title:o().min(3).max(50),body:o().min(1).max(100),targetUrl:q3,fileId:It});m({operationKey:ti,adGroupId:It,name:go,creative:Q3,landingPageQueryStringTemplate:fo.optional()});function Y0(e){return Object.keys(e).some(n=>n!=="operationKey"&&n!=="expectedUpdatedAt")}m({operationKey:ti,expectedUpdatedAt:d().int().nonnegative(),name:go.optional(),description:o().max(4e3).nullable().optional(),startTime:kr.nullable().optional(),endTime:kr.nullable().optional(),lifetimeSpendLimitMicros:Sr.min(1e6).optional(),locationIds:y(It).min(1).max(100).optional(),landingPageQueryStringTemplate:fo.nullable().optional()}).refine(Y0,{message:"At least one campaign field must be updated"});m({operationKey:ti,expectedUpdatedAt:d().int().nonnegative(),name:go.optional(),description:o().max(4e3).nullable().optional(),contextHints:y(o().min(1).max(1e3)).min(1).max(100).optional(),maxBidMicros:Sr.max(1e8).optional(),landingPageQueryStringTemplate:fo.nullable().optional()}).refine(Y0,{message:"At least one ad group field must be updated"});m({operationKey:ti,expectedUpdatedAt:d().int().nonnegative(),name:go.optional(),creative:Q3.optional(),landingPageQueryStringTemplate:fo.nullable().optional()}).refine(Y0,{message:"At least one ad field must be updated"});m({operationKey:ti});m({operationKey:ti,expectedUpdatedAt:d().int().nonnegative()});const Qd=m({id:o(),adAccountId:o().nullable(),operationKey:o(),kind:M3,state:B3,entityType:Ze([U3,de()]),entityId:o().nullable(),upstreamUpdatedAt:d().int().nullable(),errorCode:o().nullable(),errorMessage:o().nullable(),reconcileStrategy:Ze([L3,de()]),reconcileParentId:It.nullable(),reconcileFingerprint:F0.nullable(),reconcileFields:PL.nullable(),reconcileAttempts:d().int().nonnegative(),lastReconciledAt:o().nullable(),createdAt:o(),updatedAt:o()});m({operation:Qd,replayed:N()});const Tt=Ik({offset:!0}),Pr={id:It,projectId:It,adAccountId:It,manifestHash:H3,manifest:K3,executorApiKeyId:It,approverApiKeyId:It,expiresAt:Tt,approvedAt:Tt,createdAt:Tt,updatedAt:Tt,revocationRequestedAt:Tt.nullable()},qL=m({...Pr,state:z(Ci.approved),operationId:de(),executionStartedAt:de(),consumedAt:de(),revokedAt:de(),expiredAt:de()}).strict(),ML=m({...Pr,state:z(Ci.executing),operationId:It,executionStartedAt:Tt,consumedAt:de(),revokedAt:de(),expiredAt:de()}).strict(),BL=m({...Pr,state:z(Ci.consumed),operationId:It,executionStartedAt:Tt,consumedAt:Tt,revokedAt:de(),expiredAt:de()}).strict(),LL=m({...Pr,state:z(Ci.revoked),operationId:de(),executionStartedAt:de(),consumedAt:de(),revokedAt:Tt,expiredAt:de()}).strict(),VL=m({...Pr,state:z(Ci.expired),operationId:de(),executionStartedAt:de(),consumedAt:de(),revokedAt:de(),expiredAt:Tt}).strict(),$L=m({...Pr,state:z(Ci.unknown),operationId:It,executionStartedAt:Tt,consumedAt:de(),revokedAt:de(),expiredAt:de()}).strict(),F3=qe("state",[qL,ML,BL,LL,VL,$L]).superRefine((e,n)=>{e.executorApiKeyId===e.approverApiKeyId&&n.addIssue({code:"custom",path:["executorApiKeyId"],message:"The activation executor must use a different API key from the approver"}),e.revocationRequestedAt!==null&&e.state!==Ci.executing&&e.state!==Ci.unknown&&e.state!==Ci.consumed&&n.addIssue({code:"custom",path:["revocationRequestedAt"],message:"Only an executing, cancelled, or unresolved activation can carry a cancellation request"})}),ks={id:It,operationId:It,ordinal:d().int().nonnegative(),entityType:G3,entityId:It,expectedUpdatedAt:d().int().nonnegative(),createdAt:Tt,updatedAt:Tt},hc={errorCode:de(),errorMessage:de()},X0={errorCode:o().min(1).max(100),errorMessage:o().min(1).max(500),remediation:o().min(1).max(500)},UL=m({...ks,...hc,state:z(ws.pending),providerUpdatedAt:de(),remediation:de(),startedAt:de(),finishedAt:de()}).strict(),GL=m({...ks,...hc,state:z(ws.executing),providerUpdatedAt:de(),remediation:de(),startedAt:Tt,finishedAt:de()}).strict(),KL=m({...ks,...hc,state:z(ws.active),providerUpdatedAt:d().int().nonnegative(),remediation:de(),startedAt:Tt,finishedAt:Tt}).strict(),HL=m({...ks,...X0,state:z(ws.failed),providerUpdatedAt:Ze([d().int().nonnegative(),de()]),startedAt:Tt,finishedAt:Tt}).strict(),QL=m({...ks,...hc,state:z(ws.rollback_executing),providerUpdatedAt:d().int().nonnegative(),remediation:o().min(1).max(500),startedAt:Tt,finishedAt:de()}).strict(),FL=m({...ks,...hc,state:z(ws.rolled_back),providerUpdatedAt:d().int().nonnegative(),remediation:o().min(1).max(500),startedAt:Tt,finishedAt:Tt}).strict(),ZL=m({...ks,...X0,state:z(ws.rollback_failed),providerUpdatedAt:d().int().nonnegative(),startedAt:Tt,finishedAt:Tt}).strict(),YL=m({...ks,...X0,state:z(ws.unknown),providerUpdatedAt:Ze([d().int().nonnegative(),de()]),startedAt:Tt,finishedAt:Tt}).strict(),XL=qe("state",[UL,GL,KL,HL,QL,FL,ZL,YL]),gf={exact:"exact",refreshSemanticallyUnchanged:"refresh_semantically_unchanged"},WL=A([gf.exact,gf.refreshSemanticallyUnchanged]);m({manifest:K3,executorApiKeyId:It,expiresAt:Tt,versionPolicy:WL.default(gf.exact)}).strict();m({grant:F3}).strict();m({}).strict();m({operationKey:ti,grantId:It,manifestHash:H3}).strict();m({grant:F3,operation:Qd,steps:y(XL)}).strict();const JL=[hr.pending,hr.unknown,hr.reconciling];function eV(e){if(e===void 0||e==="")return JL;if(Array.isArray(e)){const n=[];for(const i of e)typeof i=="string"?n.push(...i.split(",")):n.push(i);return n}return typeof e=="string"?e.split(",").filter(Boolean):e}m({state:Hf(eV,y(V3).min(1).max(3).refine(e=>new Set(e).size===e.length,"state values must be unique")),limit:ec().int().min(1).max(200).default(100),cursor:o().min(1).max(1e3).optional()});m({operations:y(Qd),count:d().int().nonnegative(),nextCursor:o().nullable()});m({}).strict();m({operation:Qd,resolved:N()});m({campaignId:o().min(1).max(200).optional(),lookbackDays:ec().int().min(1).max(30).default(7)});const Z3=A(["campaign","ad_group","ad"]);Z3.enum;const Y3=A(["both","live-only","stored-only"]);Y3.enum;const tV=z("live-provider-read"),nV=m({date:o().nullable(),startTime:d().nullable(),endTime:d().nullable(),impressions:d().nullable(),clicks:d().nullable(),spend:d().nullable(),conversions:d().nullable(),ctr:d().nullable(),cpc:d().nullable(),cpm:d().nullable()}),Ex=m({impressions:d().int(),clicks:d().int(),spendMicros:d().int(),conversions:d().int()}),aV=m({date:o(),live:Ex.nullable(),stored:Ex.nullable(),drifted:N()}),iV=m({field:o(),live:o().nullable(),stored:o().nullable()}),sV=m({name:o().nullable(),status:o(),reviewStatus:o().nullable(),mode:o().nullable(),updatedAt:d().nullable()}),oV=m({name:o(),status:o(),reviewStatus:o().nullable(),upstreamUpdatedAt:d().nullable(),syncedAt:o()}),rV=m({entityType:Z3,id:o(),parentId:o().nullable(),presence:Y3,live:sV.nullable(),stored:oV.nullable(),fieldDeltas:y(iV),liveMetrics:y(nV).nullable(),metricDeltas:y(aV).nullable(),drifted:N()}),lV=m({surface:o(),entityId:o().nullable(),upstreamStatus:d().int().nullable()});m({basis:tV,fetchedAt:o(),adAccountId:o(),storedSnapshotSyncedAt:o().nullable(),metricsWindow:m({lookbackDays:d().int().positive()}),bounds:m({maxCampaigns:d().int().positive(),maxAdGroupsPerCampaign:d().int().positive(),maxAdsPerAdGroup:d().int().positive(),maxReaderCalls:d().int().positive(),readerCalls:d().int().nonnegative(),maxPagesPerReaderCall:d().int().positive(),maxUpstreamHttpRequests:d().int().positive(),truncated:N()}),entities:y(rV),drift:m({entitiesCompared:d().int().nonnegative(),driftedEntities:d().int().nonnegative(),statusDrifted:d().int().nonnegative(),metricsDrifted:d().int().nonnegative()}),errors:y(lV)});const cV=m({status:A(["available","unavailable","not-supported"])}),zx="*",uV=A(["enabled","configured_disabled","CANONRY_TELEMETRY_DISABLED","DO_NOT_TRACK","CI","NO_CONFIG","CONFIG_UNAVAILABLE"]),dV=A(["server","local"]);m({enabled:N(),configuredEnabled:N(),reason:uV,anonymousId:o().regex(/^[0-9a-f]{8}\.\.\.$/i).optional(),target:dV.optional()}).strict();const mt=1,Oh=A(["system","project","queries","competitors","run","finish"]),mV=A(["copy_agent_command","connect_server_traffic","connect_search_console","connect_analytics","connect_business_profile","set_schedule","add_notification","open_project","review_page_health"]),Ih=A(["0","1","2-3","4-5","6-10","11+"]);function Wa(e){return!Number.isFinite(e)||e<=0?"0":e<2?"1":e<4?"2-3":e<6?"4-5":e<11?"6-10":"11+"}const Dx=A(["api_unavailable","database_unavailable","worker_unavailable","no_provider","no_queries","provider_save_failed","project_create_failed","query_save_failed","run_rejected","run_failed","run_cancelled","rate_limited","provider_auth","network","unknown"]),pV=A(["wizard","platform","site_health"]),Bu=m({eventId:o().uuid(),flowVersion:z(mt),onboardingSessionId:o().uuid(),surface:pV.optional()});qe("event",[Bu.extend({event:z("onboarding.started"),step:Oh,resumed:N()}).strict(),Bu.extend({event:z("onboarding.step_completed"),step:Oh,method:A(["existing","inline","manual","generated","skipped","automatic"]),countBucket:Ih.optional(),nextAction:mV.optional()}).strict(),Bu.extend({event:z("onboarding.blocked"),step:Oh,action:A(["continue","configure_provider","generate_queries","save","launch_run","retry_run"]),reasonCode:Dx}).strict(),Bu.extend({event:z("run.requested"),origin:z("dashboard_setup"),result:A(["queued","rejected"]),kind:A(["answer_visibility","site_health"]).optional(),providerCountBucket:Ih,queryCountBucket:Ih,reasonCode:Dx.optional()}).strict()]);m({accepted:N()});A(["cli","mcp-stdio","mcp-http","aero","api","dashboard"]);const X3=4;function hV(e){return e.length<X3}const fc=cB.enum.client,fV=s3.enum.both,gV=C2.enum.advanced;function Aa(e,n,i=`${n}s`){return e===1?n:i}const yV=A(["client-summary","executive-summary","share-of-voice","whats-changed","client-action-plan","agency-action-plan","agency-diagnostics","citation-scorecard","competitor-landscape","ai-source-origin","gsc","ga","social-referrals","ai-referrals","server-activity","indexing-health","citations-trend","insights","content-opportunities","content-gaps","recommended-next-steps","client-evidence-summary"]),Nt=yV.enum;function yX(e,n){const i=e.visibility,r=i?.selection.mode===gV;return(n===fc?[Nt["client-summary"],r?null:Nt["share-of-voice"],i?null:Nt["whats-changed"],e.serverActivity?Nt["server-activity"]:null,Nt["client-action-plan"],Nt["client-evidence-summary"]]:[i?Nt["client-summary"]:Nt["executive-summary"],r?null:Nt["share-of-voice"],i?null:Nt["whats-changed"],Nt["agency-action-plan"],r?null:Nt["agency-diagnostics"],r?null:Nt["citation-scorecard"],r?null:Nt["competitor-landscape"],Nt["ai-source-origin"],Nt.gsc,Nt.ga,Nt["social-referrals"],Nt["ai-referrals"],Nt["server-activity"],Nt["indexing-health"],r?null:Nt["citations-trend"],Nt.insights,AB(e).length>0?Nt["content-opportunities"]:null,e.contentGaps.length>0?Nt["content-gaps"]:null,Nt["recommended-next-steps"]]).filter(h=>h!==null)}const bV={gemini:"Gemini",openai:"ChatGPT",claude:"Claude",perplexity:"Perplexity",local:"Local model","cdp:chatgpt":"ChatGPT (browser)"};function vV(e){return bV[e]??e.charAt(0).toUpperCase()+e.slice(1)}function xV(e){switch(e){case"immediate":return"Do now";case"short-term":return"This month";case"medium-term":return"Next quarter"}}function wV(e){switch(e){case"high":return"Strong evidence";case"medium":return"Some evidence";case"low":return"Worth trying"}}function W3(e){if(!e)return"";const n=[e.city,e.region,e.country].filter(Boolean).join(", ");return n?`${e.label} (${n})`:e.label}const yf={eyebrow:"AI Visibility Report",market:"Market",noMarket:"No market set",generated:"Generated"};function bX(e){return e?`${yf.market}: ${W3(e)}`:yf.noMarket}function vX(e){return`Last ${e} days`}function Ox(e,n=3){const i=e.slice(0,n),r=e.length-i.length;return`${i.join(", ")}${r>0?`, +${r} more`:""}`}function xX(e,n){return`${e.slice(0,n).join(", ")}${e.length>n?"…":""}`}function wX(e){return`+${e} more`}function kX(e){return`× ${e}`}function SX(e){return`${e} bar chart`}function jX(e){return`${e} line chart`}function J3(e){return e==="up"?"↑":e==="down"?"↓":"→"}function AX(e){return e==="up"?"positive":e==="down"?"negative":"neutral"}function CX(e,n){return n==="%"?`${e.deltaAbs>0?"+":""}${e.deltaAbs.toFixed(1)}% vs ${e.prior}%`:oO(e)}function NX(e){return`${e.deltaAbs>0?"+":""}${e.deltaAbs.toFixed(1)}% ${J3(e.direction)}`}function _X(e){return`vs prior ${e} days`}function TX(e){if(!e)return null;const n=e.window??1,i=n>=2?`vs prior ${n} checks (avg ${e.prior}%)`:`since last check (was ${e.prior}%)`,r=J3(e.direction);return e.direction==="up"?{text:`Up ${e.deltaAbs.toFixed(1)} points ${i}`,tone:"positive",arrow:r}:e.direction==="down"?{text:`Down ${Math.abs(e.deltaAbs).toFixed(1)} points ${i}`,tone:"negative",arrow:r}:{text:`Holding steady ${i}`,tone:"neutral",arrow:r}}const Fd={"client-summary":{heroEyebrow:"Overview",heroEmpty:"No AI check has been run yet. Run a check to see how AI tools answer customer queries about your business.",tiles:{mentioned:"AI mentions your name",cited:"AI links to your website",providers:"AI tools tested"},noData:"No data yet",explainer:{lead:"Mentions and links are different.",mention:{article:"A",term:"mention",definition:"is when AI says your name out loud in its answer."},link:{article:"A",term:"link",definition:"is when AI lists your website as a source it used."},closing:"AI can do either, both, or neither — that's why we track both."},queriesHeading:"Customer queries we tested",providerBarsHeading:"How often each AI tool mentions you",providerBarsSubtitle:"Higher is better. Each bar shows the share of customer queries where the AI named you in the answer."},"whats-changed":{client:{eyebrow:"Since last check",title:"What's different since last check",empty:"No comparison yet — trends will appear after a few more checks.",tiles:{mentionRate:"AI mentions your name",citationRate:"AI links to your website",mentionedQueryCount:"Queries AI mentioned you in",gscClicks:"Visitors from Google",aiReferrals:"Visitors from AI tools"},gscCountLabel:"visits",aiReferralsCountLabel:"visits",movementsHeading:"How each AI tool changed",movementHeaders:["AI tool","Was","Now","Change"],winsHeading:"What got better",winsEmpty:"No new wins this period.",regressionsHeading:"What got worse",regressionsEmpty:"Nothing got worse this period.",insightHeaders:["What changed","Customer query","AI tool"]},agency:{eyebrow:"Section 2",title:"What's Changed",empty:"Trends will appear after a few more checks.",tiles:{citationRate:"Citation rate",mentionRate:"Mention rate",citedQueryCount:"Cited queries",gscClicks:"GSC clicks",aiReferrals:"AI referral sessions"},gscCountLabel:"clicks",aiReferralsCountLabel:"sessions",movementsHeading:"AI engine movements",movementHeaders:["Engine","Prior","Current","Change"],winsHeading:"Wins",winsEmpty:"No new gains in the latest check.",regressionsHeading:"Regressions",regressionsEmpty:"No new regressions in the latest check.",insightHeaders:["Severity","Title","Query","Provider"]},rateTileEmpty:"No prior data",trafficTileEmpty:"Not enough trend data"},"client-action-plan":{eyebrow:"Action plan",title:"What to do next",intro:"Approve these in order. They are sorted by what will move the needle fastest.",empty:"No recommendations yet — run an AI check to populate this.",rankTitle:"Priority — 1 will move the needle fastest",detailsSummary:"See the data behind this",whyLabel:"Why this matters",evidenceLabel:"What we saw",successLabel:"What success looks like:"},"agency-action-plan":{eyebrow:"Agency actions",title:"Agency Action Plan",intro:"The highest-leverage work, sorted by urgency and evidence strength.",empty:"No prioritized actions yet.",rankTitle:"Impact rank — 1 is the highest-leverage action",detailsSummary:"Evidence details",whyLabel:"Why",evidenceLabel:"Evidence",successLabel:"Win condition:"},"client-evidence-summary":{eyebrow:"What we based this on",title:"The signals behind this plan",intro:"The data behind the recommendations above. Switch to Agency for the full breakdowns.",empty:"No supporting evidence yet — this fills in after the first AI check.",sources:{heading:"Where AI gets its answers",subtitle:"The websites AI tools cited most often when answering customer queries about your industry.",competitorTag:"(competitor)"},indexing:{heading:"Pages Google can find on your site",subtitle:"Google indexing your site increases the chances of it appearing in AI search (especially Gemini)."},search:{heading:"What people search Google for",subtitleLead:"You appeared in",subtitleMiddle:"Google searches and got",subtitleTail:"this period."},opportunities:{heading:"Topics where you could improve",subtitle:"Customer queries where better content on your site would help AI cite you.",cededTag:"Ceded surface"}}};function RX(e,n){return e>0?`When customers asked AI ${e} ${Aa(e,"query","queries")} about your industry, AI mentioned you in ${n} of ${e===1?"them":"those queries"}.`:Fd["client-summary"].heroEmpty}function EX(e,n){return n>0?`Says your name in ${e} of ${n} ${Aa(n,"query","queries")}`:Fd["client-summary"].noData}function zX(e,n){return n>0?`Cites your site as a source in ${e} of ${n} ${Aa(n,"query","queries")}`:Fd["client-summary"].noData}function DX(e,n){return e.length>0?e.map(i=>vV(i)).join(", "):`${In(n)} ${Aa(n,"query","queries")} tested`}function OX(e){return`These are the ${e} ${Aa(e,"query we asked","queries we asked")} every AI tool. The numbers above measure how often you came up.`}function IX(e,n){const i=n===fc?e.clientSummary.actionItems:e.agencyDiagnostics.priorities.length>0?e.agencyDiagnostics.priorities:e.actionPlan.filter(r=>r.audience===fV||r.audience===n);return d3(e,i)}function PX(e,n){return e===fc?xV(n):yB(n)}function qX(e,n){return e===fc?wV(n):`${bB(n)} confidence`}function MX(e){return`${In(e)}×`}function BX(e,n){return`${In(e)} of ${In(n)} pages indexed`}function LX(e){return`${Aa(e,"page is","pages are")} not indexed yet.`}function VX(e){return Aa(e,"click")}function $X(e){return`${In(e)} ${Aa(e,"search","searches")}`}function UX(e){return e>=90?"positive":e>=70?"caution":"negative"}const W0={"executive-summary":{eyebrow:"Section 1",title:"Executive Summary",intro:"Citation = source list. Mention = answer text. They are independent signals.",heroKicker:"Latest AI visibility check",emptyTitle:"No AI citation data yet",emptySubtitle:"Run a check to populate the first citation and mention baseline.",noQueries:"no queries",proofTiles:{citationTrend:"Citation trend",mentionCoverage:"Mention coverage",prioritizedActions:"Prioritized actions"},prioritizedActionsCopy:"Sorted for agency follow-up.",tiles:{citationRate:"Citation rate",mentionRate:"Mention rate",queriesTracked:"Queries tracked",gscClicks:"GSC clicks",gaSessions:"GA sessions"},trendLabels:{up:"↑ Up",down:"↓ Down",flat:"→ Flat",unknown:"—"},marketScope:{heading:"Market Scope",currentLabel:"Current check",currentCopy:"All findings below are scoped to this run.",notIncludedLabel:"Not included",providerLabel:"Provider context",noOtherMarkets:"None",noProviders:"—",singleMarketCopy:"Single-market report; findings can be read as the current market view.",noMarketCopy:"No geographic hint was attached to this check; read findings as default-market or national results.",noProviderMetadataCopy:"No provider-level location metadata is available for this report.",warningTitle:"Location handling needs review",warningDetail:"used weak or indirect market handling. Treat provider-level differences cautiously."}},"agency-diagnostics":{eyebrow:"Agency diagnostics",title:"Technical Diagnostics",intro:"Fast-read operator flags behind the action plan.",empty:"No agency diagnostics available yet.",hiddenTitle:"Location caveat"},"recommended-next-steps":{eyebrow:"Section 16",title:"Recommended Next Steps",intro:"Action items bucketed by timing.",empty:"No outstanding actions."}};function GX(e){const n=W0["executive-summary"],i=e.executiveSummary,r=i.trend,u=r==="up"?n.trendLabels.up:r==="down"?n.trendLabels.down:r==="flat"?n.trendLabels.flat:n.trendLabels.unknown,h=r==="up"?"positive":r==="down"?"negative":"neutral",g=(i.totalQueryCount??0)>0,b=i.totalQueryCount===1?"query":"queries",v=e.agencyDiagnostics.priorities.length>0?e.agencyDiagnostics.priorities:e.actionPlan,w=i.gsc?ej(e):"";return{trendLabel:u,trendTone:h,title:g?`${i.citedQueryCount} of ${i.totalQueryCount} tracked ${b} cite ${e.meta.project.displayName}`:n.emptyTitle,subtitle:g?`${i.citationRate}% citation coverage and ${i.mentionRate}% mention coverage across ${i.providerCount} ${Aa(i.providerCount,"provider")}.`:n.emptySubtitle,citedFragment:g?`${i.citedQueryCount}/${i.totalQueryCount} ${b} cited`:n.noQueries,mentionedFragment:g?`${i.mentionedQueryCount}/${i.totalQueryCount} ${b} mentioned`:n.noQueries,prioritizedActionCount:d3(e,v).length,providerCountLabel:`${i.providerCount} provider${i.providerCount===1?"":"s"}`,competitorCountLabel:`${i.competitorCount} competitor${i.competitorCount===1?"":"s"} tracked`,gscDelta:i.gsc?`${In(i.gsc.impressions)} imp · ${tO(i.gsc.ctr)} CTR${w?` · ${w}`:""}`:null,gaDelta:i.ga?`${In(i.ga.users)} users · ${oo(i.ga.periodStart)} → ${oo(i.ga.periodEnd)}`:null}}function KX(e){const n=W0["executive-summary"].marketScope,i=e.meta.location,r=e.meta.providerLocationHandling;if(!i&&r.length===0)return null;const u=i?.otherConfiguredLabels??[],h=r.filter(g=>g.treatment==="ignored"||g.treatment==="browser-geo").map(g=>g.provider);return{currentValue:i?W3(i):yf.noMarket,notIncludedValue:u.length>0?Ox(u,4):n.noOtherMarkets,notIncludedCopy:i?u.length>0?`${u.length} configured ${Aa(u.length,"market")} still ${u.length===1?"needs":"need"} a matching check before cross-market recommendations.`:n.singleMarketCopy:n.noMarketCopy,providerValue:r.length>0?In(r.length):n.noProviders,providerCopy:r.length>0?h.length>0?`${h.length} ${Aa(h.length,"provider")} need a closer location check.`:`${r.length} ${Aa(r.length,"provider")} received the market context.`:n.noProviderMetadataCopy,weakProviders:h.length>0?Ox(h,4):null}}const kV={"citation-scorecard":{eyebrow:"Section 3",title:"Citation Scorecard",intro:"Per-engine citation and mention coverage from the latest check.",providerChartTitle:"Provider citation rate",empty:"Run a check to populate the citation matrix.",queryHeader:"Query",glyphs:{cited:"C",notCited:"c",mentioned:"M",notMentioned:"m",pending:"–",missingCell:"— —"},legend:{lead:"Legend:",citedMeaning:"= cited/not,",mentionedMeaning:"= mentioned/not,",pendingMeaning:"= no data."}},"competitor-landscape":{eyebrow:"Section 4",title:"Competitor Landscape",intro:"Who AI engines cite and mention instead of the client.",empty:"No competitor data yet. Add competitors and run a check.",noCompetitors:"No competitors configured.",citationsChartTitle:"Citations per domain",brandedChartTitle:"Mentions per domain · branded queries",headers:{domain:"Domain",pressure:"Pressure",citations:"Citations",citationShare:"Citation share",citedQueries:"Cited queries"},citationShareTooltip:"Citation share — % of cited-source slots that went to this competitor across tracked queries. Distinct from Mention Share."},"ai-source-origin":{eyebrow:"Section 5",title:"AI Citation Sources",intro:"External domains AI engines cited most in the latest check.",empty:"No source data yet. Run a check first.",topSourcesHeading:"Top sources",topSourceHeaders:["Domain","Citations","Tag"],trackedCompetitorTag:"Tracked competitor",externalTag:"External",categoriesHeading:"By source type"}};function HX(e){return`${e.citationRate}% (${e.citedCount}/${e.totalCount})`}const SV={"non-brand":"non-brand queries",pooled:"pooled queries · classification unavailable"};function jV(e){return SV[e]??"pooled queries · classification unavailable"}function QX(e){const n=jV(e.scope),i=e.branded;return{scopeLabel:n,mentionsHeader:`Mentions (${n})`,mentionsTooltip:e.scope==="non-brand"?`Mentions on ${n}. Branded queries are counted separately — the client is named on nearly all of them and a competitor cannot be, so pooling the two would rank the client on its own brand recall.`:`Mentions on ${n}. The project has no usable brand identity for a branded/non-brand split, so all tracked queries remain pooled and this is not a competitive category read.`,mentionsChartTitle:`Mentions per domain · ${n}`,mentionShareUnavailable:`Mention share unavailable for ${n}: no tracked brand was named, so the denominator is 0.`,brandedNote:`Branded queries contain the client's own name. The client is named on nearly all of them and a competitor structurally cannot be, so these are kept out of the competitive figure above. Read them as brand recall: ${i?.projectMentionCount??0} of ${i?.totalAnswerSnapshots??0} branded answers named the client.`}}function FX(e){return`${e} cited URL${e>1?"s":""}`}function ZX(e){const n=e.find(r=>r.category===Zu.competitor);if(!n)return null;const i=e.reduce((r,u)=>r+u.count,0);return{share:`${n.sharePct}%`,detail:`of citations went to tracked competitors (${n.count} of ${i}).`}}function YX(e){return`(${e}%)`}const AV={gsc:{eyebrow:"Section 6",title:"GSC Performance",empty:"Connect Google Search Console to populate this section.",tiles:{clicks:"Total clicks",impressions:"Total impressions",ctr:"Avg CTR",position:"Avg position"},trendTitle:"Clicks over time",topQueriesHeading:"Top queries",topQueryHeaders:["Query","Clicks","Imp.","CTR","Pos.","Category"],intentHeading:"Search demand by intent",intentCountLabel:"clicks",untrackedDemand:{heading:"AEO queries without search demand",subtitle:"Review whether these still belong in the tracking set."},suggestedQueries:{heading:"Search queries you should track",subtitle:"High-impression candidates to add to AEO tracking."}},ga:{eyebrow:"Section 7",title:"GA4 Traffic",empty:"Connect Google Analytics 4 to populate this section.",tiles:{sessions:"Total sessions",users:"Total users",organicSessions:"Organic sessions"},topPagesHeading:"Top landing pages",topPageHeaders:["Page","Sessions","Organic"],channelsHeading:"Channel mix",channelsCountLabel:"sessions"},"social-referrals":{eyebrow:"Section 8",title:"Social Referrals",intro:"Social traffic split by channel and campaign.",empty:"No social referral data yet.",tiles:{sessions:"Total sessions",organic:"Organic social",paid:"Paid social"},channelsHeading:"Social channel mix",channelsCountLabel:"sessions",campaignsHeading:"Top campaigns",campaignHeaders:["Source","Medium","Sessions"]},"ai-referrals":{eyebrow:"Section 9",title:"AI Referral Traffic",intro:"Traffic arriving from AI answer engines.",empty:"No AI referral traffic detected yet.",tiles:{sessions:"Total sessions"},trendTitle:"AI referral sessions over time",sourcesHeading:"AI sessions by source",sourcesCountLabel:"sessions",topPagesHeading:"Top AI landing pages",topPageHeaders:["Page","Sessions"]}};function ej(e){const n=e.executiveSummary.gsc,i=e.gsc,r=n?.periodStart||i?.periodStart||i?.trend.at(0)?.date||"",u=n?.periodEnd||i?.periodEnd||i?.trend.at(-1)?.date||"";return iO(r,u)}function XX(e){const n=ej(e);return`Search demand signals to compare against AI visibility${n?` for ${n}`:""}.`}function WX(e){return`Site traffic from ${oo(e.periodStart)} to ${oo(e.periodEnd)}.`}function JX(e,n){return`${e} · ${n}%`}const J0={"server-activity":{title:"AI Visibility — Server-Side",client:{eyebrow:"AI engine attention",introNoData:"Live telemetry from your server logs.",empty:"Your server-side traffic source is connected. Numbers will appear after the next sync.",tiles:{botRequests:"AI bot requests observed",userFetches:"AI user-fetch requests",referralSessions:"AI referral sessions"},userFetchFallback:"ChatGPT-User, Perplexity-User, MistralAI-User",operatorsHeading:"By AI tool",operatorsFootnote:"Bot requests are bulk crawl (GPTBot, PerplexityBot, …). User fetches are on-demand reads triggered by real users inside an AI surface (ChatGPT-User, Perplexity-User, …). Verified means the request came from an IP the operator publishes as its own; unverified means the user-agent matched but the IP is not in a published range. User-fetch totals count both, since many genuine user fetches come from outside any published range."},agency:{eyebrow:"Section 10",intro:"What AI engines actually do in your server logs — direct evidence, complementary to citations (which measure what they say).",emptyNotConnected:"Connect a server-side traffic source to surface what AI engines do directly in your server logs — distinct from GA4 click-throughs.",empty:"Source connected — collecting your first data. Numbers will appear after the next sync.",operatorsHeading:"Per AI operator",operatorsNote:"Verified means the request's source IP falls inside the operator's published range. Unverified bots claim the user-agent but the IP is not in a published range, so it could be the real bot or an imitator. User fetches are on-demand reads from an AI surface on behalf of a real user (ChatGPT-User, Perplexity-User, …), disjoint from bulk crawl and counted whether or not the IP can be verified.",noDelta:"—",crawledPathsHeading:"Top crawled paths",crawledPathHeaders:["Path","Hits","Verified","Distinct operators"],referralProductsHeading:"AI-referral sessions by product",referralProductsNote:"Where humans landed coming from each AI product (chatgpt.com, claude.ai, …).",referralProductHeaders:["Product","Sessions","Distinct landing paths"],referralLandingHeading:"Top AI-referral landing paths",referralLandingHeaders:["Path","Sessions","Distinct products"]},countNouns:{requests:"requests",hits:"hits",sessions:"sessions"}},"indexing-health":{eyebrow:"Section 11",title:"Indexing Health",empty:"Connect Google Search Console or Bing Webmaster Tools and run a sitemap inspection.",tiles:{indexed:"Indexed",total:"Total inspected",share:"Indexed share"},coverageHeading:"Coverage breakdown",coverageLabel:"Coverage stacked bar",segments:{indexed:"Indexed",notIndexed:"Not indexed",deindexed:"Deindexed",unknown:"Unknown"}},"citations-trend":{eyebrow:"Section 12",title:"Citations Over Time",intro:"Citation coverage across recent checks.",empty:"Run multiple checks to see a trend.",chartTitle:"Overall citation rate",breakdownHeading:"Check-by-check breakdown",breakdownHeaders:["Check","Cited queries","Per-engine rates"]}};function eW(e,n,i){const r=J0["server-activity"],u=e===fc;return{id:Nt["server-activity"],eyebrow:u?r.client.eyebrow:r.agency.eyebrow,title:r.title,intro:u?n?`What AI engines actually do in your server logs over the last ${i} days — the other half of citations.`:r.client.introNoData:r.agency.intro}}function Zd(e){return`${e}d`}function tW(e){const n=Zd(e);return["AI tool",`Bot requests (${n})`,`User fetches (${n})`,"Referral sessions"]}function nW(e){const n=Zd(e);return{verified:`Verified crawler hits (${n})`,unverified:`Unverified crawler hits (${n})`,userFetches:`AI user-fetch hits (${n})`,referralSessions:`AI-referral sessions (${n})`}}function aW(e){return["Operator","Verified hits","Unverified","User fetches","Referral sessions",`${Zd(e)} delta`]}function iW(e){return`Verified crawler hits over time (last ${e} days)`}function sW(e){return`Pages AI bots fetched most often (verified only, last ${Zd(e)}).`}function oW(e){return e===null?J0["server-activity"].agency.noDelta:`${e>0?"+":""}${e}%`}function rW(e){return e.verifiedHits+e.unverifiedHits}function lW(e,n){return`${In(e)} verified · ${In(n)} unverified`}function cW(e){return e>0?`${In(e)} blocked by redirects`:""}function uW(e){return`Pages absent from ${e==="google"?"Google":"Bing"} are harder for AI engines to retrieve.`}function dW(e,n){return`${e}: ${n}`}function mW(e){return`Building baseline (${e} of ${X3} checks completed). Trend will appear once more checks are recorded.`}function pW(e){return e.map(n=>`${n.provider}: ${n.citationRate}%`).join(" · ")}const CV={insights:{eyebrow:"Section 13",title:"Insights & Alerts",intro:"Regressions, gains, and recurring alerts ordered by severity.",empty:"No insights yet — run a check to generate alerts.",headers:["Severity","Title","Query","Provider","Recommendation"],noRecommendation:"—"},"content-opportunities":{eyebrow:"Section 14",title:"Content Opportunities",intro:"Queries where content work has the clearest path to more AI citations. Opportunity score is 0–100, higher = stronger. Winnability flags whether the cited surface is ownable or ceded to aggregators/editorial.",headers:["Query","Action","Winnability","Score","Why","Our page","Winning competitor","Confidence"],scoreSuffix:"/100",scoreCardTooltip:"Opportunity score (0–100, higher = stronger)",scoreHeaderTooltip:"Opportunity score (0–100)",noDriverSignal:"No driver signal yet",noPage:"No page yet",noWinningCompetitor:"—"},"content-gaps":{eyebrow:"Section 15",title:"Content Gaps",intro:"Tracked queries where competitors are cited and the client is missing.",headers:["Query","Competitors cited","Domains","Miss rate"]}};function hW(e){return`${xM(e.action)} · ${wM(e.actionConfidence)} confidence`}function fW(e){return nO(e)}const gW={...Fd,...W0,...kV,...AV,...J0,...CV},tj=A(["trace","debug","info","warn","error","fatal"]),NV=m({runId:o().min(1).max(256).optional(),projectId:o().min(1).max(256).optional(),requestId:o().min(1).max(256).optional(),actor:o().min(1).max(512).optional(),credentialId:o().min(1).max(512).optional(),userAgent:o().min(1).max(512).optional(),actorSession:o().min(1).max(512).optional(),method:o().min(1).max(16).optional(),route:o().min(1).max(256).optional(),operationId:o().min(1).max(256).optional(),jobId:o().min(1).max(256).optional(),taskId:o().min(1).max(256).optional(),traceId:o().min(1).max(256).optional(),errorCode:o().min(1).max(128).optional(),attempt:d().finite().optional(),count:d().finite().optional(),total:d().finite().optional(),progress:d().finite().optional(),httpStatus:d().finite().optional(),statusCode:d().finite().optional(),durationMs:d().finite().optional(),bytes:d().finite().optional(),retryAfterMs:d().finite().optional(),retriable:N().optional(),retrying:N().optional(),cancelled:N().optional(),success:N().optional()}).strict(),_V=m({cursor:o().min(1).max(512),ts:o().datetime(),level:tj,module:o().min(1).max(256),action:o().min(1).max(256),message:o().max(4096).optional(),runId:o().min(1).max(256).optional(),projectId:o().min(1).max(256).optional(),context:NV}).strict();m({level:tj.optional(),module:o().trim().min(1).max(256).optional(),runId:o().trim().min(1).max(256).optional(),projectId:o().trim().min(1).max(256).optional(),actor:o().trim().min(1).max(512).optional(),requestId:o().trim().min(1).max(256).optional(),since:o().datetime().optional(),until:o().datetime().optional(),limit:ec().int().min(1).max(200).default(100),cursor:o().trim().min(1).max(512).optional()}).strict().superRefine((e,n)=>{e.since&&e.until&&Date.parse(e.since)>Date.parse(e.until)&&n.addIssue({code:ve.custom,path:["until"],message:'"until" must be on or after "since".'})});m({entries:y(_V),nextCursor:o().min(1).max(512).nullable(),truncated:d().int().nonnegative(),dropped:d().int().nonnegative(),retention:A(["process","durable"]),retentionPolicy:m({maxEntries:d().int().positive(),maxAgeSeconds:d().int().positive()}).strict().optional(),captureErrors:d().int().nonnegative().optional(),observedAt:o().datetime()}).strict();function Ph(e){return e!==""&&/^[\w./:@%+=,-]+$/.test(e)?e:`'${e.replace(/'/g,"'\\''")}'`}class pn extends Error{code;statusCode;details;constructor(n,i,r,u){super(n),this.name="ApiError",this.code=r??"UNKNOWN",this.statusCode=i,this.details=u}}function yW(e){if(e instanceof pn)return e.details;if(typeof e!="object"||e===null)return;const n=e.error,i=typeof n=="object"&&n!==null?n.details:e.details;return typeof i=="object"&&i!==null&&!Array.isArray(i)?i:void 0}function fr(){if(typeof window>"u")return!1;const e=window.__CANONRY_CONFIG__?.demo;return e?.enabled===!0&&e.readOnly===!0&&e.sampleData===!0}function TV(){if(typeof window>"u")return"legacy";const e=window.__CANONRY_CONFIG__?.dashboard?.onboardingMode??window.__CANONRY_CONFIG__?.onboardingMode;return e==="platform"||e==="auto"||e==="legacy"?e:"auto"}function RV(){if(typeof window>"u")return;const e=window.__CANONRY_CONFIG__?.embed?.renderToken;return typeof e=="string"&&e.length>0?e:void 0}function eg(e){const n=RV();if(!n)return e;let i;const r=typeof window<"u"&&window.location?window.location.href:"http://localhost/";try{i=new URL(e,r)}catch{return e}const u=new URL(r).origin;if(i.origin!==u)return e;const g=`${Yd().replace(/\/$/,"")}/api/v1`;return i.pathname!==g&&!i.pathname.startsWith(`${g}/`)?e:(i.searchParams.set("token",n),/^[a-z][a-z\d+.-]*:/i.test(e)?i.toString():`${i.pathname}${i.search}${i.hash}`)}function EV(e,n){const i={method:e.method,headers:e.headers,cache:e.cache,credentials:e.credentials,integrity:e.integrity,keepalive:e.keepalive,mode:e.mode,redirect:e.redirect,referrer:e.referrer,referrerPolicy:e.referrerPolicy,signal:e.signal};return e.body&&(i.body=e.body,i.duplex="half"),new Request(n,i)}function nj(){if(typeof window>"u")return null;const e=window.__CANONRY_CONFIG__?.embed;return e?.enabled?e:null}function zV(){return typeof window>"u"?!0:window.__CANONRY_CONFIG__?.dashboard?.showResourceLinks!==!1}function DV(){return typeof window>"u"?!0:window.__CANONRY_CONFIG__?.dashboard?.showAgentBar!==!1}function OV(){return typeof window>"u"?!1:window.__CANONRY_CONFIG__?.agent?.allowViewers===!0}function tg(){return fr()}function IV(){return typeof window>"u"?!0:window.__CANONRY_CONFIG__?.dashboard?.showUpdateNotification!==!1}function eo(){return PV(Ee["answer-visibility"])}function PV(e){if(typeof window>"u")return!1;const n=window.__CANONRY_CONFIG__?.dashboard;return n?.managedRunKinds!==void 0?n.managedRunKinds.includes(e):e===Ee["answer-visibility"]&&n?.managedSweeps===!0}function qV(){if(typeof window>"u")return null;const e=window.__CANONRY_CONFIG__?.research;if(e?.allowViewers!==!0)return null;const n=e.viewerDailyRunLimit;return{allowViewers:!0,viewerDailyRunLimit:Number.isInteger(n)&&(n??0)>0?n:aL}}function Ix(){return qV()?"Analyst":"View only"}function MV(){return nj()!==null}function BV(){return typeof window<"u"&&window.__CANONRY_CONFIG__?.basePath?window.__CANONRY_CONFIG__.basePath.replace(/\/$/,"")+"/api/v1":"/api/v1"}const ng=BV();function LV(){const e=typeof window<"u"&&window.location?window.location.origin:"";return typeof window<"u"&&window.__CANONRY_CONFIG__?.basePath?e+window.__CANONRY_CONFIG__.basePath.replace(/\/$/,""):e}function Yd(){return typeof window<"u"&&window.__CANONRY_CONFIG__?.basePath?window.__CANONRY_CONFIG__.basePath.replace(/\/$/,""):""}function VV(e){const n=e.trim().toLowerCase().replace(/^\[|\]$/g,"");return n==="localhost"||n==="::1"?!0:/^127\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(n)}function $V(e,n){if(e.protocol!=="http:"&&e.protocol!=="https:"||!VV(e.hostname))return;const i=e.port?`:${e.port}`:"",r=n?n.replace(/\/$/,""):"";return`${e.protocol}//localhost${i}${r}`}function bW(e){return`${e.replace(/\/$/,"")}/api/v1/google/callback`}function vW(e){return`${e.replace(/\/$/,"")}/api/v1/google-marketing/callback`}function UV(){if(!(typeof window>"u"))return $V(window.location,Yd())}function GV(e){return`${Yd()}${e}`}function KV(e,n){if(n===404)return"Health endpoint returned 404. Check basePath or reverse-proxy configuration and make sure the dashboard reaches /health instead of an API-prefixed route."}function HV(){return""}function QV(){return!!HV()}let aj=null;function Px(e){aj=e}function ag(){aj?.()}const ne=v_({baseUrl:LV()});ne.interceptors.response.use((e,n)=>(e.status===401&&!n.url.includes("/api/v1/session")&&ag(),e));ne.interceptors.request.use(e=>{const n=eg(e.url);return n===e.url?e:EV(e,n)});async function be(e){const n=await e();if(n.error!==void 0&&n.error!==null){const i=n.response.status;let r=`API ${i}: ${n.response.statusText}`,u,h;if(typeof n.error=="object"&&n.error!==null){const g=n.error.error;if(typeof g=="string")r=g;else if(g&&typeof g=="object"){const b=g;b.message&&(r=b.message),b.code&&(u=b.code),b.details&&(h=b.details)}else{const b=n.error;b.message&&(r=b.message),b.code&&(u=b.code),b.details&&(h=b.details)}}else typeof n.error=="string"&&(r=n.error);throw new pn(r,i,u,h)}if(n.response.status!==204)return n.data}async function Ss(e,n){const i=n?.body!=null,r=await fetch(eg(`${ng}${e}`),{...n,credentials:n?.credentials??"same-origin",headers:{...i?{"Content-Type":"application/json"}:{},...n?.headers}});if(!r.ok){const u=await r.text();let h=`API ${r.status}: ${r.statusText}`,g,b;if(u)try{const v=JSON.parse(u);typeof v.error=="string"?h=v.error:v.error?.message?(h=v.error.message,g=v.error.code,b=v.error.details):v.message&&(h=v.message)}catch{h=u}throw r.status===401&&!e.startsWith("/session")&&!e.startsWith("/auth/")&&ag(),new pn(h,r.status,g,b)}if(r.status!==204)return r.json()}function FV(e){return be(()=>Jw({client:ne,path:{name:e}}))}function xW(e){return be(()=>nk({client:ne,path:{name:e}}))}function bf(e){return be(()=>ak({client:ne,path:{id:e}}))}function ij(e){return be(()=>tk({client:ne,path:{name:e}}))}function ZV(e,n,i){return be(()=>ZN({client:ne,path:{name:e},query:{location:n,limit:i}}))}function sj(e,n){return be(()=>R6({client:ne,path:{name:e},query:{location:n?.location,since:n?.since}}))}function oj(e,n){return be(()=>fN({client:ne,path:{name:e},body:n}))}function YV(e){return be(()=>pN({client:ne,body:e}))}function XV(e,n){return be(()=>qN({client:ne,path:{name:e},body:{queries:n}}))}function WV(e,n){return be(()=>PN({client:ne,path:{name:e},body:{queries:n}}))}function wW(e,n){return be(()=>IN({client:ne,path:{name:e},body:{queries:n}}))}function JV(e,n){return be(()=>T6({client:ne,path:{name:e},body:n}))}function e$(e,n){return be(()=>LN({client:ne,path:{name:e},body:{competitors:n}}))}function kW(e,n){return be(()=>BN({client:ne,path:{name:e},body:{competitors:n}}))}function SW(e,n){return be(()=>VN({client:ne,path:{name:e,id:n}}))}async function jW(e,n){const i=await FV(e);return oj(e,{displayName:n.displayName??i.displayName??i.name,canonicalDomain:n.canonicalDomain??i.canonicalDomain,ownedDomains:n.ownedDomains??i.ownedDomains,aliases:n.aliases??i.aliases,country:n.country??i.country,language:n.language??i.language,tags:i.tags,labels:i.labels,providers:n.providers??i.providers,providerModels:n.providerModels??i.providerModels??{},locations:n.locations??i.locations,defaultLocation:n.defaultLocation!==void 0?n.defaultLocation:i.defaultLocation,autoExtractBacklinks:i.autoExtractBacklinks})}function t$(e,n){const i={};return n?.location&&(i.location=n.location),n?.allLocations&&(i.allLocations=!0),n?.noLocation&&(i.noLocation=!0),be(()=>UN({client:ne,path:{name:e},body:i}))}function AW(e,n){return be(()=>zN({client:ne,path:{name:e},body:n}))}async function CW(e,n){await be(()=>DN({client:ne,path:{name:e,label:n}}))}function NW(e,n){return be(()=>ON({client:ne,path:{name:e},body:{label:n}}))}async function _W(e){await be(()=>hN({client:ne,path:{name:e}}))}function TW(){return be(()=>ik({client:ne}))}function qx(){return Ss("/session")}function n$(e){return Ss("/session/setup",{method:"POST",body:JSON.stringify({password:e})})}function a$(e){return Ss("/session",{method:"POST",body:JSON.stringify({password:e})})}function i$(e){return Ss("/session",{method:"POST",body:JSON.stringify({apiKey:e})})}function s$(){return Ss("/session",{method:"DELETE"})}function qh(){return be(()=>e5({client:ne}))}function Mx(){return Ss("/auth/session")}function o$(e,n){return Ss("/auth/login",{method:"POST",body:JSON.stringify({name:e,password:n})})}function Bx(){return Ss("/auth/logout",{method:"POST"})}function rj(e,n){return be(()=>WN({client:ne,path:{name:e},body:n}))}async function ig(e){for(let n=0;n<2;n+=1)try{await be(()=>p5({client:ne,body:e}));return}catch(i){if(!(!(i instanceof pn)||i.statusCode>=500)||n===1)return}}function RW(e){return be(()=>JN({client:ne,body:e}))}function EW(e,n){return be(()=>s5({client:ne,path:{name:e},body:n}))}async function zW(e,n){await be(()=>a5({client:ne,path:{name:e},query:n===void 0?void 0:{expectedUpdatedAt:n}}))}function DW(e){return be(()=>r5({client:ne,path:{name:e}}))}function OW(e,n){return be(()=>l5({client:ne,path:{name:e},body:n}))}async function IW(e,n){await be(()=>c5({client:ne,path:{name:e,id:n}}))}function PW(e,n){return be(()=>u5({client:ne,path:{name:e,id:n}}))}function r$(e,n,i){return be(()=>MN({client:ne,path:{name:e},body:{provider:n,count:i}}))}function l$(e){return be(()=>HN({client:ne,body:e}))}function c$(e){return be(()=>KN({client:ne,body:e??{}}))}function qW(e,n){const i=UV();return be(()=>P5({client:ne,path:{name:e},body:{type:n,...i?{publicUrl:i}:{}}}))}function MW(e,n){return be(()=>q5({client:ne,path:{name:e,type:n}}))}function BW(e,n,i){return be(()=>B5({client:ne,path:{name:e,type:n},body:{propertyId:i}}))}function LW(e,n,i){return be(()=>L5({client:ne,path:{name:e,type:n},body:{sitemapUrl:i}}))}function u$(e,n){return be(()=>V5({client:ne,path:{name:e},body:n??{}}))}function VW(e,n){const i={};return n&&n!=="all"&&(i.window=n),be(()=>YN({client:ne,path:{name:e},query:i}))}function $W(e,n){return be(()=>G5({client:ne,path:{name:e},body:{url:n}}))}function d$(e,n){return be(()=>Y5({client:ne,path:{name:e},body:n??{}}))}function UW(e,n){return be(()=>Z5({client:ne,path:{name:e},query:n?{sitemapIndex:n}:void 0}))}function GW(e,n){return be(()=>dN({client:ne,path:{name:e},body:{sitemapUrls:n}}))}function m$(e,n){return be(()=>d_({client:ne,path:{name:e},body:n??{}}))}function KW(e,n){return be(()=>W6({client:ne,path:{name:e},body:n??{}}))}function HW(){return be(()=>sk({client:ne}))}function QW(e,n){return be(()=>n5({client:ne,body:{host:e,port:n}}))}function FW(e,n){return be(()=>X5({client:ne,path:{name:e},body:n}))}function ZW(e,n){return be(()=>o6({client:ne,path:{name:e},body:{apiKey:n}}))}function YW(e){return be(()=>r6({client:ne,path:{name:e}}))}function XW(e,n){return be(()=>u6({client:ne,path:{name:e},body:{siteUrl:n}}))}function WW(e,n){return be(()=>p6({client:ne,path:{name:e},body:{url:n}}))}function JW(e,n){return be(()=>h6({client:ne,path:{name:e},body:{}}))}function eJ(e,n){return be(()=>f6({client:ne,path:{name:e},body:n}))}function tJ(e){return be(()=>t5({client:ne,body:{apiKey:e}}))}function lj(e){return e?/filename\s*=\s*"?([^";]+)"?/i.exec(e)?.[1]??null:null}async function nJ(e,n="agency",i){const r=new URLSearchParams({audience:n});i!==void 0&&r.set("period",String(i));const u=await fetch(eg(`${ng}/projects/${encodeURIComponent(e)}/report.html?${r.toString()}`),{credentials:"same-origin",headers:{}});if(!u.ok)throw new pn(`Failed to download report: ${u.status}`,u.status);const h=await u.blob(),g=URL.createObjectURL(h),b=lj(u.headers.get("Content-Disposition"))??`canonry-report-${e}.html`,v=document.createElement("a");v.href=g,v.download=b,document.body.appendChild(v),v.click(),document.body.removeChild(v),URL.revokeObjectURL(g)}async function aJ(e,n){const i=await fetch(`${ng}/projects/${encodeURIComponent(e)}/results/export?format=${n}`,{credentials:"same-origin",headers:{}});if(!i.ok)throw new pn(`Failed to download results: ${i.status}`,i.status);const r=await i.blob(),u=URL.createObjectURL(r),h=lj(i.headers.get("Content-Disposition"))??`canonry-results-${e}.${n}`,g=document.createElement("a");g.href=u,g.download=h,document.body.appendChild(g),g.click(),document.body.removeChild(g),URL.revokeObjectURL(u)}function iJ(e,n){return be(()=>x6({client:ne,path:{name:e},body:{}}))}function sJ(e,n){return be(()=>y6({client:ne,path:{name:e},body:n}))}function oJ(e){return be(()=>b6({client:ne,path:{name:e}}))}function rJ(e,n){return be(()=>U6({client:ne,path:{name:e},body:n}))}function lJ(e,n){return be(()=>G6({client:ne,path:{name:e},body:n}))}function cJ(e,n){return be(()=>K6({client:ne,path:{name:e},body:n}))}function uJ(e,n,i){return be(()=>H6({client:ne,path:{name:e,id:n},body:i??{}}))}function dJ(e,n,i){return be(()=>Q6({client:ne,path:{name:e,id:n},body:{}}))}function mJ(e,n){return be(()=>A6({client:ne,path:{name:e},query:{runId:n}}))}function p$(e){if(!e||typeof e!="object")return;const n=e;if(!(typeof n.current!="string"||typeof n.latest!="string"||typeof n.url!="string"||typeof n.upgradeCommand!="string"))return{current:n.current,latest:n.latest,url:n.url,upgradeCommand:n.upgradeCommand}}async function h$(e,n){const i=GV(e);try{const r=await fetch(i,{credentials:"same-origin"});if(!r.ok)return{label:n,state:"error",detail:`${n} ${r.status}: ${r.statusText}`,statusCode:r.status,hint:KV(e,r.status)};const u=await r.json(),h=typeof u.version=="string"?u.version:"unknown",g=typeof u.databaseUrlConfigured=="boolean"?u.databaseUrlConfigured:void 0,b=typeof u.lastHeartbeatAt=="string"?u.lastHeartbeatAt:void 0,v=p$(u.updateAvailable),w=cV.safeParse(u.mcp),k=[h,g===!1?"database not configured":"database configured",b?`heartbeat ${b}`:void 0].filter(Boolean).join(" · ");return{label:n,state:"ok",detail:k,version:h,databaseConfigured:g,lastHeartbeatAt:b,...v?{updateAvailable:v}:{},...w.success?{mcp:w.data}:{}}}catch(r){return{label:n,state:"error",detail:r instanceof Error?r.message:"unreachable",hint:e==="/health"?`Request failed while checking ${i}. If this instance is served behind a sub-path, verify the dashboard basePath and reverse-proxy rewrites.`:void 0}}}function pJ(){return be(()=>E6({client:ne}))}function hJ(){return be(()=>z6({client:ne}))}function fJ(){return be(()=>I6({client:ne}))}function gJ(){return be(()=>D6({client:ne}))}function yJ(e){return be(()=>O6({client:ne,body:e?{release:e}:{}}))}function bJ(){return be(()=>P6({client:ne}))}function vJ(){return be(()=>q6({client:ne}))}function xJ(e){return be(()=>M6({client:ne,path:{release:e}}))}function wJ(e,n={}){return be(()=>L6({client:ne,path:{name:e},query:{release:n.release,excludeCrawlers:n.excludeCrawlers?"1":void 0,source:n.source}}))}function kJ(e,n={}){return be(()=>V6({client:ne,path:{name:e},query:{limit:n.limit!==void 0?String(n.limit):void 0,offset:n.offset!==void 0?String(n.offset):void 0,release:n.release,excludeCrawlers:n.excludeCrawlers?"1":void 0,source:n.source}}))}function SJ(e,n={}){return be(()=>$6({client:ne,path:{name:e},query:{source:n.source}}))}function jJ(e,n){return be(()=>B6({client:ne,path:{name:e},body:{release:void 0}}))}async function Lx(e,n){return be(()=>h_({client:ne,path:{name:e},query:n}))}async function f$(e,n){return be(()=>f_({client:ne,path:{name:e},body:{id:n}}))}async function g$(e,n){return be(()=>y_({client:ne,path:{name:e,id:n}}))}async function y$(e,n){return be(()=>g_({client:ne,path:{name:e,id:n}}))}const cj={account:null,canWrite:!0,isAdmin:!0},b$={account:null,canWrite:!1,isAdmin:!1};function v$(e){const n=e.scopes.includes(zx);return{account:null,canWrite:!e.readOnly&&n,isAdmin:e.projectId===null&&e.scopes.includes(zx)}}const uj=C.createContext(cj);function x$({account:e,apiKey:n,apiKeyPending:i=!1,children:r}){const u=i?b$:n?v$(n):e?{account:e,canWrite:e.role==="admin",isAdmin:e.role==="admin"}:cj;return c.jsx(uj.Provider,{value:u,children:r})}function oa(){return C.useContext(uj)}const dj="View only — your account cannot change this.";function rn(e){return(...n)=>{e(...n)}}const w$=6e3,k$=5,S$=180;let En=[],j$=0;const vf=new Set,xf=new Map,wf=new Map;function pd(){const e=[...En];for(const n of vf)n(e)}function sg(e){const n=xf.get(e);n&&(clearTimeout(n),xf.delete(e));const i=wf.get(e);i&&(clearTimeout(i),wf.delete(e))}function mj(e){sg(e);const n=En.length;En=En.filter(i=>i.id!==e),En.length!==n&&pd()}function Vx(e){sg(e.id),xf.set(e.id,setTimeout(()=>{kf(e.id)},e.durationMs))}function A$(e,n,i){return typeof e=="string"?{title:e,tone:n,durationMs:i}:e}function hn(e,n="negative",i=w$){const r=A$(e,n,i),u={id:String(++j$),title:r.title,detail:r.detail,tone:r.tone??n,durationMs:r.durationMs??i,dedupeKey:r.dedupeKey,cta:r.cta,state:"open"};if(r.dedupeKey){const h=En.find(g=>g.dedupeKey===r.dedupeKey);if(h){if((r.dedupeMode??"drop")==="drop")return h.id;const g={...h,title:u.title,detail:u.detail,tone:u.tone,durationMs:u.durationMs,cta:u.cta,state:"open"};return En=En.map(b=>b.id===h.id?g:b),pd(),Vx(g),h.id}}return En.length>=k$&&mj(En[0].id),En=[...En,u],pd(),Vx(u),u.id}function kf(e){const n=En.find(i=>i.id===e);!n||n.state==="closing"||(sg(e),En=En.map(i=>i.id===e?{...i,state:"closing"}:i),pd(),wf.set(e,setTimeout(()=>{mj(e)},S$)))}function C$(e){return vf.add(e),()=>{vf.delete(e)}}function $x(){return En}const N$=5*6e4,Yu=30*6e4,AJ=3e4,CJ=6e4,jr=3e4,_$=2e3,T$=3e4;function R$(){return new u4({defaultOptions:{queries:{staleTime:N$,retry:1,refetchOnWindowFocus:!1}},mutationCache:new d4({onError:(n,i,r,u)=>{u.meta?.skipGlobalErrorToast||hn({title:n instanceof Error?n.message:"An unexpected error occurred",tone:"negative"})}})})}const E$="modulepreload",z$=function(e,n){return new URL(e,n).href},Ux={},Ri=function(n,i,r){let u=Promise.resolve();if(i&&i.length>0){let w=function(k){return Promise.all(k.map(j=>Promise.resolve(j).then(T=>({status:"fulfilled",value:T}),T=>({status:"rejected",reason:T}))))};const g=document.getElementsByTagName("link"),b=document.querySelector("meta[property=csp-nonce]"),v=b?.nonce||b?.getAttribute("nonce");u=w(i.map(k=>{if(k=z$(k,r),k in Ux)return;Ux[k]=!0;const j=k.endsWith(".css"),T=j?'[rel="stylesheet"]':"";if(r)for(let G=g.length-1;G>=0;G--){const R=g[G];if(R.href===k&&(!j||R.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${k}"]${T}`))return;const _=document.createElement("link");if(_.rel=j?"stylesheet":E$,j||(_.as="script"),_.crossOrigin="",_.href=k,v&&_.setAttribute("nonce",v),document.head.appendChild(_),j)return new Promise((G,R)=>{_.addEventListener("load",G),_.addEventListener("error",()=>R(new Error(`Unable to preload CSS for ${k}`)))})}))}function h(g){const b=new Event("vite:preloadError",{cancelable:!0});if(b.payload=g,window.dispatchEvent(b),!b.defaultPrevented)throw g}return u.then(g=>{for(const b of g||[])b.status==="rejected"&&h(b.reason);return n().catch(h)})},og=C.createContext({view:null,publish:()=>()=>{}});function D$({children:e}){const[n,i]=C.useState(null),r=C.useCallback(u=>(i(u),()=>i(h=>h===u?null:h)),[]);return c.jsx(og.Provider,{value:C.useMemo(()=>({view:n,publish:r}),[n,r]),children:e})}function NJ(e,n){const{publish:i}=C.useContext(og),r=JSON.stringify(n);C.useEffect(()=>i({project:e,context:JSON.parse(r)}),[i,e,r])}function O$(e,n){const{view:i}=C.useContext(og);return i?.project===e&&i.context.view===n.view?i.context:n}var I$=(e=>(e.Clicks="clicks",e.Impressions="impressions",e.CTR="ctr",e.Position="position",e))(I$||{});const _J={clicks:"Clicks",impressions:"Impressions",ctr:"CTR",position:"Position"},TJ={clicks:"Clicks",impressions:"Impr",ctr:"CTR",position:"Pos"},P$=T0;function q$(e){const n=[];if(e.message&&n.push(e.message),e.providers)for(const[i,r]of Object.entries(e.providers)){const u=`[${i}] ${r.message}`;r.raw!==void 0?n.push(`${u}
|
|
52
|
+
Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.`)}for(const g of e.seen.entries()){const b=g[1];if(n===g[0]){h(g);continue}if(e.external){const w=e.external.registry.get(g[0])?.id;if(n!==g[0]&&w){h(g);continue}}if(e.metadataRegistry.get(g[0])?.id){h(g);continue}if(b.cycle){h(g);continue}if(b.count>1&&e.reused==="ref"){h(g);continue}}}function Dk(e,n){const i=e.seen.get(n);if(!i)throw new Error("Unprocessed schema. This is a bug in Zod.");const r=g=>{const b=e.seen.get(g);if(b.ref===null)return;const v=b.def??b.schema,w={...v},k=b.ref;if(b.ref=null,k){r(k);const T=e.seen.get(k),_=T.schema;if(_.$ref&&(e.target==="draft-07"||e.target==="draft-04"||e.target==="openapi-3.0")?(v.allOf=v.allOf??[],v.allOf.push(_)):Object.assign(v,_),Object.assign(v,w),g._zod.parent===k)for(const R in v)R==="$ref"||R==="allOf"||R in w||delete v[R];if(_.$ref&&T.def)for(const R in v)R==="$ref"||R==="allOf"||R in T.def&&JSON.stringify(v[R])===JSON.stringify(T.def[R])&&delete v[R]}const j=g._zod.parent;if(j&&j!==k){r(j);const T=e.seen.get(j);if(T?.schema.$ref&&(v.$ref=T.schema.$ref,T.def))for(const _ in v)_==="$ref"||_==="allOf"||_ in T.def&&JSON.stringify(v[_])===JSON.stringify(T.def[_])&&delete v[_]}e.override({zodSchema:g,jsonSchema:v,path:b.path??[]})};for(const g of[...e.seen.entries()].reverse())r(g[0]);const u={};if(e.target==="draft-2020-12"?u.$schema="https://json-schema.org/draft/2020-12/schema":e.target==="draft-07"?u.$schema="http://json-schema.org/draft-07/schema#":e.target==="draft-04"?u.$schema="http://json-schema.org/draft-04/schema#":e.target,e.external?.uri){const g=e.external.registry.get(n)?.id;if(!g)throw new Error("Schema is missing an `id` property");u.$id=e.external.uri(g)}Object.assign(u,i.def??i.schema);const h=e.external?.defs??{};for(const g of e.seen.entries()){const b=g[1];b.def&&b.defId&&(h[b.defId]=b.def)}e.external||Object.keys(h).length>0&&(e.target==="draft-2020-12"?u.$defs=h:u.definitions=h);try{const g=JSON.parse(JSON.stringify(u));return Object.defineProperty(g,"~standard",{value:{...n["~standard"],jsonSchema:{input:ed(n,"input",e.processors),output:ed(n,"output",e.processors)}},enumerable:!1,writable:!1}),g}catch{throw new Error("Error converting schema to JSON.")}}function On(e,n){const i=n??{seen:new Set};if(i.seen.has(e))return!1;i.seen.add(e);const r=e._zod.def;if(r.type==="transform")return!0;if(r.type==="array")return On(r.element,i);if(r.type==="set")return On(r.valueType,i);if(r.type==="lazy")return On(r.getter(),i);if(r.type==="promise"||r.type==="optional"||r.type==="nonoptional"||r.type==="nullable"||r.type==="readonly"||r.type==="default"||r.type==="prefault")return On(r.innerType,i);if(r.type==="intersection")return On(r.left,i)||On(r.right,i);if(r.type==="record"||r.type==="map")return On(r.keyType,i)||On(r.valueType,i);if(r.type==="pipe")return On(r.in,i)||On(r.out,i);if(r.type==="object"){for(const u in r.shape)if(On(r.shape[u],i))return!0;return!1}if(r.type==="union"){for(const u of r.options)if(On(u,i))return!0;return!1}if(r.type==="tuple"){for(const u of r.items)if(On(u,i))return!0;return!!(r.rest&&On(r.rest,i))}return!1}const xT=(e,n={})=>i=>{const r=Ek({...i,processors:n});return an(e,r),zk(r,e),Dk(r,e)},ed=(e,n,i={})=>r=>{const{libraryOptions:u,target:h}=r??{},g=Ek({...u??{},target:h,io:n,processors:i});return an(e,g),zk(g,e),Dk(g,e)},wT={guid:"uuid",url:"uri",datetime:"date-time",json_string:"json-string",regex:""},kT=(e,n,i,r)=>{const u=i;u.type="string";const{minimum:h,maximum:g,format:b,patterns:v,contentEncoding:w}=e._zod.bag;if(typeof h=="number"&&(u.minLength=h),typeof g=="number"&&(u.maxLength=g),b&&(u.format=wT[b]??b,u.format===""&&delete u.format,b==="time"&&delete u.format),w&&(u.contentEncoding=w),v&&v.size>0){const k=[...v];k.length===1?u.pattern=k[0].source:k.length>1&&(u.allOf=[...k.map(j=>({...n.target==="draft-07"||n.target==="draft-04"||n.target==="openapi-3.0"?{type:"string"}:{},pattern:j.source}))])}},ST=(e,n,i,r)=>{const u=i,{minimum:h,maximum:g,format:b,multipleOf:v,exclusiveMaximum:w,exclusiveMinimum:k}=e._zod.bag;typeof b=="string"&&b.includes("int")?u.type="integer":u.type="number",typeof k=="number"&&(n.target==="draft-04"||n.target==="openapi-3.0"?(u.minimum=k,u.exclusiveMinimum=!0):u.exclusiveMinimum=k),typeof h=="number"&&(u.minimum=h,typeof k=="number"&&n.target!=="draft-04"&&(k>=h?delete u.minimum:delete u.exclusiveMinimum)),typeof w=="number"&&(n.target==="draft-04"||n.target==="openapi-3.0"?(u.maximum=w,u.exclusiveMaximum=!0):u.exclusiveMaximum=w),typeof g=="number"&&(u.maximum=g,typeof w=="number"&&n.target!=="draft-04"&&(w<=g?delete u.maximum:delete u.exclusiveMaximum)),typeof v=="number"&&(u.multipleOf=v)},jT=(e,n,i,r)=>{i.type="boolean"},AT=(e,n,i,r)=>{n.target==="openapi-3.0"?(i.type="string",i.nullable=!0,i.enum=[null]):i.type="null"},CT=(e,n,i,r)=>{i.not={}},NT=(e,n,i,r)=>{},_T=(e,n,i,r)=>{const u=e._zod.def,h=ck(u.entries);h.every(g=>typeof g=="number")&&(i.type="number"),h.every(g=>typeof g=="string")&&(i.type="string"),i.enum=h},TT=(e,n,i,r)=>{const u=e._zod.def,h=[];for(const g of u.values)if(g===void 0){if(n.unrepresentable==="throw")throw new Error("Literal `undefined` cannot be represented in JSON Schema")}else if(typeof g=="bigint"){if(n.unrepresentable==="throw")throw new Error("BigInt literals cannot be represented in JSON Schema");h.push(Number(g))}else h.push(g);if(h.length!==0)if(h.length===1){const g=h[0];i.type=g===null?"null":typeof g,n.target==="draft-04"||n.target==="openapi-3.0"?i.enum=[g]:i.const=g}else h.every(g=>typeof g=="number")&&(i.type="number"),h.every(g=>typeof g=="string")&&(i.type="string"),h.every(g=>typeof g=="boolean")&&(i.type="boolean"),h.every(g=>g===null)&&(i.type="null"),i.enum=h},RT=(e,n,i,r)=>{if(n.unrepresentable==="throw")throw new Error("Custom types cannot be represented in JSON Schema")},ET=(e,n,i,r)=>{if(n.unrepresentable==="throw")throw new Error("Transforms cannot be represented in JSON Schema")},zT=(e,n,i,r)=>{const u=i,h=e._zod.def,{minimum:g,maximum:b}=e._zod.bag;typeof g=="number"&&(u.minItems=g),typeof b=="number"&&(u.maxItems=b),u.type="array",u.items=an(h.element,n,{...r,path:[...r.path,"items"]})},DT=(e,n,i,r)=>{const u=i,h=e._zod.def;u.type="object",u.properties={};const g=h.shape;for(const w in g)u.properties[w]=an(g[w],n,{...r,path:[...r.path,"properties",w]});const b=new Set(Object.keys(g)),v=new Set([...b].filter(w=>{const k=h.shape[w]._zod;return n.io==="input"?k.optin===void 0:k.optout===void 0}));v.size>0&&(u.required=Array.from(v)),h.catchall?._zod.def.type==="never"?u.additionalProperties=!1:h.catchall?h.catchall&&(u.additionalProperties=an(h.catchall,n,{...r,path:[...r.path,"additionalProperties"]})):n.io==="output"&&(u.additionalProperties=!1)},OT=(e,n,i,r)=>{const u=e._zod.def,h=u.inclusive===!1,g=u.options.map((b,v)=>an(b,n,{...r,path:[...r.path,h?"oneOf":"anyOf",v]}));h?i.oneOf=g:i.anyOf=g},IT=(e,n,i,r)=>{const u=e._zod.def,h=an(u.left,n,{...r,path:[...r.path,"allOf",0]}),g=an(u.right,n,{...r,path:[...r.path,"allOf",1]}),b=w=>"allOf"in w&&Object.keys(w).length===1,v=[...b(h)?h.allOf:[h],...b(g)?g.allOf:[g]];i.allOf=v},PT=(e,n,i,r)=>{const u=i,h=e._zod.def;u.type="object";const g=h.keyType,v=g._zod.bag?.patterns;if(h.mode==="loose"&&v&&v.size>0){const k=an(h.valueType,n,{...r,path:[...r.path,"patternProperties","*"]});u.patternProperties={};for(const j of v)u.patternProperties[j.source]=k}else(n.target==="draft-07"||n.target==="draft-2020-12")&&(u.propertyNames=an(h.keyType,n,{...r,path:[...r.path,"propertyNames"]})),u.additionalProperties=an(h.valueType,n,{...r,path:[...r.path,"additionalProperties"]});const w=g._zod.values;if(w){const k=[...w].filter(j=>typeof j=="string"||typeof j=="number");k.length>0&&(u.required=k)}},qT=(e,n,i,r)=>{const u=e._zod.def,h=an(u.innerType,n,r),g=n.seen.get(e);n.target==="openapi-3.0"?(g.ref=u.innerType,i.nullable=!0):i.anyOf=[h,{type:"null"}]},MT=(e,n,i,r)=>{const u=e._zod.def;an(u.innerType,n,r);const h=n.seen.get(e);h.ref=u.innerType},BT=(e,n,i,r)=>{const u=e._zod.def;an(u.innerType,n,r);const h=n.seen.get(e);h.ref=u.innerType,i.default=JSON.parse(JSON.stringify(u.defaultValue))},LT=(e,n,i,r)=>{const u=e._zod.def;an(u.innerType,n,r);const h=n.seen.get(e);h.ref=u.innerType,n.io==="input"&&(i._prefault=JSON.parse(JSON.stringify(u.defaultValue)))},VT=(e,n,i,r)=>{const u=e._zod.def;an(u.innerType,n,r);const h=n.seen.get(e);h.ref=u.innerType;let g;try{g=u.catchValue(void 0)}catch{throw new Error("Dynamic catch values are not supported in JSON Schema")}i.default=g},$T=(e,n,i,r)=>{const u=e._zod.def,h=n.io==="input"?u.in._zod.def.type==="transform"?u.out:u.in:u.out;an(h,n,r);const g=n.seen.get(e);g.ref=h},UT=(e,n,i,r)=>{const u=e._zod.def;an(u.innerType,n,r);const h=n.seen.get(e);h.ref=u.innerType,i.readOnly=!0},Ok=(e,n,i,r)=>{const u=e._zod.def;an(u.innerType,n,r);const h=n.seen.get(e);h.ref=u.innerType},GT=X("ZodISODateTime",(e,n)=>{$8.init(e,n),Ut.init(e,n)});function Ik(e){return F7(GT,e)}const KT=X("ZodISODate",(e,n)=>{U8.init(e,n),Ut.init(e,n)});function Pk(e){return Z7(KT,e)}const HT=X("ZodISOTime",(e,n)=>{G8.init(e,n),Ut.init(e,n)});function QT(e){return Y7(HT,e)}const FT=X("ZodISODuration",(e,n)=>{K8.init(e,n),Ut.init(e,n)});function ZT(e){return X7(FT,e)}const YT=(e,n)=>{pk.init(e,n),e.name="ZodError",Object.defineProperties(e,{format:{value:i=>O_(e,i)},flatten:{value:i=>D_(e,i)},addIssue:{value:i=>{e.issues.push(i),e.message=JSON.stringify(e.issues,Zh,2)}},addIssues:{value:i=>{e.issues.push(...i),e.message=JSON.stringify(e.issues,Zh,2)}},isEmpty:{get(){return e.issues.length===0}}})},Ca=X("ZodError",YT,{Parent:Error}),XT=$f(Ca),WT=Uf(Ca),JT=Sd(Ca),eR=jd(Ca),tR=q_(Ca),nR=M_(Ca),aR=B_(Ca),iR=L_(Ca),sR=V_(Ca),oR=$_(Ca),rR=U_(Ca),lR=G_(Ca),Mt=X("ZodType",(e,n)=>(Pt.init(e,n),Object.assign(e["~standard"],{jsonSchema:{input:ed(e,"input"),output:ed(e,"output")}}),e.toJSONSchema=xT(e,{}),e.def=n,e.type=n.type,Object.defineProperty(e,"_def",{value:n}),e.check=(...i)=>e.clone(vs(n,{checks:[...n.checks??[],...i.map(r=>typeof r=="function"?{_zod:{check:r,def:{check:"custom"},onattach:[]}}:r)]}),{parent:!0}),e.with=e.check,e.clone=(i,r)=>xs(e,i,r),e.brand=()=>e,e.register=((i,r)=>(i.add(e,r),e)),e.parse=(i,r)=>XT(e,i,r,{callee:e.parse}),e.safeParse=(i,r)=>JT(e,i,r),e.parseAsync=async(i,r)=>WT(e,i,r,{callee:e.parseAsync}),e.safeParseAsync=async(i,r)=>eR(e,i,r),e.spa=e.safeParseAsync,e.encode=(i,r)=>tR(e,i,r),e.decode=(i,r)=>nR(e,i,r),e.encodeAsync=async(i,r)=>aR(e,i,r),e.decodeAsync=async(i,r)=>iR(e,i,r),e.safeEncode=(i,r)=>sR(e,i,r),e.safeDecode=(i,r)=>oR(e,i,r),e.safeEncodeAsync=async(i,r)=>rR(e,i,r),e.safeDecodeAsync=async(i,r)=>lR(e,i,r),e.refine=(i,r)=>e.check(nE(i,r)),e.superRefine=i=>e.check(aE(i)),e.overwrite=i=>e.check(Nr(i)),e.optional=()=>xv(e),e.exactOptional=()=>UR(e),e.nullable=()=>wv(e),e.nullish=()=>xv(wv(e)),e.nonoptional=i=>ZR(e,i),e.array=()=>y(e),e.or=i=>Ze([e,i]),e.and=i=>MR(e,i),e.transform=i=>Wh(e,Lk(i)),e.default=i=>HR(e,i),e.prefault=i=>FR(e,i),e.catch=i=>XR(e,i),e.pipe=i=>Wh(e,i),e.readonly=()=>eE(e),e.describe=i=>{const r=e.clone();return Gl.add(r,{description:i}),r},Object.defineProperty(e,"description",{get(){return Gl.get(e)?.description},configurable:!0}),e.meta=(...i)=>{if(i.length===0)return Gl.get(e);const r=e.clone();return Gl.add(r,i[0]),r},e.isOptional=()=>e.safeParse(void 0).success,e.isNullable=()=>e.safeParse(null).success,e.apply=i=>i(e),e)),qk=X("_ZodString",(e,n)=>{Gf.init(e,n),Mt.init(e,n),e._zod.processJSONSchema=(r,u,h)=>kT(e,r,u);const i=e._zod.bag;e.format=i.format??null,e.minLength=i.minimum??null,e.maxLength=i.maximum??null,e.regex=(...r)=>e.check(sT(...r)),e.includes=(...r)=>e.check(lT(...r)),e.startsWith=(...r)=>e.check(cT(...r)),e.endsWith=(...r)=>e.check(uT(...r)),e.min=(...r)=>e.check(Ju(...r)),e.max=(...r)=>e.check(Tk(...r)),e.length=(...r)=>e.check(Rk(...r)),e.nonempty=(...r)=>e.check(Ju(1,...r)),e.lowercase=r=>e.check(oT(r)),e.uppercase=r=>e.check(rT(r)),e.trim=()=>e.check(mT()),e.normalize=(...r)=>e.check(dT(...r)),e.toLowerCase=()=>e.check(pT()),e.toUpperCase=()=>e.check(hT()),e.slugify=()=>e.check(fT())}),cR=X("ZodString",(e,n)=>{Gf.init(e,n),qk.init(e,n),e.email=i=>e.check(_7(uR,i)),e.url=i=>e.check(z7(mR,i)),e.jwt=i=>e.check(Q7(NR,i)),e.emoji=i=>e.check(D7(pR,i)),e.guid=i=>e.check(hv(bv,i)),e.uuid=i=>e.check(_k(Kl,i)),e.uuidv4=i=>e.check(T7(Kl,i)),e.uuidv6=i=>e.check(R7(Kl,i)),e.uuidv7=i=>e.check(E7(Kl,i)),e.nanoid=i=>e.check(O7(hR,i)),e.guid=i=>e.check(hv(bv,i)),e.cuid=i=>e.check(I7(fR,i)),e.cuid2=i=>e.check(P7(gR,i)),e.ulid=i=>e.check(q7(yR,i)),e.base64=i=>e.check(G7(jR,i)),e.base64url=i=>e.check(K7(AR,i)),e.xid=i=>e.check(M7(bR,i)),e.ksuid=i=>e.check(B7(vR,i)),e.ipv4=i=>e.check(L7(xR,i)),e.ipv6=i=>e.check(V7(wR,i)),e.cidrv4=i=>e.check($7(kR,i)),e.cidrv6=i=>e.check(U7(SR,i)),e.e164=i=>e.check(H7(CR,i)),e.datetime=i=>e.check(Ik(i)),e.date=i=>e.check(Pk(i)),e.time=i=>e.check(QT(i)),e.duration=i=>e.check(ZT(i))});function o(e){return N7(cR,e)}const Ut=X("ZodStringFormat",(e,n)=>{qt.init(e,n),qk.init(e,n)}),uR=X("ZodEmail",(e,n)=>{D8.init(e,n),Ut.init(e,n)}),bv=X("ZodGUID",(e,n)=>{E8.init(e,n),Ut.init(e,n)}),Kl=X("ZodUUID",(e,n)=>{z8.init(e,n),Ut.init(e,n)});function dR(e){return _k(Kl,e)}const mR=X("ZodURL",(e,n)=>{O8.init(e,n),Ut.init(e,n)}),pR=X("ZodEmoji",(e,n)=>{I8.init(e,n),Ut.init(e,n)}),hR=X("ZodNanoID",(e,n)=>{P8.init(e,n),Ut.init(e,n)}),fR=X("ZodCUID",(e,n)=>{q8.init(e,n),Ut.init(e,n)}),gR=X("ZodCUID2",(e,n)=>{M8.init(e,n),Ut.init(e,n)}),yR=X("ZodULID",(e,n)=>{B8.init(e,n),Ut.init(e,n)}),bR=X("ZodXID",(e,n)=>{L8.init(e,n),Ut.init(e,n)}),vR=X("ZodKSUID",(e,n)=>{V8.init(e,n),Ut.init(e,n)}),xR=X("ZodIPv4",(e,n)=>{H8.init(e,n),Ut.init(e,n)}),wR=X("ZodIPv6",(e,n)=>{Q8.init(e,n),Ut.init(e,n)}),kR=X("ZodCIDRv4",(e,n)=>{F8.init(e,n),Ut.init(e,n)}),SR=X("ZodCIDRv6",(e,n)=>{Z8.init(e,n),Ut.init(e,n)}),jR=X("ZodBase64",(e,n)=>{Y8.init(e,n),Ut.init(e,n)}),AR=X("ZodBase64URL",(e,n)=>{W8.init(e,n),Ut.init(e,n)}),CR=X("ZodE164",(e,n)=>{J8.init(e,n),Ut.init(e,n)}),NR=X("ZodJWT",(e,n)=>{t7.init(e,n),Ut.init(e,n)}),Kf=X("ZodNumber",(e,n)=>{Sk.init(e,n),Mt.init(e,n),e._zod.processJSONSchema=(r,u,h)=>ST(e,r,u),e.gt=(r,u)=>e.check(gv(r,u)),e.gte=(r,u)=>e.check(fh(r,u)),e.min=(r,u)=>e.check(fh(r,u)),e.lt=(r,u)=>e.check(fv(r,u)),e.lte=(r,u)=>e.check(hh(r,u)),e.max=(r,u)=>e.check(hh(r,u)),e.int=r=>e.check(vv(r)),e.safe=r=>e.check(vv(r)),e.positive=r=>e.check(gv(0,r)),e.nonnegative=r=>e.check(fh(0,r)),e.negative=r=>e.check(fv(0,r)),e.nonpositive=r=>e.check(hh(0,r)),e.multipleOf=(r,u)=>e.check(yv(r,u)),e.step=(r,u)=>e.check(yv(r,u)),e.finite=()=>e;const i=e._zod.bag;e.minValue=Math.max(i.minimum??Number.NEGATIVE_INFINITY,i.exclusiveMinimum??Number.NEGATIVE_INFINITY)??null,e.maxValue=Math.min(i.maximum??Number.POSITIVE_INFINITY,i.exclusiveMaximum??Number.POSITIVE_INFINITY)??null,e.isInt=(i.format??"").includes("int")||Number.isSafeInteger(i.multipleOf??.5),e.isFinite=!0,e.format=i.format??null});function d(e){return W7(Kf,e)}const _R=X("ZodNumberFormat",(e,n)=>{n7.init(e,n),Kf.init(e,n)});function vv(e){return eT(_R,e)}const TR=X("ZodBoolean",(e,n)=>{a7.init(e,n),Mt.init(e,n),e._zod.processJSONSchema=(i,r,u)=>jT(e,i,r)});function N(e){return tT(TR,e)}const RR=X("ZodNull",(e,n)=>{i7.init(e,n),Mt.init(e,n),e._zod.processJSONSchema=(i,r,u)=>AT(e,i,r)});function de(e){return nT(RR,e)}const ER=X("ZodUnknown",(e,n)=>{s7.init(e,n),Mt.init(e,n),e._zod.processJSONSchema=(i,r,u)=>NT()});function fn(){return aT(ER)}const zR=X("ZodNever",(e,n)=>{o7.init(e,n),Mt.init(e,n),e._zod.processJSONSchema=(i,r,u)=>CT(e,i,r)});function DR(e){return iT(zR,e)}const OR=X("ZodArray",(e,n)=>{r7.init(e,n),Mt.init(e,n),e._zod.processJSONSchema=(i,r,u)=>zT(e,i,r,u),e.element=n.element,e.min=(i,r)=>e.check(Ju(i,r)),e.nonempty=i=>e.check(Ju(1,i)),e.max=(i,r)=>e.check(Tk(i,r)),e.length=(i,r)=>e.check(Rk(i,r)),e.unwrap=()=>e.element});function y(e,n){return gT(OR,e,n)}const Mk=X("ZodObject",(e,n)=>{c7.init(e,n),Mt.init(e,n),e._zod.processJSONSchema=(i,r,u)=>DT(e,i,r,u),vt(e,"shape",()=>n.shape),e.keyof=()=>A(Object.keys(e._zod.def.shape)),e.catchall=i=>e.clone({...e._zod.def,catchall:i}),e.passthrough=()=>e.clone({...e._zod.def,catchall:fn()}),e.loose=()=>e.clone({...e._zod.def,catchall:fn()}),e.strict=()=>e.clone({...e._zod.def,catchall:DR()}),e.strip=()=>e.clone({...e._zod.def,catchall:void 0}),e.extend=i=>__(e,i),e.safeExtend=i=>T_(e,i),e.merge=i=>R_(e,i),e.pick=i=>C_(e,i),e.omit=i=>N_(e,i),e.partial=(...i)=>E_(Vk,e,i[0]),e.required=(...i)=>z_($k,e,i[0])});function m(e,n){const i={type:"object",shape:e??{},...Te(n)};return new Mk(i)}function IR(e,n){return new Mk({type:"object",shape:e,catchall:fn(),...Te(n)})}const Bk=X("ZodUnion",(e,n)=>{Ck.init(e,n),Mt.init(e,n),e._zod.processJSONSchema=(i,r,u)=>OT(e,i,r,u),e.options=n.options});function Ze(e,n){return new Bk({type:"union",options:e,...Te(n)})}const PR=X("ZodDiscriminatedUnion",(e,n)=>{Bk.init(e,n),u7.init(e,n)});function qe(e,n,i){return new PR({type:"union",options:n,discriminator:e,...Te(i)})}const qR=X("ZodIntersection",(e,n)=>{d7.init(e,n),Mt.init(e,n),e._zod.processJSONSchema=(i,r,u)=>IT(e,i,r,u)});function MR(e,n){return new qR({type:"intersection",left:e,right:n})}const BR=X("ZodRecord",(e,n)=>{m7.init(e,n),Mt.init(e,n),e._zod.processJSONSchema=(i,r,u)=>PT(e,i,r,u),e.keyType=n.keyType,e.valueType=n.valueType});function Ue(e,n,i){return new BR({type:"record",keyType:e,valueType:n,...Te(i)})}const Xh=X("ZodEnum",(e,n)=>{p7.init(e,n),Mt.init(e,n),e._zod.processJSONSchema=(r,u,h)=>_T(e,r,u),e.enum=n.entries,e.options=Object.values(n.entries);const i=new Set(Object.keys(n.entries));e.extract=(r,u)=>{const h={};for(const g of r)if(i.has(g))h[g]=n.entries[g];else throw new Error(`Key ${g} not found in enum`);return new Xh({...n,checks:[],...Te(u),entries:h})},e.exclude=(r,u)=>{const h={...n.entries};for(const g of r)if(i.has(g))delete h[g];else throw new Error(`Key ${g} not found in enum`);return new Xh({...n,checks:[],...Te(u),entries:h})}});function A(e,n){const i=Array.isArray(e)?Object.fromEntries(e.map(r=>[r,r])):e;return new Xh({type:"enum",entries:i,...Te(n)})}const LR=X("ZodLiteral",(e,n)=>{h7.init(e,n),Mt.init(e,n),e._zod.processJSONSchema=(i,r,u)=>TT(e,i,r),e.values=new Set(n.values),Object.defineProperty(e,"value",{get(){if(n.values.length>1)throw new Error("This schema contains multiple valid literal values. Use `.values` instead.");return n.values[0]}})});function z(e,n){return new LR({type:"literal",values:Array.isArray(e)?e:[e],...Te(n)})}const VR=X("ZodTransform",(e,n)=>{f7.init(e,n),Mt.init(e,n),e._zod.processJSONSchema=(i,r,u)=>ET(e,i),e._zod.parse=(i,r)=>{if(r.direction==="backward")throw new rk(e.constructor.name);i.addIssue=h=>{if(typeof h=="string")i.issues.push(Jl(h,i.value,n));else{const g=h;g.fatal&&(g.continue=!1),g.code??(g.code="custom"),g.input??(g.input=i.value),g.inst??(g.inst=e),i.issues.push(Jl(g))}};const u=n.transform(i.value,i);return u instanceof Promise?u.then(h=>(i.value=h,i)):(i.value=u,i)}});function Lk(e){return new VR({type:"transform",transform:e})}const Vk=X("ZodOptional",(e,n)=>{Nk.init(e,n),Mt.init(e,n),e._zod.processJSONSchema=(i,r,u)=>Ok(e,i,r,u),e.unwrap=()=>e._zod.def.innerType});function xv(e){return new Vk({type:"optional",innerType:e})}const $R=X("ZodExactOptional",(e,n)=>{g7.init(e,n),Mt.init(e,n),e._zod.processJSONSchema=(i,r,u)=>Ok(e,i,r,u),e.unwrap=()=>e._zod.def.innerType});function UR(e){return new $R({type:"optional",innerType:e})}const GR=X("ZodNullable",(e,n)=>{y7.init(e,n),Mt.init(e,n),e._zod.processJSONSchema=(i,r,u)=>qT(e,i,r,u),e.unwrap=()=>e._zod.def.innerType});function wv(e){return new GR({type:"nullable",innerType:e})}const KR=X("ZodDefault",(e,n)=>{b7.init(e,n),Mt.init(e,n),e._zod.processJSONSchema=(i,r,u)=>BT(e,i,r,u),e.unwrap=()=>e._zod.def.innerType,e.removeDefault=e.unwrap});function HR(e,n){return new KR({type:"default",innerType:e,get defaultValue(){return typeof n=="function"?n():dk(n)}})}const QR=X("ZodPrefault",(e,n)=>{v7.init(e,n),Mt.init(e,n),e._zod.processJSONSchema=(i,r,u)=>LT(e,i,r,u),e.unwrap=()=>e._zod.def.innerType});function FR(e,n){return new QR({type:"prefault",innerType:e,get defaultValue(){return typeof n=="function"?n():dk(n)}})}const $k=X("ZodNonOptional",(e,n)=>{x7.init(e,n),Mt.init(e,n),e._zod.processJSONSchema=(i,r,u)=>MT(e,i,r,u),e.unwrap=()=>e._zod.def.innerType});function ZR(e,n){return new $k({type:"nonoptional",innerType:e,...Te(n)})}const YR=X("ZodCatch",(e,n)=>{w7.init(e,n),Mt.init(e,n),e._zod.processJSONSchema=(i,r,u)=>VT(e,i,r,u),e.unwrap=()=>e._zod.def.innerType,e.removeCatch=e.unwrap});function XR(e,n){return new YR({type:"catch",innerType:e,catchValue:typeof n=="function"?n:()=>n})}const WR=X("ZodPipe",(e,n)=>{k7.init(e,n),Mt.init(e,n),e._zod.processJSONSchema=(i,r,u)=>$T(e,i,r,u),e.in=n.in,e.out=n.out});function Wh(e,n){return new WR({type:"pipe",in:e,out:n})}const JR=X("ZodReadonly",(e,n)=>{S7.init(e,n),Mt.init(e,n),e._zod.processJSONSchema=(i,r,u)=>UT(e,i,r,u),e.unwrap=()=>e._zod.def.innerType});function eE(e){return new JR({type:"readonly",innerType:e})}const tE=X("ZodCustom",(e,n)=>{j7.init(e,n),Mt.init(e,n),e._zod.processJSONSchema=(i,r,u)=>RT(e,i)});function nE(e,n={}){return yT(tE,e,n)}function aE(e){return bT(e)}function Hf(e,n){return Wh(Lk(e),n)}const ve={custom:"custom"};function ec(e){return J7(Kf,e)}const Uk=m({id:o(),name:o(),keyPrefix:o(),scopes:y(o()),projectId:o().nullable(),projectName:o().nullable(),readOnly:N(),operator:N().optional(),createdAt:o(),lastUsedAt:o().nullable(),revokedAt:o().nullable()});m({keys:y(Uk)});m({name:o().min(1).max(100),scopes:y(o()).min(1).optional(),projectId:o().optional()});Uk.extend({key:o()});const iE=m({maxConcurrency:d().int().positive(),maxRequestsPerMinute:d().int().positive(),maxRequestsPerDay:d().int().positive()}),gt=o().min(1),Qf=Ue(o(),o().trim().min(1));o().min(1);const cn=m({label:o().min(1),city:o().min(1),region:o().min(1),country:o().length(2),timezone:o().optional()}),Ff=A(["answer-visibility","traffic-sync","gbp-sync","data-refresh","backlinks-sync","site-audit","ads-sync","doctor"]);Ff.enum;const Zf=m({everyDays:d().int().min(1).max(3650),startDate:o().date(),time:o().regex(/^([01]\d|2[0-3]):[0-5]\d$/,"Time must be HH:mm")}).strict();m({id:o(),projectId:o(),kind:Ff,cronExpr:o(),recurrence:Zf.nullable().optional(),preset:o().nullable().optional(),timezone:o().default("UTC"),enabled:N().default(!0),providers:y(gt).default([]),sourceId:o().nullable().optional(),lastRunAt:o().nullable().optional(),nextRunAt:o().nullable().optional(),createdAt:o(),updatedAt:o()});const sE=o().datetime();m({kind:Ff.optional(),preset:o().min(1).optional(),cron:o().min(1).optional(),recurrence:Zf.optional(),timezone:o().optional().default("UTC"),enabled:N().optional().default(!0),providers:y(gt).optional().default([]),sourceId:o().optional(),expectedUpdatedAt:sE.nullable().optional()}).refine(e=>[e.preset,e.cron,e.recurrence].filter(n=>n!==void 0).length===1,{message:'Exactly one of "preset", "cron", or "recurrence" must be provided'});const Yf=A(["citation.lost","citation.gained","run.completed","run.failed","insight.critical","insight.high","health.degraded","health.recovered"]);m({id:o(),projectId:o(),channel:z("webhook"),url:o().url(),urlDisplay:o(),urlHost:o(),events:y(Yf),enabled:N().default(!0),source:o().optional(),webhookSecret:o().optional(),createdAt:o(),updatedAt:o()});m({channel:z("webhook"),url:o().url(),events:y(Yf).min(1),source:o().optional()});class oE extends Error{code;statusCode;details;constructor(n,i,r,u){super(i),this.name="AppError",this.code=n,this.statusCode=r,this.details=u}toJSON(){return{error:{code:this.code,message:this.message,...this.details?{details:this.details}:{}}}}}function kv(e,n){return new oE("VALIDATION_ERROR",e,400,n)}function lr(e){if(e instanceof Error)return e.message;if(typeof e=="string")return e;if(e==null)return"unknown error";try{const n=JSON.stringify(e);if(n!==void 0)return n}catch{}try{return String(e)}catch{return"unknown error"}}function gh(e,n=!1){const i=new Set,r=[];for(const u of e){const h=n?u.toLowerCase():u;i.has(h)||(i.add(h),r.push(u))}return r}function Sv(e){try{const n=e.includes("://"),i=new URL(n?e:`https://${e}`);if(!n&&(i.pathname!=="/"||i.search||i.hash)||i.username||i.password||i.port)return null;const r=i.hostname.trim().toLowerCase().replace(/^www\./,"");return!r||r.includes("/")||r.includes("?")||r.includes("#")?null:r}catch{return null}}const rE=o().trim().min(1).refine(e=>Sv(e)!==null,{message:"Marketing hosts must be valid hostnames without credentials or ports"}).overwrite(e=>Sv(e)??e),lE=o().trim().min(1),cE=o().trim().regex(/^[a-z]\w{0,39}$/i,{message:"GA4 event names must start with a letter and contain only letters, numbers, or underscores"}),Xf=m({marketingHosts:y(rE).overwrite(e=>gh(e,!0)),brandTerms:y(lE).overwrite(e=>gh(e,!0)),leadEventNames:y(cE).overwrite(e=>gh(e))});function uE(){return{marketingHosts:[],brandTerms:[],leadEventNames:["generate_lead"]}}const yh=Object.freeze({marketingHosts:Object.freeze([]),brandTerms:Object.freeze([]),leadEventNames:Object.freeze(["generate_lead"])}),Gk=()=>uE(),jv=A(["never-synced","ready","error"]),dE=A(["landing-page","channel"]),mE=A(["30d","60d","90d"]),pE=A(["marketing","all"]),Hl=Pk(),oc=m({label:A(["earliest","middle","previous","latest"]),startDate:Hl,endDate:Hl}),bh=oc.extend({sessions:d().int().nonnegative()}),Av=oc.extend({eventCount:d().int().nonnegative()}),Cv=oc.extend({clicks:d().int().nonnegative(),impressions:d().int().nonnegative()}),hE=oc.extend({propertyClicks:d().int().nonnegative(),propertyImpressions:d().int().nonnegative(),reportedQueryClicks:d().int().nonnegative(),reportedQueryImpressions:d().int().nonnegative(),brandedClicks:d().int().nonnegative(),brandedImpressions:d().int().nonnegative(),nonBrandedClicks:d().int().nonnegative(),nonBrandedImpressions:d().int().nonnegative(),unreportedClicks:d().int().nonnegative(),unreportedImpressions:d().int().nonnegative()}),fE=oc.extend({sessions:d().int().nonnegative(),engagementRate:d().min(0).max(1).nullable(),dailyTotalUsers:d().int().nonnegative().nullable(),dailyNewUsers:d().int().nonnegative().nullable(),metricsAvailable:N(),daysInPeriod:d().int().nonnegative(),daysWithEngagementRate:d().int().nonnegative(),daysWithUserSplit:d().int().nonnegative()}),gE=m({window:mE,bucketDays:z(30),filters:m({hostScope:pE,marketingHosts:y(o()),pathPrefix:o().nullable(),brandTerms:y(o()),queryMixScope:z("property")}),acquisition:m({status:jv,error:o().nullable(),syncedAt:o().datetime().nullable(),periods:y(bh),channels:y(m({channelGroup:o(),periods:y(bh)})),pages:y(m({hostName:o(),landingPage:o(),periods:y(bh)}))}),leads:m({status:jv,error:o().nullable(),syncedAt:o().datetime().nullable(),attributionScope:dE.nullable(),hostAndPathFiltersApplied:N(),periods:y(Av),channels:y(m({channelGroup:o(),periods:y(Av)}))}),engagement:m({status:A(["ready","unavailable"]),availableFromDate:Hl.nullable(),latestDate:Hl.nullable(),periods:y(fE)}),searchDemand:m({status:A(["ready","unavailable"]),periods:y(hE),queries:y(m({query:o(),classification:A(["branded","non-branded"]),periods:y(Cv)})),pages:y(m({hostName:o(),landingPage:o(),periods:y(Cv)})),latestDate:Hl.nullable()})}),yE=/[\0-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,bE=/[\0-\x1F\x7F-\x9F]/,vE=/[!-#%-\*,-\/:;\?@\[-\]_\{\}\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061D-\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B4E\u1B4F\u1B5A-\u1B60\u1B7D-\u1B7F\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52-\u2E5D\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]|\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD803[\uDD6E\uDEAD\uDED0\uDF55-\uDF59\uDF86-\uDF89]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9\uDFD4\uDFD5\uDFD7\uDFD8]|\uD805[\uDC4B-\uDC4F\uDC5A\uDC5B\uDC5D\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDE60-\uDE6C\uDEB9\uDF3C-\uDF3E]|\uD806[\uDC3B\uDD44-\uDD46\uDDE2\uDE3F-\uDE46\uDE9A-\uDE9C\uDE9E-\uDEA2\uDF00-\uDF09\uDFE1]|\uD807[\uDC41-\uDC45\uDC70\uDC71\uDEF7\uDEF8\uDF43-\uDF4F\uDFFF]|\uD809[\uDC70-\uDC74]|\uD80B[\uDFF1\uDFF2]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD81B[\uDD6D-\uDD6F\uDE97-\uDE9A\uDFE2]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]|\uD839\uDDFF|\uD83A[\uDD5E\uDD5F]/,xE=/[ \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]/;var wE=class{src_Any=yE.source;src_Cc=bE.source;src_Z=xE.source;src_P=vE.source;src_ZPCc=[this.src_Z,this.src_P,this.src_Cc].join("|");src_ZCc=[this.src_Z,this.src_Cc].join("|");cache={};opts={maxLength:1e4,urlAuth:!1,schema_names:[]};constructor(e={}){this.opts={...this.opts,...e}}set(e={}){return this.opts={...this.opts,...e},this.cache={},this}escapeRE(e){return e.replace(/[.?*+^$[\]\\(){}|-]/g,"\\$&")}nestedPairRE(e,n,i=4){const r=this.escapeRE(e),u=this.escapeRE(n),h=`(?:(?!${this.src_ZCc}|${r}|${u}).)`;let g=`${r}${h}{0,1000}${u}`;for(let b=2;b<=i;b++)g=`${r}(?:${h}|${g}){0,1000}${u}`;return g}get_text_separators(){return this.cache.text_separators??=/[><\uff5c]/}get_pseudo_letter(){return this.cache.src_pseudo_letter??=new RegExp(`(?:(?!${this.get_text_separators().source}|${this.src_ZPCc})${this.src_Any})`)}get_ipv4_addr(){return this.cache.src_ip4??=new RegExp("(?:(?:25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])[.]){3}(?:25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])")}get_ipv6_addr(){const e="[0-9A-Fa-f]{1,4}",n=`(?:(?:${e}:${e})|${this.get_ipv4_addr().source})`;return this.cache.src_ip6_addr??=new RegExp(`(?:(?:${e}:){6}${n}|::(?:${e}:){5}${n}|(?:${e})?::(?:${e}:){4}${n}|(?:(?:${e}:){0,1}${e})?::(?:${e}:){3}${n}|(?:(?:${e}:){0,2}${e})?::(?:${e}:){2}${n}|(?:(?:${e}:){0,3}${e})?::${e}:${n}|(?:(?:${e}:){0,4}${e})?::${n}|(?:(?:${e}:){0,5}${e})?::${e}|(?:(?:${e}:){0,6}${e})?::)`)}get_ipv6_url_host(){return this.cache.src_ip6_host??=new RegExp(`\\[${this.get_ipv6_addr().source}\\]`)}get_ipv6_mail_host(){return this.cache.src_ipv6_mail_host??=new RegExp(`\\[IPv6:${this.get_ipv6_addr().source}\\]`)}get_auth(){return this.cache.src_auth??=new RegExp(`(?:(?:(?!${this.src_ZCc}|[@/\\[\\]()]).){1,50}@)?`)}get_port(){return this.cache.src_port??=new RegExp("(?::(?:6(?:[0-4]\\d{3}|5(?:[0-4]\\d{2}|5(?:[0-2]\\d|3[0-5])))|[1-5]?\\d{1,4}))?")}get_host_terminator(){return this.cache.src_host_terminator??=new RegExp(`(?=$|${this.get_text_separators().source}|${this.src_ZPCc})(?!${this.opts["---"]?"-(?!--)|":"-|"}_|:\\d|\\.-|\\.(?!$|${this.src_ZPCc}))`)}get_path_terminator(){return this.cache.src_path_terminator??=new RegExp(`${this.src_ZPCc}|${this.get_text_separators().source}`)}get_path(){return this.cache.src_path??=new RegExp(`(?:[/?#](?:${this.nestedPairRE("[","]")}|${this.nestedPairRE("(",")")}|${this.nestedPairRE("{","}")}|\\"(?:(?!${this.src_ZCc}|["]).){1,100}\\"|\\'(?:(?!${this.src_ZCc}|[']).){1,100}\\'|\\'(?=${this.get_pseudo_letter().source}|[-])|\\.{2,20}[:]?[a-zA-Z0-9%/&]|\\.(?!${this.src_ZCc}|[.]|$)|`+(this.opts["---"]?"\\-(?!--(?:[^-]|$))(?:-{0,19})|":"\\-{1,20}|")+`,(?!${this.src_ZCc}|$)|;(?!${this.src_ZCc}|$)|\\!{1,20}(?!${this.src_ZCc}|[!]|$)|\\?(?!${this.src_ZCc}|[?]|$)|`+this.get_path_extra().source+`[\\\\/:%@#&=_~*]|(?!${this.get_path_terminator().source}).){1,${this.opts.maxLength}}|\\/)?`)}get_mail_name(){return this.cache.src_mail_name??=new RegExp("[-!#$%&'*+/=?^_`{|}~a-zA-Z0-9](?:[-!#$%&'*+/=?^_`{|}~a-zA-Z0-9]|[.](?=[-!#$%&'*+/=?^_`{|}~a-zA-Z0-9])){0,63}")}get_xn(){return this.cache.src_xn??=new RegExp("xn--[a-z0-9\\-]{1,59}")}get_tld(){if(this.cache.tld)return this.cache.tld;const e=[...new Set(this.opts.tlds||[])].sort().reverse().join("|");return this.cache.tld=new RegExp(`${e||"$#none#$"}|${this.get_xn().source}`),this.cache.tld}get_domain_root(){return this.cache.src_domain_root??=new RegExp("(?:"+this.get_xn().source+`|${this.get_pseudo_letter().source}{1,63})`)}get_domain(){return this.cache.src_domain??=new RegExp("(?:"+this.get_xn().source+`|(?:${this.get_pseudo_letter().source})|(?:${this.get_pseudo_letter().source}(?:-|${this.get_pseudo_letter().source}){0,61}${this.get_pseudo_letter().source}))`)}get_url_host_port(){return this.cache.url_host_port??=new RegExp("(?:"+this.get_ipv6_url_host().source+`|(?:(?:(?:${this.get_domain().source})\\.){0,10}${this.get_domain().source}))`+this.get_port().source+this.get_host_terminator().source)}get_fuzzy_url_host_port(){return this.cache.fuzzy_url_host_port??=new RegExp("(?:"+(this.opts.fuzzyIP?this.get_ipv4_addr().source+"|":"")+`(?:(?:(?:${this.get_domain().source})\\.){1,10}(?:${this.get_tld().source})))`+this.get_host_terminator().source)}get_mail_host(){return this.cache.src_mail_host??=new RegExp("(?:"+this.get_ipv6_mail_host().source+`|(?:(?:(?:${this.get_domain().source})\\.){0,4}${this.get_domain().source}))`+this.get_host_terminator().source)}get_fuzzy_mail_host(){return this.cache.src_fuzzy_mail_host??=new RegExp("(?:"+this.get_ipv6_mail_host().source+`|(?:(?:(?:${this.get_domain().source})[.]){1,4}${this.get_domain_root().source}))`+this.get_host_terminator().source)}get_path_extra(){return this.cache.src_path_extra??=new RegExp("")}get_fuzzy_mail_host_search(){return this.cache.mail_fuzzy_host_search??=new RegExp(`@${this.get_fuzzy_mail_host().source}`,"ig")}get_fuzzy_link_search(){return this.cache.link_fuzzy_search??=new RegExp(`(^|(?![.:/\\-_@])(?:[$+<=>^\`||]|${this.src_ZPCc}))(?:(?![$+<=>^\`||])${this.get_fuzzy_url_host_port().source}${this.get_path().source})`,"ig")}get_http_validator(){return this.cache.http_validator??=new RegExp("\\/\\/"+(this.opts.urlAuth?this.get_auth().source:"")+this.get_url_host_port().source+this.get_path().source,"iy")}get_relative_proto_validator(){return this.cache.relative_proto_validator??=new RegExp((this.opts.urlAuth?this.get_auth().source:"")+`(?:localhost|${this.get_ipv6_url_host().source}|(?:(?:${this.get_domain().source})[.]){1,10}${this.get_domain_root().source})`+this.get_port().source+this.get_host_terminator().source+this.get_path().source,"iy")}get_mail_name_validator(){return this.cache.mail_name_validator??=new RegExp(`(?:^|${this.get_text_separators().source}|"|\\(|${this.src_ZCc})(${this.get_mail_name().source})$`)}get_mailto_validator(){return this.cache.mailto_validator??=new RegExp(`${this.get_mail_name().source}@${this.get_mail_host().source}`,"iy")}get_schema_names(){return this.cache.schema_names??=new RegExp((this.opts.schema_names||[]).map(e=>this.escapeRE(e)).join("|"))}get_schema_search(){return this.cache.schema_search??=new RegExp(`(^|(?!_)(?:[><|]|${this.src_ZPCc}))(${this.get_schema_names().source})`,"ig")}get_schema_at_start(){return this.cache.schema_at_start??=new RegExp(`^${this.get_schema_search().source}`,"i")}},vh={validate:(e,n,i)=>{const r=i.re.get_http_validator();r.lastIndex=n;const u=r.exec(e);return u?u[0].length:0},normalize:(e,n)=>n.normalize(e)},kE={"http:":vh,"https:":vh,"ftp:":vh,"//":{validate:function(e,n,i){const r=i.re.get_relative_proto_validator();r.lastIndex=n;const u=r.exec(e);return u?n>=3&&e[n-3]===":"||n>=3&&e[n-3]==="/"?0:u[0].length:0},normalize:(e,n)=>n.normalize(e)},"mailto:":{validate:function(e,n,i){const r=i.re.get_mailto_validator();r.lastIndex=n;const u=r.exec(e);return u?u[0].length:0},normalize:(e,n)=>n.normalize(e)}},SE="a:cdefgilmnoqrstuwxz|b:abdefghijmnorstvwyz|c:acdfghiklmnoruvwxyz|d:ejkmoz|e:cegrstu|f:ijkmor|g:abdefghilmnpqrstuwy|h:kmnrtu|i:delmnoqrst|j:emop|k:eghimnprwyz|l:abcikrstuvy|m:acdeghklmnopqrstuvwxyz|n:acefgilopruz|o:m|p:aefghklmnrstwy|q:a|r:eosuw|s:abcdeghijklmnortuvxyz|t:cdfghjklmnortvwz|u:agksyz|v:aceginu|w:fs|y:et|z:amw",jE="biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф";function AE(){const e=jE.split("|");return SE.split("|").forEach(n=>{const i=n.indexOf(":"),r=n.slice(0,i);for(const u of n.slice(i+1))e.push(r+u)}),e}var CE={fuzzyLink:!1,fuzzyEmail:!0,fuzzyIP:!1,"---":!1,tlds:AE(),urlAuth:!1,maxLength:1e4},Nv=class{schema;index;lastIndex;raw;text;url;constructor(e,n,i,r){const u=e.slice(i,r);this.schema=n.toLowerCase(),this.index=i,this.lastIndex=r,this.raw=u,this.text=u,this.url=u}},NE=class{__opts__;__schemas__;re;constructor(e={}){const{rebuilder:n,...i}=e;this.__opts__={...CE,...i},this.__schemas__={...kE},this.re=n||new wE,this.re.set({...this.__opts__,schema_names:Object.keys(this.__schemas__)})}add(e,n=null){if(!n)delete this.__schemas__[e];else{const i={normalize:(r,u)=>u.normalize(r),...n};this.__schemas__[e]=i}return this.re.set({...this.__opts__,schema_names:Object.keys(this.__schemas__)}),this}set(e={}){return this.__opts__={...this.__opts__,...e},this.re.set({...this.__opts__,schema_names:Object.keys(this.__schemas__)}),this}test(e){if(!e.length)return!1;let n,i;for(i=this.re.get_schema_search(),i.lastIndex=0;(n=i.exec(e))!==null;)if(this.testSchemaAt(e,n[2],i.lastIndex))return!0;if(this.__opts__.fuzzyLink&&this.__schemas__["http:"]&&(i=this.re.get_fuzzy_link_search(),i.lastIndex=0,i.exec(e)!==null))return!0;if(this.__opts__.fuzzyEmail&&this.__schemas__["mailto:"]&&e.indexOf("@")>=0){const r=this.re.get_fuzzy_mail_host_search(),u=this.re.get_mail_name_validator();for(r.lastIndex=0;(n=r.exec(e))!==null;){const h=e.slice(Math.max(0,n.index-65),n.index);if(u.test(h))return!0}}return!1}testSchemaAt(e,n,i){return this.__schemas__[n.toLowerCase()]?this.__schemas__[n.toLowerCase()].validate(e.slice(0,i+this.__opts__.maxLength),i,this):0}match(e){const n=[],i=this.re.get_schema_search();let r,u,h,g,b,v,w=!1,k=!1,j=!1,T=0;if(!e.length)return null;for(i.lastIndex=0,this.__opts__.fuzzyLink&&this.__schemas__["http:"]&&(r=this.re.get_fuzzy_link_search(),r.lastIndex=0),this.__opts__.fuzzyEmail&&this.__schemas__["mailto:"]&&(u=this.re.get_fuzzy_mail_host_search(),u.lastIndex=0,h=this.re.get_mail_name_validator());;){const _=Math.max(T-1,0);if(u&&h&&!j&&(!b||b.index<T))for(u.lastIndex<_&&(u.lastIndex=_);;){const ae=u.exec(e);if(!ae){j=!0,b=void 0;break}const L=h.exec(e.slice(Math.max(0,ae.index-65),ae.index));if(L){if(b={schema:"mailto:",index:ae.index-L[1].length,lastIndex:ae.index+ae[0].length},b.index>=T)break;u.lastIndex<_&&(u.lastIndex=_)}}if(r&&!k&&(!g||g.index<T))for(r.lastIndex<_&&(r.lastIndex=_);;){const ae=r.exec(e);if(!ae){k=!0,g=void 0;break}if(g={schema:"",index:ae.index+ae[1].length,lastIndex:ae.index+ae[0].length},g.index>=T)break;r.lastIndex<_&&(r.lastIndex=_)}let G=b;(!G||g&&(g.index<G.index||g.index===G.index&&g.lastIndex>G.lastIndex))&&(G=g);let R;if(!w)for(;;){if(!v){i.lastIndex<_&&(i.lastIndex=_);const W=i.exec(e);if(!W){w=!0;break}v={schema:W[2],index:W.index+W[1].length,lastIndex:W.index+W[0].length}}if(v.index<T){v=void 0;continue}if(G&&v.index>G.index)break;const ae=v;v=void 0;const L=this.testSchemaAt(e,ae.schema,ae.lastIndex);if(L){R={schema:ae.schema,index:ae.index,lastIndex:ae.lastIndex+L};break}}let q=R;if((!q||b&&(b.index<q.index||b.index===q.index&&b.lastIndex>q.lastIndex))&&(q=b),(!q||g&&(g.index<q.index||g.index===q.index&&g.lastIndex>q.lastIndex))&&(q=g),!q)break;q===b?b=void 0:q===g&&(g=void 0);const F=new Nv(e,q.schema,q.index,q.lastIndex);F.schema?this.__schemas__[F.schema].normalize(F,this):this.normalize(F),n.push(F),T=q.lastIndex}return n.length?n:null}matchAtStart(e){if(!e.length)return null;const n=this.re.get_schema_at_start().exec(e);if(!n)return null;const i=this.testSchemaAt(e,n[2],n[0].length);if(!i)return null;const r=new Nv(e,n[2],n.index+n[1].length,n.index+n[0].length+i);return this.__schemas__[r.schema].normalize(r,this),r}tlds(e,n=!1){return e=Array.isArray(e)?e:[e],n?this.__opts__.tlds=this.__opts__.tlds.concat(e):this.__opts__.tlds=e,this.re.set({...this.__opts__,schema_names:Object.keys(this.__schemas__)}),this}normalize(e){e.schema||(e.url=`http://${e.url}`),e.schema==="mailto:"&&!/^mailto:/i.test(e.url)&&(e.url=`mailto:${e.url}`)}};const _E=JSON.parse('["aaa","aarp","abb","abbott","abbvie","abc","able","abogado","abudhabi","ac","academy","accenture","accountant","accountants","aco","actor","ad","ads","adult","ae","aeg","aero","aetna","af","afl","africa","ag","agakhan","agency","ai","aig","airbus","airforce","airtel","akdn","al","alibaba","alipay","allfinanz","allstate","ally","alsace","alstom","am","amazon","americanexpress","americanfamily","amex","amfam","amica","amsterdam","analytics","android","anquan","anz","ao","aol","apartments","app","apple","aq","aquarelle","ar","arab","aramco","archi","army","arpa","art","arte","as","asda","asia","associates","at","athleta","attorney","au","auction","audi","audible","audio","auspost","author","auto","autos","aw","aws","ax","axa","az","azure","ba","baby","baidu","banamex","band","bank","bar","barcelona","barclaycard","barclays","barefoot","bargains","baseball","basketball","bauhaus","bayern","bb","bbc","bbt","bbva","bcg","bcn","bd","be","beats","beauty","beer","berlin","best","bestbuy","bet","bf","bg","bh","bharti","bi","bible","bid","bike","bing","bingo","bio","biz","bj","black","blackfriday","blockbuster","blog","bloomberg","blue","bm","bms","bmw","bn","bnpparibas","bo","boats","boehringer","bofa","bom","bond","boo","book","booking","bosch","bostik","boston","bot","boutique","box","br","bradesco","bridgestone","broadway","broker","brother","brussels","bs","bt","build","builders","business","buy","buzz","bv","bw","by","bz","bzh","ca","cab","cafe","cal","call","calvinklein","cam","camera","camp","canon","capetown","capital","capitalone","car","caravan","cards","care","career","careers","cars","casa","case","cash","casino","cat","catering","catholic","cba","cbn","cbre","cc","cd","center","ceo","cern","cf","cfa","cfd","cg","ch","chanel","channel","charity","chase","chat","cheap","chintai","christmas","chrome","church","ci","cipriani","circle","cisco","citadel","citi","citic","city","ck","cl","claims","cleaning","click","clinic","clinique","clothing","cloud","club","clubmed","cm","cn","co","coach","codes","coffee","college","cologne","com","commbank","community","company","compare","computer","comsec","condos","construction","consulting","contact","contractors","cooking","cool","coop","corsica","country","coupon","coupons","courses","cpa","cr","credit","creditcard","creditunion","cricket","crown","crs","cruise","cruises","cu","cuisinella","cv","cw","cx","cy","cymru","cyou","cz","dad","dance","data","date","dating","datsun","day","dclk","dds","de","deal","dealer","deals","degree","delivery","dell","deloitte","delta","democrat","dental","dentist","desi","design","dev","dhl","diamonds","diet","digital","direct","directory","discount","discover","dish","diy","dj","dk","dm","dnp","do","docs","doctor","dog","domains","dot","download","drive","dtv","dubai","dupont","durban","dvag","dvr","dz","earth","eat","ec","eco","edeka","edu","education","ee","eg","email","emerck","energy","engineer","engineering","enterprises","epson","equipment","er","ericsson","erni","es","esq","estate","et","eu","eurovision","eus","events","exchange","expert","exposed","express","extraspace","fage","fail","fairwinds","faith","family","fan","fans","farm","farmers","fashion","fast","fedex","feedback","ferrari","ferrero","fi","fidelity","fido","film","final","finance","financial","fire","firestone","firmdale","fish","fishing","fit","fitness","fj","fk","flickr","flights","flir","florist","flowers","fly","fm","fo","foo","food","football","ford","forex","forsale","forum","foundation","fox","fr","free","fresenius","frl","frogans","frontier","ftr","fujitsu","fun","fund","furniture","futbol","fyi","ga","gal","gallery","gallo","gallup","game","games","gap","garden","gay","gb","gbiz","gd","gdn","ge","gea","gent","genting","george","gf","gg","ggee","gh","gi","gift","gifts","gives","giving","gl","glass","gle","global","globo","gm","gmail","gmbh","gmo","gmx","gn","godaddy","gold","goldpoint","golf","goo","goodyear","goog","google","gop","got","gov","gp","gq","gr","grainger","graphics","gratis","green","gripe","grocery","group","gs","gt","gu","gucci","guge","guide","guitars","guru","gw","gy","hair","hamburg","hangout","haus","hbo","hdfc","hdfcbank","health","healthcare","help","helsinki","here","hermes","hiphop","hisamitsu","hitachi","hiv","hk","hkt","hm","hn","hockey","holdings","holiday","homedepot","homegoods","homes","homesense","honda","horse","hospital","host","hosting","hot","hotels","hotmail","house","how","hr","hsbc","ht","hu","hughes","hyatt","hyundai","ibm","icbc","ice","icu","id","ie","ieee","ifm","ikano","il","im","imamat","imdb","immo","immobilien","in","inc","industries","infiniti","info","ing","ink","institute","insurance","insure","int","international","intuit","investments","io","ipiranga","iq","ir","irish","is","ismaili","ist","istanbul","it","itau","itv","jaguar","java","jcb","je","jeep","jetzt","jewelry","jio","jll","jm","jmp","jnj","jo","jobs","joburg","jot","joy","jp","jpmorgan","jprs","juegos","juniper","kaufen","kddi","ke","kerryhotels","kerryproperties","kfh","kg","kh","ki","kia","kids","kim","kindle","kitchen","kiwi","km","kn","koeln","komatsu","kosher","kp","kpmg","kpn","kr","krd","kred","kuokgroup","kw","ky","kyoto","kz","la","lacaixa","lamborghini","lamer","land","landrover","lanxess","lasalle","lat","latino","latrobe","law","lawyer","lb","lc","lds","lease","leclerc","lefrak","legal","lego","lexus","lgbt","li","lidl","life","lifeinsurance","lifestyle","lighting","like","lilly","limited","limo","lincoln","link","live","living","lk","llc","llp","loan","loans","locker","locus","lol","london","lotte","lotto","love","lpl","lplfinancial","lr","ls","lt","ltd","ltda","lu","lundbeck","luxe","luxury","lv","ly","ma","madrid","maif","maison","makeup","man","management","mango","map","market","marketing","markets","marriott","marshalls","mattel","mba","mc","mckinsey","md","me","med","media","meet","melbourne","meme","memorial","men","menu","merckmsd","mg","mh","miami","microsoft","mil","mini","mint","mit","mitsubishi","mk","ml","mlb","mls","mm","mma","mn","mo","mobi","mobile","moda","moe","moi","mom","monash","money","monster","mormon","mortgage","moscow","moto","motorcycles","mov","movie","mp","mq","mr","ms","msd","mt","mtn","mtr","mu","museum","music","mv","mw","mx","my","mz","na","nab","nagoya","name","navy","nba","nc","ne","nec","net","netbank","netflix","network","neustar","new","news","next","nextdirect","nexus","nf","nfl","ng","ngo","nhk","ni","nico","nike","nikon","ninja","nissan","nissay","nl","no","nokia","norton","now","nowruz","nowtv","np","nr","nra","nrw","ntt","nu","nyc","nz","obi","observer","office","okinawa","olayan","olayangroup","ollo","om","omega","one","ong","onl","online","ooo","open","oracle","orange","org","organic","origins","osaka","otsuka","ott","ovh","pa","page","panasonic","paris","pars","partners","parts","party","pay","pccw","pe","pet","pf","pfizer","pg","ph","pharmacy","phd","philips","phone","photo","photography","photos","physio","pics","pictet","pictures","pid","pin","ping","pink","pioneer","pizza","pk","pl","place","play","playstation","plumbing","plus","pm","pn","pnc","pohl","poker","politie","porn","post","pr","praxi","press","prime","pro","prod","productions","prof","progressive","promo","properties","property","protection","pru","prudential","ps","pt","pub","pw","pwc","py","qa","qpon","quebec","quest","racing","radio","re","read","realestate","realtor","realty","recipes","red","redumbrella","rehab","reise","reisen","reit","reliance","ren","rent","rentals","repair","report","republican","rest","restaurant","review","reviews","rexroth","rich","richardli","ricoh","ril","rio","rip","ro","rocks","rodeo","rogers","room","rs","rsvp","ru","rugby","ruhr","run","rw","rwe","ryukyu","sa","saarland","safe","safety","sakura","sale","salon","samsclub","samsung","sandvik","sandvikcoromant","sanofi","sap","sarl","sas","save","saxo","sb","sbi","sbs","sc","scb","schaeffler","schmidt","scholarships","school","schule","schwarz","science","scot","sd","se","search","seat","secure","security","seek","select","sener","services","seven","sew","sex","sexy","sfr","sg","sh","shangrila","sharp","shell","shia","shiksha","shoes","shop","shopping","shouji","show","si","silk","sina","singles","site","sj","sk","ski","skin","sky","skype","sl","sling","sm","smart","smile","sn","sncf","so","soccer","social","softbank","software","sohu","solar","solutions","song","sony","soy","spa","space","sport","spot","sr","srl","ss","st","stada","staples","star","statebank","statefarm","stc","stcgroup","stockholm","storage","store","stream","studio","study","style","su","sucks","supplies","supply","support","surf","surgery","suzuki","sv","swatch","swiss","sx","sy","sydney","systems","sz","tab","taipei","talk","taobao","target","tatamotors","tatar","tattoo","tax","taxi","tc","tci","td","tdk","team","tech","technology","tel","temasek","tennis","teva","tf","tg","th","thd","theater","theatre","tiaa","tickets","tienda","tips","tires","tirol","tj","tjmaxx","tjx","tk","tkmaxx","tl","tm","tmall","tn","to","today","tokyo","tools","top","toray","toshiba","total","tours","town","toyota","toys","tr","trade","trading","training","travel","travelers","travelersinsurance","trust","trv","tt","tube","tui","tunes","tushu","tv","tvs","tw","tz","ua","ubank","ubs","ug","uk","unicom","university","uno","uol","ups","us","uy","uz","va","vacations","vana","vanguard","vc","ve","vegas","ventures","verisign","vermögensberater","vermögensberatung","versicherung","vet","vg","vi","viajes","video","vig","viking","villas","vin","vip","virgin","visa","vision","viva","vivo","vlaanderen","vn","vodka","volvo","vote","voting","voto","voyage","vu","wales","walmart","walter","wang","wanggou","watch","watches","weather","weatherchannel","webcam","weber","website","wed","wedding","weibo","weir","wf","whoswho","wien","wiki","williamhill","win","windows","wine","winners","wme","wolterskluwer","woodside","work","works","world","wow","ws","wtc","wtf","xbox","xerox","xihuan","xin","xxx","xyz","yachts","yahoo","yamaxun","yandex","ye","yodobashi","yoga","yokohama","you","youtube","yt","yun","za","zappos","zara","zero","zip","zm","zone","zuerich","zw","ελ","ευ","бг","бел","дети","ею","католик","ком","мкд","мон","москва","онлайн","орг","рус","рф","сайт","срб","укр","қаз","հայ","ישראל","קום","ابوظبي","ارامكو","الاردن","البحرين","الجزائر","السعودية","العليان","المغرب","امارات","ایران","بارت","بازار","بيتك","بھارت","تونس","سودان","سورية","شبكة","عراق","عرب","عمان","فلسطين","قطر","كاثوليك","كوم","مصر","مليسيا","موريتانيا","موقع","همراه","پاکستان","ڀارت","कॉम","नेट","भारत","भारतम्","भारोत","संगठन","বাংলা","ভারত","ভাৰত","ਭਾਰਤ","ભારત","ଭାରତ","இந்தியா","இலங்கை","சிங்கப்பூர்","భారత్","ಭಾರತ","ഭാരതം","ලංකා","คอม","ไทย","ລາວ","გე","みんな","アマゾン","クラウド","グーグル","コム","ストア","セール","ファッション","ポイント","世界","中信","中国","中國","中文网","亚马逊","企业","佛山","信息","健康","八卦","公司","公益","台湾","台灣","商城","商店","商标","嘉里","嘉里大酒店","在线","大拿","天主教","娱乐","家電","广东","微博","慈善","我爱你","手机","招聘","政务","政府","新加坡","新闻","时尚","書籍","机构","淡马锡","游戏","澳門","点看","移动","组织机构","网址","网店","网站","网络","联通","谷歌","购物","通販","集团","電訊盈科","飞利浦","食品","餐厅","香格里拉","香港","닷넷","닷컴","삼성","한국"]');function TE(e,n){return e.endsWith(n)?e.length===n.length||e[e.length-n.length-1]===".":!1}function RE(e,n){const i=e.length-n.length-2,r=e.lastIndexOf(".",i);return r===-1?e:e.slice(r+1)}function EE(e,n,i){if(i.validHosts!==null){const u=i.validHosts;for(const h of u)if(TE(n,h))return h}let r=0;if(n.startsWith("."))for(;r<n.length&&n[r]===".";)r+=1;return e.length===n.length-r?null:RE(n,e)}function zE(e,n){return e.slice(0,-n.length-1)}const xh=/[\t\n\r]/g;let Jh=!1;function _v(e){return e>=97&&e<=122||e>=48&&e<=57||e>127||e>=65&&e<=90||e===45||e===95}function Tv(e,n,i){const r=i-n,u=e.charCodeAt(n)|32;if(r===2)return u===119&&(e.charCodeAt(n+1)|32)===115?1:0;if(r===3){const h=e.charCodeAt(n+1)|32,g=e.charCodeAt(n+2)|32;return u===119&&h===115&&g===115||u===102&&h===116&&g===112?1:0}else if(r===4){const h=e.charCodeAt(n+1)|32,g=e.charCodeAt(n+2)|32,b=e.charCodeAt(n+3)|32;return u===104&&h===116&&g===116&&b===112?1:u===102&&h===105&&g===108&&b===101?2:0}else if(r===5)return u===104&&(e.charCodeAt(n+1)|32)===116&&(e.charCodeAt(n+2)|32)===116&&(e.charCodeAt(n+3)|32)===112&&(e.charCodeAt(n+4)|32)===115?1:0;return 0}function Ql(e,n,i=!1){let r=0,u=e.length,h=!1,g=!1;if(Jh=!1,!n){if(e.startsWith("data:"))return null;for(;r<e.length&&e.charCodeAt(r)<=32;)r+=1;for(;u>r+1&&e.charCodeAt(u-1)<=32;)u-=1;if(e.charCodeAt(r)===47&&e.charCodeAt(r+1)===47)r+=2;else{const q=e.indexOf(":/",r);if(q!==-1){const F=Tv(e,r,q);if(F===1)for(g=!0,r=q+2;e.charCodeAt(r)===47||e.charCodeAt(r)===92;)r+=1;else if(F===2){g=!0,r=q+1;let ae=0;for(;(e.charCodeAt(r)===47||e.charCodeAt(r)===92)&&ae<2;)r+=1,ae+=1;if(ae<2)return null}else{for(let ae=r;ae<q;ae+=1){const L=e.charCodeAt(ae)|32;if(!(L>=97&&L<=122||L>=48&&L<=57||L===46||L===45||L===43)){const W=e.charCodeAt(ae);return W===9||W===10||W===13?Ql(e.replace(xh,""),n,i):null}}if(e.charCodeAt(q+2)===47)r=q+3;else return null}}else if(e.charCodeAt(r)!==91){let F=-1;for(let ae=r;ae<u;ae+=1){const L=e.charCodeAt(ae);if(L===9||L===10||L===13)return Ql(e.replace(xh,""),n,i);if(L===58){F=ae;break}if(L===47||L===92||L===63||L===35)break}if(F!==-1){let ae=!1;for(let L=F+1;L<u;L+=1){const W=e.charCodeAt(L);if(W===47||W===92||W===63||W===35)break;if(W===64){ae=!0;break}}if(!ae){let L=!0,W=F+1;for(;W<u;W+=1){const J=e.charCodeAt(W);if(J===47||J===92||J===63||J===35)break;if(J<48||J>57){L=!1;break}}if(W===F+1&&(L=!1),!L){const J=Tv(e,r,F);if(J===0){let se=!1;for(let V=F+1;V<u;V+=1){const H=e.charCodeAt(V);if(H===47||H===92||H===63||H===35)break;if(H===58){se=!0;break}}if(!se)return null}else if(g=!0,r=F+1,J===2){let se=0;for(;(e.charCodeAt(r)===47||e.charCodeAt(r)===92)&&se<2;)r+=1,se+=1;if(se<2)return null}else for(;e.charCodeAt(r)===47||e.charCodeAt(r)===92;)r+=1}}}}}let v=-1,w=-1,k=-1,j=-1,T=!1,_=i,G=r-1,R=-1;if(i&&r<u){const q=e.charCodeAt(r);(!(_v(q)||q===46||q===95)||q===45)&&(_=!1)}for(let q=r;q<u;q+=1){const F=e.charCodeAt(q);if(F<64)if(F===47||F===35||F===63){u=q;break}else F===58?(j===-1&&(j=q),k=q):F===9||F===10||F===13?T=!0:i&&(F===46?((q-G>64||R===46||R===45)&&(_=!1),G=q):(F<48||F>57)&&(F!==45||R===46)&&(_=!1));else if(g&&F===92){u=q;break}else F===64?(v=q,j=-1):F===93?w=q:F>=65&&F<=90?h=!0:i&&!_v(F)&&(_=!1);i&&(R=F)}if(T)return Ql(e.replace(xh,""),n,i);if(v!==-1&&v>=r&&v<u&&(r=v+1),e.charCodeAt(r)===91)return w!==-1?e.slice(r+1,w).toLowerCase():null;if(k!==-1&&k>r&&k<u&&j===k&&(u=k),r>=u)return null;i&&_&&v===-1&&k===-1&&w===-1&&e.charCodeAt(u-1)!==46&&u-r<=255&&u-G-1<=63&&R!==45&&(Jh=!0)}for(;u>r+1&&e.charCodeAt(u-1)===46;)u-=1;const b=r!==0||u!==e.length?e.slice(r,u):e;return h?b.toLowerCase():b}function DE(e){if(e.length<7||e.length>15)return!1;let n=0;for(let i=0;i<e.length;i+=1){const r=e.charCodeAt(i);if(r===46)n+=1;else if(r<48||r>57)return!1}return n===3&&e.charCodeAt(0)!==46&&e.charCodeAt(e.length-1)!==46}function OE(e){if(e.length<3)return!1;let n=e.startsWith("[")?1:0,i=e.length;if(e[i-1]==="]"&&(i-=1),i-n>39)return!1;let r=!1;for(;n<i;n+=1){const u=e.charCodeAt(n);if(u===58)r=!0;else if(!(u>=48&&u<=57||u>=97&&u<=102||u>=65&&u<=70))return!1}return r}function IE(e){return OE(e)||DE(e)}const PE=["test","localhost","invalid","example","example.com","example.net","example.org","local","onion","alt","home.arpa","ipv4only.arpa","resolver.arpa","service.arpa","6tisch.arpa","eap.arpa"];function qE(e){for(const n of PE)if(e.endsWith(n)&&(e.length===n.length||e.charCodeAt(e.length-n.length-1)===46))return!0;return!1}function Rv(e){return e>=97&&e<=122||e>=48&&e<=57||e>127}function Ev(e){if(e.length>255||e.length===0||!Rv(e.charCodeAt(0))&&e.charCodeAt(0)!==46&&e.charCodeAt(0)!==95)return!1;let n=-1,i=-1;const r=e.length;for(let u=0;u<r;u+=1){const h=e.charCodeAt(u);if(h===46){if(u-n>64||i===46||i===45)return!1;n=u}else if(!(Rv(h)||h===45||h===95)||h===45&&i===46)return!1;i=h}return r-n-1<=63&&i!==45}function Kk({allowIcannDomains:e=!0,allowPrivateDomains:n=!1,detectIp:i=!0,detectSpecialUse:r=!1,extractHostname:u=!0,mixedInputs:h=!0,validHosts:g=null,validateHostname:b=!0}){return{allowIcannDomains:e,allowPrivateDomains:n,detectIp:i,detectSpecialUse:r,extractHostname:u,mixedInputs:h,validHosts:g,validateHostname:b}}const ME=Kk({});function BE(e){return e===void 0?ME:Kk(e)}function LE(e,n){return n.length===e.length?"":e.slice(0,-n.length-1)}function VE(){return{domain:null,domainWithoutSuffix:null,hostname:null,isIcann:null,isIp:null,isPrivate:null,isSpecialUse:null,publicSuffix:null,subdomain:null}}function Hk(e){e.domain=null,e.domainWithoutSuffix=null,e.hostname=null,e.isIcann=null,e.isIp=null,e.isPrivate=null,e.isSpecialUse=null,e.publicSuffix=null,e.subdomain=null}function Qk(e,n,i,r,u){const h=BE(r);if(typeof e!="string")return u;let g=!1;return h.extractHostname?h.mixedInputs?(g=Ev(e),u.hostname=Ql(e,g,h.validateHostname)):u.hostname=Ql(e,!1,h.validateHostname):u.hostname=e,h.detectIp&&u.hostname!==null&&(u.isIp=IE(u.hostname),u.isIp)?u:h.validateHostname&&h.extractHostname&&u.hostname!==null&&!(g&&u.hostname===e)&&!Jh&&!Ev(u.hostname)?(u.hostname=null,u):(n===0||u.hostname===null||(n===5&&h.detectSpecialUse&&(u.isSpecialUse=qE(u.hostname)),i(u.hostname,h,u),n===2||u.publicSuffix===null)||(u.domain=EE(u.publicSuffix,u.hostname,h),n===3||u.domain===null)||(u.subdomain=LE(u.hostname,u.domain),n===4)||(u.domainWithoutSuffix=zE(u.domain,u.publicSuffix)),u)}function $E(e,n,i){if(!n.allowPrivateDomains&&e.length>3){const r=e.length-1,u=e.charCodeAt(r),h=e.charCodeAt(r-1),g=e.charCodeAt(r-2),b=e.charCodeAt(r-3);if(u===109&&h===111&&g===99&&b===46)return i.isIcann=!0,i.isPrivate=!1,i.publicSuffix="com",!0;if(u===103&&h===114&&g===111&&b===46)return i.isIcann=!0,i.isPrivate=!1,i.publicSuffix="org",!0;if(u===117&&h===100&&g===101&&b===46)return i.isIcann=!0,i.isPrivate=!1,i.publicSuffix="edu",!0;if(u===118&&h===111&&g===103&&b===46)return i.isIcann=!0,i.isPrivate=!1,i.publicSuffix="gov",!0;if(u===116&&h===101&&g===110&&b===46)return i.isIcann=!0,i.isPrivate=!1,i.publicSuffix="net",!0;if(u===101&&h===100&&g===46)return i.isIcann=!0,i.isPrivate=!1,i.publicSuffix="de",!0}return!1}const io=new Uint8Array([1,2,1,1,1,1,1,1,1,1,1,1,0,2,2,2,0,2,2,0,2,0,0,1,0,0,2,1,1,1,1,1,1,0,0,0,1,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,0,1,0,1,1,0,1,1,0,0,0,0,0,0,1,1,1,0,2,0,0,0,0,0,0,0,2,0,2,2,0,0,2,2,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,2,1,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,2,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,2,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,2,2,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,0,1,0,2,2,0,0,0,2,0,1,1,0,2,0,2,2,0,1,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,0,0,0,0,1,0,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,2,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,2,2,0,2,2,0,0,0,0,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,2,0,2,2,2,2,0,0,0,0,2,0,0,0,0,0,0,2,2,0,0,0,2,2,1,1,1,1,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,2,2,0,0,2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,2,2,1,2,1,1,1,2,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,2,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,0,0,0,0,0]),td=new Uint16Array([0,0,0,10,11,18,106,111,117,124,130,136,145,146,147,148,149,150,151,153,154,155,157,159,226,239,241,242,243,258,265,266,269,270,271,274,276,295,296,298,307,312,313,331,332,335,337,338,340,374,375,377,380,381,385,387,391,394,426,429,442,443,451,452,454,464,478,479,480,489,490,527,532,548,568,574,615,616,643,670,671,819,825,828,829,830,835,840,849,871,872,873,874,875,876,877,895,897,898,901,903,904,906,908,923,938,943,944,946,947,948,949,950,952,955,960,961,962,964,965,968,971,972,973,986,988,1e3,1011,1019,1021,1061,1064,1068,1069,1071,1074,1085,1087,1097,1099,1105,1107,1108,1110,1113,1114,1115,1167,1169,1171,1191,1192,1193,1194,1196,1207,1238,1249,1261,1270,1277,1282,1295,1306,1319,1320,1331,1365,1366,1367,1382,1397,1469,1470,1472,1473,1507,1508,1509,1512,1516,1518,1547,1548,1556,1557,1558,1560,1562,1563,1565,1566,1567,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,1591,1592,1594,1595,1596,1598,2053,2056,2057,2059,2066,2073,2083,2087,2098,2099,2100,2112,2113,2115,2117,2118,2125,2126,2128,2129,2131,2132,2133,2134,2135,2209,2211,2232,2233,2234,2236,2262,2263,2314,2315,2317,2324,2330,2340,2350,2403,2404,2405,2415,2429,2430,2433,2440,2441,2449,2450,2451,2452,2453,2464,2465,2466,2468,2469,2470,2471,2473,2483,2495,2501,2533,2537,2539,2540,2542,2543,2554,2555,2557,2565,2572,2578,2583,2584,2590,2593,2599,2606,2607,2614,2622,2623,2624,2662,2668,2683,2684,2689,2707,2738,2756,2758,2761,2769,2771,2778,2830,2854,2855,2856,2857,2858,2859,2860,2861,2868,2869,2870,2871,2872,2873,2875,2876,2880,2964,2977,2978,3414,3418,3432,3484,3512,3534,3592,3614,3629,3692,3743,3781,3817,3842,3984,4030,4081,4100,4134,4149,4169,4199,4230,4253,4284,4314,4346,4373,4448,4470,4508,4518,4552,4571,4597,4639,4689,4715,4784,4785,4787,4810,4833,4869,4900,4917,4974,4987,5011,5040,5042,5076,5092,5120,5425,5434,5443,5450,5467,5471,5477,5516,5518,5525,5532,5541,5548,5549,5560,5563,5578,5579,5588,5589,5598,5607,5613,5615,5616,5617,5653,5654,5656,5664,5671,5684,5688,5690,5691,5697,5704,5718,5728,5733,5741,5749,5755,5756,5760,5762,5763,5775,5776,5777,5778,5780,5781,5784,5786,5789,5793,5794,5800,5801,5802,5804,5806,5808,5809,5810,5813,5815,5818,5819,5821,6019,6026,6027,6037,6042,6059,6073,6082,6083,6084,6088,6089,6091,6093,6099,6100,6103,6104,6106,6107,6108,7008,7009,7013,7031,7040,7043,7050,7051,7053,7054,7055,7057,7109,7110,7113,7114,7231,7232,7243,7254,7261,7264,7273,7274,7275,7290,7345,7536,7538,7539,7541,7546,7559,7574,7581,7590,7593,7596,7603,7611,7615,7616,7617,7631,7635,7644,7645,7646,7650,7685,7686,7703,7710,7718,7719,7724,7732,7776,7777,7783,7786,7797,7802,7803,7806,7839,7840,7846,7853,7854,7863,7872,7887,7891,7943,7944,7949,7951,7954,7956,7957,7958,7967,7981,7989,8003,8015,8016,8018,8020,8042,8053,8059,8060,8072,8084,8171,8183,8185,8194,8197,8203,8228,8231,8232,8233,8235,8238,8241,8252,8254,8256,8284,8358,8365,8369,8370,8379,8401,8402,8407,8408,8487,8489,8491,8500,8504,8510,8516,8522,8532,8537,8538,8556,8567,8572,8577,8587,8593,8597,8603,8609,10217,10218,10219,10226,10228]),nd=new Uint8Array([3,3,3,3,3,3,3,3,5,8,8,2,2,3,3,3,3,3,8,5,5,5,5,5,3,3,5,5,9,12,19,8,19,8,11,9,9,8,7,7,6,8,9,16,10,7,7,11,8,6,6,9,7,11,7,14,4,4,4,4,4,4,10,7,6,6,6,6,10,10,6,10,10,22,11,9,10,10,10,9,10,8,7,7,7,8,21,13,11,11,9,10,9,13,10,8,8,9,12,9,7,10,7,7,13,7,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,8,6,3,3,3,3,3,3,2,5,3,3,3,7,2,2,2,2,2,2,3,3,3,1,1,7,8,5,2,2,7,2,2,1,4,1,11,9,9,5,5,8,5,5,5,5,5,5,5,3,3,3,3,3,5,11,9,9,13,7,14,7,6,6,6,7,6,6,6,6,6,10,7,11,9,4,4,4,4,4,4,6,6,6,6,6,8,7,10,9,9,9,8,9,8,10,6,9,9,8,10,10,7,8,1,9,10,12,12,12,10,9,9,10,10,9,9,1,1,5,3,3,3,3,3,3,3,3,3,3,3,3,6,6,6,4,3,3,3,7,4,4,4,3,3,6,7,3,4,1,2,2,2,6,1,2,2,2,2,2,12,5,3,8,9,13,4,4,13,9,9,11,7,3,12,9,2,2,2,3,3,3,3,3,8,2,2,3,3,3,3,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,4,4,3,7,10,15,7,15,15,20,15,9,10,10,12,14,14,14,12,12,12,12,12,14,14,10,10,10,10,14,9,9,9,10,14,14,14,13,13,9,9,9,9,9,9,7,8,6,8,8,6,8,13,8,8,6,13,8,11,13,8,6,13,8,6,9,10,10,12,14,14,14,12,12,12,12,14,14,10,10,10,10,9,9,9,10,14,14,11,13,13,9,9,9,9,9,9,2,6,9,2,2,3,3,3,3,3,3,3,3,3,4,4,4,2,3,3,3,3,3,3,7,7,2,3,2,2,5,3,3,3,3,3,3,4,2,2,2,2,2,2,3,3,3,3,3,3,3,4,5,7,2,2,12,8,10,8,10,7,18,4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,2,2,3,3,3,5,5,3,8,8,6,8,6,6,4,6,7,7,7,10,11,2,5,5,3,3,3,3,3,3,5,5,6,11,10,7,7,7,4,4,4,2,3,3,3,3,3,2,7,5,5,3,3,3,3,3,3,3,3,7,7,7,11,7,6,9,6,6,8,10,8,6,8,13,4,4,4,4,4,10,8,11,8,8,8,10,10,7,10,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,5,5,5,5,5,5,5,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,7,10,13,7,8,7,11,8,8,6,9,8,8,6,6,6,8,8,6,6,6,6,6,9,7,6,4,4,4,4,4,4,4,6,6,6,9,7,8,10,8,8,2,3,3,3,3,3,2,8,9,9,2,2,2,3,3,3,2,3,3,3,9,2,2,3,3,3,3,3,3,5,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,12,5,5,3,5,4,2,3,2,4,3,9,2,2,2,2,2,5,5,3,8,8,13,6,10,9,4,7,9,11,2,3,7,3,3,4,1,3,4,2,9,3,3,12,5,3,7,10,10,7,4,4,6,14,7,9,7,13,2,2,2,2,2,2,3,3,3,3,3,8,15,4,4,2,3,3,3,7,4,9,9,2,3,3,3,5,3,2,2,7,2,7,6,6,7,2,4,2,2,2,2,2,2,8,8,8,9,5,2,3,3,3,3,3,3,10,7,4,4,4,4,3,4,2,3,3,3,3,3,10,7,4,4,4,4,2,3,3,3,3,10,7,4,4,4,4,3,9,6,6,6,9,13,9,2,2,2,8,7,9,5,3,3,3,5,5,12,9,10,7,8,7,6,8,6,11,12,7,9,10,4,4,7,8,11,6,7,9,8,7,10,8,9,15,7,8,5,4,7,2,3,3,3,2,14,10,2,14,10,2,14,3,9,13,13,10,14,16,17,11,2,14,2,14,3,9,13,10,14,16,17,11,14,10,14,2,7,3,10,7,14,10,2,14,10,9,9,17,6,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,10,10,10,12,9,4,10,11,8,8,8,7,9,5,3,3,3,3,3,3,3,3,5,8,4,4,4,4,4,4,6,16,3,3,14,3,14,2,14,9,13,10,10,14,16,17,11,6,9,10,10,12,14,14,14,12,12,12,12,14,14,10,10,10,10,14,9,9,9,10,14,14,14,9,9,9,9,9,9,2,14,9,13,10,10,14,16,17,11,6,2,14,9,17,13,10,10,14,16,17,11,6,2,14,9,13,10,14,16,17,11,2,14,9,13,10,16,11,2,14,10,19,7,2,14,9,13,10,19,10,7,14,16,17,11,6,2,14,9,13,10,19,7,14,16,17,11,2,14,9,13,17,13,10,10,14,16,17,11,6,3,2,14,9,13,10,10,14,16,17,11,6,9,10,12,14,14,14,12,12,12,12,12,14,14,14,10,10,10,14,9,9,9,9,14,14,14,13,13,14,9,9,9,9,9,9,4,11,2,14,9,13,17,13,10,19,10,7,14,16,17,11,6,2,14,9,13,17,13,10,19,10,7,14,16,17,11,6,2,9,10,10,7,17,3,3,12,12,16,15,15,12,14,14,14,20,20,13,12,12,12,12,12,12,20,25,14,14,12,12,10,10,10,10,9,9,9,25,4,9,17,10,7,14,16,21,13,13,14,20,14,13,17,24,9,12,13,25,13,21,20,17,9,9,9,9,9,9,12,17,4,4,9,9,9,10,10,12,14,14,14,12,12,12,12,12,14,14,10,10,10,10,14,9,9,9,10,14,14,14,13,13,9,9,9,9,9,9,1,8,7,11,11,1,3,3,3,4,8,9,10,14,14,12,12,12,12,14,14,10,10,10,10,14,9,9,9,10,14,14,14,13,13,9,9,9,9,9,7,4,4,4,4,4,4,4,4,4,4,9,12,6,14,4,12,7,2,2,1,2,7,6,4,4,4,6,8,8,7,4,5,6,3,3,3,3,4,16,8,3,5,4,3,3,3,5,2,2,8,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,11,12,7,7,13,9,10,12,8,9,7,8,5,12,10,13,14,5,5,5,13,5,5,5,3,3,3,5,16,5,5,5,5,5,7,12,14,8,12,8,10,12,9,11,7,9,7,10,7,13,9,7,12,8,17,7,7,16,10,13,13,8,10,10,14,17,7,16,16,15,8,10,10,12,17,7,17,14,7,10,17,8,7,7,7,8,15,15,7,14,10,10,10,11,11,7,7,13,8,10,7,16,7,8,7,14,17,12,10,11,21,8,9,7,13,9,8,13,6,12,7,6,13,10,10,10,8,18,9,17,13,10,12,6,13,6,11,8,13,10,13,18,13,11,13,8,16,7,10,8,16,12,10,8,8,6,14,11,8,15,8,8,7,7,12,7,8,9,14,15,8,9,10,9,15,7,8,8,12,13,9,10,15,15,13,7,10,10,20,7,6,9,6,6,14,11,14,11,12,9,10,16,16,12,7,11,28,8,11,10,7,21,8,7,9,4,4,4,17,7,8,6,9,6,6,13,6,6,6,6,18,20,14,8,11,12,9,10,13,15,19,8,9,12,7,10,16,12,9,9,9,14,12,11,9,12,11,18,9,9,9,10,7,7,16,8,9,7,13,12,10,18,7,8,11,7,7,8,8,13,7,7,7,11,15,13,11,7,8,15,11,7,8,18,14,13,18,15,10,12,12,9,7,11,11,8,7,10,8,14,12,10,18,7,10,9,7,8,13,10,14,9,10,8,8,23,7,7,11,12,12,17,7,7,11,11,17,16,16,7,8,11,14,14,8,10,7,7,16,16,13,9,11,9,15,15,11,11,7,7,14,7,9,7,7,16,10,13,10,11,14,7,11,10,11,7,11,10,11,15,11,15,10,12,17,10,14,13,11,11,12,13,10,7,13,10,16,12,21,9,10,10,7,11,14,17,7,7,8,11,12,8,15,14,14,8,17,12,10,10,7,9,11,7,10,7,11,18,7,11,7,12,11,8,8,14,12,7,8,15,3,7,7,5,2,9,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,5,3,3,3,3,3,3,4,4,3,3,3,3,3,3,5,11,6,4,7,10,7,7,11,1,10,2,2,3,3,3,3,3,3,3,3,5,7,3,5,6,3,3,5,2,2,5,3,4,13,11,3,3,6,3,5,14,2,2,3,8,2,2,12,5,18,5,3,3,3,16,5,5,5,10,7,13,12,13,9,12,14,19,9,9,21,9,9,10,6,9,6,15,10,6,12,8,6,10,15,4,4,6,6,9,9,12,16,14,23,7,7,7,14,9,7,7,11,14,10,7,10,10,10,12,6,11,10,13,11,15,11,7,12,10,3,7,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,4,3,7,2,5,5,3,3,5,5,5,5,7,6,6,6,4,4,4,4,4,4,6,6,6,6,6,7,10,2,2,2,5,5,5,5,3,3,3,3,3,5,5,10,9,11,8,7,12,8,9,7,6,13,11,6,13,7,9,9,4,4,4,4,4,4,6,10,7,8,13,8,8,9,14,8,10,7,7,7,9,6,9,7,2,12,5,3,3,13,4,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,4,5,5,5,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,8,4,4,4,4,4,4,4,4,4,4,4,4,9,3,3,3,3,3,3,3,3,3,3,4,2,2,2,5,3,3,3,3,3,3,3,3,4,4,1,7,6,4,12,3,3,3,3,3,8,7,3,3,3,3,3,3,4,4,11,14,2,8,3,5,5,8,10,8,6,4,7,17,7,4,5,2,6,3,5,2,4,4,2,12,5,5,3,15,13,10,8,11,2,2,3,3,3,3,3,3,3,3,4,4,5,3,3,3,3,4,18,2,12,5,3,3,3,3,3,5,16,8,8,9,6,6,4,4,4,4,31,6,6,10,11,21,10,9,7,10,7,7,2,4,4,4,4,6,5,3,3,4,3,3,3,3,3,3,3,3,3,6,6,6,2,2,2,5,3,3,3,7,7,4,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,8,2,3,3,3,3,3,5,9,11,3,3,3,3,4,4,3,3,3,3,3,5,10,9,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,11,10,10,10,10,10,11,10,11,10,11,10,9,9,11,3,3,3,3,3,3,5,3,7,8,8,7,6,6,11,4,4,4,7,8,9,9,2,3,7,4,4,2,5,5,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,2,2,5,5,5,5,5,3,3,5,5,5,7,7,6,6,6,4,4,4,4,4,4,4,4,4,4,6,6,8,8,1,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,6,9,12,3,7,10,7,2,2,3,3,3,3,3,4,3,3,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,5,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,5,5,8,8,6,6,8,6,7,4,4,4,4,4,4,6,7,5,5,20,19,8,10,9,7,10,6,8,11,6,6,6,6,13,12,8,6,7,14,11,9,2,5,3,3,6,2,3,2,2,2,2,2,2,2,5,4,3,7,6,4,7,4,3,6,4,7,2,7,7,7,5,5,5,5,3,3,3,3,3,3,3,3,3,3,5,9,10,10,8,11,7,8,20,7,8,9,8,12,6,6,6,8,9,8,12,6,6,8,13,10,12,6,6,7,7,8,9,6,4,4,4,4,4,4,4,10,6,6,6,7,14,11,10,7,8,10,8,11,14,11,11,9,7,9,8,11,9,17,10,9,2,2,2,9,3,3,3,3,15,14,9,5,5,2,8,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,15,12,22,19,17,18,18,19,21,7,16,16,5,5,5,5,5,5,5,5,5,5,5,7,5,5,5,5,5,5,5,5,5,5,5,9,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,5,7,16,11,11,7,7,7,7,17,7,8,12,15,9,19,7,19,8,16,21,11,12,19,14,22,7,7,7,7,7,7,7,7,7,7,7,16,16,19,24,12,7,14,7,12,7,8,10,10,13,7,12,12,7,7,10,18,15,12,16,7,14,12,17,10,16,17,12,17,25,7,7,7,13,6,9,6,9,18,6,6,11,20,10,6,6,6,6,6,6,6,17,6,6,6,15,6,6,6,6,6,8,14,11,12,15,13,19,17,21,7,18,8,13,13,8,12,8,6,6,13,6,15,15,16,6,6,16,6,6,6,14,6,18,6,6,6,17,18,9,13,15,8,19,8,15,15,18,14,16,4,4,4,4,4,4,4,4,4,4,4,4,6,11,10,11,6,21,23,12,17,12,11,14,13,22,15,15,11,12,14,12,7,12,8,14,12,18,10,8,16,19,17,12,14,15,8,9,19,17,12,13,13,15,18,13,23,24,23,21,17,24,8,21,8,14,14,16,14,8,8,15,20,8,19,21,9,8,13,12,13,15,11,8,11,9,9,8,11,8,21,14,21,15,15,13,7,19,7,7,7,7,7,7,16,12,17,18,7,7,11,11,7,9,9,2,2,3,3,2,2,2,3,3,3,3,3,3,3,3,3,3,4,5,5,5,5,5,5,5,5,3,3,10,10,7,9,7,7,7,6,8,6,6,6,6,6,6,6,7,6,8,6,6,9,7,7,7,4,4,4,4,4,4,4,4,8,9,8,7,8,7,8,10,7,5,5,5,5,5,5,3,9,7,7,8,6,6,6,6,6,6,6,6,9,6,6,9,11,13,7,8,9,9,5,5,5,7,8,6,6,6,6,6,6,6,7,8,9,7,10,9,10,7,8,5,5,5,5,5,5,7,7,9,8,7,7,6,6,6,6,6,6,10,6,6,6,6,6,6,6,6,6,6,6,9,10,4,4,4,4,8,7,7,10,10,9,8,8,15,9,8,8,8,8,8,9,10,9,10,7,8,13,5,5,5,5,5,3,3,7,7,8,6,6,6,4,4,11,9,7,8,9,10,7,5,5,5,5,5,3,3,7,6,6,13,7,9,8,7,5,5,5,5,5,5,5,5,3,3,3,3,7,8,7,8,13,6,6,6,6,6,6,6,6,6,6,6,6,6,6,8,8,6,6,6,6,7,6,7,6,6,9,7,4,4,4,4,4,4,4,7,8,7,8,9,8,8,8,7,10,7,8,5,5,5,5,5,5,5,5,3,7,7,7,7,9,7,10,9,6,6,6,6,6,8,8,6,6,6,7,6,6,6,9,9,4,4,13,7,10,9,9,12,7,8,8,10,8,8,8,8,8,8,5,5,5,5,3,7,7,11,7,9,8,8,6,6,10,6,8,8,8,6,7,6,6,12,4,4,4,4,4,4,4,4,4,9,8,8,16,8,9,8,7,5,5,5,5,5,3,3,7,7,7,10,15,8,9,8,9,9,6,6,6,6,6,6,7,4,8,7,8,8,7,8,11,8,5,5,5,5,5,3,7,7,6,11,16,7,6,4,4,4,4,9,9,8,8,8,13,12,8,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,11,7,8,8,9,13,7,7,7,9,8,8,9,12,7,12,7,12,8,7,10,12,9,9,6,6,8,8,6,6,6,6,6,6,6,9,8,9,11,8,6,6,6,6,6,12,7,6,6,6,9,7,7,6,6,6,6,6,11,9,6,6,6,6,6,7,9,4,4,4,4,4,4,4,4,9,9,9,9,7,7,7,7,7,11,7,7,8,8,8,8,8,8,9,8,9,9,7,7,11,11,7,12,8,8,8,8,8,7,8,8,8,8,8,13,12,8,8,8,8,7,7,7,9,5,5,5,5,5,5,5,3,3,7,7,11,7,8,8,8,6,6,6,6,6,6,6,6,6,6,6,10,11,6,7,9,4,4,4,4,4,4,9,9,8,9,8,8,8,7,7,5,5,5,5,5,5,5,5,5,5,3,3,11,7,7,7,9,6,6,11,8,10,6,6,6,12,8,8,7,6,6,8,7,4,4,4,4,4,4,4,4,9,10,9,9,8,10,9,11,8,5,5,5,7,6,6,8,7,4,4,4,4,8,7,7,8,7,8,8,5,5,5,5,7,7,8,8,8,6,6,6,6,6,10,8,9,13,6,7,6,6,8,7,8,4,4,4,4,11,8,8,8,10,5,5,8,7,8,13,8,7,6,8,6,9,7,8,7,5,5,5,5,5,5,3,3,7,8,9,6,4,8,10,10,8,12,9,13,2,7,5,5,5,5,5,7,7,10,6,6,6,6,6,6,6,8,4,4,9,8,8,8,14,8,8,8,9,8,5,5,5,5,5,3,3,9,6,6,6,6,10,12,6,6,6,6,6,6,6,4,4,4,4,11,8,7,8,8,8,5,5,3,3,3,3,7,7,6,8,6,8,11,7,6,6,6,7,4,8,11,9,10,5,5,5,3,3,3,7,7,8,9,8,15,9,6,6,6,6,6,6,11,11,4,4,4,4,4,7,9,9,10,8,7,5,5,5,5,5,5,3,3,8,6,6,6,6,6,6,6,6,6,9,7,4,4,4,4,4,9,9,8,8,10,13,5,5,5,3,17,7,7,7,7,7,8,6,8,13,6,6,6,6,6,6,6,6,4,4,4,9,10,8,8,8,5,5,5,5,3,7,7,7,8,8,6,6,6,8,8,8,9,10,8,4,8,10,9,8,8,8,9,13,10,5,5,5,5,5,5,5,5,5,5,3,3,7,8,9,9,7,7,7,10,9,9,8,9,8,8,8,6,6,6,6,6,6,6,6,6,6,6,6,6,8,12,6,6,6,6,6,6,6,6,6,12,4,4,4,4,4,4,4,4,4,4,4,11,8,8,9,9,10,8,9,7,7,5,5,5,5,5,5,3,7,8,7,6,6,8,6,6,10,4,7,8,9,12,8,7,7,5,5,5,5,5,5,3,3,7,14,7,9,8,8,6,6,8,12,12,6,6,7,7,10,4,4,4,4,4,9,9,14,9,13,8,7,5,5,5,6,6,6,7,4,8,7,5,5,5,5,5,5,5,5,3,3,7,7,7,8,6,6,6,6,6,6,12,6,6,6,6,4,4,9,9,8,8,11,7,7,7,5,5,5,3,9,8,6,6,7,4,4,4,4,4,4,8,8,11,5,5,5,7,7,7,9,6,6,6,6,6,6,9,8,4,4,4,4,7,12,9,8,8,8,7,10,10,5,5,5,5,5,5,5,3,11,14,8,7,8,8,6,6,6,6,6,8,7,6,6,6,7,6,8,9,4,4,4,7,8,9,7,9,7,7,9,8,5,5,5,5,5,5,5,5,5,11,3,9,7,7,12,14,8,6,6,12,11,8,6,6,6,6,6,6,6,6,6,15,7,4,4,4,16,9,9,9,8,9,9,9,9,9,8,8,8,13,11,8,5,5,5,5,3,7,6,6,8,8,8,6,6,7,10,7,4,4,4,4,9,7,8,7,7,7,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,7,7,7,9,6,6,6,6,6,8,8,7,7,9,6,6,6,7,6,6,6,6,6,15,4,4,4,4,4,8,8,7,8,12,9,8,8,8,8,8,9,8,8,10,8,8,8,8,16,9,10,2,5,5,5,5,5,5,5,9,7,6,8,9,4,4,4,4,4,7,8,8,8,9,8,11,10,5,5,5,5,3,7,8,6,6,6,6,6,8,6,6,6,6,4,12,10,12,7,7,7,7,7,7,7,5,5,5,5,3,3,7,7,10,8,9,7,6,10,7,6,6,4,4,8,9,7,9,9,9,9,8,8,8,8,10,5,5,5,5,5,5,8,7,6,6,6,10,6,7,10,7,4,4,4,4,4,4,4,12,9,10,7,7,10,8,10,5,12,9,6,6,6,6,6,7,6,4,4,4,10,9,9,8,7,7,5,5,5,5,5,5,3,3,13,7,7,9,7,7,7,8,9,9,7,8,6,6,6,6,6,6,6,6,6,6,6,6,6,7,13,9,15,15,4,4,4,4,4,10,10,9,8,9,8,8,9,7,8,7,8,5,5,7,6,6,6,4,4,4,7,8,11,8,5,5,5,5,5,5,5,7,6,6,6,6,6,6,9,11,10,7,4,4,4,9,8,8,5,5,5,5,5,9,9,6,6,6,6,6,6,6,9,9,4,4,4,4,8,8,8,9,9,8,8,8,13,2,4,2,7,5,5,5,5,5,5,9,9,6,6,6,6,10,8,8,8,6,6,6,4,4,9,8,10,8,9,8,8,8,9,8,8,5,3,3,3,11,6,6,6,7,6,6,6,4,4,9,8,5,5,5,5,5,3,11,8,6,6,6,6,6,9,7,4,4,14,10,9,8,12,8,8,8,11,15,8,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,11,11,11,10,10,7,7,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,5,5,5,5,5,5,5,5,5,5,3,3,3,7,11,7,7,11,11,7,8,9,10,7,7,9,9,9,9,7,7,10,8,13,8,8,8,8,11,10,6,6,8,10,11,14,14,6,6,6,6,6,6,9,11,7,7,6,8,12,11,11,6,6,10,6,6,6,6,6,10,7,7,6,6,11,6,6,6,11,8,9,7,6,10,11,9,10,11,7,11,8,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,8,6,6,8,9,10,9,6,6,6,10,6,6,6,6,11,10,11,10,9,8,7,7,7,7,11,14,8,10,9,9,8,8,7,11,8,8,8,11,11,10,10,9,10,8,11,10,8,11,9,12,8,10,8,11,8,9,9,11,11,10,11,13,8,7,8,8,9,7,8,8,8,8,7,8,2,2,2,2,2,2,2,4,4,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,4,2,3,3,3,3,3,3,3,3,8,6,4,4,4,11,7,11,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,5,5,5,5,3,3,3,3,8,7,7,8,8,4,8,7,7,7,9,7,8,9,8,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,6,3,3,3,3,3,3,3,3,4,2,2,3,3,3,3,3,4,5,5,3,8,8,6,9,4,4,10,7,3,3,3,2,5,3,3,3,3,3,3,3,3,3,3,3,3,4,3,2,2,2,3,3,3,3,3,4,10,2,3,3,3,3,3,3,3,4,2,3,3,3,3,3,3,3,3,2,2,3,3,3,5,2,4,2,6,2,2,9,5,5,3,3,3,3,3,3,3,5,5,5,9,8,7,6,6,11,4,4,4,4,4,4,4,4,6,6,7,7,11,8,8,6,5,11,2,3,3,3,3,3,3,3,3,3,3,3,3,3,4,2,2,3,3,3,3,3,3,6,4,4,4,4,3,3,3,3,5,7,2,3,3,3,3,3,8,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,6,4,4,4,4,2,2,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,4,2,2,3,3,3,3,3,3,2,3,3,3,3,3,6,3,3,8,10,3,4,4,1,1,1,1,1,1,1,8,9,10,7,7,1,1,3,8,7,7,8,8,8,1,6,1,1,6,3,3,4,7,3,5,5,4,4,4,4,4,2,7,7,8,12,3,4,5,1,3,4,4,10,4,3,3,3,8,7,7,2,2,2,2,2,2,2,2,2,12,9,20,7,5,5,5,9,13,5,5,5,5,5,3,3,3,16,5,5,5,13,7,8,8,11,8,7,9,7,11,12,9,9,8,8,11,10,14,7,12,10,11,13,7,9,11,17,17,14,13,7,8,7,10,10,7,16,13,7,8,17,12,9,8,6,7,10,6,6,12,6,8,10,8,8,8,6,8,6,14,6,6,6,13,6,10,6,6,7,14,8,6,6,10,11,10,9,9,7,7,6,6,6,9,9,7,9,10,9,13,12,4,4,4,4,4,4,4,4,4,6,6,6,8,8,6,8,9,10,9,7,10,10,8,7,8,7,10,12,9,8,15,8,7,8,8,7,7,15,13,7,10,9,14,18,16,7,24,7,8,10,11,16,8,14,7,9,9,9,11,13,19,14,15,14,11,7,13,9,10,7,13,9,10,11,12,8,9,2,3,5,8,7,4,4,10,5,3,3,3,3,3,5,4,4,4,2,2,2,2,2,1,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,2,2,2,3,3,3,3,3,3,3,3,3,3,4,2,12,5,3,8,10,15,6,7,2,3,2,5,5,12,2,5,5,5,5,2,2,5,5,12,9,5,2,2,9,5,5,12,12,5,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,9,12,5,8,8,9,5,5,5,8,19,7,16,15,14,9,9,9,9,7,11,11,11,7,14,10,10,5,5,5,5,5,5,5,5,5,15,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,9,9,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,14,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,15,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,5,5,5,5,5,5,5,12,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,9,9,12,9,9,12,12,12,15,7,11,7,14,11,18,13,8,18,15,18,12,14,12,8,8,8,8,9,9,9,12,7,10,10,8,8,12,12,12,7,12,12,9,7,7,7,7,7,8,15,12,9,10,10,7,10,10,13,11,10,9,22,11,9,8,8,8,8,8,13,18,13,9,15,19,9,7,7,10,7,7,7,11,8,13,17,7,7,10,10,10,7,20,16,7,7,7,7,7,7,11,21,12,12,13,11,14,16,8,8,13,11,7,7,13,7,7,14,15,15,6,6,6,6,6,6,6,6,6,6,13,10,18,6,6,6,6,6,6,6,6,6,11,8,8,12,12,11,11,8,12,9,9,9,13,13,9,9,9,9,9,9,6,10,12,6,6,6,6,17,11,7,7,7,7,14,14,12,6,7,7,6,6,15,10,13,10,6,8,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,13,9,9,15,13,6,12,12,6,19,11,10,7,7,16,8,19,17,9,9,9,9,9,6,6,6,10,8,16,8,6,6,9,6,6,6,6,6,6,6,6,8,8,8,6,7,6,6,6,6,6,6,6,6,6,6,6,14,6,6,6,6,20,6,9,6,14,9,9,9,6,9,8,8,12,9,8,8,8,8,7,8,12,7,8,8,8,6,8,6,6,6,6,6,6,6,9,8,8,6,6,13,9,12,13,12,14,13,12,11,11,6,8,8,8,6,13,12,11,11,12,6,11,12,11,13,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,15,6,6,6,6,6,6,6,13,6,6,6,6,6,6,6,6,6,6,6,6,6,8,8,8,8,6,18,6,12,13,13,13,9,10,15,9,12,6,6,6,6,6,6,6,6,9,15,10,9,10,13,9,19,8,18,17,10,10,8,8,6,6,6,6,6,6,10,14,8,16,16,9,8,15,8,8,10,12,14,7,7,8,8,7,7,7,7,8,13,13,11,9,9,9,12,10,17,8,11,9,7,7,14,8,14,14,7,7,7,7,7,7,14,7,7,7,7,7,10,10,8,14,7,7,7,7,8,8,8,8,8,17,9,7,15,7,8,12,7,9,14,7,7,7,9,13,8,14,7,16,18,13,15,14,12,13,10,15,9,7,7,7,10,13,15,15,9,9,9,9,19,11,7,11,11,13,8,8,8,8,7,12,19,17,9,9,13,7,7,7,9,7,7,7,12,13,15,10,8,8,14,15,12,13,13,8,12,14,7,11,7,14,15,13,12,8,8,8,8,11,13,15,15,8,13,12,8,8,8,13,10,16,14,11,8,8,12,12,9,15,15,12,12,13,8,8,9,12,13,9,8,8,8,8,8,8,8,8,8,8,8,11,12,11,7,14,7,13,13,13,12,18,16,7,12,11,10,10,15,9,9,9,21,7,7,7,11,16,8,8,11,11,7,7,7,7,7,19,7,7,7,7,7,7,7,7,7,12,8,9,12,14,11,9,9,9,22,12,3,8,8,15,4,2,2,5,5,3,3,3,3,3,3,6,6,4,4,4,12,7,10,2,3,3,3,3,3,3,3,6,7,3,7,5,14,4,4,7,8,10,4,1,3,3,6,2,4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,2,2,5,3,4,2,2,2,2,2,2,11,5,5,5,11,5,5,3,5,5,5,5,11,14,13,9,11,9,12,8,11,11,8,11,16,9,9,7,10,9,12,8,15,6,7,6,6,13,10,8,11,8,6,6,6,12,16,6,11,7,8,9,18,6,6,9,4,4,6,13,6,6,6,6,8,8,9,16,7,7,14,7,8,8,8,7,7,7,7,7,7,15,13,7,10,7,7,10,12,16,15,7,9,9,14,11,11,10,9,10,8,12,7,8,7,7,10,12,7,12,8,7,2,3,3,3,3,3,3,3,3,3,3,5,3,3,5,5,5,10,4,8,7,10,3,3,3,3,3,3,3,3,3,3,1,3,3,3,3,3,3,3,7,4,5,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,5,5,5,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,5,6,6,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,9,8,2,2,2,8,12,7,7,5,5,5,5,5,5,5,5,5,5,5,5,8,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,5,5,5,7,11,9,8,8,8,7,8,9,7,7,9,7,7,7,10,7,7,10,9,10,6,6,6,6,6,6,15,7,8,9,9,8,6,6,10,9,6,8,13,9,7,6,6,6,6,6,6,12,6,6,7,6,7,6,6,6,10,10,7,6,6,6,4,4,4,4,4,4,4,4,4,4,4,4,4,4,6,14,6,6,7,7,9,6,6,6,6,9,9,8,9,10,9,8,9,12,7,7,7,8,7,10,12,11,9,10,7,7,7,9,10,10,8,12,9,7,7,9,8,8,8,10,7,7,8,9,9,7,7,7,8,2,4,6,3,4,2,3,3,3,3,2,3,3,3,3,3,3,3,3,4,4,4,4,5,5,3,3,3,3,3,3,3,3,5,8,6,4,7,3,3,3,3,3,3,3,12,3,3,3,3,3,3,4,4,2,3,5,3,4,7,3,3,3,3,3,3,4,3,3,3,3,3,3,3,4,3,3,6,4,3,4,2,2,2,5,3,3,3,3,3,5,4,4,4,4,7,6,8,9,2,2,2,2,3,3,3,5,7,2,3,3,8,7,7,2,2,8,5,3,3,3,3,3,3,3,3,3,3,3,3,3,5,5,8,8,7,7,6,10,6,9,7,11,4,6,8,8,7,8,4,5,5,5,3,3,11,8,9,6,6,8,7,4,4,7,8,7,2,2,3,3,3,3,4,3,3,3,3,3,3,3,3,7,2,2,5,3,3,2,3,3,3,3,3,3,4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,12,5,5,3,3,3,5,10,12,6,15,4,6,6,7,14,9,3,3,3,3,3,8,2,2,3,5,3,3,3,3,3,3,8,8,8,7,5,8,4,6,11,2,2,6,7,2,9,8,5,5,3,3,5,5,7,7,6,6,10,6,6,8,9,7,4,4,4,4,7,6,6,7,7,10,9,8,11,8,3,3,3,3,3,4,4,2,3,3,3,3,3,7,6,2,5,6,7,6,4,8,9,11,2,2,3,3,3,3,3,3,3,2,2,5,3,3,3,3,3,9,9,6,4,8,7,7,5,9,8,6,8,7,8,5,5,5,5,5,3,3,3,16,8,7,7,7,8,7,7,7,7,9,6,9,6,10,7,7,7,6,10,8,9,11,11,8,4,4,10,8,8,6,9,6,11,8,8,8,15,7,8,9,5,3,3,3,3,3,5,11,2,2,3,8,9,10,3,2,2,2,2,2,2,3,6,4,2,2,3,3,3,3,3,3,3,3,3,3,4,4,2,3,3,3,3,3,3,3,11,5,3,3,3,3,3,3,3,3,6,7,4,4,2,3,3,3,3,3,3,3,3,12,7,4,12,4,6,5,4,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,2,3,3,3,3,3,3,3,3,4,4,11,10,6,4,6,10,8,3,3,3,3,3,3,3,3,5,4,4,4,2,2,2,2,2,2,2,2,5,3,4,4,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,10,5,5,5,5,5,5,3,3,3,3,3,3,3,3,7,8,8,7,13,12,10,10,8,8,7,7,9,12,11,6,6,8,8,9,7,7,7,10,15,10,4,4,4,4,4,11,8,8,9,7,9,14,14,12,2,2,2,2,2,2,2,3,3,3,3,3,2,2,12,5,5,5,8,11,10,7,9,3,8,7,3,15,13,11,4,4,2,2,2,19,7,5,5,3,3,3,3,3,3,3,5,22,18,6,14,17,4,4,19,16,18,2,3,3,2,3,2,3,3,6,4,2,3,3,2,5,3,3,3,3,3,3,3,9,9,2,3,2,2,2,3,3,3,5,7,14,7,7,12,9,13,6,11,6,10,9,7,7,8,12,12,8,8,8,10,7,7,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,5,8,10,7,8,11,8,12,9,4,7,7,9,13,2,3,3,3,3,3,3,2,3,3,3,1,2,2,3,3,3,3,3,3,5,2,2,5,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,8,4,4,4,3,2,3,3,3,3,5,2,2,2,2,5,5,5,5,3,3,3,3,3,3,3,3,3,7,7,7,7,7,8,8,8,8,8,12,9,8,8,9,8,6,17,6,6,6,8,8,6,6,6,6,6,6,6,6,6,6,6,7,4,4,8,8,9,9,9,7,7,7,7,7,7,7,9,9,9,7,8,8,8,10,7,13,10,8,9,3,3,5,13,3,3,3,3,3,7,7,6,6,10,13,11,11,8,8,9,8,9,9,10,10,10,11,10,10,13,13,16,15,11,12,9,9,10,9,11,10,9,9,14,7,8,3,10,7,7,3,2,2,2,5,3,3,3,3,3,3,3,3,3,3,3,3,6,7,2,2,3,3,3,3,3,3,3,3,4,11,6,7,4,6,2,2,3,3,3,1,3,3,3,3,3,3,6,4,4,2,2,2,3,3,3,3,4,4,6,6,6,6,5,4,4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,9,11,6,10,9,12,7,7,11,14,9,7,12,3,3,7,12,11,12,7,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,9,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,3,3,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,11,5,5,5,5,5,5,5,5,11,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,5,5,5,5,5,5,5,3,3,3,5,5,5,5,5,5,5,5,5,5,5,3,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,5,5,5,5,5,5,5,5,5,5,5,5,5,3,10,3,3,3,11,3,5,9,11,8,12,14,9,7,8,7,7,11,11,7,7,10,9,8,10,9,7,7,7,7,7,7,8,8,7,11,8,8,8,7,7,10,8,7,13,12,7,17,10,8,8,11,7,11,11,14,7,11,7,8,6,9,20,8,7,9,16,7,10,6,11,10,8,9,7,16,11,11,9,8,9,8,8,8,11,8,15,8,8,9,7,8,8,11,10,7,5,7,10,10,15,7,7,7,8,7,8,8,10,11,10,10,10,11,11,7,8,6,8,8,8,10,6,8,6,6,7,8,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,16,6,15,6,7,11,11,7,9,10,11,13,10,6,16,8,10,12,11,6,6,6,6,6,6,6,10,6,10,7,7,7,7,11,7,11,6,6,6,6,6,6,17,7,7,6,6,12,22,6,6,6,6,6,8,6,6,6,6,7,6,6,5,6,6,8,11,6,9,14,11,9,11,7,7,8,6,6,6,8,10,9,6,6,6,6,9,7,6,6,6,6,6,15,6,4,4,4,6,4,17,8,11,6,6,9,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,6,6,6,6,10,6,10,6,6,6,6,12,8,6,6,6,6,6,6,6,6,6,9,6,6,6,6,18,6,6,6,8,9,10,7,8,9,10,11,7,13,6,8,8,6,6,14,7,7,7,7,10,7,14,9,6,6,9,15,9,7,14,6,11,14,13,7,12,8,7,7,7,7,7,12,7,10,9,16,6,8,6,5,17,6,8,10,4,6,4,10,15,17,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,8,4,4,11,7,4,4,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,19,17,6,10,11,6,6,6,6,18,6,6,11,4,4,4,5,6,6,6,9,5,6,4,6,6,4,6,6,6,6,10,6,6,4,6,6,10,6,10,6,6,6,6,11,6,6,10,6,6,8,6,6,6,8,6,11,4,11,9,10,9,11,4,8,4,11,12,7,9,8,6,7,7,8,12,12,11,13,10,11,7,7,7,9,7,11,10,7,7,7,16,11,10,11,17,9,9,8,8,7,7,7,9,7,7,7,14,7,13,9,11,10,14,10,10,12,11,10,7,10,5,14,8,8,8,9,7,8,7,7,9,8,7,8,7,7,7,7,7,7,7,11,8,10,8,7,8,14,11,8,9,9,9,8,24,10,10,12,7,7,15,11,8,8,12,11,8,9,9,7,8,9,10,11,10,11,7,12,7,7,11,9,8,14,13,12,8,11,10,8,8,7,7,14,9,10,8,9,11,7,14,8,8,13,8,8,12,7,10,14,14,11,9,10,9,9,7,7,11,11,13,9,13,5,5,5,7,9,5,11,12,14,8,7,7,11,10,9,7,8,8,7,10,11,11,5,5,7,5,5,5,7,7,15,7,7,8,7,15,12,12,10,7,8,7,11,7,7,7,23,11,8,8,11,10,7,8,11,7,19,7,7,6,9,9,9,11,3,4,7,8,6,6,4,10,8,2,2]),zv=new Uint16Array([0,0,0,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,12,1,1,1,1,1,17,1,1,1,12,1,12,1,12,13,1,1,1,1,12,1,12,1,1,1,1,1,14,21,1,1,1,1,1,1,1,19,12,1,1,1,1,1,1,1,20,1,1,1,16,1,18,1,1,15,1,1,1,1,12,1,1,1,1,1,1,22,1,1,1,12,1,1,1,1,1,1,1,1,1,12,12,12,12,12,12,12,12,12,12,12,12,1,24,25,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,12,12,12,12,1,32,0,0,0,1,1,1,1,35,34,1,1,1,1,1,33,1,1,1,1,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,38,0,0,0,0,39,40,0,0,0,41,0,12,1,1,12,1,1,1,1,44,45,45,45,44,45,44,44,46,45,44,45,44,44,44,44,44,44,46,44,44,44,44,44,44,45,47,47,45,44,44,44,44,44,12,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,50,52,50,50,50,52,50,51,50,53,50,51,51,50,50,50,51,53,51,53,50,51,51,12,55,55,54,56,51,53,50,50,48,49,57,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,60,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,67,1,12,1,1,66,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,78,0,0,0,0,0,0,0,0,0,0,0,0,0,76,79,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,77,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,12,1,1,1,1,89,1,91,1,1,1,1,1,1,1,1,94,1,1,1,1,1,1,1,1,1,1,1,1,0,1,97,97,1,1,12,1,100,1,1,1,1,1,1,1,98,1,99,1,101,1,1,1,1,1,102,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,110,111,1,1,1,1,1,1,113,113,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,121,122,1,1,1,1,1,1,1,1,1,1,1,1,1,122,1,1,1,1,1,1,1,1,1,1,122,1,1,1,1,1,1,1,1,1,126,123,125,120,1,124,1,1,114,1,1,1,1,117,1,127,1,1,1,1,1,119,1,108,1,109,1,12,128,106,1,112,1,1,1,1,1,107,115,1,12,12,12,118,116,1,1,1,1,1,1,0,0,0,0,1,12,12,1,1,1,1,1,12,134,1,1,1,1,1,1,1,1,1,1,1,12,136,1,1,1,1,1,1,1,1,137,138,12,12,135,133,45,45,140,50,50,139,142,141,1,1,0,0,0,0,0,0,0,0,0,0,0,0,145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,143,0,0,0,0,1,0,144,132,1,0,1,12,12,1,1,1,1,1,0,0,0,0,0,0,0,1,148,147,20,1,1,12,12,1,20,12,12,1,1,1,1,1,134,1,1,152,1,1,1,1,153,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,1,1,136,1,1,152,1,1,1,1,153,1,1,134,1,1,1,152,1,1,1,1,153,1,1,134,1,1,1,1,1,1,1,1,134,1,1,1,1,1,1,1,1,1,1,1,160,1,1,1,152,1,1,1,1,1,153,1,1,160,1,1,1,1,1,1,1,1,1,1,134,1,1,1,1,152,1,1,1,1,153,1,1,1,134,1,1,152,1,1,1,1,164,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,1,167,1,1,160,1,1,1,1,1,152,1,1,1,1,1,153,1,1,160,1,1,1,1,1,152,1,1,1,1,1,153,1,154,158,158,12,1,12,166,1,1,1,1,1,158,158,158,154,1,1,1,157,158,161,165,1,1,1,1,157,157,1,1,156,154,154,157,170,156,170,1,1,168,1,156,155,157,1,1,1,1,157,1,159,1,1,1,12,1,162,1,162,1,1,1,162,161,163,169,156,154,1,1,1,1,1,1,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,173,172,173,172,172,172,172,174,174,172,173,172,173,172,172,12,12,12,12,12,1,12,12,12,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,12,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,193,1,1,1,1,12,199,200,201,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,151,1,1,1,1,1,1,1,1,1,1,1,196,1,1,1,184,1,210,1,1,1,208,1,1,205,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,12,1,1,1,1,1,12,1,1,1,1,1,1,1,1,190,1,1,1,186,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,182,1,1,1,1,1,1,1,191,1,1,1,1,195,1,1,1,1,171,1,1,189,1,1,1,192,1,1,1,12,1,1,1,1,1,1,1,1,1,1,1,1,180,1,12,1,1,12,1,1,1,1,183,1,1,1,188,1,203,12,1,1,1,1,1,1,1,1,1,1,1,1,1,1,12,1,1,209,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,194,1,1,1,1,1,12,1,1,1,1,1,1,1,1,176,12,1,1,1,178,12,1,1,1,1,1,1,1,198,1,1,1,1,1,1,1,1,1,1,177,1,1,1,1,1,1,204,1,1,1,181,1,1,1,187,1,12,1,1,12,1,1,1,1,1,1,1,1,1,1,191,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,175,1,1,1,1,1,1,1,1,1,1,185,1,1,1,1,1,1,1,1,1,1,1,206,1,1,1,1,1,1,1,1,1,1,1,1,1,207,1,1,12,1,1,1,1,179,1,1,1,185,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,12,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,12,1,1,1,197,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,12,12,1,1,1,1,1,1,1,1,1,202,1,1,12,1,1,1,12,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,220,0,0,0,0,0,221,0,0,0,0,0,0,1,12,1,1,1,225,1,1,1,0,226,223,224,1,1,1,1,1,1,231,1,233,1,1,1,1,1,1,1,1,1,1,1,229,1,1,1,1,1,235,1,1,12,1,12,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,234,1,1,1,12,1,1,1,1,230,1,1,1,228,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,232,1,1,1,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,1,12,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,241,13,1,1,1,12,12,238,239,1,1,1,1,240,1,1,12,1,1,1,1,1,1,1,242,1,1,12,16,1,1,1,1,1,1,1,243,1,1,1,12,12,1,1,1,1,1,243,12,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,252,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,256,256,1,0,0,0,0,0,1,12,0,0,0,0,0,0,0,0,172,261,262,1,12,1,1,1,1,12,264,1,1,263,1,1,266,1,1,1,1,1,1,1,1,1,0,1,1,1,271,272,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,12,1,0,1,0,0,0,0,1,0,1,0,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,12,0,283,0,0,284,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,12,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,60,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,1,1,0,308,0,0,0,0,0,0,0,0,0,310,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,12,1,1,1,1,1,1,1,1,1,12,1,1,1,1,1,327,327,328,327,0,185,1,1,13,323,1,321,0,0,0,0,1,0,0,0,324,1,1,329,1,205,1,1,1,1,1,322,1,319,1,325,1,317,1,326,1,318,1,1,1,1,1,1,1,12,1,1,1,12,1,12,320,320,1,1,1,316,184,1,1,12,1,1,1,1,1,1,1,1,1,1,12,1,1,1,1,12,1,1,1,1,315,1,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,332,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,266,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,372,372,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,364,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,0,1,340,351,1,1,339,374,1,345,1,1,337,369,1,1,355,336,341,1,1,1,348,379,357,1,1,1,1,1,1,358,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,0,367,371,0,0,79,1,1,0,365,342,378,343,346,353,1,368,0,1,0,79,362,360,1,0,0,1,1,1,0,0,0,0,381,1,1,352,1,79,1,0,1,1,1,384,1,0,0,79,359,0,1,338,1,1,1,0,1,1,361,1,0,1,1,1,0,1,386,349,1,1,0,1,0,0,377,0,1,1,1,79,370,1,1,366,363,1,1,1,1,1,1,1,1,1,1,1,344,1,1,1,1,1,1,1,1,1,1,1,376,0,79,1,1,1,1,0,1,1,1,1,1,1,0,0,1,1,380,1,1,1,0,0,383,0,0,0,1,356,1,0,79,382,1,0,0,0,0,385,1,1,0,0,1,0,1,0,354,0,350,0,1,1,1,0,1,1,0,373,347,375,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,1,1,400,400,1,1,12,12,1,400,1,1,12,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,412,1,1,0,1,1,1,1,205,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,430,430,1,1,0,0,317,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,442,1,441,1,1,1,1,1,1,1,1,445,1,12,12,1,1,1,1,1,12,1,1,1,1,453,1,1,1,455,1,1,1,1,1,1,1,1,1,1,452,1,447,1,1,1,1,435,1,1,1,1,1,1,1,1,448,12,1,1,1,1,454,1,1,1,449,444,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,317,1,433,1,1,12,451,1,1,317,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,437,1,1,1,1,1,1,1,1,1,1,1,454,1,1,1,1,317,1,450,1,1,1,439,1,1,1,1,1,440,1,456,443,1,1,1,1,1,438,1,1,1,1,1,1,1,1,1,434,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,446,1,1,1,1,1,1,1,12,1,1,1,1,1,436,1,1,1,1,1,1,1,220,457,1,1,1,1,1,12,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,1,0,0,1,0,1,0,1,1,0,0,0,462,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,12,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,466,0,466,466,466,466,466,466,466,0,466,466,466,466,466,1,466,466,466,0,466,466,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,471,470,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,475,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,468,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,469,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,477,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,466,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,474,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,467,0,0,478,473,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,472,0,0,0,0,0,0,0,0,0,0,0,0,0,466,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,467,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,466,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,476,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,12,1,1,1,1,1,1,1,1,1,1,1,1,488,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,198,198,1,492,1,1,1,491,1,1,1,1,487,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,489,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,493,1,1,490,1,1,1,1,1,1,1,1,372,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,494,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,505,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,1,0,0,0,1,0,0,0,0,1,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,1,0,1,0,0,12,1,507,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,12,12,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,1,0,1,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,1,0,0,0,1,0,0,0,1,60,1,1,12,12,12,12,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,526,1,1,1,1,1,1,1,527,1,1,1,1,1,1,1,525,1,1,12,1,529,239,1,1,12,12,1,1,12,1,12,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,533,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,1,1,1,539,1,1,1,1,1,1,1,1,1,1,1,1,1,1,132,1,12,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,107,1,1,12,1,1,1,12,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,548,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,144,1,1,1,228,1,1,12,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,1,572,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,577,1,220,1,328,1,1,1,1,1,1,1,1,1,0,0,578,1,1,1,1,0,580,0,79,0,579,0,1,1,1,0,1,1,1,1,1,1,12,0,0,0,0,1,0,0,0,0,0,0,586,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,582,582,0,585,583,582,582,582,582,582,587,582,582,591,582,582,582,582,582,582,582,582,582,582,588,585,582,582,585,582,582,582,582,582,582,582,582,582,582,582,582,582,583,582,582,582,582,582,589,582,582,582,582,582,582,0,0,0,1,590,1,1,1,1,584,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,12,595,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,12,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,12,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,12,1,1,12,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,96,65,280,306,411,535,0,4,68,236,254,282,307,334,388,413,0,499,519,536,597,9,0,61,88,398,409,429,575,0,497,518,532,612,0,30,6,0,461,500,602,560,70,0,7,285,255,389,463,416,538,79,598,0,576,309,418,465,9,105,288,506,6,30,0,311,79,391,79,483,10,6,131,248,275,0,613,509,0,563,0,64,6,6,251,95,2,432,399,410,596,0,6,0,6,286,103,6,561,501,540,0,464,390,273,287,8,71,104,599,543,392,312,300,419,146,74,290,546,510,601,564,335,330,479,6,75,149,11,0,249,522,547,565,514,551,570,611,36,6,260,295,333,304,218,30,528,553,218,42,216,265,296,305,406,423,481,274,0,73,562,0,403,417,299,79,247,79,0,581,545,504,292,421,79,393,387,0,0,0,9,555,571,217,0,424,407,531,516,573,615,85,218,43,297,396,425,569,0,511,293,276,79,215,80,28,390,30,6,394,331,303,604,592,524,550,513,0,258,81,30,405,422,0,30,426,0,219,593,517,9,408,427,218,248,86,222,594,574,557,482,428,397,250,227,87,59,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,620,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,414,0,0,0,0,0,0,0,0,82,0,129,0,0,84,549,0,0,0,0,0,0,0,27,0,552,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,414,0,0,0,0,503,0,257,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,294,0,0,0,0,0,0,0,617,0,0,0,0,0,616,0,0,0,0,0,0,0,0,0,0,0,0,0,0,395,0,0,0,484,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,69,0,0,0,0,0,0,495,0,0,0,0,0,0,404,0,0,0,0,0,0,0,0,0,0,0,0,0,211,0,0,0,0,0,0,0,0,0,0,515,0,0,0,0,0,0,0,0,0,0,0,0,496,0,0,0,0,0,0,0,0,0,0,0,0,0,0,269,281,0,0,0,0,0,530,277,0,0,0,0,0,0,0,0,0,0,0,0,0,512,0,0,0,0,0,0,0,0,0,0,0,458,0,0,0,314,0,0,0,0,0,0,253,0,0,0,0,0,0,23,0,0,0,0,568,0,0,0,0,600,521,0,0,0,0,244,0,0,0,0,0,0,0,0,0,480,0,0,0,0,0,62,0,0,0,267,58,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,246,0,0,0,0,0,279,610,0,72,0,0,0,0,0,0,0,0,0,619,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,150,0,278,0,0,0,0,0,0,567,0,0,0,0,0,0,523,0,0,0,0,0,0,0,0,0,566,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,213,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,84,0,502,0,0,0,0,0,554,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,84,83,0,0,0,0,0,0,0,0,0,0,0,0,486,0,485,0,0,0,0,0,0,0,0,0,0,259,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,459,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,289,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,537,0,0,0,0,0,0,0,0,298,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,69,237,0,0,0,0,0,0,0,0,0,0,84,0,606,0,0,0,0,0,0,0,0,0,0,0,0,245,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,609,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,520,0,0,0,84,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,498,0,614,0,0,431,0,0,0,0,0,0,0,0,0,0,0,0,402,0,0,0,544,0,93,0,0,0,0,0,0,0,0,0,0,31,0,0,0,0,0,0,29,92,0,0,0,0,0,0,0,0,0,0,0,0,291,0,0,0,214,0,0,0,0,0,0,558,0,270,0,0,130,0,0,0,0,0,559,0,0,0,0,0,0,0,414,420,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,313,0,0,0,0,0,5,0,0,0,0,0,0,0,301,0,0,0,0,0,0,0,0,0,0,0,0,0,534,0,0,0,415,0,0,401,0,0,0,0,0,0,603,0,0,0,541,0,0,90,0,542,0,0,0,0,0,0,0,0,0,0,508,460,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,268,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,414,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,608,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,607,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,618,0,0,0,0,0,556,0,0,0,0,0,0,0,0,0,0,302,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,605,0,0,212,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,623,623,623,623,623,623,623,622,624]),ef="orgmilcomschnetedugovdrrformsfeedbackofficialaccoorgmilschnetgovmagazinemediaunioncargopilotgroupcaarespressworksaerodromeworkinggroupair-traffic-controlaircraftaccident-preventioneducatormarketplaceambulanceinsurancecateringairportrepbodyenginesoftwaremodellingair-surveillanceconsultingchartertrainermaintenanceservicesdesignflightskydivingfreightassociationstudentgroundhandlingdgcafuelclubtaxicrewshowballooningexpresstraderbrokerauthoragentsairtrafficjournalistsafetyconsultantmicrolightaccident-investigationparachutingequipmentproductionfederationrecreationscientistnavigationengineertradingglidingleasingresearchpassenger-associationentertainmentparaglidinghangglidingaerobaticrotorcraftemergencycertificationgovernmentaeroclubexchangelogisticschampionshiphomebuiltcouncilconferencecontrolairlinecivilaviationjournalorgcomnetedugovcoorgcomnomnetobjofforgcomnetuwukiloappsframerorgmilcomnetedugovcoradioorgcomnetcommuneedogpbcoitgvorgedugov*spreviewfrontendrelayononstagingupid*mtls*privatelinktypedreamdeveloperbravemochawindsurfaivenmirenupsunwnextbegetngrokclerkwale2bwebcsbrunputerflutterflowspawnbaseshiptodaymagicpatternsnetlifyondigitaloceanrailwayhostedclaudehasurabotdashvercelgithubluyanigadgetreplitcloudflaretelebitedgecomputeevervaultdetaexponyatnoopencrpplxzeaburwasmerframerzeropsconvexmedusajsspritesonherculeseasypanelstreamlitsnowflakemesserliloginlinehackclubnorthflankbase44corespeedadaptableleapcellngrok-freeclerkstagelovableon-fleek*us-west-3ap-south-2us-central-2us-central-1eu-central-1ap-south-1us-west-2us-east-2eu-north-1ap-north-1us-west-1us-east-1*rcloudintsegorgmilcomgobbetnetintedugovturmusicasenasamutualcoopip6uriurnin-addre164homeirisgovdixdaemoncloudnssthwien*inexexkunden4accogvormymyspreadshop4lima2ixortsinfofuturecmsfuturehosting12hpprivfuturemailinglima-cityfunkfeuer123webseitednshomemelmyspreadshopcloudletswasantqldvicactnswtascatholicwasaqldvictasvpsidwasantozqldorgcomvicasnactnetedugovnswtasconfhrsncomairflowlambda-urltransfer-webappairflowtransfer-webapptransfer-webapptransfer-webapp-fipstransfer-webappeu-west-3ap-south-2eu-south-2eu-central-2ap-southeast-3ap-southeast-4ap-northeast-3eu-central-1mx-central-1me-central-1ca-central-1il-central-1ap-northeast-1ap-southeast-1me-south-1af-south-1eu-south-1ap-south-1ap-southeast-7us-west-2eu-west-2us-east-2eu-north-1ap-southeast-2ap-northeast-2ap-southeast-5us-gov-west-1us-gov-east-1ca-west-1us-west-1eu-west-1us-east-1ap-east-1sa-east-1privatenotebookstudiolabelingnotebookstudionotebooknotebook-fipslabelingnotebookstudionotebook-fipsnotebookstudio-fipsnotebook-fipsnotebookstudionotebook-fipsnotebookstudioeu-west-3ap-south-2eu-south-2eu-central-2ap-southeast-3ap-southeast-4ap-northeast-3eu-central-1me-central-1ca-central-1il-central-1ap-northeast-1ap-southeast-1me-south-1af-south-1eu-south-1ap-south-1us-west-2eu-west-2us-east-2eu-north-1ap-southeast-2ap-northeast-2experimentsus-gov-west-1us-gov-east-1ca-west-1us-west-1eu-west-1us-east-1ap-east-1sa-east-1onrepostsagemakercopporgmilcompronetintedugovbiznameinfoshoprsorgmilcomnetedugovbrendlyresolvenzauscotvstoreorgcomnetedugovbizinfoidacaicoittvorgmilcomschnetedugovinfocloudezproxyacmymyspreadshopkuleuvenwebhostingtransurl123websitecloudnsinterhostsolutionsddns5476103298edgfacbmlonihkjutwvqpsryxzbarsycoororgcomedumyftpno-iporxcloud-ipfor-somemmafanfor-morewebhopselfipjozidyndnscloudnsdscloudfor-thefor-betteractivetrailcoeconorestooteorgcomeconeteduassurmoneyafricaarchitectesrestaurantloisirstourismavocatsinfoagrounivcoorgcomnetedugovtvdeportesaludtksatorgmilcomwebgobnetinteducienciaboliviarevistacooperativaempresanombreindustriamusicapatriamedicinademocraciapoliticapuebloindigenaplurinacionalarteblogwikiinfoagrotransportenoticiasprofesionalacademiaeconomiaecologiamovimientotecnologianaturalsimplesitecepesebamapadfmgalampbacscpirngorotomtrjspaprrprrsesmscepesebamapadfmgalampbacscpirngorotomtrjspaprrprrsesms*biaamfmtcmptvfeirasampajampanatalbelemananiradiog12medindfndbmdtrdthepoaggfjdfdefinfenflegsegongengcngorgzlgslglogppgmillelqslcimcomnomadmjabimbbibbsbabcrectecsjcetcpscpvhudieticriapipsiecnbiorioecogeoteoodoproatoartfstmatvetdetbetnetcntnotfotgrueduajuespappreptmpemparqsrvadvdevgovntrturagrjorfarjusmusdesvixxyzcozfozslzbhzmaringasantamariacampinagrandegoianiasorocabafloripasaobernardocuritibaboavistarecifeaparecidasaogoncasalvadorcuiabamorenamacapalondrinacontagemsocialfortalmaceioleilaoosascoriobranconiteroi9guacutcheblogflogvlogwikitaxicoopmanauspalmascaxiasjoinvillebaruericampinassantoandreribeiraoriopretoweorgcomnetedugovv0windsurfshiptodaycloudsitecoaccoorgnetgovofmilcomgovmediatechzacoorgcomnetedugsjgovmydnspenfnlabnbmbgcbcqconcontnuyksknsmyspreadshopno-ipawdevboxbarsyonidatemfuinabusavinstanceseceuguukussryzespawncsxcloud-ipmyphotosfantasyleaguetwmailcleverappsscrappingccwucloudnsftpaccessgame-serverccgovobjectsrmalpgcust*svcalp1aeappenginermalpgmyspreadshop4lima2ixsquare7cloudscale123websitefirenet12hpflowgotdnslinkyard-cloudcloudnslima-citydnskingobjectstorageedaccogoorusorgcomnetinteduaéroportxn--aroport-byaassogouvcomilgobgovcloudnses-1eu-west-1us-east-1euvipit1eurarubait1s3lbwebsites3websiteru-spbru-mskelasticcsrunstnukukcaukusnl-ams-1fr-par-1fr-par-2functionsnodess3ddlwhmrdbfnck8sifrs3-websitecockpitscblmgdbdtwhkafkpubprivs3ddlwhmrdbk8sifrs3-websitecockpitscblmgdbdtwhkafks3ddlrdbk8sifrs3-websitecockpitscblmgdbdtwhkafkk8sscalebookpl-wawfr-parnl-amsbaremetalsmartlabelinginstancesdechk2kuleuvenlaravelvoorloperurownoxazapscwhstgrvaporobservablehqelementorantagonistreclaimjoteluluencowaydiademjelasticmatlabmagentositetrendhostingaxarnetperspectajenv-arubajelejoteravendbemergenttrafficplexconvexkeliwebserveboltbegetcdnstaticson-rancherprimetelonstackitunison-servicesdnshomelinkyardbarsyjelecloudnscocomnetgovmycn-northwest-1cn-north-1s3s3-accesspoints3-websites3s3-accesspointrdsdualstacks3-deprecatedemrappui-prods3-websiteemrstudio-prods3-object-lambdaemrnotebooks-prodexecute-apis3s3-accesspoints3s3-accesspointrdsdualstackemrappui-prods3-websiteemrstudio-prods3-object-lambdaemrnotebooks-prodexecute-apicn-northwest-1cn-north-1cn-northwest-1ebcomputeelbcn-north-1airflowcn-northwest-1cn-north-1oncn-northwest-1cn-north-1amazonawssagemakeramazonwebservicesdirectasgdsdhehahljlnmhbacscahqhshhihnlnynsnmofjbjzjxjtjhkcqtwgsjssxnxjxgxxzgz網絡网络公司orgmilcomnetedugovxn--55qx5dcanva-appsxn--io0a7iquickconnectcanvasitekhsjxn--od0algmyqnapcloudsrvrlessclustersrealtimestorageleadpagescarrdcrdorgmilcomnomnetedugovhidnssupabaserdpareplmypiumsoxmitotaplpagesfirewalledreplitowodevwebview-assetsvfswebview-assetss3s3-accesspointdualstackemrappui-prods3-websiteaws-cloud9emrstudio-prods3-object-lambdaemrnotebooks-prodexecute-apicloud9eu-west-3ap-south-2eu-south-2eu-central-2ap-southeast-3ap-southeast-4ap-northeast-3eu-central-1me-central-1ca-central-1il-central-1ap-northeast-1ap-southeast-1me-south-1af-south-1eu-south-1ap-south-1ap-southeast-7us-west-2eu-west-2us-east-2eu-north-1ap-southeast-2ap-northeast-2ap-southeast-5ca-west-1us-west-1eu-west-1us-east-1ap-east-1sa-east-1s3s3-accesspointdualstackemrappui-prods3-websiteaws-cloud9emrstudio-prods3-object-lambdaemrnotebooks-prodexecute-apicloud9s3s3-accesspointdualstackanalytics-gatewayemrappui-prods3-websiteaws-cloud9emrstudio-prods3-object-lambdaemrnotebooks-prodexecute-apicloud9s3s3-accesspointdualstackemrappui-prods3-websiteemrstudio-prods3-object-lambdaemrnotebooks-prodexecute-apis3s3-accesspointdualstacks3-deprecateds3-websites3-object-lambdaexecute-apis3s3-accesspoints3-websites3-accesspoint-fipss3-fipss3s3-accesspointdualstackemrappui-prods3-websites3-accesspoint-fipsaws-cloud9s3-fipsemrstudio-prods3-object-lambdaemrnotebooks-prodexecute-apicloud9s3s3-accesspointdualstackemrappui-prods3-websites3-accesspoint-fipss3-fipsemrstudio-prods3-object-lambdaemrnotebooks-prodexecute-apis3s3-accesspointdualstacks3-deprecatedanalytics-gatewayemrappui-prods3-websiteaws-cloud9emrstudio-prods3-object-lambdaemrnotebooks-prodexecute-apicloud9vfss3s3-accesspointdualstackemrappui-prods3-websiteaws-cloud9emrstudio-prods3-object-lambdaemrnotebooks-prodexecute-apicloud9eu-west-3ap-south-2eu-central-2ap-southeast-3ap-southeast-4ap-northeast-3eu-central-1mx-central-1me-central-1ca-central-1il-central-1ap-northeast-1us-northeast-1ap-southeast-1me-south-1af-south-1ap-south-1ap-southeast-7us-west-2eu-west-2ap-east-2us-east-2ap-southeast-2ap-northeast-2ap-southeast-5us-gov-west-1us-gov-east-1ap-southeast-6ca-west-1us-west-1eu-west-1us-east-1ap-east-1sa-east-1mrapaccesspoints3s3-accesspointdualstacks3-deprecatedanalytics-gatewayemrappui-prods3-websites3-accesspoint-fipsaws-cloud9s3-fipsemrstudio-prods3-object-lambdaemrnotebooks-prodexecute-apicloud9s3s3-accesspointdualstacks3-deprecatedanalytics-gatewayemrappui-prods3-websites3-accesspoint-fipsaws-cloud9s3-fipsemrstudio-prods3-object-lambdaemrnotebooks-prodexecute-apicloud9s3eu-west-3ap-south-2eu-south-2computes3-ap-northeast-2elbrdss3-ap-east-1s3-sa-east-1s3-us-gov-west-1s3-eu-central-1s3-ca-central-1eu-central-2ap-southeast-3ap-southeast-4ap-northeast-3s3-website-us-west-2s3-website-eu-west-1s3-external-1eu-central-1me-central-1ca-central-1il-central-1s3-us-west-1s3-eu-west-1s3-website-sa-east-1s3-website-ap-southeast-2ap-northeast-1ap-southeast-1s3-us-west-2s3-eu-west-2me-south-1af-south-1eu-south-1ap-south-1us-west-2eu-west-2us-east-2s3-website-ap-southeast-1s3-1s3-globals3-ap-northeast-3eu-north-1airflowap-southeast-2s3-us-gov-east-1s3-fips-us-gov-east-1s3-me-south-1s3-ap-south-1ap-northeast-2s3-website-us-west-1ap-southeast-5s3-eu-north-1s3-ap-southeast-1s3-website-us-gov-west-1compute-1s3-eu-west-3us-gov-west-1s3-website-ap-northeast-1us-gov-east-1s3-fips-us-gov-west-1s3-website-us-east-1s3-ap-southeast-2ca-west-1us-west-1eu-west-1us-east-1ap-east-1sa-east-1s3-us-east-2s3-ap-northeast-1authauthauth-fipsauth-fipseu-west-3ap-south-2eu-south-2eu-central-2ap-southeast-3ap-southeast-4ap-northeast-3eu-central-1mx-central-1me-central-1ca-central-1il-central-1ap-northeast-1ap-southeast-1me-south-1af-south-1eu-south-1ap-south-1ap-southeast-7us-west-2eu-west-2us-east-2eu-north-1ap-southeast-2ap-northeast-2ap-southeast-5us-gov-west-1us-gov-east-1ca-west-1us-west-1eu-west-1us-east-1ap-east-1sa-east-1rservicesbuilderstg-builderdev-builder*ociocpocsdemoinstanceeu-west-3eu-south-2ap-southeast-3ap-northeast-3eu-central-1me-central-1ca-central-1il-central-1ap-northeast-1ap-southeast-1me-south-1af-south-1eu-south-1ap-south-1ap-southeast-7us-west-2eu-west-2us-east-2eu-north-1ap-southeast-2ap-northeast-2ap-southeast-5us-gov-west-1us-gov-east-1us-west-1eu-west-1us-east-1ap-east-1sa-east-1previeweu-4us-4us-1eu-1us-2eu-2us-3eu-3appspaasrag-cloudrag-cloud-chjcloudjcloud-ver-jpcdemonodebalancermembersipeuxvsoncillaocelotonzayalilynxsphinxfentigercustomercaracalo365cloudstaticxendevapp001testcode-builder-stgplatformapimediasiteprojedrydpagesjsu2u2-localx0desazacncoitrueu4uhkukgrbrushatenadiarymyspreadshopfrom-flfrom-wvwebspace-hosttheworkpchatenablogservesarcasmapplinzisakuratanwixsiteappchizigiizeis-into-carsdnsiskinkyadobeaemcloudis-a-therapistpgfogmyvncdojinis-an-actress1kappfldrvkozowqa2jpnmexprgmrfirewall-gatewaydynnscafjsfbsbxooguyxnbayfrom-gawoltlab-demois-a-anarchistwiardwebteaches-yogadattowebtb-hostinglive-websiteservegamegotpantheonfrom-nhsubsc-payfrom-ohvipsinaappfrom-cadyndns-officehomelinuxfrom-mahercules-appservebbsstreakusercontentfrom-okfrom-wyfastly-terrariumis-a-llamaqualyhqportalserveexchangeon-vaporvivenushopciscofreakgrayjayleaguesmetaaiusercontentfrom-iais-a-libertariansaves-the-whalestaveusercontentyolasiteoperaunitepoint2thisis-a-catererlinodeusercontentfrom-vagithubusercontentsells-for-lesshosteurcanva-appsplaystation-cloudddnsfreefrom-pafrom-prfrom-waddnskingoutsystemscloudhotelwithflightmydattois-a-nascarfanmydbserverminiserverdamnserverservehumouris-a-playerfrom-nvfrom-nmemergentagentgentappsamplifyappfrom-kyis-an-accountantnfshostserveircfrom-akpythonanywherestackhero-networkpostman-echolikescandydyndns-mailobservableusercontentserveftpfreeboxosfrom-utcdn77-storageamazonawsneat-urldyndns-serverlinodeis-a-teacherfrom-vtgleezemythic-beastsus1-pleniteu1-plenitla1-plenitpaywhirlservecounterstrikejdevcloudhealth-carereformis-into-animegoogleapisis-a-painterafricaisa-hockeynutatmetais-an-actora2hostedis-a-democratdatadetectest-le-patrondigitaloceanspacesis-a-designeris-a-hunterlinodeobjectstemp-dnsissmarterthanyoufrom-arsimplesiteevennodetownnews-stagingis-a-liberalgooglecodejelasticservemp3stdlibqualyhqpartnerdyndns-free1cooldnsest-a-la-masiondrayddnsdynuddnsfrom-orfrom-miis-a-bloggerfrom-himydobisscanvacodeis-an-engineerest-a-la-maisonupsunappdevinappswafflecellmyasustorwpenginepoweredfrom-ctservep2psame-appmyshopblocksthingdustdatalikes-piediscordsezis-with-thebanddev-myqnapcloudlpusercontentis-leetshopitsite3utilitiesis-a-personaltrainersinaappladeskis-a-cheflogoipselfipbase44-sandboxnospamproxyalibabacloudcsmesswithdnsauthgearappsiamallamawithgooglelutrausercontentmochausercontentframercanvasmytabitdyndns-homew-credentialless-staticblitzcpserverdiscordsaysis-a-nurseappspotatlassian-isolated-3premotewdfrom-mtwixstudiocode0emm180rmyactivedirectoryawsappsmytuleapdnsabrpolyspaceqbuserrenderbuiltwithdarkboutirgotdnsabrdnsdopaascanva-hosted-embedawsglobalacceleratorhomesecuritypcmyiphostditchyouripclever-clouddyndns-ipon-aptibleis-a-musiciansecuritytacticsappspaceusercontenthomeunixstrapiappsame-previewcf-ipfsmycloudnaselasticbeanstalkis-certifieddontexistkasserverik-serverdrive-platformatlassian-3pfirebaseappherokuappawsapprunnerbarsycenteris-a-cubicle-slaveservehttpmyshopifyis-a-guruquicksytessiiitesorsitesmagicpatternsappis-a-cpameteorappfrom-wiis-a-rockstarbumbleshrimpdattolocalreadthedocs-hostedfrom-rifamilydsdyndns-picsplesknsbplaceddnsaliasdynaliasdyndns-remotedoomdnsip-ddnsblogdnsis-a-doctorroutingthecloudamazoncognitobarsyonlinedsmynasddnsgurucloudflare-ipfsdeus-canvasfrom-idsmushcdnpagespeedmobilizerdyndns-at-homeunusualpersonhosted-by-previderis-a-republicandyn-o-saurstreamlitappworkisboringonthewificprapidqualifioappis-uberleetis-slickgetmyipwpdevcloudtypeformdyndns-at-workgentlentapismynascloudw-corp-staticblitzfrom-ingeekgalaxyservebeerfrom-mdonrenderspace-to-rentaivencloudappspacehostedonfabricawafaicloudcodespotblogspotatlassian-3p-us-gov-modfrom-ndfrom-msis-a-techieis-a-studentcustomer-ociis-a-photographerdurumisfrom-ksmassivegriddyndns-wikiis-an-entertaineris-a-hard-workermysecuritycamerafrom-mnrackmazedyndns-blogis-a-bulls-fanwritesthisblogfreemyipsimple-urlfrom-sdreservdauthgear-stagingest-mon-blogueuris-into-gamesrice-labsxtooldevicesakurawebis-an-anarchistoraclecloudappsdyndns-worksells-for-urhcloudfrom-dcfastvps-serverwpmucdnis-a-geekscrysecfrom-txis-into-cartoonsmodelscapetrycloudflarelocaltonetstreak-linkbalena-devicesfrom-njforgeblocksfreebox-oswebadorsitefrom-ncdoesntexisthobby-sitestreaklinkshomesecuritymacownprovidertuleap-partnersdattorelaywphostedmailalpha-myqnapcloudservequakeis-a-socialistservehalflifepivohostingdynuhostingquipelementsw-staticblitzdyndns-webfrom-deproject-studyaliases121is-not-certifiedhercules-devis-a-financialadvisorservepicsis-a-greenloseyouripfrom-ilwithyoutubemwcloudnonprodwiredbladehostingdnsdojofrom-tnpixolinomyqnapcloudis-an-artisthostedpiis-a-landscaperauiusercontentoaiusercontenton-forgeis-a-conservativedreamhostersnet-freaksapps-1and1is-goneencoreapifastly-edgefrom-nesalesforcefrom-scdeployagentoraclegovcloudappsfrom-alis-a-lawyercechirevultrobjectsstufftoreadisa-geekddnsgeeklovableprojecttry-snowplowfrom-moblogsyteis-a-bookkeepernogmyforumravendbmyboxdeelementoredsaacficogoorinforgcomgobnatneteduidstoreorgcomnetintedudevnomepublorgcomneteduathgovtestscalculatorspaynowinfoquizzesresearchedcloudnsfunnelsassessmentsjscaleforcetmacltdorgmilcompronetgovbizpresseklogesrsccloudcustomfltusrcloude4corealmgovmunicontentproxy9metacentrumdyndyndyndnsdynpagespages-researchitionoccustomercomymyspreadshopipv64diskussionsbereich4limacomrub2ixfirewall-gatewayddnssspdnsbarsykeymachinesquare7myhome-serverspeedpartnercommunity-proschuldockxenonconnectgünstigliefernbwcloud-os-instancedyndnssecmy-routerxn--gnstigliefern-wobin-butterl-o-g-i-nisteingeekin-dslin-berlinin-brbfuettertdasnetzleitungsenin-vpnlcube-serverdyn-ip24logoipdyn-berlinruhr-uni-bochum12hpgoipsrvdnsfruskygit-repossvn-reposinternet-dnsgünstigbestellenhome-webserverxn--gnstigbestellen-zvbbplacedheimdnscosidnswebspaceconfiglima-citydyndns1istmeinvirtualuserschulplattformmy-gatewayddnsseclebtimnetztest-iservmein-iservvirtual-userhome64iservschuletaifun-dnstraeumtgeradeschulserverdynamisches-dns123webseitednshomehs-heilbronndnsupdaterbssgraphicdwadpdwdaepeweaawapaafpfwfabwbpbacwcpcciwebuserapiobjectsidsiskospockkimodorikerbonesteamsparisjanewaypicardglobaltarpitreedpikekiraworfsulukirkarchertuckerhackercanarywesleystagingprereleaset3r2lpbravepanelngrokiservstglclcrmerpflypagesbarsyvivenushoplocalcertlocalplayerbearbloggatewaydeno-stagingis-not-ais-a-goodbotdashvercelmocha-sandboxplatter-appreplitgithubpreviewworkersinbrowserevervaultdetais-ahrsndenoxmitmodxmyaddrstorageapipayloadgrebedocruncontainersstgstagelclstageloginlineis-a-fullstackleapcellngrok-freeis-coolstoragewebharemediatechlibp2pdiscourseimaginecomyspreadshopstoreregbiz123hjemmesidefirmcoorgcomnetedugovsldorgmilcomwebgobartnetedugovtmorgpolcomsocartnetedugovassoagrondiscoodontk12medcuegyecpaabgengorgmilgalsaltulcomadmesmgobpubdocmonfindgnriouioproartlatvetnetfotedulojgovntrturibrbarxxxofficialbasechefprofmktgpsictechinfoarqtcontdentrrpppsiqgit-pagesritmedfieorgcomlibprieduaipgovriikmeactvsportorgmilcomscieunnetedugovnameinfopintouchtawktotawkmyspreadshoporgcomnomgobedu123miwebcomputeorgcomnetedugovbiznameinfocognito-idpeusc-de-east-1onjelasticnxaspdnsbarsydirectwpdeuxfleurstransurldogadoprvwcloudnsamazonwebservicesdnshomeuserpartycokoobinmkmstorjfidemopaasdymyspreadshopalandkapsiikixn--hkkinen-5wacloudplatformdatacenterhäkkinen123kotisivuidacorgmilcompronetedugovbiznameinforadioorgcomneteduuserexperts-comptablestmmyspreadshopgretaprdcomnomynhccifbxoshuissier-justicenotairesaeroportfreeboxoson-webavocatassoportgouvkdnschirurgiens-dentistes-en-franceavouesfbx-os123sitewebveterinairechirurgiens-dentistespharmacienchambagrimedecinfreebox-osdediboxgoupilemszicpyicpvicppleysheezypagesedugovcnpyorgcomcybllcpvtnetedugovtnxonlineschooldaemond6atcopanelorgnetplybotdashstackitkaasorgmilcomnetedugovbizmodltdorgcomedugovcoorgcomneteduappwriteacorgcomnetedugovcloudtranslateusercontentorgcomnetedumobiassoorgcomnetedugovbarsysimplesitediscourseindorgmilcomgobneteduorgcomwebnetedugovguaminfonxhra教育敎育網絡网絡组織組織网络網络组织組织公司政府個人个人箇人ltdorgcomincneteduidvgovxn--uc0ay4axn--55qx5dxn--mk0axixn--io0a7ixn--uc0atvxn--zf0avxxn--lcvr32dxn--od0algxn--wcvs22dxn--gmqw5axn--od0aq3bxn--mxtq1mxn--ciqpnxn--tn0agxn--gmq050iorgmilcomgobneteduiservwp2tempurlmircloudfreesitewpmudevmyfastgadgetcloudaccessjelehalfboltfastvpsemergenteasypanelopencraftizcombrendlynamefromrtpersoadultmedorgpolrelcomproartnetedufirminfoassoshopcoopgouvtmcomediahotelforumvideosportorgsexagrargameslakaseroticaerotikatozsdereklamcasino2000filmsuliinfoboltshopprivnewsszexcityutazasjogaszkonyveloingatlaneacaicogoormyᬩᬮᬶmilwebschnetkopbizzonedesaponpesxn--9tfkymyspreadshopgovmytabittabitorderravpageaccok12idforgnetgovmuniltdplcaccotttvorgcomnetmeca6g5gpgamubacaicniocoukuptverdruscsdelhiindorgmilcomwebnicfingenpronetintedugovresbizbiharbarsyinternetbusinessschooltravelsupabasealumnigujaratfirminfoaeropostbankcoopindevscloudnsno-ipbarsybarrell-of-knowledgebarrel-of-knowledgensupdategroks-thisdnsupdatefor-ourknowsitalldvrcammittwalddynamic-dnsv-infowebhopselfipdyndnshere-for-moreilovecollegemayfirstforumzcloudnsmittwaldservertypo3servergroks-theeusekd1uk0cdndyndnsidrawsainaueuapjpusstagemocksysdevicesclientcustreservdcustdevdisrecprodtestingcobeebyteutwenteboxfusebravepstmndedynngrokorgmilcomnomhzcnetedugovqcxqzzbarsythingdustmo-siemensrb-hostingprotonetfh-muenstergitbookbluebitecloudbeesusercontentnodeartkiloappsforgerockdarklangresinstagingapigeebubbleb-datascryptedhypernodedappnodepantheonsitegitlabgithubkeeneticvirtualservercleverappshostyhostingon-rioedugitticketstelebiton-acornwixstudioon-k3sicp0icp12038jeleqotobigvlairbubbleappsmyaddrstolosmyrdbxwebflowdrive-platformbeagleboardhasura-applolipopdefinimavaporcloudmusicianwebflowtestazurecontainerresindevicereadthedocsloginlineeditorxmoonscalesandcatsbasicserverwebthingsbrowsersafetymarkbeebyteappbitbucketidaccovistablogorgschnetgovxn--mgba3a4f16axn--mgba3a4fraarvanedgeايرانایرانjclaspeziapdudcefegelemeperetevebacanatavaparasabgagfgogrgpgalclblimfmrmcbmbvbfclcmcvcrcpcchlimifibicivipirisimncnbnanenrnpntnnolomobocoaogorosopotoptvtatctbtmtltotpulunutpspapaqsvpvvvtvavvrtrsrprgrfrcrbrarorkrvstsssbscsmsispzczbzbozen-suedtirolmyspreadshopxn--bulsan-sdtirol-nsbxn--valledaoste-ebbtrentinoaltoadigetrentin-sued-tirolxn--forlcesena-c8axn--forl-cesena-fcbxn--bozen-sdtirol-2obtriestetrentinsuedtiroltrentino-s-tirollecceudineaostesienaparmaluccapaviagenoapaduaaostamonzaabruzzoternirietiturinmilanbozenlaziofermoleccocuneonuoropratola-speziavdataaligfvgpugmolcalcamlomumbsicpmnvenvaoedugovabrsarmaremrbastoslazibxosfirenzetrentinosüdtirolval-d-aostavalle-aostamessinacremonaravennatoscanatrentin-suedtirolbolognacalabriaurbinopesarofriuli-v-giuliaogliastraxn--valle-aoste-ebblaquilaandriatranibarlettasyncloudtrentinosudtirolxn--valle-d-aoste-ehbaostavalleyvalled-aostatrentino-alto-adigevallee-d-aostexn--balsan-sdtirol-nsbpistoiasicilialucaniacataniaiserniaperugiabresciaveneziagorizialiguriaimperiabulsan-suedtirolbalsan-suedtirolbarlettatraniandriaxn--trentino-sdtirol-szbforlì-cesenatuscanyvallée-d-aostemantovavallée-aostecasertapiemontevalleaostaval-daostafriulivgiuliatrevisoforli-cesenavalléedaosteferrarapescaravald-aostatrentino-altoadigefriuli-vegiuliavallee-aostecarboniaiglesiastarantomediocampidanovalleedaostetrentinosud-tirolcampobassotrentinsüd-tiroltrentinosüd-tirolmonzabrianzatrentino-südtirolxn--trentino-sd-tirol-c3bpotenzacosenzavicenzaemiliaromagnavenicefrosinonemarchepordenonetrentinosued-tirolvaresemolisevalléeaostefriuli-veneziagiuliabasilicatalatinaanconasavonaveronamodenaaquilabiellabolzano-altoadigepugliafoggiaumbriatrentino-stirolgenovapadovamateranovararagusapiacenzatrentinostirolvalleeaostetempio-olbiatrentinsudtirolmassa-carrarafriuliveneziagiuliatrentinosuedtirolandria-barletta-tranitrapanixn--cesenaforl-i8amaceratacaltanissettaascoli-picenobrindisicarraramassacagliaririmininapolivibo-valentiachietibulsan-sudtirolbalsan-sudtiroltrentino-a-adigebulsanbalsaniglesiascarboniamilanotorinoteramodell-ogliastraarezzotrentinoalto-adigerovigotrentovenetoiglesias-carboniatrentino-sud-tirolaltoadigereggio-emiliareggio-calabriasardegnatranibarlettaandriapiedmontxn--sdtirol-n2amedio-campidanotrentino-süd-tirolfriuli-vgiuliafriuli-ve-giuliaromeennaromapisa32-b16-b64-blodiastibarineencomonaplesforlicesenailiadboxosalessandriasicilytrani-barletta-andriaxn--trentin-sdtirol-7vbpesarourbinotrentinsued-tirolcesena-forliforlìcesenaemilia-romagnamonzaebrianzaxn--trentinsdtirol-nsbtrentinos-tiroltrentinsüdtirolvalledaostaolbia-tempiocampidanomediovibovalentiasassarivalle-daostalombardyfriulivegiuliareggioemiliamonzaedellabrianzaalto-adigevercellitrentin-sudtiroltraniandriabarlettatrentino-sudtirolascolipicenobozen-südtirolfriulive-giuliaflorencevaldaostaxn--cesena-forl-mcbcarbonia-iglesiasaosta-valleycarrara-massadellogliastratrentinoa-adigexn--valleaoste-e7apesaro-urbinoxn--trentinosdtirol-7vbxn--trentin-sd-tirol-rzbxn--trentinsd-tirol-6vbtrani-andria-barlettatrentin-süd-tirolxn--trentinosd-tirol-rzbgrossetomonza-e-della-brianzasüdtirolreggiocalabriatrentinoaadigetrentin-südtirolfriuliv-giuliaverbaniacampaniatrentino-aadigefriulivenezia-giuliasardiniaandriabarlettatranibarletta-trani-andriacatanzarooristanourbino-pesarocesena-forlìvalle-d-aostacampidano-medio123homepagesiracusatempioolbiasuedtirollombardiaavellinocesenaforlìtrentinofriuli-venezia-giuliabozen-sudtirolandria-trani-barlettabulsan-südtirolbalsan-südtirolmonza-brianzabolzanotrentino-sued-tirolbellunosalernolivornocrotonesondriodnshometrentinsud-tirolmassacarraratrentin-sud-tiroltrentino-suedtirolviterbobergamocesenaforliolbiatempiopalermobeneventoagrigentoofcoorgnetfmaitvphdengorgmilcomschnetedugovperagrikanieasukehandachitatokaiaisaikonanoharuamaobuhigashiuraowariasahiinuyamatobishimaiwakurashitarainazawatoyonegamagorimihamatoyotataharakariyayatomioguchikomakimiyoshinishiotokonamekiyosuchiryutoyohashiokazakiisshikikasugaikotakiratoeianjotogofusosetohazutsushimashinshirotakahamanisshinshikatsuhekinantoyokawaichinomiyatoyoakeodateogataakitaikawakyowahonjoogayurihonjonoshirokamiokakatagamimitanegojomeyokotekosakadaisenkazunonikahohonjyomoriyoshimisatohappoukamikoanihachirogatahigashinarusesembokufujisatokitaakitaitayanagiowanitakkomutsutsurutahirosakigonoheoirasetowadamisawanohejiaomorishingohiranairokunohehashikamitsugarushichinohehachinohenakadomarisannohekuroishisakaeisumiasahiotakiinzaiabikomatsudoyachiyomutsuzawakujukuriomigawakashiwatoganemihamanaritasakuranagaramobarahanamigawachoshishiroichoseikozakishisuikatorimidorichonankyonanfuttsuonjukufunabashinagareyamanodasosatakochuotohnoshourayasukimitsuyokaichibayotsukaidosodegauratateyamakamagayayokoshibahikariyachimatakatsuuratomisatokisarazukamogawaichikawanarashinoichinomiyashimofusaminamibososhirakoichiharaoamishirasatoikatahonaiainansaijoseiyoiyoozuuwajimaniihamanamikatamasakiuchikokihokutobetoonshikokuchuomatsuyamaimabarikamijimakumakogenyawatahamamatsunosabaeikedaobamasakaifukuiohionotsurugamihamawakasaminamiechizeneiheijikatsuyamatakahamaechizensoedaukihaomutaokawanishiogoribuzenonojosueumiokiotochikugosasagurisaigawamizumakishinyoshitomikurumekurateyamadakasuganakamamiyamanogatatakatahakataiizukakawaratagawakasuyaashiyainatsukimunakataminamitsuikishonaikurogifukuchikeisenhigashimiyakoshinguyukuhashiokagakiyamekogaongausuikahotohochuotoyotsumiyawakadazaifuhisayamatachiaraiyanagawanakagawahirokawachikujochikushinochikuhochikuzennamieotamaokumashowateneiiwakikoorinangoononishigoshimogoomotegomishimafukushimaasakawakagamiishishirakawaiitatefutabahiratayugawahanawakitakatakawamatakunimiyabukibandaihigashihironoyamatomiharuyamatsuriaizubangedatesomaaizuwakamatsuyanaizuaizumisatonishiaizuizumizakikitashiobarataishinkaneyamakoriyamainawashirotanagurafurudonosamegawasukagawaishikawatamakawaikedaogakitaruiginanenahashimahichisonakatsugawaibigawashirakawamizunamiminokamomitakekawauesekigaharatomikasakahogikitagatayamagatatajimianpachimotosuyaotsukakamigaharahidakanisekitokigujominogodoyorogifukasamatsutakayamawanouchihigashishirakawakasaharashimonitatsumagoichiyodakannakanrashowameiwakiryuotaoratomiokafujiokaitakuranaganoharahigashiagatsumatakasakishibukawaminakamikatashinatsukiyonokawabanumataannakaoizumimidorishintoisesakiuenoyoshiokakusatsutakayamanakanojonanmokutamamuratatebayashimaebashiotakekaitadaiwahongofuchukuietajimashobaramiharahatsukaichihigashihiroshimamiyoshikumanokurenakasakaseraseranishiasaminamifukuyamashinichionomichiosakikamijimajinsekikogentakeharaotobenanaeikedatohmaozoraobiraabirakyowaeniwataikibibaisharirebunerimohiroooketootarupippunishiokoppechitosefurubirahakodateshiranukakitahiroshimakushiroobihironanporoiwamizawaniikappukunneppufukushimanakasatsunaitoyourakuromatsunaiakabirakamisunagawashibechaurakawakamifuranonakatombetsuasahikawashimokawakayabeokoppebiratoriabashirisaromaatsumanumatahidakabifukamukawamikasahorokanaitoyotomisarufutsuhigashikawaishikarikitamiyoichiesashiiwanaitomariminamifuranoakkeshifuranotoyakoyakumootoineppushikaoishiraoinemuronayorohaboroashorobihororishirifujiutashinaihokutotakasuebetsuurausuassabukikonaishimamakinaiedatetoyabieinikiesanuryuoumuteshikagarikubetsuashibetsukimobetsuaibetsutobetsusobetsuembetsushimizuchippubetsurishirihokuryuhoronobeshintokutsubetsushibetsuhonbetsumombetsutsukigatakuriyamakoshimizushiriuchikutchanmurorannoboribetsukamishihorowassamushinshinotsukembuchiwakkanaikamoenaikiyosatotakinoueshikabesunagawafukagawanakagawatakikawakamikawahigashikagurahamatonbetsumatsumaemoseushirankoshishakotanimakanemashikeotofuketomakomaisandatambaitamiawajikasaiasagoshisoonoakoyashirotoyookaminamiawajiinagawafukusakitakasagokamigorikasugaharimayokawaashiyahimejiakashitaishiaogakisannantakinosumototakarazukanishinomiyashingugoshikinishiwakiyokatakaaioimikisayoyabukawanishiamagasakisasayamashinonsenkakogawaichikawakamikawatatsunotsukubaiwamaogawaasahisakaitokaioaraiitakobandodaigosuifuinaamikasumigaurakashimaomitamayachiyoshimodatetomobetoridehitachinakainashikisakuragawakasamayawaramoriyahitachiomiyanamegatayamagatahitachikamisuushikutakahagiibarakitonekoganakasowayukimihojosomitoryugasakishimotsumafujishirotsuchiurachikuseihitachiotashirosatotamatsukuriuchiharashikahakuinanaotsubatawajimakahokukawakitatsurugikaganominotosuzuuchinadakomatsuanamizunakanotohakusannonoichikanazawaiwateshiwafudaikawaimoriokaofunatohanamakikuzumakikitakamininohekunoheyamadayahabasumitaichinosekitanohatahiraizumirikuzentakatajobojiotsuchihironomiyakoiwaizumikarumaiichinohenodakujitonooshushizukuishifujisawamizusawakamaishikanegasakimannoutazukotohiraayagawazentsujihigashikagawauchinomikanonjisanukimarugamemitoyotakamatsutadotsunaoshimatonoshoakuneamamiizumihiokiyusuikinkoisasookouyamanakatanekagoshimakanoyaisenkawanabeminamitanemakurazakitarumizunishinoomotematsumotosatsumasendaioimatsudaayaseebinamiurazushinakaiodawaraiseharasagamiharahakoneaikawakaiseiatsugitsukuihadanoyamatoyamakitazamaoisochigasakininomiyayokosukakamakuraminamiashigarafujisawasamukawakiyokawahiratsukayugawaraokawaumajikochitsunootoyoakiinonishitosayasudahidakamiharasakawaniyodogawahigashitsunokagamigeiseisusakiotsukinaharisukumomurototosakamiochitoyotosashimizumotoyamanankokunakamurakitagawayusuharaogunichoyoukiasoutoozugyokutoamakusamifunetakamoriyamagaminamataminamiogunikikuchisumotoyamatonagasumashikiaraokumamotokamiamakusanishiharayatsushiroayabeseikasakyoideineujinakagyokameokakyotangokyotanabekyotambaminamiyamashiroyamashinatanabeyawatawazukaminaminantanmiyazuhigashiyamafukuchiyamakitamukokamojoyokizumaizuruujitawaraoyamazakinagaokakyokumiyamakawagoeinabeshimameiwaasahitaikiudonoisetsukisosakikuwanamihamamiyamasuzukatamakimisuginabarikumanokomonominamiisewataraitobakiwatakikihotadomatsusakayokkaichikameyamaureshinoishinomakishichikashukuohirataiwaosakizaohigashimatsushimashikamaiwanumashibataogawaraonagawakawasakiseminemarumoriminamisanrikukakudamuratawakuyatomiyanatoriwataritagajomisatotomekamirifushiroishimatsushimayamamotoshiogamafurukawahyugaebinotsunosaitoayakushimanobeokakitauramiyazakitakazakigokaseshiibamimatashintomikunitomikitakatakobayashikawaminamitakaharukijotakanabemiyakonojonishimeranichinankitagawakadogawamorotsukakisofukushimaminamimakisakaeobuseikedaogawamiasaokayaasahiotakiotarichinoinaomichikumakomaganechikuhokukaruizawayasuokaooshikaikusakaminamiaikitogakushimatsukawakawakamitateshinatakamorikitaaikishiojirimiyadahakubaiizunaiijimaiiyamamiyotasuzakayasakatoguraookuwanagawaminowahirayayamagataminamiminowafujimiomachisakakitakaginaganonakanosakuhokomoronagisoshinanomachiwadauedaiidaharasuwatomiachiaokianankisosakunozawaonsenagematsutakayamashimosuwamatsumotoyamanouchinakagawamochizukiazuminotatsunoobamaomuraseihiunzenosetofutsuikichijiwanagasakiisahayahasamisaikaikawatanasasebohiradokuchinotsugototogitsutsushimashimabarashinkamigotomatsuurayamazoekashibaikomakawaitenrioyodosangokoryoudaojiikarugayamatokoriyamatenkawakatsuragikurotakikawakamimiyakemitsuetakatorikamikitayamayamatotakadahegurishinjokanmakisakuraitawaramotogoseoudanarasoniandokawanishishimoichihigashiyoshinokashiharashimokitayamanosegawayoshinomintsivorytopazsakuragehirnsumomoaseinetopalmail-boxmokurenyoitamuikaojiyagosensanjoaganomyokoseiroagaomishibataniigatanagaokamurakamiuonumayuzawakariwatagamitainaitsunanminamiuonumatochioyahikojoetsuseiroukamosadoizumozakitokamachiitoigawasekikawakashiwazakitsubamemitsukekokonoesaikiusukibeppuusahimeshimakunisakihasamataketatsukumihitaoitahijikusuyufukujukamitsuebungoonobungotakadaibaraniimibizentsuyamaokayamakasaokahayashimayakagemaniwaakaiwamisakishinjotamanotakahashikibichuowakesojanagishookumenannishiawakurakurashikiasakuchisetouchikagaminosatoshotomigusukunakagusukuyaeseizenaurumaiheyaaguniogiminanjokinminamidaitokitanakagusukuyonaguniokinawaishigakikunigamiurasoekadenataramahiraraginozataketomishimojizamamitonakiitomanhigashimotobuyonabarugushikamionnanahanagohaebarukumejimakitadaitonakijinnishiharayomitanginowantokashikiishikawaikedasuitaminohizuminishisakaikananabenodaitoosakasayamayaokishiwadatadaokakaizukatondabayashichihayaakasakakumatorikadomasayamahigashiosakashijonawatehirakatataishimisakitajirihannansennankatanotoyonominatosettsuhigashiyodogawaibarakinosekitachuohigashisumiyoshifujiiderakashiwaraizumiotsutoyonakamatsubaramoriguchiizumisanoshimamototakatsukineyagawahabikinotakaishikawachinaganoyoshinogarikamiminearitaouchiimarihizenogikashimaariakekiyamafukudomikitagatakitahataomachigenkaikanzakinishiaritakyuragisagataratosutakushiroishikaratsuhamatamakouhokukawagoeyoshidasatteogoseirumaasakaurawaogawaniizaomiyayoriiotakishikihonjooganohannohanyuinasaitamaokegawaarakawayoshikawayokozehasudasayamahidakafukayachichibuiwatsukiryokamiyoshimikamiizumifujimiwarabiranzanmiyoshiminanoyashiosakadosugitomisatohigashichichibutodasokakukiyonokazoshiraokakasukabekounosukawajimatsurugashimamiyashirokitamotohatoyamamoroyamahatogayakumagayakawaguchinagatorokamisatomatsubushinamegawatokigawakamikawafujiminohigashimatsuyamakoshigayatokorozawas3isk01isk02ryuohkoseikonanaishorittotakashimamaibarahikonetorahimenishiazaikokagamokotoyasuotsukusatsunagahamamoriyamatoyosatotakatsukinotogawaomihachimanhigashiomiakagiunnanizumogotsuamayatsukakakinokimatsuehamadamasudahikawahikimiokuizumoyasugiyakumomisatotamayuohdahigashiizumookinoshimanishinoshimatsuwanoshimaneshimadafujiedayoshidashimodagotembaiwataatamikosaiyaizuitoizumishimahaibaramakinoharaomaezakikawanehonkannamisusonohigashiizufukuroinumazukawazufujiaraishizuokahamamatsushimizuizunokunimatsuzakimorimachiminamiizunishiizukikugawakakegawafujikawafujinomiyaujiietsugaoyamayaitaohiranikkoashikagakuroisokanumasakurashioyakarasuyamamotegiichikaikaminokawatochigihagamokanogisanobatonasumibunasushiobaranishikatautsunomiyaiwafunemashikoshimotsukeohtawaratakanezawaitanokomatsushimatokushimaichibaminamiaizumiwajikikainanmiyoshinarutomimamugiananmatsushigesanagochishishikuinakagawamachidachiyodakomaefussainagitaitochofufuchuomeotahigashiyamatotoshimaokutamaaogashimakodairaedogawaarakawahachiojishinagawatachikawashibuyasuginamihinodekiyosesumidaoshimanerimamitakahamuraadachinakanomizuhobunkyomegurominatokoganeihigashikurumekokubunjihigashimurayamamusashimurayamatamakitahinochuokotokatsushikakouzushimaogasawaraakishimakunitachishinjukusetagayamusashinohachijoitabashiakirunohinoharachizunanbukotouramisasawakasayonagokogehinoyazutottorinichinansakaiminatokawaharaoyabetairainamiasahinantoimizufuchutakaokakurobeyamadajohanatoyamatonaminyuzenfunahashinakaniikawanamerikawaunazukitogahimiuozufukumitsutateyamakamiichiiwadearidayuasainamitaijikatsuragiaridagawatanabemihamahidakakainankiminomisatoshingushirahamakamitondayurakozakoyagobokitayamawakayamakudoyamahashimotokushimotokozagawahirogawakinokawanachikatsuurarsuseroeoishidasagaeoguniasahinagaitendonanyoobanazawanishikawasakataohkuratozawamikawamamurogawayamagatafunagatatakahatashonaishinjokahokuiideyuzakawanishitsuruokakaminoyamayamanobeshiratakamurayamanakayamakaneyamahigashineyonezawasakegawamitouubeyuuabushimonosekitabuseoshimatoyotaiwakunihikarishunannagatohagihofukudamatsutokuyamashowadoshitsurunanbukoshukaiminami-alpsnirasakikosugeotsukioshinohokutominobuyamanashifuefukichuokofuichikawamisatoyamanakakonakamichitabayamanishikatsuranarusawafujikawahayakawafujiyoshidafujikawaguchikouenohara長野京都岐阜大阪三重群馬千葉滋賀佐賀奈良adednelgaccogogror秋田愛知高知埼玉沖縄栃木熊本岩手青森山梨新潟島根鳥取長崎香川宮城石川大分宮崎茨城山口兵庫山形徳島広島福島福岡岡山富山静岡愛媛福井東京xn--4it168dhatenadiaryxn--vgu402ckawaiishophatenablogcocottenamaste北海道penneehimeiwateversestabachibashigagonnagunmapermahaccaakitaosakauh-ohblushkochiaichifukuikuroncapooitigohyogotokyokyotopunyuthickcheap0t00g00j0mie2-ddaapyawjg0amfemsubxiiboomoobutchueekpgwrgrherskrboyrdyupperunderflierchipsmydnsheavyangryhippygirlyrulez神奈川鹿児島和歌山bambinaxn--nit225kokayamasaitamaxn--k7yn95exn--1lqs03nsapporoparasitelolipopmcxn--efvn9sniigatafukuokatokushimafukushimahiroshimakagoshimafakefurokinawaxn--8pvr4ucoolblogxn--0trq7p7nnkawasakinagasakimiyazakichilloutxn--8ltr62kxn--klty5xpeeweezombiecutegirlxn--rny31hxn--uuwu58axn--ntso0iqx3axn--djrs72d6uytoyamanikitanyantakagawamimozanagoyaboyfriendxn--2m4a15egreaterchowderegoismyamagatafashionstorexn--elqq16hxn--pssu33lsendaimiyagixn--rht27zpecoriaomorisaloonwatsonvivianxn--djty4knobushipigboatnaganopinokoxn--f6qx53asadistvelvetsecretxn--5js045dchicappayamanashiibarakidigickgirlfriendxn--1lqs71dmongolianxn--c3s14mxn--qqqt11mtochigixn--5rtq34kparallelo0o0mondkobesagabonadecaoitanarafoolkilldecimainhiholomosblokilociaoundopupugifutankcrapflopnooroopsmodsholyjeezstripperpepperbittershizuokaxn--rht3dkitakyushureadymadeicurusversusmatrixxn--rht61ehungryfloppygloomycrankyhandcraftedlittlestarxn--klt787dxn--kltx9awhitesnowsunnydaytottorilovepoptheshopbuyshopxn--5rtp49cxn--d5qv7z876cwebaccelxn--kbrq7oxn--4pvxsxn--1ctwolovesickkumamotocatfoodxn--tor131oyokohamawakayamatonkotsuxn--ehqz56nxn--uist22hxn--6btw5axn--kltp7dyamaguchifrenchkisspussycatxn--4it797kxn--uisz3gbabybluexn--zbx025dnetgamersxn--7t0a264ckanagawaxn--6orx2rishikawaxn--ntsq17ghalfmoonschoolbusjellybeanxn--mkru45iusercontentlolitapunkxn--32vp30hsakurastoragehokkaidoshimanecandypopbabymilksupersaleweblikeraindropbackdropwebsozaikikirarahateblodaynightmeneacsccogoormobiinfoaeusxxorgmilcomnetedugovorgcomnetedugovbizinfotmprdorgmilcomnomedugovassnotairespresseassocoopgouvveterinairemedecinpharmaciensorgnetedugovtraorgcomedurepgovmeneperekgacscaiiocogoitoresmshsseoulbusanulsandaeguc01milvkimmvchungnamjeonnamjeonbukeliv-dnsgyeonggijejueliv-cdnincheondaejeongangwongyeongbukgwangjuchungbukgyeongnameliv-apicoeduindorgcomembnetedugovorgmilcomnetedugovjcloudorgcomnetintedugovperbnrinfocooyorgcomnetedugovipfscanvamypepw3sstorachakeeneticjoinmcinbrowserdwebcyonnftstoragemyfritzaemewphlxachotelltdorgcomwebsocschngonetintedugrpgovassnomgacsccoorgnetedugovbizinfo123websiteidorgmilcomasnnetedugovconfidmedorgcomplcschnetedugovaccoorgnetgovpresstmassoirseproxaccosoundcasthoptocraftvp4c66orgnetedugovitsmcdirmyboxbarsyedgestacksynologylogintonohostwebhopdiskstationi234tcp4hoocgroknoipprivmydsddnsdnsforlohmustransipdscloudfilegear-sgbrasiliafilegearframerbarsybarsyonlinecoprdorgmilcomnomedugovinforgcomnetedugovnameacprorgcomartnetedugovpresseinfoassoinstgouvorgnycedugovbarsydscloudjuorgcomnetedugovminisiteaccoororgcomnetgovorgmilcompronetintedugovbizmuseumnameinfoaerocoopaccoorgcomnetintedugovbizcooporgcomgobneteduorgmilcomnetedugovbiznameaccoorgmilneteduadvgovcoorgcomnetaltgovforgotherhiskeeneticispmanagernomassoprod5476132eastasiacentraluswesteuropewestus2eastus2rucdnwest1-usfra1-desandboxjls-sto1jls-sto3jls-sto2aglobalabglobalsslmapprodfreetlsmaplon-1lon-2ny-1fr-1sg-1ny-2paassnwebpaashostingjelasticnordeste-idcsocuserpagescwebfileblobservicebuscoreatlricnjsjelasticwebsitestoragesezagbinruhuukjptsmyspreadshopmynetnameakamaiorigin-stagingfrom-coipv64dynv6cdn77serveblogadobeaemcloudhicamsprytdnsupno-ipownipde5ovhicpfirewall-gatewaysytesmypsxbarsyusgovcloudapimyamazemyradwebakamaihdsaveincloudfastlylbfrom-lasubsc-paysquare7in-the-bandblackbaudcdnhomelinuxoninfernoctfcloudservebbsdns-dynamiccloudfrontakamai-stagingipifonyham-radio-opsenseeringclickrisingcommunity-profrom-nylocalcertgrafana-devedgesuite-stagingcloudflareanycasteating-organicatlassian-devmydattofeste-iplocaltotorprojectknx-serveredgekeycloudflareglobalcloudyclustercasacamserveftpakamaized-stagingakamaiorigindns-cloudmyeffectboomlabotdashbuyshousestwmailhetemlazure-mobilein-dslthruhereredirectmedynuddnsbouncemesupabaseluyanicloudappakamaicloudfunctionsdebiannhlfanpgafanstatic-accessin-vpnmysynologymafeloappudohomeftptrafficmanagersiteleafseidatmemsetcloudflarecloudaccesskeyword-onazure-apiis-a-chefdoes-itgets-itwebhopselfiphomeipkicks-assedgesuitewindowsserver-ontunnelmolemydissentscrapper-sitecloudflarecnuni5srcfggffiobbzabcdenodynuopikddnsvpndnsakadnselastxkinghostvps-hostfastlyhomeunixazureedgeshopselectdontexistmyfritzcloudjiffyalwaysdatasells-itsquaresbroke-itazurefddattolocalat-band-campmeinforumfamilydsazurestaticappsdefinimabplaceddnsaliasdynaliasnow-dnsblogdnsroutingthecloudendofinternetdsmynasakamaiedgemymediapcadobeio-staticakamaiedge-stagingakamaihd-stagingddns-ipprivatizehealthinsurancelive-onkrellianschokokeksmassivegridmysecuritycamerarackmazeserveminecraftfrom-azis-a-geekakamaizedmoonscalecryptonomicoffice-on-theusgovtrafficmanageradobeioruntimeedgekey-stagingreserve-onlinechannelsdvrdnsdojousgovcloudappcdn77-sslapps-1and1podzoneazurewebsitesdynathomescaleforceyandexcloudvusercontentisa-geekcdn-edgescoaemalcesappwriteazimuthtlonarvonoticeablestorecomwebrecnetperotherfirminfoartslgdloncogoiltdorgmilcolcomplcschgenngonetedugovbiznamefirmmobiacincoorgmilcomnomwebgobnetintedubizinfocomyspreadshopdemongovtransurl123websitehosting-clusterkhplaycistrongsnesosvalervålerxn--vler-qoaossandeheroysandeherøybøboheroyherøyxn--hery-iraxn--b-5gavalerbøboxn--b-5gasandesandexn--hery-iraxn--vler-qoavålerhåreålaahavaofsfvfhlolnlalrlhmfmtmahcostntbuåstrmreigersundmyspreadshopgálsáeidsvolltingvollgildeskalflorøvadsøvardøvanylvenxn--bhccavuotna-k7astrandaxn--kvnangen-k0axn--sknland-fxaxn--mosjen-eyarakkestadhyllestadnannestadvevelstadvaapstenordre-landsondre-landsøndre-landtjieltexn--vrggt-xqadsør-aurdalsor-aurdalheradstordmoldefordeførdeseljefedjeryggehemnexn--krehamn-dxasognegranesøgnebrynetjomevallebykletokkegiskedovretjømehobølvoldasaudatolgasømnaviknadønnasomnadonnatranafrananesnaraumasmolatrænafrænalesjasmølaørstaorstahitrafloraaukraloppafrøyarissasnasahalsagalsaromsaraisaráisafroyasnåsagronghobolfjelltydalårdalardalaskimharamkraanghkekråanghkesorumbarumhurumbærumsørummodumsálátbálátfrognbjugnvåganvagangulenskienløtenlotenstrynvefsnxn--merker-kuaskaunsveiobømlobomloskjåkvardoflorovadsosalatbalatsálatklæbuklabuselbubarduulvikskjakklepprisørxn--nttery-byaeflåeidflahofmilgolholsellomskifetvikdepvgsfhsaskerrisorhamarasnesåsnesrørosrorosxn--slat-5namasoynaroyvaroyluroydyroyaskoyradoyandoyrodoymeloyradøyandøyrødøymeløyaskøylurøydyrøymåsøyværøynærøyhoylandethøylandetdivtasvuodnalørenskoglorenskognesoddtangenxn--tjme-hraxn--smla-hraxn--stjrdal-s1aunjargalillehammerunjárgaxn--hamary-fyadavvenjargaxn--bearalvhki-y4a123hjemmesidegjerdrumxn--brnnysund-m8acxn--tnsberg-q1axn--mlatvuopmi-s4axn--snsa-roaxn--skierv-utaxn--brum-voatysfjordkvafjordeidfjordkvæfjordsongdalenmjondalenmjøndalenxn--gls-elackragerogáŋgaviikagangaviikasørreisasorreisasør-varangersor-varangerxn--risr-iraskiervaxn--frna-woaxn--trna-woakvinesdalleksvikleirvikrøyrvikroyrviksvelvikvenneslaevje-og-hornnessandnessjøenmarnardalvindafjordsandefjordenebakksnillfjordullensvangxn--trany-yuabrønnøysundnamsskoganaustevollxn--stjrdalshalsen-sqbnord-aurdalnord-frontrøgstadtrogstadgrimstadflakstadgjerstadxn--sandy-yuaxn--leagaviika-52bnore-og-uvdalvegarsheixn--rlingen-mxaxn--ggaviika-8ya47hvegårsheikarlsoykvitsoymasfjordenhamaroyinderoyosteroydavvenjárgasauheradguovdageaidnuxn--vre-eiker-k8abronnoysiellakkrødsheradkrodsheradkvinnheradbrønnøyxn--mtta-vrjjat-k7afxn--lrenskog-54akvitsøyvárggátkarlsøyosterøyinderøyhamarøybronnoysundxn--aurskog-hland-jnbbahccavuotnabáhccavuotnagiehtavuoatnastor-elvdalmidtre-gauldalxn--gildeskl-g0akarasjokevenassixn--bievt-0qaxn--yer-znalebesbynessebyxn--hbmer-xqamalselvmålselvxn--unjrga-rtamøre-og-romsdalmore-og-romsdalhareidmelandørlandorlandstrandålgårdsolundalgardafjordåfjorddielddanuorrikautokeinoxn--stre-toten-zcbskodjeaejriestangeliernebamblestokkefauskesnåasesnaasekongsvingerlangevagberlevagxn--flor-jrahattfjelldalostre-totenøstre-totenvestfoldxn--mely-iraálaheadjualaheadjunordreisaxn--troms-zuaxn--lgrd-poacporsangerflatangerstavangerleikangerbremangersamnangergieldakarasjohkaxn--rdy-0nabfrostautsirasnoasatromsaxn--sr-aurdal-l8aflekkefjordjølsterjolsteraremarkhedmarknååmesjevuemienaamesjevuemiexn--vard-jrarollagmeråkermerakerorskogørskogxn--bdddj-mrabdákŋoluoktaxn--osyro-wuaaknoluoktatrysilskjervøymandaljondalbindalrindalmeldalsuldalorkdalsigdalalvdallærdalhurdalsirdalverdallerdallardaloppdalåseralaseralhadselkragerødivttasvuotnaoverhallasteinkjerxn--hnefoss-q1askedsmokorsettromsøxn--dyry-iravestre-totenmuseumxn--sandnessjen-ogbrahkkeravjufylkesbiblbájddarbajddarxn--laheadju-7yarennesøyxn--koluokta-7ya57hxn--hgebostad-g3aleirfjordstorfjordbalsfjordbåtsfjordbatsfjordmuosátbievátloabátkárášjohkanøtterøyxn--mjndalen-64anordkappláhppilahppialstahaugsiljanverranrøykenroykenhaldenlyngenbergenhortenhønefosshonefosstroandinbeiarnvarggatosoyroosøyrotromsoidrettmuosatbievatruovatloabatvoagattynsetnessetxn--indery-fyaskánitskanitraholtråholtxn--ystre-slidre-ujbandebusarpsborgbearduxn--karlsy-fyahordalandjorpelandjørpelanddeatnuringsakersør-odalsor-odalxn--slt-elabringerikeaudnedalnittedalnissedalhemsedalslattumsurnadalxn--blt-elabelverumstjørdalnaustdalhjartdalgjøvikfyresdalhasviknarviklarvikgjovikmalvikgamviklenvikporsgrunnstjordalengerdaldrobakdrøbakxn--msy-ula0hvestvagoyxn--vgan-qoaxn--ryken-vuaxn--lten-graxn--stfold-9xaxn--hpmir-xqaxn--lury-iramálatvuopmimalatvuopmitysværkirkenesbirkenesmoskenesbáidárxn--fjord-lraxn--rdal-poabahcavuotnabáhcavuotnaxn--frde-gralindåsbearalvahkixn--hobl-iraráhkkerávjuxn--loabt-0qavågåáltábodøsundlundraderådeetnetimeholeauregrueoddavagavegaranatanaarnasolasulaaltalekafusavangbergkvamåmliamlibokntinnroangranosenoslobodorøstroststatåmotamotivguprivøyeroyerliermossvossxn--nvuotna-hwalusterlunnermarkerhábmerhabmerhvalerfjalerxn--rholt-mratysvarbaidarfitjargaularhápmirhapmirmelhusfosnesøksnesoksnestysneshemnesevenesflesbergeidsbergtonsbergtønsberglindasxn--sndre-land-0cbnamsosxn--srum-graøystre-slidreoystre-slidrevestre-slidretrondheimbalestrandxn--langevg-jxaaustrheimxn--skjk-soavagsoyaveroysandoykarmoyfinnoytranoyvestbytranbysykkylvenxn--hyanger-q1aspjelkavikandasuoloxn--fl-ziaxn--drbak-wuastathellexn--sr-varanger-ggbtelemarkxn--bhcavuotna-s4axn--porsgu-sta26fčáhcesuolocahcesuoloakrehamnåkrehamnsandøykarmøyfinnøytranøyvågsøyaverøynamdalseidxn--lesund-huabadaddjaxn--vegrshei-c0axn--btsfjord-9zagildeskålporsanguxn--trgstad-r1anávuotnanavuotnahammerfestxn--sgne-graxn--brnny-wuacibestadharstadnarviikaevenáššivestnesgjemnessandnesagdenesrennesoyxn--avery-yuaxn--tysvr-vrabearalváhkikongsbergspydebergrandabergxn--andy-iradavvesiidaxn--krdsherad-m8aporsáŋgufredrikstadbjerkreimringeburennebuaurskog-holandnotteroyxn--vgsy-qoa0jxn--rmskog-byaskierváivelandbyglandfrolandaurlandforsandxn--bjddar-ptamidsundålesundalesundfetsundfarsundovre-eikerøvre-eikerakershusxn--moreke-juasørfoldøstfoldostfoldsorfoldhøyangerhoyangerlevangerorkangertanangerxn--vestvgy-ixa6olillesandulsteinxn--rennesy-v1agranvinskjervoyxn--klbu-woalavagisxn--h-2faxn--ryrvik-byakafjordkåfjordseljordfolkebiblxn--gjvik-wuajevnakerxn--kfjord-iuabudejjuxn--kranghke-b0axn--davvenjrga-y4axn--rland-uuaxn--ldingen-q1axn--mlselv-iuaxn--rady-iraxn--linds-prabrumunddalxn--ygarden-p1amo-i-ranaeidskogrømskogromskoghjelmelandxn--finny-yuaxn--sr-odal-q1axn--skjervy-v1aballangenkvanangenkvænangengratangenxn--hmmrfeasta-s4acvossevangensuohkanxn--rde-ulaxn--mli-tlaxn--ksnes-uuanordlandskanlandskånlandsortlandfuoiskuxn--rros-graxn--hcesuolo-7ya35bxn--eveni-0qa01gagaivuotnagáivuotnaxn--seral-lradrammenmodalenmosjoenjan-mayentorskensteigengloppenxn--snes-poamatta-varjjatxn--sr-fron-q1aomasvuotnajessheimbådåddjåxn--krager-gyaxn--kvfjord-nxaxn--asky-iraxn--snase-nraxn--bidr-5nacholtålenxn--vads-jraxn--jlster-byamosjøenxn--rst-0nastavernxn--ostery-fyaxn--oppegrd-ixaxn--sknit-yqaxn--risa-5naoppegårdskiptvetrendalenholtalenxn--mot-tlaxn--lhppi-xqaxn--holtlen-hxaxn--srreisa-q1akopervikxn--muost-0qaxn--bmlo-grahokksundkvalsundegersundxn--karmy-yuaullensakerxn--hylandet-54axn--kvitsy-fyaxn--bod-2nalangevågberlevågkristiansandxn--rsta-frahornindalstjørdalshalsenstjordalshalsensandnessjoenhámmárfeastaxn--lrdal-srasør-fronsor-fronnord-odalkristiansundmátta-várjjatvestvågøynesoddennotoddenbuskerudøygardenoygardensalangenlavangenralingenrælingenlodingenlødingenleaŋgaviikalaakesvuemieleangaviikauenorgexn--srfold-byaaskvollxn--rskog-uuaxn--nry-yla5gxn--vry-yla5ghammarfeastaxn--rhkkervju-01afxn--givuotna-8yakommunekrokstadelvanedre-eikerhagebostadhægebostadxn--berlevg-jxakviteseidxn--s-1faxn--l-1faxn--nmesjevuemie-tcbafuosskomoårekemoarekexn--lt-liacxn--jrpeland-54asvalbardoppegardholmestrandtvedestrandsogndalsokndalarendalsunndalfolldalxn--krjohka-hwab49jlyngdaletnedalnorddalsaltdalgausdalskedsmovaksdalgjesdalstordalxn--frya-hraaarbortedrangedalxn--smna-graaurskog-hølandxn--vg-yiabtjeldsundhaugesundlindesnesxn--mre-og-romsdal-qqbxn--dnna-gradynmerseineshacknetenterprisecloudmineaccomaorimāoriorgmilcriiwigennetschoolhealthkiwigovtgeekxn--mori-qsacloudnsparliamentcomedorgcompronetedugovmuseumwebsitekinservicebarsywebsitebuildereerobookheimdnsleapcelleero-stagetechcrscsslorigingohomecdbedeeeiemesecabgngilnlalplchfisiincnnoroptatitmtltruauhulumkdkukskjplvtrgrfrkrhrusesismycynzcznetinteduassoososcloudstgbetaaezaeuhkusjshatenadiarycdn77hoptozaptois-a-knightmyftpno-ipjpnddnssdpdnsspdnsbarsysweetpepperis-a-bruinsfanis-very-sweetservegameis-a-soxfanhomelinuxcdn77-secureservebbsmisconfusedwebredirectblogsitefreedesktopcouchpotatofriestoolforgeaccesscamis-lostreadmyblogsmall-webfedorapeopleserveftpis-a-celticsfanmywirepotagertwmailin-dslsellsyourhomeread-booksfreeddnscable-modemis-savednflfanufcfanmlbfanstuff-4-saleendoftheinternetin-vpnmy-firewallhomeftpis-localis-a-chefboldlygoingnowherewebhopselfipkicks-assroxatunkcamdvrfedoraprojectgotdnsdvrdnsdyndnspubtlspimientahomeunixdontexistfedorainfracloudwmflabsfspagesbmoattachmentsteckidsfamilydsdnsaliasdynaliasnow-dnscloudnsdoomdnsduckdnsblogdnshomednsroutingthecloudendofinternetdsmynasip-dynamicpoivronhttpbinmyfirewallis-very-evilmysecuritycamerais-a-linux-userwmcloudis-a-geektuxfamilyis-a-candidatedoesntexistis-very-badhobby-sitegame-hostaltervistais-foundis-a-patsfandnsdojohepforgepodzonedynservcollegefanis-very-goodfrom-meis-very-niceisa-geeknerdpolacmedsldingorgcomnomgobabonetedupleskaemhlxmyboxrockyprvcydeuxfleurspdnscodebergheyflowstatichostorgmilcomnomgobneteduorgcomeduiorgmilcomngonetedugovcloudns1337ngrokacorggogfamcomwebgobnetedugokgopgkpgovgosbizpasaugumicsopozpapuwmwsrprusiskwpspkppspkmpspokeoiawsawifoumsdnskokwpmuppuppsppiwwiwoowuzswkzoschrzpisdnwzmiuwwitdpssewsseumigugimoirmpinbwinbwiihupporzgwgriwupowwskrwioswuozstarostwokonsulattmpccopruszkowmyspreadshopostrodakartuzyopolegminamediaustkazgorajgoraolawailawalomzawloclradombytomjaworznotargilubinkoninzagantorunkutnokepnonakloczestsopotsanokturekplockslasksklepzarowlukowmedaidgdaorgmilrelcomnomatmgsmartneteduelkgovwawsossexbiztgorysejnytychypomorzeboleslawiechomesklepsdscloudunicloudzakopanelegnicarawa-mazbydgoszczswidnikkrasnikwloclawekbielawamragowograjeworealestatebeskidykaszubymalopolskaprzeworskswiebodzinlecznadfirmaszkolawarmiagdyniamiastakazimierz-dolnymalborkswidnicadlugolekaostrolekapodlasieelblagtravelsimplesitezachpomormielecszczecinnieruchomosciwalbrzychlezajsklublinbedzinpoznanwielunmielnooleckostarachowicedkontopowiatwroclawrybniksuwalkileborkslupskgdanskostrowwlkptarnobrzegtourismwegrowkrakowglogowyou2pilanysamailwrocinfoagroautobeepshopprivlapypiszlodzcfolksecommerce-shopmazurypulawyskoczowrzeszowpomorskiezgierzkaliszolkuszlowiczostrowiecsosnowiecmazowszewodzislawbialowiezazgorzeleckatowicepabianicejelenia-gorawolominkarpaczsieradznowarudaczeladzkonskowolaskierniewiceswinoujscieturystykabieszczadycieszynketrzynolsztynbialystokbabia-goraprochowicewarszawastalowa-wolapolkowicegorlicegliwiceponiatowalimanowalubartowaugustowkobierzyceopocznognieznoszczytnokolobrzegshoparenapodhalebielskoklodzkostargardatwithplayitownnamecoorgnetedugovacorgcomproestnetedugovbiznameislaprofinforechtngrokmedaaaacacpaenglawjurbarbarsykeeneticavocatacctcloudnsorgcomsecplonetedugov123paginaweborgcomnetintedugovnomepublidkinbarsygovx443cloudnsorgmilcomnetedugovcooporgmilcomschnetedugovnamecomcannetlibassoaemclantmcontstoreorgcomnomrecwwwbarsyfirminfoshopartsstackitmyddnswebspacelima-cityacincooxorgedugovbarsybrendlyhbvpsvpsspectrumlandinghostingacppmordoviamcprecbgorgmilcomspbnetintedumsknovgovbirrasmcdirmytismircloudvladimirnalchikadygeyamarinepyatigorskmyjinobashkiriaeurodirvladikavkazna4ugroznykustanaikalmykiacldmaildagestaniranbuildcanvaliaravalwixdevelopmentappwritemigrationneedleverceldatabasestackitcodereplravendbonporterlovableaccoorgmilnetgovcoopmedorgcompubschnetedugovservicemecomygovorggovtvmedorgcomnetedugovinfoedgfacbmlonihkutwpsryxzbdtmacfhppmyspreadshopbrandpartiorgcomfhvpress123minsidaitcouldbeworlanbibkommunalforbundfhskiopsyskomvuxkomforbnaturbruksgymnloginlineorgcomnetedugovenscaledeuusentbotdaorgmilcomnetgovnowteleporthashbangplatformlovablebarsyshopwarebasehoplixbarsyonlinemsf5gitappgitpagecofigma-govcaffeinefigmacanvasoltstputerbarsysupportchatgptsquareomniweopensocialcpanelnotionnovecorewpsquaredpreviewjelecyonbyensrhtfastvpspieboxconvexjouwwebheyflowplatformshloginlinemadethissourcecraftclouderaorgorgcomartedugouvunivmeorgcomnetedugovsurveysstatichfheiyuxs4allprojectmyfastubervibehostapp-ionosdeployagentmecoorgcomschnetedugovbizcncostoreorgmilcomneteduembaixadaconsuladokiraranohoprincipesaotomeheliohobarsystorebaseshopwaresellfyabkhaziavologdamordoviapenzalenugsochinavoiexnetspbmsknovnorth-kazakhstanashgabadkareliaarmeniageorgiavladimirnalchikivanovobukharaadygeyakhakassiakalugakrasnodarjambylaktyubinsktroitskbryanskobninskkurganazerbaijanpokrovskbashkiriatselinogradvladikavkazmurmansktulatuvamangyshlaktashkentchimkentgroznykaragandatermezarkhangelskkustanaikalmykiabalashoveast-kazakhstankaracoldagestantogliattibarsyredorgcomgobedumirenknightpointaccoorgjelasticdiscoursecleverappsschacmiincogoornetonlineshopcogoorgmilcomwebnicnetintedugovbiznametestcoorgmilcomnomnetedugovorangecloudpersoindorgcomfinnatnetgovensmincomtourismintlinfox0611oyaorgmilcomnetedugovquickconnectvpnplusnettprequalifymeaddrmyaddrntdllwadlnctvavdrk12orgmilpolbeltelcomwebgennetedutskkepgovbbsbiznameinfocoorgmilcompronetedugovbiznameinfobetter-thanworse-thansakurafromdyndnson-the-webmymailerorgmilurlcomneteduidvgovmydnsgameclubebizmeneacsccogotvorhotelmilmobiinfovodteiflgplkmsmsbcckhincndnvncoztltmkckppzpdprvcvkvlvcrkrkscxuzchernovtsyrivneyaltaodesavolynrovnolutskltdinforgcomnetedugovbizvinnicazhitomirternopilpoltavakropyvnytskyizaporizhzhiasevastopolsebastopoluzhgoroduzhhorodkharkovkharkivvinnytsiakhmelnytskyizaporizhzhecrimeaodessazhytomyrnikolaevcherkassydonetskluganskluhanskkirovogradivano-frankivskchernivtsikrymkievkyivlvivsumyzakarpattiamykolaivcherkasychernigovkhersonchernihivdnipropetrovskdnepropetrovskkhmelnitskiyneacsccogoorusorgmilcomedugovvmdhmyspreadshopadimono-ipbarsybytemarkbarsyonlinelayershiftnh-servretrosnubapicampaignservicelugaffinitylotteryweeklylotteryraffleentrygluglugsmeaccoindependent-inquestnimsitecopropymntltdorgplcschnetgovnhsbarsyindependent-commissionindependent-reviewpolicepublic-inquiryindependent-panelconnhospindependent-inquiryroyal-commissionoraclegovcloudappscck12libccphxcclibpvtparochchtrcck12libcceatonk12coglibtecgendstmusann-arborwashtenawcck12glghcck12sealibforksolympiabainbridge-islkeyporthoquiamyarrow-pointcentraliaport-townsendsequimport-ludlowrentonsilverdalebremertonredmondsheltonbellevueport-orchardport-angeleskingstonchehalisaberdeengig-harborseattlepoulsboidmdndsddemenegacalamaiavawapailalflnmdcncscohnhmihiviwiriinmntnmocoutvtctmtgunjokakwvnvprarorasmskstxwynykyazisadninsnngosrvis-bymircloudservernamepointtoenscaledland-4-salefreeddnsstuff-4-saleazure-apinoipcloudnsgolffanheliohostazurewebsitesgvorgmilcomgubneteducoorgcomnetd0egvorgmilcomnetedugovmydnsiacostoree12orgmilcomnomwebgobbibrectecnetintedugovraremprendefirminfoartseducok12orgcomnethidnsidacaiiosonlahanamhanoicamauhueorgcompronetintedugovbizbacninhtayninhhoabinhnamdinhtravinhhaiphongvinhlonghaiduongquangnamquangtrithuathienhuequangninhbacgianghaugiangquangbinhsoctrangbentrethanhphohochiminhdanangkontumhatinhkhanhhoathanhhoahealthgialailaocaiyenbaibackanngheanlonganphuyenphuthocanthodaklakdongnainameinfovinhphucdongthapkiengiangtiengiangquangngailaichaulangsonlamdongdaknonghagiangangiangcaobangbinhduongninhthuanbinhthuanbaclieuthaibinhninhbinhbinhdinhtuyenquanghungyenbaria-vungtauthainguyendienbienbinhphuocschbizputerimagine-proxyorgcomnetedugovcloud66advisormypetsdyndnsxn--8dbq2axn--4dbgdty6cxn--5dbhl8dxn--hebda8bxn--80auxn--d1atxn--c1avgxn--o1acxn--o1achxn--90azhxn--55qx5dxn--uc0atvxn--od0algxn--wcvs22dxn--gmqw5axn--mxtq1mxn--12c1fe0brxn--h3cuzk1dixn--12co0c3b4evaxn--12cfi8ixb8lxn--o3cyx2axn--m3ch0j3axn--j1adpxn--90amcxn--90a1afxn--h1ahnxn--j1ael8bxn--h1alizxn--c1avgxn--j1aefxn--80aaa0cvacxn--41acaffeineexeopentunnelbotdashtelebitorgtmaccoagricorgmilnomwebnicngonetaltedugovlawnisschoolgrondaraccoorgmilcomschnetedugovbizinfoprg1-zeropstritonstackitlimazeropsaccoorgmilgovяспборгкоммскбизмирсамаракрымсочиакодпроргобрупрצהלממשלישובאקדמיהองค์กรธุรกิจรัฐบาลศึกษาทหารเน็ต教育網絡組織公司政府個人닷넷한국澳门新闻澳門联通家電嘉里招聘通販닷컴삼성コムგეбгрфеюadcdbdgdidmdsdtdaebedeeegeiejekemenepereseveyegabacalamanauavapaqasazacfbfafgfnfpfwftfbgcgagggegkgngmgsgpgvgtgugilmlnlalclglplsltlhmimjmkmmmomambmcmdmfmgmzmpmsmtmgbbblbsbecccacnclcmcvctcscmhkhghchbhthphshlinikifigiaibicivisikninhnmncnbngnsnpnvntnjoionomobocoaofodorosotoptstttytatbtetgtithtmtltrusuvuaucueuguhulumunufjdjbjtjsjlkmkhkfkdkcktkukskpkgpmpnpkpjpgqaqmqiqsvtvcvbvmvlvrwpwtwzwbwcwawgwkwmwtrsrprgrfrercrbrarnrmrlrkrirhrwsusrssspsgsesbsaslsmsissxmxaxcxuypysylymykygybycyuztzsznzmzkzdzczbzazελευ世界台灣购物公益点看臺灣网络書籍在线网站手机机构大拿游戏信息台湾谷歌慈善商标香港中国餐厅网址中國商城食品微博政务移动集团公司八卦商店健康网店政府时尚佛山中信娱乐广东企业homedepotengineeringاماراتrepublicankuokgroupversicherungchannelcitadelxn--pgbs0dhxn--b4w605ferdstatebankwebsitexn--mgb9awbf亚马逊淡马锡alibabaxn--ngbc5azdxn--mgbbh1axn--45br5cyltoshibabuildworldcloudtradeguideplacespacedancemoviephoneprimesmilebiblestyleappleazurestoreskypegripexn--l1accdrivelottehorsehouseleasechasereisestadahondaomegaaetnaamicaninjanokiamediadeltavodkaedekaosakapizzaslingemailgmailtirolshelltmallfinallegaltotalhotelamfamforumrehabmusicciticricohcoachwatchboschearthfaithirishmiamiarchidubaiguccipraxiみんなストアセールcanonsalononionnikonepsonkoelngreensevencrownikanoradioaudioweiboglobopromogalloyahoociscorodeovideomangobingotokyovolvolottokyotophotosmartsportquesttrusthyattjetztadultcymrubaidutushuxn--kprw13dubankclickblackmerckgroupsharpcheapnowtvxn--h2brj9cקוםհայоргсрбмонкомбелмкдқазрусукрمصرقطرعربكومdadcfdmedwedredphdthdbidpidkrdmsdltdiceonewmeglemoerwecfageacbanbambaaaammakianraspacpaaxawtfbcgaegongingaigvigorgdogdhlmilrilonlaolloluoljllcalgalnflafltelsrlfrllplkimibmcamcombommomifmabbjcbscbcabnabtabmlbpubabcbbcnecincpncllcstcwtcpwcnyckfhbzhovhmoiskiobisbitcifyituipinvinwinxincbnbcnmanfangdnmenrenkpnmtnyunrunfununobiojioriohbogmofooboooooacoecoceongoproartistottnttbbtcateatlatvetpetbetnethktmitfitintjothotgotdotbotprueduicujnjyouinknhktdkappsapgapmapdnptopgopllpjmpzipvipripesqtrvdtvitvdevmovgovhivnrwlawsewnewbmwwownowhowdvrftrmtrsfrbarcartvscrseusawsupsubssbsadsddsldssasbmsmlsxxxboxfoxgmxtjxsextaxbuyflydiysoyjoyskypaydaygayxyzanzbizwebersenerpokerlameractortatarsolarລາວคอมไทยtourslocusnexuslexusgiftsbeatsboatspartspressglassswissकॉमनेटtiresgivescodeshomesgamestunesshoescardswalesloansvegastoolsdealsautosparisファッションworkssucksrocksxeroxforexfedexpartylillymoneystudyrugbytoraytoday中文网xn--unup4y天主教飞利浦新加坡enterprises我爱你嘉里大酒店christmasxn--fct429kholdingsxn--8y0a063axn--mgbx4cd0ablifestyleabogadoallstatenetbankكاثوليكxn--s9brj9cxn--gk3at1ebestbuycharityxn--55qx5dmicrosoftpropertybasketballhomegoodscorsicajewelrygallerygrocerysurgerycountrybrusselsverisignferreroxn--czr694bhdfcbankcommbanksoftbankپاكستانپاکستانnextdirectالسعوديهالعليانxn--h2brj9c8cxn--80adxhksshikshaxn--mgbai9azgqp6jcuisinellabarclayscatholicxn--kpry57dcompanyxn--xhq521bblackfridayxn--mgba3a3ejtsandvikxn--d1acj3bacademydownloadمليسياxn--j1amhxn--w4r85el8fhu5dnraipirangaathletaxn--fhbeixn--mgbqly7cvafrzuerichxn--c2br7gஇலங்கைcontractorsxn--io0a7igraphicsinsurancetemasekxn--xkc2al3hye2amotorcyclesphotographydirectoryplumbingxn--vhquvclothingtrainingcleaningwilliamhilllightingxn--mgba3a4f16ashoppingcateringeducationokinawapicturesventuresproductionsxn--9et52uwalmartഭാരതംsupportrealestatecapitalonexn--nqv7fs00emaauspostfloristdentistxn--qxamgodaddybradescobargainsmitsubishikerryhotelsxn--9dbq2axn--3pxu8kimmobilienxn--fjq720axn--mgbtx2bholidaymckinseymadridbusinessbuildershelsinkixn--4gbrimмоскваالسعودیةcoffeedegreelacaixapartnersalsaceofficeabbvievoyageorangegeorgeonlinechromemobilekindlegoogleoraclecircleschulesecureinsurexn--mgba7c0bbn0aestatexn--mgbc0a9azcgcruisehangoutxn--vuq861bxn--42c2d9arexrothfirestoneuniversityxn--nnx388alifeinsuranceextraspaceонлайнvermögensberatersoftwarexn--fiqs8sxn--mgbab2bdxn--w4rs40ltiendaभारतम्africatoyotaotsukasakuracameracreditcardnagoyaconsultingnetworkjunipertheatermonsterprogressivepioneerxn--55qw42gracingdatingvotingvikinglivinggivingxn--bck1b9a5dre4cbrotherweatherjoburgفلسطينlplfinancialxn--clchc0ea0b2g2a9gcdfutbolschoolsocialglobaldentalwoodsidechanelairtelmatteltravelrealtorwebcamstreamభారత్unicomalstomxn--nodexn--6frz82gmuseumfurniturexn--rvc1e0am3exn--mix891faccenturexn--11b4c3dismailineustardiscountquebeccomsecclinicservicesxn--y9a3aqxn--c1avgswatchchurchsearchالاردنmarketingcontacthealthmonashshoujisanofitaipeiamericanexpresssuzukiアマゾンクラウドポイントbhartiグーグルxn--mgberp4a5d4armemorialxn--1qqw23alondonmormoninstitutevisionbostonnortoncouponmaisonamazonvirginberlindesigndurbanolayannissananquanxihuanhitachikaufengardenreisenbayerntechnologydatsunxn--90a3aclatinocasinostudiophysioxn--ngbe9e0apharmacytattootaobaoaramcoexpertreportabbottdirectselectimamatfairwindspictettargetmarketintuittravelersinsurancecreditdupontryukyusuppliesxn--tckwebnpparibasschmidtmerckmsdyodobashirestaurantbridgestonecricketxn--fpcrj9c3dbostikbroadwayattorneylefrakemerckxn--fiq228c5hscareersfarmerswinnersflowersxn--wgbh1cguitarsxn--54b7fta0ccxn--p1acfmakeupgalluplandroverxn--kcrx77d1x4agoldpointbauhausxn--mgbayh7gpahiphopplaystationxn--mgba3a4fraxn--eckvdtc9dhyundaixn--gckr3f0fistanbulticketsmarketsflightschintaireviewsxn--3e0b707ewindowsxn--fiqz9sfinancialxn--fzys8d69uvgmابوظبيdiscoverreviewবাংলাxn--5su34j936bgsgmoscowobserverapartmentsдетиارامكوсайтeurovisionxn--i1b6b1a6a2exn--xkc2dl3a5ee0hتونسموقعبارتڀارتشبكةعمانبيتكعراقreadkredbondlandbandfundfoodprodgoldfordtubecafesafelifeggeeieeefreefagepagegugezonewinememenamegamesaleablebikenikelikecarecbreherefiresaveloveliveblueartedatesitevotecaseluxebofamodaltdaasdatiaayogasinavanashiaasiajavabbvatevavivadatazaraarpacasavisasncfprofmaifsurfgolfdvagsongbingpingwangkpmggoogblogpohlfailcooldellcalldeallidlsarlfilmteamroomfarmimdbarabclubhdfcicbchsbcgmbhrichtechfishdishcashminiernikddiaudiwikimobitaxicitikiwidesiqponskinloanakdnwienopenporncerntownimmolimoolloinfonicofidolegosaxozeroaerovivoautovotomotofastbestresthostpostnextlgbtchatseatgiftmeetdietreitmintrentgentspotscotguruitausohumenucyoubanklinkpinkdclktalksilkbookseekworkrsvpaarpjeepshopcoophelpcamppccwshowbeerstarruhrflirweirhaircarsparsjprshausplusnewstipstoysjobskidsfanspicsdocsxboxamexsexynavycitysonyarmyallybabyplaydeliverybuzzgbizlamborghiniphilipsලංකාಭಾರತfitnessexpresslanxesspfizercenterwalterlawyersoccercareerkosherbrokerlockerdealerdoctorauthorxn--mgbqly7c0a67fbcvermögensberatungjaguarxn--pssy2uxn--hxt814eflickrrepairrogersairbusxn--mgbai9a5eva00beventsyachtsxn--t60b56aভাৰতভারতभारतभारोतviajeshermeshughesxn--j1aefसंगठनvillasଭାରତclaimshotelsભારતzapposphotosjuegoscondostatamotorsgratistennisਭਾਰਤtkmaxxtjmaxxschaeffleryandexxn--80aswgrealtysafetybeautyluxuryxn--3ds443gsupplyfamilyxn--o3cw4hhockeysydneyxn--90aenissayalipayenergycomputeragencyxn--rovu88b電訊盈科xn--gecrj9cstatefarmaccountantaquarelleolayangroup香格里拉xn--p1ai组织机构xn--1ck2e1bxn--mgbt3dhdschwarzموريتانياabudhabinowruzkomatsufujitsuhospitalxn--80asehdbxn--mgbtf8flxn--j6w193gxn--yfro4i67oprudentialxn--flw351ecruisescoursesrecipesxn--e1a4cferrarixn--ses554gxn--wgbl6awatchesstaplessinglesxn--mgbcpq6gpa1axn--otu796dpropertiescreditunionxn--mgbah1a3hjkrdstockholmhisamitsuالسعوديةstcgroupdomainsoriginscouponsbloombergclubmedfroganslimitedxn--80aqecdr1aexposedinternationalequipmentbarclaycardxn--q7ce6axn--mgbi4ecexpprotectionassociatesconstructionxn--cck2b3bxn--45q11candroidfoundationישראלxn--mgbca7dzdocliniqueboutiqueengineerxn--qxa6asystemsfirmdalefashionauctionxn--nqv7finfinitirentalsreliancetradingweddingfishinghostinggentingbookingcookingxn--3hcrj9cgraingerxn--czrs0tdemocratsamsungyokohamaxn--h2breg3evexn--nyqy26alundbeckmelbournevacationssolutionsfrontierxn--vermgensberatung-pwbmanagementxn--cg4bkixn--mgb2ddeslincolnhamburgsandvikcoromantblockbusterairforcebarefootxn--4dbrk0ceinvestmentsfeedbackcommunityxn--ngbrxالبحرينdiamondsamsterdamhealthcareredumbrellaxn--mxtq1mxn--2scrj9cagakhanxn--mgbpl2fhкатоликcaravanசிங்கப்பூர்richardlimortgageamericanfamilyxn--fzc2c9e2cscholarshipssaarlandxn--imr513nvlaanderensamsclubgoodyearkitchenஇந்தியாweatherchannelallfinanzxn--kput3iالسعودیۃxn--90aisxn--efvy88hالجزائرxn--mgbaam7a8hexchangejpmorganxn--tiq49xqyjfidelitysecurityxn--mk1bu44cwanggouxn--fiq64bxn--6qq986b3xlxn--mgbbh1a71exn--80ao21amarshallsxn--5tzm5gtravelerspanasoniclatrobeyoutubeaccountantsxn--rhqv96gxn--cckwcxetdanalyticsxn--ygbi2ammxبازاربھارتسوريةorganicfreseniusسورياxn--9krt00axn--qcka1pmcxn--jlq480n2rgdeloittesciencefinancexn--jvr189mxn--30rr7yhomesensehotmailbaseballfootballleclercboehringerxn--q9jyb4cxn--mix082fاليمنهمراهpolitieسودانايرانایرانnetflixyamaxunxn--lgbbat1ad8jcollegestoragecapetowncolognekerrypropertiesxn--mgbgu82axn--ogbpf8flxn--czru2dwhoswhociprianilasallexn--g2xx48cforsalebanamexaudiblexn--vermgensberater-ctbxn--zfr164bericssonvanguardxn--45brj9cindustriestheatremarriottxn--3bst00mcomparexn--mgberp4a5d4a87gcapitaldigitalالمغربbarcelonashangrilaxn--d1alfcalvinkleinwwwcitysapporokawasakinagoyasendaikobekitakyushuyokohamackjp",UE=621,GE=625,Fk=io.length,Zk=nd.length,Yk=new Uint32Array(Zk),Hu=new Uint32Array(Zk),tf=new Int32Array(Fk).fill(-1);for(let e=0,n=0;e<Fk;e+=1)for(let i=td[e];i<td[e+1];i+=1){Yk[i]=n;const r=n+nd[i];let u=5381;for(let h=r-1;h>=n;h-=1)u=u*33^ef.charCodeAt(h);Hu[i]=u>>>0,nd[i]===1&&ef.charCodeAt(n)===42&&(tf[e]=i),n=r}let Ai=-1,nf=0,af=0;function Dv(e,n,i,r){if(nd[e]!==r)return!1;const u=Yk[e];for(let h=0;h<r;h+=1)if(ef.charCodeAt(u+h)!==n.charCodeAt(i+h))return!1;return!0}function Ov(e,n,i,r,u){let h=td[e],g=td[e+1];for(;h<g;){const b=h+g>>>1,v=Hu[b];if(v<n)h=b+1;else if(v>n)g=b;else{for(let w=b;w>=h&&Hu[w]===n;w-=1)if(Dv(w,i,r,u))return w;for(let w=b+1;w<g&&Hu[w]===n;w+=1)if(Dv(w,i,r,u))return w;return-1}}return-1}function Iv(e,n,i){let r=n,u=e.length,h=5381;Ai=-1;for(let b=e.length-1;b>=0;b-=1){const v=e.charCodeAt(b);if(v===46){const w=b+1;let k=Ov(r,h>>>0,e,w,u-w);if(k===-1&&(k=tf[r]),k===-1)return Ai!==-1;r=zv[k],(io[r]&i)!==0&&(Ai=r,nf=w,af=u),u=b,h=5381}else h=h*33^v}let g=Ov(r,h>>>0,e,0,u);return g===-1&&(g=tf[r]),g!==-1&&(r=zv[g],(io[r]&i)!==0&&(Ai=r,nf=0,af=u)),Ai!==-1}function Xk(e,n,i){if($E(e,n,i))return;const r=(n.allowPrivateDomains?2:0)|(n.allowIcannDomains?1:0);if(Iv(e,GE,r)){i.isIcann=(io[Ai]&1)!==0,i.isPrivate=(io[Ai]&2)!==0,i.publicSuffix=e.slice(af+1);return}if(Iv(e,UE,r)){i.isIcann=(io[Ai]&1)!==0,i.isPrivate=(io[Ai]&2)!==0,i.publicSuffix=e.slice(nf);return}i.isIcann=!1,i.isPrivate=!1;const u=e.lastIndexOf(".");i.publicSuffix=u===-1?e:e.slice(u+1)}const ad=VE();function KE(e,n){return Hk(ad),Qk(e,0,Xk,n,ad).hostname}function HE(e,n){return Hk(ad),Qk(e,5,Xk,n,ad).domainWithoutSuffix}const QE={allowPrivateDomains:!0};new NE({fuzzyLink:!0,fuzzyEmail:!1}).tlds(_E);function vY(e,n){if(!e)return"";const i=e.trim();if(!i)return"";if(/^https?:\/\//i.test(i))return i;if(i.startsWith("//"))return`https:${i}`;const r=n.trim().replace(/^https?:\/\//i,"").replace(/\/+$/,"");return r?i.startsWith("/")?`https://${r}${i}`:`https://${r}/${i}`:i}function xY(e){const n=(e??"").trim();return n&&(n.startsWith("/")||/^https?:\/\//i.test(n)||/^mailto:/i.test(n))?n:"#"}function wY(e){const n=e??"",i=n.indexOf("?"),r=i===-1?n:n.slice(0,i),u=i===-1?"":n.slice(i+1),h=r||"/";if(!u)return{path:h,querySummary:null,raw:n};let g="";try{g=FE(new URLSearchParams(u))}catch{g="tracking params"}return{path:h,querySummary:g||null,raw:n}}function FE(e){const i=Array.from(e.keys()).length;if(i===0)return"";const r=i===1?"param":"params",u=ZE(e);return u?`${u} · ${i} ${r}`:`${i} tracking ${r}`}function ZE(e){if(e.has("fbclid"))return"Facebook Ad";if(e.has("gclid")||e.has("gbraid")||e.has("wbraid"))return"Google Ad";if(e.has("msclkid"))return"Microsoft Ad";if(e.has("ttclid"))return"TikTok Ad";if(e.has("li_fat_id"))return"LinkedIn Ad";if(e.has("twclid"))return"X / Twitter Ad";if(e.has("epik"))return"Pinterest Ad";for(const r of e.keys())if(r.startsWith("hsa_"))return"Search Ad";const n=e.get("utm_source"),i=e.get("utm_medium");return n&&i?`${n} / ${i}`:n?`Source: ${n}`:i?`Medium: ${i}`:null}function rc(e){if(e==null)return null;const n=e.trim();if(!n)return null;const i=KE(n);return i?i.replace(/^www\./i,"").toLowerCase():null}function Wk(e){return e==null||e.trim()===""?"":HE(e,QE)?.toLowerCase()??""}const YE=new Intl.Segmenter("en",{granularity:"word"}),XE=/[^\p{L}\p{N}]+/gu,WE=/[\p{L}\p{N}]+/gu,JE=/[\p{Script=Latin}\p{Script=Greek}\p{Script=Cyrillic}]/u,ez=new RegExp("\\P{ASCII}","u");function tz(e){if(!ez.test(e))return e;let n="";for(const i of e){if(i.charCodeAt(0)<128){n+=i;continue}const r=i.normalize("NFD"),u=r[0];n+=r.length>1&&JE.test(u)?u:i}return n}function Jk(e){return tz(e.normalize("NFKC")).toLocaleLowerCase("en")}function e2(e){const n=[];for(const i of YE.segment(e))if(i.isWordLike)for(const r of i.segment.match(WE)??[])n.push(r);return n}function nz(e){return e2(Jk(e))}function Pa(e){return nz(e).join("")}const Pv=new WeakMap;function az(e){if(!e)return null;const n=Jk(e);return{normalized:n,stripped:n.replace(XE,"")}}function iz(e){const n=Pv.get(e);if(n)return n;const i=e2(e.normalized);return Pv.set(e,i),i}function sz(e){const n=new Set;let i=0;for(const r of e){if(!r)continue;const u=Pa(r);u&&(n.add(u),u.length>i&&(i=u.length))}return{keys:n,longest:i}}function oz(e,n){if(!n||e.keys.size===0)return!1;const i=typeof n=="string"?az(n):n;if(!i)return!1;let r=!1;for(const h of e.keys)if(i.stripped.includes(h)){r=!0;break}if(!r)return!1;const u=iz(i);for(let h=0;h<u.length;h++){let g="";for(let b=h;b<u.length;b++){if(g+=u[b],e.keys.has(g))return!0;if(g.length>=e.longest)break}}return!1}const rz=4,t2=A(["cli","api","config-file"]);function lz(e){const n=new Set,i=new Set;for(const r of e){if(n.has(r.label)){i.add(r.label);continue}n.add(r.label)}return[...i]}function cz(e,n){return n?e.some(i=>i.label===n):!0}const uz=m({displayName:o().min(1),canonicalDomain:o().min(1),ownedDomains:y(o().min(1)).optional(),aliases:y(o()).optional(),country:o().length(2),language:o().min(2),tags:y(o()).optional(),labels:Ue(o(),o()).optional(),providers:y(gt).optional(),providerModels:Qf.optional(),locations:y(cn).optional(),defaultLocation:o().nullable().optional(),measurement:Xf.optional(),autoExtractBacklinks:N().optional(),configSource:t2.optional()});uz.extend({name:o().trim().min(1).max(120)});const dz=m({id:o(),name:o(),displayName:o().optional(),canonicalDomain:o(),ownedDomains:y(o()).default([]),aliases:y(o()).default([]),country:o().length(2),language:o().min(2),tags:y(o()).default([]),labels:Ue(o(),o()).default({}),providers:y(o()).default([]),providerModels:Qf.default({}),locations:y(cn).default([]),defaultLocation:o().nullable().optional(),measurement:Xf.default(Gk),autoExtractBacklinks:N().default(!1),configSource:t2.default("cli"),configRevision:d().int().positive().default(1),createdAt:o().optional(),updatedAt:o().optional()});m({id:o(),query:o(),createdAt:o()});m({id:o(),keyword:o(),createdAt:o()});m({queries:y(o().trim().min(1)).min(1)});m({keywords:y(o().trim().min(1)).min(1)});m({provider:gt,count:d().int().min(1).max(20).optional()});m({id:o(),domain:o(),createdAt:o()});m({competitors:y(o().trim().min(1)).min(1)});function id(e){return rc(e)??e.trim().toLowerCase().replace(/^www\./,"")}function n2(e){const n=[e.canonicalDomain,...e.ownedDomains??[]],i=new Set,r=[];for(const u of n){const h=u.trim();if(!h)continue;const g=id(h);i.has(g)||(i.add(g),r.push(h))}return r}function mz(e,n){if(!n||n.length===0)return[];const i=e?.trim().toLowerCase()??"",r=new Set,u=[];for(const h of n){const g=h.trim();if(!g)continue;const b=g.toLowerCase();b!==i&&(r.has(b)||(r.add(b),u.push(g)))}return u}function pz(e){const n=[],i=new Set,r=h=>{const g=Pa(h);!g||i.has(g)||(i.add(g),n.push(h))},u=e.displayName?.trim()??"";u&&r(u);for(const h of mz(e.displayName,e.aliases))r(h);for(const h of n2({canonicalDomain:e.canonicalDomain??"",ownedDomains:e.ownedDomains??[]})){const g=Wk(h);if(Pa(g).length>=rz)r(g);else{const b=id(h);b.includes(".")&&r(b)}}return n}const hz=m({name:o().min(1).max(63).regex(/^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/,{message:"Name must be a lowercase slug (letters, numbers, hyphens)"}),labels:Ue(o(),o()).optional().default({})}),fz=m({preset:o().min(1).optional(),cron:o().min(1).optional(),recurrence:Zf.optional(),timezone:o().optional().default("UTC"),providers:y(gt).optional().default([]),enabled:N().optional()}).refine(e=>[e.preset,e.cron,e.recurrence].filter(n=>n!==void 0).length===1,{message:'Exactly one of "preset", "cron", or "recurrence" must be provided'}).optional(),gz=m({channel:z("webhook"),url:o().url(),events:y(Yf).min(1)}),yz=m({gsc:m({propertyUrl:o()}).optional(),syncSchedule:m({preset:o().optional(),cron:o().optional()}).optional()}).optional(),qv=y(o().min(1)),bz=m({displayName:o().min(1),canonicalDomain:o().min(1),ownedDomains:y(o().min(1)).optional().default([]),aliases:y(o().min(1)).optional().default([]),country:o().length(2),language:o().min(2),queries:qv.optional(),keywords:qv.optional(),competitors:y(o().min(1)).optional().default([]),providers:y(gt).optional().default([]),providerModels:Qf.optional().default({}),locations:y(cn).optional().default([]),defaultLocation:o().optional(),measurement:Xf.optional().default(Gk),schedule:fz,notifications:y(gz).optional().default([]),google:yz,autoExtractBacklinks:N().optional().default(!1)}).superRefine((e,n)=>{e.queries!==void 0&&e.keywords!==void 0&&n.addIssue({code:"custom",message:"Use spec.queries; spec.keywords is accepted only as a legacy alias when spec.queries is omitted",path:["keywords"]});const i=lz(e.locations);i.length>0&&n.addIssue({code:"custom",message:`Duplicate location labels are not allowed: ${i.join(", ")}`,path:["locations"]}),cz(e.locations,e.defaultLocation)||n.addIssue({code:"custom",message:`defaultLocation "${e.defaultLocation}" must match a configured location label`,path:["defaultLocation"]})});m({apiVersion:z("canonry/v1"),kind:z("Project"),metadata:hz,spec:bz});const vz=["branded","non-brand"],_r=A(vz),Wf=A(["all","branded","non-brand"]);function xz(e){const n=e.filter(r=>Pa(r).length>0);if(n.length===0)return null;const i=sz(n);return i.keys.size===0?null:{matcher:i,classify(r){return oz(i,r)?"branded":"non-brand"}}}const wz=2,kz=o().regex(/^[a-f0-9]{64}$/),Cd=o().trim().min(1).max(256),Mv=A(["sensitive","insensitive"]),he=o().trim().min(1).max(128).regex(/^[a-z0-9][\w.~-]*$/i,"Must be a URL-safe stable key"),Sz=o().trim().min(1).refine(e=>rc(e)!==null,"A competitor domain must be a valid hostname"),jz=qe("kind",[m({kind:z("exact"),url:o().min(1),pathCase:Mv}).strict(),m({kind:z("prefix"),host:o().min(1),pathPrefix:o().min(1),pathCase:Mv}).strict(),m({kind:z("host"),host:o().min(1)}).strict()]),Az=m({canonicalHost:o().min(1),ownedHosts:y(o().min(1)),names:y(o().min(1))}).strict(),Cz=m({projectBrand:Az}).strict(),Nz=m({stableKey:he,label:o().trim().min(1),aliases:y(o().min(1)),identityAliases:y(o().trim().min(1)).optional(),urlMatchers:y(jz),mentionNotApplicable:N(),discoveryIdentity:o().min(1).nullable()}).strict(),a2=m({stableKey:he,label:o().trim().min(1),domain:Sz,aliases:y(o().min(1))}).strict(),_z=m({stableKey:he,label:o().trim().min(1),parentGroupKey:he.optional(),targetKeys:y(he),competitors:y(a2)}).strict(),Tz=A(["manual","query-set","template","discovery","research"]),Rz=m({templateId:o().trim().min(1).max(256),templateVersion:o().trim().min(1).max(256),template:o().trim().min(1).max(4e3),bindings:Ue(o().trim().min(1).max(128),o().trim().min(1).max(128)),output:o().trim().min(1).max(4e3)}).strict(),i2=m({source:Tz,sourceId:o().min(1).nullable(),capturedAt:o().datetime(),template:Rz.optional()}).strict(),Ez=m({queryId:Cd,queryText:o().min(1),provenance:i2}).strict(),Nd=m({providers:y(gt).min(1),models:Ue(gt,o().min(1)),location:cn.nullable()}).strict(),zz=m({stableKey:o().min(1),queryId:Cd,queryText:o().min(1),context:Nd,expectedSnapshots:d().int().nonnegative()}).strict(),Jf=_r,Dz=m({targetKey:he,queryId:Cd,queryClass:Jf,classificationSource:A(["server","operator"]).optional(),executionNodeKey:o().min(1)}).strict(),e0=m({executionNodeKey:o().min(1),targetKey:he,queryId:Cd}).strict(),s2=m({stableKey:he,label:o().trim().min(1),kind:z("market"),groupKey:he.optional(),usageEdges:y(e0)}).strict();function Bv(e){return[e.executionNodeKey,e.targetKey,e.queryId].join("\0")}const _d=m({schemaVersion:z(wz),identities:Cz,targets:y(Nz),groups:y(_z),querySnapshots:y(Ez),assignments:y(Dz),executionNodes:y(zz),usageEdges:y(e0),reportingScopes:y(s2).optional(),compiledChecksum:kz}).strict().superRefine((e,n)=>{const i=new Set;for(const b of e.executionNodes)i.has(b.stableKey)&&n.addIssue({code:ve.custom,path:["executionNodes"],message:`Duplicate execution node key "${b.stableKey}"`}),i.add(b.stableKey);const r=new Set(e.targets.map(b=>b.stableKey));e.usageEdges.forEach((b,v)=>{i.has(b.executionNodeKey)||n.addIssue({code:ve.custom,path:["usageEdges",v,"executionNodeKey"],message:`Usage edge references unknown execution node "${b.executionNodeKey}"`}),r.has(b.targetKey)||n.addIssue({code:ve.custom,path:["usageEdges",v,"targetKey"],message:`Usage edge references unknown Target "${b.targetKey}"`})});const u=new Set(e.usageEdges.map(Bv)),h=new Set;e.reportingScopes?.forEach((b,v)=>{if(h.has(b.stableKey)&&n.addIssue({code:ve.custom,path:["reportingScopes",v,"stableKey"],message:`Duplicate reporting scope key "${b.stableKey}"`}),h.add(b.stableKey),b.groupKey!==void 0){const k=e.groups.find(j=>j.stableKey===b.groupKey);(!k||b.usageEdges.some(j=>!k.targetKeys.includes(j.targetKey)))&&n.addIssue({code:ve.custom,path:["reportingScopes",v,"groupKey"],message:"A market must link to an existing group containing all its assigned properties."})}const w=new Set;b.usageEdges.forEach((k,j)=>{const T=Bv(k);u.has(T)||n.addIssue({code:ve.custom,path:["reportingScopes",v,"usageEdges",j],message:`Reporting scope "${b.stableKey}" references a usage edge that this revision does not contain.`}),w.has(T)&&n.addIssue({code:ve.custom,path:["reportingScopes",v,"usageEdges",j],message:`Reporting scope "${b.stableKey}" repeats a usage edge.`}),w.add(T)})}),e.assignments.forEach((b,v)=>{r.has(b.targetKey)||n.addIssue({code:ve.custom,path:["assignments",v,"targetKey"],message:`Assignment references unknown Target "${b.targetKey}"`})});const g=new Map;e.groups.forEach((b,v)=>{g.has(b.stableKey)&&n.addIssue({code:ve.custom,path:["groups",v,"stableKey"],message:"Duplicate group stable key "+b.stableKey}),g.set(b.stableKey,b)}),e.groups.forEach((b,v)=>{const w=b.parentGroupKey;if(w===void 0)return;if(w===b.stableKey){n.addIssue({code:ve.custom,path:["groups",v,"parentGroupKey"],message:"A group cannot be its own parent."});return}const k=g.get(w);if(!k){n.addIssue({code:ve.custom,path:["groups",v,"parentGroupKey"],message:"Group parent does not exist: "+w});return}const j=new Set(k.targetKeys);b.targetKeys.forEach((G,R)=>{j.has(G)||n.addIssue({code:ve.custom,path:["groups",v,"targetKeys",R],message:"Group target membership must be a subset of its parent."})});const T=new Set([b.stableKey]);let _=k;for(;_.parentGroupKey!==void 0;){if(T.has(_.stableKey)){n.addIssue({code:ve.custom,path:["groups",v,"parentGroupKey"],message:"Group parent relationships cannot contain a cycle."});break}T.add(_.stableKey);const G=g.get(_.parentGroupKey);if(!G)break;_=G}});for(const b of e.groups)for(const v of b.targetKeys)r.has(v)||n.addIssue({code:ve.custom,path:["groups"],message:`Group "${b.stableKey}" references unknown Target "${v}"`})}),t0=100;function vr(e){return m({items:y(e),nextCursor:o().min(1).nullable(),totalEstimate:d().int().nonnegative().optional()}).strict()}const Td=A(["no_completed_run","plan_v1","no_population","evidence_incomplete","identity_ambiguous","not_applicable"]),Xt=qe("state",[m({state:z("available"),value:d(),numerator:d().int().nonnegative().optional(),denominator:d().int().positive().optional(),unattributed:d().int().positive().optional()}).strict(),m({state:z("unavailable"),reason:Td}).strict()]),n0=A(["all","group","property"]),La=Wf,Oz=A(["label-asc","label-desc","citationCoverage-asc","citationCoverage-desc","mentionCoverage-asc","mentionCoverage-desc"]),a0=A(["not_measured","queued","running","complete","partial","failed"]),Iz=A(["run_measurement","review_flags","complete_setup","republish_setup","none"]);m({scope:n0,groupKey:he.optional(),targetKey:he.optional(),queryClass:La.optional(),provider:gt.optional(),location:o().trim().min(1).optional(),from:o().trim().min(1).optional(),to:o().trim().min(1).optional(),runId:o().trim().min(1).optional(),search:o().optional(),sort:Oz.optional(),cursor:o().trim().min(1).optional(),limit:d().int().positive().max(t0).optional()}).strict();const Pz=m({provider:gt,mentionCoverage:Xt,citationCoverage:Xt}).strict(),qz=m({bothSignals:d().int().nonnegative(),mentionedOnly:d().int().nonnegative(),citedOnly:d().int().nonnegative(),neither:d().int().nonnegative(),notMeasured:d().int().nonnegative(),total:d().int().nonnegative()}).strict(),Mz=m({targetKey:he,label:o().min(1),mentionCoverage:Xt,citationCoverage:Xt,providers:y(Pz),flags:d().int().nonnegative()}).strict(),Bz=m({kind:A(["project","competitor"]),stableKey:o().min(1),label:o().min(1),domain:o().min(1),credits:d().int().nonnegative(),share:d().min(0).max(1)}).strict(),Lz=m({groupKey:he,queryClass:z("non-brand"),denominator:d().int().positive(),entries:y(Bz)}).strict();m({mode:A(["active-v1","active-v2"]),scope:m({kind:n0,key:o().min(1).optional(),label:o().min(1)}).strict(),queryClass:La,measurement:m({state:a0,currentRunId:o().min(1).optional(),displayedRunId:o().min(1).optional(),completed:d().int().nonnegative(),expected:d().int().nonnegative(),completedAt:o().datetime().optional(),includesHistoricalData:N().optional()}).strict(),nextAction:m({kind:Iz,count:d().int().nonnegative().optional()}).strict(),metrics:m({propertiesMentioned:Xt,mentionCoverage:Xt,citationCoverage:Xt,brandPresence:Xt,sov:Xt.describe("Deprecated alias of brandPresence carrying the identical value. Remove once the browser migrates.")}).strict(),properties:vr(Mz),outcomes:qz,flags:m({total:d().int().nonnegative()}).strict(),namedShareOfVoice:Lz.optional()}).strict();const o2=A(["sources","answers"]),Vz=o2.enum;Vz.sources;m({targetKey:he,queryClass:La.optional(),provider:gt.optional(),location:o().trim().min(1).optional(),runId:o().trim().min(1).optional(),shape:o2.optional(),cursor:o().trim().min(1).optional(),limit:d().int().positive().max(t0).optional()}).strict();const r2=1,lc=d().int().positive(),ln=o().trim().min(1).max(128).regex(/^[a-z0-9][\w.~-]*$/i,"Must be a URL-safe stable key"),cc=o().trim().min(1).max(256),Lv=A(["sensitive","insensitive"]);function sd(e){const n=rc(e);if(!n)throw new Error(`Invalid measurement host: ${e}`);return n}function $z(e){const n=[];let i=!1;for(let r=0;r<e.length;r++){const u=e[r];u==="/"?(i||n.push(u),i=!0):(n.push(u),i=!1)}for(;n.length>1&&n.at(-1)==="/";)n.pop();return n.length?n.join(""):"/"}function Vv(e){try{return decodeURI(e).normalize("NFC").toLowerCase()}catch{return e.normalize("NFC").toLowerCase()}}function l2(e){const n=new URL(`https://measurement.invalid${e}`).pathname;return $z(n.replace(/%[0-9a-f]{2}/gi,i=>i.toUpperCase()))}function sf(e){const n=e.trim();if(!n||n.includes("?")||n.includes("#")||n.includes("://")||n.includes("\\"))throw new Error(`Invalid measurement path prefix: ${e}`);const i=n.startsWith("/")?n:`/${n}`;for(const r of i.split("/")){let u;try{u=decodeURIComponent(r)}catch{throw new Error(`Invalid measurement path prefix: ${e}`)}if(u==="."||u==="..")throw new Error(`Invalid measurement path prefix: ${e}`)}try{return l2(i)}catch{throw new Error(`Invalid measurement path prefix: ${e}`)}}function Uz(e){const n=/^[a-z][a-z0-9+.-]*:\/\/[^/?#]*/i.exec(e);if(!n)throw new Error(`Invalid exact measurement URL: ${e}`);return e.slice(n[0].length).split(/[?#]/,1)[0]||"/"}function $v(e){const n=e.trim();if(!n||n.includes("\\"))throw new Error(`Invalid exact measurement URL: ${e}`);let i;try{i=new URL(n)}catch{throw new Error(`Invalid exact measurement URL: ${e}`)}if(i.protocol!=="http:"&&i.protocol!=="https:"||i.username||i.password||i.port||i.search||i.hash)throw new Error(`Invalid exact measurement URL: ${e}`);const r=sd(i.hostname),u=sf(Uz(n));return`https://${r}${u}`}const tc=o().trim().min(1).refine(e=>{try{return sd(e),!0}catch{return!1}},"A target URL matcher host must be a valid hostname").overwrite(e=>sd(e)),Gz=o().trim().min(1).refine(e=>{try{return sf(e),!0}catch{return!1}},"A target URL matcher pathPrefix must be an absolute path without query or fragment").overwrite(e=>sf(e)),Kz=o().trim().min(1).refine(e=>{try{return $v(e),!0}catch{return!1}},"A target exact matcher must be an HTTP(S) URL without credentials, port, query, or fragment").overwrite(e=>$v(e)),Hz=qe("kind",[m({kind:z("exact"),url:Kz,pathCase:Lv}).strict(),m({kind:z("prefix"),host:tc,pathPrefix:Gz,pathCase:Lv}).strict(),m({kind:z("host"),host:tc}).strict()]),c2=o().trim().min(1).max(256).refine(e=>Pa(e).length>0,"A target alias must contain mention text"),Qz=Ue(o().trim().min(1),o()),Fz=tc,u2=m({stableKey:ln,label:o().trim().min(1),urls:y(Hz).min(1),aliases:y(c2),metadata:Qz.optional()}).strict(),i0=m({stableKey:ln,label:o().trim().min(1),targetKeys:y(ln).min(1),competitors:y(Fz).optional()}).strict(),d2=m({targetKey:ln,queryIds:y(cc).min(1),context:cn.nullable().optional()}).strict();function Zz(e,n){return e<n?-1:e>n?1:0}function Yz(e,n=i=>i){const i=new Set,r=new Set;for(const u of e){const h=n(u);i.has(h)&&r.add(h),i.add(h)}return r}function wh(e,n,i,r,u){for(const h of Yz(n,u))e.addIssue({code:"custom",path:[...i],message:`Duplicate ${r}: ${h}`})}function Uv(e){if(e.kind==="host")return{host:e.host,pathname:null};if(e.kind==="prefix")return{host:e.host,pathname:e.pathPrefix};const n=new URL(e.url);return{host:sd(n.hostname),pathname:l2(n.pathname||"/")}}function Xz(e,n,i,r){return e===i||(n==="insensitive"||r==="insensitive")&&Vv(e)===Vv(i)}function Wz(e,n){if(e.kind!==n.kind)return!1;const i=Uv(e),r=Uv(n);return i.host!==r.host?!1:e.kind==="host"||n.kind==="host"?!0:Xz(i.pathname,e.pathCase,r.pathname,n.pathCase)}function Jz(e){const n=new Set;return[...e].sort(Zz).filter(i=>{const r=Pa(i);return n.has(r)?!1:(n.add(r),!0)})}const m2=m({schemaVersion:z(r2),targets:y(u2).min(1),groups:y(i0).optional(),targetQuerySelections:y(d2).optional()}).strict().superRefine((e,n)=>{const i=e.groups??[],r=e.targetQuerySelections??[];wh(n,e.targets.map(v=>v.stableKey),["targets"],"target stable key"),wh(n,i.map(v=>v.stableKey),["groups"],"group stable key");const u=new Set(e.targets.map(v=>v.stableKey)),h=new Set(i.map(v=>v.stableKey));for(const v of u)h.has(v)&&n.addIssue({code:"custom",path:["groups"],message:`Target and group stable keys must be globally unique: ${v}`});const g=new Map,b=[];e.targets.forEach((v,w)=>{for(const k of Jz(v.aliases)){const j=Pa(k),T=g.get(j);T&&T!==v.stableKey&&n.addIssue({code:"custom",path:["targets",w,"aliases"],message:`Target alias is already assigned to target ${T}: ${k}`}),g.set(j,v.stableKey)}v.urls.forEach((k,j)=>{b.find(_=>_.targetKey!==v.stableKey&&Wz(_.matcher,k))&&n.addIssue({code:"custom",path:["targets",w,"urls",j],message:"Target URL matcher has an equal-specificity cross-target tie"}),b.push({targetKey:v.stableKey,matcher:k})})}),i.forEach((v,w)=>{wh(n,v.targetKeys,["groups",w,"targetKeys"],"group target key");for(let k=0;k<v.targetKeys.length;k++){const j=v.targetKeys[k];u.has(j)||n.addIssue({code:"custom",path:["groups",w,"targetKeys",k],message:`Unknown target: ${j}`})}}),r.forEach((v,w)=>{u.has(v.targetKey)||n.addIssue({code:"custom",path:["targetQuerySelections",w,"targetKey"],message:`Unknown target: ${v.targetKey}`})})});m2.transform(e=>({...e,groups:e.groups??[],targetQuerySelections:e.targetQuerySelections??[]}));m({expectedActiveRevision:lc.nullable(),plan:m2}).strict();const eD=m({queryId:cc,queryText:o().min(1)}).strict(),s0=m({stableKey:o().min(1),queryText:o().min(1),context:cn.nullable(),expectedSnapshots:d().int().nonnegative()}).strict(),tD=m({kind:z("baseline"),executionNodeKey:o().min(1),queryId:cc}).strict(),nD=m({kind:z("target"),executionNodeKey:o().min(1),queryId:cc,targetKey:ln}).strict(),of=qe("kind",[tD,nD]),p2=m({code:z("target-alias-prefix-overlap"),message:o().min(1),targetKeys:y(ln).min(1),aliases:y(o().min(1)).min(1)}).strict(),h2=u2.extend({mentionNotApplicable:N()}),f2=m({schemaVersion:z(r2),defaultContext:cn.nullable(),effectiveOwnedHosts:y(tc),projectCanonicalHost:tc,projectBrandNames:y(c2),targets:y(h2),groups:y(i0),targetQuerySelections:y(d2),querySnapshots:y(eD),executionNodes:y(s0),usageEdges:y(of),warnings:y(p2)}).strict(),aD=f2,g2=qe("schemaVersion",[f2,_d]),o0=o().regex(/^[a-f0-9]{64}$/),r0=o().datetime(),y2=m({schemaVersion:z(1),providers:y(o().min(1)).min(1),models:Ue(o().min(1),o().min(1)),checksum:o().regex(/^[a-f0-9]{64}$/)}).strict(),iD=m({groups:y(ln).optional(),targets:y(ln).optional()}).strict(),sD=m({groups:y(ln),targets:y(ln),queries:y(o().min(1)),resolvedTargets:y(ln)}).strict().superRefine((e,n)=>{e.resolvedTargets.length===0&&e.queries.length===0&&n.addIssue({code:"custom",path:["resolvedTargets"],message:"A recorded scope must name something it measured"})});m({stableKey:ln,retiredAt:o().datetime()});m({active:m({revision:lc,checksum:o0,createdAt:r0,plan:g2}).nullable()});m({versions:y(m({revision:lc,checksum:o0,createdAt:r0,active:N()}))});m({version:m({revision:lc,checksum:o0,createdAt:r0,active:N(),plan:g2})});const Qu=m({targets:d().int(),groups:d().int(),queries:d().int(),executionNodes:d().int(),usageEdges:d().int(),baselineEdges:d().int(),targetEdges:d().int(),dedupSavings:d().int()}).strict(),oD=A(["invalid-authoring","duplicate-identity","unknown-target","unknown-query","invalid-project-context","unowned-target-url","owned-competitor","target-query-context-conflict","target-url-ownership-tie","target-alias-cross-target-collision","target-alias-project-brand-collision","target-alias-prefix-overlap"]),b2=m({id:oD,severity:A(["fail","warn"]),message:o().min(1),path:y(Ze([o(),d().int()]))}).strict(),rD=m({baseline:d().int().nonnegative(),target:d().int().nonnegative()}).strict(),v2=m({ok:z(!0),checks:y(b2),executionNodes:y(s0),dedupSaved:d().int().nonnegative(),usageEdges:rD,estCostUsd:de(),plan:aD,warnings:y(p2),counts:Qu}).strict(),x2=m({ok:z(!1),checks:y(b2).min(1),executionNodes:y(s0).length(0),dedupSaved:z(0),usageEdges:m({baseline:z(0),target:z(0)}).strict(),estCostUsd:de()}).strict();qe("ok",[v2,x2]);const Eu=m({targetKey:ln,context:cn.nullable(),queryIds:y(cc)}).strict();function Gv(e){return m({added:y(e),removed:y(e),changed:y(m({stableKey:ln,before:e,after:e}).strict()),unchanged:y(ln)}).strict()}const lD=v2.extend({diff:m({activeRevision:lc.nullable(),targets:Gv(h2),groups:Gv(i0),querySelections:m({added:y(Eu),removed:y(Eu),changed:y(m({targetKey:ln,before:Eu,after:Eu}).strict()),unchanged:y(m({targetKey:ln,context:cn.nullable()}).strict())}).strict(),execution:m({addedNodeKeys:y(o().min(1)),removedNodeKeys:y(o().min(1)),addedUsageEdges:y(of),removedUsageEdges:y(of),counts:m({before:Qu.nullable(),after:Qu,delta:Qu.nullable()}).strict()}).strict()}).strict()}).strict(),cD=x2.extend({diff:de()}).strict();qe("ok",[lD,cD]);const uD=1,dD=o().refine(e=>e.trim().length>0,{message:"Must not be blank"}),w2=m({displayName:o(),aliases:y(o()),canonicalDomain:o(),ownedDomains:y(o())}).strict(),k2=m({provider:gt.refine(e=>e.trim().length>0,{message:"Provider must not be blank"}),requestedModel:o().nullable()}).strict(),S2=m({domain:o(),label:o(),aliases:y(o())}).strict(),j2=m({queryId:dD,queryText:o(),provenance:o().nullable()}).strict(),mD=j2.extend({queryClass:_r.nullable()}).strict();function A2(e,n){const i=new Set;e.engines.forEach((h,g)=>{const b=h.provider.trim().toLocaleLowerCase("en");i.has(b)&&n.addIssue({code:ve.custom,path:["engines",g,"provider"],message:`Duplicate engine provider "${h.provider}"`}),i.add(b)});const r=new Set;e.queries.forEach((h,g)=>{r.has(h.queryId)&&n.addIssue({code:ve.custom,path:["queries",g,"queryId"],message:`Duplicate query id "${h.queryId}"`}),r.add(h.queryId)});const u=new Set;e.competitors?.forEach((h,g)=>{const b=h.domain;u.has(b)&&n.addIssue({code:ve.custom,path:["competitors",g,"domain"],message:`Duplicate competitor domain "${h.domain}"`}),u.add(b)})}m({capturedAt:o().datetime(),identity:w2,country:o(),language:o(),location:cn.nullable(),engines:y(k2).min(1),competitors:y(S2).optional(),queries:y(j2)}).strict().superRefine(A2);m({schemaVersion:z(uD),capturedAt:o().datetime(),identity:w2,country:o(),language:o(),location:cn.nullable(),engines:y(k2).min(1),competitors:y(S2).optional(),queries:y(mD)}).strict().superRefine(A2);const pD=A(["auto","simple","advanced"]),C2=A(["simple","advanced"]),N2=A(["branded","non-brand","unknown","all"]),hD=A(["branded","non-brand","unknown"]),l0=A(["project","group","market","property"]),_2=qe("kind",[m({kind:z("all")}).strict(),m({kind:z("none")}).strict(),m({kind:z("exact"),value:o().trim().min(1)}).strict()]);function fD(e){if(e===void 0||e==="")return{kind:"all"};const n=e.normalize("NFKC").trim();return n===""?{kind:"all"}:n.toLocaleLowerCase("en")==="none"?{kind:"none"}:{kind:"exact",value:n}}const bt=o().trim().min(1),Ni=o().datetime(),gD={mode:pD.default("auto"),queryClass:N2.default("non-brand"),scope:l0.default("project"),scopeKey:bt.optional(),marketKey:bt.optional(),provider:bt.optional(),model:bt.optional(),location:o().trim().min(1).optional(),from:Ni.optional(),to:Ni.optional(),revision:d().int().positive().optional(),runId:bt.optional(),queryKey:bt.optional(),queryId:bt.optional(),search:o().trim().min(1).optional(),cursor:bt.optional(),limit:d().int().min(1).max(100).default(50)},od=m(gD).strict().superRefine((e,n)=>{e.scope!=="project"&&e.scopeKey===void 0&&n.addIssue({code:ve.custom,path:["scopeKey"],message:`scopeKey is required for ${e.scope} scope`}),e.scope==="project"&&e.scopeKey!==void 0&&n.addIssue({code:ve.custom,path:["scopeKey"],message:"scopeKey is not valid for project scope"}),e.scope==="market"&&e.marketKey!==void 0&&n.addIssue({code:ve.custom,path:["marketKey"],message:"marketKey is not valid for market scope"}),e.from!==void 0&&e.to!==void 0&&e.from>e.to&&n.addIssue({code:ve.custom,path:["to"],message:"to must be on or after from"}),e.queryKey!==void 0&&e.queryId!==void 0&&n.addIssue({code:ve.custom,path:["queryId"],message:"queryKey and queryId cannot both be supplied"})});od.transform(e=>({...e,location:fD(e.location)}));const ja=m({numerator:d().int().nonnegative().nullable(),denominator:d().int().nonnegative().nullable(),rate:d().min(0).max(1).nullable(),reason:A(["no-population","incomplete","evidence-incomplete","identity-ambiguous","not-applicable"]).optional(),unattributed:d().int().positive().optional()}).strict().superRefine((e,n)=>{if(e.numerator===null||e.denominator===null||e.rate===null){(e.numerator!==null||e.denominator!==null||e.rate!==null||e.reason===void 0)&&n.addIssue({code:ve.custom,message:"Unavailable rates require null values and a reason"}),e.unattributed!==void 0&&n.addIssue({code:ve.custom,path:["unattributed"],message:"Only an available rate can leave answers out"});return}e.reason!==void 0&&n.addIssue({code:ve.custom,message:"Available rates cannot carry a reason"});const{numerator:r,denominator:u}=e;u===null||r===null||(u===0&&n.addIssue({code:ve.custom,path:["denominator"],message:"Available rates require a positive denominator"}),r>u&&n.addIssue({code:ve.custom,path:["numerator"],message:"Numerator cannot exceed denominator"}))}),T2=qe("kind",[m({kind:z("frozen-simple"),definitionRevision:de()}).strict(),m({kind:z("legacy-simple"),definitionRevision:de()}).strict(),m({kind:z("frozen-advanced"),definitionRevision:d().int().positive()}).strict(),m({kind:z("unsupported-advanced-v1"),definitionRevision:d().int().positive()}).strict()]),rd=m({id:bt,label:o().trim().min(1),kind:l0,targetCount:d().int().nonnegative(),parentGroupIds:y(bt).optional(),marketKeys:y(bt).optional()}).strict(),yD=m({provider:bt,model:bt}).strict(),bD=m({providers:y(bt),models:y(yD),locations:y(_2)}).strict(),vD=m({queryCount:d().int().nonnegative(),answerCount:d().int().nonnegative(),mentionCoverage:ja,citationCoverage:ja,propertyReach:ja,outcomes:m({bothSignals:d().int().nonnegative(),mentionedOnly:d().int().nonnegative(),citedOnly:d().int().nonnegative(),neither:d().int().nonnegative(),notMeasured:d().int().nonnegative(),total:d().int().nonnegative()}).strict().superRefine((e,n)=>{e.bothSignals+e.mentionedOnly+e.citedOnly+e.neither+e.notMeasured!==e.total&&n.addIssue({code:ve.custom,message:"Outcome partition must sum to total"})})}).strict(),xD=m({runId:bt,createdAt:Ni,revision:d().int().positive().nullable(),provenance:T2,queryCount:d().int().nonnegative(),answerCount:d().int().nonnegative(),mentionCoverage:ja,citationCoverage:ja,continuity:m({state:A(["first","comparable","definition-changed","model-changed","legacy-unknown"]),comparedRunId:o().nullable()}).strict()}).strict(),wD=m({queryKey:bt,queryId:o().nullable(),query:o(),provider:bt,model:o().nullable(),location:o().nullable(),targetKeys:y(bt),marketKeys:y(bt).optional(),answerCount:d().int().nonnegative(),mentionCoverage:ja,citationCoverage:ja}).strict(),kD=m({answerId:bt,runId:bt,queryKey:bt,query:o(),provider:bt,model:o().nullable(),location:o().nullable(),targetKeys:y(bt),mentioned:N().nullable(),mentionUnavailableReason:z("identity-ambiguous").optional(),cited:N().nullable(),answerText:o().nullable(),createdAt:Ni,sources:y(o()),observedCompetitors:y(bt)}).strict(),SD=m({domain:bt,answerCount:d().int().nonnegative(),mentionCoverage:ja,citationCoverage:ja}).strict(),jD=m({name:bt,answerCount:d().int().nonnegative()}).strict(),AD=qe("state",[m({state:z("available")}).strict(),m({state:z("unavailable"),reason:z("frozen-competitor-identity-missing")}).strict()]),Kv=m({id:bt,label:o().trim().min(1),queryCount:d().int().nonnegative(),mentionCoverage:ja,citationCoverage:ja}).strict();function Hv(e){return m({items:y(e),nextCursor:o().nullable(),total:d().int().nonnegative()}).strict()}const R2=A(["current-unavailable","previous-unavailable","not-applicable"]),kY=R2.enum,kh=qe("state",[m({state:z("available"),previous:ja,delta:d().min(-1).max(1)}).strict(),m({state:z("unavailable"),reason:R2}).strict()]),Qv=m({id:bt,createdAt:Ni,completedAt:Ni.nullable()}).strict(),E2=A(["no-selected-run","no-previous-run","scoped-run","partial-run","definition-changed","model-changed","legacy-unknown"]),SY=E2.enum,CD=qe("state",[m({state:z("available"),previousRun:Qv,mentionCoverage:kh,citationCoverage:kh,propertyReach:kh}).strict(),m({state:z("unavailable"),reason:E2,previousRun:Qv.nullable()}).strict()]),z2=m({queryClass:hD,summary:vD,trend:y(xD),comparison:CD.optional(),queries:Hv(wD),evidence:Hv(kD),competitorAvailability:AD,competitors:y(SD),observedCompetitors:y(jD),breakdown:m({properties:y(Kv),groups:y(Kv)}).strict()}).strict(),ND=A(["measured","not-measured","partial"]),_D=m({state:ND,activeRevision:d().int().positive().nullable(),measuredRevision:d().int().positive().nullable(),awaitingSweep:N(),pendingAssignmentCount:d().int().nonnegative(),completedAt:Ni.nullable()}).strict(),D2=m({mode:C2,queryClass:N2,scope:rd,market:rd.optional(),provider:o().nullable(),model:o().nullable(),location:_2,time:m({from:Ni.nullable(),to:Ni.nullable()}).strict(),revision:d().int().positive().nullable(),run:m({id:o().nullable(),explicit:N()}).strict(),provenance:T2,measurement:_D,availability:qe("state",[m({state:z("available")}).strict(),m({state:z("unsupported"),reason:z("advanced-v1")}).strict()])}).strict();m({selection:D2,scopeOptions:y(rd),filterOptions:bD,populations:y(z2).min(1)}).strict().superRefine((e,n)=>{const i=e.selection.queryClass==="all"?["branded","non-brand","unknown"]:[e.selection.queryClass],r=e.populations.map(u=>u.queryClass);(r.length!==i.length||r.some((u,h)=>u!==i[h]))&&n.addIssue({code:ve.custom,path:["populations"],message:"Populations must exactly match the selected query class order"});for(const[u,h]of e.populations.entries()){const g=h.comparison;if(g?.state==="available")for(const b of["mentionCoverage","citationCoverage","propertyReach"]){const v=g[b];if(v.state!=="available")continue;const w=["populations",u,"comparison",b],k=h.summary[b].rate,j=v.previous.rate;k===null&&n.addIssue({code:ve.custom,path:w,message:"Available changes require a current rate"}),j===null&&n.addIssue({code:ve.custom,path:[...w,"previous","rate"],message:"Available changes require a previous rate"}),k!==null&&j!==null&&Math.abs(v.delta-(k-j))>Number.EPSILON&&n.addIssue({code:ve.custom,path:[...w,"delta"],message:"Delta must equal current minus previous"}),e.selection.run.id===null&&n.addIssue({code:ve.custom,path:w,message:"Available changes require a selected run"})}}});const O2=A(["retired-scope","retired-market"]),TD=O2.enum,RD=m({reason:O2,kind:l0.exclude(["project"]),key:bt}).strict().superRefine((e,n)=>{e.reason===TD["retired-market"]&&e.kind!=="market"&&n.addIssue({code:ve.custom,path:["kind"],message:"retired-market details must name a market"})});function jY(e){const n=RD.safeParse(e);return n.success?n.data:void 0}function ED(e,n){let i=e;for(const[r,u]of Object.entries(n))i=i.split(`{${r}}`).join(u);return i.trim()}const c0=o().regex(/^[a-f0-9]{64}$/),na=o().trim().min(1).max(256),qa=o().trim().min(1).max(4e3),u0=o().datetime(),Rd=o().regex(/^qtw_[a-f0-9]{64}$/),I2=o().regex(/^qtp_[a-f0-9]{64}$/),d0=A(["simple","advanced"]),P2=m({templateId:na,templateVersion:o().trim().min(1).max(256),template:qa,bindings:Ue(o().trim().min(1).max(128),o().trim().min(1).max(128)),output:qa}).strict(),zD=m({source:A(["manual","query-set","template","research","discovery"]),sourceId:na.nullable(),capturedAt:o().datetime(),template:P2.optional()}).strict().superRefine((e,n)=>{e.source==="template"&&e.template===void 0&&n.addIssue({code:ve.custom,path:["template"],message:"Template provenance is required for a template query."}),e.source!=="template"&&e.template!==void 0&&n.addIssue({code:ve.custom,path:["template"],message:"Only a template query may carry template provenance."})}),DD=qe("source",[m({source:z("manual"),text:qa}).strict(),m({source:z("template"),templateId:na,templateVersion:o().trim().min(1).max(256),template:qa}).strict(),m({source:z("research"),researchRunQueryId:na}).strict(),m({source:z("discovery"),discoveryProbeId:na}).strict()]),m0=m({targetKeys:y(he).optional(),groupKeys:y(he).optional(),marketKeys:y(he).optional()}).strict(),OD=m({providers:y(gt).min(1),models:Ue(gt,o().trim().min(1)),location:o().trim().min(1).nullable()}).strict(),ID=m({input:DD,audience:m0.optional(),contexts:y(OD).min(1).optional(),queryClass:_r.optional()}).strict(),PD=m({queryId:na.optional(),queryText:qa.optional(),audience:m0.optional()}).strict().superRefine((e,n)=>{e.queryId===void 0==(e.queryText===void 0)&&n.addIssue({code:ve.custom,message:"Provide exactly one of queryId or queryText."})}),qD=m({queryId:na,audience:m0.optional(),text:qa.optional(),queryClass:Ze([_r,de()]).optional()}).strict().superRefine((e,n)=>{e.text===void 0&&e.queryClass===void 0&&n.addIssue({code:ve.custom,message:"Provide query text or a classification change."})}),MD=m({additions:y(ID),removals:y(PD),edits:y(qD).optional()}).strict(),BD=MD.extend({expectedWorkspaceVersion:Rd}).strict();BD.extend({previewToken:I2,reviewedAt:u0}).strict();const LD=m({stableKey:he,label:o().trim().min(1)}).strict(),VD=m({stableKey:he,parentGroupKey:he.optional(),label:o().trim().min(1),targetKeys:y(he)}).strict(),$D=m({stableKey:he,groupKey:he.optional(),label:o().trim().min(1),usageEdges:y(e0)}).strict(),UD=m({targetKey:he,groupKeys:y(he),marketKeys:y(he),queryClass:_r.nullable(),classificationSource:A(["frozen","server","operator"]),contexts:y(Nd).min(1)}).strict(),q2=m({queryId:na,queryText:qa,normalizedText:qa,provenance:zD.nullable(),state:A(["tracked","awaiting-sweep"]),lastMeasuredAt:o().datetime().nullable(),assignments:y(UD)}).strict(),GD=m({researchRunId:na,researchRunQueryId:na,queryText:qa,createdAt:o().datetime()}).strict(),KD=m({discoverySessionId:na,discoveryProbeId:na,queryText:qa,createdAt:o().datetime()}).strict();m({mode:d0,workspaceVersion:Rd,active:m({revision:d().int().positive(),compiledChecksum:c0}).strict().nullable(),defaultContexts:y(Nd),targets:y(LD),groups:y(VD),markets:y($D),scopeOptions:y(rd).optional(),tracked:y(q2),savedSources:m({research:y(GD),discovery:y(KD)}).strict()}).strict();const zu=m({queryId:na,queryText:qa,assignmentCount:d().int().nonnegative()}).strict(),M2=m({added:y(zu),removed:y(zu),reused:y(zu),unchanged:y(zu),noOp:N()}).strict(),B2=m({existingNodes:d().int().nonnegative(),existingProviderCalls:d().int().nonnegative(),nextSweepNodes:d().int().nonnegative(),nextSweepProviderCalls:d().int().nonnegative(),addedNodes:d().int().nonnegative(),addedProviderCalls:d().int().nonnegative(),removedNodes:d().int().nonnegative(),removedProviderCalls:d().int().nonnegative()}).strict();m({mode:d0,workspaceVersion:Rd,previewToken:I2,reviewedAt:u0,active:m({revision:d().int().positive(),compiledChecksum:c0}).strict().nullable(),tracked:y(q2),diff:M2,workload:B2}).strict();m({committed:N(),mode:d0,workspaceVersion:Rd,reviewedAt:u0,active:m({revision:d().int().positive(),compiledChecksum:c0}).strict().nullable(),diff:M2,workload:B2}).strict();const Ed=A(["complete","partial","failed","unsupported"]);Ed.enum;A(["proposed","alias","shared","unmatched","excluded"]);A(["primary-match","exact-slug-match","excluded-slug","shared-path","unmatched-path","alias-without-primary","unsupported-slug"]);const HD=A(["invalid-url","unowned-host","duplicate-url","url-cap-reached"]),QD=m({kind:A(["exact","prefix","suffix","contains"]),value:o().trim().min(1)}).strict(),Fv=m({host:o().trim().min(1),pathTemplate:o().trim().min(1)}).strict(),p0=m({primary:Fv,aliases:y(Fv).optional(),excludedSlugSuffixes:y(o().trim().min(1)).optional(),excludedSlugPatterns:y(QD).optional()}).strict();m({sitemapUrl:o().url().refine(e=>{try{const n=new URL(e).protocol;return n==="http:"||n==="https:"}catch{return!1}},"Sitemap URL must use http or https"),rule:p0,maxUrls:d().int().positive().max(1e4).optional()}).strict();const Sh=m({url:o(),canonicalUrl:o().nullable(),classification:A(["shared","unmatched","excluded"]),reason:A(["excluded-slug","shared-path","unmatched-path","alias-without-primary","unsupported-slug"])}).strict().superRefine((e,n)=>{({shared:["shared-path"],unmatched:["unmatched-path","alias-without-primary","unsupported-slug"],excluded:["excluded-slug"]})[e.classification].includes(e.reason)||n.addIssue({code:"custom",message:"Discovery classification and reason do not match"})}),FD=m({classification:z("proposed"),reason:z("primary-match"),stableKey:ln,slug:o().trim().min(1),label:o().trim().min(1),primaryUrl:o().url(),aliasCoverageUrls:y(o().url())}).strict(),ZD=m({classification:z("alias"),reason:z("exact-slug-match"),slug:o().trim().min(1),url:o().url(),targetStableKey:ln}).strict(),YD=m({kind:HD,url:o(),canonicalUrl:o().nullable(),duplicateOf:o().optional()}).strict();m({proposed:y(FD),aliases:y(ZD),shared:y(Sh),unmatched:y(Sh),excluded:y(Sh),diagnostics:y(YD)}).strict().superRefine((e,n)=>{const i=[["shared",["shared"]],["unmatched",["unmatched"]],["excluded",["excluded"]]];for(const[r,u]of i)for(const h of e[r])u.includes(h.classification)||n.addIssue({code:"custom",path:[r],message:"Discovery item is in the wrong result bucket"})});const h0=A(["assigned","sibling","ownedUnmapped","external","ambiguous","invalid"]),L2=A(["baseline","target"]),V2=A(["incomplete","evidence-incomplete","identity-ambiguous","no-population","aliasless","no-competitors","no-project-aliases"]),ro=Ze([m({numerator:d().int().nonnegative(),denominator:d().int().positive(),rate:d().min(0).max(1),unattributed:d().int().positive().optional()}).strict(),m({numerator:de(),denominator:de(),rate:de(),reason:V2}).strict()]).superRefine((e,n)=>{e.numerator!==null&&e.numerator>e.denominator&&n.addIssue({code:"custom",path:["numerator"],message:"Rate numerator cannot exceed denominator"})}),XD=o().trim().min(1).overwrite(e=>e.toLocaleLowerCase("en")),WD=m({executionId:o().trim().min(1),queryText:o().trim().min(1),provider:XD,context:cn.nullable(),requestedModel:o().trim().min(1).optional()}).strict();m({schemaVersion:z(1),expectedSlots:y(WD)}).strict().superRefine((e,n)=>{const i=new Set;for(const[r,u]of e.expectedSlots.entries()){const h=[u.executionId,u.provider].join("\0");i.has(h)&&n.addIssue({code:"custom",path:["expectedSlots",r],message:"Duplicate expected provider slot"}),i.add(h)}});const zd=m({executed:d().int().nonnegative(),expected:d().int().nonnegative(),complete:N(),sourceComplete:N(),sourceCompleteObservations:d().int().nonnegative(),answerComplete:N()}).strict(),Zv=Ze([m({domain:o().trim().min(1),own:N(),presentIn:d().int().nonnegative(),of:d().int().positive()}).strict(),m({domain:o().trim().min(1),own:N(),presentIn:de(),of:de(),reason:V2}).strict()]),JD=m({domains:y(Zv),providers:y(m({provider:gt,domains:y(Zv)}).strict())}).strict(),e9=m({provider:gt,completeness:zd,answerCoverage:ro}).strict(),t9=m({id:o().trim().min(1),label:o().trim().min(1),targetIds:y(o().trim().min(1)),completeness:zd,answerCoverage:ro,targetCoverage:ro,sov:JD,providers:y(e9)}).strict(),n9=m({provider:gt,completeness:zd,citationCoverage:ro,mentionCoverage:ro}).strict(),a9=m({id:o().trim().min(1),label:o().trim().min(1),completeness:zd,citationCoverage:ro,mentionCoverage:ro,providers:y(n9)}).strict(),$2=m({observationId:o().trim().min(1),expectedSlotId:o().trim().min(1),executionId:o().trim().min(1),usageEdgeId:o().trim().min(1),usageEdgeType:L2,provider:gt,queryText:o().trim().min(1),location:o().nullable(),sourceUrl:o(),bridged:N(),historical:N(),evidenceComplete:N(),classification:h0,normalizedUrl:o().nullable(),matchedTargetIds:y(o().trim().min(1)),matchedUrlIds:y(o().trim().min(1))}).strict(),i9=m({sourceUrl:o(),normalizedUrl:o().nullable(),classification:h0,matchedTargetIds:y(o().trim().min(1)),matchedUrlIds:y(o().trim().min(1))}).strict(),s9=m({observationId:o().trim().min(1),expectedSlotId:o().trim().min(1),executionId:o().trim().min(1),usageEdgeId:o().trim().min(1),usageEdgeType:L2,provider:gt,queryText:o().trim().min(1),location:o().nullable(),queryClass:Ze([A(["branded","non-brand"]),de()]),mentioned:N().nullable(),cited:N().nullable(),sources:y(i9),sourceCount:d().int().nonnegative(),sourcesTruncated:N(),bridged:N(),historical:N(),evidenceComplete:N()}).strict(),o9=m({bridgedObservationIds:y(o()),historicalObservationIds:y(o()),evidenceIncompleteObservationIds:y(o()),ambiguousObservationIds:y(o()),unmatchedObservationIds:y(o())}).strict(),r9=m({id:o().trim().min(1),status:A(["completed","partial"]),createdAt:o().datetime(),startedAt:o().datetime().nullable(),finishedAt:o().datetime().nullable()}).strict();m({revision:d().int().positive(),run:r9.nullable(),groups:y(t9),targets:y(a9),evidence:y($2),diagnostics:o9}).strict();m({property:m({targetKey:he,label:o().min(1)}).strict(),queryClass:La,measurement:m({state:a0,displayedRunId:o().min(1).optional(),completedAt:o().datetime().optional()}).strict(),evidence:vr($2).optional(),answers:vr(s9).optional()}).strict().refine(e=>e.evidence===void 0!=(e.answers===void 0),{message:"Exactly one of evidence or answers is present, naming the shape that was served."});const f0=A(["used","not-used","unknown","not-applicable"]);f0.enum;const g0=A(["native-auto-v1","search-required-v1"]);g0.enum;const Ma=o().trim().min(1),po=o().trim().min(1),l9=o().trim().min(1),Ke=d().int().nonnegative(),uc=m({state:a0,displayedRunId:Ma.nullable(),planRevision:d().int().positive(),completedAt:o().datetime().nullable()}).strict(),ho=m({targetKey:he,label:po}).strict(),aa={runId:Ma.optional(),provider:gt.optional(),location:l9.optional()},xr=o().trim().min(1),jh=5,c9=10,u9="tied Properties are ordered by name, not ranked";m({runId:aa.runId,groupKey:he.optional(),queryClass:La.default("non-brand"),provider:aa.provider,location:aa.location,limit:d().int().positive().max(50).optional(),includeNestedMarkets:N().optional()}).strict();const Yv=m({groupKey:he,label:po}).strict(),U2={metro:Yv.nullable(),otherMetros:y(Yv).min(1).optional(),submarkets:y(po),queries:Ke},d9=m({name:xr,answers:Ke}).strict(),m9=m({name:xr,occurrences:Ke}).strict(),G2=m({domain:o().trim().min(1),answers:Ke}).strict(),p9=ho.extend({...U2,mentionCoverage:Xt,citationCoverage:Xt,flags:Ke,namedInsteadInAnswerText:y(d9).max(jh),namedInsteadInAnswerTextTotal:Ke,citedDomains:y(G2).max(jh),citedDomainsTotal:Ke,recommendedInstead:y(m9).max(jh).meta({deprecated:!0,description:"Deprecated: read namedInsteadInAnswerText, which carries the same names in the same order. occurrences counts answers, exactly as answers does there."}),recommendedInsteadTotal:Ke.meta({deprecated:!0,description:"Deprecated: read namedInsteadInAnswerTextTotal, which it always equals."}),recommendedInsteadTruncated:N().meta({deprecated:!0,description:"Deprecated: true when namedInsteadInAnswerTextTotal exceeds the names returned in namedInsteadInAnswerText."})}).strict().superRefine((e,n)=>{e.namedInsteadInAnswerText.length>e.namedInsteadInAnswerTextTotal&&n.addIssue({code:ve.custom,path:["namedInsteadInAnswerTextTotal"],message:"Total cannot be smaller than the returned names"}),e.citedDomains.length>e.citedDomainsTotal&&n.addIssue({code:ve.custom,path:["citedDomainsTotal"],message:"Total cannot be smaller than the returned domains"}),e.recommendedInsteadTotal!==e.namedInsteadInAnswerTextTotal&&n.addIssue({code:ve.custom,path:["recommendedInsteadTotal"],message:"The deprecated total must equal namedInsteadInAnswerTextTotal"}),e.recommendedInstead.length>e.recommendedInsteadTotal&&n.addIssue({code:ve.custom,path:["recommendedInsteadTotal"],message:"Total cannot be smaller than the returned replacements"}),e.recommendedInsteadTruncated!==e.recommendedInstead.length<e.recommendedInsteadTotal&&n.addIssue({code:ve.custom,path:["recommendedInsteadTruncated"],message:"Truncation must agree with the replacement total"})}),h9=m({count:d().int().min(2),mentionRate:d(),citationRate:d(),note:z(u9)}).strict(),f9=m({properties:Ke,answers:Ke,domains:y(G2).max(c9),domainTotal:Ke}).strict().superRefine((e,n)=>{e.domains.length>e.domainTotal&&n.addIssue({code:ve.custom,path:["domainTotal"],message:"Total cannot be smaller than the returned domains"}),e.domains.some(i=>i.answers>e.answers)&&n.addIssue({code:ve.custom,path:["domains"],message:"A domain cannot be cited by more answers than the basis holds"})}),g9=m({groupKey:he,label:po,parentGroupKey:he.nullable(),childMarketCount:Ke,propertyCount:Ke,propertiesMentioned:Xt,mentionCoverage:Xt,citationCoverage:Xt}).strict(),Xv=ho.extend({...U2,mentionCoverage:Xt.options[0],citationCoverage:Xt}).strict(),y9=m({eligiblePropertyCount:Ke,strongest:y(Xv).max(50),weakest:y(Xv).max(50),excluded:y(ho.extend({reason:Td}).strict()),truncated:N()}).strict();m({portfolio:m({groupKey:he.nullable(),label:po.nullable(),measurementScope:Ze([A(["full","spot_check"]),de()])}).strict(),measurement:uc,queryClass:La,engines:y(gt),metrics:m({propertiesMentioned:Xt,mentionCoverage:Xt,citationCoverage:Xt}).strict(),weakestProperties:y(p9),tiedAtWeakest:h9.nullable(),weakestAnswerSources:f9.nullable(),mentionRanking:y9,markets:y(g9),totalMarkets:Ke,marketsTruncated:N(),totalProperties:Ke,truncated:N()}).strict().superRefine((e,n)=>{e.marketsTruncated!==e.markets.length<e.totalMarkets&&n.addIssue({code:ve.custom,path:["marketsTruncated"],message:"Market truncation must agree with the market total"})});m({targetKey:he,runId:aa.runId,provider:aa.provider,location:aa.location,queryClass:La.optional(),offset:d().int().nonnegative().optional(),limit:d().int().positive().max(100).optional()}).strict();A(["answered","missing"]);const rf={queryId:Ma,text:po,class:Jf,provider:gt,requestedModel:o().nullable(),servedModel:o().nullable(),location:o().nullable()},b9=qe("status",[m({resultId:Ma,...rf,status:z("answered"),mentioned:N().nullable(),cited:N().nullable(),recommendedInstead:y(xr),answerExcerpt:o().nullable()}).strict(),m({resultId:de(),...rf,status:z("missing"),mentioned:de(),cited:de(),recommendedInstead:y(xr).length(0),answerExcerpt:de()}).strict()]);m({property:ho,measurement:uc,queryClass:La,questions:y(b9),total:Ke,truncated:N()}).strict();m({targetKey:he,resultId:Ma}).strict();const v9=m({url:Ma,classification:h0,matchedTargetKeys:y(he),assigned:N(),historical:N(),evidenceComplete:N()}).strict().superRefine((e,n)=>{e.assigned!==(e.classification==="assigned")&&n.addIssue({code:ve.custom,path:["assigned"],message:"Assigned must agree with the source attribution classification"})});m({property:ho,measurement:uc,question:m({resultId:Ma,...rf,status:z("answered")}).strict(),mentioned:N().nullable(),cited:N().nullable(),recommendedInstead:y(xr),answer:o().nullable(),sources:y(v9),captureStatus:Ze([Ed,de()]),retrievalStatus:Ze([f0,de()]),retrievalContract:Ze([g0,de()])}).strict();m({targetKey:he,runId:aa.runId,provider:aa.provider,location:aa.location,queryClass:La.optional(),limit:d().int().positive().max(50).optional()}).strict();const x9=qe("state",[m({state:z("available"),answeredResults:Ke,targetMissResults:Ke,recommendationOccurrences:Ke}).strict(),m({state:z("unavailable"),reason:Td}).strict()]),w9=m({name:xr,occurrences:Ke,providers:y(gt).max(5),providerTotal:Ke,providersTruncated:N(),questions:y(po).max(5),questionTotal:Ke,questionsTruncated:N()}).strict().superRefine((e,n)=>{(e.providers.length>e.providerTotal||e.questions.length>e.questionTotal)&&n.addIssue({code:ve.custom,message:"Evidence totals cannot be smaller than returned evidence"}),e.providersTruncated!==e.providers.length<e.providerTotal&&n.addIssue({code:ve.custom,path:["providersTruncated"],message:"Provider truncation must agree with its total"}),e.questionsTruncated!==e.questions.length<e.questionTotal&&n.addIssue({code:ve.custom,path:["questionsTruncated"],message:"Question truncation must agree with its total"})});m({property:ho,measurement:uc,queryClass:La,basis:x9,competitors:y(w9),total:Ke,truncated:N()}).strict();m({runId:aa.runId,scope:n0.default("all"),groupKey:he.optional(),targetKey:he.optional(),queryClass:La.default("all"),provider:aa.provider,location:aa.location,limit:d().int().positive().max(50).optional()}).strict().superRefine((e,n)=>{e.scope==="all"&&(e.groupKey!==void 0||e.targetKey!==void 0)&&n.addIssue({code:ve.custom,path:["scope"],message:"All scope cannot name a group or Property"}),e.scope==="group"&&(e.groupKey===void 0||e.targetKey!==void 0)&&n.addIssue({code:ve.custom,path:["groupKey"],message:"Group scope requires groupKey only"}),e.scope==="property"&&(e.targetKey===void 0||e.groupKey!==void 0)&&n.addIssue({code:ve.custom,path:["targetKey"],message:"Property scope requires targetKey only"})});const K2=A(["no_previous_run","execution_identity_changed","incomplete","not_comparable"]),H2=uc.extend({executionIdentity:Ma.nullable(),measurementScope:Ze([A(["full","spot_check"]),de()])}).strict(),Ml=qe("state",[m({state:z("available"),previous:Xt,current:Xt,delta:d()}).strict().superRefine((e,n)=>{if(e.previous.state!=="available"||e.current.state!=="available"){n.addIssue({code:ve.custom,message:"Available deltas require two available metrics"});return}Math.abs(e.delta-(e.current.value-e.previous.value))>Number.EPSILON&&n.addIssue({code:ve.custom,path:["delta"],message:"Delta must equal current minus previous"})}),m({state:z("unavailable"),reason:Td}).strict()]);m({current:H2,comparison:qe("state",[m({state:z("available"),previous:m({displayedRunId:Ma,planRevision:d().int().positive(),completedAt:o().datetime().nullable(),executionIdentity:Ma,measurementScope:A(["full","spot_check"])}).strict(),metrics:m({propertiesMentioned:Ml,mentionCoverage:Ml,citationCoverage:Ml}).strict(),changedProperties:y(ho.extend({mentionCoverage:Ml,citationCoverage:Ml,flags:Ke}).strict()),totalProperties:Ke,truncated:N()}).strict(),m({state:z("unavailable"),reason:K2}).strict()])}).strict().superRefine((e,n)=>{if(e.comparison.state==="available"){if(e.current.displayedRunId===null||e.current.executionIdentity===null){n.addIssue({code:ve.custom,path:["current"],message:"A comparison requires an identified current run"});return}e.comparison.previous.planRevision!==e.current.planRevision&&n.addIssue({code:ve.custom,path:["comparison","previous","planRevision"],message:"Comparisons cannot cross plan revisions"}),e.comparison.previous.executionIdentity!==e.current.executionIdentity&&n.addIssue({code:ve.custom,path:["comparison","previous","executionIdentity"],message:"Comparisons cannot cross execution identities"})}});m({runId:aa.runId}).strict();const k9=A(["no_completed_run","incomplete","evidence_incomplete","no_population","not_applicable"]),Dd=m({state:z("unavailable"),reason:k9}).strict(),S9=m({state:z("available"),expected:Ke,executed:Ke,answered:Ke,missing:Ke}).strict(),j9=qe("state",[S9,Dd]).superRefine((e,n)=>{e.state==="available"&&(e.executed+e.missing!==e.expected&&n.addIssue({code:ve.custom,message:"Expected must equal executed plus missing"}),e.answered>e.executed&&n.addIssue({code:ve.custom,path:["answered"],message:"Answered cannot exceed executed"}))}),A9=m({state:z("available"),complete:Ke,partial:Ke,failed:Ke,unsupported:Ke,notRecorded:Ke}).strict(),C9=qe("state",[A9,Dd]),N9=m({state:z("available"),used:Ke,notUsed:Ke,unknown:Ke,notApplicable:Ke,notRecorded:Ke}).strict(),_9=qe("state",[N9,Dd]),T9=m({state:z("available"),expectedQuestions:Ke,answeredQuestions:Ke,missingQuestions:Ke}).strict(),R9=qe("state",[T9,Dd]).superRefine((e,n)=>{e.state==="available"&&e.answeredQuestions+e.missingQuestions!==e.expectedQuestions&&n.addIssue({code:ve.custom,message:"Expected questions must equal answered plus missing"})});m({run:H2,completeness:j9,capture:C9,retrieval:_9,population:R9,comparison:qe("state",[m({state:z("available"),previousDisplayedRunId:Ma}).strict(),m({state:z("unavailable"),reason:K2}).strict()])}).strict().superRefine((e,n)=>{if(e.completeness.state!=="available")return;const i=e.completeness.executed;e.capture.state==="available"&&e.capture.complete+e.capture.partial+e.capture.failed+e.capture.unsupported+e.capture.notRecorded!==i&&n.addIssue({code:ve.custom,path:["capture"],message:"Capture counts must total executed snapshots"}),e.retrieval.state==="available"&&e.retrieval.used+e.retrieval.notUsed+e.retrieval.unknown+e.retrieval.notApplicable+e.retrieval.notRecorded!==i&&n.addIssue({code:ve.custom,path:["retrieval"],message:"Retrieval counts must total executed snapshots"})});const wr=o().regex(/^[a-f0-9]{64}$/),Ba=o().trim().min(1).max(256),ei=d().int().positive(),Wv=m({kind:A(["user","api-key","system"]),id:o().trim().min(1),label:o().trim().min(1)}).strict(),E9=A(["proposed","included","excluded"]),z9=A(["manual","sitemap"]),y0=m({stableKey:he,label:o().trim().min(1),status:E9,aliases:y(o().trim().min(1)),identityAliases:y(o().trim().min(1)).optional(),urlMatchers:y(o().trim().min(1)),source:z9,discoveredUrl:o().trim().min(1).optional(),discoveryIdentity:o().trim().min(1).optional()}).strict(),Od=m({providers:y(gt).optional(),models:Ue(gt,o().trim().min(1)).optional(),locations:y(o().trim().min(1)).optional()}).strict(),D9=A(["branded","non-brand","unclassified"]),O9=A(["rule","operator"]),Q2=m({targetKey:he,queryId:Ba,contextOverride:Od.optional(),executionContexts:y(Nd.extend({executionNodeKey:o().min(1).optional()})).min(1).optional(),queryProvenance:i2.optional(),queryClass:D9,classificationSource:O9}).strict().superRefine((e,n)=>{e.contextOverride!==void 0&&e.executionContexts!==void 0&&n.addIssue({code:"custom",path:["executionContexts"],message:"Use either frozen execution contexts or a context override, not both."})}),Id=a2,F2=m({stableKey:he,label:o().trim().min(1),parentGroupKey:he.optional(),targetKeys:y(he),competitors:y(Id)}).strict(),I9=m({sitemapUrl:o().url(),rule:p0,exclusions:y(o().trim().min(1)),inputChecksum:wr,reviewedAt:o().datetime().optional()}).strict(),P9=m({providers:y(gt),models:Ue(gt,o().trim().min(1)).optional(),locations:y(o().trim().min(1))}).strict(),Z2=s2,q9=m({defaultContext:P9,targets:y(y0),assignments:y(Q2),groups:y(F2),reportingScopes:y(Z2).optional(),discovery:I9.optional()}).strict(),M9=m({id:o().trim().min(1),projectId:o().trim().min(1),schemaVersion:z(2),baseActiveVersionId:o().trim().min(1).nullable(),baseActiveRevision:ei.nullable(),authoring:q9,createdBy:Wv,updatedBy:Wv,createdAt:o().datetime(),updatedAt:o().datetime()}).strict(),b0=m({targets:d().int().nonnegative(),includedTargets:d().int().nonnegative(),assignments:d().int().nonnegative(),unclassifiedAssignments:d().int().nonnegative(),groups:d().int().nonnegative(),competitors:d().int().nonnegative()}).strict(),B9=m({code:o().trim().min(1),message:o().trim().min(1),path:y(Ze([o(),d().int()]))}).strict(),Y2=m({etag:o().trim().min(1),changed:N(),warnings:y(B9),counts:b0}).strict();m({draft:M9.nullable(),etag:o().trim().min(1).nullable()}).strict();vr(y0);vr(Q2);vr(F2);m({search:o().optional(),cursor:o().trim().min(1).optional(),limit:d().int().positive().max(t0).optional()}).strict();m({expectedActiveRevision:ei.nullable()}).strict();m({sitemapUrl:o().url(),rule:p0,exclusions:y(o().trim().min(1)).optional()}).strict();const L9=m({discoveryIdentity:o().trim().min(1),action:A(["create","rebind","ignore"]),targetKey:he.optional(),label:o().trim().min(1).optional()}).strict();m({selections:y(L9),selectedTargetKeys:y(he).optional()}).strict().superRefine((e,n)=>{e.selections.length===0&&e.selectedTargetKeys===void 0&&n.addIssue({code:"custom",message:"A proposal or reviewed Property selection is required."}),e.selectedTargetKeys&&new Set(e.selectedTargetKeys).size!==e.selectedTargetKeys.length&&n.addIssue({code:"custom",path:["selectedTargetKeys"],message:"Property keys must be unique."})});m({target:y0}).strict();m({targetKey:he,label:o().trim().min(1)}).strict();m({targetKey:he,mergedKeys:y(he).min(1)}).strict();m({targetKey:he,cleanup:z("assignments-and-group-memberships").optional()}).strict();m({targetKey:he,discoveryIdentity:o().trim().min(1),discoveredUrl:o().url()}).strict();const X2={targetKeys:y(he).optional(),groupKeys:y(he).optional()};function W2(e,n){(e.targetKeys?.length??0)===0&&(e.groupKeys?.length??0)===0&&n.addIssue({code:"custom",message:"At least one Target or group selector is required."})}m(X2).strict().superRefine(W2);const V9=m({...X2,queryIds:y(Ba).min(1),contextOverride:Od.optional()}).strict().superRefine(W2);Ze([m({targetKey:he,queryIds:y(Ba).min(1),contextOverride:Od.optional()}).strict(),V9]);const $9=m({groupKey:he,label:o().trim().min(1),memberCount:d().int().positive()}).strict();m({draftEtag:o().trim().min(1),groups:y($9),resolvedTargetKeys:y(he),overlapCount:d().int().nonnegative(),assignments:m({requested:d().int().nonnegative(),added:d().int().nonnegative(),alreadyPresent:d().int().nonnegative()}).strict(),execution:m({addedNodes:d().int().nonnegative(),addedProviderCalls:d().int().nonnegative(),fullRunNodes:d().int().nonnegative(),fullRunProviderCalls:d().int().nonnegative()}).strict()}).strict();m({pairs:y(m({targetKey:he,queryId:Ba}).strict()).min(1),contextOverride:Od.optional()}).strict();Ze([m({targetKey:he,queryId:Ba}).strict(),m({targetKeys:y(he).min(1),queryId:Ba}).strict()]);m({targetKey:he}).strict();m({queryClass:Jf,assignments:y(m({targetKey:he,queryId:Ba}).strict()).min(1)}).strict();m({group:m({stableKey:he,label:o().trim().min(1),parentGroupKey:he.nullable().optional(),targetKeys:y(he),competitors:y(Id).optional()}).strict()}).strict();m({market:Z2}).strict();m({groupKey:he}).strict();m({groupKey:he,competitor:Id}).strict();m({expectedActiveRevision:ei,groupKey:he,domain:o().trim().min(1).refine(e=>rc(e)!==null,"A competitor domain must be a valid hostname"),label:o().trim().min(1).optional(),aliases:y(o().trim().min(1)).optional()}).strict();Y2.extend({groupKey:he,competitor:Id,draftCreated:N(),published:m({revision:ei,competitorsChanged:z(!1)}).strict()}).strict();m({groupKey:he,competitorKey:he}).strict();const ld=m({ruleId:o().trim().min(1),severity:A(["fail","warn"]),message:o().trim().min(1),path:y(Ze([o(),d().int()]))}).strict();qe("ok",[m({ok:z(!0),compiledChecksum:wr,checks:y(ld),counts:b0,plan:_d}).strict(),m({ok:z(!1),compiledChecksum:de(),checks:y(ld).min(1)}).strict()]);const Jv=m({added:y(o().trim().min(1)),removed:y(o().trim().min(1)),changed:y(o().trim().min(1)),unchanged:y(o().trim().min(1))}).strict(),U9=m({activeRevision:ei.nullable(),targets:Jv,groups:Jv,assignments:m({added:d().int().nonnegative(),removed:d().int().nonnegative(),reclassified:d().int().nonnegative()}).strict(),execution:m({addedNodeKeys:y(o().trim().min(1)),removedNodeKeys:y(o().trim().min(1))}).strict()}).strict();qe("ok",[m({ok:z(!0),compiledChecksum:wr,checks:y(ld),counts:b0,plan:_d,diff:U9}).strict(),m({ok:z(!1),compiledChecksum:de(),checks:y(ld).min(1),diff:de()}).strict()]);m({expectedActiveRevision:ei.nullable(),expectedCompiledChecksum:wr}).strict();m({published:N(),active:m({revision:ei,checksum:wr,compiledChecksum:wr,createdAt:o().datetime(),plan:_d}).strict()}).strict();m({discarded:N()}).strict();m({expectedActiveRevision:ei}).strict();m({deactivated:N(),previousRevision:ei.nullable()}).strict();const G9=A(["republish_required","setup_in_progress","awaiting_first_run","operational","simple"]),K9=A(["republish_setup","continue_setup","run_measurement","view_measurement","start_setup"]),H9=A(["simple","draft-only","active-v1","active-v2"]);m({state:G9,nextAction:K9,mode:H9,answerVisibilityProviderReady:N(),activeRevision:ei.nullable(),activeSchemaVersion:Ze([z(1),z(2)]).nullable(),draft:m({etag:o().trim().min(1),updatedAt:o().datetime()}).strict().nullable()}).strict();const J2=m({id:o().trim().min(1),projectId:o().trim().min(1),name:o().trim().min(1),description:o().nullable(),itemCount:d().int().nonnegative(),createdAt:o().datetime(),updatedAt:o().datetime()}).strict(),Q9=m({queryId:Ba,queryText:o().min(1),position:d().int().nonnegative()}).strict();J2.extend({items:y(Q9)}).strict();m({querySets:y(J2)}).strict();m({name:o().trim().min(1),description:o().nullable().optional(),queryIds:y(Ba)}).strict();const F9=m({id:o().trim().min(1),projectId:o().trim().min(1),name:o().trim().min(1),description:o().nullable(),pattern:o().trim().min(1),variables:y(o().trim().min(1)),createdAt:o().datetime(),updatedAt:o().datetime()}).strict();m({templates:y(F9)}).strict();m({name:o().trim().min(1),description:o().nullable().optional(),pattern:o().trim().min(1),variables:y(o().trim().min(1))}).strict();m({bindings:y(Ue(o().trim().min(1),o().trim().min(1))).min(1),querySetId:o().trim().min(1).optional()}).strict();m({created:y(m({queryId:Ba,queryText:o().min(1)}).strict()),existing:y(m({queryId:Ba,queryText:o().min(1)}).strict())}).strict();const cd=o().regex(/^[a-f0-9]{64}$/),Pd=d().int().positive();m({stableKey:he,kind:A(["target","group"]),retiredAt:o().datetime().nullable()}).strict();m({csv:o()}).strict();A(["matched","ambiguous","unmatched","invalid","duplicate","proposed","excluded"]);const Z9=A(["column-count","missing-property","missing-group","invalid-url","property-not-found","property-label-ambiguous","url-not-exact-match","target-proposed","target-excluded","group-label-ambiguous","group-key-conflict"]),lf=m({dataRow:Pd,property:o(),group:o(),url:o().nullable(),normalizedProperty:o(),normalizedGroupLabel:o()}).strict(),Bl=lf.extend({reason:Z9}),Y9=m({source:A(["draft-target","draft-group","persisted-segment","retired-segment","proposed-group"]),stableKey:he,kind:A(["target","group"]).optional(),retiredAt:o().datetime().nullable().optional(),normalizedGroupLabel:o().optional()}).strict(),X9=m({proposedGroupKey:he,evidence:y(Y9).min(1)}).strict(),W9=qe("status",[lf.extend({status:z("matched"),targetKey:he,groupKey:he}).strict(),Bl.extend({status:z("ambiguous"),candidateTargetKeys:y(he).min(1).optional(),candidateGroupKeys:y(he).min(1).optional()}).strict(),Bl.extend({status:z("unmatched")}).strict(),Bl.extend({status:z("invalid"),groupKeyConflict:X9.optional()}).strict(),lf.extend({status:z("duplicate"),duplicateOfRow:Pd,targetKey:he,groupKey:he}).strict(),Bl.extend({status:z("proposed"),targetKey:he}).strict(),Bl.extend({status:z("excluded"),targetKey:he}).strict()]),J9=m({normalizedGroupLabel:o(),groupKey:he,label:o().trim().min(1),action:A(["create","extend"]),matchedRows:y(Pd),targetKeys:y(he),addedTargetKeys:y(he),unchangedTargetKeys:y(he)}).strict(),eO=m({dataRows:d().int().nonnegative(),matchedRows:d().int().nonnegative(),ambiguousRows:d().int().nonnegative(),unmatchedRows:d().int().nonnegative(),invalidRows:d().int().nonnegative(),duplicateRows:d().int().nonnegative(),proposedRows:d().int().nonnegative(),excludedRows:d().int().nonnegative(),needsAttention:d().int().nonnegative(),groupsReady:d().int().nonnegative(),groupsToCreate:d().int().nonnegative(),groupsToExtend:d().int().nonnegative(),membershipsReady:d().int().nonnegative(),addedMemberships:d().int().nonnegative(),unchangedMemberships:d().int().nonnegative()}).strict();m({draftEtag:o().trim().min(1),sourceChecksum:cd,previewChecksum:cd,rows:y(W9),groupChanges:y(J9),counts:eO}).strict();m({csv:o(),sourceChecksum:cd,previewChecksum:cd,acceptedRows:y(Pd).min(1)}).strict().superRefine((e,n)=>{new Set(e.acceptedRows).size!==e.acceptedRows.length&&n.addIssue({code:"custom",path:["acceptedRows"],message:"Accepted CSV data rows must be unique."})});Y2.extend({appliedRows:d().int().nonnegative(),addedMemberships:d().int().nonnegative(),unchangedMemberships:d().int().nonnegative()}).strict();function tO(e){return!Number.isFinite(e)||e===0?"0%":`${(e*100).toFixed(1)}%`}function nO(e){return Number.isFinite(e)?`${Math.round(Number((e*100).toFixed(6)))}%`:"0%"}function In(e){return Number.isFinite(e)?Math.abs(e)>=1e6?`${(e/1e6).toFixed(1)}M`:Math.abs(e)>=1e3?`${(e/1e3).toFixed(1)}K`:e.toLocaleString("en-US"):"—"}function oo(e){if(!e)return"—";try{const n=/^(\d{4})-(\d{2})-(\d{2})$/.exec(e),i={month:"short",day:"numeric",year:"numeric"},r=n&&n[1]&&n[2]&&n[3]?new Date(Date.UTC(Number(n[1]),Number(n[2])-1,Number(n[3]))):new Date(e);return Number.isNaN(r.getTime())?e:r.toLocaleDateString("en-US",n?{...i,timeZone:"UTC"}:i)}catch{return e}}function AY(e,n,i=800){const r=[];if(!/^\d{4}-\d{2}-\d{2}$/.test(e)||!/^\d{4}-\d{2}-\d{2}$/.test(n))return r;for(let u=e;u<=n&&(r.push(u),!(r.length>=i));u=aO(u,1));return r}function aO(e,n){if(!Number.isFinite(n))return e;const i=/^(\d{4})-(\d{2})-(\d{2})$/.exec(e);if(!i?.[1]||!i[2]||!i[3])return e;const r=new Date(Date.UTC(Number(i[1]),Number(i[2])-1,Number(i[3])+Math.trunc(n)));if(Number.isNaN(r.getTime()))return e;const u=r.getUTCFullYear(),h=String(r.getUTCMonth()+1).padStart(2,"0"),g=String(r.getUTCDate()).padStart(2,"0");return`${u}-${h}-${g}`}function iO(e,n){return!e&&!n?"":e&&n?`${oo(e)} → ${oo(n)}`:oo(e||n)}function sO(e,n){if(!Number.isFinite(e)||!Number.isFinite(n)||n<=0)return null;const i=(e-n)/n;return Number.isFinite(i)?i:null}function CY(e,n){const i=sO(e,n);return i===null?null:Math.round(i*100)}function NY(e){return e===null||e===0?"neutral":e>0?"positive":"negative"}function _Y(e,n,i="vs prior 7 days"){return e.deltaPct===null?e.prior===0?"First baseline week":"":e.deltaPct>0?`Up ${e.deltaPct}% ${i} (${In(e.prior)} ${n})`:e.deltaPct<0?`Down ${Math.abs(e.deltaPct)}% ${i} (${In(e.prior)} ${n})`:`Flat ${i} (${In(e.prior)} ${n})`}const eS=30;function ex(e){return Math.round(e*10)/10}function oO(e){return e.prior>=eS&&e.deltaPct!==null?`${e.deltaPct>0?"+":""}${e.deltaPct}% vs prior`:`${e.deltaAbs>0?"+":""}${ex(e.deltaAbs)} vs ${ex(e.prior)}`}function TY(e,n,i){return e.prior>=eS&&e.deltaPct!==null?`${e.deltaPct>0?"+":""}${e.deltaPct}% ${i}`:`${e.deltaAbs>0?"+":""}${In(Math.round(e.deltaAbs))} ${n} ${i}`}function RY(e){if(e===0)return{direction:"none",magnitude:"0"};const n=Math.abs(e)*100;return{direction:e>0?"up":"down",magnitude:n<.05?"<0.1":n.toFixed(1)}}function EY(e,n="UTC"){const i=new Date(e);if(!Number.isFinite(i.getTime()))return null;const r={weekday:"short",year:"numeric",month:"short",day:"numeric",hour:"numeric",minute:"2-digit",timeZoneName:"short"};try{return i.toLocaleString("en-US",{...r,timeZone:n})}catch{return i.toLocaleString("en-US",{...r,timeZone:"UTC"})}}const tS=A(["introduced","repointed","retired"]),rO=tS.enum;m({modelId:o().trim().min(1),date:o().regex(/^\d{4}-\d{2}-\d{2}$/,"date must be YYYY-MM-DD"),kind:tS,confirmed:N(),sourceUrl:o().url(),note:o().min(1)});const lO=[{modelId:"chatgpt-4o-latest",date:"2024-08-15",kind:"introduced",confirmed:!0,sourceUrl:"https://developers.openai.com/api/docs/changelog",note:'Verbatim: "Released dynamic model for chatgpt-4o-latest—this model will point to the latest GPT-4o model used by ChatGPT." First moving id in the lineage.'},{modelId:"chatgpt-4o-latest",date:"2026-02-17",kind:"retired",confirmed:!0,sourceUrl:"https://developers.openai.com/api/docs/deprecations.md",note:'Shutdown 2026-02-17, replacement gpt-5.1-chat-latest. Announced under the heading "2025-11-18: chatgpt-4o-latest snapshot".'},{modelId:"gpt-5.1-chat-latest",date:"2025-11-13",kind:"introduced",confirmed:!0,sourceUrl:"https://developers.openai.com/api/docs/changelog",note:"Introduced inside the GPT-5.1 launch entry, not as a standalone entry."},{modelId:"gpt-5.2-chat-latest",date:"2025-12-11",kind:"introduced",confirmed:!0,sourceUrl:"https://developers.openai.com/api/docs/changelog",note:"Introduced inside the GPT-5.2 launch entry."},{modelId:"gpt-5.2-chat-latest",date:"2026-02-10",kind:"repointed",confirmed:!0,sourceUrl:"https://developers.openai.com/api/docs/changelog",note:'Verbatim: "Updated the gpt-5.2-chat-latest slug to point to the latest model currently used in ChatGPT." Target model NOT named.'},{modelId:"gpt-5.3-chat-latest",date:"2026-03-03",kind:"introduced",confirmed:!0,sourceUrl:"https://developers.openai.com/api/docs/changelog",note:'Verbatim: "Released gpt-5.3-chat-latest to the Chat Completions and Responses API. This model points to the GPT-5.3 Instant snapshot currently used in ChatGPT."'},{modelId:"gpt-5.3-chat-latest",date:"2026-03-16",kind:"repointed",confirmed:!0,sourceUrl:"https://developers.openai.com/api/docs/changelog",note:'Verbatim: "Updated the gpt-5.3-chat-latest slug to point to the latest model currently used in ChatGPT." Target model NOT named.'},{modelId:"chat-latest",date:"2026-05-05",kind:"introduced",confirmed:!0,sourceUrl:"https://developers.openai.com/api/docs/changelog",note:'Verbatim: "Released chat-latest snapshot which points to the latest Instant model currently used in ChatGPT... The underlying model snapshot will be regularly updated."'},{modelId:"chat-latest",date:"2026-05-28",kind:"repointed",confirmed:!1,sourceUrl:"https://developers.openai.com/api/docs/changelog",note:'UNCONFIRMED. The entry reads "Released chat-latest snapshot..." — the verb is "Released", the same boilerplate as the 2026-05-05 entry, not "Updated" as used on 2026-06-24. Only "the latest improvements" vs "our latest improvements" differs. Either a real change logged with copy-pasted text, or a duplicated entry; the record does not disambiguate.'},{modelId:"chat-latest",date:"2026-06-24",kind:"repointed",confirmed:!0,sourceUrl:"https://developers.openai.com/api/docs/changelog",note:'Verbatim (re-read at source 2026-07-20): "Updated the chat-latest snapshot, which points to the latest Instant model currently used in ChatGPT." The verb is "Updated", unlike the "Released" boilerplate of 2026-05-05 and 2026-05-28, which is the wording the changelog reserves for a real change. Target model NOT named. The only unambiguous chat-latest change on record.'}];rO.repointed;new Set(lO.map(e=>e.modelId.toLowerCase()));const cO=A(["not-exposed","no-known-change","known-change"]);cO.enum;const uO=m({modelId:o().trim().min(1),date:o().regex(/^\d{4}-\d{2}-\d{2}$/),confirmed:N(),sourceUrl:o().url()}),dO=m({status:A(["no-known-change","known-change"]),modelIds:y(o().trim().min(1)).min(1),changes:y(uO),changeCount:d().int().nonnegative(),unverifiedChangeCount:d().int().nonnegative(),firstChangeDate:o().optional(),lastChangeDate:o().optional(),knownGoodAsOf:o(),checkedThroughPeriodEnd:N()}),mO={openai:"ChatGPT",chatgpt:"ChatGPT",anthropic:"Claude",claude:"Claude",google:"Gemini",gemini:"Gemini",perplexity:"Perplexity"};function pO(e){const n=e.trim().toLowerCase();return mO[n]??e.charAt(0).toUpperCase()+e.slice(1)}function Ah(e){return typeof e=="number"&&Number.isFinite(e)&&e>0?Math.floor(e):0}function Ll(e){return typeof e=="string"&&e.trim().length>=10?e.trim().slice(0,10):null}function Ch(e){return[...new Set(e.filter(n=>n!==null))].sort()}function hO(e,n){const i=pO(e),r=Array.isArray(n.changes)?n.changes:[],u=Ah(n.changeCount)||r.length,h=Math.min(u,Ah(n.unverifiedChangeCount)||Ah(n.unconfirmedChangeCount)||r.filter(k=>k.confirmed===!1).length),g=Ll(n.knownGoodAsOf),b=n.checkedThroughPeriodEnd!==!1,v={engine:i,confirmedCount:u-h,unconfirmedCount:h,knownGoodAsOf:g,checkedThroughPeriodEnd:b};if(r.length>0)return{...v,confirmedDates:Ch(r.filter(k=>k.confirmed!==!1).map(k=>Ll(k.date))),unconfirmedDates:Ch(r.filter(k=>k.confirmed===!1).map(k=>Ll(k.date)))};const w=Ch([Ll(n.firstChangeDate),Ll(n.lastChangeDate)]);return u===0?{...v,confirmedDates:[],unconfirmedDates:[]}:h===0?{...v,confirmedDates:w,unconfirmedDates:[]}:v.confirmedCount===0?{...v,confirmedDates:[],unconfirmedDates:w}:{...v,confirmedDates:[],unconfirmedDates:[]}}function fO(e){return e.length===1?e[0]:e.length===2?`${e[0]} and ${e[1]}`:`${e.slice(0,-1).join(", ")}, and ${e[e.length-1]}`}function tx(e,n){return e.length===0?null:e.length===1&&n<=1?`on ${e[0]}`:`more than once between ${e[0]} and ${e[e.length-1]}`}function gO(e){const n=tx(e.confirmedDates,e.confirmedCount),i=tx(e.unconfirmedDates,e.unconfirmedCount),r=`The model behind ${e.engine}`;if(e.confirmedCount>0&&e.unconfirmedCount===0)return n?`${r} was updated ${n}, inside this period.`:`${r} was updated inside this period.`;if(e.confirmedCount===0)return i?`${r} may have been updated ${i}, inside this period, though that is not confirmed.`:`${r} may have been updated inside this period, though that is not confirmed.`;if(n&&i)return`${r} was updated ${n}, inside this period, and may also have been updated ${i}.`;const u=e.unconfirmedCount>1?"more times":"once more";return`${r} was updated inside this period, and may have been updated ${u}, though that is not confirmed.`}function nx(e){const n=e.filter(r=>!r.checkedThroughPeriodEnd&&r.knownGoodAsOf!==null);return n.length===0?null:`We last checked for model updates on ${n.map(r=>r.knownGoodAsOf).sort()[0]}, and this period runs past that date, so there may be later updates we do not know about.`}function zY(e){const n=Object.entries(e??{}).map(([v,w])=>hO(v,w??{})).sort((v,w)=>v.engine.localeCompare(w.engine));if(n.length===0)return null;const i=n.filter(v=>v.confirmedCount+v.unconfirmedCount>0);if(i.length===0){const v=[...new Set(n.map(_=>_.engine))],w=v.length>1,k=nx(n),j=[...new Set(n.map(_=>_.knownGoodAsOf).filter(_=>_!==null))].sort(),T=k??(j.length>0?`We last checked for model updates on ${j[0]}.`:null);return{kind:"no-known-change",text:`No model updates are on record for ${fO(v)} in this period.`,detail:`${w?"These engines":"This engine"} can be moved onto a different underlying model without the data ever showing a different model name, so we check each period against a record of known updates. Nothing is listed inside this one.${T?` ${T}`:""}`}}const r=i.reduce((v,w)=>v+w.confirmedCount+w.unconfirmedCount,0),u=i.some(v=>v.confirmedCount>0),h=r===1?"this update":"these updates",g=u?`Some of the movement in these numbers may come from ${h} rather than from a real change in how AI answers about you, so compare periods carefully.`:`If so, some of the movement in these numbers may come from ${h} rather than from a real change in how AI answers about you, so compare periods carefully.`,b=nx(n);return{kind:"change",text:`${i.map(gO).join(" ")} ${g}${b?` ${b}`:""}`}}const so=m({slope:d(),intercept:d(),r2:d(),start:d(),end:d(),n:d(),startIndex:d(),endIndex:d()}),yO=A(["gsc","ga4","gbp"]);m({id:o(),domain:o(),connectionType:yO,propertyId:o().nullable().optional(),sitemapUrl:o().nullable().optional(),scopes:y(o()).default([]),createdAt:o(),updatedAt:o()});const bO=m({date:o(),query:o(),page:o(),country:o().nullable().optional(),device:o().nullable().optional(),clicks:d(),impressions:d(),ctr:d(),position:d()});A(["clicks","impressions","date"]);m({rows:y(bO),totalMatching:d(),truncated:N(),latestAvailableDate:o().nullable()});const vO=m({date:o(),clicks:d(),impressions:d(),ctr:d(),position:d().nullable()}),xO=m({startDate:o().nullable(),endDate:o().nullable(),latestDataDate:o().nullable(),daysSinceLatestData:d().nullable()}),wO=m({clicks:so.nullable(),impressions:so.nullable(),ctr:so.nullable(),position:so.nullable()}),ax=m({startDate:o(),endDate:o(),clicks:d(),impressions:d(),ctr:d().nullable(),position:d().nullable(),source:A(["property-daily","dimensioned","mixed","empty"])}),kO=m({days:d(),basis:A(["prior-window","split-window"]).optional(),prior:ax,trailing:ax,comparable:N(),change:m({clicks:d().nullable(),impressions:d().nullable(),ctr:d().nullable(),position:d().nullable()})});m({totals:m({clicks:d(),impressions:d(),ctr:d(),position:d().nullable(),positionDays:d(),days:d()}),daily:y(vO),window:xO.optional(),trends:wO.optional(),periodComparison:kO.nullable().optional()});const SO=m({page:o(),clicks:d(),impressions:d(),ctr:d()});m({rows:y(SO),totals:m({clicks:d(),impressions:d(),ctr:d(),days:d(),coveredFrom:o().nullable(),coveredThrough:o().nullable(),complete:N()}).nullable(),totalsSource:z("property-daily"),rankedFrom:o().nullable(),rankedThrough:o().nullable()});const cf=m({id:o(),url:o(),indexingState:o().nullable().optional(),verdict:o().nullable().optional(),coverageState:o().nullable().optional(),pageFetchState:o().nullable().optional(),robotsTxtState:o().nullable().optional(),crawlTime:o().nullable().optional(),lastCrawlResult:o().nullable().optional(),isMobileFriendly:N().nullable().optional(),richResults:y(o()).default([]),referringUrls:y(o()).default([]),inspectedAt:o()});A(["stable","reindexed","deindexed","still-missing","new"]);const jO=m({url:o(),previousState:o().nullable(),currentState:o().nullable(),transitionDate:o()}),AO=m({reason:o(),count:d(),urls:y(cf).default([])});m({summary:m({total:d(),indexed:d(),notIndexed:d(),deindexed:d(),percentage:d()}),lastInspectedAt:o().nullable(),lastSyncedAt:o().nullable(),indexed:y(cf).default([]),notIndexed:y(cf).default([]),deindexed:y(jO).default([]),reasonGroups:y(AO).default([])});m({url:o(),type:A(["URL_UPDATED","URL_DELETED"]),notifiedAt:o()});const CO=m({url:o(),type:A(["URL_UPDATED","URL_DELETED"]),notifiedAt:o(),status:A(["success","error"]),error:o().optional()});m({summary:m({total:d().int().nonnegative(),succeeded:d().int().nonnegative(),failed:d().int().nonnegative()}),results:y(CO).default([])});m({date:o(),indexed:d(),notIndexed:d(),unknownPages:d().default(0),verifiedByInspection:d().default(0),derivedFromImpressions:d().default(0),reasonBreakdown:Ue(o(),d()).default({})});const NO=m({siteUrl:o(),permissionLevel:o()});m({sites:y(NO).default([])});const _O=m({type:o(),submitted:o(),indexed:o().optional().describe("Deprecated compatibility field.")}),nS=m({path:o(),parentSitemapUrl:o().optional(),lastSubmitted:o().optional(),isPending:N().optional(),isSitemapsIndex:N().optional(),type:o().optional(),lastDownloaded:o().optional(),warnings:o().optional(),errors:o().optional(),contents:y(_O).optional()});m({sitemaps:y(nS).default([]),summary:m({total:d().int().nonnegative(),indexes:d().int().nonnegative(),files:d().int().nonnegative()}),preferredSubmissionUrls:y(o()).default([])});m({sitemapUrls:y(o().url().refine(e=>{const n=new URL(e).protocol;return n==="http:"||n==="https:"},{message:"Sitemap URL must use http or https."})).min(1).max(50)});const TO=m({sitemapUrl:o(),status:A(["accepted","error"]),submittedAt:o().optional(),error:o().optional()});m({summary:m({total:d().int().nonnegative(),accepted:d().int().nonnegative(),failed:d().int().nonnegative()}),results:y(TO)});m({sitemaps:y(nS),primarySitemapUrl:o(),run:m({id:o(),projectId:o(),kind:o(),status:o(),trigger:o(),createdAt:o()}).nullable()});const ut=o().trim().min(1),ix=o().regex(/^[a-f0-9]{64}$/i);function RO(e){if(!/^\d{4}-\d{2}-\d{2}$/.test(e))return!1;const n=new Date(`${e}T00:00:00.000Z`);return!Number.isNaN(n.getTime())&&n.toISOString().slice(0,10)===e}const Ja=o().refine(RO,{message:"Expected a calendar date as YYYY-MM-DD."});function EO(e,n){const i=Date.parse(`${e}T00:00:00.000Z`),r=Date.parse(`${n}T00:00:00.000Z`);return Math.floor((r-i)/864e5)+1}const zO=A(["not-connected","selection-required","connected","stale"]),Du=zO.enum,aS=A(["enabled","suspended","closed","canceled","unspecified","unknown"]);aS.enum;const v0=A(["enabled","paused","removed","unknown"]);v0.enum;const iS=A(["enabled","hidden","removed","unknown"]);iS.enum;const x0=A(["customer","campaign"]);x0.enum;const sS=A(["customer-goal","campaign-goal","custom-goal"]);sS.enum;const oS=m({loginCustomerId:ut.nullable(),customerId:ut.nullable(),selectedAt:o().nullable()}).strict(),Nh=m({id:ut,projectId:ut,scopes:y(o()).default([]),selection:oS,lastValidatedAt:o().nullable(),lastInventorySnapshotAt:o().nullable(),lastMetricsSnapshotAt:o().nullable(),createdAt:o(),updatedAt:o()}).strict(),uf=m({resourceName:ut,customerId:ut,parentCustomerId:ut.nullable(),descriptiveName:o().nullable(),currencyCode:o().nullable(),timeZone:o().nullable(),manager:N(),hidden:N(),testAccount:N(),level:d().int().nonnegative(),status:aS}).strict(),DO=m({customers:y(uf),totalAccessible:d().int().nonnegative(),truncated:N(),selection:oS,fetchedAt:o()}).strict();qe("status",[m({connected:z(!1),status:z(Du["not-connected"]),connection:de(),selectedCustomer:de()}).strict(),m({connected:z(!0),status:z(Du["selection-required"]),connection:Nh,selectedCustomer:de()}).strict(),m({connected:z(!0),status:z(Du.connected),connection:Nh,selectedCustomer:uf}).strict(),m({connected:z(!0),status:z(Du.stale),connection:Nh,selectedCustomer:uf}).strict()]);const OO=m({id:ut,resourceName:ut,name:o(),status:v0,advertisingChannelType:o().nullable(),biddingStrategyType:o().nullable()}).strict(),IO=m({id:ut,resourceName:ut,name:o(),status:iS,category:o(),origin:o(),primaryForGoal:N(),includeInConversionsMetric:N()}).strict(),PO=m({category:o(),origin:o(),biddable:N()}).strict(),qO=m({campaignId:ut,category:o(),origin:o(),biddable:N()}).strict(),MO=m({id:ut,name:o(),conversionActionIds:y(ut)}).strict(),BO=m({campaignId:ut,goalConfigLevel:x0,customGoalId:ut.nullable()}).strict(),LO=m({customerId:ut,fetchedAt:o(),campaigns:y(OO),conversionActions:y(IO),customerConversionGoals:y(PO),campaignConversionGoals:y(qO),campaignConversionGoalsComplete:N().optional(),customConversionGoals:y(MO),campaignGoalConfigurations:y(BO)}).strict(),VO=m({source:sS,category:o().nullable(),origin:o().nullable(),customGoalId:ut.nullable(),biddable:N().nullable(),conversionActionIds:y(ut),primaryConversionActionIds:y(ut),secondaryConversionActionIds:y(ut),missingConversionActionIds:y(ut)}).strict(),$O=m({campaignId:ut,goalConfigLevel:x0,customGoalId:ut.nullable(),missingCustomGoalId:ut.nullable(),goals:y(VO)}).strict();m({customerId:ut,derivedAt:o(),campaigns:y($O)}).strict();const rS=50,df=31,UO=rS*df,GO=m({campaignIds:y(ut).min(1).max(rS),startDate:Ja,endDate:Ja}).strict().superRefine((e,n)=>{if(new Set(e.campaignIds).size!==e.campaignIds.length&&n.addIssue({code:ve.custom,path:["campaignIds"],message:"Campaign IDs must be unique."}),e.endDate<e.startDate){n.addIssue({code:ve.custom,path:["endDate"],message:"endDate must not precede startDate."});return}EO(e.startDate,e.endDate)>df&&n.addIssue({code:ve.custom,path:["endDate"],message:`Campaign metrics may cover at most ${df} calendar days.`})}),KO=m({campaignId:ut,date:Ja,impressions:d().int().nonnegative(),clicks:d().int().nonnegative(),costMicros:d().int().nonnegative(),conversions:d().nonnegative(),conversionValueMicros:d().int().nonnegative().nullable()}).strict(),HO=m({query:GO,rows:y(KO).max(UO),truncated:N(),fetchedAt:o()}).strict(),lS=A(["accessible-customers","inventory","campaign-metrics"]),_h=lS.enum,w0=m({id:ut,projectId:ut,connectionId:ut,runId:ut,kind:lS,customerId:ut.nullable(),payloadChecksum:ix,rawPayloadSha256:ix.nullable(),rawPayloadBytes:d().int().nonnegative().nullable(),redactedFieldCount:d().int().nonnegative(),capturedAt:o(),createdAt:o()}).strict(),QO=qe("kind",[m({kind:z(_h["accessible-customers"]),data:DO}).strict(),m({kind:z(_h.inventory),data:LO}).strict(),m({kind:z(_h["campaign-metrics"]),data:HO}).strict()]),FO=m({metadata:w0,payload:QO}).strict().superRefine((e,n)=>{e.metadata.kind!==e.payload.kind&&n.addIssue({code:ve.custom,path:["payload","kind"],message:"Snapshot metadata and payload kinds must match."})}),ZO=A(["7d","14d","30d"]),k0=m({impressions:d().int().nonnegative(),clicks:d().int().nonnegative(),costMicros:d().int().nonnegative(),conversions:d().nonnegative(),conversionValueMicros:d().int().nonnegative().nullable(),ctr:d().nullable(),cpcMicros:d().int().nonnegative().nullable(),conversionRate:d().nullable(),costPerConversionMicros:d().int().nonnegative().nullable()}),YO=m({date:Ja,origin:A(["provider","filled"]),impressions:d().int().nonnegative(),clicks:d().int().nonnegative(),costMicros:d().int().nonnegative(),conversions:d().nonnegative(),ctr:d().nullable()}),XO=m({campaignId:ut,name:o().nullable(),status:v0,totals:k0}),WO=m({snapshotId:ut,capturedAt:o(),customerId:ut,currencyCode:o().nullable(),timeZone:o().nullable(),asOfDate:Ja,openDate:Ja.nullable(),truncated:N(),campaignsQueried:d().int().nonnegative(),campaignsInInventory:d().int().nonnegative()}),JO=m({startDate:Ja,endDate:Ja,days:d().int().positive(),totals:k0}),eI=m({days:d().int().positive(),prior:JO,change:m({impressions:d().nullable(),clicks:d().nullable(),costMicros:d().nullable(),conversions:d().nullable(),ctr:d().nullable(),conversionRate:d().nullable()})});m({window:ZO,startDate:Ja,endDate:Ja,days:d().int().positive(),totals:k0,daily:y(YO),campaigns:y(XO),comparison:eI.nullable(),comparisonUnavailableReason:A(["insufficient-history","no-snapshot"]).nullable(),source:WO.nullable()});const ct=o().trim().min(1),sx=o().regex(/^[a-f0-9]{64}$/i),tI=A(["not-connected","selection-required","connected","stale"]),Ou=tI.enum,nI=A(["live","draft"]),cS=nI.enum,Fu=m({accountId:ct.nullable(),containerId:ct.nullable(),workspaceId:ct.nullable(),selectedAt:o().nullable()}).strict(),Th=m({id:ct,projectId:ct,scopes:y(o()).default([]),selection:Fu,lastValidatedAt:o().nullable(),lastSnapshotAt:o().nullable(),createdAt:o(),updatedAt:o()}).strict(),uS=m({id:ct,path:o(),name:o(),shareData:N().nullable()}).strict(),dS=m({accountId:ct,id:ct,path:o(),name:o(),publicId:o().nullable(),domainName:o().nullable(),usageContexts:y(o())}).strict(),S0=m({accountId:ct,containerId:ct,id:ct,path:o(),name:o(),description:o().nullable(),fingerprint:o().nullable()}).strict(),aI=m({accounts:y(uS),totalAccessible:d().int().nonnegative(),truncated:N(),fetchedAt:o()}).strict();m({accountId:ct,containers:y(dS),totalAccessible:d().int().nonnegative(),truncated:N(),fetchedAt:o()}).strict();m({accountId:ct,containerId:ct,workspaces:y(S0),totalAccessible:d().int().nonnegative(),truncated:N(),fetchedAt:o()}).strict();const iI=m({id:ct,name:o(),type:o(),paused:N(),firingTriggerIds:y(ct),blockingTriggerIds:y(ct),referencedVariableIds:y(ct),parameterKeys:y(o()),fingerprint:o().nullable()}).strict(),sI=m({id:ct,name:o(),type:o(),customEventNames:y(o()),filterKeys:y(o()),autoEventFilterKeys:y(o()),fingerprint:o().nullable()}).strict(),oI=m({id:ct,name:o(),type:o(),dataLayerVariableName:o().nullable(),parameterKeys:y(o()),fingerprint:o().nullable()}).strict(),mS=A(["recognized","unknown"]),ox=mS.enum,rI=A(["literal","variable-ref","absent","unknown"]),qd=rI.enum,lI=o().trim().min(5).max(132).regex(/^\{\{\w[\w ./-]{0,127}\}\}$/),Tr=m({source:z(qd.absent),literal:de(),variableRef:de()}).strict(),Rr=m({source:z(qd.unknown),literal:de(),variableRef:de()}).strict(),Er=m({source:z(qd["variable-ref"]),literal:de(),variableRef:lI}).strict();function dc(e){return m({source:z(qd.literal),literal:e,variableRef:de()}).strict()}const cI=o().trim().max(23).regex(/^(?:AW-)?\d{1,20}$/i),uI=o().trim().min(1).max(128).regex(/^[\w-]+$/),dI=o().trim().min(1).max(20).regex(/^(?:0|[1-9]\d{0,11})(?:\.\d{1,6})?$/),mI=o().trim().length(3).regex(/^[a-z]{3}$/i);qe("source",[dc(o().trim().min(1).max(256)),Er,Tr,Rr]);const pI=qe("source",[dc(cI),Er,Tr,Rr]),hI=qe("source",[dc(uI),Er,Tr,Rr]),fI=qe("source",[dc(dI),Er,Tr,Rr]),gI=qe("source",[Er,Tr,Rr]),yI=qe("source",[dc(mI),Er,Tr,Rr]),pS=A(["all-pages","custom-event","filtered","unknown"]);pS.enum;const rx=m({operator:o().trim().min(1).max(64),value:o().max(2048),negated:N(),ignoreCase:N()}).strict(),bI=m({triggerId:ct,triggerType:o(),eventPredicates:y(rx),hostnamePredicates:y(rx),unsupportedConditionCount:d().int().nonnegative()}).strict(),hS=A(["not-google-ads-tag","unsupported-tag-type","custom-html-opaque","conversion-id-unresolved","conversion-label-unresolved","value-mapping-missing","transaction-id-mapping-missing","currency-mapping-missing","trigger-unresolved","hostname-filter-unresolved"]);hS.enum;const vI=m({tagId:ct,tagType:o(),recognition:mS,recognitionReason:o().nullable(),conversionId:pI,conversionLabel:hI,value:fI,transactionId:gI,currency:yI,triggerStrategy:pS,triggerIds:y(ct),triggerPredicates:y(bI),reviewReasons:y(hS)}).strict().superRefine((e,n)=>{e.recognition===ox.recognized&&e.recognitionReason!==null&&n.addIssue({code:ve.custom,path:["recognitionReason"],message:"Recognized assessments cannot carry an unknown-recognition reason."}),e.recognition===ox.unknown&&!e.recognitionReason&&n.addIssue({code:ve.custom,path:["recognitionReason"],message:"Unknown assessments require a recognition reason."})}),fS=m({accountId:ct,containerId:ct,workspaceId:ct.nullable(),tags:y(iI),triggers:y(sI),variables:y(oI),googleAdsTagAssessments:y(vI).default([])}).strict(),xI=m({accountId:ct,containerId:ct,id:ct,path:o(),name:o(),description:o().nullable(),fingerprint:o().nullable(),deleted:N()}).strict(),gS=m({source:z(cS.live),version:xI,graph:fS,fetchedAt:o()}).strict(),yS=m({source:z(cS.draft),workspace:S0,graph:fS,conflictCount:d().int().nonnegative(),fetchedAt:o()}).strict(),wI=m({account:uS,container:dS,workspaces:y(S0),live:gS.nullable(),draft:yS.nullable(),fetchedAt:o()}).strict();qe("status",[m({connected:z(!1),status:z(Ou["not-connected"]),connection:de(),selection:de()}).strict(),m({connected:z(!0),status:z(Ou["selection-required"]),connection:Th,selection:Fu}).strict(),m({connected:z(!0),status:z(Ou.connected),connection:Th,selection:Fu}).strict(),m({connected:z(!0),status:z(Ou.stale),connection:Th,selection:Fu}).strict()]);const bS=A(["accounts","container","live","draft"]),Iu=bS.enum,j0=m({id:ct,projectId:ct,connectionId:ct,runId:ct,kind:bS,accountId:ct.nullable(),containerId:ct.nullable(),workspaceId:ct.nullable(),payloadChecksum:sx,rawPayloadSha256:sx.nullable(),rawPayloadBytes:d().int().nonnegative().nullable(),redactedFieldCount:d().int().nonnegative(),capturedAt:o(),createdAt:o()}).strict(),kI=qe("kind",[m({kind:z(Iu.accounts),data:aI}).strict(),m({kind:z(Iu.container),data:wI}).strict(),m({kind:z(Iu.live),data:gS}).strict(),m({kind:z(Iu.draft),data:yS}).strict()]),SI=m({metadata:j0,payload:kI}).strict().superRefine((e,n)=>{e.metadata.kind!==e.payload.kind&&n.addIssue({code:ve.custom,path:["payload","kind"],message:"Snapshot metadata and payload kinds must match."})}),Kn=o().trim().min(1),jI=o().trim().min(1).refine(e=>rc(e)!==null,"Expected a hostname or http(s) URL."),A0=A(["configured","statically-consistent","runtime-unverified","observed"]);A0.enum;const vS=A(["pass","fail","unknown"]);vS.enum;const xS=A(["ads-connection-missing","ads-conversion-action-missing","ads-goal-missing","ads-goal-not-biddable","ads-action-not-primary","gtm-connection-missing","gtm-live-graph-missing","gtm-tag-missing","gtm-tag-unrecognized","gtm-tag-paused","gtm-trigger-missing","gtm-variable-missing","gtm-event-mismatch","gtm-hostname-mismatch","gtm-value-mapping-missing","gtm-transaction-id-mapping-missing","gtm-currency-mapping-missing","gtm-conversion-id-mismatch","gtm-conversion-label-mismatch","runtime-event-not-observed","runtime-gtm-not-observed","runtime-ads-not-observed"]);xS.enum;const wS=m({id:Kn,projectId:Kn,name:o().trim().min(1),eventName:o().trim().min(1),googleAds:m({customerId:Kn,conversionActionId:Kn,conversionId:o().trim().min(1).optional(),conversionLabel:o().trim().min(1).optional(),campaignIds:y(Kn).max(50).default([]),requireBiddableGoal:N().default(!0),requirePrimaryAction:N().default(!0)}).strict(),gtm:m({accountId:Kn,containerId:Kn,tagId:Kn,triggerIds:y(Kn).default([]),variableIds:y(Kn).default([])}).strict(),runtime:m({verificationRequired:N().default(!0),requireTransactionId:N().default(!0),requireValue:N().default(!0),requireCurrency:N().default(!0),productionHosts:y(jI).default([])}).strict(),createdAt:o(),updatedAt:o()}).strict();wS.omit({id:!0,projectId:!0,createdAt:!0,updatedAt:!0});const kS=A(["not-run","consistent","inconsistent"]);kS.enum;const SS=A(["not-run","not-observed","observed"]);SS.enum;m({staticCheck:kS,runtimeVerificationRequired:N(),runtimeObservation:SS}).strict();const AI=m({code:xS,subject:o().trim().min(1),outcome:vS,status:A0,evidenceIds:y(Kn).default([])}).strict(),CI=m({contract:wS,status:A0,findings:y(AI),evaluatedAt:o()}).strict(),lx=m({id:Kn,name:o(),detail:o(),active:N()});m({googleAds:m({customerId:Kn.nullable(),syncedAt:o().nullable(),conversionActions:y(lx)}),gtm:m({containerId:Kn.nullable(),syncedAt:o().nullable(),tags:y(lx)})});const Fl=o().trim().min(1);function cx(e){const n=e.trim();return/^\d{10}$/.test(n)?n:/^\d{3}-\d{3}-\d{4}$/.test(n)?n.replaceAll("-",""):null}const NI=/^[\w-]+$/;function C0(e){const n=e.trim();return NI.test(n)?n:null}function _I(e){const n=e.trim();return/^accounts\/([\w-]+)$/.exec(n)?.[1]??C0(n)}function TI(e,n){const i=e.trim(),r=/^accounts\/([\w-]+)\/containers\/([\w-]+)$/.exec(i);return r?r[1]===n?r[2]:null:C0(i)}function RI(e,n,i){const r=e.trim(),u=/^accounts\/([\w-]+)\/containers\/([\w-]+)\/workspaces\/([\w-]+)$/.exec(r);return u?u[1]===n&&u[2]===i?u[3]:null:C0(r)}function EI(e){const n=cx(e.customerId);if(!n)return null;if(e.loginCustomerId===null)return{loginCustomerId:null,customerId:n};if(e.loginCustomerId===void 0)return{customerId:n};const i=cx(e.loginCustomerId);return i?{loginCustomerId:i,customerId:n}:null}function zI(e){const n=_I(e.accountId);if(!n)return null;const i=TI(e.containerId,n);if(!i)return null;if(e.workspaceId===void 0)return{accountId:n,containerId:i};const r=RI(e.workspaceId,n,i);return r?{accountId:n,containerId:i,workspaceId:r}:null}const Md=A(["google-ads","gtm"]);Md.enum;m({provider:Md,publicUrl:o().url().optional(),developerToken:o().trim().min(1).max(512).optional()}).strict();m({provider:Md,authorizationUrl:o().url(),redirectUri:o().url(),expiresAt:o().nullable()}).strict();m({loginCustomerId:Fl.nullable().optional(),customerId:Fl}).strict().superRefine((e,n)=>{EI(e)||n.addIssue({code:ve.custom,message:"Expected ten-digit Google Ads customer IDs, with optional 3-3-4 display hyphens."})});m({accountId:Fl,containerId:Fl,workspaceId:Fl.optional()}).strict().superRefine((e,n)=>{zI(e)||n.addIssue({code:ve.custom,message:"GTM resource paths must match the selected account and container."})});m({provider:Md,disconnected:N()}).strict();const jS=100;m({snapshots:y(w0).max(jS),nextCursor:o().nullable(),total:d().int().nonnegative()}).strict();m({snapshot:FO}).strict();m({snapshots:y(j0).max(jS),nextCursor:o().nullable(),total:d().int().nonnegative()}).strict();m({snapshot:SI}).strict();m({assessment:CI,googleAdsSnapshot:w0.nullable(),gtmSnapshot:j0.nullable()}).strict();const DI=m({name:o(),accountName:o().nullable(),type:o().nullable(),role:o().nullable()});m({accounts:y(DI),total:d().int().nonnegative()});const OI=m({id:o(),projectId:o(),accountName:o(),locationName:o(),displayName:o(),primaryCategoryDisplayName:o().nullable(),storefrontAddress:o().nullable(),websiteUri:o().nullable(),placeId:o().nullable(),mapsUri:o().nullable(),additionalCategories:y(o()),description:o().nullable(),serviceArea:Ue(o(),fn()).nullable(),regularHours:Ue(o(),fn()).nullable(),primaryPhone:o().nullable(),openStatus:o().nullable(),openingDate:o().nullable(),selected:N(),syncedAt:o().nullable(),createdAt:o(),updatedAt:o()});m({locations:y(OI),totalDiscovered:d().int().nonnegative(),totalSelected:d().int().nonnegative()});m({selectAllNew:N().default(!0),accountName:o().optional(),switchAccount:N().default(!1)});m({selected:N()});m({locationNames:y(o()).optional(),daysOfMetrics:d().int().positive().max(540).optional(),monthsOfKeywords:d().int().positive().max(18).optional()});m({runId:o(),status:o()});const II=m({locationName:o(),date:o(),metric:o(),value:d().int()});m({metrics:y(II),total:d().int().nonnegative()});const PI=m({locationName:o(),periodStart:o(),periodEnd:o(),keyword:o(),valueCount:d().int().nullable(),valueThreshold:d().int().nullable()});m({keywords:y(PI),total:d().int().nonnegative(),thresholdedPct:d().int().min(0).max(100)});const qI=m({locationName:o(),placeActionLinkName:o(),placeActionType:o(),uri:o().nullable(),isPreferred:N(),providerType:o().nullable()});m({placeActions:y(qI),total:d().int().nonnegative()});const MI=m({locationName:o(),populatedGroupCount:d().int().nonnegative(),syncedAt:o(),attributes:Ue(o(),fn())});m({lodging:y(MI),total:d().int().nonnegative()});const BI=m({name:o(),valueType:o(),values:y(Ze([N(),o()])),unsetValues:y(o()),uris:y(o())}),LI=m({locationName:o(),attributeCount:d().int().nonnegative(),syncedAt:o(),attributes:y(BI)});m({attributes:y(LI),total:d().int().nonnegative()});const VI=m({locationName:o(),placeId:o(),tier:o(),amenities:y(o()),syncedAt:o(),place:Ue(o(),fn())});m({places:y(VI),total:d().int().nonnegative()});m({scope:m({locationName:o().nullable(),locationCount:d().int().nonnegative()}),performance:m({totals:Ue(o(),d()),recent7d:Ue(o(),d()),prior7d:Ue(o(),d()),deltaPct:Ue(o(),d().nullable())}),freshness:m({dataThroughDate:o().nullable(),latestStoredDate:o().nullable(),pendingDays:d().int().nonnegative()}),timeseries:y(m({date:o(),pending:N(),metrics:Ue(o(),d())})),keywords:m({total:d().int().nonnegative(),thresholdedCount:d().int().nonnegative(),thresholdedPct:d().int().min(0).max(100)}),placeActions:m({total:d().int().nonnegative(),hasReservationCta:N(),hasBookingCta:N(),hasDirectMerchantCta:N()}),lodging:m({lodgingLocationCount:d().int().nonnegative(),populatedLodgingCount:d().int().nonnegative(),emptyLodgingCount:d().int().nonnegative()}),profileCompleteness:m({locationCount:d().int().nonnegative(),withSecondaryCategories:d().int().nonnegative(),secondaryCategoryTotal:d().int().nonnegative(),withDescription:d().int().nonnegative(),withServiceArea:d().int().nonnegative(),withHours:d().int().nonnegative(),withPrimaryPhone:d().int().nonnegative(),permanentlyClosed:d().int().nonnegative(),temporarilyClosed:d().int().nonnegative()})});const $I={BUSINESS_DIRECTION_REQUESTS:"Direction requests",WEBSITE_CLICKS:"Website clicks",CALL_CLICKS:"Call clicks",BUSINESS_BOOKINGS:"Bookings",BUSINESS_CONVERSATIONS:"Conversations",BUSINESS_FOOD_ORDERS:"Food orders",BUSINESS_FOOD_MENU_CLICKS:"Food menu clicks",BUSINESS_IMPRESSIONS_DESKTOP_SEARCH:"Search impressions (desktop)",BUSINESS_IMPRESSIONS_MOBILE_SEARCH:"Search impressions (mobile)",BUSINESS_IMPRESSIONS_DESKTOP_MAPS:"Maps impressions (desktop)",BUSINESS_IMPRESSIONS_MOBILE_MAPS:"Maps impressions (mobile)"};function UI(e){const n=e.replace(/^BUSINESS_/,"").split("_").filter(Boolean).map(r=>r.toLowerCase());if(n.length===0)return e;const i=n.join(" ");return i.charAt(0).toUpperCase()+i.slice(1)}function DY(e){return $I[e]??UI(e)}const GI=["BUSINESS_DIRECTION_REQUESTS","WEBSITE_CLICKS","CALL_CLICKS"],KI=["BUSINESS_IMPRESSIONS_DESKTOP_SEARCH","BUSINESS_IMPRESSIONS_MOBILE_SEARCH","BUSINESS_IMPRESSIONS_DESKTOP_MAPS","BUSINESS_IMPRESSIONS_MOBILE_MAPS"];function OY(e){return GI.includes(e)?"conversion":KI.includes(e)?"reach":"other"}m({id:o(),domain:o(),siteUrl:o().nullable().optional(),createdAt:o(),updatedAt:o()});const Rh=m({id:o(),url:o(),httpCode:d().nullable().optional(),inIndex:N().nullable().optional(),lastCrawledDate:o().nullable().optional(),inIndexDate:o().nullable().optional(),inspectedAt:o(),documentSize:d().nullable().optional(),anchorCount:d().nullable().optional(),discoveryDate:o().nullable().optional()});m({summary:m({total:d(),indexed:d(),notIndexed:d(),unknown:d().optional(),percentage:d()}),lastInspectedAt:o().nullable(),indexed:y(Rh).default([]),notIndexed:y(Rh).default([]),unknown:y(Rh).default([]).optional()});m({query:o(),impressions:d(),clicks:d(),ctr:d(),averagePosition:d()});m({date:o(),indexed:d(),notIndexed:d(),unknown:d()});const HI=m({url:o(),status:A(["success","error"]),submittedAt:o(),error:o().optional()});m({summary:m({total:d().int().nonnegative(),succeeded:d().int().nonnegative(),failed:d().int().nonnegative()}),results:y(HI).default([])});const AS=m({url:o(),verified:N()});m({sites:y(AS).default([])});m({connected:N(),domain:o(),siteUrl:o().nullable(),createdAt:o().nullable(),updatedAt:o().nullable()});m({connected:N(),domain:o(),siteUrl:o().nullable(),availableSites:y(AS).default([])});m({siteUrl:o()});const QI=m({name:o(),alive:N(),lastUsed:o().nullable()});m({connected:N(),endpoint:o(),version:o().optional(),browserVersion:o().optional(),targets:y(QI).default([])});const zr=A(["live","staging"]);m({projectName:o(),url:o(),stagingUrl:o().optional(),username:o(),defaultEnv:zr,createdAt:o(),updatedAt:o()});const ux=m({url:o(),reachable:N(),pageCount:d().nullable().optional(),version:o().nullable().optional(),error:o().nullable().optional(),plugins:y(o()).optional(),authenticatedUser:m({id:d(),slug:o()}).nullable().optional()});m({connected:N(),projectName:o(),defaultEnv:zr,live:ux.nullable(),staging:ux.nullable(),adminUrl:o().nullable().optional()});const FI=m({id:d(),slug:o(),title:o(),status:o(),modifiedAt:o().nullable().optional(),link:o().nullable().optional()}),CS=m({title:o().nullable(),description:o().nullable(),noindex:N().nullable(),writable:N().default(!1),writeTargets:y(o()).default([])}),ZI=m({type:o(),json:Ue(o(),fn())}),YI=FI.extend({env:zr,content:o(),seo:CS,schemaBlocks:y(ZI).default([])}),dx=YI.extend({contentHash:o(),contentSnippet:o()}),NS=m({manualRequired:z(!0),targetUrl:o(),adminUrl:o().nullable().optional(),content:o(),nextSteps:y(o()).default([])}),XI=m({slug:o(),severity:A(["high","medium","low"]),code:A(["noindex","missing-seo-title","missing-meta-description","missing-schema","thin-content"]),message:o()});m({slug:o(),title:o(),status:o(),wordCount:d(),seo:CS,schemaPresent:N(),issues:y(XI).default([])});const WI=m({slug:o(),status:A(["applied","skipped","manual"]),error:o().optional(),manualAssist:NS.optional()});m({env:zr,strategy:A(["plugin","manual"]),results:y(WI)});const JI=m({slug:o(),status:A(["deployed","stripped","skipped","failed"]),schemasInjected:y(o()).optional(),manualAssist:NS.optional(),error:o().optional()});m({env:zr,results:y(JI)});const eP=m({slug:o(),title:o(),canonrySchemas:y(o()),thirdPartySchemas:y(o()),hasCanonrySchema:N()});m({env:zr,pages:y(eP)});const tP=m({name:o(),status:A(["completed","skipped","failed"]),summary:o().optional(),error:o().optional()});m({projectName:o(),steps:y(tP)});m({slug:o(),live:dx,staging:dx,hasDifferences:N(),differences:m({title:N(),slug:N(),content:N(),seoTitle:N(),seoDescription:N(),noindex:N(),schema:N()})});const nP=m({name:o(),displayName:o().optional(),keyUrl:o().optional(),modelHint:o().optional(),model:o().optional(),defaultModel:o().optional(),configured:N(),quota:iE.optional(),vertexConfigured:N().optional()}),aP=m({name:o(),displayName:o(),mode:A(["api","browser"]),modelConfigurable:N(),defaultModel:o(),knownModels:y(m({id:o(),displayName:o(),tier:A(["flagship","standard","fast","economy"])})).default([]),modelValidationPattern:m({source:o(),flags:o()}),modelValidationHint:o()}),mx=m({configured:N()});m({providers:y(nP).default([]),providerCatalog:y(aP).default([]),google:mx,bing:mx});const sa=A(["queued","running","completed","partial","failed","cancelled"]),Yt=sa.enum,N0=A(["answer-visibility","site-audit","gsc-sync","inspect-sitemap","ga-sync","bing-inspect","bing-inspect-sitemap","backlink-extract","traffic-sync","aeo-discover-seed","aeo-discover-probe","gbp-sync","ads-sync","google-ads-sync","gtm-sync"]),Ee=N0.enum;m({kind:N0.optional(),status:sa.optional()});const _0=A(["manual","scheduled","config-apply","backfill","probe"]),ms=_0.enum,_i=A(["cited","not-cited"]),ud=_i.enum,dd=A(["visible","not-visible"]);dd.enum;const nc=A(["mentioned","not-mentioned"]);nc.enum;const _S=A(["new","cited","lost","emerging","not-cited"]);_S.enum;const iP=A(["new","mentioned","lost","emerging","not-mentioned"]);iP.enum;const sP=A([ms.manual,ms.probe]);m({kind:z(Ee["answer-visibility"]).optional(),trigger:sP.optional(),providers:y(gt).optional(),queries:y(o().min(1)).min(1).optional(),measurementScope:iD.optional(),location:o().min(1).optional(),allLocations:N().optional(),noLocation:N().optional()}).refine(e=>+!!e.location+ +!!e.allLocations+ +!!e.noLocation<=1,{message:'Only one of "location", "allLocations", or "noLocation" may be provided'});const oP=m({message:o(),raw:fn().optional()}),rP=m({message:o().optional(),providers:Ue(o(),oP).optional()}),lP=m({id:o(),projectId:o(),kind:N0,status:sa,trigger:_0.default("manual"),measurementPlanVersionId:o().nullable().optional(),measurementManifest:Ue(o(),fn()).nullable().optional(),measurementScope:sD.nullable().optional(),measurementExecutionIdentity:y2.nullable().optional(),location:o().nullable().optional(),queries:y(o()).nullable().optional(),startedAt:o().nullable().optional(),finishedAt:o().nullable().optional(),error:rP.nullable().optional(),queryBasketRevision:d().int().nullable().optional(),createdAt:o()});function T0(e){if(e.providers){const n=Object.entries(e.providers);if(n.length===1){const[i,r]=n[0];return`${i}: ${r.message}`}if(n.length>1)return n.map(([i,r])=>`${i}: ${r.message}`).join(" • ")}return e.message??"Run failed."}const Bd=m({uri:o(),title:o()}),cP=m({status:A(["applied","ignored","browser-implicit","unknown"]),resolved:cn.nullable().optional()}),TS=m({id:o(),runId:o(),queryId:o(),query:o().optional(),provider:gt,citationState:_i,answerMentioned:N().optional(),visibilityState:dd.optional(),mentionState:nc.optional(),transition:_S.optional(),answerText:o().nullable().optional(),citedDomains:y(o()).default([]),citedUrls:y(o()).nullable().default(null),captureStatus:Ze([Ed,de()]).default(null),sourceCount:d().int().nonnegative().nullable().default(null),resolvedCount:d().int().nonnegative().nullable().default(null),captureVersion:d().int().positive().nullable().default(null),retrievalStatus:Ze([f0,de()]).default(null),retrievalContract:Ze([g0,de()]).default(null),competitorOverlap:y(o()).default([]),citedCompetitorDomains:y(o()).default([]),mentionedCompetitorDomains:y(o()).default([]),recommendedCompetitors:y(o()).default([]),matchedTerms:y(o()).default([]),groundingSources:y(Bd).default([]),searchQueries:y(o()).default([]),model:o().nullable().optional(),servedModel:o().nullable().optional(),location:o().nullable().optional(),requestedContext:cn.nullable().optional(),supportedContext:cP.nullable().optional(),createdAt:o()});m({snapshots:y(TS),total:d().int().nonnegative()});const uP=m({queryId:o().nullable(),query:o().nullable(),run1State:_i.nullable(),run2State:_i.nullable(),run1AnswerMentioned:N().nullable(),run2AnswerMentioned:N().nullable(),run1VisibilityState:dd.nullable(),run2VisibilityState:dd.nullable(),run1MentionState:nc.nullable().optional(),run2MentionState:nc.nullable().optional(),changed:N(),visibilityChanged:N()});m({run1:o(),run2:o(),diff:y(uP)});const dP=lP.extend({snapshots:y(TS).optional()}),mP=m({totalRuns:d().int().nonnegative(),run:dP.nullable()});m({id:o(),projectId:o().nullable().optional(),actor:o(),action:o(),entityType:o(),entityId:o().nullable().optional(),diff:fn().optional(),userAgent:o().nullable().optional(),actorSession:o().nullable().optional(),requestId:o().nullable().optional(),credentialId:o().nullable().optional(),createdAt:o()});const RS=A(["queued","running","completed","partial","failed"]);RS.enum;const ES=A(["not_answer_visibility","not_plan_run","scoped_or_probe","status_not_partial","plan_revision_changed","manifest_unreadable","model_not_frozen","model_retired","provider_not_in_plan","provider_nothing_missing","provider_not_configured","too_old","superseded","quota_insufficient"]);ES.enum;m({providers:y(gt).min(1).optional(),dryRun:N().optional()}).strict();const zS=m({id:o(),runId:o(),projectId:o(),status:RS,providers:y(o()),expected:d().int().nonnegative(),filled:d().int().nonnegative(),error:o().nullable(),createdAt:o(),startedAt:o().nullable(),finishedAt:o().nullable()}),pP=m({runId:o(),status:sa,planned:N(),readable:N(),expected:d().int().nonnegative(),executed:d().int().nonnegative(),missing:d().int().nonnegative(),missingByProvider:Ue(o(),d().int().nonnegative()),fillable:N(),refusal:m({code:ES,message:o()}).nullable(),latestFill:zS.nullable()}),hP=A(["queued","already-complete","dry-run"]);m({outcome:hP,completeness:pP,fill:zS.nullable()});const DS=A(["all","api","browser"]);DS.enum;const fP=A(["yes","no","unknown","not-mentioned"]),px=y(o().min(1)),hx=m({companyName:o().min(1),domain:o().min(1),queries:px.optional(),phrases:px.optional(),competitors:y(o().min(1)).optional(),providers:y(o().trim().min(1)).min(1).optional().describe("Configured provider names to use for both answers and analysis. Omit to use all providers matching providerMode."),providerMode:DS.optional().describe("Filter providers by transport; defaults to all. Browser-only selection requires manual queries and uses no API provider for analysis.")}).superRefine((e,n)=>{e.queries!==void 0&&e.phrases!==void 0&&n.addIssue({code:"custom",message:"Use queries; phrases is accepted only as a legacy alias when queries is omitted",path:["phrases"]})});hx.safeExtend({competitors:hx.shape.competitors.default([])});const gP=m({name:o(),count:d().int().nonnegative()}),yP=m({id:o(),name:o(),weight:d(),score:d(),findings:y(m({type:o(),message:o()})).default([]),recommendations:y(o()).default([])}),bP=m({url:o(),finalUrl:o(),auditedAt:o(),overallScore:d(),summary:o(),factors:y(yP).default([])}),vP=m({industry:o(),summary:o(),services:y(o()).default([]),categoryTerms:y(o()).default([])}),xP=m({provider:o(),displayName:o(),model:o().nullable().optional(),mentioned:N(),cited:N(),describedAccurately:fP,accuracyNotes:o().nullable().optional(),incorrectClaims:y(o()).default([]),recommendedCompetitors:y(o()).default([]),citedDomains:y(o()).default([]),groundingSources:y(Bd).default([]),searchQueries:y(o()).default([]),answerText:o(),error:o().nullable().optional()}),wP=m({query:o(),providerResults:y(xP).default([])}),kP=m({totalQueries:d().int().nonnegative(),totalProviders:d().int().nonnegative(),totalComparisons:d().int().nonnegative(),mentionCount:d().int().nonnegative(),citationCount:d().int().nonnegative(),topCompetitors:y(gP).default([]),visibilityGap:o(),whatThisMeans:y(o()).default([]),recommendedActions:y(o()).default([])});m({companyName:o(),domain:o(),homepageUrl:o(),generatedAt:o(),queries:y(o()).default([]),competitors:y(o()).default([]),profile:vP,audit:bP,queryResults:y(wP).default([]),summary:kP});const OS=Ze([sa,de()]),R0=A(["pass","partial","fail"]);R0.enum;const IS=A(["up","down","flat"]);IS.enum;const SP=m({id:o(),name:o(),weight:d(),avgScore:d(),status:R0,pagesPassing:d().int().nonnegative(),pagesPartial:d().int().nonnegative(),pagesFailing:d().int().nonnegative()}),jP=m({factorId:o(),factorName:o(),avgScore:d(),affectedPages:d().int().nonnegative(),totalPages:d().int().nonnegative(),affectedPct:d().int().nonnegative(),topRecommendations:y(o()).default([])});m({project:o(),hasData:N(),runId:o().nullable(),runStatus:OS,sitemapUrl:o().nullable(),auditedAt:o().nullable(),aggregateScore:d(),pagesDiscovered:d().int().nonnegative(),pagesAudited:d().int().nonnegative(),pagesSkipped:d().int().nonnegative(),pagesErrored:d().int().nonnegative(),deltaScore:d().nullable(),trend:Ze([IS,de()]),previousScore:d().nullable(),previousAuditedAt:o().nullable(),factors:y(SP).default([]),crossCuttingIssues:y(jP).default([]),prioritizedFixes:y(o()).default([])});const PS=m({id:o(),name:o(),weight:d(),score:d()}),AP=m({url:o(),overallScore:d(),status:A(["success","error"]),error:o().nullable().optional(),factors:y(PS).default([])});m({project:o(),runId:o().nullable(),auditedAt:o().nullable(),total:d().int().nonnegative(),pages:y(AP).default([])});const CP=m({runId:o(),auditedAt:o(),aggregateScore:d(),pagesAudited:d().int().nonnegative()});m({project:o(),points:y(CP).default([])});const NP=A(["disabled","complete","partial","unavailable"]);NP.enum;const _P=m({pagesDiscovered:d().int().nonnegative(),pagesFetched:d().int().nonnegative(),pagesEligible:d().int().nonnegative(),edges:d().int().nonnegative(),findings:d().int().nonnegative()}),TP=qe("state",[m({state:z("unavailable")}),m({state:z("disabled")}),m({state:z("complete"),checked:d().int().nonnegative(),found:d().int().nonnegative(),unverified:d().int().nonnegative()}),m({state:z("partial"),checked:d().int().nonnegative(),found:d().int().nonnegative(),unverified:d().int().nonnegative()})]);m({project:o(),hasCrawlData:N(),legacyAuditAvailable:N(),runId:o().nullable(),runStatus:OS,requestedRootUrl:o().nullable(),rootUrl:o().nullable(),crawlSchemaVersion:o().nullable().optional(),engineVersion:o().nullable().optional(),normalizationVersion:o().nullable().optional(),indexabilityVersion:o().nullable().optional(),linkScoreVersion:o().nullable().optional(),effectiveOptions:Ue(o(),fn()).default({}),complete:N(),termination:o().nullable(),detailsAvailable:N(),counts:_P,deadLinks:TP});A(["complete","unknown","max-pages","max-edges","max-fetches","max-duration","max-bytes","max-page-bytes","max-depth","max-links-per-page","max-query-variants","max-sitemap-fanout","max-sitemap-urls","root-host-redirect"]);const Ld=A(["eligible","hidden","resource","redirect","failed","unchecked"]),IY=Ld.enum,PY=Ld.options,or={discovered:"discovered",robotsBlocked:"robots-blocked",html:"html",redirect:"redirect",nonHtml:"non-html",fetchError:"fetch-error"},Pu={indexable:"indexable",noindex:"noindex",blocked:"blocked",unknown:"unknown"},RP={robotsDisallow:"robots-disallow",redirectTerminal:"redirect-terminal",metaRobotsNoindex:"meta-robots-noindex",xRobotsNoindex:"x-robots-noindex",canonicalToOther:"canonical-to-other",notHtmlOrUnavailable:"not-html-or-unavailable"};function EP(e){return e.indexabilityReasons?.some(n=>n===RP.canonicalToOther)===!0||e.nodeKey!==void 0&&e.canonicalNodeKey!==null&&e.canonicalNodeKey!==void 0&&e.canonicalNodeKey!==e.nodeKey}function qY(e){switch(e.fetchState){case or.fetchError:return"failed";case or.discovered:return"unchecked";case or.nonHtml:return"resource";case or.redirect:return"redirect";case or.robotsBlocked:return"hidden";case or.html:break;default:return"unchecked"}if(EP(e))return"hidden";switch(e.indexabilityState){case Pu.indexable:return"eligible";case Pu.noindex:case Pu.blocked:return"hidden";case Pu.unknown:default:return"unchecked"}}const MY=15,zP=A(["navigation","content","unknown"]);zP.enum;const DP=m({navigation:d().int().nonnegative(),content:d().int().nonnegative(),unknown:d().int().nonnegative()}),qS=A(["placement","ubiquity","unmeasured"]);qS.enum;const Vd=A(["applied","applied-placement","applied-placement-with-ubiquity","applied-placement-partial","unavailable-too-few-pages","unavailable-legacy-scan"]);Vd.enum;function BY(e){switch(e){case"applied":case"applied-placement":case"applied-placement-with-ubiquity":case"applied-placement-partial":return!0;case"unavailable-too-few-pages":case"unavailable-legacy-scan":return!1}}const $d=A(["all","content","template"]);$d.enum;const OP=A(["anchor","redirect","canonical","link"]);OP.enum;const ac=m({nodeKey:o(),url:o(),finalUrl:o().nullable(),path:o(),parentPath:o(),discoverySource:o(),fetchState:o(),httpStatus:d().int().nullable(),canonicalUrl:o().nullable(),indexabilityState:o(),indexabilityReasons:y(o()).default([]),auditState:o(),auditScore:d().nullable(),inventoryEligible:N(),depth:d().int().nullable(),inboundUniqueEdges:d().int().nonnegative(),outboundUniqueEdges:d().int().nonnegative(),inboundOccurrences:d().int().nonnegative(),outboundOccurrences:d().int().nonnegative(),linkScoreRaw:d().nullable(),linkScoreNormalized:d().nullable(),healthState:Ld}),IP=m({type:A(["found","missing","info","timeout","unreachable"]),code:o().min(1),message:o().min(1)}),fx=PS.extend({status:R0,applicable:N().nullable(),findings:y(IP).default([]),recommendations:y(o()).default([])}),gx=m({id:o().min(1),severity:A(["critical","warning"]),detail:o().min(1),recommendation:o().min(1)}),qu=m({project:o(),runId:o(),complete:N(),termination:o().nullable()}),yx=m({nodeKey:o(),url:o(),auditState:o()});qe("state",[m({state:z("no-crawl"),project:o(),runId:de()}),qu.extend({state:z("details-unavailable")}),qu.extend({state:z("not-found")}),qu.merge(yx).extend({state:z("not-audited"),auditScore:de(),factors:y(fx).length(0).default([]),criticalDefects:y(gx).length(0).default([])}),qu.merge(yx).extend({state:z("ready"),auditScore:d(),evidenceState:A(["complete","scores-only"]),factors:y(fx).default([]),criticalDefects:y(gx).default([])})]);const PP=A(["applied","unavailable-legacy-scan"]);m({project:o(),hasCrawlData:N(),runId:o().nullable(),total:d().int().nonnegative(),nextCursor:o().nullable(),healthStateFilter:Ze([PP,de()]).default(null),pages:y(ac).default([])});const qP=m({path:o(),url:o().nullable(),hasPage:N(),pageCount:d().int().positive(),inventoryEligibleCount:d().int().nonnegative(),fetchedCount:d().int().nonnegative()});m({project:o(),hasCrawlData:N(),runId:o().nullable(),parentPath:o(),nextCursor:o().nullable(),children:y(qP).default([])});const lo=m({edgeKey:o(),sourceNodeKey:o(),sourceUrl:o(),targetNodeKey:o().nullable(),targetUrl:o(),relation:o(),internal:N(),followable:N(),occurrences:d().int().positive(),followableOccurrences:d().int().nonnegative(),nofollowOccurrences:d().int().nonnegative(),anchors:y(o()).default([]),isTemplate:Ze([N(),de()]),templateRatio:Ze([d(),de()]),templateSource:qS,placementOccurrences:Ze([DP,de()])}),MP=m({nodeKey:o(),url:o(),path:o(),depth:d().int().nonnegative().nullable(),indexabilityState:o(),fetchState:o(),auditState:o(),auditScore:d().nullable(),inventoryEligible:N(),inboundUniqueEdges:d().int().nonnegative(),outboundUniqueEdges:d().int().nonnegative(),linkScoreNormalized:d().nullable(),healthState:Ld,x:d(),y:d()}),BP=m({edgeKey:o(),sourceNodeKey:o(),targetNodeKey:o(),followable:N(),occurrences:d().int().positive(),isTemplate:N()}),LP=A(["no-crawl","legacy-snapshot","details-unavailable","layout-failed","empty-crawl"]),VP=qe("state",[m({state:z("ready"),version:o().min(1),computedAt:o().min(1),templateLinksExcluded:N()}),m({state:z("unavailable"),version:de(),reason:LP})]);m({project:o(),hasCrawlData:N(),runId:o().nullable(),rootNodeKey:o().nullable(),layout:VP,templateDetection:Vd,linkKind:$d,totalNodes:d().int().nonnegative(),totalEdges:d().int().nonnegative(),totalTemplateEdges:d().int().nonnegative(),totalContentEdges:d().int().nonnegative(),nodes:y(MP).default([]),edges:y(BP).default([]),omittedNodes:d().int().nonnegative(),omittedEdges:d().int().nonnegative(),sampled:N()});const LY=2e4,VY=5e4,$P=A(["focus","inbound","outbound","both","transitive"]),UP=ac.extend({distance:d().int().nonnegative(),relationToFocus:$P});m({project:o(),hasCrawlData:N(),runId:o().nullable(),complete:N(),termination:o().nullable(),state:A(["no-crawl","details-unavailable","ready"]),focusNodeKey:o().nullable(),focusUrl:o().nullable(),hops:d().int().min(0).max(3),totalNodes:d().int().nonnegative(),totalEdges:d().int().nonnegative(),nodes:y(UP).default([]),edges:y(lo).default([]),omittedNodes:d().int().nonnegative(),omittedEdges:d().int().nonnegative(),countAccuracy:A(["exact","lower-bound"]),truncated:N()});const bx=m({nodeKey:o(),url:o(),path:o()});m({project:o(),runId:o().nullable(),complete:N(),termination:o().nullable(),state:A(["no-crawl","details-unavailable","found","unreachable","truncated"]),from:bx.nullable(),to:bx.nullable(),maxDepth:d().int().positive(),visitedNodes:d().int().nonnegative(),nodes:y(ac).default([]),edges:y(lo).default([])});const MS=A(["added","removed","changed"]),GP=m({entity:z("page"),change:MS,key:o(),changedFields:y(o()).default([]),before:ac.nullable(),after:ac.nullable()}),KP=m({entity:z("link"),change:MS,key:o(),changedFields:y(o()).default([]),before:lo.nullable(),after:lo.nullable()}),HP=qe("entity",[GP,KP]),vx=m({added:d().int().nonnegative(),removed:d().int().nonnegative(),changed:d().int().nonnegative()}),QP=m({scope:A(["all","pages","links"]),change:A(["all","added","removed","changed"])});qe("state",[m({project:o(),state:z("unavailable"),reason:A(["no-crawl","insufficient-history","details-unavailable","partial-not-comparable"]),fromRunId:o().nullable(),toRunId:o().nullable()}),m({project:o(),state:z("incompatible"),reason:z("incompatible-versions"),fromRunId:o(),toRunId:o(),mismatchedVersions:y(o()).min(1)}),m({project:o(),state:z("ready"),fromRunId:o(),toRunId:o(),versions:m({crawlSchema:o(),normalization:o(),indexability:o(),linkScore:o()}),filters:QP,summaryState:A(["exact","omitted-on-continuation"]),summary:m({pages:vx,links:vx}).nullable(),total:d().int().nonnegative().nullable(),nextCursor:o().nullable(),changes:y(HP).default([])})]);m({project:o(),hasCrawlData:N(),runId:o().nullable(),total:d().int().nonnegative(),nextCursor:o().nullable(),templateDetection:Vd,linkKind:$d,edges:y(lo).default([])});m({project:o(),hasCrawlData:N(),runId:o().nullable(),nodeKey:o().nullable(),url:o().nullable(),templateDetection:Vd,linkKind:$d,inbound:y(lo).default([]),outbound:y(lo).default([]),inboundTruncated:N(),outboundTruncated:N()});const xx=m({findingKey:o(),severity:o(),sourceNodeKey:o().nullable(),sourceUrl:o().nullable(),targetNodeKey:o().nullable(),targetUrl:o().nullable(),evidence:Ue(o(),fn()).default({})});qe("state",[m({project:o(),runId:o().nullable(),state:z("unavailable"),legacyAuditAvailable:N()}),m({project:o(),runId:o(),state:z("disabled"),checkDeadLinks:z(!1)}),m({project:o(),runId:o(),state:z("complete"),checkDeadLinks:z(!0),checked:d().int().nonnegative(),found:d().int().nonnegative(),unverified:d().int().nonnegative(),total:d().int().nonnegative(),nextCursor:o().nullable(),deadLinks:y(xx).default([])}),m({project:o(),runId:o(),state:z("partial"),checkDeadLinks:z(!0),checked:d().int().nonnegative(),found:d().int().nonnegative(),unverified:d().int().nonnegative(),total:d().int().nonnegative(),nextCursor:o().nullable(),deadLinks:y(xx).default([])})]);const $Y=1e3,UY=10,BS=100;m({sitemapUrl:o().url().optional(),limit:d().int().positive().max(2e3).optional(),maxPages:d().int().positive().max(5e4).optional(),maxEdges:d().int().positive().max(1e6).optional(),maxDepth:d().int().min(0).max(100).optional(),checkDeadLinks:N().default(!1)});m({runId:o(),status:sa});const FP=m({runId:o(),status:sa,createdAt:o(),startedAt:o().nullable(),finishedAt:o().nullable(),hasCrawlData:N()});m({project:o(),scans:y(FP).default([])});const ZP=A(["queued","discovering","checking","arranging-map","completed","partial","failed","cancelled"]),YP=m({state:A(["pending","ready","unavailable"]),layoutVersion:o().nullable(),failureCode:o().nullable(),updatedAt:o().nullable()}),XP=m({id:o(),state:o(),pagesDiscovered:d().int().nonnegative(),pagesFetched:d().int().nonnegative(),pagesEligible:d().int().nonnegative(),pagesErrored:d().int().nonnegative(),edgesDiscovered:d().int().nonnegative(),lastUpdatedAt:o(),startedAt:o().nullable(),finishedAt:o().nullable(),error:o().nullable()});m({project:o(),runId:o(),status:sa,phase:ZP,attempt:XP.nullable(),layout:YP,error:o().nullable()});const WP=A(["waiting","collecting","terminal"]),JP=m({nodeKey:o(),url:o(),auditScore:d(),checksNeedingAttention:d().int().nonnegative()});m({project:o(),runId:o(),status:sa,state:WP,attemptId:o().nullable(),pagesAudited:d().int().nonnegative(),updatedAt:o().nullable(),examples:y(JP).max(12).default([])});const eq=m({basis:A(["tracked","observed"]).nullable(),availability:A(["measured","not-measured","unavailable"]),reason:A(["select-query-class","no-competitors","insufficient-observed","no-answers","no-mentions","unavailable"]).nullable()}),E0=eq.partial().shape;function GY(e){switch(e){case"select-query-class":return"Select a query class.";case"no-competitors":return"No competitors configured.";case"insufficient-observed":return"Requires 3 observed competitors mentioned in at least 3 answers each.";case"no-answers":return"No answer text in scope.";case"no-mentions":return"No brands mentioned in scope.";case"unavailable":return"Competitor evidence is unavailable.";default:return""}}function tq(e,n){const i=n?.availability==="unavailable"?"Unavailable":n?.availability==="not-measured"||e===null?"Not measured":`${e.toFixed(1)}%`;return n?.basis?`${i} · ${n.basis} competitors`:i}function KY(e,n,i){return`Share of voice · ${n} queries: ${tq(e,i)}${i?.measurementScope==="all-markets"?" · all markets":""}`}const z0=A(["competitor","directory","social","forum","news","reference","blog","ecommerce","video","academic","other"]),Zu=z0.enum,D0=A(["cited","aspirational","wasted-surface"]),wx=D0.enum;wx.cited,wx.aspirational;const Ud=A(["direct-competitor","ota-aggregator","editorial-media","other","unknown"]),nq=Ud.enum;nq["direct-competitor"];const Gd=A(["queued","seeding","probing","completed","failed"]);Gd.enum;const LS=m({domain:o().min(1),hits:d().int().positive(),competitorType:Ud.default("unknown")}),aq=m({id:o(),sessionId:o(),projectId:o(),query:o(),bucket:D0.nullable().default(null),citationState:_i,citedDomains:y(o()).default([]),answerMentioned:N().nullable().default(null),createdAt:o()}),iq=m({id:o(),projectId:o(),status:Gd,icpDescription:o().nullable().optional(),seedProvider:o().nullable().optional(),seedCountRaw:d().int().nullable().optional(),seedCount:d().int().nullable().optional(),seedFromAnswerCount:d().int().nullable().optional(),seedFromGroundingCount:d().int().nullable().optional(),seedBrandFilteredCount:d().int().nullable().optional(),buyerDescription:o().nullable().optional(),locations:y(cn).nullable().optional(),seedRawCandidates:y(o()).nullable().optional(),dedupClusterMinSims:y(d()).nullable().optional(),dedupBandPairFraction:d().nullable().optional(),dedupPairsTotal:d().int().nullable().optional(),seedProviders:y(o()).nullable().optional(),seedProviderCounts:Ue(o(),d().int()).nullable().optional(),canonicalCount:d().int().nullable().optional(),dedupThreshold:d().nullable().optional(),probeCount:d().int().nullable().optional(),citedCount:d().int().nullable().default(null),aspirationalCount:d().int().nullable().default(null),wastedCount:d().int().nullable().default(null),competitorMap:y(LS).default([]),warning:o().nullable().optional(),error:o().nullable().optional(),startedAt:o().nullable().optional(),finishedAt:o().nullable().optional(),createdAt:o()});iq.extend({probes:y(aq).default([])});const sq=500,oq=8,rq=["gemini","openai"],lq=A(rq);m({icpDescription:o().min(1).optional(),buyerDescription:o().min(1).optional(),seedProviders:y(lq).min(1).transform(e=>[...new Set(e)].sort()).optional(),dedupThreshold:d().min(0).max(1).optional(),maxProbes:d().int().positive().max(sq).optional(),probeConcurrency:d().int().min(1).max(oq).optional(),locations:y(o().min(1)).optional()});m({buckets:y(D0).min(1).optional(),includeCompetitors:N().optional(),competitorTypes:y(Ud).min(1).optional()});m({sessionId:o(),projectId:o(),status:Gd,queriesByBucket:m({cited:y(o()),aspirational:y(o()),"wasted-surface":y(o())}),suggestedCompetitors:y(LS)});m({sessionId:o(),projectId:o(),promoted:m({queries:y(o()),competitors:y(o())}),skipped:m({queries:y(o()),competitors:y(o())})});Ze([z("cli"),o().regex(/^discovery:.+$/)]);const cq=m({query:o().min(1),probeHits:d().int().positive()}),uq=m({rawCandidates:d().int().nonnegative(),admitted:d().int().nonnegative(),rejected:m({belowFloor:d().int().nonnegative(),length:d().int().nonnegative(),navigational:d().int().nonnegative(),duplicate:d().int().nonnegative(),offAnchor:d().int().nonnegative(),semanticDuplicate:d().int().nonnegative()})});m({sessionId:o(),projectId:o(),provider:o(),status:Gd,minProbeHits:d().int().positive(),anchorApplied:N(),semanticNoveltyApplied:N(),candidates:y(cq),stats:uq});const O0=A(["own","direct-competitor","ota-aggregator","editorial-media","other"]);O0.enum;const Kd=A(["7d","30d","90d","all"]),kx=A(["improving","declining","stable"]),dq=A(["mentioned","cited"]);dq.enum;const mf=m({citationRate:d(),cited:d().int(),total:d().int(),mentionRate:d(),mentionedCount:d().int()}),Dr=o().trim().min(1),mq=y(Dr).min(1).superRefine((e,n)=>{for(let i=1;i<e.length;i+=1)e[i-1]>=e[i]&&n.addIssue({code:"custom",message:"mixed model IDs must be sorted and unique",path:[i]})}),co=qe("status",[m({status:z("known"),model:Dr}),m({status:z("unknown")}),m({status:z("mixed"),models:mq,includesUnknown:N()})]),pq=m({observedAt:o(),bucketStartDate:o(),from:co,to:co,fromPreWindowAnchor:N().optional(),anchorObservedAt:o().optional()}),VS=m({latestObservation:m({observedAt:o(),state:co}),events:y(pq),eventTotal:d().int().nonnegative().optional(),anchorUnavailable:N().optional()}),hq=Ue(o(),VS),fq=VS.extend({latestServedModelIds:y(Dr).default([])}),gq=Ue(o(),fq),yq=m({observedAt:o(),configured:co,served:co}),bq=m({scope:A(["non-brand","pooled"]),rate:d().nullable(),projectMentionSnapshots:d().int().nonnegative(),competitorMentionSnapshots:d().int().nonnegative()}),vq=m({startDate:o(),endDate:o(),dataStartDate:o(),dataEndDate:o(),sweepCount:d().int().nonnegative(),citationRate:d(),cited:d().int(),total:d().int(),queryCount:d().int(),mentionRate:d(),mentionedCount:d().int(),mentionShare:bq,byProvider:Ue(o(),mf),modelEvidenceByProvider:Ue(o(),co).default({}),basketRevision:d().int().nullable().default(null)}),xq=m({revision:d().int(),at:o(),added:y(o()),removed:y(o())}),wq=m({date:o(),delta:d().int(),label:o()}),kq=m({at:o(),identity:y2});m({window:Kd,mentionShareScope:A(["non-brand","pooled"]),buckets:y(vq),overall:mf,byProvider:Ue(o(),mf),trend:kx,mentionTrend:kx,queryChanges:y(wq),basketChanges:y(xq).default([]),executionIdentityChanges:y(kq).default([]),referenceBasketRevision:d().int().nullable().default(null),modelAttribution:hq.default({}),servedModelAttribution:gq.default({}),modelServiceMismatch:Ue(o(),yq).default({}),modelPointerChanges:Ue(o(),dO).default({})});const Sx=m({category:z0,label:o(),count:d().int(),percentage:d(),topDomains:y(m({domain:o(),count:d().int()}))}),Sq=m({domain:o(),count:d().int(),percentage:d(),answerShare:d().optional(),category:z0,label:o(),surfaceClass:O0}),jq=m({surfaceClass:O0,label:o(),count:d().int(),percentage:d(),domainCount:d().int()}),jx=m({totalCitedSlots:d().int(),answerTotal:d().int().optional(),answersWithSources:d().int().optional(),domainTotal:d().int(),entries:y(Sq),truncatedDomainCount:d().int(),truncatedCitedSlots:d().int(),bySurfaceClass:y(jq)}),Aq=A(["measurement-plan","query-text"]);m({runId:o().trim().min(1).optional(),queryClass:Wf.optional(),includeByQuery:A(["true","false","1","0"]).optional()});m({ranked:jx,byProvider:Ue(o(),jx),providersWithoutSources:y(o()).optional(),answerTotal:d().int().optional(),runCount:d().int().optional(),unclassifiedAnswers:d().int().optional(),filters:m({runId:o().nullable(),queryClass:Wf,queryClassBasis:Ze([Aq,de()]),includeByQuery:N()}).optional(),runId:o(),window:Kd,limit:d().int().nullable(),overall:y(Sx),byQuery:Ue(o(),y(Sx)).optional()});const Cq=A(["own","direct-competitor","ota-aggregator","editorial-media","other","unknown"]),Nq=qe("kind",[m({kind:z("project")}).strict(),m({kind:z("group"),groupKey:o().trim().min(1)}).strict(),m({kind:z("all-markets")}).strict()]),$S=A(["all","branded","non-brand"]),US=A(["project","all-markets"]);m({window:Kd.optional(),groupKey:o().trim().min(1).optional(),scope:US.optional(),provider:o().trim().min(1).optional(),model:Dr.optional(),groupBy:z("model").optional(),queryClass:$S.optional(),location:o().trim().min(1).optional(),runId:o().trim().min(1).optional()}).strict().superRefine((e,n)=>{e.scope==="all-markets"&&e.groupKey!==void 0&&n.addIssue({code:"custom",path:["groupKey"],message:"groupKey cannot be combined with scope=all-markets"}),e.model!==void 0&&e.provider===void 0&&n.addIssue({code:"custom",path:["provider"],message:"provider is required when filtering by model"})});const ds=m({domain:o().trim().min(1),label:o().trim().min(1),surfaceClass:Cq,pinned:N(),mentionCount:d().int().nonnegative(),shareOfVoice:d().min(0).max(100).nullable(),citationCount:d().int().nonnegative(),answeredResults:d().int().nonnegative(),firstSeenAt:o().datetime().nullable(),lastSeenAt:o().datetime().nullable(),sampleUrls:y(o().url()).max(3)}).strict(),GS=m({answeredResults:d().int().nonnegative(),sourceResults:d().int().nonnegative(),missingAnswerTextResults:d().int().nonnegative(),mentionCredits:d().int().nonnegative(),incompleteSourceResults:d().int().nonnegative(),excludedProbeResults:d().int().nonnegative(),excludedNonCompletedResults:d().int().nonnegative()}).strict(),_q=50,Tq=m({...E0,comparison:y(m({domain:o(),mentions:d().int().nonnegative()})).optional(),observedNames:y(m({name:o(),answerCount:d().int().nonnegative()})).optional(),observedNamesTotal:d().int().nonnegative().optional(),provider:o().trim().min(1),model:Dr.nullable(),servedModels:co,snapshotCount:d().int().positive(),project:ds,pinned:y(ds),observed:y(ds),otherSources:y(ds),evidence:GS,truncated:N()}).strict(),Rq=m({basis:z("requested-model"),groups:y(Tq).max(_q),totalGroups:d().int().nonnegative(),truncated:N()}).strict();m({...E0,comparison:y(m({domain:o(),mentions:d().int().nonnegative()})).optional(),observedNames:y(m({name:o(),answerCount:d().int().nonnegative()})).optional(),observedNamesTotal:d().int().nonnegative().optional(),window:Kd,scope:Nq,project:ds,pinned:y(ds),observed:y(ds),otherSources:y(ds),evidence:GS,modelComparison:Rq.optional(),marketState:m({activeRevision:d().int().positive(),draft:m({etag:o().trim().min(1),pendingCompetitorDomains:y(o().trim().min(1))}).strict().nullable()}).strict().nullable(),filters:m({scope:US,groupKey:o().nullable(),provider:o().nullable(),model:Dr.optional(),groupBy:z("model").optional(),queryClass:$S,location:o().nullable(),runId:o().nullable()}).strict(),truncated:N()}).strict();const I0=m({total:d().int(),checked:d().int(),mentioned:d().int(),cited:d().int(),mentionRate:d().nullable(),citedRate:d().nullable()}),KS=I0.extend({provider:o(),firstObserved:o(),lastObserved:o()}),Eq=I0.extend({queryId:o().nullable(),query:o(),firstObserved:o(),lastObserved:o(),providers:y(KS).optional()}),zq=m({since:o().nullable(),until:o().nullable(),lastRuns:d().int().nullable(),runCount:d().int()}),Dq=A(["provider"]),pf=m({domain:o(),mentions:d().int()}),HS=m({...E0,measurementScope:A(["project","all-markets"]).optional(),queryClass:A(["branded","non-brand","pooled"]),percent:d().nullable(),competitorCount:d().int().nonnegative(),projectMentions:d().int(),competitorMentions:d().int(),snapshotsWithAnswerText:d().int(),perCompetitor:y(pf)});m({project:o(),groupBy:Dq.optional(),window:zq,totals:I0,byProvider:y(KS).optional(),queries:y(Eq),shareOfVoice:HS.optional()});const Oq=A(["within-noise","moved","insufficient-data","model-discontinuous","model-unknown"]),Iq=A(["up","down","flat"]),Ax=m({availability:A(["available","no-observations","no-competitive-frame"]),point:d().nullable(),ciLow:d().nullable(),ciHigh:d().nullable(),numerator:d().int(),denominator:d().int()}),Pq=A(["mention-share-of-voice","cited-share-of-voice","mention-rate","cited-rate"]),qq=m({key:Pq,label:o(),queryClass:A(["all","non-brand","pooled"]),driftRobust:N(),from:Ax,to:Ax,rateRatio:d().nullable(),direction:Ze([Iq,de()]),verdict:Oq}),Cx=m({month:o(),since:o(),until:o(),runCount:d().int(),lowRunCount:N()}),Mq=m({queryCount:d().int(),excludedFromOnly:d().int(),excludedToOnly:d().int(),providers:y(o()),excludedProviders:y(o())}),Bq=m({provider:o(),fromModels:y(o()),toModels:y(o())}),Lq=A(["included","model-discontinuous","model-unknown"]),Vq=m({provider:o(),status:Lq,fromModels:y(o()),toModels:y(o())}),$q=A(["comparable","model-discontinuous","model-unknown","insufficient-data"]),Uq=m({status:$q,comparedProviders:y(o()),providers:y(Vq)}),Gq=m({provider:o(),from:m({checked:d().int(),mentioned:d().int(),cited:d().int()}),to:m({checked:d().int(),mentioned:d().int(),cited:d().int()})}),Kq=m({from:m({count:d().int(),of:d().int()}),to:m({count:d().int(),of:d().int()})});m({project:o(),from:Cx,to:Cx,basket:Mq,metrics:y(qq),queriesMentioned:Kq,byProvider:y(Gq),modelChanges:y(Bq),continuity:Uq,competitors:m({from:y(pf),to:y(pf)})});A(["json","csv"]);const Hq=m({runId:o(),runKind:z("answer-visibility"),runStatus:sa,runTrigger:_0,runCreatedAt:o(),runStartedAt:o().nullable(),runFinishedAt:o().nullable(),snapshotId:o(),snapshotCreatedAt:o(),queryId:o().nullable(),query:o().nullable(),provider:o(),model:o().nullable(),location:o().nullable(),citationState:_i,cited:N(),answerMentioned:N().nullable(),mentionState:Ze([nc,de()]),citedDomains:y(o()),citedUrls:y(o()).nullable(),captureStatus:Ze([Ed,de()]),sourceCount:d().int().nonnegative().nullable(),resolvedCount:d().int().nonnegative().nullable(),captureVersion:d().int().positive().nullable(),competitorOverlap:y(o()),recommendedCompetitors:y(o()),answerText:o().nullable(),groundingSources:y(Bd),searchQueries:y(o())}),Qq=m({since:o().nullable(),until:o().nullable(),includeProbes:N()});m({schemaVersion:z("canonry.results-export/v1"),generatedAt:o(),project:m({id:o(),name:o(),displayName:o(),canonicalDomain:o(),country:o(),language:o()}),filters:Qq,recordCount:d().int().nonnegative(),records:y(Hq)});m({runIds:y(o().trim().min(1)).max(100).default([]),researchRunIds:y(o().trim().min(1)).max(100).default([]),confirm:N().default(!1)}).strict().superRefine((e,n)=>{e.runIds.length+e.researchRunIds.length===0&&n.addIssue({code:"custom",message:"Select at least one saved run."}),(new Set(e.runIds).size!==e.runIds.length||new Set(e.researchRunIds).size!==e.researchRunIds.length)&&n.addIssue({code:"custom",message:"Run IDs must be unique."})});m({dryRun:N(),runIds:y(o()),researchRunIds:y(o()),querySnapshots:d().int().nonnegative(),researchQueries:d().int().nonnegative(),insights:d().int().nonnegative(),healthSnapshots:d().int().nonnegative()});const Hd=A(["organic","paid"]);Hd.enum;m({id:o(),projectId:o(),propertyId:o(),clientEmail:o(),connected:N(),createdAt:o(),updatedAt:o()});m({date:o(),landingPage:o(),sessions:d(),organicSessions:d(),users:d()});const P0=A(["session","first_user","manual_utm"]),Fq=m({source:o(),medium:o(),trafficClass:Hd,sessions:d(),users:d().optional(),sourceDimension:P0}),Zq=m({source:o(),medium:o(),trafficClass:Hd,sourceDimension:P0,landingPage:o(),sessions:d(),users:d().optional()}),Yq=m({source:o(),medium:o(),sessions:d(),users:d(),channelGroup:o()}),Vl=m({sessions:d(),sharePct:d(),sharePctDisplay:o()}),Xq=m({organic:Vl,social:Vl,direct:Vl,ai:Vl,other:Vl});m({totalSessions:d(),totalOrganicSessions:d(),totalDirectSessions:d(),totalUsers:d().nullable(),topPages:y(m({landingPage:o(),sessions:d(),organicSessions:d(),directSessions:d(),users:d()})),aiReferrals:y(Fq),aiReferralLandingPages:y(Zq),aiSessionsDeduped:d(),aiUsersDeduped:d().optional(),paidAiSessionsDeduped:d(),paidAiUsersDeduped:d().optional(),organicAiSessionsDeduped:d(),organicAiUsersDeduped:d().optional(),aiSessionsBySession:d(),aiUsersBySession:d().optional(),paidAiSessionsBySession:d(),paidAiUsersBySession:d().optional(),organicAiSessionsBySession:d(),organicAiUsersBySession:d().optional(),socialReferrals:y(Yq),socialSessions:d(),socialUsers:d().optional(),channelBreakdown:Xq,organicSharePct:d(),aiSharePct:d(),aiSharePctBySession:d(),paidAiSharePct:d(),paidAiSharePctBySession:d(),organicAiSharePct:d(),organicAiSharePctBySession:d(),directSharePct:d(),socialSharePct:d(),organicSharePctDisplay:o(),aiSharePctDisplay:o(),aiSharePctBySessionDisplay:o(),paidAiSharePctDisplay:o(),paidAiSharePctBySessionDisplay:o(),organicAiSharePctDisplay:o(),organicAiSharePctBySessionDisplay:o(),directSharePctDisplay:o(),socialSharePctDisplay:o(),otherSessions:d(),otherSharePct:d(),otherSharePctDisplay:o(),lastSyncedAt:o().nullable()});m({connected:N(),propertyId:o().nullable(),clientEmail:o().nullable(),authMethod:A(["service-account","oauth"]).nullable(),lastSyncedAt:o().nullable(),createdAt:o().nullable().optional(),updatedAt:o().nullable().optional()});const Wq=m({propertyId:o(),displayName:o(),accountName:o()});m({properties:y(Wq)});m({synced:N(),rowCount:d().int().nonnegative(),aiReferralCount:d().int().nonnegative(),socialReferralCount:d().int().nonnegative(),days:d().int().nonnegative(),requestedDays:d().int().nonnegative(),clamped:N(),syncedAt:o(),measurement:m({acquisition:m({days:d().int().nonnegative(),status:A(["ready","error"]),rowCount:d().int().nonnegative(),error:o().optional()}),leads:m({days:d().int().nonnegative(),status:A(["ready","error","not-configured"]),rowCount:d().int().nonnegative(),attributionScope:A(["landing-page","channel"]).optional(),error:o().optional()})}),syncedComponents:y(o()).optional()});m({date:o(),source:o(),medium:o(),trafficClass:Hd,landingPage:o(),sessions:d(),users:d(),sourceDimension:P0});const Jq=m({source:o(),sessions:d(),paidSessions:d(),organicSessions:d()}),eM=m({date:o(),sessions:d(),paidSessions:d(),organicSessions:d(),bySource:y(Jq)});m({days:y(eM),sources:y(o()),totalSessions:d(),totalPaidSessions:d(),totalOrganicSessions:d()});m({date:o(),source:o(),medium:o(),sessions:d(),users:d(),channelGroup:o()});m({date:o(),sessions:d(),organicSessions:d(),users:d(),usersSource:A(["deduplicated","landing-page-sum"])});m({id:o(),projectId:o(),runId:o().nullable(),overallCitedRate:d(),overallMentionRate:d(),totalPairs:d().int().nonnegative(),citedPairs:d().int().nonnegative(),mentionedPairs:d().int().nonnegative(),providerBreakdown:Ue(o(),m({citedRate:d(),mentionRate:d(),cited:d().int().nonnegative(),mentioned:d().int().nonnegative(),total:d().int().nonnegative()})),createdAt:o(),status:A(["ready","no-data"]),reason:z("no-runs-yet").optional()});const tM=m({view:A(["project","visibility","property","queries","site-health"]),unavailableReason:o().trim().min(1).max(512).optional(),selection:od.optional(),page:m({runId:o().trim().min(1).max(256).optional(),nodeKey:o().trim().min(1).max(2048).optional()}).strict().optional()}).strict().superRefine((e,n)=>{e.page&&e.view!=="site-health"&&n.addIssue({code:"custom",message:"Page context requires Site Health."}),e.selection&&!["visibility","property","queries"].includes(e.view)&&n.addIssue({code:"custom",message:"Measurement selection requires a measurement view."})}),nM=m({maxToolCalls:d().int().min(1).max(100).default(30),timeoutMs:d().int().min(1e3).max(6e5).default(18e4)}).strict(),q0=A(["claude","openai","gemini","zai","deepinfra"]),aM=m({id:q0,label:o(),defaultModel:o(),configured:N(),keySource:A(["config","env"]).nullable()});m({providers:y(aM).default([]),defaultProvider:q0.nullable()});const iM=A(["aero","user","compaction"]);iM.enum;const QS=128;m({key:o().min(1).max(QS),value:o().min(1)});m({key:o().min(1).max(QS)});m({prompt:o().trim().min(1),conversationId:o().min(1).nullable().optional(),provider:q0.optional(),modelId:o().trim().min(1).optional(),scope:A(["all","read-only"]).optional(),profile:A(["default","ads-operator"]).optional(),context:tM.optional(),limits:nM.optional()});const sM=IR({role:o(),content:fn().optional()}),FS=m({id:o(),title:o(),active:N(),modelProvider:o(),modelId:o(),createdAt:o(),updatedAt:o()});FS.extend({messages:y(sM),isStreaming:N()});m({conversations:y(FS),currentConversationId:o().nullable(),nextOffset:d().int().nullable()});m({id:dR()}).strict();m({id:o(),status:z("deleted")});const oM=["status","changes","gaps","insights"],rM=A(oM),lM=m({text:o().optional(),tool:m({name:o(),label:o(),arguments:Ue(o(),fn()),result:fn(),durationMs:d().int().nonnegative()})}),cM=m({id:rM,steps:y(lM),answer:o()});m({project:o(),seededAt:o(),starters:y(cM)});m({offset:ec().int().min(0).default(0),limit:ec().int().min(1).max(100).default(50)}).strict();const Or=A(["commoncrawl","bing-webmaster"]);Or.enum;const M0=A(["queued","downloading","querying","ready","failed"]);M0.enum;m({id:o(),release:o(),status:M0,phaseDetail:o().nullable().optional(),vertexPath:o().nullable().optional(),edgesPath:o().nullable().optional(),vertexSha256:o().nullable().optional(),edgesSha256:o().nullable().optional(),vertexBytes:d().int().nullable().optional(),edgesBytes:d().int().nullable().optional(),projectsProcessed:d().int().nullable().optional(),domainsDiscovered:d().int().nullable().optional(),downloadStartedAt:o().nullable().optional(),downloadFinishedAt:o().nullable().optional(),queryStartedAt:o().nullable().optional(),queryFinishedAt:o().nullable().optional(),error:o().nullable().optional(),createdAt:o(),updatedAt:o()});const uM=m({linkingDomain:o(),numHosts:d().int(),source:Or}),dM=m({projectId:o(),release:o(),targetDomain:o(),totalLinkingDomains:d().int(),totalHosts:d().int(),top10HostsShare:o(),queriedAt:o(),source:Or,excludedLinkingDomains:d().int().optional(),excludedHosts:d().int().optional()});m({source:Or,summary:dM.nullable(),total:d().int(),rows:y(uM)});m({release:o(),totalLinkingDomains:d().int(),totalHosts:d().int(),top10HostsShare:o(),queriedAt:o(),source:Or});const mM=m({source:Or,connected:N(),hasData:N(),latestRelease:o().nullable(),totalLinkingDomains:d().int(),lastSyncedAt:o().nullable()});m({projectId:o(),targetDomain:o(),sources:y(mM),anyConnected:N(),anyData:N()});m({duckdbInstalled:N(),duckdbVersion:o().nullable().optional(),duckdbSpec:o(),pluginDir:o()});m({installed:N(),version:o(),path:o(),alreadyPresent:N()});m({release:o(),vertexUrl:o(),edgesUrl:o(),vertexBytes:d().int().nullable(),edgesBytes:d().int().nullable(),lastModified:o().nullable()});m({release:o(),syncStatus:M0.nullable(),bytes:d().int(),lastUsedAt:o().nullable()});const B0=A(["positive","caution","negative","neutral"]),us=m({label:o(),value:o(),delta:o(),tone:B0,description:o(),tooltip:o().optional(),trend:y(d()),progress:d().optional(),providerCoverage:o().optional()}),Nx=m({projectMentionSnapshots:d().int().nonnegative(),competitorMentionSnapshots:d().int().nonnegative(),perCompetitor:y(m({domain:o(),mentionSnapshots:d().int().nonnegative(),shareOfCompetitiveTotal:d()})),snapshotsWithAnswerText:d().int().nonnegative(),snapshotsTotal:d().int().nonnegative(),score:d().int().min(0).max(100).nullable()}),pM=us.extend({breakdown:Nx,scope:A(["non-brand","pooled"]),branded:Nx}),Eh=m({gained:d().int().nonnegative(),lost:d().int().nonnegative(),tone:B0,hasPreviousRun:N(),gainedQueries:y(o()).optional(),lostQueries:y(o()).optional()}),hM=m({hasPreviousRun:N(),comparable:N(),querySetChanged:N(),previousRunAt:o().nullable(),currentQueryCount:d().int().nonnegative(),previousQueryCount:d().int().nonnegative(),comparableQueryCount:d().int().nonnegative(),addedQueryCount:d().int().nonnegative(),removedQueryCount:d().int().nonnegative(),addedQueries:y(o()),removedQueries:y(o())}),fM=m({id:o(),projectId:o(),runId:o().nullable(),type:A(["regression","gain","opportunity","first-citation","provider-pickup","persistent-gap","competitor-gained","competitor-lost","gbp-lodging-gap","gbp-listing-discrepancy","gbp-cta-gap","gbp-description-missing","gbp-metric-drop","gbp-keyword-drop"]),severity:A(["critical","high","medium","low"]),title:o(),query:o(),provider:o(),recommendation:m({action:o(),target:o().optional(),reason:o()}).optional(),cause:m({cause:o(),competitorDomain:o().optional(),details:o().optional()}).optional(),dismissed:N(),createdAt:o()}),gM=m({id:o(),projectId:o(),runId:o().nullable(),overallCitedRate:d(),overallMentionRate:d(),totalPairs:d().int().nonnegative(),citedPairs:d().int().nonnegative(),mentionedPairs:d().int().nonnegative(),providerBreakdown:Ue(o(),m({citedRate:d(),mentionRate:d(),cited:d().int().nonnegative(),mentioned:d().int().nonnegative(),total:d().int().nonnegative()})),createdAt:o(),status:A(["ready","no-data"]),reason:z("no-runs-yet").optional()});m({project:dz,latestRun:mP,health:gM.nullable(),topInsights:y(fM),queryCounts:m({totalQueries:d().int().nonnegative(),citedQueries:d().int().nonnegative(),notCitedQueries:d().int().nonnegative(),citedRate:d(),mentionedQueries:d().int().nonnegative(),notMentionedQueries:d().int().nonnegative(),mentionRate:d()}),providers:y(m({provider:o(),citedRate:d(),cited:d().int().nonnegative(),total:d().int().nonnegative()})),transitions:m({since:o().nullable(),gained:d().int().nonnegative(),lost:d().int().nonnegative(),emerging:d().int().nonnegative()}),scores:m({mention:us,visibility:us,mentionShare:pM,gapQueries:us,mentionGaps:us,indexCoverage:us,competitorPressure:us,runStatus:us}),movementSummary:Eh,citationMovement:Eh,mentionMovement:Eh,movementComparison:hM,competitors:y(m({id:o(),domain:o(),citationCount:d().int().nonnegative(),totalQueries:d().int().nonnegative(),pressureLabel:A(["None","Low","Moderate","High"]),citedQueries:y(o())})),providerScores:y(m({provider:o(),model:o().nullable(),score:d(),cited:d().int().nonnegative(),total:d().int().nonnegative(),trend:y(d()).optional()})),attentionItems:y(m({id:o(),tone:B0,title:o(),detail:o(),actionLabel:o(),href:o()})),runHistory:y(m({runId:o(),createdAt:o(),citedCount:d().int().nonnegative(),totalCount:d().int().nonnegative(),citationRate:d(),mentionedCount:d().int().nonnegative(),mentionRate:d(),status:o()})),suggestedQueries:m({rows:y(m({query:o(),impressions:d(),clicks:d(),avgPosition:d(),reason:o()})),totalCandidates:d().int().nonnegative(),skippedAlreadyTracked:d().int().nonnegative()}),dateRangeLabel:o(),contextLabel:o()});A(["snapshot","insight"]);const yM=m({kind:z("snapshot"),id:o(),runId:o(),query:o(),provider:o(),model:o().nullable(),citationState:_i,matchedField:A(["answerText","citedDomains","citedUrls","searchQueries","query"]),snippet:o(),createdAt:o()}),bM=m({kind:z("insight"),id:o(),runId:o().nullable(),type:A(["regression","gain","opportunity","first-citation","provider-pickup","persistent-gap","competitor-gained","competitor-lost","gbp-lodging-gap","gbp-listing-discrepancy","gbp-cta-gap","gbp-description-missing","gbp-metric-drop","gbp-keyword-drop"]),severity:A(["critical","high","medium","low"]),title:o(),query:o(),provider:o(),matchedField:A(["title","query","recommendation","cause"]),snippet:o(),dismissed:N(),createdAt:o()}),vM=qe("kind",[yM,bM]);m({query:o(),totalHits:d().int().nonnegative(),truncated:N(),hits:y(vM)});const ZS=A(["create","expand","refresh","add-schema"]);ZS.enum;function xM(e){switch(e){case"create":return"Create";case"expand":return"Expand";case"refresh":return"Refresh";case"add-schema":return"Add schema"}}const YS=A(["gsc","competitor-evidence","both"]);YS.enum;const XS=A(["high","medium","low"]);XS.enum;function wM(e){switch(e){case"high":return"High";case"medium":return"Medium";case"low":return"Low"}}const kM=A(["blog-post","comparison","listicle","how-to","guide","glossary"]);kM.enum;const WS=A(["proposed","briefed","payload-generated","draft-created","published","validated","dismissed"]);WS.enum;const L0=A(["ownable","ceded"]),HY=L0.enum;function QY(e){switch(e){case"ownable":return"Ownable";case"ceded":return"Ceded"}}const SM=m({url:o(),gscImpressions:d().nonnegative(),gscClicks:d().nonnegative(),gscAvgPosition:d().nonnegative().nullable(),organicSessions:d().nonnegative()}),jM=m({domain:o(),url:o(),title:o(),citationCount:d().int().nonnegative()}),AM=m({demand:d(),competitor:d(),absence:d(),gapSeverity:d()}),CM=m({actionId:o(),state:WS,lastUpdated:o()}),JS=m({targetRef:o(),query:o(),action:ZS,ourBestPage:SM.nullable(),winningCompetitor:jM.nullable(),score:d(),scoreBreakdown:AM,drivers:y(o()),demandSource:YS,actionConfidence:XS,existingAction:CM.nullable(),winnabilityClass:L0,winnability:d().min(0).max(1).nullable()});m({targets:y(JS),contextMetrics:m({totalAiReferralSessions:d().int().nonnegative(),latestRunId:o(),runTimestamp:o()})});const NM=m({targetRef:o(),addressedUrl:o().nullable(),note:o().nullable(),dismissedAt:o()});m({dismissals:y(NM)});m({targetRef:o().min(1),addressedUrl:o().url().optional(),note:o().max(500).optional()});m({targetRef:o(),promptVersion:o(),provider:o(),model:o(),responseText:o(),costMillicents:d().int().nonnegative(),generatedAt:o()});m({provider:o().optional(),model:o().optional(),forceRefresh:N().optional()});const _M=m({targetQuery:o().trim().min(1),winnabilityClass:L0,angle:o().trim().min(1),whyWinnable:o().trim().min(1),schemaHookup:o().trim().min(1),controllableSurfaceRationale:o().trim().min(1)});m({targetRef:o(),promptVersion:o(),provider:o(),model:o(),brief:_M,costMillicents:d().int().nonnegative(),generatedAt:o()});const TM=m({domain:o(),competitorType:Ud,hits:d().int().nonnegative(),updatedAt:o()});m({classifications:y(TM)});const RM=m({uri:o(),title:o(),domain:o(),isOurDomain:N(),isCompetitor:N(),citationCount:d().int().nonnegative(),providers:y(gt)}),e3=m({query:o(),groundingSources:y(RM)});m({sources:y(e3),latestRunId:o()});const t3=m({query:o(),competitorDomains:y(o()),competitorCount:d().int().nonnegative(),missRate:d().min(0).max(1),lastSeenInRunId:o()});m({gaps:y(t3),latestRunId:o()});const n3=A(["ok","warn","fail","skipped"]);n3.enum;const V0=A(["global","project"]);V0.enum;const a3=A(["auth","config","providers","integrations","database","schedules","agent"]);a3.enum;const EM=m({id:o(),category:a3,scope:V0,title:o(),status:n3,code:o().describe('Stable machine-readable code (e.g. "google.token.refresh-failed"). Use this for filtering and remediation logic.'),summary:o(),remediation:o().nullable().optional().describe('Operator-facing next step. Null when status is "ok" or no specific remediation applies.'),details:Ue(o(),fn()).optional().describe("Structured context — principal email, redirect URI, missing scopes, etc. Stable per check id."),durationMs:d().int().nonnegative().describe("How long the check took to execute.")});m({scope:V0,project:o().nullable().describe('Project name when scope is "project", null otherwise.'),generatedAt:o().describe("ISO-8601 timestamp when this doctor run started."),durationMs:d().int().nonnegative(),summary:m({total:d().int().nonnegative(),ok:d().int().nonnegative(),warn:d().int().nonnegative(),fail:d().int().nonnegative(),skipped:d().int().nonnegative()}),checks:y(EM)});function zM(e){return e.trim().toLowerCase()}const DM=m({provider:o(),citationState:_i,cited:N(),mentioned:N(),runId:o(),runCreatedAt:o()}),OM=m({queryId:o(),query:o(),providers:y(DM),citedCount:d().int().nonnegative(),mentionedCount:d().int().nonnegative(),totalProviders:d().int().nonnegative()}),IM=m({queryId:o(),query:o(),provider:o(),citingCompetitors:y(o()),runId:o(),runCreatedAt:o()}),PM=m({providersConfigured:d().int().nonnegative(),providersCiting:d().int().nonnegative(),providersMentioning:d().int().nonnegative(),totalQueries:d().int().nonnegative(),queriesCitedAndMentioned:d().int().nonnegative(),queriesCitedOnly:d().int().nonnegative(),queriesMentionedOnly:d().int().nonnegative(),queriesInvisible:d().int().nonnegative(),latestRunId:o().nullable(),latestRunAt:o().nullable()});m({summary:PM,byQuery:y(OM),competitorGaps:y(IM),status:A(["ready","no-data"]),reason:A(["no-runs-yet","no-queries"]).optional()});const qM=m({selection:D2,historyWindow:m({from:o().datetime(),to:o().datetime()}).optional(),populations:y(z2.pick({queryClass:!0,summary:!0,trend:!0}))}),Sn={title:"AI visibility",description:"Each answer is counted once for its assigned properties. Branded and non-brand queries are measured separately.",simpleDescription:"Each saved answer is counted once. Branded and non-brand queries are measured separately.",queryType:"Query type",queries:"Queries measured",answers:"Answers measured",mentioned:"Mentioned",cited:"Cited",history:"Measurement history",latestMeasurement:"Latest measurement",allLocations:"All measured locations",noLocation:"No provider location",location:"Location",previousOutsideWindow:"Previous measurement outside this period",date:"Date",comparison:"Comparison",notMeasured:"Not measured",incomplete:"Evidence incomplete",ambiguous:"Property identity unverified",noPopulation:"No measured answers",notApplicable:"Not applicable",comparable:"Comparable",baseline:"Baseline",changed:"Measurement changed",unknownHistory:"Comparison unavailable"};function FY(e){return{branded:"Branded","non-brand":"Non-brand",unknown:"Unclassified"}[e]}function ZY(e){return e.rate===null?Sn.notMeasured:`${Number((e.rate*100).toFixed(1))}%`}function YY(e){if(e.numerator!==null&&e.denominator!==null)return`${e.numerator} of ${e.denominator} answers`;switch(e.reason){case"no-population":return Sn.noPopulation;case"not-applicable":return Sn.notApplicable;case"identity-ambiguous":return Sn.ambiguous;default:return Sn.incomplete}}const XY="No answer could be tied to one property";function WY(e){return e.denominator===null||e.denominator===void 0||e.unattributed===void 0||e.unattributed<=0?null:`${e.unattributed} of ${e.denominator+e.unattributed} answers could not be tied to one property`}function JY(e,n=!1){const i=e==="first"?Sn.baseline:e==="comparable"?Sn.comparable:e==="legacy-unknown"?Sn.unknownHistory:Sn.changed;return n?`${i} · ${Sn.previousOutsideWindow}`:i}function eX(e){const n=e.selection.measurement.completedAt?.slice(0,10)??Sn.notMeasured;return`${Sn.latestMeasurement}: ${n}`}function tX(e){const n=e.historyWindow;return n===void 0?Sn.history:`${Sn.history} (${n.from.slice(0,10)} – ${n.to.slice(0,10)})`}function nX(e){const n=e.selection.location;return n.kind==="all"?Sn.allLocations:n.kind==="none"?Sn.noLocation:`${Sn.location}: ${n.value}`}const aX=[7,14,30,90],iX=30;Ze([z(7),z(14),z(30),z(90)]).describe("Report window in days (7, 14, 30, or 90). Defaults to 30 when omitted.");const MM=A(["prompt","request-param","browser-geo","ignored"]),BM=m({label:o(),city:o(),region:o(),country:o(),otherConfiguredLabels:y(o())}),LM=m({provider:o(),treatment:MM,description:o()}),VM=m({generatedAt:o(),project:m({id:o(),name:o(),displayName:o(),canonicalDomain:o(),country:o(),language:o()}),location:BM.nullable(),providerLocationHandling:y(LM),periodStart:o().nullable(),periodEnd:o().nullable(),periodDays:d().int().positive()}),$M=m({visibilityBasis:A(["legacy-project-queries","frozen-populations"]).optional(),citationRate:d().nullable(),citedQueryCount:d().nullable(),totalQueryCount:d().nullable(),mentionRate:d().nullable(),mentionedQueryCount:d().nullable(),trend:A(["up","down","flat","unknown"]),queryCount:d(),competitorCount:d(),providerCount:d(),gsc:m({clicks:d(),impressions:d(),ctr:d(),avgPosition:d(),periodStart:o(),periodEnd:o()}).nullable(),ga:m({sessions:d(),users:d(),periodStart:o(),periodEnd:o()}).nullable(),findings:y(m({title:o(),detail:o(),tone:A(["positive","caution","negative","neutral"])}))}),UM=m({citationState:A(["cited","not-cited","pending"]),answerMentioned:N().nullable(),model:o().nullable()}),GM=m({queries:y(o()),providers:y(o()),matrix:y(y(UM.nullable())),providerRates:y(m({provider:o(),citedCount:d(),mentionedCount:d(),totalCount:d(),citationRate:d(),mentionRate:d()}))}),KM=m({domain:o(),citationCount:d(),totalCount:d(),pressureLabel:A(["High","Moderate","Low","None"]),citedQueries:y(o()),sharePct:d(),theirCitedPages:y(m({url:o(),citedFor:y(o())}))}),HM=m({projectCitationCount:d(),competitors:y(KM)}),QM=m({domain:o(),mentionCount:d(),totalCount:d(),pressureLabel:A(["High","Moderate","Low","None"]),mentionedQueries:y(o()),sharePct:d().nullable()}),zh=m({shareOfVoice:HS.optional(),projectMentionCount:d(),totalAnswerSnapshots:d(),competitors:y(QM)}),FM=zh.extend({scope:A(["non-brand","pooled"]),nonBrand:zh,branded:zh}),ZM=m({category:o(),label:o(),count:d(),sharePct:d()}),YM=m({categories:y(ZM),topDomains:y(m({domain:o(),count:d(),isCompetitor:N()}))}),XM=m({query:o(),clicks:d(),impressions:d(),ctr:d(),avgPosition:d(),category:A(["brand","lead-gen","industry","other"])}),WM=m({periodStart:o(),periodEnd:o(),totalClicks:d(),totalImpressions:d(),ctr:d(),avgPosition:d(),topQueries:y(XM),categoryBreakdown:y(m({category:A(["brand","lead-gen","industry","other"]),clicks:d(),impressions:d(),sharePct:d()})),trend:y(m({date:o(),clicks:d(),impressions:d()})),trackedButNoGsc:y(o()),gscButNotTracked:y(o())}),JM=m({totalSessions:d(),totalUsers:d(),totalOrganicSessions:d(),periodStart:o(),periodEnd:o(),topLandingPages:y(m({page:o(),sessions:d(),users:d().optional(),organicSessions:d()})),channelBreakdown:y(m({channel:o(),sessions:d(),sharePct:d()}))}),eB=m({totalSessions:d(),organicSessions:d(),paidSessions:d(),channels:y(m({channelGroup:o(),sessions:d(),sharePct:d()})),topCampaigns:y(m({source:o(),medium:o(),sessions:d()}))}),tB=m({totalSessions:d(),paidSessions:d(),organicSessions:d(),totalUsers:d().optional(),paidUsers:d().optional(),organicUsers:d().optional(),bySource:y(m({source:o(),sessions:d(),users:d().optional(),paidSessions:d(),organicSessions:d(),sharePct:d()})),trend:y(m({date:o(),sessions:d()})),topLandingPages:y(m({page:o(),sessions:d(),users:d().optional()}))}),nB=m({windowStart:o(),windowEnd:o(),hasData:N(),verifiedCrawlerHits:m({current:d(),prior:d(),deltaPct:d().nullable()}),unverifiedCrawlerHits:m({current:d(),prior:d(),deltaPct:d().nullable()}),aiUserFetchHits:m({current:d(),prior:d(),deltaPct:d().nullable()}),referralArrivals:m({current:d(),prior:d(),deltaPct:d().nullable()}),referralRedirects:d().int().nonnegative(),referralArrivalsByClass:m({paid:m({current:d(),prior:d(),deltaPct:d().nullable()}),organic:m({current:d(),prior:d(),deltaPct:d().nullable()}),unclassified:m({current:d(),prior:d(),deltaPct:d().nullable()})}),referralArrivalsClassSummary:o(),byOperator:y(m({operator:o(),verifiedHits:d(),unverifiedHits:d(),userFetchHits:d(),referralArrivals:d(),deltaPct:d().nullable()})),topCrawledPaths:y(m({path:o(),verifiedHits:d(),unverifiedHits:d().default(0),distinctOperators:d()})),referralProducts:y(m({product:o(),arrivals:d(),distinctLandingPaths:d()})),dailyTrend:y(m({date:o(),verifiedCrawlerHits:d(),unverifiedCrawlerHits:d().default(0),userFetchHits:d(),referralArrivals:d()})),topReferralLandingPaths:y(m({path:o(),arrivals:d(),distinctProducts:d()}))}),aB=m({provider:A(["google","bing"]).nullable(),total:d(),indexed:d(),notIndexed:d(),deindexed:d(),unknown:d(),indexedPct:d()}),iB=m({runId:o(),date:o(),citationRate:d(),citedQueryCount:d(),totalQueryCount:d(),mentionRate:d(),mentionedQueryCount:d(),providerRates:y(m({provider:o(),citationRate:d(),mentionRate:d()}))}),i3=A(["regression","gain","opportunity"]),sB=i3.enum,hf=m({id:o(),type:i3,severity:A(["critical","high","medium","low"]),title:o(),query:o(),provider:o(),recommendation:o().nullable(),createdAt:o(),instanceCount:d()}),oB=m({horizon:A(["immediate","short-term","medium-term"]),title:o(),rationale:o()}),rr=m({current:d(),prior:d(),deltaAbs:d(),deltaPct:d().nullable(),direction:A(["up","down","flat"]),window:d().optional()}),rB=m({provider:o(),current:d(),prior:d(),deltaAbs:d(),direction:A(["up","down","flat"])}),lB=m({enoughHistory:N(),headline:o(),citationRate:rr.nullable(),mentionRate:rr.nullable(),citedQueryCount:rr.nullable(),mentionedQueryCount:rr.nullable(),gscClicksDelta:rr.nullable(),aiReferralsDelta:rr.nullable(),comparisonWindowDays:d().int().positive(),providerMovements:y(rB),wins:y(hf),regressions:y(hf)}),cB=A(["agency","client"]),s3=A(["agency","client","both"]),uB=A(["immediate","short-term","medium-term"]),dB=A(["high","medium","low"]);A(["positive","caution","negative","neutral"]);const mB=A(["content","competitors","provider","search-demand","indexing","location","monitoring"]),$0=m({audience:s3,priority:d(),horizon:uB,category:mB,title:o(),action:o(),why:y(o()),evidence:y(o()),successMetric:o(),confidence:dB,targetRef:o().optional()}),pB=m({headline:o(),overview:o(),actionItems:y($0),confidenceNotes:y(o())}),hB=m({title:o(),detail:o(),severity:A(["positive","caution","negative","neutral"]),evidence:y(o())}),fB=m({priorities:y($0),diagnostics:y(hB)});function sX(e){return e.horizon==="immediate"?"negative":e.confidence==="high"?"caution":e.confidence==="low"?"neutral":"caution"}function oX(e){return e==="High"?"negative":e==="Moderate"?"caution":e==="Low"?"positive":"neutral"}function gB(e){switch(e){case"critical":return"negative";case"high":return"negative";case"medium":return"caution";case"low":return"neutral"}}function rX(e){return e.type===sB.gain?"positive":gB(e.severity)}function lX(e){switch(e){case Zu.competitor:return"negative";case Zu.directory:case Zu.forum:return"caution";default:return"neutral"}}function cX(e){switch(e){case"critical":return"Critical";case"high":return"High";case"medium":return"Medium";case"low":return"Low"}}function yB(e){switch(e){case"immediate":return"Immediate";case"short-term":return"Short term";case"medium-term":return"Medium term"}}function uX(e){switch(e){case"content":return"Content";case"competitors":return"Competitors";case"provider":return"Provider";case"search-demand":return"Search demand";case"indexing":return"Indexing";case"location":return"Location";case"monitoring":return"Monitoring"}}function bB(e){switch(e){case"high":return"High";case"medium":return"Medium";case"low":return"Low"}}m({visibility:qM.optional(),meta:VM,executiveSummary:$M,citationScorecard:GM,competitorLandscape:HM,mentionLandscape:FM,aiSourceOrigin:YM,gsc:WM.nullable(),ga:JM.nullable(),socialReferrals:eB.nullable(),aiReferrals:tB.nullable(),serverActivity:nB.nullable(),indexingHealth:aB.nullable(),citationsTrend:y(iB),whatsChanged:lB,insights:y(hf),recommendedNextSteps:y(oB),actionPlan:y($0),clientSummary:pB,agencyDiagnostics:fB,contentOpportunities:y(JS),contentGaps:y(t3),groundingSources:y(e3)});const vB=Ze([z(60),z(90)]),xB=A(["earliest","middle","prior","latest"]),cr=m({clicks:d().int().nonnegative(),impressions:d().int().nonnegative()}),o3=m({name:xB,startDate:o(),endDate:o()}),wB=o3.extend({totals:cr}),kB=o3.extend({organicSessions:d().int().nonnegative()}),Dh=m({startDate:o(),endDate:o(),observedDays:d().int().nonnegative()}),Mu=m({verified:d().int().nonnegative(),claimedUnverified:d().int().nonnegative(),unknownAiLike:d().int().nonnegative()}),_x=m({total:d().int().nonnegative(),paid:d().int().nonnegative(),organic:d().int().nonnegative(),unknown:d().int().nonnegative()});m({contractVersion:z("organic-evidence/v1"),periodDays:vB,asOfDate:o().nullable(),coverage:m({gsc:N(),ga4:N(),server:N(),visibility:N()}),sourceCoverage:m({gsc:Dh.nullable(),ga4:Dh.nullable(),server:Dh.nullable(),visibility:m({completedAt:o(),ageDays:d().nonnegative()}).nullable()}),gsc:m({propertyTotals:cr,namedBrand:cr,namedNonBrand:cr,suppressedOrUnreportedResidual:cr,cohorts:y(wB)}).nullable(),ga4:m({organicSessions:d().int().nonnegative(),cohorts:y(kB)}).nullable(),gaAiReferrals:m({paidSessions:d().int().nonnegative(),organicSessions:d().int().nonnegative()}).nullable(),server:m({crawlerHits:Mu,userFetchHits:Mu,referralSessions:_x}).nullable(),visibility:m({runId:o(),completedAt:o(),ageDays:d().nonnegative(),answerPairs:d().int().nonnegative(),mentionedPairs:d().int().nonnegative(),citedPairs:d().int().nonnegative()}).nullable(),measurement:gE,pages:y(m({path:o(),gsc:cr,ga4OrganicSessions:d().int().nonnegative(),server:m({crawlerHits:Mu,userFetchHits:Mu,referralSessions:_x})})),findings:y(m({tone:A(["positive","caution","neutral"]),title:o(),detail:o()})),limitations:y(m({code:o(),detail:o()}))});const SB=new Set(["a","an","and","for","from","in","near","of","on","or","the","to"]);function r3(e){return e.toLowerCase().match(/[a-z0-9]+/g)??[]}function l3(e){return e.length>4&&e.endsWith("ies")?`${e.slice(0,-3)}y`:e.length>4&&e.endsWith("s")&&!e.endsWith("ss")?e.slice(0,-1):e}function c3(e){const n=e.meta.location;return n?new Set([n.label,n.city,n.region,n.country].flatMap(r3).map(l3).filter(Boolean)):new Set}function u3(e,n){const i=r3(e).map(l3).filter(Boolean).filter(r=>!SB.has(r)).filter(r=>!n.has(r));return[...new Set(i)].sort().join(" ")}function jB(e){return e.title.match(/"([^"]+)"/)?.[1]??e.successMetric.match(/"([^"]+)"/)?.[1]??e.title}function d3(e,n){const i=c3(e);if(n.length<=1||i.size===0)return[...n];const r=new Set,u=[];for(const h of n){if(h.category!=="content"){u.push(h);continue}const g=u3(jB(h),i);!g||r.has(g)||(r.add(g),u.push(h))}return u}function AB(e){const n=c3(e),i=e.contentOpportunities;if(i.length<=1||n.size===0)return i;const r=new Set;return i.filter(u=>{const h=u3(u.query,n);return!h||r.has(h)?!1:(r.add(h),!0)})}const CB=A(["claude","codex"]);CB.enum;const NB=A(["claude","codex","all"]);NB.enum;const m3=m({content:d().int().nonnegative(),sitemap:d().int().nonnegative(),robots:d().int().nonnegative(),asset:d().int().nonnegative(),other:d().int().nonnegative()}),_B=A(["content","sitemap","robots","asset","other"]),U0=A(["cloud-run","wordpress","cloudflare","vercel","generic-log"]);U0.enum;const TB=A(["raw-request-events","aggregate-request-metrics","request-url","status-code","user-agent","remote-ip","referer","cursor-pull"]);TB.enum;const RB=A(["raw-request","aggregate-bucket"]),EB=RB.enum,zB=A(["observed","provider-aggregated","inferred"]),DB=zB.enum,OB=m({type:o().nullable(),labels:Ue(o(),o())}),IB=m({sourceType:U0,evidenceKind:z(EB["raw-request"]),confidence:z(DB.observed),eventId:o().min(1),observedAt:o().min(1),method:o().nullable(),requestUrl:o().nullable(),host:o().nullable(),path:o().min(1),queryString:o().nullable(),status:d().int().nullable(),userAgent:o().nullable(),remoteIp:o().nullable(),referer:o().nullable(),latencyMs:d().nullable(),requestSizeBytes:d().int().nullable(),responseSizeBytes:d().int().nullable(),providerResource:OB,providerLabels:Ue(o(),o())});m({events:y(IB),rawEntryCount:d().int().nonnegative(),skippedEntryCount:d().int().nonnegative(),nextPageToken:o().optional(),filter:o()});const p3=A(["connected","paused","error","archived"]),dX=p3.enum,h3=A(["oauth","service-account"]);h3.enum;const PB=A(["verified","claimed_unverified","unknown_ai_like"]),mX=PB.enum,qB=m({id:o().min(1),source:o().min(1),version:o().min(1)}),f3=m({manifestId:o().min(1),manifest:qB.nullable(),hits:d().int().nonnegative()});m({gcpProjectId:o().min(1),serviceName:o().nullable().optional(),location:o().nullable().optional(),authMode:h3});m({baseUrl:o().url(),username:o().min(1)});const G0=A(["production","preview"]);G0.enum;m({projectId:o().min(1),teamId:o().min(1),environment:G0});const g3=m({id:o(),projectId:o(),sourceType:U0,displayName:o(),status:p3,lastSyncedAt:o().nullable(),lastCursor:o().nullable(),lastError:o().nullable(),skippedThroughAt:o().nullable(),queueBacklogCount:d().int().nonnegative().nullable(),queueBacklogObservedAt:o().nullable(),archivedAt:o().nullable(),config:Ue(o(),fn()),createdAt:o(),updatedAt:o()});m({gcpProjectId:o().min(1),serviceName:o().min(1).optional(),location:o().min(1).optional(),displayName:o().min(1).optional(),keyJson:o().optional()});m({baseUrl:o().url(),username:o().min(1),applicationPassword:o().min(1),displayName:o().min(1).optional()});m({projectId:o().min(1),teamId:o().min(1),token:o().min(1),environment:G0.optional(),displayName:o().min(1).optional()});const MB=A(["direct-push","queue-pull"]),Ir=MB.enum,K0=o().regex(/^(?=.{1,63}$)[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,"Cloudflare Queue name must be 1-63 characters, use only letters, numbers, or dashes, and start and end with a letter or number"),y3=m({schemaVersion:z(1),workerVersion:o().min(1),expectedBotListVersion:o().min(1),zoneId:o().nullable()}),BB=y3.extend({deliveryMode:z(Ir["direct-push"]),accountId:o().nullable()}),LB=y3.extend({deliveryMode:z(Ir["queue-pull"]),accountId:o().min(1),queueId:o().min(1),queueName:K0,retentionSeconds:d().int().min(60).max(1209600)});function b3(e){if(typeof e!="object"||e===null||Array.isArray(e))return e;const n=e;return"deliveryMode"in n?e:{...n,deliveryMode:"direct-push"}}Hf(b3,qe("deliveryMode",[BB,LB]));const v3=m({displayName:o().min(1).optional(),zoneId:o().min(1).optional()}),VB=v3.extend({deliveryMode:z(Ir["direct-push"]),accountId:o().min(1).optional()}),$B=v3.extend({deliveryMode:z(Ir["queue-pull"]),accountId:o().min(1),queueId:o().min(1),queueName:K0,retentionSeconds:d().int().min(60).max(1209600),apiToken:o().min(1)});Hf(b3,qe("deliveryMode",[VB,$B]));const x3=m({sourceId:o().min(1),workerScript:o().min(1),wranglerToml:o().min(1),workerVersion:o().min(1),instructions:o().min(1)}),UB=x3.extend({deliveryMode:z(Ir["direct-push"]),activationRequired:N().default(!1)}),GB=x3.extend({deliveryMode:z(Ir["queue-pull"]),activationRequired:N().default(!1),accountId:o().min(1),queueId:o().min(1),queueName:K0,retentionSeconds:d().int().min(60).max(1209600)});qe("deliveryMode",[UB,GB]);const KB=m({eventId:o().min(1),observedAt:o().datetime(),method:o().nullable(),host:o().nullable(),path:o().min(1),queryString:o().nullable(),status:d().int().nullable(),userAgent:o().nullable(),remoteIp:o().nullable(),referer:o().nullable(),cf:m({verifiedBot:N().nullable(),botScore:d().int().nullable(),country:o().nullable(),asn:d().int().nullable(),asOrganization:o().nullable()}).nullable()});m({schemaVersion:z(1),workerVersion:o().min(1),events:y(KB).min(1).max(100)});m({acceptedEvents:d().int(),droppedEvents:d().int(),workerVersionAck:o(),crawlerBucketRows:d().int(),aiUserFetchBucketRows:d().int(),aiReferralBucketRows:d().int(),sampleRows:d().int()});m({sourceId:o(),runId:o(),syncedAt:o(),pulledEvents:d().int().nonnegative(),selfTrafficExcluded:d().int().nonnegative(),crawlerHits:d().int().nonnegative(),aiUserFetchHits:d().int().nonnegative(),aiReferralHits:d().int().nonnegative(),unknownHits:d().int().nonnegative(),crawlerBucketRows:d().int().nonnegative(),aiUserFetchBucketRows:d().int().nonnegative(),aiReferralBucketRows:d().int().nonnegative(),sampleRows:d().int().nonnegative(),remainingBacklogCount:d().int().nonnegative().optional(),windowStart:o(),windowEnd:o()});m({days:d().int().positive().optional()});m({advanceToNow:z(!0)});m({sourceId:o(),runId:o(),status:sa,windowStart:o(),windowEnd:o(),daysRequested:d().int().positive(),daysApplied:d().int().positive()});const HB=m({crawlerHits:d().int().nonnegative(),crawlerContentHits:d().int().nonnegative(),crawlerInfraHits:d().int().nonnegative(),crawlerSegments:m3,aiUserFetchHits:d().int().nonnegative(),aiReferralHits:d().int().nonnegative(),aiReferralLandedHits:d().int().nonnegative(),aiReferralRedirectedHits:d().int().nonnegative(),sampleCount:d().int().nonnegative()});m({sources:y(g3)});const QB=g3.extend({totals24h:HB,latestRun:m({runId:o(),status:sa,startedAt:o().nullable(),finishedAt:o().nullable(),error:o().nullable()}).nullable()});m({sources:y(QB)});const FB=A(["crawler","ai-user-fetch","ai-referral"]),H0=FB.enum,w3=A(["hour","day"]);w3.enum;const ZB=m({bucket:o(),crawlerHits:d().int().nonnegative(),aiUserFetchHits:d().int().nonnegative(),aiReferralHits:d().int().nonnegative(),aiReferralLandedHits:d().int().nonnegative(),crawlerContentHits:d().int().nonnegative(),measured:N()}),YB=m({kind:z(H0.crawler),sourceId:o(),tsHour:o(),botId:o(),operator:o(),verificationStatus:o(),verificationManifests:y(f3).optional(),verificationUnattributedHits:d().int().nonnegative().optional(),pathNormalized:o(),pathClass:_B,status:d().int(),hits:d().int().nonnegative()}),XB=m({kind:z(H0["ai-user-fetch"]),sourceId:o(),tsHour:o(),botId:o(),operator:o(),verificationStatus:o(),verificationManifests:y(f3).optional(),verificationUnattributedHits:d().int().nonnegative().optional(),pathNormalized:o(),status:d().int(),hits:d().int().nonnegative()}),WB=m({kind:z(H0["ai-referral"]),sourceId:o(),tsHour:o(),product:o(),operator:o(),sourceDomain:o(),evidenceType:o(),landingPathNormalized:o(),status:d().int(),hits:d().int().nonnegative(),paidHits:d().int().nonnegative(),organicHits:d().int().nonnegative(),unknownHits:d().int().nonnegative()}),JB=qe("kind",[YB,XB,WB]);m({windowStart:o(),windowEnd:o(),series:m({granularity:w3,points:y(ZB),coverageStart:o().nullable(),trends:m({crawlerContentHits:so.nullable(),aiUserFetchHits:so.nullable(),aiReferralLandedHits:so.nullable()})}),totals:m({crawlerHits:d().int().nonnegative(),crawlerContentHits:d().int().nonnegative(),crawlerInfraHits:d().int().nonnegative(),crawlerSegments:m3,aiUserFetchHits:d().int().nonnegative(),aiReferralHits:d().int().nonnegative(),aiReferralLandedHits:d().int().nonnegative(),aiReferralRedirectedHits:d().int().nonnegative(),aiReferralPaidHits:d().int().nonnegative(),aiReferralOrganicHits:d().int().nonnegative(),aiReferralUnknownHits:d().int().nonnegative()}),eventRows:m({total:d().int().nonnegative(),returned:d().int().nonnegative(),truncated:N()}),events:y(JB)});const Q0=A(["admin","viewer"]),eL=/^[a-z\d][\w.-]{0,63}$/i,tL=o().regex(eL,"A name may use letters, digits, dots, dashes and underscores, and must start with a letter or digit."),Tx=12,nL=o().min(Tx,`A password must be at least ${Tx} characters.`),k3=m({id:o(),name:o(),role:Q0,createdAt:o(),lastLoginAt:o().nullable()});m({users:y(k3)});m({name:tL,password:nL,role:Q0});m({name:o().min(1),password:o().min(1)});m({authRequired:N(),user:k3.pick({name:!0,role:!0}).nullable()});const S3=A(["queued","running","completed","partial","failed"]),pX=S3.enum,j3=A(["queued","running","completed","failed"]),hX=j3.enum,aL=20,iL=20,ff=50,A3=m({kind:A(["market","property"]),key:he,expectedPlanRevision:d().int().positive().optional()}).strict(),sL=m({kind:A(["market","property"]),key:he,label:o().trim().min(1),planRevision:d().int().positive()}).strict(),C3=o().min(1).max(4e3).refine(e=>e.trim().length>0,"Research queries cannot be blank.");function fX(e){const n=new Set;return e.filter(i=>{const r=zM(i);return!r||n.has(r)?!1:(n.add(r),!0)})}function oL(e,n){const i=e?e.kind==="market"?{market:e.label,submarket:e.label}:{property:e.label,propertyBrand:e.label}:{};return n?{...i,location:n.label}:i}function gX(e,n,i){const r=new Set(e.variables),u=[...e.pattern.matchAll(/\{([^{}]+)\}/g)].map(w=>w[1]),h=[...new Set(u.filter(w=>!r.has(w)))];if(h.length)throw kv("The selected research template contains undeclared placeholders: "+h.join(", "));const g=oL(n,i),b=e.variables.filter(w=>g[w]===void 0);if(b.length)throw kv("The selected research template requires unavailable bindings: "+b.join(", "));const v=Object.fromEntries(e.variables.map(w=>[w,g[w]]));return{bindings:v,output:ED(e.pattern,v)}}const N3=m({templateId:o().trim().min(1).max(256),templateVersion:o().trim().min(1).max(256),bindingLocation:cn.nullable().optional()}).strict();m({queries:y(C3).min(1).max(50),provider:o().trim().min(1).optional(),model:o().trim().min(1).max(200).optional(),location:cn.nullable().optional(),scope:A3.optional(),template:N3.optional(),idempotencyKey:o().trim().min(1).max(128).optional()}).superRefine((e,n)=>{e.model&&!e.provider&&n.addIssue({code:ve.custom,path:["provider"],message:"provider is required when model is supplied"})});const rL=A3.extend({expectedPlanRevision:d().int().positive()}).strict(),lL=m({queries:y(C3).min(1).max(ff),provider:o().trim().min(1),model:o().trim().min(1).max(200),location:cn.nullable(),scope:rL.optional(),template:N3.optional()}).strict();m({idempotencyKey:o().trim().min(1).max(128),runs:y(lL).min(1).max(iL)}).strict().superRefine((e,n)=>{e.runs.reduce((r,u)=>r+u.queries.length,0)>ff&&n.addIssue({code:ve.custom,path:["runs"],message:`A research batch may contain at most ${ff} concrete queries across all destinations`})});const cL=m({kind:A(["api-key","user"]),id:o(),name:o(),role:Q0.nullable(),limited:N().optional()}),_3=m({id:o(),projectId:o(),status:S3,provider:o(),requestedModel:o().nullable(),resolvedModel:o(),location:cn.nullable(),scope:sL.nullable().optional(),template:P2.nullable().optional(),totalQueries:d().int(),completedQueries:d().int(),failedQueries:d().int(),error:o().nullable(),initiatedBy:cL.nullable(),startedAt:o().nullable(),finishedAt:o().nullable(),createdAt:o()}),uL=m({id:o(),position:d().int(),query:o(),queryClass:_r.nullable().optional(),status:j3,requestedModel:o().nullable(),resolvedModel:o(),servedModel:o().nullable(),answerText:o().nullable(),groundingSources:y(Bd),citedDomains:y(o()),searchQueries:y(o()),namedCompetitors:y(o()).default([]),citedCompetitorDomains:y(o()).default([]),answerMentioned:N().nullable(),citationState:_i.nullable(),error:o().nullable(),startedAt:o().nullable(),finishedAt:o().nullable(),createdAt:o()}),dL=_3.extend({queries:y(uL)});m({runs:y(dL)});const mL=m({name:o(),displayName:o(),modelConfigurable:N(),defaultModel:o(),knownModels:y(m({id:o(),displayName:o()}))});m({runs:y(_3),nextCursor:o().nullable().optional(),providers:y(mL).optional(),access:m({canRun:N(),dailyRunLimit:d().int().positive().nullable()}).optional()});m({apiKey:o().min(1)});m({id:o(),name:o(),status:o(),currencyCode:o().nullable(),timezone:o().nullable(),url:o().nullable(),reviewStatus:o().nullable(),integrityReviewStatus:o().nullable(),integrityDecision:o().nullable()});m({q:o().trim().min(1).max(200),limit:d().int().min(1).max(100).default(20)});const pL=m({id:o(),type:o(),canonicalName:o(),countryCode:o(),name:o(),regionCode:o().nullable()});m({count:d().int().nonnegative(),query:o(),results:y(pL)});const hL=m({id:o(),clientType:o().optional(),name:o().optional(),pixelId:o().optional()});m({pixels:y(hL)});const fL=m({id:o(),name:o().optional()}),gL=m({id:o(),name:o().optional(),eventType:o().optional(),customEventName:o().nullable().optional(),attributionWindowDays:d().int().positive().optional(),adAccountId:o().optional(),sourceIds:y(o()).optional(),sources:y(fL).optional(),archived:N().optional(),version:d().int().nonnegative().optional()});m({eventSettings:y(gL)});m({connected:N(),adAccountId:o().nullable().optional(),displayName:o().nullable().optional(),currencyCode:o().nullable().optional(),timezone:o().nullable().optional(),status:o().nullable().optional(),reviewStatus:o().nullable().optional(),integrityReviewStatus:o().nullable().optional(),integrityDecision:o().nullable().optional(),lastSyncedAt:o().nullable().optional(),conversionTrackingConfigured:N().optional()});m({disconnected:N()});m({runId:o(),status:o()});const yL=["campaign_id","ad_group_id","ad_id","ad_account_id","oppref"],bL=/^[\w.-]+=[^&#\s]*$/,vL=/\{([^}]*)\}/g,fo=o().min(1).max(1e3).superRefine((e,n)=>{const i=u=>n.addIssue({code:"custom",message:u});if(e.startsWith("?")||e.startsWith("&")){i("Tracking template must not start with ? or &");return}const r=new Set;for(const u of e.split("&")){if(!bL.test(u)){i(`Tracking template pair '${u}' must be key=value without whitespace, # or &`);return}const h=u.slice(0,u.indexOf("="));if(r.has(h)){i(`Tracking template repeats the parameter '${h}'`);return}r.add(h)}for(const u of e.matchAll(vL)){const h=u[1];if(!yL.includes(h)){i(`Tracking template macro '{${h}}' is not supported`);return}}}),xL=m({type:o().nullable().optional(),title:o().nullable().optional(),body:o().nullable().optional(),targetUrl:o().nullable().optional(),fileId:o().nullable().optional()}),mc=A(["impressions","clicks"]);mc.enum;const pc=A(["impression","click"]);pc.enum;const wL=m({id:o(),adGroupId:o(),name:o(),status:o(),reviewStatus:o().nullable().optional(),creative:xL.nullable().optional(),landingPageQueryStringTemplate:o().nullable().optional(),upstreamUpdatedAt:d().int().nullable().optional(),syncedAt:o().optional()}),kL=m({id:o(),campaignId:o(),name:o(),description:o().nullable().optional(),status:o(),billingEventType:Ze([pc,de()]).optional(),maxBidMicros:d().int().nullable().optional(),contextHints:y(o()).default([]),ads:y(wL).default([]),landingPageQueryStringTemplate:o().nullable().optional(),upstreamUpdatedAt:d().int().nullable().optional(),syncedAt:o().optional()}),SL=m({id:o(),name:o(),description:o().nullable().optional(),status:o(),startTime:d().int().nullable().optional(),endTime:d().int().nullable().optional(),biddingType:Ze([mc,de()]).optional(),dailySpendLimitMicros:d().int().nullable().optional(),lifetimeSpendLimitMicros:d().int().nullable().optional(),conversionEventSettingIds:y(o()).default([]),locationIds:y(o()).optional(),adGroups:y(kL).default([]),landingPageQueryStringTemplate:o().nullable().optional(),upstreamUpdatedAt:d().int().nullable().optional(),syncedAt:o().optional()});m({campaigns:y(SL)});const T3=A(["campaign","ad_group"]);T3.enum;const jL=m({level:T3,entityId:o(),date:o(),impressions:d().int(),clicks:d().int(),spendMicros:d().int(),conversions:d().int(),ctr:d().nullable(),cpcMicros:d().int().nullable(),inProgress:N()});m({rows:y(jL),currencyCode:o().nullable().optional()});const R3=m({from:o().nullable(),to:o().nullable(),inProgressDate:o().nullable()}),E3=m({impressions:d().int(),clicks:d().int(),spendMicros:d().int(),conversions:d().int(),ctr:d().nullable(),cpcMicros:d().int().nullable()});m({connected:N(),displayName:o().nullable().optional(),currencyCode:o().nullable().optional(),lastSyncedAt:o().nullable().optional(),campaignCount:d().int(),adGroupCount:d().int(),adCount:d().int(),window:R3,totals:E3});const z3=A(["unavailable","partial","complete"]);z3.enum;const D3=A(["no_ads_connection","connection_not_synced","no_ads_sync","entity_rows_missing_sync_run_id","entity_rows_span_multiple_sync_runs","source_sync_missing","source_sync_not_ads_sync","source_sync_not_completed"]);D3.enum;const O3=A(["unavailable","reported"]);O3.enum;const AL={storedSnapshot:"stored_ads_snapshot"},I3=A(["unavailable","partial_snapshot","metrics_unavailable","observed_activity","no_observed_activity"]);I3.enum;const CL=m({id:o(),name:o(),status:o(),reviewStatus:o().nullable()}),NL=m({id:o(),name:o(),status:o(),billingEventType:Ze([pc,de()]),maxBidMicros:d().int().nullable(),contextHints:y(o()),ads:y(CL)}),_L=m({id:o(),name:o(),status:o(),biddingType:Ze([mc,de()]),dailySpendLimitMicros:d().int().nullable(),lifetimeSpendLimitMicros:d().int().nullable(),conversionEventSettingIds:y(o()),adGroups:y(NL)});m({snapshot:m({status:z3,issue:Ze([D3,de()]),lastSyncedAt:o().nullable(),campaignCount:d().int().nonnegative(),adGroupCount:d().int().nonnegative(),adCount:d().int().nonnegative(),sourceSync:m({runId:o(),status:sa}).nullable()}),historicalCampaignRollups:m({status:O3,window:R3,totals:E3.nullable()}),storedConfiguration:m({basis:z(AL.storedSnapshot),connection:m({status:o().nullable(),reviewStatus:o().nullable(),integrityReviewStatus:o().nullable(),integrityDecision:o().nullable(),conversionTrackingConfigured:N()}).nullable(),campaigns:y(_L)}),assessment:m({state:I3})});const ti=o().min(8).max(128).regex(/^[\w.:-]+$/,"operationKey may contain letters, numbers, dot, underscore, colon, and hyphen"),It=o().min(1).max(200),go=o().min(3).max(1e3).refine(e=>e.trim().length>0),kr=d().int().min(946684800).max(4102444800),Sr=d().int().positive().max(Number.MAX_SAFE_INTEGER),F0=o().regex(/^[a-f0-9]{64}$/),P3=y(It).max(100).refine(e=>new Set(e).size===e.length,"conversionEventSettingIds must be unique"),q3=o().url().refine(e=>new URL(e).protocol==="https:",{message:"URL must use https"}),M3=A(["image_upload","campaign_create","campaign_update","campaign_pause","campaign_archive","campaign_tree_activate","ad_group_create","ad_group_update","ad_group_pause","ad_group_archive","ad_create","ad_update","ad_pause","ad_archive"]);M3.enum;const B3=A(["pending","reconciling","succeeded","failed","unknown"]),hr=B3.enum,L3=A(["known_entity","create_fingerprint","manual_only"]);L3.enum;const V3=A([hr.pending,hr.unknown,hr.reconciling]);V3.enum;const $3=A(["active","paused","archived"]);$3.enum;const U3=A(["file","campaign","ad_group","ad"]);U3.enum;const G3=A(["campaign","ad_group","ad"]);G3.enum;const Z0=m({id:It,expectedUpdatedAt:d().int().nonnegative()}).strict(),TL=Z0,md=1e3;function RL(e){return 1+e.campaign.adGroups.reduce((n,i)=>n+1+i.ads.length,0)}const EL=Z0.extend({ads:y(TL).min(1).max(md-1)}).strict(),zL=Z0.extend({adGroups:y(EL).min(1).max(md-1)}).strict();function DL(e,n){return e<n?-1:e>n?1:0}function Rx(e,n,i){for(let r=1;r<e.length;r+=1)if(DL(e[r-1].id,e[r].id)>=0){i.addIssue({code:"custom",path:n,message:"Activation manifest entities must be uniquely sorted by id"});return}}const K3=m({campaign:zL}).strict().superRefine((e,n)=>{RL(e)>md&&n.addIssue({code:"custom",path:["campaign"],message:`Activation manifests may contain at most ${md} entities`}),Rx(e.campaign.adGroups,["campaign","adGroups"],n);const r=new Set;for(let u=0;u<e.campaign.adGroups.length;u+=1){const h=e.campaign.adGroups[u];Rx(h.ads,["campaign","adGroups",u,"ads"],n);for(let g=0;g<h.ads.length;g+=1){const b=h.ads[g];r.has(b.id)&&n.addIssue({code:"custom",path:["campaign","adGroups",u,"ads",g,"id"],message:"An ad may appear only once in an activation manifest"}),r.add(b.id)}}}),H3=F0,OL=A(["approved","executing","consumed","revoked","expired","unknown"]),Ci=OL.enum,IL=A(["pending","executing","active","failed","rollback_executing","rolled_back","rollback_failed","unknown"]),ws=IL.enum,PL=m({name:go.optional(),description:o().max(4e3).nullable().optional(),status:$3.optional(),startTime:kr.nullable().optional(),endTime:kr.nullable().optional(),lifetimeSpendLimitMicros:Sr.min(1e6).optional(),locationIds:y(It).max(100).optional(),biddingType:mc.optional(),conversionEventSettingIds:P3.optional(),campaignId:It.optional(),contextHints:y(o().min(1).max(1e3)).max(100).optional(),maxBidMicros:Sr.max(1e8).optional(),billingEventType:pc.optional(),adGroupId:It.optional(),creativeFingerprint:F0.optional(),landingPageQueryStringTemplate:fo.nullable().optional()}).strict();m({operationKey:ti,imageUrl:q3});m({operationKey:ti,name:go,description:o().max(4e3).optional(),startTime:kr.optional(),endTime:kr.optional(),lifetimeSpendLimitMicros:Sr.min(1e6),locationIds:y(It).min(1).max(100),biddingType:mc.optional(),conversionEventSettingIds:P3.optional(),landingPageQueryStringTemplate:fo.optional()}).superRefine((e,n)=>{e.startTime!==void 0&&e.endTime!==void 0&&e.endTime<=e.startTime&&n.addIssue({code:"custom",path:["endTime"],message:"endTime must be after startTime"})});m({operationKey:ti,campaignId:It,name:go,description:o().max(4e3).optional(),contextHints:y(o().min(1).max(1e3)).min(1).max(100),maxBidMicros:Sr.max(1e8),billingEventType:pc.optional(),landingPageQueryStringTemplate:fo.optional()});const Q3=m({title:o().min(3).max(50),body:o().min(1).max(100),targetUrl:q3,fileId:It});m({operationKey:ti,adGroupId:It,name:go,creative:Q3,landingPageQueryStringTemplate:fo.optional()});function Y0(e){return Object.keys(e).some(n=>n!=="operationKey"&&n!=="expectedUpdatedAt")}m({operationKey:ti,expectedUpdatedAt:d().int().nonnegative(),name:go.optional(),description:o().max(4e3).nullable().optional(),startTime:kr.nullable().optional(),endTime:kr.nullable().optional(),lifetimeSpendLimitMicros:Sr.min(1e6).optional(),locationIds:y(It).min(1).max(100).optional(),landingPageQueryStringTemplate:fo.nullable().optional()}).refine(Y0,{message:"At least one campaign field must be updated"});m({operationKey:ti,expectedUpdatedAt:d().int().nonnegative(),name:go.optional(),description:o().max(4e3).nullable().optional(),contextHints:y(o().min(1).max(1e3)).min(1).max(100).optional(),maxBidMicros:Sr.max(1e8).optional(),landingPageQueryStringTemplate:fo.nullable().optional()}).refine(Y0,{message:"At least one ad group field must be updated"});m({operationKey:ti,expectedUpdatedAt:d().int().nonnegative(),name:go.optional(),creative:Q3.optional(),landingPageQueryStringTemplate:fo.nullable().optional()}).refine(Y0,{message:"At least one ad field must be updated"});m({operationKey:ti});m({operationKey:ti,expectedUpdatedAt:d().int().nonnegative()});const Qd=m({id:o(),adAccountId:o().nullable(),operationKey:o(),kind:M3,state:B3,entityType:Ze([U3,de()]),entityId:o().nullable(),upstreamUpdatedAt:d().int().nullable(),errorCode:o().nullable(),errorMessage:o().nullable(),reconcileStrategy:Ze([L3,de()]),reconcileParentId:It.nullable(),reconcileFingerprint:F0.nullable(),reconcileFields:PL.nullable(),reconcileAttempts:d().int().nonnegative(),lastReconciledAt:o().nullable(),createdAt:o(),updatedAt:o()});m({operation:Qd,replayed:N()});const Tt=Ik({offset:!0}),Pr={id:It,projectId:It,adAccountId:It,manifestHash:H3,manifest:K3,executorApiKeyId:It,approverApiKeyId:It,expiresAt:Tt,approvedAt:Tt,createdAt:Tt,updatedAt:Tt,revocationRequestedAt:Tt.nullable()},qL=m({...Pr,state:z(Ci.approved),operationId:de(),executionStartedAt:de(),consumedAt:de(),revokedAt:de(),expiredAt:de()}).strict(),ML=m({...Pr,state:z(Ci.executing),operationId:It,executionStartedAt:Tt,consumedAt:de(),revokedAt:de(),expiredAt:de()}).strict(),BL=m({...Pr,state:z(Ci.consumed),operationId:It,executionStartedAt:Tt,consumedAt:Tt,revokedAt:de(),expiredAt:de()}).strict(),LL=m({...Pr,state:z(Ci.revoked),operationId:de(),executionStartedAt:de(),consumedAt:de(),revokedAt:Tt,expiredAt:de()}).strict(),VL=m({...Pr,state:z(Ci.expired),operationId:de(),executionStartedAt:de(),consumedAt:de(),revokedAt:de(),expiredAt:Tt}).strict(),$L=m({...Pr,state:z(Ci.unknown),operationId:It,executionStartedAt:Tt,consumedAt:de(),revokedAt:de(),expiredAt:de()}).strict(),F3=qe("state",[qL,ML,BL,LL,VL,$L]).superRefine((e,n)=>{e.executorApiKeyId===e.approverApiKeyId&&n.addIssue({code:"custom",path:["executorApiKeyId"],message:"The activation executor must use a different API key from the approver"}),e.revocationRequestedAt!==null&&e.state!==Ci.executing&&e.state!==Ci.unknown&&e.state!==Ci.consumed&&n.addIssue({code:"custom",path:["revocationRequestedAt"],message:"Only an executing, cancelled, or unresolved activation can carry a cancellation request"})}),ks={id:It,operationId:It,ordinal:d().int().nonnegative(),entityType:G3,entityId:It,expectedUpdatedAt:d().int().nonnegative(),createdAt:Tt,updatedAt:Tt},hc={errorCode:de(),errorMessage:de()},X0={errorCode:o().min(1).max(100),errorMessage:o().min(1).max(500),remediation:o().min(1).max(500)},UL=m({...ks,...hc,state:z(ws.pending),providerUpdatedAt:de(),remediation:de(),startedAt:de(),finishedAt:de()}).strict(),GL=m({...ks,...hc,state:z(ws.executing),providerUpdatedAt:de(),remediation:de(),startedAt:Tt,finishedAt:de()}).strict(),KL=m({...ks,...hc,state:z(ws.active),providerUpdatedAt:d().int().nonnegative(),remediation:de(),startedAt:Tt,finishedAt:Tt}).strict(),HL=m({...ks,...X0,state:z(ws.failed),providerUpdatedAt:Ze([d().int().nonnegative(),de()]),startedAt:Tt,finishedAt:Tt}).strict(),QL=m({...ks,...hc,state:z(ws.rollback_executing),providerUpdatedAt:d().int().nonnegative(),remediation:o().min(1).max(500),startedAt:Tt,finishedAt:de()}).strict(),FL=m({...ks,...hc,state:z(ws.rolled_back),providerUpdatedAt:d().int().nonnegative(),remediation:o().min(1).max(500),startedAt:Tt,finishedAt:Tt}).strict(),ZL=m({...ks,...X0,state:z(ws.rollback_failed),providerUpdatedAt:d().int().nonnegative(),startedAt:Tt,finishedAt:Tt}).strict(),YL=m({...ks,...X0,state:z(ws.unknown),providerUpdatedAt:Ze([d().int().nonnegative(),de()]),startedAt:Tt,finishedAt:Tt}).strict(),XL=qe("state",[UL,GL,KL,HL,QL,FL,ZL,YL]),gf={exact:"exact",refreshSemanticallyUnchanged:"refresh_semantically_unchanged"},WL=A([gf.exact,gf.refreshSemanticallyUnchanged]);m({manifest:K3,executorApiKeyId:It,expiresAt:Tt,versionPolicy:WL.default(gf.exact)}).strict();m({grant:F3}).strict();m({}).strict();m({operationKey:ti,grantId:It,manifestHash:H3}).strict();m({grant:F3,operation:Qd,steps:y(XL)}).strict();const JL=[hr.pending,hr.unknown,hr.reconciling];function eV(e){if(e===void 0||e==="")return JL;if(Array.isArray(e)){const n=[];for(const i of e)typeof i=="string"?n.push(...i.split(",")):n.push(i);return n}return typeof e=="string"?e.split(",").filter(Boolean):e}m({state:Hf(eV,y(V3).min(1).max(3).refine(e=>new Set(e).size===e.length,"state values must be unique")),limit:ec().int().min(1).max(200).default(100),cursor:o().min(1).max(1e3).optional()});m({operations:y(Qd),count:d().int().nonnegative(),nextCursor:o().nullable()});m({}).strict();m({operation:Qd,resolved:N()});m({campaignId:o().min(1).max(200).optional(),lookbackDays:ec().int().min(1).max(30).default(7)});const Z3=A(["campaign","ad_group","ad"]);Z3.enum;const Y3=A(["both","live-only","stored-only"]);Y3.enum;const tV=z("live-provider-read"),nV=m({date:o().nullable(),startTime:d().nullable(),endTime:d().nullable(),impressions:d().nullable(),clicks:d().nullable(),spend:d().nullable(),conversions:d().nullable(),ctr:d().nullable(),cpc:d().nullable(),cpm:d().nullable()}),Ex=m({impressions:d().int(),clicks:d().int(),spendMicros:d().int(),conversions:d().int()}),aV=m({date:o(),live:Ex.nullable(),stored:Ex.nullable(),drifted:N()}),iV=m({field:o(),live:o().nullable(),stored:o().nullable()}),sV=m({name:o().nullable(),status:o(),reviewStatus:o().nullable(),mode:o().nullable(),updatedAt:d().nullable()}),oV=m({name:o(),status:o(),reviewStatus:o().nullable(),upstreamUpdatedAt:d().nullable(),syncedAt:o()}),rV=m({entityType:Z3,id:o(),parentId:o().nullable(),presence:Y3,live:sV.nullable(),stored:oV.nullable(),fieldDeltas:y(iV),liveMetrics:y(nV).nullable(),metricDeltas:y(aV).nullable(),drifted:N()}),lV=m({surface:o(),entityId:o().nullable(),upstreamStatus:d().int().nullable()});m({basis:tV,fetchedAt:o(),adAccountId:o(),storedSnapshotSyncedAt:o().nullable(),metricsWindow:m({lookbackDays:d().int().positive()}),bounds:m({maxCampaigns:d().int().positive(),maxAdGroupsPerCampaign:d().int().positive(),maxAdsPerAdGroup:d().int().positive(),maxReaderCalls:d().int().positive(),readerCalls:d().int().nonnegative(),maxPagesPerReaderCall:d().int().positive(),maxUpstreamHttpRequests:d().int().positive(),truncated:N()}),entities:y(rV),drift:m({entitiesCompared:d().int().nonnegative(),driftedEntities:d().int().nonnegative(),statusDrifted:d().int().nonnegative(),metricsDrifted:d().int().nonnegative()}),errors:y(lV)});const cV=m({status:A(["available","unavailable","not-supported"])}),zx="*",uV=A(["enabled","configured_disabled","CANONRY_TELEMETRY_DISABLED","DO_NOT_TRACK","CI","NO_CONFIG","CONFIG_UNAVAILABLE"]),dV=A(["server","local"]);m({enabled:N(),configuredEnabled:N(),reason:uV,anonymousId:o().regex(/^[0-9a-f]{8}\.\.\.$/i).optional(),target:dV.optional()}).strict();const mt=1,Oh=A(["system","project","queries","competitors","run","finish"]),mV=A(["copy_agent_command","connect_server_traffic","connect_search_console","connect_analytics","connect_business_profile","set_schedule","add_notification","open_project","review_page_health"]),Ih=A(["0","1","2-3","4-5","6-10","11+"]);function Wa(e){return!Number.isFinite(e)||e<=0?"0":e<2?"1":e<4?"2-3":e<6?"4-5":e<11?"6-10":"11+"}const Dx=A(["api_unavailable","database_unavailable","worker_unavailable","no_provider","no_queries","provider_save_failed","project_create_failed","query_save_failed","run_rejected","run_failed","run_cancelled","rate_limited","provider_auth","network","unknown"]),pV=A(["wizard","platform","site_health"]),Bu=m({eventId:o().uuid(),flowVersion:z(mt),onboardingSessionId:o().uuid(),surface:pV.optional()});qe("event",[Bu.extend({event:z("onboarding.started"),step:Oh,resumed:N()}).strict(),Bu.extend({event:z("onboarding.step_completed"),step:Oh,method:A(["existing","inline","manual","generated","skipped","automatic"]),countBucket:Ih.optional(),nextAction:mV.optional()}).strict(),Bu.extend({event:z("onboarding.blocked"),step:Oh,action:A(["continue","configure_provider","generate_queries","save","launch_run","retry_run"]),reasonCode:Dx}).strict(),Bu.extend({event:z("run.requested"),origin:z("dashboard_setup"),result:A(["queued","rejected"]),kind:A(["answer_visibility","site_health"]).optional(),providerCountBucket:Ih,queryCountBucket:Ih,reasonCode:Dx.optional()}).strict()]);m({accepted:N()});A(["cli","mcp-stdio","mcp-http","aero","api","dashboard"]);const X3=4;function hV(e){return e.length<X3}const fc=cB.enum.client,fV=s3.enum.both,gV=C2.enum.advanced;function Aa(e,n,i=`${n}s`){return e===1?n:i}const yV=A(["client-summary","executive-summary","share-of-voice","whats-changed","client-action-plan","agency-action-plan","agency-diagnostics","citation-scorecard","competitor-landscape","ai-source-origin","gsc","ga","social-referrals","ai-referrals","server-activity","indexing-health","citations-trend","insights","content-opportunities","content-gaps","recommended-next-steps","client-evidence-summary"]),Nt=yV.enum;function yX(e,n){const i=e.visibility,r=i?.selection.mode===gV;return(n===fc?[Nt["client-summary"],r?null:Nt["share-of-voice"],i?null:Nt["whats-changed"],e.serverActivity?Nt["server-activity"]:null,Nt["client-action-plan"],Nt["client-evidence-summary"]]:[i?Nt["client-summary"]:Nt["executive-summary"],r?null:Nt["share-of-voice"],i?null:Nt["whats-changed"],Nt["agency-action-plan"],r?null:Nt["agency-diagnostics"],r?null:Nt["citation-scorecard"],r?null:Nt["competitor-landscape"],Nt["ai-source-origin"],Nt.gsc,Nt.ga,Nt["social-referrals"],Nt["ai-referrals"],Nt["server-activity"],Nt["indexing-health"],r?null:Nt["citations-trend"],Nt.insights,AB(e).length>0?Nt["content-opportunities"]:null,e.contentGaps.length>0?Nt["content-gaps"]:null,Nt["recommended-next-steps"]]).filter(h=>h!==null)}const bV={gemini:"Gemini",openai:"ChatGPT",claude:"Claude",perplexity:"Perplexity",local:"Local model","cdp:chatgpt":"ChatGPT (browser)"};function vV(e){return bV[e]??e.charAt(0).toUpperCase()+e.slice(1)}function xV(e){switch(e){case"immediate":return"Do now";case"short-term":return"This month";case"medium-term":return"Next quarter"}}function wV(e){switch(e){case"high":return"Strong evidence";case"medium":return"Some evidence";case"low":return"Worth trying"}}function W3(e){if(!e)return"";const n=[e.city,e.region,e.country].filter(Boolean).join(", ");return n?`${e.label} (${n})`:e.label}const yf={eyebrow:"AI Visibility Report",market:"Market",noMarket:"No market set",generated:"Generated"};function bX(e){return e?`${yf.market}: ${W3(e)}`:yf.noMarket}function vX(e){return`Last ${e} days`}function Ox(e,n=3){const i=e.slice(0,n),r=e.length-i.length;return`${i.join(", ")}${r>0?`, +${r} more`:""}`}function xX(e,n){return`${e.slice(0,n).join(", ")}${e.length>n?"…":""}`}function wX(e){return`+${e} more`}function kX(e){return`× ${e}`}function SX(e){return`${e} bar chart`}function jX(e){return`${e} line chart`}function J3(e){return e==="up"?"↑":e==="down"?"↓":"→"}function AX(e){return e==="up"?"positive":e==="down"?"negative":"neutral"}function CX(e,n){return n==="%"?`${e.deltaAbs>0?"+":""}${e.deltaAbs.toFixed(1)}% vs ${e.prior}%`:oO(e)}function NX(e){return`${e.deltaAbs>0?"+":""}${e.deltaAbs.toFixed(1)}% ${J3(e.direction)}`}function _X(e){return`vs prior ${e} days`}function TX(e){if(!e)return null;const n=e.window??1,i=n>=2?`vs prior ${n} checks (avg ${e.prior}%)`:`since last check (was ${e.prior}%)`,r=J3(e.direction);return e.direction==="up"?{text:`Up ${e.deltaAbs.toFixed(1)} points ${i}`,tone:"positive",arrow:r}:e.direction==="down"?{text:`Down ${Math.abs(e.deltaAbs).toFixed(1)} points ${i}`,tone:"negative",arrow:r}:{text:`Holding steady ${i}`,tone:"neutral",arrow:r}}const Fd={"client-summary":{heroEyebrow:"Overview",heroEmpty:"No AI check has been run yet. Run a check to see how AI tools answer customer queries about your business.",tiles:{mentioned:"AI mentions your name",cited:"AI links to your website",providers:"AI tools tested"},noData:"No data yet",explainer:{lead:"Mentions and links are different.",mention:{article:"A",term:"mention",definition:"is when AI says your name out loud in its answer."},link:{article:"A",term:"link",definition:"is when AI lists your website as a source it used."},closing:"AI can do either, both, or neither — that's why we track both."},queriesHeading:"Customer queries we tested",providerBarsHeading:"How often each AI tool mentions you",providerBarsSubtitle:"Higher is better. Each bar shows the share of customer queries where the AI named you in the answer."},"whats-changed":{client:{eyebrow:"Since last check",title:"What's different since last check",empty:"No comparison yet — trends will appear after a few more checks.",tiles:{mentionRate:"AI mentions your name",citationRate:"AI links to your website",mentionedQueryCount:"Queries AI mentioned you in",gscClicks:"Visitors from Google",aiReferrals:"Visitors from AI tools"},gscCountLabel:"visits",aiReferralsCountLabel:"visits",movementsHeading:"How each AI tool changed",movementHeaders:["AI tool","Was","Now","Change"],winsHeading:"What got better",winsEmpty:"No new wins this period.",regressionsHeading:"What got worse",regressionsEmpty:"Nothing got worse this period.",insightHeaders:["What changed","Customer query","AI tool"]},agency:{eyebrow:"Section 2",title:"What's Changed",empty:"Trends will appear after a few more checks.",tiles:{citationRate:"Citation rate",mentionRate:"Mention rate",citedQueryCount:"Cited queries",gscClicks:"GSC clicks",aiReferrals:"AI referral sessions"},gscCountLabel:"clicks",aiReferralsCountLabel:"sessions",movementsHeading:"AI engine movements",movementHeaders:["Engine","Prior","Current","Change"],winsHeading:"Wins",winsEmpty:"No new gains in the latest check.",regressionsHeading:"Regressions",regressionsEmpty:"No new regressions in the latest check.",insightHeaders:["Severity","Title","Query","Provider"]},rateTileEmpty:"No prior data",trafficTileEmpty:"Not enough trend data"},"client-action-plan":{eyebrow:"Action plan",title:"What to do next",intro:"Approve these in order. They are sorted by what will move the needle fastest.",empty:"No recommendations yet — run an AI check to populate this.",rankTitle:"Priority — 1 will move the needle fastest",detailsSummary:"See the data behind this",whyLabel:"Why this matters",evidenceLabel:"What we saw",successLabel:"What success looks like:"},"agency-action-plan":{eyebrow:"Agency actions",title:"Agency Action Plan",intro:"The highest-leverage work, sorted by urgency and evidence strength.",empty:"No prioritized actions yet.",rankTitle:"Impact rank — 1 is the highest-leverage action",detailsSummary:"Evidence details",whyLabel:"Why",evidenceLabel:"Evidence",successLabel:"Win condition:"},"client-evidence-summary":{eyebrow:"What we based this on",title:"The signals behind this plan",intro:"The data behind the recommendations above. Switch to Agency for the full breakdowns.",empty:"No supporting evidence yet — this fills in after the first AI check.",sources:{heading:"Where AI gets its answers",subtitle:"The websites AI tools cited most often when answering customer queries about your industry.",competitorTag:"(competitor)"},indexing:{heading:"Pages Google can find on your site",subtitle:"Google indexing your site increases the chances of it appearing in AI search (especially Gemini)."},search:{heading:"What people search Google for",subtitleLead:"You appeared in",subtitleMiddle:"Google searches and got",subtitleTail:"this period."},opportunities:{heading:"Topics where you could improve",subtitle:"Customer queries where better content on your site would help AI cite you.",cededTag:"Ceded surface"}}};function RX(e,n){return e>0?`When customers asked AI ${e} ${Aa(e,"query","queries")} about your industry, AI mentioned you in ${n} of ${e===1?"them":"those queries"}.`:Fd["client-summary"].heroEmpty}function EX(e,n){return n>0?`Says your name in ${e} of ${n} ${Aa(n,"query","queries")}`:Fd["client-summary"].noData}function zX(e,n){return n>0?`Cites your site as a source in ${e} of ${n} ${Aa(n,"query","queries")}`:Fd["client-summary"].noData}function DX(e,n){return e.length>0?e.map(i=>vV(i)).join(", "):`${In(n)} ${Aa(n,"query","queries")} tested`}function OX(e){return`These are the ${e} ${Aa(e,"query we asked","queries we asked")} every AI tool. The numbers above measure how often you came up.`}function IX(e,n){const i=n===fc?e.clientSummary.actionItems:e.agencyDiagnostics.priorities.length>0?e.agencyDiagnostics.priorities:e.actionPlan.filter(r=>r.audience===fV||r.audience===n);return d3(e,i)}function PX(e,n){return e===fc?xV(n):yB(n)}function qX(e,n){return e===fc?wV(n):`${bB(n)} confidence`}function MX(e){return`${In(e)}×`}function BX(e,n){return`${In(e)} of ${In(n)} pages indexed`}function LX(e){return`${Aa(e,"page is","pages are")} not indexed yet.`}function VX(e){return Aa(e,"click")}function $X(e){return`${In(e)} ${Aa(e,"search","searches")}`}function UX(e){return e>=90?"positive":e>=70?"caution":"negative"}const W0={"executive-summary":{eyebrow:"Section 1",title:"Executive Summary",intro:"Citation = source list. Mention = answer text. They are independent signals.",heroKicker:"Latest AI visibility check",emptyTitle:"No AI citation data yet",emptySubtitle:"Run a check to populate the first citation and mention baseline.",noQueries:"no queries",proofTiles:{citationTrend:"Citation trend",mentionCoverage:"Mention coverage",prioritizedActions:"Prioritized actions"},prioritizedActionsCopy:"Sorted for agency follow-up.",tiles:{citationRate:"Citation rate",mentionRate:"Mention rate",queriesTracked:"Queries tracked",gscClicks:"GSC clicks",gaSessions:"GA sessions"},trendLabels:{up:"↑ Up",down:"↓ Down",flat:"→ Flat",unknown:"—"},marketScope:{heading:"Market Scope",currentLabel:"Current check",currentCopy:"All findings below are scoped to this run.",notIncludedLabel:"Not included",providerLabel:"Provider context",noOtherMarkets:"None",noProviders:"—",singleMarketCopy:"Single-market report; findings can be read as the current market view.",noMarketCopy:"No geographic hint was attached to this check; read findings as default-market or national results.",noProviderMetadataCopy:"No provider-level location metadata is available for this report.",warningTitle:"Location handling needs review",warningDetail:"used weak or indirect market handling. Treat provider-level differences cautiously."}},"agency-diagnostics":{eyebrow:"Agency diagnostics",title:"Technical Diagnostics",intro:"Fast-read operator flags behind the action plan.",empty:"No agency diagnostics available yet.",hiddenTitle:"Location caveat"},"recommended-next-steps":{eyebrow:"Section 16",title:"Recommended Next Steps",intro:"Action items bucketed by timing.",empty:"No outstanding actions."}};function GX(e){const n=W0["executive-summary"],i=e.executiveSummary,r=i.trend,u=r==="up"?n.trendLabels.up:r==="down"?n.trendLabels.down:r==="flat"?n.trendLabels.flat:n.trendLabels.unknown,h=r==="up"?"positive":r==="down"?"negative":"neutral",g=(i.totalQueryCount??0)>0,b=i.totalQueryCount===1?"query":"queries",v=e.agencyDiagnostics.priorities.length>0?e.agencyDiagnostics.priorities:e.actionPlan,w=i.gsc?ej(e):"";return{trendLabel:u,trendTone:h,title:g?`${i.citedQueryCount} of ${i.totalQueryCount} tracked ${b} cite ${e.meta.project.displayName}`:n.emptyTitle,subtitle:g?`${i.citationRate}% citation coverage and ${i.mentionRate}% mention coverage across ${i.providerCount} ${Aa(i.providerCount,"provider")}.`:n.emptySubtitle,citedFragment:g?`${i.citedQueryCount}/${i.totalQueryCount} ${b} cited`:n.noQueries,mentionedFragment:g?`${i.mentionedQueryCount}/${i.totalQueryCount} ${b} mentioned`:n.noQueries,prioritizedActionCount:d3(e,v).length,providerCountLabel:`${i.providerCount} provider${i.providerCount===1?"":"s"}`,competitorCountLabel:`${i.competitorCount} competitor${i.competitorCount===1?"":"s"} tracked`,gscDelta:i.gsc?`${In(i.gsc.impressions)} imp · ${tO(i.gsc.ctr)} CTR${w?` · ${w}`:""}`:null,gaDelta:i.ga?`${In(i.ga.users)} users · ${oo(i.ga.periodStart)} → ${oo(i.ga.periodEnd)}`:null}}function KX(e){const n=W0["executive-summary"].marketScope,i=e.meta.location,r=e.meta.providerLocationHandling;if(!i&&r.length===0)return null;const u=i?.otherConfiguredLabels??[],h=r.filter(g=>g.treatment==="ignored"||g.treatment==="browser-geo").map(g=>g.provider);return{currentValue:i?W3(i):yf.noMarket,notIncludedValue:u.length>0?Ox(u,4):n.noOtherMarkets,notIncludedCopy:i?u.length>0?`${u.length} configured ${Aa(u.length,"market")} still ${u.length===1?"needs":"need"} a matching check before cross-market recommendations.`:n.singleMarketCopy:n.noMarketCopy,providerValue:r.length>0?In(r.length):n.noProviders,providerCopy:r.length>0?h.length>0?`${h.length} ${Aa(h.length,"provider")} need a closer location check.`:`${r.length} ${Aa(r.length,"provider")} received the market context.`:n.noProviderMetadataCopy,weakProviders:h.length>0?Ox(h,4):null}}const kV={"citation-scorecard":{eyebrow:"Section 3",title:"Citation Scorecard",intro:"Per-engine citation and mention coverage from the latest check.",providerChartTitle:"Provider citation rate",empty:"Run a check to populate the citation matrix.",queryHeader:"Query",glyphs:{cited:"C",notCited:"c",mentioned:"M",notMentioned:"m",pending:"–",missingCell:"— —"},legend:{lead:"Legend:",citedMeaning:"= cited/not,",mentionedMeaning:"= mentioned/not,",pendingMeaning:"= no data."}},"competitor-landscape":{eyebrow:"Section 4",title:"Competitor Landscape",intro:"Who AI engines cite and mention instead of the client.",empty:"No competitor data yet. Add competitors and run a check.",noCompetitors:"No competitors configured.",citationsChartTitle:"Citations per domain",brandedChartTitle:"Mentions per domain · branded queries",headers:{domain:"Domain",pressure:"Pressure",citations:"Citations",citationShare:"Citation share",citedQueries:"Cited queries"},citationShareTooltip:"Citation share — % of cited-source slots that went to this competitor across tracked queries. Distinct from Mention Share."},"ai-source-origin":{eyebrow:"Section 5",title:"AI Citation Sources",intro:"External domains AI engines cited most in the latest check.",empty:"No source data yet. Run a check first.",topSourcesHeading:"Top sources",topSourceHeaders:["Domain","Citations","Tag"],trackedCompetitorTag:"Tracked competitor",externalTag:"External",categoriesHeading:"By source type"}};function HX(e){return`${e.citationRate}% (${e.citedCount}/${e.totalCount})`}const SV={"non-brand":"non-brand queries",pooled:"pooled queries · classification unavailable"};function jV(e){return SV[e]??"pooled queries · classification unavailable"}function QX(e){const n=jV(e.scope),i=e.branded;return{scopeLabel:n,mentionsHeader:`Mentions (${n})`,mentionsTooltip:e.scope==="non-brand"?`Mentions on ${n}. Branded queries are counted separately — the client is named on nearly all of them and a competitor cannot be, so pooling the two would rank the client on its own brand recall.`:`Mentions on ${n}. The project has no usable brand identity for a branded/non-brand split, so all tracked queries remain pooled and this is not a competitive category read.`,mentionsChartTitle:`Mentions per domain · ${n}`,mentionShareUnavailable:`Mention share unavailable for ${n}: no tracked brand was named, so the denominator is 0.`,brandedNote:`Branded queries contain the client's own name. The client is named on nearly all of them and a competitor structurally cannot be, so these are kept out of the competitive figure above. Read them as brand recall: ${i?.projectMentionCount??0} of ${i?.totalAnswerSnapshots??0} branded answers named the client.`}}function FX(e){return`${e} cited URL${e>1?"s":""}`}function ZX(e){const n=e.find(r=>r.category===Zu.competitor);if(!n)return null;const i=e.reduce((r,u)=>r+u.count,0);return{share:`${n.sharePct}%`,detail:`of citations went to tracked competitors (${n.count} of ${i}).`}}function YX(e){return`(${e}%)`}const AV={gsc:{eyebrow:"Section 6",title:"GSC Performance",empty:"Connect Google Search Console to populate this section.",tiles:{clicks:"Total clicks",impressions:"Total impressions",ctr:"Avg CTR",position:"Avg position"},trendTitle:"Clicks over time",topQueriesHeading:"Top queries",topQueryHeaders:["Query","Clicks","Imp.","CTR","Pos.","Category"],intentHeading:"Search demand by intent",intentCountLabel:"clicks",untrackedDemand:{heading:"AEO queries without search demand",subtitle:"Review whether these still belong in the tracking set."},suggestedQueries:{heading:"Search queries you should track",subtitle:"High-impression candidates to add to AEO tracking."}},ga:{eyebrow:"Section 7",title:"GA4 Traffic",empty:"Connect Google Analytics 4 to populate this section.",tiles:{sessions:"Total sessions",users:"Total users",organicSessions:"Organic sessions"},topPagesHeading:"Top landing pages",topPageHeaders:["Page","Sessions","Organic"],channelsHeading:"Channel mix",channelsCountLabel:"sessions"},"social-referrals":{eyebrow:"Section 8",title:"Social Referrals",intro:"Social traffic split by channel and campaign.",empty:"No social referral data yet.",tiles:{sessions:"Total sessions",organic:"Organic social",paid:"Paid social"},channelsHeading:"Social channel mix",channelsCountLabel:"sessions",campaignsHeading:"Top campaigns",campaignHeaders:["Source","Medium","Sessions"]},"ai-referrals":{eyebrow:"Section 9",title:"AI Referral Traffic",intro:"Traffic arriving from AI answer engines.",empty:"No AI referral traffic detected yet.",tiles:{sessions:"Total sessions"},trendTitle:"AI referral sessions over time",sourcesHeading:"AI sessions by source",sourcesCountLabel:"sessions",topPagesHeading:"Top AI landing pages",topPageHeaders:["Page","Sessions"]}};function ej(e){const n=e.executiveSummary.gsc,i=e.gsc,r=n?.periodStart||i?.periodStart||i?.trend.at(0)?.date||"",u=n?.periodEnd||i?.periodEnd||i?.trend.at(-1)?.date||"";return iO(r,u)}function XX(e){const n=ej(e);return`Search demand signals to compare against AI visibility${n?` for ${n}`:""}.`}function WX(e){return`Site traffic from ${oo(e.periodStart)} to ${oo(e.periodEnd)}.`}function JX(e,n){return`${e} · ${n}%`}const J0={"server-activity":{title:"AI Visibility — Server-Side",client:{eyebrow:"AI engine attention",introNoData:"Live telemetry from your server logs.",empty:"Your server-side traffic source is connected. Numbers will appear after the next sync.",tiles:{botRequests:"AI bot requests observed",userFetches:"AI user-fetch requests",referralSessions:"AI referral sessions"},userFetchFallback:"ChatGPT-User, Perplexity-User, MistralAI-User",operatorsHeading:"By AI tool",operatorsFootnote:"Bot requests are bulk crawl (GPTBot, PerplexityBot, …). User fetches are on-demand reads triggered by real users inside an AI surface (ChatGPT-User, Perplexity-User, …). Verified means the request came from an IP the operator publishes as its own; unverified means the user-agent matched but the IP is not in a published range. User-fetch totals count both, since many genuine user fetches come from outside any published range."},agency:{eyebrow:"Section 10",intro:"What AI engines actually do in your server logs — direct evidence, complementary to citations (which measure what they say).",emptyNotConnected:"Connect a server-side traffic source to surface what AI engines do directly in your server logs — distinct from GA4 click-throughs.",empty:"Source connected — collecting your first data. Numbers will appear after the next sync.",operatorsHeading:"Per AI operator",operatorsNote:"Verified means the request's source IP falls inside the operator's published range. Unverified bots claim the user-agent but the IP is not in a published range, so it could be the real bot or an imitator. User fetches are on-demand reads from an AI surface on behalf of a real user (ChatGPT-User, Perplexity-User, …), disjoint from bulk crawl and counted whether or not the IP can be verified.",noDelta:"—",crawledPathsHeading:"Top crawled paths",crawledPathHeaders:["Path","Hits","Verified","Distinct operators"],referralProductsHeading:"AI-referral sessions by product",referralProductsNote:"Where humans landed coming from each AI product (chatgpt.com, claude.ai, …).",referralProductHeaders:["Product","Sessions","Distinct landing paths"],referralLandingHeading:"Top AI-referral landing paths",referralLandingHeaders:["Path","Sessions","Distinct products"]},countNouns:{requests:"requests",hits:"hits",sessions:"sessions"}},"indexing-health":{eyebrow:"Section 11",title:"Indexing Health",empty:"Connect Google Search Console or Bing Webmaster Tools and run a sitemap inspection.",tiles:{indexed:"Indexed",total:"Total inspected",share:"Indexed share"},coverageHeading:"Coverage breakdown",coverageLabel:"Coverage stacked bar",segments:{indexed:"Indexed",notIndexed:"Not indexed",deindexed:"Deindexed",unknown:"Unknown"}},"citations-trend":{eyebrow:"Section 12",title:"Citations Over Time",intro:"Citation coverage across recent checks.",empty:"Run multiple checks to see a trend.",chartTitle:"Overall citation rate",breakdownHeading:"Check-by-check breakdown",breakdownHeaders:["Check","Cited queries","Per-engine rates"]}};function eW(e,n,i){const r=J0["server-activity"],u=e===fc;return{id:Nt["server-activity"],eyebrow:u?r.client.eyebrow:r.agency.eyebrow,title:r.title,intro:u?n?`What AI engines actually do in your server logs over the last ${i} days — the other half of citations.`:r.client.introNoData:r.agency.intro}}function Zd(e){return`${e}d`}function tW(e){const n=Zd(e);return["AI tool",`Bot requests (${n})`,`User fetches (${n})`,"Referral sessions"]}function nW(e){const n=Zd(e);return{verified:`Verified crawler hits (${n})`,unverified:`Unverified crawler hits (${n})`,userFetches:`AI user-fetch hits (${n})`,referralSessions:`AI-referral sessions (${n})`}}function aW(e){return["Operator","Verified hits","Unverified","User fetches","Referral sessions",`${Zd(e)} delta`]}function iW(e){return`Verified crawler hits over time (last ${e} days)`}function sW(e){return`Pages AI bots fetched most often (verified only, last ${Zd(e)}).`}function oW(e){return e===null?J0["server-activity"].agency.noDelta:`${e>0?"+":""}${e}%`}function rW(e){return e.verifiedHits+e.unverifiedHits}function lW(e,n){return`${In(e)} verified · ${In(n)} unverified`}function cW(e){return e>0?`${In(e)} blocked by redirects`:""}function uW(e){return`Pages absent from ${e==="google"?"Google":"Bing"} are harder for AI engines to retrieve.`}function dW(e,n){return`${e}: ${n}`}function mW(e){return`Building baseline (${e} of ${X3} checks completed). Trend will appear once more checks are recorded.`}function pW(e){return e.map(n=>`${n.provider}: ${n.citationRate}%`).join(" · ")}const CV={insights:{eyebrow:"Section 13",title:"Insights & Alerts",intro:"Regressions, gains, and recurring alerts ordered by severity.",empty:"No insights yet — run a check to generate alerts.",headers:["Severity","Title","Query","Provider","Recommendation"],noRecommendation:"—"},"content-opportunities":{eyebrow:"Section 14",title:"Content Opportunities",intro:"Queries where content work has the clearest path to more AI citations. Opportunity score is 0–100, higher = stronger. Winnability flags whether the cited surface is ownable or ceded to aggregators/editorial.",headers:["Query","Action","Winnability","Score","Why","Our page","Winning competitor","Confidence"],scoreSuffix:"/100",scoreCardTooltip:"Opportunity score (0–100, higher = stronger)",scoreHeaderTooltip:"Opportunity score (0–100)",noDriverSignal:"No driver signal yet",noPage:"No page yet",noWinningCompetitor:"—"},"content-gaps":{eyebrow:"Section 15",title:"Content Gaps",intro:"Tracked queries where competitors are cited and the client is missing.",headers:["Query","Competitors cited","Domains","Miss rate"]}};function hW(e){return`${xM(e.action)} · ${wM(e.actionConfidence)} confidence`}function fW(e){return nO(e)}const gW={...Fd,...W0,...kV,...AV,...J0,...CV},tj=A(["trace","debug","info","warn","error","fatal"]),NV=m({runId:o().min(1).max(256).optional(),projectId:o().min(1).max(256).optional(),requestId:o().min(1).max(256).optional(),actor:o().min(1).max(512).optional(),credentialId:o().min(1).max(512).optional(),userAgent:o().min(1).max(512).optional(),actorSession:o().min(1).max(512).optional(),method:o().min(1).max(16).optional(),route:o().min(1).max(256).optional(),operationId:o().min(1).max(256).optional(),jobId:o().min(1).max(256).optional(),taskId:o().min(1).max(256).optional(),traceId:o().min(1).max(256).optional(),errorCode:o().min(1).max(128).optional(),attempt:d().finite().optional(),count:d().finite().optional(),total:d().finite().optional(),progress:d().finite().optional(),httpStatus:d().finite().optional(),statusCode:d().finite().optional(),durationMs:d().finite().optional(),bytes:d().finite().optional(),retryAfterMs:d().finite().optional(),retriable:N().optional(),retrying:N().optional(),cancelled:N().optional(),success:N().optional()}).strict(),_V=m({cursor:o().min(1).max(512),ts:o().datetime(),level:tj,module:o().min(1).max(256),action:o().min(1).max(256),message:o().max(4096).optional(),runId:o().min(1).max(256).optional(),projectId:o().min(1).max(256).optional(),context:NV}).strict();m({level:tj.optional(),module:o().trim().min(1).max(256).optional(),runId:o().trim().min(1).max(256).optional(),projectId:o().trim().min(1).max(256).optional(),actor:o().trim().min(1).max(512).optional(),requestId:o().trim().min(1).max(256).optional(),since:o().datetime().optional(),until:o().datetime().optional(),limit:ec().int().min(1).max(200).default(100),cursor:o().trim().min(1).max(512).optional()}).strict().superRefine((e,n)=>{e.since&&e.until&&Date.parse(e.since)>Date.parse(e.until)&&n.addIssue({code:ve.custom,path:["until"],message:'"until" must be on or after "since".'})});m({entries:y(_V),nextCursor:o().min(1).max(512).nullable(),truncated:d().int().nonnegative(),dropped:d().int().nonnegative(),retention:A(["process","durable"]),retentionPolicy:m({maxEntries:d().int().positive(),maxAgeSeconds:d().int().positive()}).strict().optional(),captureErrors:d().int().nonnegative().optional(),observedAt:o().datetime()}).strict();function Ph(e){return e!==""&&/^[\w./:@%+=,-]+$/.test(e)?e:`'${e.replace(/'/g,"'\\''")}'`}class pn extends Error{code;statusCode;details;constructor(n,i,r,u){super(n),this.name="ApiError",this.code=r??"UNKNOWN",this.statusCode=i,this.details=u}}function yW(e){if(e instanceof pn)return e.details;if(typeof e!="object"||e===null)return;const n=e.error,i=typeof n=="object"&&n!==null?n.details:e.details;return typeof i=="object"&&i!==null&&!Array.isArray(i)?i:void 0}function fr(){if(typeof window>"u")return!1;const e=window.__CANONRY_CONFIG__?.demo;return e?.enabled===!0&&e.readOnly===!0&&e.sampleData===!0}function TV(){if(typeof window>"u")return"legacy";const e=window.__CANONRY_CONFIG__?.dashboard?.onboardingMode??window.__CANONRY_CONFIG__?.onboardingMode;return e==="platform"||e==="auto"||e==="legacy"?e:"auto"}function RV(){if(typeof window>"u")return;const e=window.__CANONRY_CONFIG__?.embed?.renderToken;return typeof e=="string"&&e.length>0?e:void 0}function eg(e){const n=RV();if(!n)return e;let i;const r=typeof window<"u"&&window.location?window.location.href:"http://localhost/";try{i=new URL(e,r)}catch{return e}const u=new URL(r).origin;if(i.origin!==u)return e;const g=`${Yd().replace(/\/$/,"")}/api/v1`;return i.pathname!==g&&!i.pathname.startsWith(`${g}/`)?e:(i.searchParams.set("token",n),/^[a-z][a-z\d+.-]*:/i.test(e)?i.toString():`${i.pathname}${i.search}${i.hash}`)}function EV(e,n){const i={method:e.method,headers:e.headers,cache:e.cache,credentials:e.credentials,integrity:e.integrity,keepalive:e.keepalive,mode:e.mode,redirect:e.redirect,referrer:e.referrer,referrerPolicy:e.referrerPolicy,signal:e.signal};return e.body&&(i.body=e.body,i.duplex="half"),new Request(n,i)}function nj(){if(typeof window>"u")return null;const e=window.__CANONRY_CONFIG__?.embed;return e?.enabled?e:null}function zV(){return typeof window>"u"?!0:window.__CANONRY_CONFIG__?.dashboard?.showResourceLinks!==!1}function DV(){return typeof window>"u"?!0:window.__CANONRY_CONFIG__?.dashboard?.showAgentBar!==!1}function OV(){return typeof window>"u"?!1:window.__CANONRY_CONFIG__?.agent?.allowViewers===!0}function tg(){return fr()}function IV(){return typeof window>"u"?!0:window.__CANONRY_CONFIG__?.dashboard?.showUpdateNotification!==!1}function eo(){return PV(Ee["answer-visibility"])}function PV(e){if(typeof window>"u")return!1;const n=window.__CANONRY_CONFIG__?.dashboard;return n?.managedRunKinds!==void 0?n.managedRunKinds.includes(e):e===Ee["answer-visibility"]&&n?.managedSweeps===!0}function qV(){if(typeof window>"u")return null;const e=window.__CANONRY_CONFIG__?.research;if(e?.allowViewers!==!0)return null;const n=e.viewerDailyRunLimit;return{allowViewers:!0,viewerDailyRunLimit:Number.isInteger(n)&&(n??0)>0?n:aL}}function Ix(){return qV()?"Analyst":"View only"}function MV(){return nj()!==null}function BV(){return typeof window<"u"&&window.__CANONRY_CONFIG__?.basePath?window.__CANONRY_CONFIG__.basePath.replace(/\/$/,"")+"/api/v1":"/api/v1"}const ng=BV();function LV(){const e=typeof window<"u"&&window.location?window.location.origin:"";return typeof window<"u"&&window.__CANONRY_CONFIG__?.basePath?e+window.__CANONRY_CONFIG__.basePath.replace(/\/$/,""):e}function Yd(){return typeof window<"u"&&window.__CANONRY_CONFIG__?.basePath?window.__CANONRY_CONFIG__.basePath.replace(/\/$/,""):""}function VV(e){const n=e.trim().toLowerCase().replace(/^\[|\]$/g,"");return n==="localhost"||n==="::1"?!0:/^127\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(n)}function $V(e,n){if(e.protocol!=="http:"&&e.protocol!=="https:"||!VV(e.hostname))return;const i=e.port?`:${e.port}`:"",r=n?n.replace(/\/$/,""):"";return`${e.protocol}//localhost${i}${r}`}function bW(e){return`${e.replace(/\/$/,"")}/api/v1/google/callback`}function vW(e){return`${e.replace(/\/$/,"")}/api/v1/google-marketing/callback`}function UV(){if(!(typeof window>"u"))return $V(window.location,Yd())}function GV(e){return`${Yd()}${e}`}function KV(e,n){if(n===404)return"Health endpoint returned 404. Check basePath or reverse-proxy configuration and make sure the dashboard reaches /health instead of an API-prefixed route."}function HV(){return""}function QV(){return!!HV()}let aj=null;function Px(e){aj=e}function ag(){aj?.()}const ne=v_({baseUrl:LV()});ne.interceptors.response.use((e,n)=>(e.status===401&&!n.url.includes("/api/v1/session")&&ag(),e));ne.interceptors.request.use(e=>{const n=eg(e.url);return n===e.url?e:EV(e,n)});async function be(e){const n=await e();if(n.error!==void 0&&n.error!==null){const i=n.response.status;let r=`API ${i}: ${n.response.statusText}`,u,h;if(typeof n.error=="object"&&n.error!==null){const g=n.error.error;if(typeof g=="string")r=g;else if(g&&typeof g=="object"){const b=g;b.message&&(r=b.message),b.code&&(u=b.code),b.details&&(h=b.details)}else{const b=n.error;b.message&&(r=b.message),b.code&&(u=b.code),b.details&&(h=b.details)}}else typeof n.error=="string"&&(r=n.error);throw new pn(r,i,u,h)}if(n.response.status!==204)return n.data}async function Ss(e,n){const i=n?.body!=null,r=await fetch(eg(`${ng}${e}`),{...n,credentials:n?.credentials??"same-origin",headers:{...i?{"Content-Type":"application/json"}:{},...n?.headers}});if(!r.ok){const u=await r.text();let h=`API ${r.status}: ${r.statusText}`,g,b;if(u)try{const v=JSON.parse(u);typeof v.error=="string"?h=v.error:v.error?.message?(h=v.error.message,g=v.error.code,b=v.error.details):v.message&&(h=v.message)}catch{h=u}throw r.status===401&&!e.startsWith("/session")&&!e.startsWith("/auth/")&&ag(),new pn(h,r.status,g,b)}if(r.status!==204)return r.json()}function FV(e){return be(()=>Jw({client:ne,path:{name:e}}))}function xW(e){return be(()=>nk({client:ne,path:{name:e}}))}function bf(e){return be(()=>ak({client:ne,path:{id:e}}))}function ij(e){return be(()=>tk({client:ne,path:{name:e}}))}function ZV(e,n,i){return be(()=>ZN({client:ne,path:{name:e},query:{location:n,limit:i}}))}function sj(e,n){return be(()=>R6({client:ne,path:{name:e},query:{location:n?.location,since:n?.since}}))}function oj(e,n){return be(()=>fN({client:ne,path:{name:e},body:n}))}function YV(e){return be(()=>pN({client:ne,body:e}))}function XV(e,n){return be(()=>qN({client:ne,path:{name:e},body:{queries:n}}))}function WV(e,n){return be(()=>PN({client:ne,path:{name:e},body:{queries:n}}))}function wW(e,n){return be(()=>IN({client:ne,path:{name:e},body:{queries:n}}))}function JV(e,n){return be(()=>T6({client:ne,path:{name:e},body:n}))}function e$(e,n){return be(()=>LN({client:ne,path:{name:e},body:{competitors:n}}))}function kW(e,n){return be(()=>BN({client:ne,path:{name:e},body:{competitors:n}}))}function SW(e,n){return be(()=>VN({client:ne,path:{name:e,id:n}}))}async function jW(e,n){const i=await FV(e);return oj(e,{displayName:n.displayName??i.displayName??i.name,canonicalDomain:n.canonicalDomain??i.canonicalDomain,ownedDomains:n.ownedDomains??i.ownedDomains,aliases:n.aliases??i.aliases,country:n.country??i.country,language:n.language??i.language,tags:i.tags,labels:i.labels,providers:n.providers??i.providers,providerModels:n.providerModels??i.providerModels??{},locations:n.locations??i.locations,defaultLocation:n.defaultLocation!==void 0?n.defaultLocation:i.defaultLocation,autoExtractBacklinks:i.autoExtractBacklinks})}function t$(e,n){const i={};return n?.location&&(i.location=n.location),n?.allLocations&&(i.allLocations=!0),n?.noLocation&&(i.noLocation=!0),be(()=>UN({client:ne,path:{name:e},body:i}))}function AW(e,n){return be(()=>zN({client:ne,path:{name:e},body:n}))}async function CW(e,n){await be(()=>DN({client:ne,path:{name:e,label:n}}))}function NW(e,n){return be(()=>ON({client:ne,path:{name:e},body:{label:n}}))}async function _W(e){await be(()=>hN({client:ne,path:{name:e}}))}function TW(){return be(()=>ik({client:ne}))}function qx(){return Ss("/session")}function n$(e){return Ss("/session/setup",{method:"POST",body:JSON.stringify({password:e})})}function a$(e){return Ss("/session",{method:"POST",body:JSON.stringify({password:e})})}function i$(e){return Ss("/session",{method:"POST",body:JSON.stringify({apiKey:e})})}function s$(){return Ss("/session",{method:"DELETE"})}function qh(){return be(()=>e5({client:ne}))}function Mx(){return Ss("/auth/session")}function o$(e,n){return Ss("/auth/login",{method:"POST",body:JSON.stringify({name:e,password:n})})}function Bx(){return Ss("/auth/logout",{method:"POST"})}function rj(e,n){return be(()=>WN({client:ne,path:{name:e},body:n}))}async function ig(e){for(let n=0;n<2;n+=1)try{await be(()=>p5({client:ne,body:e}));return}catch(i){if(!(!(i instanceof pn)||i.statusCode>=500)||n===1)return}}function RW(e){return be(()=>JN({client:ne,body:e}))}function EW(e,n){return be(()=>s5({client:ne,path:{name:e},body:n}))}async function zW(e,n){await be(()=>a5({client:ne,path:{name:e},query:n===void 0?void 0:{expectedUpdatedAt:n}}))}function DW(e){return be(()=>r5({client:ne,path:{name:e}}))}function OW(e,n){return be(()=>l5({client:ne,path:{name:e},body:n}))}async function IW(e,n){await be(()=>c5({client:ne,path:{name:e,id:n}}))}function PW(e,n){return be(()=>u5({client:ne,path:{name:e,id:n}}))}function r$(e,n,i){return be(()=>MN({client:ne,path:{name:e},body:{provider:n,count:i}}))}function l$(e){return be(()=>HN({client:ne,body:e}))}function c$(e){return be(()=>KN({client:ne,body:e??{}}))}function qW(e,n){const i=UV();return be(()=>P5({client:ne,path:{name:e},body:{type:n,...i?{publicUrl:i}:{}}}))}function MW(e,n){return be(()=>q5({client:ne,path:{name:e,type:n}}))}function BW(e,n,i){return be(()=>B5({client:ne,path:{name:e,type:n},body:{propertyId:i}}))}function LW(e,n,i){return be(()=>L5({client:ne,path:{name:e,type:n},body:{sitemapUrl:i}}))}function u$(e,n){return be(()=>V5({client:ne,path:{name:e},body:n??{}}))}function VW(e,n){const i={};return n&&n!=="all"&&(i.window=n),be(()=>YN({client:ne,path:{name:e},query:i}))}function $W(e,n){return be(()=>G5({client:ne,path:{name:e},body:{url:n}}))}function d$(e,n){return be(()=>Y5({client:ne,path:{name:e},body:n??{}}))}function UW(e,n){return be(()=>Z5({client:ne,path:{name:e},query:n?{sitemapIndex:n}:void 0}))}function GW(e,n){return be(()=>dN({client:ne,path:{name:e},body:{sitemapUrls:n}}))}function m$(e,n){return be(()=>d_({client:ne,path:{name:e},body:n??{}}))}function KW(e,n){return be(()=>W6({client:ne,path:{name:e},body:n??{}}))}function HW(){return be(()=>sk({client:ne}))}function QW(e,n){return be(()=>n5({client:ne,body:{host:e,port:n}}))}function FW(e,n){return be(()=>X5({client:ne,path:{name:e},body:n}))}function ZW(e,n){return be(()=>o6({client:ne,path:{name:e},body:{apiKey:n}}))}function YW(e){return be(()=>r6({client:ne,path:{name:e}}))}function XW(e,n){return be(()=>u6({client:ne,path:{name:e},body:{siteUrl:n}}))}function WW(e,n){return be(()=>p6({client:ne,path:{name:e},body:{url:n}}))}function JW(e,n){return be(()=>h6({client:ne,path:{name:e},body:{}}))}function eJ(e,n){return be(()=>f6({client:ne,path:{name:e},body:n}))}function tJ(e){return be(()=>t5({client:ne,body:{apiKey:e}}))}function lj(e){return e?/filename\s*=\s*"?([^";]+)"?/i.exec(e)?.[1]??null:null}async function nJ(e,n="agency",i){const r=new URLSearchParams({audience:n});i!==void 0&&r.set("period",String(i));const u=await fetch(eg(`${ng}/projects/${encodeURIComponent(e)}/report.html?${r.toString()}`),{credentials:"same-origin",headers:{}});if(!u.ok)throw new pn(`Failed to download report: ${u.status}`,u.status);const h=await u.blob(),g=URL.createObjectURL(h),b=lj(u.headers.get("Content-Disposition"))??`canonry-report-${e}.html`,v=document.createElement("a");v.href=g,v.download=b,document.body.appendChild(v),v.click(),document.body.removeChild(v),URL.revokeObjectURL(g)}async function aJ(e,n){const i=await fetch(`${ng}/projects/${encodeURIComponent(e)}/results/export?format=${n}`,{credentials:"same-origin",headers:{}});if(!i.ok)throw new pn(`Failed to download results: ${i.status}`,i.status);const r=await i.blob(),u=URL.createObjectURL(r),h=lj(i.headers.get("Content-Disposition"))??`canonry-results-${e}.${n}`,g=document.createElement("a");g.href=u,g.download=h,document.body.appendChild(g),g.click(),document.body.removeChild(g),URL.revokeObjectURL(u)}function iJ(e,n){return be(()=>x6({client:ne,path:{name:e},body:{}}))}function sJ(e,n){return be(()=>y6({client:ne,path:{name:e},body:n}))}function oJ(e){return be(()=>b6({client:ne,path:{name:e}}))}function rJ(e,n){return be(()=>U6({client:ne,path:{name:e},body:n}))}function lJ(e,n){return be(()=>G6({client:ne,path:{name:e},body:n}))}function cJ(e,n){return be(()=>K6({client:ne,path:{name:e},body:n}))}function uJ(e,n,i){return be(()=>H6({client:ne,path:{name:e,id:n},body:i??{}}))}function dJ(e,n,i){return be(()=>Q6({client:ne,path:{name:e,id:n},body:{}}))}function mJ(e,n){return be(()=>A6({client:ne,path:{name:e},query:{runId:n}}))}function p$(e){if(!e||typeof e!="object")return;const n=e;if(!(typeof n.current!="string"||typeof n.latest!="string"||typeof n.url!="string"||typeof n.upgradeCommand!="string"))return{current:n.current,latest:n.latest,url:n.url,upgradeCommand:n.upgradeCommand}}async function h$(e,n){const i=GV(e);try{const r=await fetch(i,{credentials:"same-origin"});if(!r.ok)return{label:n,state:"error",detail:`${n} ${r.status}: ${r.statusText}`,statusCode:r.status,hint:KV(e,r.status)};const u=await r.json(),h=typeof u.version=="string"?u.version:"unknown",g=typeof u.databaseUrlConfigured=="boolean"?u.databaseUrlConfigured:void 0,b=typeof u.lastHeartbeatAt=="string"?u.lastHeartbeatAt:void 0,v=p$(u.updateAvailable),w=cV.safeParse(u.mcp),k=[h,g===!1?"database not configured":"database configured",b?`heartbeat ${b}`:void 0].filter(Boolean).join(" · ");return{label:n,state:"ok",detail:k,version:h,databaseConfigured:g,lastHeartbeatAt:b,...v?{updateAvailable:v}:{},...w.success?{mcp:w.data}:{}}}catch(r){return{label:n,state:"error",detail:r instanceof Error?r.message:"unreachable",hint:e==="/health"?`Request failed while checking ${i}. If this instance is served behind a sub-path, verify the dashboard basePath and reverse-proxy rewrites.`:void 0}}}function pJ(){return be(()=>E6({client:ne}))}function hJ(){return be(()=>z6({client:ne}))}function fJ(){return be(()=>I6({client:ne}))}function gJ(){return be(()=>D6({client:ne}))}function yJ(e){return be(()=>O6({client:ne,body:e?{release:e}:{}}))}function bJ(){return be(()=>P6({client:ne}))}function vJ(){return be(()=>q6({client:ne}))}function xJ(e){return be(()=>M6({client:ne,path:{release:e}}))}function wJ(e,n={}){return be(()=>L6({client:ne,path:{name:e},query:{release:n.release,excludeCrawlers:n.excludeCrawlers?"1":void 0,source:n.source}}))}function kJ(e,n={}){return be(()=>V6({client:ne,path:{name:e},query:{limit:n.limit!==void 0?String(n.limit):void 0,offset:n.offset!==void 0?String(n.offset):void 0,release:n.release,excludeCrawlers:n.excludeCrawlers?"1":void 0,source:n.source}}))}function SJ(e,n={}){return be(()=>$6({client:ne,path:{name:e},query:{source:n.source}}))}function jJ(e,n){return be(()=>B6({client:ne,path:{name:e},body:{release:void 0}}))}async function Lx(e,n){return be(()=>h_({client:ne,path:{name:e},query:n}))}async function f$(e,n){return be(()=>f_({client:ne,path:{name:e},body:{id:n}}))}async function g$(e,n){return be(()=>y_({client:ne,path:{name:e,id:n}}))}async function y$(e,n){return be(()=>g_({client:ne,path:{name:e,id:n}}))}const cj={account:null,canWrite:!0,isAdmin:!0},b$={account:null,canWrite:!1,isAdmin:!1};function v$(e){const n=e.scopes.includes(zx);return{account:null,canWrite:!e.readOnly&&n,isAdmin:e.projectId===null&&e.scopes.includes(zx)}}const uj=C.createContext(cj);function x$({account:e,apiKey:n,apiKeyPending:i=!1,children:r}){const u=i?b$:n?v$(n):e?{account:e,canWrite:e.role==="admin",isAdmin:e.role==="admin"}:cj;return c.jsx(uj.Provider,{value:u,children:r})}function oa(){return C.useContext(uj)}const dj="View only — your account cannot change this.";function rn(e){return(...n)=>{e(...n)}}const w$=6e3,k$=5,S$=180;let En=[],j$=0;const vf=new Set,xf=new Map,wf=new Map;function pd(){const e=[...En];for(const n of vf)n(e)}function sg(e){const n=xf.get(e);n&&(clearTimeout(n),xf.delete(e));const i=wf.get(e);i&&(clearTimeout(i),wf.delete(e))}function mj(e){sg(e);const n=En.length;En=En.filter(i=>i.id!==e),En.length!==n&&pd()}function Vx(e){sg(e.id),xf.set(e.id,setTimeout(()=>{kf(e.id)},e.durationMs))}function A$(e,n,i){return typeof e=="string"?{title:e,tone:n,durationMs:i}:e}function hn(e,n="negative",i=w$){const r=A$(e,n,i),u={id:String(++j$),title:r.title,detail:r.detail,tone:r.tone??n,durationMs:r.durationMs??i,dedupeKey:r.dedupeKey,cta:r.cta,state:"open"};if(r.dedupeKey){const h=En.find(g=>g.dedupeKey===r.dedupeKey);if(h){if((r.dedupeMode??"drop")==="drop")return h.id;const g={...h,title:u.title,detail:u.detail,tone:u.tone,durationMs:u.durationMs,cta:u.cta,state:"open"};return En=En.map(b=>b.id===h.id?g:b),pd(),Vx(g),h.id}}return En.length>=k$&&mj(En[0].id),En=[...En,u],pd(),Vx(u),u.id}function kf(e){const n=En.find(i=>i.id===e);!n||n.state==="closing"||(sg(e),En=En.map(i=>i.id===e?{...i,state:"closing"}:i),pd(),wf.set(e,setTimeout(()=>{mj(e)},S$)))}function C$(e){return vf.add(e),()=>{vf.delete(e)}}function $x(){return En}const N$=5*6e4,Yu=30*6e4,AJ=3e4,CJ=6e4,jr=3e4,_$=2e3,T$=3e4;function R$(){return new u4({defaultOptions:{queries:{staleTime:N$,retry:1,refetchOnWindowFocus:!1}},mutationCache:new d4({onError:(n,i,r,u)=>{u.meta?.skipGlobalErrorToast||hn({title:n instanceof Error?n.message:"An unexpected error occurred",tone:"negative"})}})})}const E$="modulepreload",z$=function(e,n){return new URL(e,n).href},Ux={},Ri=function(n,i,r){let u=Promise.resolve();if(i&&i.length>0){let w=function(k){return Promise.all(k.map(j=>Promise.resolve(j).then(T=>({status:"fulfilled",value:T}),T=>({status:"rejected",reason:T}))))};const g=document.getElementsByTagName("link"),b=document.querySelector("meta[property=csp-nonce]"),v=b?.nonce||b?.getAttribute("nonce");u=w(i.map(k=>{if(k=z$(k,r),k in Ux)return;Ux[k]=!0;const j=k.endsWith(".css"),T=j?'[rel="stylesheet"]':"";if(r)for(let G=g.length-1;G>=0;G--){const R=g[G];if(R.href===k&&(!j||R.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${k}"]${T}`))return;const _=document.createElement("link");if(_.rel=j?"stylesheet":E$,j||(_.as="script"),_.crossOrigin="",_.href=k,v&&_.setAttribute("nonce",v),document.head.appendChild(_),j)return new Promise((G,R)=>{_.addEventListener("load",G),_.addEventListener("error",()=>R(new Error(`Unable to preload CSS for ${k}`)))})}))}function h(g){const b=new Event("vite:preloadError",{cancelable:!0});if(b.payload=g,window.dispatchEvent(b),!b.defaultPrevented)throw g}return u.then(g=>{for(const b of g||[])b.status==="rejected"&&h(b.reason);return n().catch(h)})},og=C.createContext({view:null,publish:()=>()=>{}});function D$({children:e}){const[n,i]=C.useState(null),r=C.useCallback(u=>(i(u),()=>i(h=>h===u?null:h)),[]);return c.jsx(og.Provider,{value:C.useMemo(()=>({view:n,publish:r}),[n,r]),children:e})}function NJ(e,n){const{publish:i}=C.useContext(og),r=JSON.stringify(n);C.useEffect(()=>i({project:e,context:JSON.parse(r)}),[i,e,r])}function O$(e,n){const{view:i}=C.useContext(og);return i?.project===e&&i.context.view===n.view?i.context:n}var I$=(e=>(e.Clicks="clicks",e.Impressions="impressions",e.CTR="ctr",e.Position="position",e))(I$||{});const _J={clicks:"Clicks",impressions:"Impressions",ctr:"CTR",position:"Position"},TJ={clicks:"Clicks",impressions:"Impr",ctr:"CTR",position:"Pos"},P$=T0;function q$(e){const n=[];if(e.message&&n.push(e.message),e.providers)for(const[i,r]of Object.entries(e.providers)){const u=`[${i}] ${r.message}`;r.raw!==void 0?n.push(`${u}
|
|
53
53
|
|
|
54
54
|
${JSON.stringify(r.raw,null,2)}`):n.push(u)}return n.length>0?n.join(`
|
|
55
55
|
|
|
@@ -83,4 +83,4 @@ spec:
|
|
|
83
83
|
`);An($e),zi(!0)}}catch($){Br($ instanceof Error?$.message:"Failed to generate queries"),ae({flowVersion:mt,onboardingSessionId:q,event:"onboarding.blocked",step:"queries",action:"generate_queries",reasonCode:Yl($,"unknown")},"onboarding.blocked:queries:generate")}finally{qr(!1)}}},Zr=async()=>{if(!Le)return;const $=oi;if($.length!==0){$a(!0),Ur(null);try{await e$(Le,$),qi(!0),await r(),ae({flowVersion:mt,onboardingSessionId:q,event:"onboarding.step_completed",step:"competitors",method:"manual",countBucket:Wa($.length)},"onboarding.step_completed:competitors"),Y(4)}catch($e){Ur($e instanceof Error?$e.message:"Failed to save competitors"),ae({flowVersion:mt,onboardingSessionId:q,event:"onboarding.blocked",step:"competitors",action:"save",reasonCode:"unknown"},"onboarding.blocked:competitors:save")}finally{$a(!1)}}},Yr=async()=>{const $=Bi.trim();if($){jo(!0),Ao(null);try{await rj("gemini",{apiKey:$}),hn({title:"Gemini configured",detail:"Provider is ready — continuing setup.",tone:"positive",dedupeKey:"setup:gemini:configured",dedupeMode:"drop"}),wc(""),await r(),Ts(v.providerStatuses.find($e=>$e.name.toLowerCase()==="gemini")?.name??"gemini"),ae({flowVersion:mt,onboardingSessionId:q,event:"onboarding.step_completed",step:"system",method:"inline"},"onboarding.step_completed:system")}catch($e){Ao($e instanceof Error?$e.message:"Failed to save Gemini key"),ae({flowVersion:mt,onboardingSessionId:q,event:"onboarding.blocked",step:"system",action:"configure_provider",reasonCode:"provider_save_failed"},"onboarding.blocked:system:provider_save_failed")}finally{jo(!1)}}},ri=async()=>{if(!eo()){if(!Le||Ka){Nn(Ka??"Complete setup before launching the first sweep.");const $=ma??(Le?da===0?"no_queries":"run_rejected":"unknown");ca||ae({flowVersion:mt,onboardingSessionId:q,event:"run.requested",origin:"dashboard_setup",result:"rejected",providerCountBucket:Wa(Ht),queryCountBucket:Wa(da),reasonCode:$});return}zs(!0),Nn(null);try{const $=await Qr.mutateAsync({projectName:Le,projectLabel:ye||Ne||Le,sourceAction:"setup-launch"});um($.id),cm(!0),Wj(Le,$.id),Hr.current=$.id,ca||ae({flowVersion:mt,onboardingSessionId:q,event:"run.requested",origin:"dashboard_setup",result:"queued",providerCountBucket:Wa(Ht),queryCountBucket:Wa(da)}),await r()}catch($){Nn($ instanceof Error?$.message:"Failed to queue the visibility sweep. Retry when the instance is ready."),ca||ae({flowVersion:mt,onboardingSessionId:q,event:"run.requested",origin:"dashboard_setup",result:"rejected",providerCountBucket:Wa(Ht),queryCountBucket:Wa(da),reasonCode:Yl($,"run_rejected")})}finally{zs(!1)}}},zn=()=>Y($=>_?2:Math.max(0,$-1)),_o=($,$e,li)=>{ae({flowVersion:mt,onboardingSessionId:q,event:"onboarding.step_completed",step:$,method:"existing",...li===void 0?{}:{countBucket:Wa(li)}},`onboarding.step_completed:${$}`),Y($e)},Xr=()=>{if(ae({flowVersion:mt,onboardingSessionId:q,event:"onboarding.step_completed",step:"queries",method:"skipped",countBucket:"0"},"onboarding.step_completed:queries"),_){Lt();return}Y(3)},kc=()=>{ae({flowVersion:mt,onboardingSessionId:q,event:"onboarding.step_completed",step:"competitors",method:"skipped",countBucket:"0"},"onboarding.step_completed:competitors"),Y(4)},Ds=_?"section":ka,pa=Ye!==!0||tt===!0?c.jsx(me,{type:"button",variant:"ghost",size:"sm",className:"min-h-11",onClick:()=>{r(),_s&&$t.refetch()},children:"Check again"}):null,Wr=(Ye===!1||ua)&&!!Qn,Os=_&&(I===2||I===4)?w?c.jsxs("section",{"aria-labelledby":"setup-provider-heading",className:"space-y-3 border-b border-default pb-6 mb-6",children:[c.jsxs("div",{className:"flex flex-wrap items-center gap-3",children:[c.jsx("h2",{id:"setup-provider-heading",className:"text-lg font-semibold text-heading",children:Ye===!1?"Connect a provider":"Answer engine provider"}),c.jsx(Rn,{tone:Ye===!0?"positive":"neutral",children:Ye===!0?"Configured":Ye===!1?"Not connected":"Checking"})]}),c.jsx("p",{className:"max-w-prose text-sm text-secondary",children:Ye===!0?xt.length>0?`${xt.map($=>$.displayName??$.name).join(", ")} available for this project. Research and sweeps use your provider account.`:"ChatGPT in Chrome is configured for sweeps. Query Research needs an API provider.":Ye===!1?"An answer engine is required for visibility sweeps. You can save queries now and connect later.":"Checking available providers. You can choose queries while this finishes."}),Ye===!1||ua?Qn?c.jsx("div",{children:c.jsx(fF,{compact:!0,leadingField:c.jsxs("div",{className:"min-w-0 space-y-1.5",children:[c.jsx("label",{className:"block text-sm font-medium text-secondary",htmlFor:"setup-provider",children:"Provider to connect"}),c.jsx("select",{ref:vc,id:"setup-provider",className:"setup-input",value:Qn.name,onChange:$=>{$.target.value!==Qn.name&&(wo.current=document.activeElement===$.currentTarget,Vr($.target.value))},children:So.map($=>c.jsx("option",{value:$.name,children:$.displayName??$.name},$.name))})]}),secondaryActions:pa,providerName:Qn.name,keyUrl:Qn.keyUrl,modelHint:Qn.modelHint,onSaved:()=>{Wt(!1),r()}},Qn.name)}):c.jsx("p",{className:"max-w-prose text-sm text-secondary",children:un.length>0?`This project's provider selection is ${un.join(", ")}. Configure an allowed provider in Settings, or change the selection in project Settings.`:"Provider configuration is unavailable here. Open Settings to connect an answer engine, then check again."}):null,c.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[Ye===!0&&!ua&&Qn?c.jsx(me,{type:"button",variant:"outline",size:"sm",onClick:()=>Wt(!0),children:"Configure a provider"}):null,!Qn||tt===!0?c.jsx(me,{type:"button",variant:"outline",size:"sm",asChild:!0,children:c.jsx(Fe,{to:"/settings",target:"_blank",rel:"noopener noreferrer",children:"Open provider settings"})}):null,Wr?null:pa]})]}):c.jsxs("section",{"aria-labelledby":"setup-provider-heading",className:"space-y-2 border-b border-default pb-6 mb-6",children:[c.jsx("h2",{id:"setup-provider-heading",className:"text-lg font-semibold text-heading",children:"Answer engine provider"}),c.jsx("p",{className:"max-w-prose text-sm text-secondary",children:"Provider settings are managed by an administrator."}),Ge?c.jsx("p",{role:"alert",className:"text-sm text-negative",children:"Provider readiness could not be checked. Try again."}):c.jsx("p",{className:"max-w-prose text-sm text-secondary",role:"status",children:Ye===!0?"An answer engine is available for this project.":Ye===!1?"Ask an administrator to connect an answer engine for this project. You can save queries now.":"Checking provider readiness. You can save queries now."}),c.jsx(me,{type:"button",variant:"ghost",size:"sm",className:"min-h-11",disabled:oe.isFetching,onClick:()=>{oe.refetch()},children:Ge?"Retry provider check":"Check again"})]}):null,Ha=(()=>{switch(I){case 0:return c.jsxs(ka,{className:"surface-card step-card",children:[c.jsx("div",{className:"section-head",children:c.jsxs("div",{children:[c.jsx("p",{className:"eyebrow eyebrow-soft",children:"Step 1 of 5"}),c.jsx("h2",{children:"System check"})]})}),c.jsx("p",{className:"supporting-copy",children:"Checking that your Canonry instance is configured and reachable."}),c.jsx("div",{className:"compact-stack",children:T.healthChecks.map($=>c.jsxs("div",{className:"health-check-row",children:[c.jsxs("div",{children:[c.jsx("p",{className:"run-row-title",children:$.label}),c.jsx("p",{className:"supporting-copy",children:$.detail}),$.id==="provider"&&$.state!=="ready"&&c.jsxs("div",{className:"mt-3 rounded-md border border-default bg-bg-elevated/40 p-3 space-y-2",children:[c.jsxs("p",{className:"text-xs text-secondary",children:["Paste a Gemini key to enable visibility checks (free at"," ",c.jsx("a",{href:"https://aistudio.google.com/apikey",target:"_blank",rel:"noreferrer",className:"text-positive-400 hover:text-positive underline underline-offset-2",children:"aistudio.google.com"}),")."]}),c.jsxs("div",{className:"flex items-center gap-2",children:[c.jsx("input",{type:"password",value:Bi,onChange:$e=>wc($e.target.value),placeholder:"AI... (paste here)",className:"flex-1 rounded-md border border-base bg-bg px-2.5 py-1.5 text-sm text-heading placeholder:text-faint focus:border-mono-600 focus:outline-none font-mono",disabled:_n}),c.jsx(me,{type:"button",size:"sm",disabled:_n||!Bi.trim(),onClick:rn(Yr),children:_n?"Saving...":"Save"})]}),Fr&&c.jsxs("div",{role:"alert",className:"space-y-1 text-xs text-negative",children:[c.jsx("p",{children:Fr}),c.jsx("p",{children:"Check that the key is complete, then retry Save."})]}),c.jsxs("p",{className:"text-sm text-secondary",children:["Connect more answer engines later in"," ",c.jsx(Fe,{to:"/settings",className:"text-link hover:underline",children:"Settings"}),"."]})]})]}),c.jsx(Rn,{tone:$.state==="ready"?"positive":"caution",title:$.id==="api"?Ar(j.apiStatus):$.id==="worker"?Ar(j.workerStatus):$.detail,children:$.state==="ready"?"Ready":"Attention"})]},$.id))}),c.jsxs("div",{className:"setup-nav",children:[T.launchState.blockedReason?c.jsx("p",{role:"status",className:"supporting-copy text-negative",children:T.launchState.blockedReason}):c.jsx("span",{}),c.jsx(me,{type:"button",disabled:!T.launchState.enabled,title:T.launchState.blockedReason,onClick:()=>{ae({flowVersion:mt,onboardingSessionId:q,event:"onboarding.step_completed",step:"system",method:"automatic"},"onboarding.step_completed:system"),Y(Pe)},children:"Continue"})]})]});case 1:return c.jsxs(ka,{className:"surface-card step-card",children:[c.jsxs("div",{className:"section-head",children:[c.jsxs("div",{children:[c.jsx("p",{className:"eyebrow eyebrow-soft",children:"Step 2 of 5"}),c.jsx("h2",{children:"Create project"})]}),Le?c.jsx(Rn,{tone:"positive",children:"Created"}):null]}),Le?c.jsxs("div",{className:"compact-stack",children:[c.jsxs("p",{className:"text-neutral",children:["Project ",c.jsx("span",{className:"text-heading font-medium",children:Le})," created successfully."]}),c.jsxs("div",{className:"setup-nav",children:[c.jsx(me,{type:"button",variant:"outline",onClick:zn,children:"Back"}),c.jsx(me,{type:"button",onClick:()=>_o("project",2),children:"Continue"})]})]}):c.jsxs("div",{className:"compact-stack",children:[c.jsxs("div",{className:"setup-field",children:[c.jsx("label",{className:"setup-label",htmlFor:"project-name",children:"Project name"}),c.jsx("input",{id:"project-name",className:"setup-input",type:"text",placeholder:"my-website",value:Ne,onChange:$=>De($.target.value)}),Bn&&Bn!==Ne?c.jsxs("p",{className:"supporting-copy",children:["Slug: ",Bn]}):null]}),c.jsxs("div",{className:"setup-field",children:[c.jsx("label",{className:"setup-label",htmlFor:"display-name",children:"Display name (optional)"}),c.jsx("input",{id:"display-name",className:"setup-input",type:"text",placeholder:"My Website",value:ye,onChange:$=>le($.target.value)})]}),c.jsxs("div",{className:"setup-field",children:[c.jsx("label",{className:"setup-label",htmlFor:"domain",children:"Canonical domain"}),c.jsx("input",{id:"domain",className:"setup-input",type:"text",placeholder:"example.com",value:ce,onChange:$=>K($.target.value)})]}),c.jsxs("div",{className:"setup-field-row",children:[c.jsxs("div",{className:"setup-field",children:[c.jsx("label",{className:"setup-label",htmlFor:"country",children:"Country"}),c.jsx("input",{id:"country",className:"setup-input",type:"text",placeholder:"US",maxLength:2,value:ue,onChange:$=>Re($.target.value.toUpperCase())})]}),c.jsxs("div",{className:"setup-field",children:[c.jsx("label",{className:"setup-label",htmlFor:"language",children:"Language"}),c.jsx("input",{id:"language",className:"setup-input",type:"text",placeholder:"en",maxLength:5,value:ke,onChange:$=>et($.target.value.toLowerCase())})]})]}),c.jsxs("label",{className:"flex items-start gap-3 rounded-md border border-default bg-surface p-3 cursor-pointer hover:border-strong",children:[c.jsx("input",{type:"checkbox",className:"mt-0.5 h-4 w-4 rounded border-strong bg-bg",checked:Me,onChange:$=>yt($.target.checked)}),c.jsxs("span",{className:"flex-1",children:[c.jsx("span",{className:"block text-sm text-heading",children:"Auto-extract backlinks"}),c.jsxs("span",{className:"block text-xs text-muted mt-0.5",children:["When a new Common Crawl release syncs, automatically extract backlinks for this project."," ",c.jsx(Fe,{to:"/backlinks",className:"text-positive-400 hover:text-positive underline underline-offset-2",children:"Manage backlinks"})]})]})]}),at?c.jsx("p",{className:"text-negative-400 text-sm",children:at}):null,c.jsxs("div",{className:"setup-nav",children:[c.jsx(me,{type:"button",variant:"outline",onClick:zn,children:"Back"}),c.jsx(me,{type:"button",disabled:!Bn||!ce||jn,onClick:rn(mm),children:jn?"Creating...":"Create project"})]})]})]});case 2:return c.jsxs(Ds,{className:_?"visibility-setup-section step-card":"surface-card step-card","aria-labelledby":"setup-queries-heading",children:[c.jsxs("div",{className:"section-head",children:[c.jsxs("div",{children:[c.jsx("p",{className:"eyebrow eyebrow-soft",children:_?"Step 1 of 2":"Step 3 of 5"}),c.jsx("h2",{id:"setup-queries-heading",children:"Add queries"})]}),ee?c.jsx(Rn,{tone:"neutral",children:"Loading"}):V.isError?c.jsx(Rn,{tone:"negative",children:"Load failed"}):Dt?c.jsxs(Rn,{tone:"positive",children:[Fn.length," saved"]}):c.jsxs(Rn,{tone:"neutral",children:[Fn.length," quer",Fn.length!==1?"ies":"y"]})]}),c.jsx("p",{className:"supporting-copy",children:"Add the queries your customers use, one per line. You can refine your list later."}),c.jsxs("div",{className:"space-y-2 border-b border-default pb-4",children:[c.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between",children:[c.jsxs("div",{className:"min-w-0 space-y-1",children:[c.jsx("h3",{className:"text-sm font-semibold text-heading",children:"Research queries with your agent"}),c.jsx("p",{className:"max-w-prose text-sm text-secondary",children:"Ask your agent to compare answers and available sources with Canonry Research, then recommend queries. Research does not change your tracked queries."})]}),c.jsx(me,{type:"button",variant:"outline",size:"sm",className:"min-h-11 shrink-0 self-start",onClick:rn($r),children:Cn?"Research prompt copied":"Copy research prompt"})]}),c.jsxs("details",{open:ko||void 0,className:"text-sm text-secondary",children:[c.jsx("summary",{className:"min-h-11 cursor-pointer py-3 text-link",children:"View agent prompt"}),c.jsx("textarea",{"aria-label":"Agent query research prompt",readOnly:!0,className:"setup-textarea mt-2 w-full",rows:8,value:Oi})]}),ko?c.jsx("p",{role:"alert",className:"text-sm text-negative",children:"Could not copy. Select and copy the prompt above."}):null]}),ee?c.jsx("div",{className:"rounded-md border border-default bg-bg-elevated/40 p-4 text-sm text-secondary",role:"status",children:"Loading saved queries…"}):V.isError?c.jsxs("div",{className:"compact-stack",children:[c.jsx("div",{role:"alert",className:"rounded-md border border-negative bg-negative-soft p-3 text-sm text-negative",children:"Saved queries could not be loaded. Retry before changing the query basket."}),c.jsxs("div",{className:"setup-nav",children:[c.jsx(me,{type:"button",variant:"outline",onClick:_?Oe:zn,children:"Back"}),c.jsx(me,{type:"button",onClick:()=>{V.refetch()},children:"Retry loading queries"})]})]}):Dt?c.jsxs("div",{className:"compact-stack",children:[c.jsx("ul",{className:"detail-list",children:Fn.map($=>c.jsx("li",{children:$},$))}),c.jsxs("div",{className:"setup-nav",children:[c.jsx(me,{type:"button",variant:"outline",onClick:_?Oe:zn,children:"Back"}),c.jsx(me,{type:"button",variant:"outline",onClick:()=>ni(!1),children:"Edit queries"}),c.jsx(me,{type:"button",onClick:()=>_o("queries",_?4:3,Fn.length),children:"Continue"})]})]}):c.jsxs("div",{className:"compact-stack",children:[xt.length>0?c.jsxs("div",{className:"compact-stack",children:[c.jsxs("div",{className:"flex items-center gap-2 text-muted text-xs uppercase tracking-wide",children:[c.jsx("span",{className:"flex-1 border-t border-base"}),"auto-generate",c.jsx("span",{className:"flex-1 border-t border-base"})]}),c.jsxs("div",{className:"flex items-end gap-2",children:[c.jsxs("div",{className:"setup-field flex-1",children:[c.jsx("label",{className:"setup-label",htmlFor:"gen-provider",children:"Provider"}),c.jsx("select",{id:"gen-provider",className:"setup-input",value:Va,onChange:$=>Ts($.target.value),children:xt.map($=>c.jsxs("option",{value:$.name,children:[$.displayName??$.name,$.model?` (${$.model})`:""]},$.name))})]}),c.jsxs("div",{className:"setup-field",children:[c.jsx("label",{className:"setup-label",htmlFor:"gen-count",children:"Count"}),c.jsx("select",{id:"gen-count",className:"setup-input",value:xo,onChange:$=>Rs(Number($.target.value)),children:[3,5,10,15,20].map($=>c.jsx("option",{value:$,children:$},$))})]}),c.jsx(me,{type:"button",variant:"outline",disabled:bc||!Va,onClick:rn(Ta),children:bc?"Analyzing site...":"Generate"})]}),Mr?c.jsx("p",{className:"text-negative-400 text-sm",children:Mr}):null]}):null,_?null:c.jsxs("div",{className:"flex items-center gap-2 text-muted text-xs uppercase tracking-wide",children:[c.jsx("span",{className:"flex-1 border-t border-base"}),"or type manually",c.jsx("span",{className:"flex-1 border-t border-base"})]}),c.jsxs("div",{className:"setup-field",children:[c.jsx("label",{className:"setup-label",htmlFor:"queries",children:"Queries (one per line)"}),c.jsx("textarea",{id:"queries",className:"setup-textarea",rows:6,placeholder:`emergency dentist brooklyn
|
|
84
84
|
best invisalign downtown brooklyn
|
|
85
85
|
pediatric dentist brooklyn heights`,value:Vt,onChange:$=>An($.target.value)})]}),As?c.jsx("p",{className:"text-negative-400 text-sm",children:As}):null,c.jsxs("div",{className:"setup-nav",children:[c.jsx(me,{type:"button",variant:"outline",onClick:_?Oe:zn,children:"Back"}),c.jsx(me,{type:"button",variant:"ghost",onClick:Xr,children:_?"Finish without AI Visibility":"Skip for now"}),c.jsx(me,{type:"button",disabled:Fn.length===0||ai,onClick:rn(No),children:ai?"Saving...":`Save ${Fn.length} quer${Fn.length!==1?"ies":"y"}`})]})]})]});case 3:return c.jsxs(ka,{className:"surface-card step-card",children:[c.jsxs("div",{className:"section-head",children:[c.jsxs("div",{children:[c.jsx("p",{className:"eyebrow eyebrow-soft",children:"Step 4 of 5"}),c.jsx("h2",{children:"Add competitors"})]}),Pi?c.jsx(Rn,{tone:"positive",children:"Saved"}):null]}),c.jsx("p",{className:"supporting-copy",children:"Domains that compete for the same queries. One per line."}),Pi?c.jsxs("div",{className:"compact-stack",children:[c.jsx("ul",{className:"detail-list",children:oi.map($=>c.jsx("li",{children:$},$))}),c.jsxs("div",{className:"setup-nav",children:[c.jsx(me,{type:"button",variant:"outline",onClick:zn,children:"Back"}),c.jsx(me,{type:"button",onClick:()=>_o("competitors",4,oi.length),children:"Continue"})]})]}):c.jsxs("div",{className:"compact-stack",children:[c.jsxs("div",{className:"setup-field",children:[c.jsx("label",{className:"setup-label",htmlFor:"competitors",children:"Competitor domains (one per line)"}),c.jsx("textarea",{id:"competitors",className:"setup-textarea",rows:4,placeholder:`competitor1.com
|
|
86
|
-
competitor2.com`,value:ii,onChange:$=>Ii($.target.value)})]}),Qt?c.jsx("p",{className:"text-negative-400 text-sm",children:Qt}):null,c.jsxs("div",{className:"setup-nav",children:[c.jsx(me,{type:"button",variant:"outline",onClick:zn,children:"Back"}),c.jsxs("div",{className:"flex gap-2",children:[c.jsx(me,{type:"button",variant:"outline",onClick:kc,children:"Skip"}),c.jsx(me,{type:"button",disabled:oi.length===0||Gr,onClick:rn(Zr),children:Gr?"Saving...":`Save ${oi.length} competitor${oi.length!==1?"s":""}`})]})]})]})]});case 4:{const $=Ga.data,$e=$?.status??(Mi===nt?.id?nt.status:void 0),li=$e==="completed"||$e==="partial"||$e==="failed"||$e==="cancelled",Ra=$?.snapshots??[],To=Ra.filter(Ea=>Ea.citationState==="cited").length,Sc=Ra.filter(Ea=>Ea.answerMentioned===!0).length,bn=new Set(Ra.map(Ea=>Ea.query).filter(Ea=>!!Ea)).size,Qa=$e?jw($e,Ra.length):!1,Is=Ve&&!Ua,Ps=yn??($?.error?P$($.error):$e==="cancelled"?"The sweep was cancelled before it produced a baseline.":($e==="completed"||$e==="partial")&&Ra.length===0?"The sweep finished without producing any snapshots.":nt?.statusDetail||"The sweep did not produce a baseline.");let qs=null;return Is||Qa?qs=c.jsx(Rn,{tone:"positive",children:"Complete"}):yn&&!Ua?qs=c.jsx(Rn,{tone:"negative",children:"Failed"}):li?qs=c.jsx(Rn,{tone:"negative",children:$e==="cancelled"?"Cancelled":"Failed"}):Ua&&(qs=c.jsx(Rn,{tone:"caution",children:"Running"})),c.jsxs(ka,{className:"surface-card step-card",children:[c.jsxs("div",{className:"section-head",children:[c.jsxs("div",{children:[c.jsx("p",{className:"eyebrow eyebrow-soft",children:_?"Step 2 of 2":"Step 5 of 5"}),c.jsx("h2",{children:eo()?"AI Visibility":"Launch first run"})]}),qs]}),Is?c.jsxs("div",{className:"compact-stack",children:[c.jsxs("p",{className:"text-secondary",children:["Setup is complete. ",c.jsx("span",{className:"text-strong font-medium",children:Le})," already has a successful answer-visibility baseline."]}),c.jsxs("div",{className:"setup-nav",children:[c.jsx("span",{}),c.jsx(me,{type:"button",onClick:()=>ot(),children:g?"Finish setup":"Open project dashboard →"})]})]}):!Ua&&eo()?c.jsxs("div",{className:"compact-stack",children:[Le?c.jsx(WH,{projectName:Le}):c.jsx("p",{className:"text-sm text-secondary",children:Nf}),yn&&c.jsx("p",{role:"alert",className:"text-sm text-negative",children:yn}),c.jsxs("div",{className:"setup-nav",children:[c.jsx("span",{}),c.jsx(me,{type:"button",onClick:Oe,children:"Open project dashboard →"})]})]}):Ua?li?Qa?c.jsxs("div",{className:"compact-stack",children:[c.jsxs("p",{className:"text-neutral",children:["Sweep complete. Your first answer-visibility snapshot for"," ",c.jsx("span",{className:"text-heading font-medium",children:Le}),":"]}),c.jsxs("div",{className:"grid grid-cols-3 gap-2 mt-1",children:[c.jsxs("div",{className:"rounded-md border border-default bg-surface p-3",children:[c.jsx("p",{className:"text-xs font-medium text-secondary",children:"Mentioned"}),c.jsxs("p",{className:"text-2xl font-bold tabular-nums text-primary mt-1",children:[Sc,c.jsxs("span",{className:"text-faint text-lg",children:[" / ",bn]})]}),c.jsx("p",{className:"mt-0.5 text-sm text-secondary",children:"queries naming your brand"})]}),c.jsxs("div",{className:"rounded-md border border-default bg-surface p-3",children:[c.jsx("p",{className:"text-xs font-medium text-secondary",children:"Cited"}),c.jsxs("p",{className:"text-2xl font-bold tabular-nums text-primary mt-1",children:[To,c.jsxs("span",{className:"text-faint text-lg",children:[" / ",bn]})]}),c.jsx("p",{className:"mt-0.5 text-sm text-secondary",children:"queries citing your site"})]}),c.jsxs("div",{className:"rounded-md border border-default bg-surface p-3",children:[c.jsx("p",{className:"text-xs font-medium text-secondary",children:"Results"}),c.jsx("p",{className:"text-2xl font-bold tabular-nums text-primary mt-1",children:Ra.length}),c.jsx("p",{className:"mt-0.5 text-sm text-secondary",children:"completed engine checks"})]})]}),!b&&Le?c.jsx(hF,{projectName:Le}):null,c.jsxs("div",{className:"setup-nav",children:[c.jsx("span",{}),c.jsx(me,{type:"button",onClick:()=>ot(),children:g?"Finish setup":"Open project dashboard →"})]})]}):c.jsxs("div",{className:"compact-stack",children:[c.jsxs("div",{role:"alert",className:"rounded-md border border-negative bg-negative-soft p-3 text-sm text-negative",children:[c.jsx("p",{children:Ps}),c.jsx("p",{className:"mt-1 text-xs text-secondary",children:eo()?Nf:w?"Fix provider or query configuration if needed, then retry without leaving setup.":"Ask an administrator to review the provider and query configuration."})]}),c.jsxs("div",{className:"setup-nav",children:[w&&!eo()?c.jsx(me,{type:"button",variant:"outline",asChild:!0,children:c.jsx(Fe,{to:"/settings",children:"Configure providers"})}):c.jsx("span",{}),eo()||!w?c.jsx(me,{type:"button",onClick:Oe,children:"Open project dashboard →"}):c.jsx(me,{type:"button",disabled:si||!!Ka,onClick:rn(ri),children:si?"Retrying...":"Retry visibility sweep"})]})]}):c.jsxs("div",{className:"compact-stack",children:[c.jsx("p",{className:"text-neutral",children:"Sweep running. This usually takes 30 to 60 seconds."}),c.jsx("div",{className:"rounded-md border border-default bg-surface p-3 text-xs text-muted",children:c.jsxs("p",{children:["Status: ",c.jsx("span",{className:"text-neutral",children:$e??"queued"})]})}),Ga.isError&&c.jsxs("div",{role:"alert",className:"rounded-md border border-negative bg-negative-soft p-3 text-sm text-negative",children:[c.jsx("p",{children:Ga.error instanceof Error?Ga.error.message:"Could not refresh the sweep status."}),c.jsx(me,{type:"button",variant:"outline",size:"sm",className:"mt-2",onClick:()=>{Ga.refetch()},children:"Retry status check"})]}),c.jsxs("div",{className:"setup-nav",children:[c.jsx("span",{}),c.jsx(me,{type:"button",variant:"outline",onClick:g?()=>ot():Oe,children:g?"Finish setup":"Watch on project page"})]})]}):c.jsxs("div",{className:"compact-stack",children:[c.jsxs("p",{className:"supporting-copy",children:["Your queries are saved. Run a first sweep to get a baseline for"," ",c.jsx("span",{className:"text-heading font-medium",children:Le}),", or finish and run it later from the project. A sweep calls the answer engines, so it costs provider usage."]}),(Ka||yn)&&c.jsxs("div",{role:"alert",className:"rounded-md border border-negative bg-negative-soft p-3 text-sm text-negative",children:[c.jsx("p",{children:yn??Ka}),c.jsx("p",{className:"mt-1 text-xs text-secondary",children:"Resolve the blocker above, then retry the sweep here."})]}),c.jsxs("div",{className:"setup-nav",children:[c.jsx(me,{type:"button",variant:"outline",onClick:zn,children:"Back"}),c.jsx(me,{type:"button",variant:"ghost",onClick:Lt,children:"Finish without running"}),ma==="no_provider"&&!_?c.jsx(me,{type:"button",asChild:!0,children:c.jsx(Fe,{to:"/settings",children:"Configure a provider"})}):c.jsx(me,{type:"button",disabled:si||!!Ka,title:Ka,onClick:rn(ri),children:si?"Launching...":yn?"Retry visibility sweep":"Launch visibility sweep"})]})]})]})}default:return null}})();return c.jsxs("div",{className:_?"page-container visibility-setup":"page-container",children:[g?c.jsx(uo,{current:"visibility"}):null,c.jsxs("div",{className:"page-header",children:[c.jsxs("div",{className:"page-header-left",children:[c.jsx("h1",{ref:u?h:void 0,tabIndex:u?-1:void 0,className:"page-title",children:u?"Set up AI Visibility":"Setup"}),c.jsx("p",{className:"page-subtitle",children:u?"Connect an answer engine, then choose queries for your first sweep.":"Create a project and run its first visibility check."})]}),g?c.jsx("div",{className:"page-header-right",children:c.jsx(me,{type:"button",variant:"outline",className:"min-h-11",onClick:Lt,children:"Skip AI Visibility"})}):null]}),g?null:c.jsx(xF,{current:_?I===4?1:0:I,labels:_?bF:yF}),c.jsxs("section",{className:"setup-wizard",children:[Os,Ha]})]})}const Kh="canonry mcp install --client claude-code",SF="https://github.com/Canonry/canonry/blob/main/docs/mcp.md";function jF(){const e=C.useRef(yg()).current,n=C.useRef(new Set),i=C.useCallback((r,u)=>{n.current.has(r)||(n.current.add(r),ig({...u,flowVersion:mt,onboardingSessionId:e,surface:"platform",eventId:bg()}))},[e]);return C.useEffect(()=>{i("started",{event:"onboarding.started",step:"finish",resumed:!1})},[i]),C.useCallback(r=>{i(`action:${r}`,{event:"onboarding.step_completed",step:"finish",method:"manual",nextAction:r})},[i])}const rm=C.createContext(()=>{});function AF({projectName:e,skippedVisibility:n=!1}){const i=_t({...gG({client:ne,path:{name:e}}),retry:!1}),r=i.data?.hasData?i.data:null,u=jF(),h=Nw(e,Ee["site-audit"]),g=Nw(e,Ee["answer-visibility"]),b={...h?{site:h,fixes:h}:{},...CF(g,n)};return c.jsx(rm.Provider,{value:u,children:c.jsxs("div",{className:"page-container max-w-6xl py-8 md:py-10",children:[c.jsx(uo,{current:"done",outcomes:b}),c.jsxs("header",{className:"relative mx-auto mt-12 max-w-2xl text-center md:mt-16",children:[c.jsx(NF,{}),c.jsx("p",{className:"onb-reveal mt-6 text-sm font-medium text-positive",style:Sa(250),children:"Setup complete"}),c.jsx("h1",{className:"onb-reveal mt-2 text-5xl font-semibold tracking-tight text-heading md:text-6xl",style:Sa(350),children:"You’re set."}),c.jsxs("p",{className:"onb-reveal mx-auto mt-4 max-w-xl text-lg text-secondary",style:Sa(450),children:["Canonry is tracking ",c.jsx("span",{className:"font-medium text-heading",children:e}),". Here’s how to get the most out of it from here."]})]}),c.jsxs("div",{className:"mt-14 grid gap-4 md:grid-cols-6",children:[c.jsx(Gu,{className:"md:col-span-4 md:row-span-2",delayMs:600,labelledBy:"onb-agent-heading",children:c.jsx(RF,{projectName:e})}),c.jsx(Gu,{className:"md:col-span-2 md:row-span-2",delayMs:700,labelledBy:"onb-data-heading",children:c.jsx(DF,{projectName:e})}),c.jsx(Gu,{className:"md:col-span-3",delayMs:800,labelledBy:"onb-schedule-heading",children:c.jsx(PF,{projectName:e})}),c.jsx(Gu,{className:"md:col-span-3",delayMs:900,labelledBy:"onb-alerts-heading",children:c.jsx(qF,{projectName:e,score:r?.aggregateScore??null})})]}),c.jsxs("div",{className:"onb-reveal mt-12 flex flex-col items-center gap-3 sm:flex-row sm:justify-center",style:Sa(1e3),children:[c.jsx(me,{asChild:!0,className:"h-11 rounded-full px-6 text-base md:h-11",children:c.jsxs(Fe,{to:"/projects/$projectName",params:{projectName:e},replace:!0,onClick:()=>u("open_project"),children:["Open ",e,c.jsx(Xl,{className:"size-4","aria-hidden":"true"})]})}),c.jsx(me,{asChild:!0,variant:"ghost",className:"h-11 rounded-full px-5 md:h-11",children:c.jsx(Fe,{to:"/projects/$projectName/technical-aeo",params:{projectName:e},replace:!0,onClick:()=>u("review_page_health"),children:"Review page health"})})]})]})})}function Nw(e,n){const i=_t({...fj({client:ne,path:{name:e},query:{kind:n,limit:20}}),retry:!1,refetchInterval:r=>_w(r.state.status==="success"?{isSuccess:!0,data:r.state.data}:{isSuccess:!1})==="pending"?5e3:!1});return _w(i)}function CF(e,n){return e===void 0?{}:n?{visibility:"skipped"}:{visibility:e}}function _w(e){if(!e.isSuccess||!e.data)return"unknown";const n=e.data.filter(i=>i.trigger!==ms.probe);if(!n.some(i=>i.status===Yt.completed||i.status===Yt.partial))return n.some(i=>i.status===Yt.queued||i.status===Yt.running)?"pending":n.length>0?"incomplete":"skipped"}function Sa(e){return{"--onb-delay":`${e}ms`}}function NF(){return c.jsx("div",{className:"onb-check relative mx-auto size-20","aria-hidden":"true",children:c.jsxs("svg",{viewBox:"0 0 80 80",className:"relative size-20",children:[c.jsx("circle",{className:"onb-check-ring",cx:"40",cy:"40",r:"36",fill:"none",strokeWidth:"3",pathLength:"1"}),c.jsx("path",{className:"onb-check-mark",d:"M25 41 L35 51 L56 30",fill:"none",strokeWidth:"4",strokeLinecap:"round",strokeLinejoin:"round",pathLength:"1"})]})})}function Gu({className:e="",delayMs:n,labelledBy:i,children:r}){return c.jsx("section",{"aria-labelledby":i,className:`onb-reveal onb-tile flex flex-col overflow-hidden rounded-2xl border border-default bg-surface p-6 md:p-7 ${e}`,style:Sa(n),children:r})}function lm({id:e,eyebrow:n,title:i,children:r}){return c.jsxs("div",{children:[c.jsx("p",{className:"text-xs font-medium uppercase tracking-wide text-muted",children:n}),c.jsx("h2",{id:e,className:"mt-1.5 text-2xl font-semibold tracking-tight text-heading",children:i}),c.jsx("p",{className:"mt-2 text-sm text-secondary",children:r})]})}const Ku=[{id:"diagnose",label:"Diagnose",prompt:"Why did we lose citations this week?",calls:["canonry_insights_list","canonry_competitor_landscape"],reply:"Two engines started citing a competitor’s comparison page instead of yours. Want me to draft one that answers the same query?"},{id:"fix",label:"Fix",prompt:"Fix the weakest pages on the site.",calls:["canonry_technical_aeo_pages","canonry_site_health_page_audit"],reply:"The lowest-scoring pages are missing structured data and answer-first intros. I’ve written the changes for you to review."},{id:"automate",label:"Automate",prompt:"Re-check everything every Monday and tell me in Slack.",calls:["canonry_schedule_set","canonry_agent_webhook_attach"],reply:"Done. A sweep runs every Monday, and I’ll post what changed to Slack."}],_F=9e3;function TF(){return typeof window<"u"&&typeof window.matchMedia=="function"&&window.matchMedia("(prefers-reduced-motion: reduce)").matches}function RF({projectName:e}){const n=C.useContext(rm),[i,r]=C.useState(0),[u,h]=C.useState(!1),[g,b]=C.useState(!1);C.useEffect(()=>{if(u||TF())return;const k=window.setTimeout(()=>r(j=>(j+1)%Ku.length),_F);return()=>window.clearTimeout(k)},[i,u]);const v=async()=>{try{await navigator.clipboard.writeText(Kh),n("copy_agent_command"),b(!0),window.setTimeout(()=>b(!1),1800)}catch{hn({tone:"negative",title:"Could not copy the command",detail:`Run ${Kh} in your terminal.`})}},w=Ku[i]??Ku[0];return c.jsxs(c.Fragment,{children:[c.jsxs(lm,{id:"onb-agent-heading",eyebrow:"Your agent",title:"Let your agent run it.",children:["Your agent can do everything in Canonry: diagnose a drop, fix pages, run sweeps and scans, and write the client report. Use Claude Code, Codex, Cursor, or Aero, the analyst built into"," ",c.jsx("span",{className:"text-heading",children:e})," that reviews every sweep on its own."]}),c.jsxs("div",{className:"mt-6 flex flex-1 flex-col rounded-xl border border-default bg-bg",onMouseEnter:()=>h(!0),onMouseLeave:()=>h(!1),onFocus:()=>h(!0),children:[c.jsxs("div",{className:"flex items-center gap-1 border-b border-default px-3 py-2",role:"tablist","aria-label":"Example agent sessions",children:[Ku.map((k,j)=>c.jsx("button",{type:"button",role:"tab","aria-selected":j===i,onClick:()=>{r(j),h(!0)},className:`rounded-md px-2.5 py-1 text-xs font-medium transition-colors ${j===i?"bg-surface-inset text-heading":"text-muted hover:text-secondary"}`,children:k.label},k.id)),c.jsx("span",{className:"ml-auto text-xs text-faint",children:"Example"})]}),c.jsxs("div",{role:"tabpanel","aria-label":`${w.label} example`,className:"flex-1 p-4 font-mono text-[13px] leading-relaxed",children:[c.jsxs("p",{className:"onb-type text-heading",style:Sa(150),children:[c.jsx("span",{className:"text-muted",children:"> "}),w.prompt]}),w.calls.map((k,j)=>c.jsxs("p",{className:"onb-line mt-1 text-muted first:mt-3",style:Sa(1300+j*450),children:[c.jsx("span",{className:"text-positive",children:"●"})," ",k]},k)),c.jsx("p",{className:"onb-line mt-3 text-secondary",style:Sa(1500+w.calls.length*450),children:w.reply}),c.jsx("span",{className:"onb-caret mt-2 inline-block h-4 w-2 bg-current align-middle text-secondary",style:Sa(1900+w.calls.length*450),"aria-hidden":"true"})]},w.id)]}),c.jsxs("div",{className:"mt-4 flex flex-wrap items-center gap-2",children:[c.jsx("code",{className:"min-w-0 flex-1 truncate rounded-lg border border-default bg-surface-inset px-3 py-2 font-mono text-[13px] text-heading",children:Kh}),c.jsxs(me,{type:"button",variant:"secondary",size:"sm",className:"h-9 md:h-9",onClick:()=>{v()},children:[g?c.jsx(xd,{className:"size-4","aria-hidden":"true"}):c.jsx(qf,{className:"size-4","aria-hidden":"true"}),g?"Copied":"Copy"]}),c.jsx("a",{href:SF,target:"_blank",rel:"noreferrer",className:"text-sm font-medium text-link underline-offset-4 hover:underline",children:"Other clients"})]})]})}const EF=[{icon:Pf,label:"Search Console",action:"connect_search_console",to:"/projects/$projectName/search-console"},{icon:Uw,label:"Google Analytics",action:"connect_analytics",to:"/projects/$projectName/activity"},{icon:Kw,label:"Business Profile",action:"connect_business_profile",to:"/projects/$projectName/local"}],zF=["GPTBot","ClaudeBot","PerplexityBot"];function DF({projectName:e}){const n=C.useContext(rm);return c.jsxs(c.Fragment,{children:[c.jsx(lm,{id:"onb-data-heading",eyebrow:"Server-side traffic",title:"See the AI bots.",children:"AI crawlers and answer-engine fetches never run JavaScript, so Google Analytics never sees them. Canonry reads them straight from your server."}),c.jsx(OF,{}),c.jsxs(Fe,{to:"/traffic",onClick:()=>n("connect_server_traffic"),"aria-label":"Connect server-side traffic",className:"group flex items-center gap-3 rounded-xl border border-strong bg-surface-inset px-4 py-3 text-sm font-medium text-heading transition-colors hover:bg-surface-inset-hover",children:[c.jsx(Hw,{className:"size-4 text-positive","aria-hidden":"true"}),c.jsxs("span",{className:"flex-1",children:["Connect your server",c.jsx("span",{className:"block text-xs font-normal text-secondary",children:"Cloudflare, Vercel, WordPress, or Cloud Run"})]}),c.jsx(Xl,{className:"size-4 text-link transition-transform group-hover:translate-x-0.5","aria-hidden":"true"})]}),c.jsx("p",{className:"mt-5 text-xs font-medium uppercase tracking-wide text-muted",children:"Also connect"}),c.jsx("ul",{className:"mt-1 divide-y divide-default",children:EF.map(({icon:i,label:r,action:u,to:h})=>c.jsx("li",{children:c.jsxs(Fe,{to:h,params:{projectName:e},"aria-label":`Connect ${r}`,onClick:()=>n(u),className:"group flex items-center gap-3 py-2.5 text-sm text-heading",children:[c.jsx(i,{className:"size-4 text-muted","aria-hidden":"true"}),c.jsx("span",{className:"flex-1",children:r}),c.jsx(Xl,{className:"size-3.5 text-link transition-transform group-hover:translate-x-0.5","aria-hidden":"true"})]})},r))})]})}function OF(){const e=[22,70,118];return c.jsxs("div",{className:"relative my-6 h-36","aria-hidden":"true",children:[c.jsx("svg",{viewBox:"0 0 200 140",preserveAspectRatio:"none",className:"absolute inset-0 size-full",children:e.map((n,i)=>c.jsx("path",{className:"onb-flow",style:Sa(i*400),d:`M20 ${n} C 100 ${n}, 118 70, 170 70`,fill:"none",strokeWidth:"1.5"},n))}),zF.map((n,i)=>c.jsx("span",{className:"onb-bot absolute left-0 -translate-y-1/2 rounded-md border border-default bg-bg-elevated px-2 py-1 font-mono text-[11px] text-secondary",style:{top:`${(e[i]??70)/140*100}%`,...Sa(i*600)},children:n},n)),c.jsx("span",{className:"onb-hub absolute right-0 top-1/2 flex size-11 -translate-y-1/2 items-center justify-center rounded-2xl bg-accent text-on-inverse",children:c.jsx(Hw,{className:"size-5"})})]})}const IF=["M","T","W","T","F","S","S"];function PF({projectName:e}){return c.jsxs(c.Fragment,{children:[c.jsx(lm,{id:"onb-schedule-heading",eyebrow:"Scheduled sweeps",title:"Runs on its own.",children:"Re-measure every week without lifting a finger, so a drop shows up before a customer notices."}),c.jsx("ol",{className:"mt-6 grid grid-cols-7 gap-2","aria-hidden":"true",children:IF.map((n,i)=>c.jsxs("li",{className:"flex flex-col items-center gap-2",children:[c.jsx("span",{className:"onb-day size-3 rounded-full bg-surface-inset",style:Sa(i*500)}),c.jsx("span",{className:"text-xs text-muted",children:n})]},i))}),c.jsx(nA,{projectName:e,to:"/projects/$projectName/settings",icon:Gw,label:"Set a schedule",action:"set_schedule"})]})}function qF({projectName:e,score:n}){return c.jsxs(c.Fragment,{children:[c.jsx(lm,{id:"onb-alerts-heading",eyebrow:"Notifications",title:"Hear about changes.",children:"Get a webhook in Slack or anywhere else when a sweep finishes or a score moves."}),c.jsxs("div",{className:"relative mt-6 flex h-14 items-center","aria-hidden":"true",children:[c.jsx("span",{className:"onb-bell flex size-10 items-center justify-center rounded-full border border-default bg-bg-elevated",children:c.jsx(Fh,{className:"size-4 text-secondary"})}),c.jsxs("span",{className:"onb-toast ml-3 flex items-center gap-2 rounded-xl border border-default bg-bg-elevated px-3 py-2 text-sm shadow-[0_8px_24px_var(--color-shadow-panel)]",children:[c.jsx("span",{className:"size-2 rounded-full bg-positive-400"}),c.jsx("span",{className:"text-heading",children:e}),c.jsx("span",{className:"text-secondary",children:n===null?"sweep finished":`page health ${n}`})]})]}),c.jsx(nA,{projectName:e,to:"/projects/$projectName/settings",icon:Fh,label:"Add a notification",action:"add_notification"})]})}function nA({projectName:e,to:n,icon:i,label:r,action:u}){const h=C.useContext(rm);return c.jsxs(Fe,{to:n,params:{projectName:e},onClick:()=>h(u),className:"group mt-6 inline-flex items-center gap-2 self-start text-sm font-medium text-link",children:[c.jsx(i,{className:"size-4","aria-hidden":"true"}),r,c.jsx(Xl,{className:"size-3.5 transition-transform group-hover:translate-x-0.5","aria-hidden":"true"})]})}const MF=C.lazy(async()=>({default:(await Ri(()=>import("./SiteHealthSection-De4U11Gv.js").then(n=>n.d),__vite__mapDeps([0,1,2,3,4]),import.meta.url)).SiteHealthSection})),BF=`Public pages only, crawled from this computer and stored locally. The first scan reads up to ${BS} pages, then stops.`,LF=1800,VF="https://github.com/Canonry/canonry#or-use-any-shell-capable-coding-agent",$F="Help me set up Canonry for my public site.\n\nUse the official Canonry docs:\n- Agent quickstart: https://github.com/Canonry/canonry#or-use-any-shell-capable-coding-agent\n- CLI reference: https://github.com/Canonry/canonry/blob/main/skills/canonry/references/canonry-cli.md\n- Plugin setup: https://github.com/Canonry/canonry/blob/main/docs/plugins.md\n- MCP setup: https://github.com/Canonry/canonry/blob/main/docs/mcp.md\n\nPick one path and stay on it. Use connected Canonry tools (plugin or MCP) only if you have them and I have not pointed you at a specific install. A connected tool runs in its own process and never sees `CANONRY_CONFIG_DIR`, `CANONRY_PORT`, or anything else you export in a shell, so it always acts on my default install. If I named a config directory, a port, or a sandbox, that is the shell path: use `cnry` and tell me which path you chose. Never mix the two in one run, and never create a duplicate project. The `cnry` and `canonry` commands are interchangeable.\n\n1. Ask for my public domain, country, and language. Do not create or scan anything yet. Country and language are only applied when a project is created, so if you reuse an existing project, report its country and language instead of changing them.\n2. Shell path only: confirm `cnry` is on PATH, then run `cnry --version`. If Canonry is missing, propose `npm install -g @canonry/canonry` and wait for approval. Then run `cnry doctor --format json`, which is the command that says whether config, database, and server are in place. `cnry --version` does not read config and succeeds on a completely unconfigured install, so it cannot answer this. If config is missing, run `cnry bootstrap` yourself: it is not interactive, takes about a second, and is safe to rerun. Do not hand it to me and wait. The interactive command is `cnry init`, which is optional provider and OAuth setup that Page Health does not need. Bootstrap prints an API key, so do not repeat its output back to me, and never ask me to paste passwords, API keys, OAuth credentials, or command output.\n3. Confirm the API is reachable. `cnry doctor --format json` reports it, and any project read exits non-zero with `CONNECTION_ERROR` when it is not. If it is unreachable, propose `cnry start` and wait for approval. Use `cnry start`, which is the background daemon, and not `cnry serve`, which runs in the foreground and will block you until I stop it, even though some error messages suggest it. Stop anything you started with `cnry stop`.\n4. List projects with the connected project tool or `cnry project list --format json`, and reuse one whose domain matches. Confirm the proposed name is not already assigned to a different domain. To find out whether a project has already been scanned, run `cnry technical-aeo score <project> --format json` with no `--run-id`, which reports the latest run. Read the `hasData` field, not the score: this command exits 0 and reports `aggregateScore: 0` for a project that has never been scanned, so reading the score alone would have you tell me my site scored zero. If `hasData` is true and `runStatus` is `completed` or `partial`, read that scan instead of starting a new one. If no project matches, show the exact create operation and wait for approval.\n5. Propose a bounded Site Health scan: `--max-pages 100` for a first look, plus whether dead-link checking is on (it is off unless you pass `--check-dead-links`). Show the connected operation or the exact `cnry technical-aeo run <project> --max-pages 100 --wait --format json` command with the project name filled in, and wait for separate approval before scanning. `--wait` polls for up to 15 minutes and returns only the run id and status. If the status it returns is still `queued` or `running`, the scan has not finished: do not rerun it or report results, poll `cnry technical-aeo progress <project> --run-id <run-id> --format json` until it is terminal. If `--wait` outruns your own tool timeout first, recover the run id with `cnry technical-aeo score <project> --format json` and poll the same way.\n6. When the run is `completed` or `partial`, read `cnry technical-aeo crawl <project> --run-id <run-id> --format json` first. It is the only one of these commands that carries `termination` and `complete`; the score and pages commands do not. Then read `cnry technical-aeo score <project> --run-id <run-id> --format json` and `cnry technical-aeo pages <project> --run-id <run-id> --sort score-asc --limit 10 --format jsonl`. Tell me the termination reason in plain words and whether the scan covered the whole site or stopped at a page, link, depth, or time limit. A `partial` run scored the pages it reached and not my site, so never present it as a full-site result. If it stopped early, the fix depends on the reason, so say which: a page or depth limit needs a larger budget, a time limit needs a smaller scan (a lower `--max-pages` or `--max-depth`). If the run failed or was cancelled, inspect the run error and stop.\n7. Summarize only completed evidence, then propose AI Visibility setup. Ask before you add queries, connect providers, start a provider-backed or quota-consuming run, edit files, or publish.";function UF(e,n){return e==="legacy"?"legacy":e==="platform"?"platform":n.state==="success"?n.projectCount===0?"platform":"legacy":n.state==="error"?"retry":"loading"}const GF="2000-01-01T00:00:00.000Z",KF=5e3;function HF(e,n){const i=new Set,r=new Map;for(const g of n)g.trigger!==ms.probe&&(r.has(g.projectId)||r.set(g.projectId,g.id),(g.status===Yt.completed||g.status===Yt.partial)&&i.add(g.projectId));const h=(e.every(g=>g.createdAt)?[...e].sort((g,b)=>(g.createdAt??"").localeCompare(b.createdAt??"")||g.name.localeCompare(b.name)):e).find(g=>!i.has(g.id));return h?{projectName:h.name,runId:r.get(h.id)}:null}const aA=[{value:"US",label:"United States"},{value:"CA",label:"Canada"},{value:"GB",label:"United Kingdom"},{value:"AU",label:"Australia"},{value:"NZ",label:"New Zealand"},{value:"IE",label:"Ireland"},{value:"DE",label:"Germany"},{value:"FR",label:"France"},{value:"ES",label:"Spain"},{value:"IT",label:"Italy"},{value:"NL",label:"Netherlands"},{value:"BR",label:"Brazil"},{value:"MX",label:"Mexico"},{value:"IN",label:"India"},{value:"SG",label:"Singapore"},{value:"JP",label:"Japan"}],iA=[{value:"en",label:"English"},{value:"es",label:"Spanish"},{value:"fr",label:"French"},{value:"de",label:"German"},{value:"it",label:"Italian"},{value:"pt",label:"Portuguese"},{value:"nl",label:"Dutch"},{value:"ja",label:"Japanese"}];function QF(e,n){try{const i=new Intl.DisplayNames(["en"],{type:"region"}),r=new Intl.DisplayNames(["en"],{type:"language"}),u=e.length===2?i.of(e.toUpperCase()):void 0,h=n?r.of(n.toLowerCase()):void 0;return`${u??(e||"Country")} · ${h??(n||"Language")}`}catch{return`${e||"Country"} · ${n||"Language"}`}}function FF(e,n){const i=e.trim().toUpperCase(),r=n.trim().toLowerCase();return{countryValid:aA.some(u=>u.value===i),languageValid:iA.some(u=>u.value===r)}}function ZF(e){const n=e.replace(/^\[|\]$/g,"");return/^(?:\d{1,3}\.){3}\d{1,3}$/.test(n)||n.includes(":")}function YF(e){const n=e.trim();if(!n)return null;const i=/^[a-z][a-z\d+.-]*:\/\//i.test(n)?n:`https://${n}`;let r;try{r=new URL(i)}catch{return null}if(r.protocol!=="http:"&&r.protocol!=="https:")return null;const u=r.hostname.toLowerCase().replace(/^www\./,"");if(!u||u==="localhost"||ZF(u)||!u.includes("."))return null;const h=u.replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"");return h?{canonicalDomain:u,projectName:h,displayName:u}:null}async function XF(e,n=LF){let i;const r=new Promise(h=>{i=setTimeout(()=>h({state:"timed-out"}),n)}),u=await Promise.race([e.then(h=>({state:"queued",run:h})),r]);return i&&clearTimeout(i),u}function WF(e,n){e.catch(()=>{hn({title:"Site Health scan did not start",detail:"The project is safe. Choose Run scan in Site Health to retry.",tone:"negative",dedupeKey:`site-health-dispatch:${n}`})})}function sA(e){const n=C.useRef(yg()).current,i=C.useRef(new Set),r=C.useCallback((u,h)=>{if(h){if(i.current.has(h))return;i.current.add(h)}ig({...u,surface:e,eventId:bg()})},[e]);return{onboardingSessionId:n,emit:r}}function Tw(e,n){return e instanceof pn&&e.statusCode===409?"A project with this name already exists. Change the project name, or open the existing project.":e instanceof Error&&e.message?e.message:n}function zf(){return c.jsxs("div",{className:"page-container max-w-3xl","aria-busy":"true","aria-live":"polite",children:[c.jsx("div",{className:"page-header",children:c.jsxs("div",{className:"page-header-left",children:[c.jsx("h1",{className:"page-title",children:"Preparing setup"}),c.jsx("p",{className:"page-subtitle",children:"Checking the projects already on this install."})]})}),c.jsxs("div",{className:"flex items-center gap-3 rounded-lg border border-default bg-surface p-4 text-sm text-secondary",role:"status",children:[c.jsx(gr,{className:"size-4 motion-safe:animate-spin","aria-hidden":"true"}),"Loading projects…"]})]})}function JF({onRetry:e}){return c.jsxs("div",{className:"page-container max-w-3xl",children:[c.jsx("div",{className:"page-header",children:c.jsxs("div",{className:"page-header-left",children:[c.jsx("h1",{className:"page-title",children:"Can’t load projects"}),c.jsx("p",{className:"page-subtitle",children:"Canonry could not confirm whether this install already has a project."})]})}),c.jsxs("div",{className:"rounded-lg border border-negative bg-negative-soft p-4",role:"alert",tabIndex:-1,children:[c.jsx("p",{className:"text-sm font-medium text-heading",children:"Setup is paused to protect existing projects."}),c.jsx("p",{className:"mt-1 text-sm text-secondary",children:"Check the connection or sign in again, then retry."}),c.jsx(me,{type:"button",className:"mt-4",variant:"secondary",onClick:e,children:"Retry project check"})]})]})}function eZ({projectName:e,initialRunId:n}){return c.jsx(wg,{title:"Site Health setup",children:c.jsx(tZ,{projectName:e,initialRunId:n})})}function tZ({projectName:e,initialRunId:n}){const i=gs(),r=_t({...yo({client:ne}),enabled:!!e,retry:!1,refetchOnMount:"always"}),{onboardingSessionId:u,emit:h}=sA("site_health"),[g]=C.useState(()=>aF(n));C.useEffect(()=>{g&&iF()},[g]),C.useEffect(()=>{e&&h({flowVersion:mt,onboardingSessionId:u,event:"onboarding.started",step:"run",resumed:!!n&&!g},"onboarding.started")},[h,g,n,u,e]),C.useEffect(()=>{!e||!n||Jj(e)?.runId!==n&&Wj(e,n)},[n,e]);const v=_t({...lg({client:ne,path:{id:n??""}}),enabled:!!n,refetchInterval:({state:_})=>{const G=_.data?.status;return G==="completed"||G==="partial"||G==="failed"||G==="cancelled"?!1:2e3},refetchIntervalInBackground:!0}).data?.status;if(C.useEffect(()=>{if(!e||!n||!v)return;if(v==="completed"||v==="partial"){h({flowVersion:mt,onboardingSessionId:u,event:"onboarding.step_completed",step:"run",method:"automatic"},"onboarding.step_completed:run"),yd(n);return}if(v!=="failed"&&v!=="cancelled")return;const _=v==="cancelled"?"run_cancelled":"run_failed";h({flowVersion:mt,onboardingSessionId:u,event:"onboarding.blocked",step:"run",action:"retry_run",reasonCode:_},`onboarding.blocked:run:${_}`),yd(n)},[h,n,u,e,v]),!e)return c.jsxs("div",{className:"page-container max-w-3xl",children:[c.jsx("div",{className:"page-header",children:c.jsxs("div",{className:"page-header-left",children:[c.jsx("h1",{className:"page-title",children:"Project not found"}),c.jsx("p",{className:"page-subtitle",children:"This setup link does not identify a project."})]})}),c.jsx(me,{type:"button",variant:"secondary",onClick:()=>{i({to:"/projects"})},children:"View projects"})]});if(r.isPending)return c.jsxs("div",{className:"page-container max-w-3xl","aria-busy":"true","aria-live":"polite",children:[c.jsx(uo,{current:"site"}),c.jsxs("div",{className:"mt-8 flex items-center gap-3 text-sm text-secondary",role:"status",children:[c.jsx(gr,{className:"size-4 motion-safe:animate-spin","aria-hidden":"true"}),"Loading Site Health setup…"]})]});if(r.isError)return c.jsxs("div",{className:"page-container max-w-3xl",children:[c.jsx("div",{className:"page-header",children:c.jsxs("div",{className:"page-header-left",children:[c.jsx("h1",{className:"page-title",children:"Can’t resume setup"}),c.jsx("p",{className:"page-subtitle",children:"Canonry could not load the project for this Site Health scan."})]})}),c.jsxs("div",{className:"rounded-lg border border-negative bg-negative-soft p-4",role:"alert",children:[c.jsx("p",{className:"text-sm text-secondary",children:"Check the connection or sign in again, then retry."}),c.jsx(me,{type:"button",className:"mt-4",variant:"secondary",onClick:()=>{r.refetch()},children:"Retry project check"})]})]});const w=r.data.find(_=>_.name===e);if(!w)return c.jsxs("div",{className:"page-container max-w-3xl",children:[c.jsx("div",{className:"page-header",children:c.jsxs("div",{className:"page-header-left",children:[c.jsx("h1",{className:"page-title",children:"Project not found"}),c.jsxs("p",{className:"page-subtitle",children:["Canonry could not find ",e,". It will not open a different project."]})]})}),c.jsx(me,{type:"button",variant:"secondary",onClick:()=>{i({to:"/projects"})},children:"View projects"})]});const k=()=>{i({to:"/setup",search:{onboarding:"site-health",setupProject:w.name},replace:!0})},j=()=>{i({to:"/setup",search:{experience:"legacy",onboarding:"site-health",setupProject:w.name},replace:!0})},T=()=>{h({flowVersion:mt,onboardingSessionId:u,event:"onboarding.step_completed",step:"run",method:"skipped"},"onboarding.step_completed:run"),i({to:"/setup",search:{onboarding:"complete",setupProject:w.name,skipped:"visibility"},replace:!0})};return c.jsxs("div",{className:"page-container max-w-7xl py-8 md:py-10",children:[c.jsx("h1",{className:"sr-only",children:"Set up Canonry"}),c.jsx(C.Suspense,{fallback:c.jsxs("div",{className:"space-y-5",children:[c.jsx(uo,{current:"site"}),c.jsxs("div",{className:"flex min-h-72 items-center justify-center gap-3 text-sm text-secondary",role:"status",children:[c.jsx(gr,{className:"size-4 motion-safe:animate-spin","aria-hidden":"true"}),"Loading Site Health…"]})]}),children:c.jsx(MF,{projectName:w.name,projectId:w.id,initialRunId:n,onReleaseInitialRun:k,showOnboardingActions:!0,onContinueOnboarding:j,onSkipOnboarding:T})})]})}function nZ(){const e=Ew({from:"/setup"}),n=e.onboarding==="site-health"&&!e.setupProject,i=e.onboarding==="site-health"&&e.experience!=="legacy",r=TV(),u=e.experience==="legacy"?"legacy":e.experience==="platform"?"platform":r,[h,g]=C.useState(!1),[b,v]=C.useState(void 0),w=_t({...yo({client:ne}),enabled:u==="auto",retry:!1,refetchOnMount:"always"}),k=_t({...Xd({client:ne,query:{kind:Ee["site-audit"],since:GF,limit:KF}}),enabled:u==="auto",retry:!1,refetchOnMount:"always"}),j=u==="auto"&&w.isSuccess&&w.isFetchedAfterMount&&w.data.length===0;C.useEffect(()=>{j&&g(!0)},[j]);const T=u!=="auto"?{state:"idle"}:w.isSuccess&&w.isFetchedAfterMount?{state:"success",projectCount:w.data.length}:w.isError?{state:"error"}:{state:"loading"},_=u==="legacy"?"legacy":h||j?"platform":UF(u,T);if(e.onboarding==="complete"&&e.setupProject)return c.jsx(AF,{projectName:e.setupProject,skippedVisibility:e.skipped==="visibility"});if(n||i)return c.jsx(eZ,{projectName:e.setupProject,initialRunId:e.siteHealthRunId});const G=u==="auto"&&_==="legacy"&&!e.setupProject&&w.isSuccess;if(G&&b===void 0)return k.isError?v(null):k.isSuccess&&k.isFetchedAfterMount&&v(HF(w.data,k.data)),c.jsx(zf,{});const R=G?b:null;return R?c.jsx(aZ,{projectName:R.projectName,runId:R.runId}):_==="legacy"?c.jsx(wF,{visibilityProjectName:e.setupProject,siteHealthOnboarding:e.onboarding==="site-health",onboardingFinish:e.onboarding==="site-health"||e.onboarding==="first-run"}):_==="loading"?c.jsx(zf,{}):_==="retry"?c.jsx(JF,{onRetry:()=>{w.refetch()}}):c.jsx(iZ,{onActivationStarted:()=>g(!0),skipSiteScan:e.siteScan==="skip"})}function aZ({projectName:e,runId:n}){const i=gs();return C.useEffect(()=>{i({to:"/setup",search:{onboarding:"site-health",setupProject:e,...n?{siteHealthRunId:n}:{}},replace:!0})},[i,e,n]),c.jsx(zf,{})}function iZ({onActivationStarted:e,skipSiteScan:n}){return c.jsx(wg,{title:"Site Health setup",children:c.jsx(sZ,{onActivationStarted:e,skipSiteScan:n})})}function sZ({onActivationStarted:e,skipSiteScan:n}){const i=gs(),r=ia(),u=dF(),h=_t({...xU({client:ne}),retry:!1}),g=ys(wU()),[b,v]=C.useState(""),[w,k]=C.useState(""),[j,T]=C.useState(""),[_,G]=C.useState("US"),[R,q]=C.useState("en"),[F,ae]=C.useState(!1),[L,W]=C.useState("idle"),[J,se]=C.useState(null),[V,H]=C.useState(null),[we,We]=C.useState(!1),[nt,Ve]=C.useState(null),[He,Ce]=C.useState(!1),Pe=h.isError?void 0:h.data,I=typeof Pe?.enabled=="boolean"?Pe.enabled:null,Y=g.isPending?g.variables.body.enabled:I,[fe,xe]=C.useState(null),ee=C.useRef(null),{onboardingSessionId:Ne,emit:De}=sA("platform");C.useEffect(()=>{De({flowVersion:mt,onboardingSessionId:Ne,event:"onboarding.started",step:"project",resumed:!1},"onboarding.started")},[De,Ne]);const ye=YF(b),le=w||ye?.projectName||"",ce=j||ye?.displayName||"",K=L==="creating"||L==="dispatching",ue=V??nt,Re=QF(_,R),{countryValid:ke,languageValid:et}=FF(_,R),Me=ke&&et;C.useEffect(()=>{ue&&ee.current?.focus()},[ue]);const yt=(Oe,ot)=>i({to:"/setup",search:{...ot?{siteHealthRunId:ot}:{},onboarding:"site-health",setupProject:Oe.name},replace:!0}),Le=async Oe=>{W("dispatching"),Ve(null);try{const ot=u.mutateAsync({projectName:Oe.name,projectId:Oe.id,projectLabel:Oe.displayName||Oe.name,suppressErrorToast:!0,body:{checkDeadLinks:!0,maxPages:BS}}),Lt=await XF(ot);if(Lt.state==="queued"){De({flowVersion:mt,onboardingSessionId:Ne,event:"run.requested",origin:"dashboard_setup",result:"queued",kind:"site_health",providerCountBucket:"0",queryCountBucket:"0"}),nF(Lt.run.runId),await yt(Oe,Lt.run.runId);return}ot.then(()=>{De({flowVersion:mt,onboardingSessionId:Ne,event:"run.requested",origin:"dashboard_setup",result:"queued",kind:"site_health",providerCountBucket:"0",queryCountBucket:"0"})},Vt=>{De({flowVersion:mt,onboardingSessionId:Ne,event:"run.requested",origin:"dashboard_setup",result:"rejected",kind:"site_health",providerCountBucket:"0",queryCountBucket:"0",reasonCode:Yl(Vt,"run_rejected")})}),WF(ot,Oe.id),await yt(Oe)}catch(ot){W("recovery"),Ve(Tw(ot,"The project was created, but the Site Health scan could not be started."));const Lt=Yl(ot,"run_rejected");De({flowVersion:mt,onboardingSessionId:Ne,event:"run.requested",origin:"dashboard_setup",result:"rejected",kind:"site_health",providerCountBucket:"0",queryCountBucket:"0",reasonCode:Lt}),De({flowVersion:mt,onboardingSessionId:Ne,event:"onboarding.blocked",step:"run",action:"retry_run",reasonCode:Lt},`onboarding.blocked:run:${Lt}`)}},re=async Oe=>{if(Oe.preventDefault(),!(!ye||!n&&!F||!Me||K)){W("creating"),H(null),We(!1),Ve(null);try{const ot=await YV({name:le,displayName:ce,canonicalDomain:ye.canonicalDomain,country:_,language:R});if(e(),se(ot),De({flowVersion:mt,onboardingSessionId:Ne,event:"onboarding.step_completed",step:"project",method:"manual"},"onboarding.step_completed:project"),await r.invalidateQueries({queryKey:fs({client:ne})}),n){await i({to:"/setup",search:{experience:"legacy",onboarding:"first-run",setupProject:ot.name},replace:!0});return}await Le(ot)}catch(ot){W("idle");const Lt=ot instanceof pn&&ot.statusCode===409;We(Lt),H(Tw(ot,"Could not create the project. Try again.")),De({flowVersion:mt,onboardingSessionId:Ne,event:"onboarding.blocked",step:"project",action:"save",reasonCode:Yl(ot,"project_create_failed")},"onboarding.blocked:project"),Lt&&(e(),r.invalidateQueries({queryKey:fs({client:ne})}))}}},at=()=>{J&&!K&&Le(J)},Bt=()=>{K||i({to:"/projects"})},jn=async()=>{try{await navigator.clipboard.writeText($F),Ce(!0)}catch{hn({tone:"negative",title:"Could not copy setup request",detail:"Open the agent quickstart to continue with the CLI instead."})}},la=async Oe=>{xe(null);try{const ot=await g.mutateAsync({client:ne,body:{enabled:Oe}});r.setQueryData(gj({client:ne}),ot),ot.enabled!==Oe&&xe(`The server kept telemetry ${ot.enabled?"on":"off"}. Check its telemetry settings.`)}catch{xe("Could not update telemetry. Try again.")}};return J&&L==="recovery"?c.jsxs("div",{className:"page-container max-w-3xl",children:[c.jsx(uo,{current:"site"}),c.jsx("div",{className:"page-header mt-8",children:c.jsxs("div",{className:"page-header-left",children:[c.jsx("h1",{className:"page-title",children:"Project created"}),c.jsxs("p",{className:"page-subtitle",children:[J.displayName||J.name," is ready. The Site Health scan needs another try."]})]})}),c.jsxs("div",{ref:ee,className:"rounded-lg border border-negative bg-negative-soft p-4",role:"alert",tabIndex:-1,children:[c.jsx("p",{className:"text-sm font-medium text-heading",children:nt}),c.jsx("p",{className:"mt-1 text-sm text-secondary",children:"You can retry the scan or continue setup and retry from Site Health."}),c.jsxs("div",{className:"mt-4 flex flex-wrap gap-3",children:[c.jsx(me,{type:"button",onClick:at,children:"Retry Site Health scan"}),c.jsx(me,{type:"button",variant:"secondary",onClick:()=>{yt(J)},children:"Continue setup"})]})]})]}):c.jsxs("div",{className:"page-container max-w-xl py-8 md:py-12",children:[n?null:c.jsx(uo,{current:"site"}),c.jsxs("header",{className:`mb-8 ${n?"":"mt-8"}`,children:[c.jsx("h1",{id:"site-map-setup-title",className:"text-2xl font-semibold tracking-[-0.025em] text-heading",children:n?"Create a project":"Scan your site"}),c.jsx("p",{className:"mt-2 max-w-lg text-sm leading-6 text-secondary",children:n?"Add a public domain, then choose the queries you want to track. No site scan will run.":"Enter your public website to see its pages, structure, internal links, and technical SEO scores."})]}),c.jsxs("form",{"aria-labelledby":"site-map-setup-title",className:"space-y-6",onSubmit:rn(re),noValidate:!0,children:[c.jsxs("div",{className:"grid gap-2",children:[c.jsx("label",{className:"text-sm font-medium text-heading",htmlFor:"launchpad-domain",children:"Website URL"}),c.jsx("input",{id:"launchpad-domain",className:"h-11 w-full rounded-md border border-strong bg-bg-elevated/50 px-3 text-base text-heading outline-none transition placeholder:text-muted focus:border-mono-500 focus:ring-1 focus:ring-mono-500",type:"text",inputMode:"url",autoComplete:"url",autoCapitalize:"none",spellCheck:!1,required:!0,"aria-invalid":!!(b&&!ye),"aria-describedby":b&&!ye?"launchpad-domain-hint launchpad-domain-error":"launchpad-domain-hint",placeholder:"https://example.com",value:b,onChange:Oe=>{v(Oe.target.value),H(null),We(!1)}}),c.jsx("p",{id:"launchpad-domain-hint",className:"text-sm text-secondary",children:n?c.jsxs(c.Fragment,{children:["A public domain is still required."," ",c.jsx(Fe,{to:"/setup",search:{experience:"platform"},className:"font-medium text-link underline-offset-4 hover:underline",children:"Map with Site Health instead"})]}):c.jsxs(c.Fragment,{children:["Only public pages are scanned."," ",c.jsx(Fe,{to:"/setup",search:{experience:"platform",onboarding:"first-run",siteScan:"skip"},className:"font-medium text-link underline-offset-4 hover:underline",children:"Set up without a site scan"})]})}),b&&!ye?c.jsx("p",{id:"launchpad-domain-error",className:"text-sm text-negative",role:"alert",children:"Enter a public domain, such as example.com."}):null]}),c.jsxs("details",{className:"group border-y border-default",children:[c.jsxs("summary",{className:"flex min-h-11 cursor-pointer list-none items-center justify-between gap-4 py-3 text-sm [&::-webkit-details-marker]:hidden",children:[c.jsx("span",{className:"font-medium text-heading",children:"Project name and locale"}),c.jsxs("span",{className:"flex items-center gap-2 text-secondary",children:[Re,c.jsx(vd,{className:"size-4 transition-transform group-open:rotate-180 motion-reduce:transition-none","aria-hidden":"true"})]})]}),c.jsxs("div",{className:"space-y-5 border-t border-default py-4",children:[ye?c.jsxs("div",{children:[c.jsx("p",{className:"mb-3 text-sm font-medium text-heading",children:"Project"}),c.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[c.jsxs("div",{className:"grid gap-2",children:[c.jsx("label",{className:"text-sm text-secondary",htmlFor:"launchpad-project-name",children:"Project name"}),c.jsx("input",{id:"launchpad-project-name",className:"setup-input h-10",type:"text",value:le,onChange:Oe=>k(Oe.target.value)})]}),c.jsxs("div",{className:"grid gap-2",children:[c.jsx("label",{className:"text-sm text-secondary",htmlFor:"launchpad-display-name",children:"Display name"}),c.jsx("input",{id:"launchpad-display-name",className:"setup-input h-10",type:"text",value:ce,onChange:Oe=>T(Oe.target.value)})]})]})]}):null,c.jsxs("div",{children:[c.jsx("p",{className:"mb-3 text-sm font-medium text-heading",children:"Locale"}),c.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[c.jsxs("div",{className:"grid gap-2",children:[c.jsx("label",{className:"text-sm text-secondary",htmlFor:"launchpad-country",children:"Country"}),c.jsx("select",{id:"launchpad-country",className:"setup-input h-10",value:_,onChange:Oe=>G(Oe.target.value),children:aA.map(Oe=>c.jsx("option",{value:Oe.value,children:Oe.label},Oe.value))})]}),c.jsxs("div",{className:"grid gap-2",children:[c.jsx("label",{className:"text-sm text-secondary",htmlFor:"launchpad-language",children:"Language"}),c.jsx("select",{id:"launchpad-language",className:"setup-input h-10",value:R,onChange:Oe=>q(Oe.target.value),children:iA.map(Oe=>c.jsx("option",{value:Oe.value,children:Oe.label},Oe.value))})]})]})]})]})]}),n?null:c.jsxs("label",{className:"flex min-h-11 cursor-pointer items-start gap-3 py-2",children:[c.jsx("input",{className:"mt-0.5 size-4 shrink-0 rounded border-strong bg-bg",type:"checkbox",checked:F,onChange:Oe=>ae(Oe.target.checked),"aria-label":"Allow Canonry to scan this public site."}),c.jsxs("span",{className:"flex items-center gap-1.5",children:[c.jsx("span",{className:"text-sm leading-5 text-heading",children:"Allow Canonry to scan this public site."}),c.jsx(to,{text:BF})]})]}),ue?c.jsxs("div",{ref:ee,className:"rounded-md border border-negative bg-negative-soft p-3",role:"alert",tabIndex:-1,children:[c.jsx("p",{className:"text-sm font-medium text-heading",children:ue}),we?c.jsx(me,{type:"button",variant:"secondary",size:"sm",className:"mt-3",onClick:Bt,children:"View projects"}):null]}):null,c.jsxs("div",{className:"grid gap-2",children:[c.jsx(me,{className:"h-11 w-full",type:"submit",disabled:!ye||!n&&!F||!Me||K,children:L==="creating"||L==="dispatching"?c.jsxs(c.Fragment,{children:[c.jsx(gr,{className:"size-4 motion-safe:animate-spin","aria-hidden":"true"})," ",n?"Creating project…":"Mapping site…"]}):n?"Create project":"Scan site"}),L==="dispatching"?c.jsx("span",{className:"text-center text-sm text-secondary",role:"status",children:"Opening Site Health when the scan is ready."}):null]})]}),c.jsxs("section",{className:"mt-8 border-t border-default pt-6","aria-labelledby":"agent-setup-title",children:[c.jsx("p",{id:"agent-setup-title",className:"text-sm font-medium text-heading",children:"Use your agent instead"}),c.jsx("p",{className:"mt-1 text-sm leading-5 text-secondary",children:"Copy a complete CLI setup request into any agent."}),c.jsxs("div",{className:"mt-3 flex flex-wrap items-center gap-1",children:[c.jsxs(me,{type:"button",variant:"ghost",size:"sm",className:"-ml-3",onClick:rn(jn),children:[He?c.jsx(xd,{className:"size-3.5","aria-hidden":"true"}):c.jsx(qf,{className:"size-3.5","aria-hidden":"true"}),c.jsx("span",{"aria-live":"polite",children:He?"Copied setup request":"Copy setup request"})]}),c.jsx(me,{asChild:!0,variant:"ghost",size:"sm",children:c.jsxs("a",{href:VF,target:"_blank",rel:"noopener noreferrer",children:["Agent quickstart",c.jsx(B4,{className:"size-3.5","aria-hidden":"true"}),c.jsx("span",{className:"sr-only",children:" (opens in a new tab)"})]})})]})]}),I!==null?c.jsxs("section",{className:"mt-6 border-t border-default pt-5","aria-labelledby":"telemetry-title",children:[c.jsxs("label",{className:`flex min-h-11 items-start gap-3 py-2 ${g.isPending?"cursor-wait":"cursor-pointer"}`,children:[c.jsx("input",{className:"mt-0.5 size-4 shrink-0 rounded border-strong bg-bg accent-accent focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-mono-500 disabled:cursor-wait",type:"checkbox",checked:Y??!1,disabled:g.isPending,onChange:Oe=>{la(Oe.target.checked)},"aria-describedby":"telemetry-detail"}),c.jsxs("span",{className:"grid gap-0.5",children:[c.jsx("span",{id:"telemetry-title",className:"text-sm leading-5 text-heading",children:"Share anonymous product telemetry"}),c.jsx("span",{id:"telemetry-detail",className:"max-w-[70ch] text-sm leading-5 text-secondary",children:"Helps prioritize improvements. Canonry does not send raw domains, URLs, queries, answer content, or credentials."})]})]}),g.isPending?c.jsx("p",{className:"mt-1 text-sm text-secondary",role:"status",children:"Saving preference…"}):null,fe?c.jsx("p",{className:"mt-1 text-sm text-negative",role:"alert",children:fe}):null]}):null]})}function oZ(){return c.jsx("div",{className:"page-container",children:c.jsx("section",{className:"page-section",children:c.jsxs(ka,{className:"surface-card empty-card",children:[c.jsx("h1",{children:"Route not found"}),c.jsx("p",{children:"The current path does not map to a dashboard view."}),c.jsx(me,{asChild:!0,children:c.jsx(Fe,{to:"/",children:"Return to overview"})})]})})})}const ra=bs(()=>Ri(()=>import("./ProjectPage-CoBwpHmA.js"),__vite__mapDeps([5,1,2,6,0,3,4,7,8,9,10,11,12]),import.meta.url),"ProjectPage"),rZ=bs(()=>Ri(()=>import("./RunsPage-DK3pb1LH.js"),__vite__mapDeps([13,1,6,11,4,2,9,12]),import.meta.url),"RunsPage"),lZ=bs(()=>Ri(()=>import("./HistoryPage-C-TdCUQ2.js"),__vite__mapDeps([14,1,10,11,4,2,9,12]),import.meta.url),"HistoryPage"),cZ=bs(()=>Ri(()=>import("./SettingsPage-BruiY8Zh.js"),__vite__mapDeps([15,1,11,4,2,9,12]),import.meta.url),"SettingsPage"),uZ=bs(()=>Ri(()=>import("./BacklinksPage-g57_xzTX.js"),__vite__mapDeps([16,1,2,11,4,9,12]),import.meta.url),"BacklinksPage"),dZ=bs(()=>Ri(()=>import("./TrafficPage-BVolLXT2.js"),__vite__mapDeps([17,1,7,2,11,4,9,12]),import.meta.url),"TrafficPage"),mZ=bs(()=>Ri(()=>import("./TrafficSourceDetailPage-CFDb6lPD.js"),__vite__mapDeps([18,1,7,3,4,2,11,9,12]),import.meta.url),"TrafficSourceDetailPage"),pZ=bs(()=>Ri(()=>import("./MeasurementPropertyPage-CAADmNfw.js"),__vite__mapDeps([19,1,3,4,8,9,2,11,12]),import.meta.url),"MeasurementPropertyPage");function hZ(){return c.jsx(LQ,{children:c.jsx(D$,{children:c.jsx(BQ,{})})})}const Pn=f4()({component:hZ,validateSearch:e=>({manageQueries:e.manageQueries===!0||e.manageQueries==="true"?!0:void 0,runId:typeof e.runId=="string"?e.runId:void 0,siteHealthRunId:typeof e.siteHealthRunId=="string"?e.siteHealthRunId:void 0,evidenceId:typeof e.evidenceId=="string"?e.evidenceId:void 0,runStatus:typeof e.runStatus=="string"?e.runStatus:void 0,runKind:typeof e.runKind=="string"?e.runKind:void 0,runProject:typeof e.runProject=="string"?e.runProject:void 0,runWindow:typeof e.runWindow=="string"?e.runWindow:void 0,runQuery:typeof e.runQuery=="string"?e.runQuery:void 0,onboarding:e.onboarding==="site-health"||e.onboarding==="first-run"||e.onboarding==="complete"?e.onboarding:void 0,experience:e.experience==="legacy"||e.experience==="platform"?e.experience:void 0,siteScan:e.siteScan==="skip"?"skip":void 0,skipped:e.skipped==="visibility"?"visibility":void 0,setupProject:typeof e.setupProject=="string"?e.setupProject:void 0,scope:typeof e.scope=="string"?e.scope:void 0,class:typeof e.class=="string"?e.class:void 0,...Object.fromEntries(["queryWorkspace","researchMode","trackingQueryId","measurementScope","measurementScopeKey","measurementMarketKey","queryClass","measurementProvider","measurementModel","measurementLocation","measurementFrom","measurementTo","measurementRevision","measurementRunId","measurementQueryKey","measurementAnswer"].map(n=>[n,typeof e[n]=="string"?e[n]:void 0]))})}),fZ=zt({getParentRoute:()=>Pn,path:"/",component:KQ,beforeLoad:async({context:e})=>{let n=e.queryClient.getQueryData(fs({client:ne}));if(n===void 0)try{n=await e.queryClient.ensureQueryData(yo({client:ne}))}catch{return}if(n.length===0)throw Dw({to:"/setup"})}}),gZ=zt({getParentRoute:()=>Pn,path:"/projects",component:ZQ}),yZ=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,qn=zt({getParentRoute:()=>Pn,path:"/projects/$projectName",component:()=>c.jsx(Hh,{}),beforeLoad:async({context:e,params:n,location:i})=>{const r=n.projectName;if(!yZ.test(r))return;let u=e.queryClient.getQueryData(fs({client:ne}));if(!u)try{u=await e.queryClient.ensureQueryData(yo({client:ne}))}catch{return}const h=u.find(g=>g.id===r);if(h)throw Dw({to:i.pathname.replace(`/projects/${r}`,`/projects/${encodeURIComponent(h.name)}`),replace:!0})}}),bZ=zt({getParentRoute:()=>qn,path:"/",component:()=>c.jsx(ra,{tab:"overview"})}),vZ=zt({getParentRoute:()=>qn,path:"/portfolio",component:()=>c.jsx(ra,{tab:"portfolio"})}),xZ=zt({getParentRoute:()=>qn,path:"/search-console",component:()=>c.jsx(ra,{tab:"search-console"})}),wZ=zt({getParentRoute:()=>qn,path:"/conversions",component:()=>c.jsx(ra,{tab:"conversions"})}),kZ=zt({getParentRoute:()=>qn,path:"/local",component:()=>c.jsx(ra,{tab:"local"})}),SZ=zt({getParentRoute:()=>qn,path:"/discovery",component:()=>c.jsx(ra,{tab:"discovery"})}),jZ=zt({getParentRoute:()=>qn,path:"/queries",component:()=>c.jsx(ra,{tab:"queries"})}),AZ=zt({getParentRoute:()=>qn,path:"/properties/$targetKey",component:()=>c.jsx(pZ,{})}),CZ=zt({getParentRoute:()=>qn,path:"/report",component:()=>c.jsx(ra,{tab:"report"})}),NZ=zt({getParentRoute:()=>qn,path:"/activity",component:()=>c.jsx(ra,{tab:"activity"})}),_Z=zt({getParentRoute:()=>qn,path:"/backlinks",component:()=>c.jsx(ra,{tab:"backlinks"})}),TZ=zt({getParentRoute:()=>qn,path:"/technical-aeo",component:()=>c.jsx(ra,{tab:"technical-aeo"})}),RZ=zt({getParentRoute:()=>qn,path:"/history",component:()=>c.jsx(ra,{tab:"history"})}),EZ=zt({getParentRoute:()=>qn,path:"/settings",component:()=>c.jsx(ra,{tab:"settings"})}),zZ=zt({getParentRoute:()=>Pn,path:"/runs",component:rZ}),DZ=zt({getParentRoute:()=>Pn,path:"/history",component:lZ}),OZ=zt({getParentRoute:()=>Pn,path:"/settings",component:cZ,beforeLoad:({context:e})=>{}}),IZ=zt({getParentRoute:()=>Pn,path:"/setup",component:nZ}),PZ=zt({getParentRoute:()=>Pn,path:"/backlinks",component:uZ}),qZ=zt({getParentRoute:()=>Pn,path:"/traffic",component:dZ}),MZ=zt({getParentRoute:()=>Pn,path:"/traffic/$projectName/$sourceId",component:mZ}),BZ=zt({getParentRoute:()=>Pn,path:"*",component:oZ}),LZ=Pn.addChildren([fZ,gZ,qn.addChildren([bZ,vZ,xZ,wZ,kZ,SZ,jZ,AZ,CZ,NZ,_Z,TZ,RZ,EZ]),zZ,DZ,OZ,IZ,PZ,qZ,MZ,BZ]);function VZ(){return typeof window<"u"&&window.__CANONRY_CONFIG__?.basePath?window.__CANONRY_CONFIG__.basePath:"/"}const Rw=VZ(),$Z=Rw==="/"?"":Rw.replace(/\/$/,"");function UZ(e,n){return g4({routeTree:LZ,basepath:$Z||"/",context:{queryClient:e},...n?.initialEntries})}const GZ=6e4;function KZ(){const e=C.useRef(QV()).current,[n,i]=C.useState(e?"ready":"checking"),[r,u]=C.useState(null),[h,g]=C.useState(null),[b,v]=C.useState(e),[w,k]=C.useState(!1),[j,T]=C.useState(""),[_,G]=C.useState(""),[R,q]=C.useState(""),[F,ae]=C.useState(!1),[L,W]=C.useState("password"),[J,se]=C.useState(null),[V,H]=C.useState(!1),[we,We]=C.useState(!1),nt=C.useRef(null),Ve=C.useRef(null),He=C.useRef(null),Ce=()=>{const K=r?`${r.name}:${r.role}`:e?"api-key:explicit":h?`api-key:${h.id}`:"no-accounts";if(!nt.current||He.current!==K){Ve.current?.clear();const ue=R$();Ve.current=ue,nt.current=UZ(ue),He.current=K}return{queryClient:Ve.current,router:nt.current}},Pe=K=>K.authRequired?(k(!0),u(K.user),g(null),v(!1),i(K.user?"ready":"account-login"),!0):!1;C.useEffect(()=>{let K=!1;const ue=async(Re,ke=!1)=>{try{const et=await qh();if(K)return;g(et),v(!1),i("ready")}catch(et){if(K)return;if(ke&&et instanceof pn&&et.statusCode===401)return s$().then(()=>{K||(se(null),g(null),v(!1),We(!0),i("login"))}).catch(Me=>{K||(se(Me instanceof Error?Me.message:"Could not clear the invalid session"),i(Re))});se(et instanceof Error?et.message:"Could not verify API key access"),i(Re)}};return e?(ue("api-key-error"),()=>{K=!0}):(Promise.allSettled([Mx(),qx()]).then(([Re,ke])=>{if(K||Re.status==="fulfilled"&&Pe(Re.value))return;if(ke.status==="rejected"){const Me=ke.reason;se(Me instanceof Error?Me.message:"Failed to reach the Canonry API"),i("login");return}const et=ke.value;et.authenticated?(v(!0),ue("api-key-error",!0)):(g(null),v(!1),i(et.setupRequired?"setup":"login"))}),()=>{K=!0})},[]),C.useEffect(()=>{if(n!=="ready"||e)return;const K=setInterval(()=>{if(w){Mx().then(ue=>{ue.authRequired&&!ue.user&&(We(!0),u(null),g(null),i("account-login"))}).catch(()=>{});return}qx().then(ue=>{ue.authenticated||(We(!0),g(null),i(ue.setupRequired?"setup":"login"))}).catch(()=>{})},GZ);return Px(()=>{We(!0),u(null),g(null),v(!1),i(w?"account-login":"login")}),()=>{clearInterval(K),Px(null)}},[n,w,e]);const I=async K=>{if(K.preventDefault(),!_.trim()||_.trim().length<8){se("Password must be at least 8 characters");return}if(_!==R){se("Passwords do not match");return}H(!0),se(null);try{if(!(await n$(_.trim())).authenticated){se("Setup failed");return}G(""),q(""),ae(!1),We(!1),g(null),v(!0),i("checking");try{const Re=await qh();g(Re),v(!1),i("ready")}catch(Re){se(Re instanceof Error?Re.message:"Could not verify API key access"),i("api-key-error")}}catch(ue){se(ue instanceof pn||ue instanceof Error?ue.message:"Setup failed")}finally{H(!1)}},Y=K=>{G(K),se(null)},fe=K=>{q(K),se(null)},xe=async K=>{if(K.preventDefault(),!!_.trim()){H(!0),se(null);try{if(!(L==="api-key"?await i$(_.trim()):await a$(_.trim())).authenticated){se(L==="api-key"?"Invalid API key":"Incorrect password");return}const Re=await qh();g(Re),v(!1),G(""),ae(!1),We(!1),i("ready")}catch(ue){se(ue instanceof pn||ue instanceof Error?ue.message:"Authentication failed")}finally{H(!1)}}},ee=K=>{W(K),G(""),ae(!1),se(null)},Ne=async K=>{if(K.preventDefault(),!(!j.trim()||!_)){H(!0),se(null);try{const ue=await o$(j.trim(),_);if(!ue.user){se("Incorrect name or password.");return}G(""),We(!1),u(ue.user),g(null),v(!1),i("ready")}catch(ue){se(ue instanceof pn?ue.message:"Incorrect name or password.")}finally{H(!1)}}};if(n==="ready"){const{queryClient:K,router:ue}=Ce();return c.jsx(x$,{account:r,apiKey:h,apiKeyPending:b,children:c.jsx(y4,{client:K,children:c.jsx(b4,{router:ue})})})}const De=_.trim(),ye=_.length>0&&De.length<8,le=R.length>0&&_!==R,ce=De.length>=8&&_===R;return c.jsx("div",{className:"min-h-screen bg-bg px-4 py-8",children:c.jsxs("div",{className:"mx-auto flex min-h-[calc(100vh-4rem)] max-w-md flex-col items-center justify-center gap-5",children:[c.jsxs("div",{"data-testid":"auth-brand",className:"flex items-center gap-2.5",children:[c.jsx("img",{className:"size-7",src:"./favicon.svg",alt:"","aria-hidden":"true"}),c.jsx("span",{className:"text-lg font-semibold tracking-tight text-heading",children:"Canonry"})]}),c.jsx(ka,{className:"surface-card w-full",children:n==="checking"?c.jsx(no,{className:"py-8",children:c.jsx("p",{className:"supporting-copy text-center",children:"Connecting to Canonry…"})}):n==="api-key-error"?c.jsxs(c.Fragment,{children:[c.jsxs(mr,{children:[c.jsx("p",{className:"eyebrow eyebrow-soft",children:"Dashboard access"}),c.jsx("h1",{className:"font-medium tracking-tight text-primary",children:"Could not verify API key access"})]}),c.jsxs(no,{className:"space-y-4",children:[c.jsx("p",{className:"supporting-copy",children:J??"Canonry could not verify this session’s access, so the dashboard stayed locked."}),c.jsx(me,{type:"button",className:"w-full",onClick:()=>{window.location.reload()},children:"Try again"})]})]}):n==="account-login"?c.jsxs(c.Fragment,{children:[c.jsxs(mr,{children:[c.jsx("p",{className:"eyebrow eyebrow-soft",children:"Dashboard access"}),c.jsx("h1",{className:"font-medium tracking-tight text-primary",children:"Sign in to Canonry"})]}),c.jsxs(no,{children:[we?c.jsx("p",{className:"mb-4 rounded-md border border-caution bg-caution-soft px-3 py-2 text-sm text-caution",children:"You were signed out — please sign in again."}):null,c.jsxs("form",{className:"space-y-4",onSubmit:rn(Ne),children:[c.jsxs("label",{className:"block space-y-1.5",htmlFor:"account-name",children:[c.jsx("span",{className:"text-xs font-medium text-secondary",children:"Name"}),c.jsx("input",{autoFocus:!0,id:"account-name",className:"w-full rounded-md border border-base bg-bg px-3 py-2 text-sm text-heading outline-none transition focus:border-mono-600",type:"text",name:"username",autoComplete:"username",value:j,onChange:K=>{T(K.target.value),se(null)},"aria-invalid":!!J,"aria-describedby":J?"account-login-error":void 0})]}),c.jsxs("label",{className:"block space-y-1.5",htmlFor:"account-password",children:[c.jsx("span",{className:"text-xs font-medium text-secondary",children:"Password"}),c.jsx("input",{id:"account-password",className:"w-full rounded-md border border-base bg-bg px-3 py-2 text-sm text-heading outline-none transition focus:border-mono-600",type:"password",name:"password",autoComplete:"current-password",value:_,onChange:K=>Y(K.target.value),"aria-invalid":!!J,"aria-describedby":J?"account-login-error":void 0})]}),J?c.jsx("p",{id:"account-login-error",role:"alert",className:"text-sm text-negative-400",children:J}):null,c.jsx(me,{type:"submit",disabled:V||!j.trim()||!_,children:V?"Signing in…":"Sign in"})]})]})]}):n==="setup"?c.jsxs(c.Fragment,{children:[c.jsxs(mr,{children:[c.jsx("p",{className:"eyebrow eyebrow-soft",children:"First-time setup"}),c.jsx("h1",{className:"font-medium tracking-tight text-primary",children:"Create a dashboard password"}),c.jsx(fd,{children:"This password protects the dashboard on this computer."})]}),c.jsx(no,{children:c.jsxs("form",{className:"space-y-4",onSubmit:rn(I),children:[c.jsxs("div",{className:"space-y-1.5",children:[c.jsx("label",{className:"block text-xs font-medium text-secondary",htmlFor:"dashboard-password-new",children:"Password"}),c.jsx("input",{autoFocus:!0,id:"dashboard-password-new",className:"w-full rounded-md border border-base bg-bg px-3 py-2 text-sm text-heading outline-none transition focus:border-mono-600",type:F?"text":"password",name:"new-password",autoComplete:"new-password",minLength:8,required:!0,value:_,onChange:K=>Y(K.target.value),"aria-invalid":ye,"aria-describedby":"dashboard-password-new-help"}),c.jsx("span",{id:"dashboard-password-new-help","aria-live":"polite",className:ye?"block text-sm text-negative-400":"block text-sm text-secondary",children:ye?"Enter at least 8 characters.":"Use at least 8 characters."})]}),c.jsxs("div",{className:"space-y-1.5",children:[c.jsx("label",{className:"block text-xs font-medium text-secondary",htmlFor:"dashboard-password-confirm",children:"Confirm password"}),c.jsx("input",{id:"dashboard-password-confirm",className:"w-full rounded-md border border-base bg-bg px-3 py-2 text-sm text-heading outline-none transition focus:border-mono-600",type:F?"text":"password",name:"confirm-password",autoComplete:"new-password",minLength:8,required:!0,value:R,onChange:K=>fe(K.target.value),"aria-invalid":le,"aria-describedby":"dashboard-password-confirm-help"}),c.jsx("span",{id:"dashboard-password-confirm-help","aria-live":"polite",className:le?"block text-sm text-negative-400":"block text-sm text-secondary",children:le?"Passwords do not match.":"Enter the same password again."})]}),c.jsxs("label",{className:"flex min-h-10 cursor-pointer items-center gap-2 text-sm text-secondary",htmlFor:"dashboard-password-show",children:[c.jsx("input",{id:"dashboard-password-show",type:"checkbox",checked:F,onChange:K=>ae(K.target.checked)}),"Show passwords"]}),J?c.jsx("p",{id:"dashboard-password-setup-error",role:"alert",className:"text-sm text-negative-400",children:J}):null,c.jsx(me,{type:"submit",disabled:V||!ce,children:V?"Creating password…":"Create password and continue"})]})})]}):c.jsxs(c.Fragment,{children:[c.jsxs(mr,{children:[c.jsx("p",{className:"eyebrow eyebrow-soft",children:"Dashboard access"}),c.jsx("h1",{className:"font-medium tracking-tight text-primary",children:"Sign in to Canonry"}),c.jsx(fd,{children:L==="api-key"?"Enter an API key from this Canonry install. This opens the dashboard with that key’s access and does not change the password.":"Enter your dashboard password to continue."})]}),c.jsxs(no,{children:[we?c.jsx("p",{className:"mb-4 rounded-md border border-caution bg-caution-soft px-3 py-2 text-sm text-caution",children:"Your session expired — please sign in again."}):null,c.jsxs("form",{className:"space-y-4",onSubmit:rn(xe),children:[c.jsxs("label",{className:"block space-y-1.5",htmlFor:"dashboard-password-current",children:[c.jsx("span",{className:"text-xs font-medium text-secondary",children:L==="api-key"?"Canonry API key":"Password"}),c.jsx("input",{autoFocus:!0,id:"dashboard-password-current",className:"w-full rounded-md border border-base bg-bg px-3 py-2 text-sm text-heading outline-none transition focus:border-mono-600",type:F?"text":"password",name:L==="api-key"?"apiKey":"password",autoComplete:L==="api-key"?"off":"current-password",spellCheck:!1,required:!0,value:_,onChange:K=>Y(K.target.value),"aria-invalid":!!J,"aria-describedby":J?"dashboard-password-login-error":void 0})]}),c.jsxs("label",{className:"flex min-h-10 cursor-pointer items-center gap-2 text-sm text-secondary",htmlFor:"dashboard-login-password-show",children:[c.jsx("input",{id:"dashboard-login-password-show",type:"checkbox",checked:F,onChange:K=>ae(K.target.checked)}),L==="api-key"?"Show API key":"Show password"]}),J?c.jsx("p",{id:"dashboard-password-login-error",role:"alert",className:"text-sm text-negative-400",children:J}):null,c.jsx(me,{type:"submit",disabled:V||!_.trim(),children:V?"Signing in…":"Open dashboard"}),c.jsx(me,{type:"button",variant:"ghost",onClick:()=>ee(L==="api-key"?"password":"api-key"),children:L==="api-key"?"Use dashboard password instead":"Forgot password? Use API key"})]})]})]})})]})})}const oA=document.getElementById("root");if(!oA)throw new Error("Expected #root element for web app bootstrap.");Q4.createRoot(oA).render(c.jsx(C.StrictMode,{children:c.jsx(KZ,{})}));export{$W as $,Af as A,me as B,ud as C,RJ as D,AY as E,_J as F,EJ as G,TW as H,to as I,CJ as J,_ee as K,Eee as L,jte as M,Ree as N,MW as O,MK as P,qW as Q,FW as R,I$ as S,Rn as T,hn as U,Oee as V,Iee as W,UW as X,Pee as Y,GW as Z,LW as _,Ste as a,hX as a$,zee as a0,Dee as a1,Tee as a2,BW as a3,qee as a4,Gee as a5,Lee as a6,$ee as a7,Vee as a8,Uee as a9,eo as aA,N$ as aB,UJ as aC,KH as aD,VW as aE,zY as aF,jY as aG,yW as aH,TD as aI,Sn as aJ,SY as aK,WY as aL,kY as aM,RY as aN,F$ as aO,gU as aP,ZJ as aQ,eee as aR,YJ as aS,pX as aT,fX as aU,iL as aV,gX as aW,sU as aX,FJ as aY,oL as aZ,ff as a_,mJ as aa,cg as ab,Ee as ac,Bee as ad,xj as ae,Ti as af,Mee as ag,Pte as ah,GI as ai,KI as aj,OY as ak,DY as al,fJ as am,wJ as an,kJ as ao,pn as ap,SJ as aq,xW as ar,P$ as as,$G as at,bf as au,jJ as av,Yu as aw,ate as ax,lr as ay,Nf as az,tq as b,JY as b$,qV as b0,XJ as b1,QJ as b2,rU as b3,WJ as b4,Rte as b5,JJ as b6,lte as b7,cte as b8,KW as b9,be as bA,bY as bB,yY as bC,gY as bD,fY as bE,mY as bF,dY as bG,hY as bH,pY as bI,uY as bJ,cY as bK,nY as bL,aY as bM,lY as bN,rY as bO,oY as bP,iY as bQ,sY as bR,tY as bS,eY as bT,JZ as bU,WZ as bV,bN as bW,XY as bX,eX as bY,FY as bZ,tX as b_,rg as ba,nte as bb,fj as bc,see as bd,ree as be,fee as bf,Aee as bg,jee as bh,pee as bi,kee as bj,Nee as bk,cee as bl,yee as bm,bee as bn,vee as bo,lee as bp,gee as bq,uee as br,xee as bs,dee as bt,wee as bu,hee as bv,See as bw,Cee as bx,oF as by,mee as bz,Wk as c,OX as c$,ZY as c0,YY as c1,iX as c2,Ite as c3,tte as c4,yf as c5,nX as c6,bX as c7,vX as c8,oo as c9,XX as cA,ZX as cB,YX as cC,lX as cD,QX as cE,HX as cF,IX as cG,PX as cH,sX as cI,uX as cJ,qX as cK,eW as cL,CY as cM,lW as cN,cW as cO,iW as cP,oW as cQ,NY as cR,rW as cS,sW as cT,KY as cU,GX as cV,TX as cW,RX as cX,EX as cY,zX as cZ,DX as c_,yX as ca,aX as cb,nJ as cc,Nt as cd,AB as ce,UX as cf,gW as cg,MX as ch,BX as ci,LX as cj,VX as ck,$X as cl,xM as cm,HY as cn,Ox as co,fW as cp,cX as cq,rX as cr,kX as cs,hV as ct,mW as cu,pW as cv,dW as cw,uW as cx,WX as cy,tO as cz,AJ as d,Nte as d$,vV as d0,hW as d1,QY as d2,vY as d3,wM as d4,jX as d5,JX as d6,wY as d7,oX as d8,xX as d9,zW as dA,zJ as dB,DJ as dC,DW as dD,OW as dE,PW as dF,IW as dG,yc as dH,yo as dI,nj as dJ,qJ as dK,PJ as dL,TH as dM,BK as dN,Mj as dO,GK as dP,Bj as dQ,Lj as dR,GH as dS,W$ as dT,ao as dU,bd as dV,SU as dW,gF as dX,Ote as dY,_te as dZ,$H as d_,SX as da,wX as db,_Y as dc,tW as dd,nW as de,aW as df,J3 as dg,AX as dh,CX as di,TY as dj,NX as dk,KX as dl,xY as dm,FX as dn,_X as dp,NW as dq,CW as dr,AW as ds,aJ as dt,vU as du,oee as dv,OJ as dw,EY as dx,Gx as dy,EW as dz,Wee as e,yJ as e$,uF as e0,tee as e1,MJ as e2,Cte as e3,$J as e4,BJ as e5,nee as e6,Ate as e7,LJ as e8,Yt as e9,eJ as eA,WW as eB,jr as eC,Xd as eD,Ete as eE,tm as eF,mg as eG,aee as eH,iee as eI,$V as eJ,bW as eK,vW as eL,RW as eM,HW as eN,QW as eO,wg as eP,nm as eQ,pg as eR,fF as eS,tJ as eT,Ar as eU,Hx as eV,pJ as eW,gJ as eX,bJ as eY,vJ as eZ,hJ as e_,xte as ea,XH as eb,ZV as ec,V$ as ed,WH as ee,Tte as ef,wW as eg,WV as eh,kW as ei,SW as ej,jW as ek,fs as el,Q$ as em,X$ as en,_W as eo,Kee as ep,u$ as eq,JW as er,Qee as es,Fee as et,Zee as eu,Hee as ev,TJ as ew,ZW as ex,YW as ey,XW as ez,ka as f,xJ as f0,Ph as f1,dJ as f2,ote as f3,QQ as f4,mX as f5,H0 as f6,IJ as f7,ite as f8,rte as f9,kte as fA,mte as fB,pte as fC,IY as fD,gte as fE,vte as fF,fte as fG,bte as fH,uo as fI,BS as fJ,BY as fK,$Y as fL,yte as fM,RP as fN,VY as fO,LY as fP,uJ as fa,dX as fb,lJ as fc,cJ as fd,rJ as fe,ste as ff,NJ as fg,Vz as fh,GJ as fi,VJ as fj,HJ as fk,KJ as fl,qY as fm,Ri as fn,Na as fo,PY as fp,PV as fq,gG as fr,dte as fs,ute as ft,dF as fu,hte as fv,FH as fw,UY as fx,MY as fy,wte as fz,Yee as g,aw as h,In as i,ne as j,MV as k,fr as l,Tn as m,rn as n,Xee as o,ete as p,Jee as q,iJ as r,GY as s,M$ as t,hg as u,oJ as v,sJ as w,oa as x,zte as y,Dte as z};
|
|
86
|
+
competitor2.com`,value:ii,onChange:$=>Ii($.target.value)})]}),Qt?c.jsx("p",{className:"text-negative-400 text-sm",children:Qt}):null,c.jsxs("div",{className:"setup-nav",children:[c.jsx(me,{type:"button",variant:"outline",onClick:zn,children:"Back"}),c.jsxs("div",{className:"flex gap-2",children:[c.jsx(me,{type:"button",variant:"outline",onClick:kc,children:"Skip"}),c.jsx(me,{type:"button",disabled:oi.length===0||Gr,onClick:rn(Zr),children:Gr?"Saving...":`Save ${oi.length} competitor${oi.length!==1?"s":""}`})]})]})]})]});case 4:{const $=Ga.data,$e=$?.status??(Mi===nt?.id?nt.status:void 0),li=$e==="completed"||$e==="partial"||$e==="failed"||$e==="cancelled",Ra=$?.snapshots??[],To=Ra.filter(Ea=>Ea.citationState==="cited").length,Sc=Ra.filter(Ea=>Ea.answerMentioned===!0).length,bn=new Set(Ra.map(Ea=>Ea.query).filter(Ea=>!!Ea)).size,Qa=$e?jw($e,Ra.length):!1,Is=Ve&&!Ua,Ps=yn??($?.error?P$($.error):$e==="cancelled"?"The sweep was cancelled before it produced a baseline.":($e==="completed"||$e==="partial")&&Ra.length===0?"The sweep finished without producing any snapshots.":nt?.statusDetail||"The sweep did not produce a baseline.");let qs=null;return Is||Qa?qs=c.jsx(Rn,{tone:"positive",children:"Complete"}):yn&&!Ua?qs=c.jsx(Rn,{tone:"negative",children:"Failed"}):li?qs=c.jsx(Rn,{tone:"negative",children:$e==="cancelled"?"Cancelled":"Failed"}):Ua&&(qs=c.jsx(Rn,{tone:"caution",children:"Running"})),c.jsxs(ka,{className:"surface-card step-card",children:[c.jsxs("div",{className:"section-head",children:[c.jsxs("div",{children:[c.jsx("p",{className:"eyebrow eyebrow-soft",children:_?"Step 2 of 2":"Step 5 of 5"}),c.jsx("h2",{children:eo()?"AI Visibility":"Launch first run"})]}),qs]}),Is?c.jsxs("div",{className:"compact-stack",children:[c.jsxs("p",{className:"text-secondary",children:["Setup is complete. ",c.jsx("span",{className:"text-strong font-medium",children:Le})," already has a successful answer-visibility baseline."]}),c.jsxs("div",{className:"setup-nav",children:[c.jsx("span",{}),c.jsx(me,{type:"button",onClick:()=>ot(),children:g?"Finish setup":"Open project dashboard →"})]})]}):!Ua&&eo()?c.jsxs("div",{className:"compact-stack",children:[Le?c.jsx(WH,{projectName:Le}):c.jsx("p",{className:"text-sm text-secondary",children:Nf}),yn&&c.jsx("p",{role:"alert",className:"text-sm text-negative",children:yn}),c.jsxs("div",{className:"setup-nav",children:[c.jsx("span",{}),c.jsx(me,{type:"button",onClick:Oe,children:"Open project dashboard →"})]})]}):Ua?li?Qa?c.jsxs("div",{className:"compact-stack",children:[c.jsxs("p",{className:"text-neutral",children:["Sweep complete. Your first answer-visibility snapshot for"," ",c.jsx("span",{className:"text-heading font-medium",children:Le}),":"]}),c.jsxs("div",{className:"grid grid-cols-3 gap-2 mt-1",children:[c.jsxs("div",{className:"rounded-md border border-default bg-surface p-3",children:[c.jsx("p",{className:"text-xs font-medium text-secondary",children:"Mentioned"}),c.jsxs("p",{className:"text-2xl font-bold tabular-nums text-primary mt-1",children:[Sc,c.jsxs("span",{className:"text-faint text-lg",children:[" / ",bn]})]}),c.jsx("p",{className:"mt-0.5 text-sm text-secondary",children:"queries naming your brand"})]}),c.jsxs("div",{className:"rounded-md border border-default bg-surface p-3",children:[c.jsx("p",{className:"text-xs font-medium text-secondary",children:"Cited"}),c.jsxs("p",{className:"text-2xl font-bold tabular-nums text-primary mt-1",children:[To,c.jsxs("span",{className:"text-faint text-lg",children:[" / ",bn]})]}),c.jsx("p",{className:"mt-0.5 text-sm text-secondary",children:"queries citing your site"})]}),c.jsxs("div",{className:"rounded-md border border-default bg-surface p-3",children:[c.jsx("p",{className:"text-xs font-medium text-secondary",children:"Results"}),c.jsx("p",{className:"text-2xl font-bold tabular-nums text-primary mt-1",children:Ra.length}),c.jsx("p",{className:"mt-0.5 text-sm text-secondary",children:"completed engine checks"})]})]}),!b&&Le?c.jsx(hF,{projectName:Le}):null,c.jsxs("div",{className:"setup-nav",children:[c.jsx("span",{}),c.jsx(me,{type:"button",onClick:()=>ot(),children:g?"Finish setup":"Open project dashboard →"})]})]}):c.jsxs("div",{className:"compact-stack",children:[c.jsxs("div",{role:"alert",className:"rounded-md border border-negative bg-negative-soft p-3 text-sm text-negative",children:[c.jsx("p",{children:Ps}),c.jsx("p",{className:"mt-1 text-xs text-secondary",children:eo()?Nf:w?"Fix provider or query configuration if needed, then retry without leaving setup.":"Ask an administrator to review the provider and query configuration."})]}),c.jsxs("div",{className:"setup-nav",children:[w&&!eo()?c.jsx(me,{type:"button",variant:"outline",asChild:!0,children:c.jsx(Fe,{to:"/settings",children:"Configure providers"})}):c.jsx("span",{}),eo()||!w?c.jsx(me,{type:"button",onClick:Oe,children:"Open project dashboard →"}):c.jsx(me,{type:"button",disabled:si||!!Ka,onClick:rn(ri),children:si?"Retrying...":"Retry visibility sweep"})]})]}):c.jsxs("div",{className:"compact-stack",children:[c.jsx("p",{className:"text-neutral",children:"Sweep running. This usually takes 30 to 60 seconds."}),c.jsx("div",{className:"rounded-md border border-default bg-surface p-3 text-xs text-muted",children:c.jsxs("p",{children:["Status: ",c.jsx("span",{className:"text-neutral",children:$e??"queued"})]})}),Ga.isError&&c.jsxs("div",{role:"alert",className:"rounded-md border border-negative bg-negative-soft p-3 text-sm text-negative",children:[c.jsx("p",{children:Ga.error instanceof Error?Ga.error.message:"Could not refresh the sweep status."}),c.jsx(me,{type:"button",variant:"outline",size:"sm",className:"mt-2",onClick:()=>{Ga.refetch()},children:"Retry status check"})]}),c.jsxs("div",{className:"setup-nav",children:[c.jsx("span",{}),c.jsx(me,{type:"button",variant:"outline",onClick:g?()=>ot():Oe,children:g?"Finish setup":"Watch on project page"})]})]}):c.jsxs("div",{className:"compact-stack",children:[c.jsxs("p",{className:"supporting-copy",children:["Your queries are saved. Run a first sweep to get a baseline for"," ",c.jsx("span",{className:"text-heading font-medium",children:Le}),", or finish and run it later from the project. A sweep calls the answer engines, so it costs provider usage."]}),(Ka||yn)&&c.jsxs("div",{role:"alert",className:"rounded-md border border-negative bg-negative-soft p-3 text-sm text-negative",children:[c.jsx("p",{children:yn??Ka}),c.jsx("p",{className:"mt-1 text-xs text-secondary",children:"Resolve the blocker above, then retry the sweep here."})]}),c.jsxs("div",{className:"setup-nav",children:[c.jsx(me,{type:"button",variant:"outline",onClick:zn,children:"Back"}),c.jsx(me,{type:"button",variant:"ghost",onClick:Lt,children:"Finish without running"}),ma==="no_provider"&&!_?c.jsx(me,{type:"button",asChild:!0,children:c.jsx(Fe,{to:"/settings",children:"Configure a provider"})}):c.jsx(me,{type:"button",disabled:si||!!Ka,title:Ka,onClick:rn(ri),children:si?"Launching...":yn?"Retry visibility sweep":"Launch visibility sweep"})]})]})]})}default:return null}})();return c.jsxs("div",{className:_?"page-container visibility-setup":"page-container",children:[g?c.jsx(uo,{current:"visibility"}):null,c.jsxs("div",{className:"page-header",children:[c.jsxs("div",{className:"page-header-left",children:[c.jsx("h1",{ref:u?h:void 0,tabIndex:u?-1:void 0,className:"page-title",children:u?"Set up AI Visibility":"Setup"}),c.jsx("p",{className:"page-subtitle",children:u?"Connect an answer engine, then choose queries for your first sweep.":"Create a project and run its first visibility check."})]}),g?c.jsx("div",{className:"page-header-right",children:c.jsx(me,{type:"button",variant:"outline",className:"min-h-11",onClick:Lt,children:"Skip AI Visibility"})}):null]}),g?null:c.jsx(xF,{current:_?I===4?1:0:I,labels:_?bF:yF}),c.jsxs("section",{className:"setup-wizard",children:[Os,Ha]})]})}const Kh="canonry mcp install --client claude-code",SF="https://github.com/Canonry/canonry/blob/main/docs/mcp.md";function jF(){const e=C.useRef(yg()).current,n=C.useRef(new Set),i=C.useCallback((r,u)=>{n.current.has(r)||(n.current.add(r),ig({...u,flowVersion:mt,onboardingSessionId:e,surface:"platform",eventId:bg()}))},[e]);return C.useEffect(()=>{i("started",{event:"onboarding.started",step:"finish",resumed:!1})},[i]),C.useCallback(r=>{i(`action:${r}`,{event:"onboarding.step_completed",step:"finish",method:"manual",nextAction:r})},[i])}const rm=C.createContext(()=>{});function AF({projectName:e,skippedVisibility:n=!1}){const i=_t({...gG({client:ne,path:{name:e}}),retry:!1}),r=i.data?.hasData?i.data:null,u=jF(),h=Nw(e,Ee["site-audit"]),g=Nw(e,Ee["answer-visibility"]),b={...h?{site:h,fixes:h}:{},...CF(g,n)};return c.jsx(rm.Provider,{value:u,children:c.jsxs("div",{className:"page-container max-w-6xl py-8 md:py-10",children:[c.jsx(uo,{current:"done",outcomes:b}),c.jsxs("header",{className:"relative mx-auto mt-12 max-w-2xl text-center md:mt-16",children:[c.jsx(NF,{}),c.jsx("p",{className:"onb-reveal mt-6 text-sm font-medium text-positive",style:Sa(250),children:"Setup complete"}),c.jsx("h1",{className:"onb-reveal mt-2 text-5xl font-semibold tracking-tight text-heading md:text-6xl",style:Sa(350),children:"You’re set."}),c.jsxs("p",{className:"onb-reveal mx-auto mt-4 max-w-xl text-lg text-secondary",style:Sa(450),children:["Canonry is tracking ",c.jsx("span",{className:"font-medium text-heading",children:e}),". Here’s how to get the most out of it from here."]})]}),c.jsxs("div",{className:"mt-14 grid gap-4 md:grid-cols-6",children:[c.jsx(Gu,{className:"md:col-span-4 md:row-span-2",delayMs:600,labelledBy:"onb-agent-heading",children:c.jsx(RF,{projectName:e})}),c.jsx(Gu,{className:"md:col-span-2 md:row-span-2",delayMs:700,labelledBy:"onb-data-heading",children:c.jsx(DF,{projectName:e})}),c.jsx(Gu,{className:"md:col-span-3",delayMs:800,labelledBy:"onb-schedule-heading",children:c.jsx(PF,{projectName:e})}),c.jsx(Gu,{className:"md:col-span-3",delayMs:900,labelledBy:"onb-alerts-heading",children:c.jsx(qF,{projectName:e,score:r?.aggregateScore??null})})]}),c.jsxs("div",{className:"onb-reveal mt-12 flex flex-col items-center gap-3 sm:flex-row sm:justify-center",style:Sa(1e3),children:[c.jsx(me,{asChild:!0,className:"h-11 rounded-full px-6 text-base md:h-11",children:c.jsxs(Fe,{to:"/projects/$projectName",params:{projectName:e},replace:!0,onClick:()=>u("open_project"),children:["Open ",e,c.jsx(Xl,{className:"size-4","aria-hidden":"true"})]})}),c.jsx(me,{asChild:!0,variant:"ghost",className:"h-11 rounded-full px-5 md:h-11",children:c.jsx(Fe,{to:"/projects/$projectName/technical-aeo",params:{projectName:e},replace:!0,onClick:()=>u("review_page_health"),children:"Review page health"})})]})]})})}function Nw(e,n){const i=_t({...fj({client:ne,path:{name:e},query:{kind:n,limit:20}}),retry:!1,refetchInterval:r=>_w(r.state.status==="success"?{isSuccess:!0,data:r.state.data}:{isSuccess:!1})==="pending"?5e3:!1});return _w(i)}function CF(e,n){return e===void 0?{}:n?{visibility:"skipped"}:{visibility:e}}function _w(e){if(!e.isSuccess||!e.data)return"unknown";const n=e.data.filter(i=>i.trigger!==ms.probe);if(!n.some(i=>i.status===Yt.completed||i.status===Yt.partial))return n.some(i=>i.status===Yt.queued||i.status===Yt.running)?"pending":n.length>0?"incomplete":"skipped"}function Sa(e){return{"--onb-delay":`${e}ms`}}function NF(){return c.jsx("div",{className:"onb-check relative mx-auto size-20","aria-hidden":"true",children:c.jsxs("svg",{viewBox:"0 0 80 80",className:"relative size-20",children:[c.jsx("circle",{className:"onb-check-ring",cx:"40",cy:"40",r:"36",fill:"none",strokeWidth:"3",pathLength:"1"}),c.jsx("path",{className:"onb-check-mark",d:"M25 41 L35 51 L56 30",fill:"none",strokeWidth:"4",strokeLinecap:"round",strokeLinejoin:"round",pathLength:"1"})]})})}function Gu({className:e="",delayMs:n,labelledBy:i,children:r}){return c.jsx("section",{"aria-labelledby":i,className:`onb-reveal onb-tile flex flex-col overflow-hidden rounded-2xl border border-default bg-surface p-6 md:p-7 ${e}`,style:Sa(n),children:r})}function lm({id:e,eyebrow:n,title:i,children:r}){return c.jsxs("div",{children:[c.jsx("p",{className:"text-xs font-medium uppercase tracking-wide text-muted",children:n}),c.jsx("h2",{id:e,className:"mt-1.5 text-2xl font-semibold tracking-tight text-heading",children:i}),c.jsx("p",{className:"mt-2 text-sm text-secondary",children:r})]})}const Ku=[{id:"diagnose",label:"Diagnose",prompt:"Why did we lose citations this week?",calls:["canonry_insights_list","canonry_competitor_landscape"],reply:"Two engines started citing a competitor’s comparison page instead of yours. Want me to draft one that answers the same query?"},{id:"fix",label:"Fix",prompt:"Fix the weakest pages on the site.",calls:["canonry_technical_aeo_pages","canonry_site_health_page_audit"],reply:"The lowest-scoring pages are missing structured data and answer-first intros. I’ve written the changes for you to review."},{id:"automate",label:"Automate",prompt:"Re-check everything every Monday and tell me in Slack.",calls:["canonry_schedule_set","canonry_agent_webhook_attach"],reply:"Done. A sweep runs every Monday, and I’ll post what changed to Slack."}],_F=9e3;function TF(){return typeof window<"u"&&typeof window.matchMedia=="function"&&window.matchMedia("(prefers-reduced-motion: reduce)").matches}function RF({projectName:e}){const n=C.useContext(rm),[i,r]=C.useState(0),[u,h]=C.useState(!1),[g,b]=C.useState(!1);C.useEffect(()=>{if(u||TF())return;const k=window.setTimeout(()=>r(j=>(j+1)%Ku.length),_F);return()=>window.clearTimeout(k)},[i,u]);const v=async()=>{try{await navigator.clipboard.writeText(Kh),n("copy_agent_command"),b(!0),window.setTimeout(()=>b(!1),1800)}catch{hn({tone:"negative",title:"Could not copy the command",detail:`Run ${Kh} in your terminal.`})}},w=Ku[i]??Ku[0];return c.jsxs(c.Fragment,{children:[c.jsxs(lm,{id:"onb-agent-heading",eyebrow:"Your agent",title:"Let your agent run it.",children:["Your agent can do everything in Canonry: diagnose a drop, fix pages, run sweeps and scans, and write the client report. Use Claude Code, Codex, Cursor, or Aero, the analyst built into"," ",c.jsx("span",{className:"text-heading",children:e})," that reviews every sweep on its own."]}),c.jsxs("div",{className:"mt-6 flex flex-1 flex-col rounded-xl border border-default bg-bg",onMouseEnter:()=>h(!0),onMouseLeave:()=>h(!1),onFocus:()=>h(!0),children:[c.jsxs("div",{className:"flex items-center gap-1 border-b border-default px-3 py-2",role:"tablist","aria-label":"Example agent sessions",children:[Ku.map((k,j)=>c.jsx("button",{type:"button",role:"tab","aria-selected":j===i,onClick:()=>{r(j),h(!0)},className:`rounded-md px-2.5 py-1 text-xs font-medium transition-colors ${j===i?"bg-surface-inset text-heading":"text-muted hover:text-secondary"}`,children:k.label},k.id)),c.jsx("span",{className:"ml-auto text-xs text-faint",children:"Example"})]}),c.jsxs("div",{role:"tabpanel","aria-label":`${w.label} example`,className:"flex-1 p-4 font-mono text-[13px] leading-relaxed",children:[c.jsxs("p",{className:"onb-type text-heading",style:Sa(150),children:[c.jsx("span",{className:"text-muted",children:"> "}),w.prompt]}),w.calls.map((k,j)=>c.jsxs("p",{className:"onb-line mt-1 text-muted first:mt-3",style:Sa(1300+j*450),children:[c.jsx("span",{className:"text-positive",children:"●"})," ",k]},k)),c.jsx("p",{className:"onb-line mt-3 text-secondary",style:Sa(1500+w.calls.length*450),children:w.reply}),c.jsx("span",{className:"onb-caret mt-2 inline-block h-4 w-2 bg-current align-middle text-secondary",style:Sa(1900+w.calls.length*450),"aria-hidden":"true"})]},w.id)]}),c.jsxs("div",{className:"mt-4 flex flex-wrap items-center gap-2",children:[c.jsx("code",{className:"min-w-0 flex-1 truncate rounded-lg border border-default bg-surface-inset px-3 py-2 font-mono text-[13px] text-heading",children:Kh}),c.jsxs(me,{type:"button",variant:"secondary",size:"sm",className:"h-9 md:h-9",onClick:()=>{v()},children:[g?c.jsx(xd,{className:"size-4","aria-hidden":"true"}):c.jsx(qf,{className:"size-4","aria-hidden":"true"}),g?"Copied":"Copy"]}),c.jsx("a",{href:SF,target:"_blank",rel:"noreferrer",className:"text-sm font-medium text-link underline-offset-4 hover:underline",children:"Other clients"})]})]})}const EF=[{icon:Pf,label:"Search Console",action:"connect_search_console",to:"/projects/$projectName/search-console"},{icon:Uw,label:"Google Analytics",action:"connect_analytics",to:"/projects/$projectName/activity"},{icon:Kw,label:"Business Profile",action:"connect_business_profile",to:"/projects/$projectName/local"}],zF=["GPTBot","ClaudeBot","PerplexityBot"];function DF({projectName:e}){const n=C.useContext(rm);return c.jsxs(c.Fragment,{children:[c.jsx(lm,{id:"onb-data-heading",eyebrow:"Server-side traffic",title:"See the AI bots.",children:"AI crawlers and answer-engine fetches never run JavaScript, so Google Analytics never sees them. Canonry reads them straight from your server."}),c.jsx(OF,{}),c.jsxs(Fe,{to:"/traffic",onClick:()=>n("connect_server_traffic"),"aria-label":"Connect server-side traffic",className:"group flex items-center gap-3 rounded-xl border border-strong bg-surface-inset px-4 py-3 text-sm font-medium text-heading transition-colors hover:bg-surface-inset-hover",children:[c.jsx(Hw,{className:"size-4 text-positive","aria-hidden":"true"}),c.jsxs("span",{className:"flex-1",children:["Connect your server",c.jsx("span",{className:"block text-xs font-normal text-secondary",children:"Cloudflare, Vercel, WordPress, or Cloud Run"})]}),c.jsx(Xl,{className:"size-4 text-link transition-transform group-hover:translate-x-0.5","aria-hidden":"true"})]}),c.jsx("p",{className:"mt-5 text-xs font-medium uppercase tracking-wide text-muted",children:"Also connect"}),c.jsx("ul",{className:"mt-1 divide-y divide-default",children:EF.map(({icon:i,label:r,action:u,to:h})=>c.jsx("li",{children:c.jsxs(Fe,{to:h,params:{projectName:e},"aria-label":`Connect ${r}`,onClick:()=>n(u),className:"group flex items-center gap-3 py-2.5 text-sm text-heading",children:[c.jsx(i,{className:"size-4 text-muted","aria-hidden":"true"}),c.jsx("span",{className:"flex-1",children:r}),c.jsx(Xl,{className:"size-3.5 text-link transition-transform group-hover:translate-x-0.5","aria-hidden":"true"})]})},r))})]})}function OF(){const e=[22,70,118];return c.jsxs("div",{className:"relative my-6 h-36","aria-hidden":"true",children:[c.jsx("svg",{viewBox:"0 0 200 140",preserveAspectRatio:"none",className:"absolute inset-0 size-full",children:e.map((n,i)=>c.jsx("path",{className:"onb-flow",style:Sa(i*400),d:`M20 ${n} C 100 ${n}, 118 70, 170 70`,fill:"none",strokeWidth:"1.5"},n))}),zF.map((n,i)=>c.jsx("span",{className:"onb-bot absolute left-0 -translate-y-1/2 rounded-md border border-default bg-bg-elevated px-2 py-1 font-mono text-[11px] text-secondary",style:{top:`${(e[i]??70)/140*100}%`,...Sa(i*600)},children:n},n)),c.jsx("span",{className:"onb-hub absolute right-0 top-1/2 flex size-11 -translate-y-1/2 items-center justify-center rounded-2xl bg-accent text-on-inverse",children:c.jsx(Hw,{className:"size-5"})})]})}const IF=["M","T","W","T","F","S","S"];function PF({projectName:e}){return c.jsxs(c.Fragment,{children:[c.jsx(lm,{id:"onb-schedule-heading",eyebrow:"Scheduled sweeps",title:"Runs on its own.",children:"Re-measure every week without lifting a finger, so a drop shows up before a customer notices."}),c.jsx("ol",{className:"mt-6 grid grid-cols-7 gap-2","aria-hidden":"true",children:IF.map((n,i)=>c.jsxs("li",{className:"flex flex-col items-center gap-2",children:[c.jsx("span",{className:"onb-day size-3 rounded-full bg-surface-inset",style:Sa(i*500)}),c.jsx("span",{className:"text-xs text-muted",children:n})]},i))}),c.jsx(nA,{projectName:e,to:"/projects/$projectName/settings",icon:Gw,label:"Set a schedule",action:"set_schedule"})]})}function qF({projectName:e,score:n}){return c.jsxs(c.Fragment,{children:[c.jsx(lm,{id:"onb-alerts-heading",eyebrow:"Notifications",title:"Hear about changes.",children:"Get a webhook in Slack or anywhere else when a sweep finishes or a score moves."}),c.jsxs("div",{className:"relative mt-6 flex h-14 items-center","aria-hidden":"true",children:[c.jsx("span",{className:"onb-bell flex size-10 items-center justify-center rounded-full border border-default bg-bg-elevated",children:c.jsx(Fh,{className:"size-4 text-secondary"})}),c.jsxs("span",{className:"onb-toast ml-3 flex items-center gap-2 rounded-xl border border-default bg-bg-elevated px-3 py-2 text-sm shadow-[0_8px_24px_var(--color-shadow-panel)]",children:[c.jsx("span",{className:"size-2 rounded-full bg-positive-400"}),c.jsx("span",{className:"text-heading",children:e}),c.jsx("span",{className:"text-secondary",children:n===null?"sweep finished":`page health ${n}`})]})]}),c.jsx(nA,{projectName:e,to:"/projects/$projectName/settings",icon:Fh,label:"Add a notification",action:"add_notification"})]})}function nA({projectName:e,to:n,icon:i,label:r,action:u}){const h=C.useContext(rm);return c.jsxs(Fe,{to:n,params:{projectName:e},onClick:()=>h(u),className:"group mt-6 inline-flex items-center gap-2 self-start text-sm font-medium text-link",children:[c.jsx(i,{className:"size-4","aria-hidden":"true"}),r,c.jsx(Xl,{className:"size-3.5 transition-transform group-hover:translate-x-0.5","aria-hidden":"true"})]})}const MF=C.lazy(async()=>({default:(await Ri(()=>import("./SiteHealthSection-FF14aIXT.js").then(n=>n.d),__vite__mapDeps([0,1,2,3,4]),import.meta.url)).SiteHealthSection})),BF=`Public pages only, crawled from this computer and stored locally. The first scan reads up to ${BS} pages, then stops.`,LF=1800,VF="https://github.com/Canonry/canonry#or-use-any-shell-capable-coding-agent",$F="Help me set up Canonry for my public site.\n\nUse the official Canonry docs:\n- Agent quickstart: https://github.com/Canonry/canonry#or-use-any-shell-capable-coding-agent\n- CLI reference: https://github.com/Canonry/canonry/blob/main/skills/canonry/references/canonry-cli.md\n- Plugin setup: https://github.com/Canonry/canonry/blob/main/docs/plugins.md\n- MCP setup: https://github.com/Canonry/canonry/blob/main/docs/mcp.md\n\nPick one path and stay on it. Use connected Canonry tools (plugin or MCP) only if you have them and I have not pointed you at a specific install. A connected tool runs in its own process and never sees `CANONRY_CONFIG_DIR`, `CANONRY_PORT`, or anything else you export in a shell, so it always acts on my default install. If I named a config directory, a port, or a sandbox, that is the shell path: use `cnry` and tell me which path you chose. Never mix the two in one run, and never create a duplicate project. The `cnry` and `canonry` commands are interchangeable.\n\n1. Ask for my public domain, country, and language. Do not create or scan anything yet. Country and language are only applied when a project is created, so if you reuse an existing project, report its country and language instead of changing them.\n2. Shell path only: confirm `cnry` is on PATH, then run `cnry --version`. If Canonry is missing, propose `npm install -g @canonry/canonry` and wait for approval. Then run `cnry doctor --format json`, which is the command that says whether config, database, and server are in place. `cnry --version` does not read config and succeeds on a completely unconfigured install, so it cannot answer this. If config is missing, run `cnry bootstrap` yourself: it is not interactive, takes about a second, and is safe to rerun. Do not hand it to me and wait. The interactive command is `cnry init`, which is optional provider and OAuth setup that Page Health does not need. Bootstrap prints an API key, so do not repeat its output back to me, and never ask me to paste passwords, API keys, OAuth credentials, or command output.\n3. Confirm the API is reachable. `cnry doctor --format json` reports it, and any project read exits non-zero with `CONNECTION_ERROR` when it is not. If it is unreachable, propose `cnry start` and wait for approval. Use `cnry start`, which is the background daemon, and not `cnry serve`, which runs in the foreground and will block you until I stop it, even though some error messages suggest it. Stop anything you started with `cnry stop`.\n4. List projects with the connected project tool or `cnry project list --format json`, and reuse one whose domain matches. Confirm the proposed name is not already assigned to a different domain. To find out whether a project has already been scanned, run `cnry technical-aeo score <project> --format json` with no `--run-id`, which reports the latest run. Read the `hasData` field, not the score: this command exits 0 and reports `aggregateScore: 0` for a project that has never been scanned, so reading the score alone would have you tell me my site scored zero. If `hasData` is true and `runStatus` is `completed` or `partial`, read that scan instead of starting a new one. If no project matches, show the exact create operation and wait for approval.\n5. Propose a bounded Site Health scan: `--max-pages 100` for a first look, plus whether dead-link checking is on (it is off unless you pass `--check-dead-links`). Show the connected operation or the exact `cnry technical-aeo run <project> --max-pages 100 --wait --format json` command with the project name filled in, and wait for separate approval before scanning. `--wait` polls for up to 15 minutes and returns only the run id and status. If the status it returns is still `queued` or `running`, the scan has not finished: do not rerun it or report results, poll `cnry technical-aeo progress <project> --run-id <run-id> --format json` until it is terminal. If `--wait` outruns your own tool timeout first, recover the run id with `cnry technical-aeo score <project> --format json` and poll the same way.\n6. When the run is `completed` or `partial`, read `cnry technical-aeo crawl <project> --run-id <run-id> --format json` first. It is the only one of these commands that carries `termination` and `complete`; the score and pages commands do not. Then read `cnry technical-aeo score <project> --run-id <run-id> --format json` and `cnry technical-aeo pages <project> --run-id <run-id> --sort score-asc --limit 10 --format jsonl`. Tell me the termination reason in plain words and whether the scan covered the whole site or stopped at a page, link, depth, or time limit. A `partial` run scored the pages it reached and not my site, so never present it as a full-site result. If it stopped early, the fix depends on the reason, so say which: a page or depth limit needs a larger budget, a time limit needs a smaller scan (a lower `--max-pages` or `--max-depth`). If the run failed or was cancelled, inspect the run error and stop.\n7. Summarize only completed evidence, then propose AI Visibility setup. Ask before you add queries, connect providers, start a provider-backed or quota-consuming run, edit files, or publish.";function UF(e,n){return e==="legacy"?"legacy":e==="platform"?"platform":n.state==="success"?n.projectCount===0?"platform":"legacy":n.state==="error"?"retry":"loading"}const GF="2000-01-01T00:00:00.000Z",KF=5e3;function HF(e,n){const i=new Set,r=new Map;for(const g of n)g.trigger!==ms.probe&&(r.has(g.projectId)||r.set(g.projectId,g.id),(g.status===Yt.completed||g.status===Yt.partial)&&i.add(g.projectId));const h=(e.every(g=>g.createdAt)?[...e].sort((g,b)=>(g.createdAt??"").localeCompare(b.createdAt??"")||g.name.localeCompare(b.name)):e).find(g=>!i.has(g.id));return h?{projectName:h.name,runId:r.get(h.id)}:null}const aA=[{value:"US",label:"United States"},{value:"CA",label:"Canada"},{value:"GB",label:"United Kingdom"},{value:"AU",label:"Australia"},{value:"NZ",label:"New Zealand"},{value:"IE",label:"Ireland"},{value:"DE",label:"Germany"},{value:"FR",label:"France"},{value:"ES",label:"Spain"},{value:"IT",label:"Italy"},{value:"NL",label:"Netherlands"},{value:"BR",label:"Brazil"},{value:"MX",label:"Mexico"},{value:"IN",label:"India"},{value:"SG",label:"Singapore"},{value:"JP",label:"Japan"}],iA=[{value:"en",label:"English"},{value:"es",label:"Spanish"},{value:"fr",label:"French"},{value:"de",label:"German"},{value:"it",label:"Italian"},{value:"pt",label:"Portuguese"},{value:"nl",label:"Dutch"},{value:"ja",label:"Japanese"}];function QF(e,n){try{const i=new Intl.DisplayNames(["en"],{type:"region"}),r=new Intl.DisplayNames(["en"],{type:"language"}),u=e.length===2?i.of(e.toUpperCase()):void 0,h=n?r.of(n.toLowerCase()):void 0;return`${u??(e||"Country")} · ${h??(n||"Language")}`}catch{return`${e||"Country"} · ${n||"Language"}`}}function FF(e,n){const i=e.trim().toUpperCase(),r=n.trim().toLowerCase();return{countryValid:aA.some(u=>u.value===i),languageValid:iA.some(u=>u.value===r)}}function ZF(e){const n=e.replace(/^\[|\]$/g,"");return/^(?:\d{1,3}\.){3}\d{1,3}$/.test(n)||n.includes(":")}function YF(e){const n=e.trim();if(!n)return null;const i=/^[a-z][a-z\d+.-]*:\/\//i.test(n)?n:`https://${n}`;let r;try{r=new URL(i)}catch{return null}if(r.protocol!=="http:"&&r.protocol!=="https:")return null;const u=r.hostname.toLowerCase().replace(/^www\./,"");if(!u||u==="localhost"||ZF(u)||!u.includes("."))return null;const h=u.replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"");return h?{canonicalDomain:u,projectName:h,displayName:u}:null}async function XF(e,n=LF){let i;const r=new Promise(h=>{i=setTimeout(()=>h({state:"timed-out"}),n)}),u=await Promise.race([e.then(h=>({state:"queued",run:h})),r]);return i&&clearTimeout(i),u}function WF(e,n){e.catch(()=>{hn({title:"Site Health scan did not start",detail:"The project is safe. Choose Run scan in Site Health to retry.",tone:"negative",dedupeKey:`site-health-dispatch:${n}`})})}function sA(e){const n=C.useRef(yg()).current,i=C.useRef(new Set),r=C.useCallback((u,h)=>{if(h){if(i.current.has(h))return;i.current.add(h)}ig({...u,surface:e,eventId:bg()})},[e]);return{onboardingSessionId:n,emit:r}}function Tw(e,n){return e instanceof pn&&e.statusCode===409?"A project with this name already exists. Change the project name, or open the existing project.":e instanceof Error&&e.message?e.message:n}function zf(){return c.jsxs("div",{className:"page-container max-w-3xl","aria-busy":"true","aria-live":"polite",children:[c.jsx("div",{className:"page-header",children:c.jsxs("div",{className:"page-header-left",children:[c.jsx("h1",{className:"page-title",children:"Preparing setup"}),c.jsx("p",{className:"page-subtitle",children:"Checking the projects already on this install."})]})}),c.jsxs("div",{className:"flex items-center gap-3 rounded-lg border border-default bg-surface p-4 text-sm text-secondary",role:"status",children:[c.jsx(gr,{className:"size-4 motion-safe:animate-spin","aria-hidden":"true"}),"Loading projects…"]})]})}function JF({onRetry:e}){return c.jsxs("div",{className:"page-container max-w-3xl",children:[c.jsx("div",{className:"page-header",children:c.jsxs("div",{className:"page-header-left",children:[c.jsx("h1",{className:"page-title",children:"Can’t load projects"}),c.jsx("p",{className:"page-subtitle",children:"Canonry could not confirm whether this install already has a project."})]})}),c.jsxs("div",{className:"rounded-lg border border-negative bg-negative-soft p-4",role:"alert",tabIndex:-1,children:[c.jsx("p",{className:"text-sm font-medium text-heading",children:"Setup is paused to protect existing projects."}),c.jsx("p",{className:"mt-1 text-sm text-secondary",children:"Check the connection or sign in again, then retry."}),c.jsx(me,{type:"button",className:"mt-4",variant:"secondary",onClick:e,children:"Retry project check"})]})]})}function eZ({projectName:e,initialRunId:n}){return c.jsx(wg,{title:"Site Health setup",children:c.jsx(tZ,{projectName:e,initialRunId:n})})}function tZ({projectName:e,initialRunId:n}){const i=gs(),r=_t({...yo({client:ne}),enabled:!!e,retry:!1,refetchOnMount:"always"}),{onboardingSessionId:u,emit:h}=sA("site_health"),[g]=C.useState(()=>aF(n));C.useEffect(()=>{g&&iF()},[g]),C.useEffect(()=>{e&&h({flowVersion:mt,onboardingSessionId:u,event:"onboarding.started",step:"run",resumed:!!n&&!g},"onboarding.started")},[h,g,n,u,e]),C.useEffect(()=>{!e||!n||Jj(e)?.runId!==n&&Wj(e,n)},[n,e]);const v=_t({...lg({client:ne,path:{id:n??""}}),enabled:!!n,refetchInterval:({state:_})=>{const G=_.data?.status;return G==="completed"||G==="partial"||G==="failed"||G==="cancelled"?!1:2e3},refetchIntervalInBackground:!0}).data?.status;if(C.useEffect(()=>{if(!e||!n||!v)return;if(v==="completed"||v==="partial"){h({flowVersion:mt,onboardingSessionId:u,event:"onboarding.step_completed",step:"run",method:"automatic"},"onboarding.step_completed:run"),yd(n);return}if(v!=="failed"&&v!=="cancelled")return;const _=v==="cancelled"?"run_cancelled":"run_failed";h({flowVersion:mt,onboardingSessionId:u,event:"onboarding.blocked",step:"run",action:"retry_run",reasonCode:_},`onboarding.blocked:run:${_}`),yd(n)},[h,n,u,e,v]),!e)return c.jsxs("div",{className:"page-container max-w-3xl",children:[c.jsx("div",{className:"page-header",children:c.jsxs("div",{className:"page-header-left",children:[c.jsx("h1",{className:"page-title",children:"Project not found"}),c.jsx("p",{className:"page-subtitle",children:"This setup link does not identify a project."})]})}),c.jsx(me,{type:"button",variant:"secondary",onClick:()=>{i({to:"/projects"})},children:"View projects"})]});if(r.isPending)return c.jsxs("div",{className:"page-container max-w-3xl","aria-busy":"true","aria-live":"polite",children:[c.jsx(uo,{current:"site"}),c.jsxs("div",{className:"mt-8 flex items-center gap-3 text-sm text-secondary",role:"status",children:[c.jsx(gr,{className:"size-4 motion-safe:animate-spin","aria-hidden":"true"}),"Loading Site Health setup…"]})]});if(r.isError)return c.jsxs("div",{className:"page-container max-w-3xl",children:[c.jsx("div",{className:"page-header",children:c.jsxs("div",{className:"page-header-left",children:[c.jsx("h1",{className:"page-title",children:"Can’t resume setup"}),c.jsx("p",{className:"page-subtitle",children:"Canonry could not load the project for this Site Health scan."})]})}),c.jsxs("div",{className:"rounded-lg border border-negative bg-negative-soft p-4",role:"alert",children:[c.jsx("p",{className:"text-sm text-secondary",children:"Check the connection or sign in again, then retry."}),c.jsx(me,{type:"button",className:"mt-4",variant:"secondary",onClick:()=>{r.refetch()},children:"Retry project check"})]})]});const w=r.data.find(_=>_.name===e);if(!w)return c.jsxs("div",{className:"page-container max-w-3xl",children:[c.jsx("div",{className:"page-header",children:c.jsxs("div",{className:"page-header-left",children:[c.jsx("h1",{className:"page-title",children:"Project not found"}),c.jsxs("p",{className:"page-subtitle",children:["Canonry could not find ",e,". It will not open a different project."]})]})}),c.jsx(me,{type:"button",variant:"secondary",onClick:()=>{i({to:"/projects"})},children:"View projects"})]});const k=()=>{i({to:"/setup",search:{onboarding:"site-health",setupProject:w.name},replace:!0})},j=()=>{i({to:"/setup",search:{experience:"legacy",onboarding:"site-health",setupProject:w.name},replace:!0})},T=()=>{h({flowVersion:mt,onboardingSessionId:u,event:"onboarding.step_completed",step:"run",method:"skipped"},"onboarding.step_completed:run"),i({to:"/setup",search:{onboarding:"complete",setupProject:w.name,skipped:"visibility"},replace:!0})};return c.jsxs("div",{className:"page-container max-w-7xl py-8 md:py-10",children:[c.jsx("h1",{className:"sr-only",children:"Set up Canonry"}),c.jsx(C.Suspense,{fallback:c.jsxs("div",{className:"space-y-5",children:[c.jsx(uo,{current:"site"}),c.jsxs("div",{className:"flex min-h-72 items-center justify-center gap-3 text-sm text-secondary",role:"status",children:[c.jsx(gr,{className:"size-4 motion-safe:animate-spin","aria-hidden":"true"}),"Loading Site Health…"]})]}),children:c.jsx(MF,{projectName:w.name,projectId:w.id,initialRunId:n,onReleaseInitialRun:k,showOnboardingActions:!0,onContinueOnboarding:j,onSkipOnboarding:T})})]})}function nZ(){const e=Ew({from:"/setup"}),n=e.onboarding==="site-health"&&!e.setupProject,i=e.onboarding==="site-health"&&e.experience!=="legacy",r=TV(),u=e.experience==="legacy"?"legacy":e.experience==="platform"?"platform":r,[h,g]=C.useState(!1),[b,v]=C.useState(void 0),w=_t({...yo({client:ne}),enabled:u==="auto",retry:!1,refetchOnMount:"always"}),k=_t({...Xd({client:ne,query:{kind:Ee["site-audit"],since:GF,limit:KF}}),enabled:u==="auto",retry:!1,refetchOnMount:"always"}),j=u==="auto"&&w.isSuccess&&w.isFetchedAfterMount&&w.data.length===0;C.useEffect(()=>{j&&g(!0)},[j]);const T=u!=="auto"?{state:"idle"}:w.isSuccess&&w.isFetchedAfterMount?{state:"success",projectCount:w.data.length}:w.isError?{state:"error"}:{state:"loading"},_=u==="legacy"?"legacy":h||j?"platform":UF(u,T);if(e.onboarding==="complete"&&e.setupProject)return c.jsx(AF,{projectName:e.setupProject,skippedVisibility:e.skipped==="visibility"});if(n||i)return c.jsx(eZ,{projectName:e.setupProject,initialRunId:e.siteHealthRunId});const G=u==="auto"&&_==="legacy"&&!e.setupProject&&w.isSuccess;if(G&&b===void 0)return k.isError?v(null):k.isSuccess&&k.isFetchedAfterMount&&v(HF(w.data,k.data)),c.jsx(zf,{});const R=G?b:null;return R?c.jsx(aZ,{projectName:R.projectName,runId:R.runId}):_==="legacy"?c.jsx(wF,{visibilityProjectName:e.setupProject,siteHealthOnboarding:e.onboarding==="site-health",onboardingFinish:e.onboarding==="site-health"||e.onboarding==="first-run"}):_==="loading"?c.jsx(zf,{}):_==="retry"?c.jsx(JF,{onRetry:()=>{w.refetch()}}):c.jsx(iZ,{onActivationStarted:()=>g(!0),skipSiteScan:e.siteScan==="skip"})}function aZ({projectName:e,runId:n}){const i=gs();return C.useEffect(()=>{i({to:"/setup",search:{onboarding:"site-health",setupProject:e,...n?{siteHealthRunId:n}:{}},replace:!0})},[i,e,n]),c.jsx(zf,{})}function iZ({onActivationStarted:e,skipSiteScan:n}){return c.jsx(wg,{title:"Site Health setup",children:c.jsx(sZ,{onActivationStarted:e,skipSiteScan:n})})}function sZ({onActivationStarted:e,skipSiteScan:n}){const i=gs(),r=ia(),u=dF(),h=_t({...xU({client:ne}),retry:!1}),g=ys(wU()),[b,v]=C.useState(""),[w,k]=C.useState(""),[j,T]=C.useState(""),[_,G]=C.useState("US"),[R,q]=C.useState("en"),[F,ae]=C.useState(!1),[L,W]=C.useState("idle"),[J,se]=C.useState(null),[V,H]=C.useState(null),[we,We]=C.useState(!1),[nt,Ve]=C.useState(null),[He,Ce]=C.useState(!1),Pe=h.isError?void 0:h.data,I=typeof Pe?.enabled=="boolean"?Pe.enabled:null,Y=g.isPending?g.variables.body.enabled:I,[fe,xe]=C.useState(null),ee=C.useRef(null),{onboardingSessionId:Ne,emit:De}=sA("platform");C.useEffect(()=>{De({flowVersion:mt,onboardingSessionId:Ne,event:"onboarding.started",step:"project",resumed:!1},"onboarding.started")},[De,Ne]);const ye=YF(b),le=w||ye?.projectName||"",ce=j||ye?.displayName||"",K=L==="creating"||L==="dispatching",ue=V??nt,Re=QF(_,R),{countryValid:ke,languageValid:et}=FF(_,R),Me=ke&&et;C.useEffect(()=>{ue&&ee.current?.focus()},[ue]);const yt=(Oe,ot)=>i({to:"/setup",search:{...ot?{siteHealthRunId:ot}:{},onboarding:"site-health",setupProject:Oe.name},replace:!0}),Le=async Oe=>{W("dispatching"),Ve(null);try{const ot=u.mutateAsync({projectName:Oe.name,projectId:Oe.id,projectLabel:Oe.displayName||Oe.name,suppressErrorToast:!0,body:{checkDeadLinks:!0,maxPages:BS}}),Lt=await XF(ot);if(Lt.state==="queued"){De({flowVersion:mt,onboardingSessionId:Ne,event:"run.requested",origin:"dashboard_setup",result:"queued",kind:"site_health",providerCountBucket:"0",queryCountBucket:"0"}),nF(Lt.run.runId),await yt(Oe,Lt.run.runId);return}ot.then(()=>{De({flowVersion:mt,onboardingSessionId:Ne,event:"run.requested",origin:"dashboard_setup",result:"queued",kind:"site_health",providerCountBucket:"0",queryCountBucket:"0"})},Vt=>{De({flowVersion:mt,onboardingSessionId:Ne,event:"run.requested",origin:"dashboard_setup",result:"rejected",kind:"site_health",providerCountBucket:"0",queryCountBucket:"0",reasonCode:Yl(Vt,"run_rejected")})}),WF(ot,Oe.id),await yt(Oe)}catch(ot){W("recovery"),Ve(Tw(ot,"The project was created, but the Site Health scan could not be started."));const Lt=Yl(ot,"run_rejected");De({flowVersion:mt,onboardingSessionId:Ne,event:"run.requested",origin:"dashboard_setup",result:"rejected",kind:"site_health",providerCountBucket:"0",queryCountBucket:"0",reasonCode:Lt}),De({flowVersion:mt,onboardingSessionId:Ne,event:"onboarding.blocked",step:"run",action:"retry_run",reasonCode:Lt},`onboarding.blocked:run:${Lt}`)}},re=async Oe=>{if(Oe.preventDefault(),!(!ye||!n&&!F||!Me||K)){W("creating"),H(null),We(!1),Ve(null);try{const ot=await YV({name:le,displayName:ce,canonicalDomain:ye.canonicalDomain,country:_,language:R});if(e(),se(ot),De({flowVersion:mt,onboardingSessionId:Ne,event:"onboarding.step_completed",step:"project",method:"manual"},"onboarding.step_completed:project"),await r.invalidateQueries({queryKey:fs({client:ne})}),n){await i({to:"/setup",search:{experience:"legacy",onboarding:"first-run",setupProject:ot.name},replace:!0});return}await Le(ot)}catch(ot){W("idle");const Lt=ot instanceof pn&&ot.statusCode===409;We(Lt),H(Tw(ot,"Could not create the project. Try again.")),De({flowVersion:mt,onboardingSessionId:Ne,event:"onboarding.blocked",step:"project",action:"save",reasonCode:Yl(ot,"project_create_failed")},"onboarding.blocked:project"),Lt&&(e(),r.invalidateQueries({queryKey:fs({client:ne})}))}}},at=()=>{J&&!K&&Le(J)},Bt=()=>{K||i({to:"/projects"})},jn=async()=>{try{await navigator.clipboard.writeText($F),Ce(!0)}catch{hn({tone:"negative",title:"Could not copy setup request",detail:"Open the agent quickstart to continue with the CLI instead."})}},la=async Oe=>{xe(null);try{const ot=await g.mutateAsync({client:ne,body:{enabled:Oe}});r.setQueryData(gj({client:ne}),ot),ot.enabled!==Oe&&xe(`The server kept telemetry ${ot.enabled?"on":"off"}. Check its telemetry settings.`)}catch{xe("Could not update telemetry. Try again.")}};return J&&L==="recovery"?c.jsxs("div",{className:"page-container max-w-3xl",children:[c.jsx(uo,{current:"site"}),c.jsx("div",{className:"page-header mt-8",children:c.jsxs("div",{className:"page-header-left",children:[c.jsx("h1",{className:"page-title",children:"Project created"}),c.jsxs("p",{className:"page-subtitle",children:[J.displayName||J.name," is ready. The Site Health scan needs another try."]})]})}),c.jsxs("div",{ref:ee,className:"rounded-lg border border-negative bg-negative-soft p-4",role:"alert",tabIndex:-1,children:[c.jsx("p",{className:"text-sm font-medium text-heading",children:nt}),c.jsx("p",{className:"mt-1 text-sm text-secondary",children:"You can retry the scan or continue setup and retry from Site Health."}),c.jsxs("div",{className:"mt-4 flex flex-wrap gap-3",children:[c.jsx(me,{type:"button",onClick:at,children:"Retry Site Health scan"}),c.jsx(me,{type:"button",variant:"secondary",onClick:()=>{yt(J)},children:"Continue setup"})]})]})]}):c.jsxs("div",{className:"page-container max-w-xl py-8 md:py-12",children:[n?null:c.jsx(uo,{current:"site"}),c.jsxs("header",{className:`mb-8 ${n?"":"mt-8"}`,children:[c.jsx("h1",{id:"site-map-setup-title",className:"text-2xl font-semibold tracking-[-0.025em] text-heading",children:n?"Create a project":"Scan your site"}),c.jsx("p",{className:"mt-2 max-w-lg text-sm leading-6 text-secondary",children:n?"Add a public domain, then choose the queries you want to track. No site scan will run.":"Enter your public website to see its pages, structure, internal links, and technical SEO scores."})]}),c.jsxs("form",{"aria-labelledby":"site-map-setup-title",className:"space-y-6",onSubmit:rn(re),noValidate:!0,children:[c.jsxs("div",{className:"grid gap-2",children:[c.jsx("label",{className:"text-sm font-medium text-heading",htmlFor:"launchpad-domain",children:"Website URL"}),c.jsx("input",{id:"launchpad-domain",className:"h-11 w-full rounded-md border border-strong bg-bg-elevated/50 px-3 text-base text-heading outline-none transition placeholder:text-muted focus:border-mono-500 focus:ring-1 focus:ring-mono-500",type:"text",inputMode:"url",autoComplete:"url",autoCapitalize:"none",spellCheck:!1,required:!0,"aria-invalid":!!(b&&!ye),"aria-describedby":b&&!ye?"launchpad-domain-hint launchpad-domain-error":"launchpad-domain-hint",placeholder:"https://example.com",value:b,onChange:Oe=>{v(Oe.target.value),H(null),We(!1)}}),c.jsx("p",{id:"launchpad-domain-hint",className:"text-sm text-secondary",children:n?c.jsxs(c.Fragment,{children:["A public domain is still required."," ",c.jsx(Fe,{to:"/setup",search:{experience:"platform"},className:"font-medium text-link underline-offset-4 hover:underline",children:"Map with Site Health instead"})]}):c.jsxs(c.Fragment,{children:["Only public pages are scanned."," ",c.jsx(Fe,{to:"/setup",search:{experience:"platform",onboarding:"first-run",siteScan:"skip"},className:"font-medium text-link underline-offset-4 hover:underline",children:"Set up without a site scan"})]})}),b&&!ye?c.jsx("p",{id:"launchpad-domain-error",className:"text-sm text-negative",role:"alert",children:"Enter a public domain, such as example.com."}):null]}),c.jsxs("details",{className:"group border-y border-default",children:[c.jsxs("summary",{className:"flex min-h-11 cursor-pointer list-none items-center justify-between gap-4 py-3 text-sm [&::-webkit-details-marker]:hidden",children:[c.jsx("span",{className:"font-medium text-heading",children:"Project name and locale"}),c.jsxs("span",{className:"flex items-center gap-2 text-secondary",children:[Re,c.jsx(vd,{className:"size-4 transition-transform group-open:rotate-180 motion-reduce:transition-none","aria-hidden":"true"})]})]}),c.jsxs("div",{className:"space-y-5 border-t border-default py-4",children:[ye?c.jsxs("div",{children:[c.jsx("p",{className:"mb-3 text-sm font-medium text-heading",children:"Project"}),c.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[c.jsxs("div",{className:"grid gap-2",children:[c.jsx("label",{className:"text-sm text-secondary",htmlFor:"launchpad-project-name",children:"Project name"}),c.jsx("input",{id:"launchpad-project-name",className:"setup-input h-10",type:"text",value:le,onChange:Oe=>k(Oe.target.value)})]}),c.jsxs("div",{className:"grid gap-2",children:[c.jsx("label",{className:"text-sm text-secondary",htmlFor:"launchpad-display-name",children:"Display name"}),c.jsx("input",{id:"launchpad-display-name",className:"setup-input h-10",type:"text",value:ce,onChange:Oe=>T(Oe.target.value)})]})]})]}):null,c.jsxs("div",{children:[c.jsx("p",{className:"mb-3 text-sm font-medium text-heading",children:"Locale"}),c.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[c.jsxs("div",{className:"grid gap-2",children:[c.jsx("label",{className:"text-sm text-secondary",htmlFor:"launchpad-country",children:"Country"}),c.jsx("select",{id:"launchpad-country",className:"setup-input h-10",value:_,onChange:Oe=>G(Oe.target.value),children:aA.map(Oe=>c.jsx("option",{value:Oe.value,children:Oe.label},Oe.value))})]}),c.jsxs("div",{className:"grid gap-2",children:[c.jsx("label",{className:"text-sm text-secondary",htmlFor:"launchpad-language",children:"Language"}),c.jsx("select",{id:"launchpad-language",className:"setup-input h-10",value:R,onChange:Oe=>q(Oe.target.value),children:iA.map(Oe=>c.jsx("option",{value:Oe.value,children:Oe.label},Oe.value))})]})]})]})]})]}),n?null:c.jsxs("label",{className:"flex min-h-11 cursor-pointer items-start gap-3 py-2",children:[c.jsx("input",{className:"mt-0.5 size-4 shrink-0 rounded border-strong bg-bg",type:"checkbox",checked:F,onChange:Oe=>ae(Oe.target.checked),"aria-label":"Allow Canonry to scan this public site."}),c.jsxs("span",{className:"flex items-center gap-1.5",children:[c.jsx("span",{className:"text-sm leading-5 text-heading",children:"Allow Canonry to scan this public site."}),c.jsx(to,{text:BF})]})]}),ue?c.jsxs("div",{ref:ee,className:"rounded-md border border-negative bg-negative-soft p-3",role:"alert",tabIndex:-1,children:[c.jsx("p",{className:"text-sm font-medium text-heading",children:ue}),we?c.jsx(me,{type:"button",variant:"secondary",size:"sm",className:"mt-3",onClick:Bt,children:"View projects"}):null]}):null,c.jsxs("div",{className:"grid gap-2",children:[c.jsx(me,{className:"h-11 w-full",type:"submit",disabled:!ye||!n&&!F||!Me||K,children:L==="creating"||L==="dispatching"?c.jsxs(c.Fragment,{children:[c.jsx(gr,{className:"size-4 motion-safe:animate-spin","aria-hidden":"true"})," ",n?"Creating project…":"Mapping site…"]}):n?"Create project":"Scan site"}),L==="dispatching"?c.jsx("span",{className:"text-center text-sm text-secondary",role:"status",children:"Opening Site Health when the scan is ready."}):null]})]}),c.jsxs("section",{className:"mt-8 border-t border-default pt-6","aria-labelledby":"agent-setup-title",children:[c.jsx("p",{id:"agent-setup-title",className:"text-sm font-medium text-heading",children:"Use your agent instead"}),c.jsx("p",{className:"mt-1 text-sm leading-5 text-secondary",children:"Copy a complete CLI setup request into any agent."}),c.jsxs("div",{className:"mt-3 flex flex-wrap items-center gap-1",children:[c.jsxs(me,{type:"button",variant:"ghost",size:"sm",className:"-ml-3",onClick:rn(jn),children:[He?c.jsx(xd,{className:"size-3.5","aria-hidden":"true"}):c.jsx(qf,{className:"size-3.5","aria-hidden":"true"}),c.jsx("span",{"aria-live":"polite",children:He?"Copied setup request":"Copy setup request"})]}),c.jsx(me,{asChild:!0,variant:"ghost",size:"sm",children:c.jsxs("a",{href:VF,target:"_blank",rel:"noopener noreferrer",children:["Agent quickstart",c.jsx(B4,{className:"size-3.5","aria-hidden":"true"}),c.jsx("span",{className:"sr-only",children:" (opens in a new tab)"})]})})]})]}),I!==null?c.jsxs("section",{className:"mt-6 border-t border-default pt-5","aria-labelledby":"telemetry-title",children:[c.jsxs("label",{className:`flex min-h-11 items-start gap-3 py-2 ${g.isPending?"cursor-wait":"cursor-pointer"}`,children:[c.jsx("input",{className:"mt-0.5 size-4 shrink-0 rounded border-strong bg-bg accent-accent focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-mono-500 disabled:cursor-wait",type:"checkbox",checked:Y??!1,disabled:g.isPending,onChange:Oe=>{la(Oe.target.checked)},"aria-describedby":"telemetry-detail"}),c.jsxs("span",{className:"grid gap-0.5",children:[c.jsx("span",{id:"telemetry-title",className:"text-sm leading-5 text-heading",children:"Share anonymous product telemetry"}),c.jsx("span",{id:"telemetry-detail",className:"max-w-[70ch] text-sm leading-5 text-secondary",children:"Helps prioritize improvements. Canonry does not send raw domains, URLs, queries, answer content, or credentials."})]})]}),g.isPending?c.jsx("p",{className:"mt-1 text-sm text-secondary",role:"status",children:"Saving preference…"}):null,fe?c.jsx("p",{className:"mt-1 text-sm text-negative",role:"alert",children:fe}):null]}):null]})}function oZ(){return c.jsx("div",{className:"page-container",children:c.jsx("section",{className:"page-section",children:c.jsxs(ka,{className:"surface-card empty-card",children:[c.jsx("h1",{children:"Route not found"}),c.jsx("p",{children:"The current path does not map to a dashboard view."}),c.jsx(me,{asChild:!0,children:c.jsx(Fe,{to:"/",children:"Return to overview"})})]})})})}const ra=bs(()=>Ri(()=>import("./ProjectPage-CPg0q2Dy.js"),__vite__mapDeps([5,1,2,6,0,3,4,7,8,9,10,11,12]),import.meta.url),"ProjectPage"),rZ=bs(()=>Ri(()=>import("./RunsPage-CIcVBTdP.js"),__vite__mapDeps([13,1,6,11,4,2,9,12]),import.meta.url),"RunsPage"),lZ=bs(()=>Ri(()=>import("./HistoryPage-BBvgid3o.js"),__vite__mapDeps([14,1,10,11,4,2,9,12]),import.meta.url),"HistoryPage"),cZ=bs(()=>Ri(()=>import("./SettingsPage-Bc3aR-gz.js"),__vite__mapDeps([15,1,11,4,2,9,12]),import.meta.url),"SettingsPage"),uZ=bs(()=>Ri(()=>import("./BacklinksPage-DQ59dhCx.js"),__vite__mapDeps([16,1,2,11,4,9,12]),import.meta.url),"BacklinksPage"),dZ=bs(()=>Ri(()=>import("./TrafficPage-C_qoeGDl.js"),__vite__mapDeps([17,1,7,2,11,4,9,12]),import.meta.url),"TrafficPage"),mZ=bs(()=>Ri(()=>import("./TrafficSourceDetailPage-B3i_B2MI.js"),__vite__mapDeps([18,1,7,3,4,2,11,9,12]),import.meta.url),"TrafficSourceDetailPage"),pZ=bs(()=>Ri(()=>import("./MeasurementPropertyPage-Dmb18JbT.js"),__vite__mapDeps([19,1,3,4,8,9,2,11,12]),import.meta.url),"MeasurementPropertyPage");function hZ(){return c.jsx(LQ,{children:c.jsx(D$,{children:c.jsx(BQ,{})})})}const Pn=f4()({component:hZ,validateSearch:e=>({manageQueries:e.manageQueries===!0||e.manageQueries==="true"?!0:void 0,runId:typeof e.runId=="string"?e.runId:void 0,siteHealthRunId:typeof e.siteHealthRunId=="string"?e.siteHealthRunId:void 0,evidenceId:typeof e.evidenceId=="string"?e.evidenceId:void 0,runStatus:typeof e.runStatus=="string"?e.runStatus:void 0,runKind:typeof e.runKind=="string"?e.runKind:void 0,runProject:typeof e.runProject=="string"?e.runProject:void 0,runWindow:typeof e.runWindow=="string"?e.runWindow:void 0,runQuery:typeof e.runQuery=="string"?e.runQuery:void 0,onboarding:e.onboarding==="site-health"||e.onboarding==="first-run"||e.onboarding==="complete"?e.onboarding:void 0,experience:e.experience==="legacy"||e.experience==="platform"?e.experience:void 0,siteScan:e.siteScan==="skip"?"skip":void 0,skipped:e.skipped==="visibility"?"visibility":void 0,setupProject:typeof e.setupProject=="string"?e.setupProject:void 0,scope:typeof e.scope=="string"?e.scope:void 0,class:typeof e.class=="string"?e.class:void 0,...Object.fromEntries(["queryWorkspace","researchMode","trackingQueryId","measurementScope","measurementScopeKey","measurementMarketKey","queryClass","measurementProvider","measurementModel","measurementLocation","measurementFrom","measurementTo","measurementRevision","measurementRunId","measurementQueryKey","measurementAnswer"].map(n=>[n,typeof e[n]=="string"?e[n]:void 0]))})}),fZ=zt({getParentRoute:()=>Pn,path:"/",component:KQ,beforeLoad:async({context:e})=>{let n=e.queryClient.getQueryData(fs({client:ne}));if(n===void 0)try{n=await e.queryClient.ensureQueryData(yo({client:ne}))}catch{return}if(n.length===0)throw Dw({to:"/setup"})}}),gZ=zt({getParentRoute:()=>Pn,path:"/projects",component:ZQ}),yZ=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,qn=zt({getParentRoute:()=>Pn,path:"/projects/$projectName",component:()=>c.jsx(Hh,{}),beforeLoad:async({context:e,params:n,location:i})=>{const r=n.projectName;if(!yZ.test(r))return;let u=e.queryClient.getQueryData(fs({client:ne}));if(!u)try{u=await e.queryClient.ensureQueryData(yo({client:ne}))}catch{return}const h=u.find(g=>g.id===r);if(h)throw Dw({to:i.pathname.replace(`/projects/${r}`,`/projects/${encodeURIComponent(h.name)}`),replace:!0})}}),bZ=zt({getParentRoute:()=>qn,path:"/",component:()=>c.jsx(ra,{tab:"overview"})}),vZ=zt({getParentRoute:()=>qn,path:"/portfolio",component:()=>c.jsx(ra,{tab:"portfolio"})}),xZ=zt({getParentRoute:()=>qn,path:"/search-console",component:()=>c.jsx(ra,{tab:"search-console"})}),wZ=zt({getParentRoute:()=>qn,path:"/conversions",component:()=>c.jsx(ra,{tab:"conversions"})}),kZ=zt({getParentRoute:()=>qn,path:"/local",component:()=>c.jsx(ra,{tab:"local"})}),SZ=zt({getParentRoute:()=>qn,path:"/discovery",component:()=>c.jsx(ra,{tab:"discovery"})}),jZ=zt({getParentRoute:()=>qn,path:"/queries",component:()=>c.jsx(ra,{tab:"queries"})}),AZ=zt({getParentRoute:()=>qn,path:"/properties/$targetKey",component:()=>c.jsx(pZ,{})}),CZ=zt({getParentRoute:()=>qn,path:"/report",component:()=>c.jsx(ra,{tab:"report"})}),NZ=zt({getParentRoute:()=>qn,path:"/activity",component:()=>c.jsx(ra,{tab:"activity"})}),_Z=zt({getParentRoute:()=>qn,path:"/backlinks",component:()=>c.jsx(ra,{tab:"backlinks"})}),TZ=zt({getParentRoute:()=>qn,path:"/technical-aeo",component:()=>c.jsx(ra,{tab:"technical-aeo"})}),RZ=zt({getParentRoute:()=>qn,path:"/history",component:()=>c.jsx(ra,{tab:"history"})}),EZ=zt({getParentRoute:()=>qn,path:"/settings",component:()=>c.jsx(ra,{tab:"settings"})}),zZ=zt({getParentRoute:()=>Pn,path:"/runs",component:rZ}),DZ=zt({getParentRoute:()=>Pn,path:"/history",component:lZ}),OZ=zt({getParentRoute:()=>Pn,path:"/settings",component:cZ,beforeLoad:({context:e})=>{}}),IZ=zt({getParentRoute:()=>Pn,path:"/setup",component:nZ}),PZ=zt({getParentRoute:()=>Pn,path:"/backlinks",component:uZ}),qZ=zt({getParentRoute:()=>Pn,path:"/traffic",component:dZ}),MZ=zt({getParentRoute:()=>Pn,path:"/traffic/$projectName/$sourceId",component:mZ}),BZ=zt({getParentRoute:()=>Pn,path:"*",component:oZ}),LZ=Pn.addChildren([fZ,gZ,qn.addChildren([bZ,vZ,xZ,wZ,kZ,SZ,jZ,AZ,CZ,NZ,_Z,TZ,RZ,EZ]),zZ,DZ,OZ,IZ,PZ,qZ,MZ,BZ]);function VZ(){return typeof window<"u"&&window.__CANONRY_CONFIG__?.basePath?window.__CANONRY_CONFIG__.basePath:"/"}const Rw=VZ(),$Z=Rw==="/"?"":Rw.replace(/\/$/,"");function UZ(e,n){return g4({routeTree:LZ,basepath:$Z||"/",context:{queryClient:e},...n?.initialEntries})}const GZ=6e4;function KZ(){const e=C.useRef(QV()).current,[n,i]=C.useState(e?"ready":"checking"),[r,u]=C.useState(null),[h,g]=C.useState(null),[b,v]=C.useState(e),[w,k]=C.useState(!1),[j,T]=C.useState(""),[_,G]=C.useState(""),[R,q]=C.useState(""),[F,ae]=C.useState(!1),[L,W]=C.useState("password"),[J,se]=C.useState(null),[V,H]=C.useState(!1),[we,We]=C.useState(!1),nt=C.useRef(null),Ve=C.useRef(null),He=C.useRef(null),Ce=()=>{const K=r?`${r.name}:${r.role}`:e?"api-key:explicit":h?`api-key:${h.id}`:"no-accounts";if(!nt.current||He.current!==K){Ve.current?.clear();const ue=R$();Ve.current=ue,nt.current=UZ(ue),He.current=K}return{queryClient:Ve.current,router:nt.current}},Pe=K=>K.authRequired?(k(!0),u(K.user),g(null),v(!1),i(K.user?"ready":"account-login"),!0):!1;C.useEffect(()=>{let K=!1;const ue=async(Re,ke=!1)=>{try{const et=await qh();if(K)return;g(et),v(!1),i("ready")}catch(et){if(K)return;if(ke&&et instanceof pn&&et.statusCode===401)return s$().then(()=>{K||(se(null),g(null),v(!1),We(!0),i("login"))}).catch(Me=>{K||(se(Me instanceof Error?Me.message:"Could not clear the invalid session"),i(Re))});se(et instanceof Error?et.message:"Could not verify API key access"),i(Re)}};return e?(ue("api-key-error"),()=>{K=!0}):(Promise.allSettled([Mx(),qx()]).then(([Re,ke])=>{if(K||Re.status==="fulfilled"&&Pe(Re.value))return;if(ke.status==="rejected"){const Me=ke.reason;se(Me instanceof Error?Me.message:"Failed to reach the Canonry API"),i("login");return}const et=ke.value;et.authenticated?(v(!0),ue("api-key-error",!0)):(g(null),v(!1),i(et.setupRequired?"setup":"login"))}),()=>{K=!0})},[]),C.useEffect(()=>{if(n!=="ready"||e)return;const K=setInterval(()=>{if(w){Mx().then(ue=>{ue.authRequired&&!ue.user&&(We(!0),u(null),g(null),i("account-login"))}).catch(()=>{});return}qx().then(ue=>{ue.authenticated||(We(!0),g(null),i(ue.setupRequired?"setup":"login"))}).catch(()=>{})},GZ);return Px(()=>{We(!0),u(null),g(null),v(!1),i(w?"account-login":"login")}),()=>{clearInterval(K),Px(null)}},[n,w,e]);const I=async K=>{if(K.preventDefault(),!_.trim()||_.trim().length<8){se("Password must be at least 8 characters");return}if(_!==R){se("Passwords do not match");return}H(!0),se(null);try{if(!(await n$(_.trim())).authenticated){se("Setup failed");return}G(""),q(""),ae(!1),We(!1),g(null),v(!0),i("checking");try{const Re=await qh();g(Re),v(!1),i("ready")}catch(Re){se(Re instanceof Error?Re.message:"Could not verify API key access"),i("api-key-error")}}catch(ue){se(ue instanceof pn||ue instanceof Error?ue.message:"Setup failed")}finally{H(!1)}},Y=K=>{G(K),se(null)},fe=K=>{q(K),se(null)},xe=async K=>{if(K.preventDefault(),!!_.trim()){H(!0),se(null);try{if(!(L==="api-key"?await i$(_.trim()):await a$(_.trim())).authenticated){se(L==="api-key"?"Invalid API key":"Incorrect password");return}const Re=await qh();g(Re),v(!1),G(""),ae(!1),We(!1),i("ready")}catch(ue){se(ue instanceof pn||ue instanceof Error?ue.message:"Authentication failed")}finally{H(!1)}}},ee=K=>{W(K),G(""),ae(!1),se(null)},Ne=async K=>{if(K.preventDefault(),!(!j.trim()||!_)){H(!0),se(null);try{const ue=await o$(j.trim(),_);if(!ue.user){se("Incorrect name or password.");return}G(""),We(!1),u(ue.user),g(null),v(!1),i("ready")}catch(ue){se(ue instanceof pn?ue.message:"Incorrect name or password.")}finally{H(!1)}}};if(n==="ready"){const{queryClient:K,router:ue}=Ce();return c.jsx(x$,{account:r,apiKey:h,apiKeyPending:b,children:c.jsx(y4,{client:K,children:c.jsx(b4,{router:ue})})})}const De=_.trim(),ye=_.length>0&&De.length<8,le=R.length>0&&_!==R,ce=De.length>=8&&_===R;return c.jsx("div",{className:"min-h-screen bg-bg px-4 py-8",children:c.jsxs("div",{className:"mx-auto flex min-h-[calc(100vh-4rem)] max-w-md flex-col items-center justify-center gap-5",children:[c.jsxs("div",{"data-testid":"auth-brand",className:"flex items-center gap-2.5",children:[c.jsx("img",{className:"size-7",src:"./favicon.svg",alt:"","aria-hidden":"true"}),c.jsx("span",{className:"text-lg font-semibold tracking-tight text-heading",children:"Canonry"})]}),c.jsx(ka,{className:"surface-card w-full",children:n==="checking"?c.jsx(no,{className:"py-8",children:c.jsx("p",{className:"supporting-copy text-center",children:"Connecting to Canonry…"})}):n==="api-key-error"?c.jsxs(c.Fragment,{children:[c.jsxs(mr,{children:[c.jsx("p",{className:"eyebrow eyebrow-soft",children:"Dashboard access"}),c.jsx("h1",{className:"font-medium tracking-tight text-primary",children:"Could not verify API key access"})]}),c.jsxs(no,{className:"space-y-4",children:[c.jsx("p",{className:"supporting-copy",children:J??"Canonry could not verify this session’s access, so the dashboard stayed locked."}),c.jsx(me,{type:"button",className:"w-full",onClick:()=>{window.location.reload()},children:"Try again"})]})]}):n==="account-login"?c.jsxs(c.Fragment,{children:[c.jsxs(mr,{children:[c.jsx("p",{className:"eyebrow eyebrow-soft",children:"Dashboard access"}),c.jsx("h1",{className:"font-medium tracking-tight text-primary",children:"Sign in to Canonry"})]}),c.jsxs(no,{children:[we?c.jsx("p",{className:"mb-4 rounded-md border border-caution bg-caution-soft px-3 py-2 text-sm text-caution",children:"You were signed out — please sign in again."}):null,c.jsxs("form",{className:"space-y-4",onSubmit:rn(Ne),children:[c.jsxs("label",{className:"block space-y-1.5",htmlFor:"account-name",children:[c.jsx("span",{className:"text-xs font-medium text-secondary",children:"Name"}),c.jsx("input",{autoFocus:!0,id:"account-name",className:"w-full rounded-md border border-base bg-bg px-3 py-2 text-sm text-heading outline-none transition focus:border-mono-600",type:"text",name:"username",autoComplete:"username",value:j,onChange:K=>{T(K.target.value),se(null)},"aria-invalid":!!J,"aria-describedby":J?"account-login-error":void 0})]}),c.jsxs("label",{className:"block space-y-1.5",htmlFor:"account-password",children:[c.jsx("span",{className:"text-xs font-medium text-secondary",children:"Password"}),c.jsx("input",{id:"account-password",className:"w-full rounded-md border border-base bg-bg px-3 py-2 text-sm text-heading outline-none transition focus:border-mono-600",type:"password",name:"password",autoComplete:"current-password",value:_,onChange:K=>Y(K.target.value),"aria-invalid":!!J,"aria-describedby":J?"account-login-error":void 0})]}),J?c.jsx("p",{id:"account-login-error",role:"alert",className:"text-sm text-negative-400",children:J}):null,c.jsx(me,{type:"submit",disabled:V||!j.trim()||!_,children:V?"Signing in…":"Sign in"})]})]})]}):n==="setup"?c.jsxs(c.Fragment,{children:[c.jsxs(mr,{children:[c.jsx("p",{className:"eyebrow eyebrow-soft",children:"First-time setup"}),c.jsx("h1",{className:"font-medium tracking-tight text-primary",children:"Create a dashboard password"}),c.jsx(fd,{children:"This password protects the dashboard on this computer."})]}),c.jsx(no,{children:c.jsxs("form",{className:"space-y-4",onSubmit:rn(I),children:[c.jsxs("div",{className:"space-y-1.5",children:[c.jsx("label",{className:"block text-xs font-medium text-secondary",htmlFor:"dashboard-password-new",children:"Password"}),c.jsx("input",{autoFocus:!0,id:"dashboard-password-new",className:"w-full rounded-md border border-base bg-bg px-3 py-2 text-sm text-heading outline-none transition focus:border-mono-600",type:F?"text":"password",name:"new-password",autoComplete:"new-password",minLength:8,required:!0,value:_,onChange:K=>Y(K.target.value),"aria-invalid":ye,"aria-describedby":"dashboard-password-new-help"}),c.jsx("span",{id:"dashboard-password-new-help","aria-live":"polite",className:ye?"block text-sm text-negative-400":"block text-sm text-secondary",children:ye?"Enter at least 8 characters.":"Use at least 8 characters."})]}),c.jsxs("div",{className:"space-y-1.5",children:[c.jsx("label",{className:"block text-xs font-medium text-secondary",htmlFor:"dashboard-password-confirm",children:"Confirm password"}),c.jsx("input",{id:"dashboard-password-confirm",className:"w-full rounded-md border border-base bg-bg px-3 py-2 text-sm text-heading outline-none transition focus:border-mono-600",type:F?"text":"password",name:"confirm-password",autoComplete:"new-password",minLength:8,required:!0,value:R,onChange:K=>fe(K.target.value),"aria-invalid":le,"aria-describedby":"dashboard-password-confirm-help"}),c.jsx("span",{id:"dashboard-password-confirm-help","aria-live":"polite",className:le?"block text-sm text-negative-400":"block text-sm text-secondary",children:le?"Passwords do not match.":"Enter the same password again."})]}),c.jsxs("label",{className:"flex min-h-10 cursor-pointer items-center gap-2 text-sm text-secondary",htmlFor:"dashboard-password-show",children:[c.jsx("input",{id:"dashboard-password-show",type:"checkbox",checked:F,onChange:K=>ae(K.target.checked)}),"Show passwords"]}),J?c.jsx("p",{id:"dashboard-password-setup-error",role:"alert",className:"text-sm text-negative-400",children:J}):null,c.jsx(me,{type:"submit",disabled:V||!ce,children:V?"Creating password…":"Create password and continue"})]})})]}):c.jsxs(c.Fragment,{children:[c.jsxs(mr,{children:[c.jsx("p",{className:"eyebrow eyebrow-soft",children:"Dashboard access"}),c.jsx("h1",{className:"font-medium tracking-tight text-primary",children:"Sign in to Canonry"}),c.jsx(fd,{children:L==="api-key"?"Enter an API key from this Canonry install. This opens the dashboard with that key’s access and does not change the password.":"Enter your dashboard password to continue."})]}),c.jsxs(no,{children:[we?c.jsx("p",{className:"mb-4 rounded-md border border-caution bg-caution-soft px-3 py-2 text-sm text-caution",children:"Your session expired — please sign in again."}):null,c.jsxs("form",{className:"space-y-4",onSubmit:rn(xe),children:[c.jsxs("label",{className:"block space-y-1.5",htmlFor:"dashboard-password-current",children:[c.jsx("span",{className:"text-xs font-medium text-secondary",children:L==="api-key"?"Canonry API key":"Password"}),c.jsx("input",{autoFocus:!0,id:"dashboard-password-current",className:"w-full rounded-md border border-base bg-bg px-3 py-2 text-sm text-heading outline-none transition focus:border-mono-600",type:F?"text":"password",name:L==="api-key"?"apiKey":"password",autoComplete:L==="api-key"?"off":"current-password",spellCheck:!1,required:!0,value:_,onChange:K=>Y(K.target.value),"aria-invalid":!!J,"aria-describedby":J?"dashboard-password-login-error":void 0})]}),c.jsxs("label",{className:"flex min-h-10 cursor-pointer items-center gap-2 text-sm text-secondary",htmlFor:"dashboard-login-password-show",children:[c.jsx("input",{id:"dashboard-login-password-show",type:"checkbox",checked:F,onChange:K=>ae(K.target.checked)}),L==="api-key"?"Show API key":"Show password"]}),J?c.jsx("p",{id:"dashboard-password-login-error",role:"alert",className:"text-sm text-negative-400",children:J}):null,c.jsx(me,{type:"submit",disabled:V||!_.trim(),children:V?"Signing in…":"Open dashboard"}),c.jsx(me,{type:"button",variant:"ghost",onClick:()=>ee(L==="api-key"?"password":"api-key"),children:L==="api-key"?"Use dashboard password instead":"Forgot password? Use API key"})]})]})]})})]})})}const oA=document.getElementById("root");if(!oA)throw new Error("Expected #root element for web app bootstrap.");Q4.createRoot(oA).render(c.jsx(C.StrictMode,{children:c.jsx(KZ,{})}));export{$W as $,Af as A,me as B,ud as C,RJ as D,AY as E,_J as F,EJ as G,TW as H,to as I,CJ as J,_ee as K,Eee as L,jte as M,Ree as N,MW as O,MK as P,qW as Q,FW as R,I$ as S,Rn as T,hn as U,Oee as V,Iee as W,UW as X,Pee as Y,GW as Z,LW as _,Ste as a,hX as a$,zee as a0,Dee as a1,Tee as a2,BW as a3,qee as a4,Gee as a5,Lee as a6,$ee as a7,Vee as a8,Uee as a9,eo as aA,N$ as aB,UJ as aC,KH as aD,VW as aE,zY as aF,jY as aG,yW as aH,TD as aI,Sn as aJ,SY as aK,WY as aL,kY as aM,RY as aN,F$ as aO,gU as aP,ZJ as aQ,eee as aR,YJ as aS,pX as aT,fX as aU,iL as aV,gX as aW,sU as aX,FJ as aY,oL as aZ,ff as a_,mJ as aa,cg as ab,Ee as ac,Bee as ad,xj as ae,Ti as af,Mee as ag,Pte as ah,GI as ai,KI as aj,OY as ak,DY as al,fJ as am,wJ as an,kJ as ao,pn as ap,SJ as aq,xW as ar,P$ as as,$G as at,bf as au,jJ as av,Yu as aw,ate as ax,lr as ay,Nf as az,tq as b,JY as b$,qV as b0,XJ as b1,QJ as b2,rU as b3,WJ as b4,Rte as b5,JJ as b6,lte as b7,cte as b8,KW as b9,be as bA,bY as bB,yY as bC,gY as bD,fY as bE,mY as bF,dY as bG,hY as bH,pY as bI,uY as bJ,cY as bK,nY as bL,aY as bM,lY as bN,rY as bO,oY as bP,iY as bQ,sY as bR,tY as bS,eY as bT,JZ as bU,WZ as bV,bN as bW,XY as bX,eX as bY,FY as bZ,tX as b_,rg as ba,nte as bb,fj as bc,see as bd,ree as be,fee as bf,Aee as bg,jee as bh,pee as bi,kee as bj,Nee as bk,cee as bl,yee as bm,bee as bn,vee as bo,lee as bp,gee as bq,uee as br,xee as bs,dee as bt,wee as bu,hee as bv,See as bw,Cee as bx,oF as by,mee as bz,Wk as c,OX as c$,ZY as c0,YY as c1,iX as c2,Ite as c3,tte as c4,yf as c5,nX as c6,bX as c7,vX as c8,oo as c9,XX as cA,ZX as cB,YX as cC,lX as cD,QX as cE,HX as cF,IX as cG,PX as cH,sX as cI,uX as cJ,qX as cK,eW as cL,CY as cM,lW as cN,cW as cO,iW as cP,oW as cQ,NY as cR,rW as cS,sW as cT,KY as cU,GX as cV,TX as cW,RX as cX,EX as cY,zX as cZ,DX as c_,yX as ca,aX as cb,nJ as cc,Nt as cd,AB as ce,UX as cf,gW as cg,MX as ch,BX as ci,LX as cj,VX as ck,$X as cl,xM as cm,HY as cn,Ox as co,fW as cp,cX as cq,rX as cr,kX as cs,hV as ct,mW as cu,pW as cv,dW as cw,uW as cx,WX as cy,tO as cz,AJ as d,Nte as d$,vV as d0,hW as d1,QY as d2,vY as d3,wM as d4,jX as d5,JX as d6,wY as d7,oX as d8,xX as d9,zW as dA,zJ as dB,DJ as dC,DW as dD,OW as dE,PW as dF,IW as dG,yc as dH,yo as dI,nj as dJ,qJ as dK,PJ as dL,TH as dM,BK as dN,Mj as dO,GK as dP,Bj as dQ,Lj as dR,GH as dS,W$ as dT,ao as dU,bd as dV,SU as dW,gF as dX,Ote as dY,_te as dZ,$H as d_,SX as da,wX as db,_Y as dc,tW as dd,nW as de,aW as df,J3 as dg,AX as dh,CX as di,TY as dj,NX as dk,KX as dl,xY as dm,FX as dn,_X as dp,NW as dq,CW as dr,AW as ds,aJ as dt,vU as du,oee as dv,OJ as dw,EY as dx,Gx as dy,EW as dz,Wee as e,yJ as e$,uF as e0,tee as e1,MJ as e2,Cte as e3,$J as e4,BJ as e5,nee as e6,Ate as e7,LJ as e8,Yt as e9,eJ as eA,WW as eB,jr as eC,Xd as eD,Ete as eE,tm as eF,mg as eG,aee as eH,iee as eI,$V as eJ,bW as eK,vW as eL,RW as eM,HW as eN,QW as eO,wg as eP,nm as eQ,pg as eR,fF as eS,tJ as eT,Ar as eU,Hx as eV,pJ as eW,gJ as eX,bJ as eY,vJ as eZ,hJ as e_,xte as ea,XH as eb,ZV as ec,V$ as ed,WH as ee,Tte as ef,wW as eg,WV as eh,kW as ei,SW as ej,jW as ek,fs as el,Q$ as em,X$ as en,_W as eo,Kee as ep,u$ as eq,JW as er,Qee as es,Fee as et,Zee as eu,Hee as ev,TJ as ew,ZW as ex,YW as ey,XW as ez,ka as f,xJ as f0,Ph as f1,dJ as f2,ote as f3,QQ as f4,mX as f5,H0 as f6,IJ as f7,ite as f8,rte as f9,kte as fA,mte as fB,pte as fC,IY as fD,gte as fE,vte as fF,fte as fG,bte as fH,uo as fI,BS as fJ,BY as fK,$Y as fL,yte as fM,RP as fN,VY as fO,LY as fP,uJ as fa,dX as fb,lJ as fc,cJ as fd,rJ as fe,ste as ff,NJ as fg,Vz as fh,GJ as fi,VJ as fj,HJ as fk,KJ as fl,qY as fm,Ri as fn,Na as fo,PY as fp,PV as fq,gG as fr,dte as fs,ute as ft,dF as fu,hte as fv,FH as fw,UY as fx,MY as fy,wte as fz,Yee as g,aw as h,In as i,ne as j,MV as k,fr as l,Tn as m,rn as n,Xee as o,ete as p,Jee as q,iJ as r,GY as s,M$ as t,hg as u,oJ as v,sJ as w,oa as x,zte as y,Dte as z};
|