javascript:(function(){ const d=document,g=i=>d.getElementById(i),c=t=>d.createElement(t);const sLS=(k,v)=>{try{localStorage.setItem(k,v)}catch(e){}},gLS=k=>{try{return localStorage.getItem(k)}catch(e){return null}};const eW=g('fE-w');if(eW)eW.remove();const oS=g('fE-st');if(oS)oS.remove();const st=c('style');st.id='fE-st';st.innerHTML='#fE-s,#fE-mb{--fE-bg:#F5F5DC;--fE-bg2:#F0E0D6;--fE-bg3:#FFE;--fE-txt:#800000;--fE-brd:#800000}#fE-s.fE-dark,#fE-mb.fE-dark{--fE-bg:#1a1a1a;--fE-bg2:#2a2020;--fE-bg3:#2e2424;--fE-txt:#e8d5b0;--fE-brd:#a05050}#fE-s{position:fixed;top:32px;right:0;width:30%;height:calc(100% - 32px);background:var(--fE-bg);border-left:2px solid #800000;z-index:9999;display:flex;flex-direction:column;color:var(--fE-txt);box-shadow:-2px 0 5px rgba(0,0,0,.2);transition:transform .3s ease}#fE-h{padding:6px 10px;border-bottom:1px solid var(--fE-brd);background:var(--fE-bg);position:relative;cursor:move}#fE-btns{display:flex;gap:4px;margin-bottom:4px}#fE-btns button{cursor:pointer;background:var(--fE-bg);border:1px solid var(--fE-brd);color:var(--fE-txt);padding:2px 8px;font-size:12px;flex:1}#fE-btns button.fE-on{background:var(--fE-brd);color:var(--fE-bg)}#fE-cfg{overflow:hidden;transition:max-height .2s ease}#fE-cfg.fE-hide{max-height:0!important}.fE-hl-row{margin-bottom:4px;display:flex;align-items:center;width:100%;border-top:1px solid var(--fE-brd);padding-top:4px}.fE-hl-row label{width:40px;font-size:12px;cursor:default;flex-shrink:0}.fE-r{margin-bottom:4px;display:flex;align-items:center;width:100%}.fE-r label{width:40px;font-size:12px;cursor:default;flex-shrink:0}.fE-ib{flex:1;border:1px solid #ccc;padding:2px;box-sizing:border-box;background:#fff;min-height:20px;white-space:nowrap;overflow:hidden;font-size:13px;cursor:text;color:#333}.fE-ib:empty:before{content:attr(data-placeholder);color:#888}#fE-ai{width:38px;border:1px solid var(--fE-brd);padding:2px;font-size:12px;text-align:center;background:var(--fE-bg);color:var(--fE-txt)}#fE-jup,#fE-jdn{cursor:pointer;background:var(--fE-bg);border:1px solid var(--fE-brd);color:var(--fE-txt);padding:0 5px;font-size:18px;line-height:1}#fE-l{flex:1;overflow-y:auto;padding:10px;padding-left:45px}.fE-ic{position:relative;margin-bottom:10px}.fE-cb{position:absolute;left:-35px;top:0;width:30px;height:100%;text-align:center;cursor:pointer;border:none;background:var(--fE-bg2);color:var(--fE-txt);font-size:16px;display:flex;align-items:center;justify-content:center;padding:0;box-shadow:0 1px 3px rgba(0,0,0,.12),0 1px 2px rgba(0,0,0,.24);transition:all .3s ease}.fE-cb:hover{box-shadow:0 3px 6px rgba(0,0,0,.16),0 3px 6px rgba(0,0,0,.23)}.fE-i{border:1px solid var(--fE-brd);padding:5px;cursor:pointer;background:var(--fE-bg2);color:var(--fE-txt);font-size:14px;word-break:break-all;min-height:40px;display:flow-root}.fE-rn{font-weight:bold;font-size:12px;display:flex;align-items:center;gap:4px;border-bottom:1px solid var(--fE-brd);margin-bottom:2px;color:var(--fE-txt)}.fE-sd{font-size:11px;font-weight:normal;color:#800000;margin-left:2px}#fE-mb{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.7);z-index:10000;display:flex;align-items:center;justify-content:center}#fE-m{background:var(--fE-bg3);border:3px solid #800000;width:min(95%, 800px);max-height:90%;display:flex;flex-direction:column;position:relative}#fE-mc{position:absolute;top:5px;right:10px;cursor:pointer;font-weight:bold;z-index:10001}#fE-mj{cursor:pointer;border:none;box-shadow:0 1px 3px rgba(0,0,0,.12),0 1px 2px rgba(0,0,0,.24);background:#fff;color:#800000;padding:5px 10px;font-size:12px;transition:all .3s ease;margin-left:auto}#fE-mco{padding:20px;overflow-y:auto;flex:1}.fE-ob{display:flow-root;min-height:100px;padding-top:20px}.fE-mbr{display:flex;gap:10px;padding:15px 0;border-top:1px solid #800000;border-bottom:1px dashed #800000;margin:15px 0}.fE-mbn{cursor:pointer;border:none;box-shadow:0 1px 3px rgba(0,0,0,.12),0 1px 2px rgba(0,0,0,.24);background:#fff;color:#800000;padding:5px 10px;font-size:12px;transition:all .3s ease}#fE-vh{padding:6px 10px;border-bottom:1px solid #800000;background:#F5F5DC}#fE-s.fE-min{transform:translateX(100%)}#fE-tg{position:absolute;left:-24px;top:50%;transform:translateY(-50%);width:24px;height:120px;background:var(--fE-bg);border:1px solid var(--fE-brd);border-right:none;color:var(--fE-txt);cursor:pointer;z-index:10002;display:flex;align-items:center;justify-content:center;border-radius:4px 0 0 4px;font-size:12px;font-weight:bold}#fE-scrl{position:absolute;top:5px;right:20px;display:flex;flex-direction:column;gap:2px;z-index:10}#fE-auto-cfg{overflow:hidden;transition:max-height .2s ease;max-height:0}#fE-auto-cfg.fE-open{max-height:120px}.fE-sb{background:var(--fE-bg);border:1px solid var(--fE-brd);color:var(--fE-txt);cursor:pointer;padding:2px 5px;font-size:12px;opacity:0.7}.fE-sb:hover{opacity:1}.fE-hl{background:#ff0;color:#000;font-weight:bold;padding:0 2px;border-radius:2px}.fE-cc{float:right;color:#008000;font-size:12px;font-weight:bold;margin-left:5px;white-space:nowrap}';d.head.appendChild(st);const iT=e=>e.innerText.replace(/\r?\n/g,' ').trim(); const sb=c('div');sb.id='fE-s';let oW=c('div');oW.id='fE-w';oW.appendChild(sb);d.body.appendChild(oW);const w=gLS('fEW');if(w)sb.style.width=w+'px';const tgB=c('button');tgB.id='fE-tg';tgB.innerText='⇔';tgB.title='サイドバー格納/展開';sb.appendChild(tgB);const hd=c('div');hd.id='fE-h';sb.appendChild(hd);const bRow=c('div');bRow.id='fE-btns';hd.appendChild(bRow);const uB=c('button');uB.id='fE-u';uB.innerText='更新';bRow.appendChild(uB);const aB=c('button');aB.id='fE-a';aB.innerText='自動';bRow.appendChild(aB);const stB=c('button');stB.id='fE-st2';stB.innerText='設定';bRow.appendChild(stB);const vB=c('button');vB.id='fE-v';vB.innerText='閲覧';bRow.appendChild(vB);const cB=c('button');cB.id='fE-c';cB.innerText='終了';bRow.appendChild(cB);const cfg=c('div');cfg.id='fE-cfg';cfg.className='fE-hide';hd.appendChild(cfg);let iS='お願い 出来ま 下さい ください',iE='',iH='';iS=gLS('fES')||iS;iE=gLS('fEE')||'';iH=gLS('fEH')||'';const sR=c('div');sR.className='fE-r';cfg.appendChild(sR);sR.innerHTML='<label>検索:</label><div contenteditable="true" id="fE-si" class="fE-ib" data-placeholder="検索ワード..."></div>';const rsB=c('button');rsB.id='fE-rs';rsB.innerText='🔄';rsB.title='初期値にリセット';rsB.style.cssText='cursor:pointer;background:var(--fE-bg);border:1px solid var(--fE-brd);color:var(--fE-txt);padding:0 5px;font-size:18px;margin-left:3px;flex-shrink:0';const dkB=c('button');dkB.id='fE-dk';dkB.innerText='🌙';dkB.style.cssText='cursor:pointer;background:var(--fE-bg);border:1px solid var(--fE-brd);color:var(--fE-txt);padding:0 5px;font-size:18px;margin-left:3px;flex-shrink:0';sR.appendChild(rsB);sR.appendChild(dkB);const eR=c('div');eR.className='fE-r';cfg.appendChild(eR);eR.innerHTML='<label>除外:</label><div contenteditable="true" id="fE-ei" class="fE-ib" data-placeholder="除外ワード..."></div>';const fltB=c('button');fltB.id='fE-flt';fltB.innerText='耳栓:OFF';fltB.title='ABCレス・画像レスのみ表示';fltB.style.cssText='cursor:pointer;background:var(--fE-bg);border:1px solid var(--fE-brd);color:var(--fE-txt);padding:2px 6px;font-size:11px;margin-left:3px;flex-shrink:0;white-space:nowrap';eR.appendChild(fltB);const autoCfg=c('div');autoCfg.id='fE-auto-cfg';const aiLabel=c('span');aiLabel.style.cssText='font-size:11px;margin-left:6px;flex-shrink:0;color:var(--fE-txt)';aiLabel.innerText='秒';const aiInput=c('input');aiInput.type='number';aiInput.id='fE-ai';aiInput.min='10';aiInput.max='3600';aiInput.value=gLS('fEAI')||'60';aiInput.title='自動更新間隔(秒)';aiInput.onchange=()=>{sLS('fEAI',Math.max(10,parseInt(aiInput.value)||60));if(autoOn){stopAuto();startAuto();}};const acRow=c('div');acRow.className='fE-r';acRow.style.cssText='padding:4px 2px;gap:4px;align-items:center;flex-wrap:wrap';const acLbl=c('label');acLbl.style.cssText='font-size:11px;flex-shrink:0;color:var(--fE-txt)';acLbl.innerText='自動:';acRow.appendChild(acLbl);autoCfg.appendChild(acRow);const sI=g('fE-si');sI.innerText=iS;const eI=g('fE-ei');eI.innerText=iE;stB.onclick=()=>{const h=cfg.classList.toggle('fE-hide');cfg.style.maxHeight=h?'0':cfg.scrollHeight+50+'px';stB.classList.toggle('fE-on',!h)};let darkOn=gLS('fEDK')==='1';const applyDark=()=>{if(darkOn){sb.classList.add('fE-dark');dkB.innerText='☀'}else{sb.classList.remove('fE-dark');dkB.innerText='🌙'}};applyDark();dkB.onclick=()=>{darkOn=!darkOn;sLS('fEDK',darkOn?'1':'0');applyDark()};rsB.onclick=()=>{sI.innerText='お願い 出来ま 下さい ください';eI.innerText='';hI.innerText='';rL()};const hRow=c('div');hRow.className='fE-hl-row';hd.appendChild(hRow);hRow.innerHTML='<label>強調:</label><div contenteditable="true" id="fE-hi" class="fE-ib" data-placeholder="ここにワード..."></div><button id="fE-jup">▲</button><button id="fE-jdn">▼</button>';const hI=g('fE-hi');const jUpB=g('fE-jup'),jDnB=g('fE-jdn');hI.innerText=gLS('fEH')||'';hI.onkeydown=e=>{if(e.key==='Enter'){e.preventDefault();jDnB.click()}};const lAW=c('div');lAW.style.cssText='position:relative;flex:1;display:flex;flex-direction:column;overflow:hidden';const lA=c('div');lA.id='fE-l';const scrl=c('div');scrl.id='fE-scrl';scrl.innerHTML='<button id="fE-sup" class="fE-sb" title="一番上へ">⇧</button><button id="fE-sdn" class="fE-sb" title="一番下へ">⇩</button>';lAW.appendChild(lA);lAW.appendChild(scrl);sb.appendChild(lAW); let aRM=new Map(),attrMap=new Map(),cM_AB=new Map(),cM_BC=new Map(),imgFileMap=new Map(),acSet=new Set(),tmpB=new Set(),tmpC=new Set(),hE=[],hI_idx=0,dF=0,x=0,y=0,a=0,b=0,c_kS='',c_eS='',c_hS='';let autoTimer=null,autoOn=false;hd.onmousedown=e=>{if(e.target.closest('button,input,.fE-ib,.fE-rs'))return;dF=1;x=e.clientX;y=e.clientY;const r=sb.getBoundingClientRect();a=r.left;b=r.top;sb.style.left=a+'px';sb.style.top=b+'px';sb.style.right='auto';d.onmousemove=ev=>{if(!dF)return;sb.style.left=Math.max(0,Math.min(innerWidth-sb.offsetWidth,a+ev.clientX-x))+'px';sb.style.top=Math.max(0,Math.min(innerHeight-sb.offsetHeight,b+ev.clientY-y))+'px'};d.onmouseup=()=>{dF=0;d.onmousemove=d.onmouseup=null};e.preventDefault()};const mk=(id,sd)=>{let G=c('div');G.id=id;G.className='fE-rs';sb.appendChild(G);G.style.cssText='position:absolute;'+sd+':-5px;top:0;width:10px;height:100%;cursor:ew-resize;z-index:10001';G.onmousedown=e=>{e.stopPropagation();e.preventDefault();const r=sb.getBoundingClientRect(),L=r.left,R=r.right,W=r.width,X=e.clientX;d.onmousemove=ev=>{let nw,nl=L;if(sd==='left'){nw=Math.max(260,Math.min(innerWidth,W-(ev.clientX-X)));nl=R-nw;if(nl<0){nw=R;nl=0}}else{nw=Math.max(260,Math.min(innerWidth-L,W+(ev.clientX-X)))}sb.style.width=nw+'px';sb.style.left=nl+'px';sb.style.right='auto'};d.onmouseup=()=>{sLS('fEW',parseInt(sb.offsetWidth));d.onmousemove=d.onmouseup=null}}};mk('fE-rs-l','left');const tgBtn=g('fE-tg'),sUpBtn=g('fE-sup'),sDnBtn=g('fE-sdn');if(tgBtn)tgBtn.onclick=()=>sb.classList.toggle('fE-min');if(sUpBtn)sUpBtn.onclick=()=>lA.scrollTop=0;if(sDnBtn)sDnBtn.onclick=()=>lA.scrollTop=lA.scrollHeight;const up=(scroll)=>{let l=d.querySelector('a[onclick*="scrlf"]'),m=g('fvw_loading');if(l)l.click();if(m)m.click();setTimeout(()=>{rL();if(scroll){if(scSide)lA.scrollTop=1e9;if(scThread)window.scrollTo(0,1e9);}},500);};const startAuto=()=>{if(autoTimer)clearInterval(autoTimer);autoOn=true;aB.classList.add('fE-on');const sec=Math.max(10,parseInt(g('fE-ai').value)||60);sLS('fEAI',sec);up();autoTimer=setInterval(()=>up(true),sec*1000)};const stopAuto=()=>{clearInterval(autoTimer);autoTimer=null;autoOn=false;aB.classList.remove('fE-on')};const cE=e=>{const t=e.target;const a=t.closest('a');if(a&&((a.getAttribute('onclick')||'').includes('scrlf')||a.innerText.includes('リロード')))setTimeout(rL,500)};const sE=()=>{if((window.innerHeight+window.scrollY)>=d.documentElement.scrollHeight-50){clearTimeout(window._fEdU);window._fEdU=setTimeout(rL,300)}};d.addEventListener('click',cE,true);window.addEventListener('scroll',sE);uB.onclick=()=>up(false);aB.onclick=()=>{const autoCfgEl=g('fE-auto-cfg');if(!autoCfgEl)return;const isOpen=autoCfgEl.classList.toggle('fE-open');if(isOpen)startAuto();else stopAuto()};cB.onclick=()=>{stopAuto();oW.remove();st.remove();aRM.clear();attrMap.clear();cM_AB.clear();cM_BC.clear();imgFileMap.clear();hE=[];window._fEData=null;d.removeEventListener('click',cE,true);window.removeEventListener('scroll',sE)};const jmp=v=>{const k=iT(sI),E=iT(eI),h=iT(hI);if(k!==c_kS||E!==c_eS||h!==c_hS)rL();if(hE.length===0)return;hI_idx+=v;if(hI_idx<0)hI_idx=hE.length-1;if(hI_idx>=hE.length)hI_idx=0;sv(hE[hI_idx])};jUpB.onclick=()=>jmp(-1);jDnB.onclick=()=>jmp(1);const hImg=rE=>{const ln=rE.querySelectorAll('a');for(let o of ln){const hr=o.href.toLowerCase();if(hr.endsWith('.jpg')||hr.endsWith('.png')||hr.endsWith('.gif')||hr.endsWith('.webp'))return true}return!!rE.querySelector('img')};const cTC=(t,bn,oT)=>{navigator.clipboard.writeText(t).then(()=>{bn.innerText='OK';setTimeout(()=>bn.innerText=oT,1000)})};const sv=el=>el.scrollIntoView({behavior:'smooth',block:'center'});const imgRE=/[\w\d]+\.(jpg|jpeg|png|gif|webp)/i;const toHL=l=>/^>/.test(l)?'<span style="color:#117743;">'+l+'</span>':l;const hlText=(t,ws)=>{if(!ws||ws.length===0)return t;const rg=new RegExp('('+ws.map(w=>w.replace(/[.*+?^${}()|[\]\\]/g,'\\$&')).join('|')+')','gi');return t.replace(rg,'<span class="fE-hl">$1</span>')};const jBSt='position:absolute;top:4px;right:4px;cursor:pointer;background:#fff;border:1px solid #800000;padding:1px 5px;font-size:10px;z-index:1';const toQ=t=>t.split('\n').map(l=>'>'+l).join('\n');const mkNo=n=>'<strong>No.'+n+'</strong><br>';const mkJB=(targetEl,closeFn)=>{const b=c('button');b.innerText='元レスへ';b.style.cssText=jBSt;b.onclick=()=>{if(closeFn)closeFn();sv(targetEl)};return b}; const mAdd=(m,k,v)=>{if(!m.has(k))m.set(k,new Set());m.get(k).add(v)};const parseRefs=(lines,targetMap,selfN,forC)=>{const refs=new Set();lines.filter(tx=>/^>No\.(\d+)/.test(tx)).forEach(tx=>{const m=tx.match(/^>No\.(\d+)/);if(m&&targetMap.has(m[1]))refs.add(m[1]);});if(forC){lines.filter(tx=>/^>([\w\d]+\.(jpg|jpeg|png|gif|webp))$/i.test(tx)).forEach(tx=>{const m=tx.match(/^>([\w\d]+\.(jpg|jpeg|png|gif|webp))$/i);if(m){const bN=imgFileMap.get(m[1].toLowerCase());if(bN)refs.add(bN);}});}if(refs.size===0){const exRe=forC?/^>+1000なら/:/^>>/;const quotedLines=lines.filter(tx=>/^>/.test(tx)).filter(tx=>!exRe.test(tx)).filter(tx=>!/^>No\./.test(tx)).filter(tx=>!/^>([\w\d]+\.(jpg|jpeg|png|gif|webp))$/i.test(tx)).map(tx=>tx.replace(/^>/,'').trim());if(quotedLines.length>0){const prop=forC?'aL':'cL';const cands=[];targetMap.forEach((aD,aN)=>{if(aN===selfN)return;if(quotedLines.every(q=>aD[prop].includes(q)))cands.push(aN);});const fc=cands.filter(n=>parseInt(n)<parseInt(selfN));if(fc.length>0){refs.add(fc.sort((a,b)=>parseInt(b)-parseInt(a))[0]);}}}return refs;};const sMR=()=>{aRM.clear();attrMap.clear();cM_AB.clear();cM_BC.clear();imgFileMap.clear();acSet.clear();tmpB.clear();tmpC.clear();d.querySelectorAll('.rtd,.c9-10').forEach(rp=>{if(!rp.querySelector('.rsc,.c9-11'))return;const bq=rp.querySelector('blockquote');if(!bq)return;const rnE=rp.querySelector('.no_quote,.cno,.n');const rN=rnE?rnE.innerText.replace('No.','').trim():null;if(!rN)return;const oL=bq.innerHTML.split(/<br\s*\/?>/i);const pL=[];oL.forEach(l=>{const t=c('div');t.innerHTML=l;pL.push(t.innerText.trim())});const cL=pL.filter(l=>!/^>/.test(l));const prevSd=aRM.has(rN)?aRM.get(rN).sd:'';const sodEl=rp.querySelector('a.sod');const initSd=(()=>{if(prevSd)return prevSd;if(sodEl){const t=sodEl.innerText.trim();if(t&&t!=='+')return t;}return '';})();aRM.set(rN,{el:rp,cT:cL.join('\n'),cL:cL,aL:pL,sd:initSd})});const kS=iT(sI);const eS=iT(eI);const kw=kS.split(/[\s ]+/).filter(k=>k);const ew=eS?eS.split(/[\s ]+/).filter(k=>k):[];aRM.forEach((da,rN)=>{if(kw.length===0)return;if(!kw.some(k=>da.cT.includes(k)))return;if(ew.length>0&&ew.some(e=>da.cT.includes(e)))return;attrMap.set(rN,'A')});const aOnlyMap=new Map();attrMap.forEach((attr,rN)=>{if(attr==='A')aOnlyMap.set(rN,aRM.get(rN))});aRM.forEach((da,rN)=>{if(attrMap.has(rN))return;if(!hImg(da.el))return;const refs=parseRefs(da.aL,aOnlyMap,rN,false);const isKita=/^[キキ][タタ][━-]{3,}\([゚゜][∀ヲ][゚゜]\)[━-]{3,}!!$/.test(da.cT.trim());if(refs.size===0&&!isKita)return;attrMap.set(rN,'B');refs.forEach(aN=>{mAdd(cM_AB,aN,rN)});da.el.querySelectorAll('a[href]').forEach(a=>{const m=a.href.match(/\/([\w\d]+\.(jpg|jpeg|png|gif|webp))$/i);if(m)imgFileMap.set(m[1].toLowerCase(),rN)})});const bOnlyMap=new Map();attrMap.forEach((attr,rN)=>{if(attr==='B')bOnlyMap.set(rN,aRM.get(rN))}); aRM.forEach((da,rN)=>{if(attrMap.has(rN))return;if(!hImg(da.el))return;const qL=da.aL.filter(l=>/^>/.test(l));if(qL.length===0)return;if(!qL.every(l=>/^>>/.test(l)))return;const refs=new Set();qL.forEach(l=>{const body=l.replace(/^>/,'').trim();bOnlyMap.forEach((bD,bN)=>{if(bD.aL.includes(body))refs.add(bN)});});if(refs.size===0)return;attrMap.set(rN,'B');refs.forEach(bN=>{mAdd(cM_AB,bN,rN)});da.el.querySelectorAll('a[href]').forEach(a=>{const m=a.href.match(/\/([\w\d]+\.(jpg|jpeg|png|gif|webp))$/i);if(m)imgFileMap.set(m[1].toLowerCase(),rN)})}); aRM.forEach((da,rN)=>{if(attrMap.get(rN)==='B')return;const refs=parseRefs(da.aL,bOnlyMap,rN,true);if(refs.size===0)return;if(attrMap.get(rN)==='A'){acSet.add(rN);}else{attrMap.set(rN,'C');}refs.forEach(bN=>{mAdd(cM_BC,bN,rN)})}); const cOnlyMap=new Map();attrMap.forEach((attr,rN)=>{if(attr==='C')cOnlyMap.set(rN,aRM.get(rN))});aRM.forEach((da,rN)=>{if(attrMap.has(rN))return;if(!hImg(da.el))return;const refs=new Set();da.aL.filter(l=>/^>No\.(\d+)/.test(l)).forEach(l=>{const m=l.match(/^>No\.(\d+)/);if(m&&cOnlyMap.has(m[1]))refs.add(m[1]);});const qL=da.aL.filter(l=>/^>/.test(l)&&!/^>>/.test(l)&&!/^>No\./.test(l)&&!/^>([\w\d]+\.(jpg|jpeg|png|gif|webp))$/i.test(l));if(qL.length>0){const qT=qL.map(l=>l.replace(/^>/,'').trim());const cands=[];cOnlyMap.forEach((cD,cN)=>{if(cN===rN)return;if(qT.every(q=>cD.cL.includes(q)))cands.push(cN);});const fc=cands.filter(n=>parseInt(n)<parseInt(rN));if(fc.length>0)fc.sort((a,b)=>parseInt(b)-parseInt(a)).forEach(cN=>refs.add(cN));}if(refs.size===0)return;attrMap.set(rN,'B');refs.forEach(cN=>{mAdd(cM_AB,cN,rN)});da.el.querySelectorAll('a[href]').forEach(a=>{const m=a.href.match(/\/([\w\d]+\.(jpg|jpeg|png|gif|webp))$/i);if(m)imgFileMap.set(m[1].toLowerCase(),rN)})});window._fEData={aRM,attrMap,cM_AB,cM_BC,imgFileMap,acSet}}; const getCR=n=>cM_BC.has(n)?Array.from(cM_BC.get(n)).filter(n=>attrMap.get(n)==='C'||acSet.has(n)).sort((a,b)=>parseInt(a)-parseInt(b)):[];const mkCB=(minH)=>{const b=c('div');b.style.cssText='background:#F0E0D6;border:1px solid #800000;padding:10px;margin-top:10px;display:flow-root;font-size:14px;color:#800000;min-height:'+(minH||100)+'px;position:relative';return b};const addImg=(cB,el)=>{const im=el.querySelector('img');if(im){const iC=im.closest('a')?im.closest('a').cloneNode(true):im.cloneNode(true);iC.style.float='left';iC.style.margin='0 10px 10px 0';cB.appendChild(iC)}};const mkExp=(cReplies)=>{const expBtn=c('button');expBtn.innerText='返信C('+cReplies.length+')▼';expBtn.style.cssText='display:block;margin-top:6px;cursor:pointer;font-size:11px;background:#fff;border:1px solid #808000;color:#808000;font-weight:bold;padding:2px 8px;clear:both';let expOpen=false,expArea=null;expBtn.onclick=e=>{e.stopPropagation();if(!expOpen){expArea=c('div');expArea.style.cssText='margin-top:4px;border-left:2px solid #808000;padding-left:6px';cReplies.forEach(cN=>{const dC=aRM.get(cN);if(!dC)return;const cb2=mkCB(50);cb2.style.marginTop='6px';cb2.style.padding='8px';cb2.appendChild(mkJB(dC.el));const tD2=c('div');tD2.innerHTML=mkNo(cN)+dC.aL.map(toHL).join('<br>');cb2.appendChild(tD2);expArea.appendChild(cb2)});expBtn.after(expArea);expOpen=true;expBtn.innerText='返信C('+cReplies.length+')▲';}else{expArea&&expArea.remove();expArea=null;expOpen=false;expBtn.innerText='返信C('+cReplies.length+')▼';}};return expBtn};const sM=rN=>{const da=aRM.get(rN);if(!da)return;const{bg,md,co}=mkModal();const cl=c('span');cl.id='fE-mc';cl.innerText='× 閉じる';cl.onclick=()=>bg.remove();const oB=c('div');oB.className='fE-ob';oB.innerHTML=da.el.innerHTML;co.appendChild(oB);const bR=c('div');bR.className='fE-mbr';const qCT=toQ(da.cT);[{l:'レス番号',t:'>No.'+rN},{l:'全文',t:da.aL.map(l=>'>'+l).join('\n')},{l:'本文(引用除外)',t:qCT}].forEach(cf=>{const b=c('button');b.className='fE-mbn';b.innerText=cf.l;b.onclick=e=>{e.stopPropagation();cTC(cf.t,b,cf.l)};bR.appendChild(b)});const jR=c('button');jR.id='fE-mj';jR.innerText='元レスへ';jR.onclick=()=>{bg.remove();sv(da.el)};bR.appendChild(jR);co.appendChild(bR);const ct=cM_AB.has(rN)?Array.from(cM_AB.get(rN)).filter(n=>attrMap.get(n)==='B'):[];if(ct.length>0){const cA=c('div');cA.style.cssText='margin-top:12px';cA.innerHTML='<strong style="color:green;">引用一覧 (B):</strong>';ct.slice().sort((a,b)=>parseInt(a)-parseInt(b)).forEach(bN=>{const bD=aRM.get(bN);if(!bD)return;const cB=mkCB(100);const tD=c('div');tD.innerHTML=mkNo(bN)+bD.aL.map(toHL).join('<br>');cB.appendChild(mkJB(bD.el));addImg(cB,bD.el);cB.appendChild(tD);const cReplies=getCR(bN);if(cReplies.length>0)cB.appendChild(mkExp(cReplies));cA.appendChild(cB)});co.appendChild(cA);}md.appendChild(cl);md.appendChild(co);bg.appendChild(md);oW.appendChild(bg);bg.onclick=e=>{if(e.target===bg)bg.remove()}};const mkModal=()=>{const bg=c('div');bg.id='fE-mb';const md=c('div');md.id='fE-m';const co=c('div');co.id='fE-mco';return{bg,md,co}};const resetTmp=()=>{tmpB.forEach(rN=>{attrMap.delete(rN);cM_AB.forEach(s=>{s.delete(rN)})});tmpC.forEach(rN=>{attrMap.delete(rN);cM_BC.forEach(s=>{s.delete(rN)})});tmpB.clear();tmpC.clear()};const sV=()=>{sMR();const{bg,md,co}=mkModal();let iVS='',iVE='',iVF='',iVCon=false;const _vs=gLS('fEVS'),_ve=gLS('fEVE'),_vf=gLS('fEVF');if(_vs!==null)iVS=_vs;if(_ve!==null)iVE=_ve;if(_vf!==null)iVF=_vf;iVCon=gLS('fEVCon')==='1';const vH=c('div');vH.id='fE-vh';vH.style.cssText='display:flex;flex-direction:column;gap:8px;padding:10px;border-bottom:1px solid #800000;background:#F5F5DC';const r1=c('div');r1.style.cssText='display:flex;align-items:center;gap:8px';r1.innerHTML='<label style="font-size:14px;font-weight:bold">追加</label><input type="text" id="fE-vs" style="width:140px;border:1px solid #ccc;padding:5px 8px;font-size:14px" placeholder="追加..."><input type="checkbox" id="fE-vac" style="margin:0;width:18px;height:18px"><span id="fE-vc" style="font-size:14px;margin-left:auto;font-weight:bold;color:#800000"></span><button id="fE-vcb" style="cursor:pointer;font-weight:bold;border:none;background:transparent;margin-left:10px;color:#800000;font-size:14px">×閉じる</button>';const r2=c('div');r2.style.cssText='display:flex;align-items:center;gap:8px';r2.innerHTML='<label style="font-size:14px;font-weight:bold">絞込</label><input type="text" id="fE-vf" style="width:140px;border:1px solid #ccc;padding:5px 8px;font-size:14px" placeholder="絞込..."><label style="font-size:14px;font-weight:bold">除外</label><input type="text" id="fE-ve" style="width:140px;border:1px solid #ccc;padding:5px 8px;font-size:14px" placeholder="除外...">';vH.appendChild(r1);vH.appendChild(r2);const rVL=()=>{co.innerHTML='';const vS=g('fE-vs'),vE=g('fE-ve'),vF=g('fE-vf'),cH=g('fE-vac'),vC=g('fE-vc');sLS('fEVS',vS.value);sLS('fEVE',vE.value);sLS('fEVF',vF.value);sLS('fEVCon',cH.checked?'1':'0');tmpB.forEach(rN=>{attrMap.delete(rN);cM_AB.forEach(s=>{s.delete(rN)})});tmpC.forEach(rN=>{attrMap.delete(rN);acSet.delete(rN);cM_BC.forEach(s=>{s.delete(rN)})});tmpB.clear();tmpC.clear();let tS=new Set();attrMap.forEach((attr,rN)=>{if(attr!=='B')return;tS.add(rN)});if(cH&&cH.checked){const xK=vS.value.trim().split(/[\s ]+/).filter(k=>k);if(xK.length>0){const tmpBMap=new Map();aRM.forEach((da,rN)=>{const attr=attrMap.get(rN);if(attr==='A'||attr==='B')return;if(!hImg(da.el))return;const bq=da.el.querySelector('blockquote');if(bq){const T=c('div');T.innerHTML=bq.innerHTML.replace(/<br\s*\/?>/gi,'\n');if(xK.some(k=>T.innerText.includes(k))){attrMap.set(rN,'B');tmpB.add(rN);tS.add(rN);tmpBMap.set(rN,da)}}});aRM.forEach((da,rN)=>{if(attrMap.has(rN)&&attrMap.get(rN)!=='A')return;const refs=parseRefs(da.aL,tmpBMap,rN,true);if(refs.size===0)return;if(attrMap.get(rN)==='A'){acSet.add(rN);tmpC.add(rN);}else{attrMap.set(rN,'C');tmpC.add(rN);}refs.forEach(bN=>{mAdd(cM_BC,bN,rN)})});}}const vwE=vE.value.trim().split(/[\s ]+/).filter(k=>k);if(vwE.length>0){let fSet=new Set();tS.forEach(cN=>{const cD=aRM.get(cN);if(!cD)return;if(!vwE.some(e=>cD.aL.join('\n').includes(e)))fSet.add(cN)});tS=fSet}const vwF=vF.value.trim().split(/[\s ]+/).filter(k=>k);if(vwF.length>0){let fSet=new Set();tS.forEach(cN=>{const cD=aRM.get(cN);if(!cD)return;if(vwF.some(f=>cD.aL.join('\n').includes(f)))fSet.add(cN)});tS=fSet}vC.innerText='表示: '+tS.size+'件';Array.from(tS).sort((A,B)=>parseInt(A)-parseInt(B)).forEach(cN=>{const cD=aRM.get(cN);if(!cD)return;const cB=c('div');cB.style.cssText='background:#F0E0D6;border:1px solid #800000;padding:10px;margin-bottom:10px;display:flow-root;font-size:14px;color:#800000;min-height:100px;position:relative';cB.appendChild(mkJB(cD.el));addImg(cB,cD.el);let fL='';if(cH&&cH.checked){const bq=cD.el.querySelector('blockquote');if(bq){const T=c('div');T.innerHTML=bq.innerHTML.replace(/<br\s*\/?>/gi,'\n');const _hw=iT(hI).split(/[\s ]+/).filter(k=>k);fL=T.innerText.split('\n').map(l=>{let s=l.trim();return hlText(toHL(s),_hw)}).join('<br>')}}else{fL=cD.aL.map(toHL).join('<br>')}const tD=c('div');tD.innerHTML=mkNo(cN)+fL;cB.appendChild(tD);const cReplies=getCR(cN);if(cReplies.length>0)cB.appendChild(mkExp(cReplies));co.appendChild(cB)})};md.appendChild(vH);md.appendChild(co);bg.appendChild(md);oW.appendChild(bg);const vSE=g('fE-vs'),vEE=g('fE-ve'),vFE=g('fE-vf'),cHE=g('fE-vac');vSE.value=iVS;vEE.value=iVE;vFE.value=iVF;cHE.checked=iVCon;const updG=()=>{const on=cHE.checked;vSE.disabled=!on;vSE.style.background=!on?'#eee':'#fff';};cHE.onchange=()=>{updG();rVL()};g('fE-vcb').onclick=()=>{resetTmp();bg.remove()};bg.onclick=e=>{if(e.target===bg){resetTmp();bg.remove()}};const pd=e=>{if(e.key==='Enter'){e.preventDefault();e.target.blur()}};vSE.onkeydown=pd;vSE.onblur=()=>rVL();[vEE,vFE].forEach(el=>{el.onkeydown=e=>{if(e.key==='Enter'){e.preventDefault();rVL()}}});updG();rVL()};vB.onclick=sV; const rL=()=>{lA.innerHTML='';hE=[];hI_idx=0;const kS=iT(sI),eS=iT(eI),hS=iT(hI);c_kS=kS;c_eS=eS;c_hS=hS;sLS('fES',kS);sLS('fEE',eS);sLS('fEH',hS);if(!kS)return;const kw=kS.split(/[\s ]+/).filter(k=>k),hw=hS?hS.split(/[\s ]+/).filter(k=>k):[];sMR();const fg=d.createDocumentFragment();aRM.forEach((da,rN)=>{if(attrMap.get(rN)!=='A')return;let dT=hlText(da.cT,hw);const ct=cM_AB.has(rN)?Array.from(cM_AB.get(rN)):[];if(ct.length>0)dT+='<span class="fE-cc">引用('+ct.length+')</span>';const ctE=c('div');ctE.className='fE-ic';const cpB=c('button');cpB.className='fE-cb';cpB.innerText='❏';cpB.onclick=e=>{e.stopPropagation();const qCT=toQ(da.cT);cTC(qCT,cpB,'❏')};const it=c('div');it.className='fE-i';it.dataset.rn=rN;const rnSpan=c('span');rnSpan.className='fE-rn';rnSpan.innerHTML='No.'+rN;it.appendChild(rnSpan);const bodySpan=c('span');bodySpan.innerHTML=(hImg(da.el)?'⧉ ':'')+dT;it.appendChild(bodySpan);it.onclick=()=>sM(rN);ctE.appendChild(cpB);ctE.appendChild(it);fg.appendChild(ctE)});lA.appendChild(fg);hE=Array.from(lA.querySelectorAll('.fE-hl'));if(fltOn)applyFlt();fetchSd()}; const fetchSd=()=>{if(!d.querySelector('a.sod[data-sno]'))return;const res=d.querySelector('.thre')?.getAttribute('data-res');if(!res)return;const board=location.pathname.split('/')[1];fetch('/'+board+'/futaba.php?mode=json&res='+res+'&start=0&'+Math.random()).then(r=>r.json()).then(({sd})=>{if(!sd)return;Object.entries(sd).forEach(([rN,val])=>{const i=parseInt(val,10);if(!i)return;const t='そうだねx'+i;const el=d.querySelector('a.sod[data-sno="'+rN+'"]');if(el&&el.textContent!==t)el.innerHTML=t;});}).catch(()=>{})}; let fltOn=false,scThread=false,scSide=false;const mkScBtn=(label,getF,setF)=>{const b=c('button');b.innerText=label+':OFF';b.style.cssText='cursor:pointer;background:var(--fE-bg);border:1px solid var(--fE-brd);color:var(--fE-txt);padding:2px 6px;font-size:11px;white-space:nowrap';b.onclick=()=>{const v=!getF();setF(v);b.innerText=label+(v?':ON':':OFF');b.classList.toggle('fE-on',v)};return b};const scThreadBtn=mkScBtn('スレ↓',()=>scThread,v=>{scThread=v;if(v)window.scrollTo(0,1e9)});const scSideBtn=mkScBtn('サイド↓',()=>scSide,v=>{scSide=v;if(v)lA.scrollTop=1e9});acRow.appendChild(scThreadBtn);acRow.appendChild(scSideBtn);const sepLbl=c('span');sepLbl.style.cssText='font-size:11px;color:var(--fE-txt);margin-left:4px;flex-shrink:0';sepLbl.innerText='間隔:';acRow.appendChild(sepLbl);aiInput.style.cssText='width:48px;font-size:11px;border:1px solid var(--fE-brd);background:var(--fE-bg);color:var(--fE-txt);padding:1px 3px';aiLabel.style.cssText='font-size:11px;flex-shrink:0;color:var(--fE-txt)';acRow.appendChild(aiInput);acRow.appendChild(aiLabel);hd.appendChild(autoCfg);const applyFlt=()=>{aRM.forEach((da,rN)=>{const attr=attrMap.get(rN);const isABC=attr==='A'||attr==='B'||attr==='C'||acSet.has(rN);const isImg=hImg(da.el);da.el.closest('table')&&(da.el.closest('table').style.display=(isABC||isImg)?'':'none')})};const clearFlt=()=>{aRM.forEach(da=>{const t=da.el.closest('table');if(t)t.style.display=''})};const fltBtn=g('fE-flt');if(fltBtn)fltBtn.onclick=()=>{fltOn=!fltOn;fltBtn.innerText='耳栓:'+(fltOn?'ON':'OFF');fltBtn.classList.toggle('fE-on',fltOn);if(fltOn)applyFlt();else clearFlt()};cfg.addEventListener('keydown',e=>{if(e.key==='Enter'&&(e.target.classList.contains('fE-ib'))){e.preventDefault();rL()}});setTimeout(rL,500)})();