1(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([["29612"],{15243(e,t,r){Promise.resolve().then(r.bind(r,44031)),Promise.resolve().then(r.bind(r,1814)),Promise.resolve().then(r.bind(r,92661)),Promise.resolve().then(r.bind(r,99721)),Promise.resolve().then(r.bind(r,69803)),Promise.resolve().then(r.bind(r,74388)),Promise.resolve().then(r.bind(r,7748)),Promise.resolve().then(r.bind(r,83222)),Promise.resolve().then(r.bind(r,1361)),Promise.resolve().then(r.bind(r,90698)),Promise.resolve().then(r.bind(r,4859)),Promise.resolve().then(r.bind(r,81851)),Promise.resolve().then(r.bind(r,70220)),Promise.resolve().then(r.bind(r,2271)),Promise.resolve().then(r.bind(r,13142)),Promise.resolve().then(r.bind(r,68053)),Promise.resolve().then(r.bind(r,67518)),Promise.resolve().then(r.bind(r,14852)),Promise.resolve().then(r.bind(r,52898)),Promise.resolve().then(r.bind(r,51756)),Promise.resolve().then(r.bind(r,14937)),Promise.resolve().then(r.bind(r,16079)),Promise.resolve().then(r.bind(r,57643)),Promise.resolve().then(r.bind(r,22607)),Promise.resolve().then(r.bind(r,20249)),Promise.resolve().then(r.bind(r,83836)),Promise.resolve().then(r.bind(r,75547)),Promise.resolve().then(r.bind(r,61642)),Promise.resolve().then(r.bind(r,55338)),Promise.resolve().then(r.bind(r,598))},1814(e,t,r){"use strict";r.d(t,{BizErrorPage:()=>s});var n=r(27181),i=r(77382);let s=({bizMessage:e,status:t})=>{let r=(0,i.c)("error");return(0,n.jsx)("div",{className:"center flex min-h-[calc(100vh-10rem)] flex-col",children:(0,n.jsxs)("h2",{className:"mb-5 flex flex-col gap-2 text-center",children:[(0,n.jsx)("p",{children:r("biz_error_title")}),(0,n.jsx)("p",{children:r("biz_error_http_status",{status:String(t)})}),(0,n.jsx)("p",{children:r("biz_error_message",{message:e})})]})})}},92661(e,t,r){"use strict";r.r(t),r.d(t,{HeaderHideBg:()=>s});var n=r(36537),i=r(85913);let s=()=>{let e;return e=(0,i.UX)(),(0,n.useEffect)(()=>(e(!1),()=>{e(!0)}),[]),null}},85913(e,t,r){"use strict";r.d(t,{BX:()=>d,GO:()=>c,S:()=>o,UX:()=>u});var n=r(17328),i=r(74168),s=r(72103),l=r(61951);let a=(0,n.eU)(!0),o=()=>(0,i.useAtomValue)(a),u=()=>(0,i.useSetAtom)(a),c=()=>1-d(),d=()=>{let e=(0,s.al)(),t=o()||e;return(0,l.CS)(e=>e<197?0:t?e>=247?1:Math.floor((e-197)/50*100)/100:0,[t])}},99721(e,t,r){"use strict";r.r(t),r.d(t,{Presence:()=>L});var n=r(27181),i=r(68533),s=r(77876),l=r(70413),a=r(9209),o=r(74168),u=r(74318),c=r(99300),d=r(13980),m=r(77382),f=r(36537),h=r(82259),v=r(32776),p=r(42848),b=r(44314),x=r(40099),g=r(40920),y=r(72103),j=r(49604),k=r(68053),C=r(37093),P=r(27508),N=r(58294),w=r(38678),_=r(90485),E=r(330),M=r(20538),R=r(17895),T=r(71518),A=r(47108),S=r(26964),D=r(50225),I=r(66028),O=r(67695),z=r(69803);let L=()=>(0,w.D)()?(0,n.jsx)(V,{}):null,F=(0,u.tG)((0,A.r)("presence-name"),""),V=()=>{let e,{roomName:t}=(0,z.useRoomContext)(),r=(0,y.al)(),{refetch:i}=(0,a.useQuery)({...D.P.activity.presence(t),refetchOnMount:!0,refetchInterval:3e4}),s=(0,g.OH)(),l=(0,b.r8)(),u=(0,p.pV)(),c=(0,p.pq)(),d=(e=globalThis?.localStorage.getItem(`${O.jE}author`))?(0,R.j)(e)||e:"",m=(0,o.useAtomValue)(F),v=(0,f.useMemo)(()=>c?u?.name:l?.name||m||d||"",[d,c,u?.name,m,l?.name]),x=(0,h.YQ)(async e=>{let r=await I.socketWorker.getSid();if(r)return S.uE.activity.updatePresence({identity:s,position:e,sid:r,roomName:t,displayName:v||void 0,readerId:l?.id,ts:(0,j.F)().getTime()||Date.now()})},1e3),k=(0,E.d)(),P=(0,N.D)(()=>x(k));return((0,f.useEffect)(()=>{let e=()=>{i(),P()};return globalThis.addEventListener(C.R.SocketConnected,e),()=>{globalThis.removeEventListener(C.R.SocketConnected,e)}},[i,P]),(0,f.useEffect)(()=>{x(k)},[k,x]),r)?null:(0,n.jsx)(B,{})};function H(e){let t=e.some(e=>e.isCurrent),r=e.reduce((e,t)=>e+t.pct,0)/e.length;return{identities:t?[e.find(e=>e.isCurrent).identity,...e.filter(e=>!e.isCurrent).map(e=>e.identity)]:e.map(e=>e.identity),position:r,hasCurrent:t,stableKey:e.map(e=>e.identity).sort()[0]}}let B=()=>{let e=(0,g.OH)(),t=(0,x.ax)(),[r,i]=(0,f.useState)(!1),{roomName:s}=(0,z.useRoomContext)(),l=(0,v.rt)(s),a=(0,v.e_)(),o=(0,E.d)(),u=(0,T.sb)(l),m=(0,f.useMemo)(()=>{let t=window.innerHeight-64-64;return function(e,t){if(0===e.length)return[];let r=18/t*100,n=[...e].sort((e,t)=>
1e.pct-t.pct),i=[],s=[n[0]];for(let e=1;e<n.length;e++)n[e].pct-s[0].pct<=r?s.push(n[e]):(i.push(H(s)),s=[n[e]]);return i.push(H(s)),i}(u.map(t=>({identity:t,pct:t===e?o:a[t]?.position??0,isCurrent:t===e})),t)},[u,a,o,e]);return(0,n.jsx)(k.RootPortal,{children:(0,n.jsx)(c.m.div,{"data-hide-print":!0,animate:{opacity:+!t},className:"fixed left-0 top-0 z-[3] h-screen w-8",style:{pointerEvents:t?"none":"auto"},transition:P.c7.presets.smooth,onMouseEnter:()=>i(!0),onMouseLeave:()=>i(!1),children:(0,n.jsxs)(c.m.div,{animate:{width:r?200:24},className:"relative h-full",transition:{type:"spring",stiffness:400,damping:35},children:[(0,n.jsx)(d.N,{children:r&&(0,n.jsx)(c.m.div,{animate:{opacity:1},className:"absolute inset-0 border-r border-border bg-neutral-1/95 backdrop-blur-sm",exit:{opacity:0},initial:{opacity:0},transition:{duration:.18}})}),(0,n.jsx)("div",{className:"absolute left-0 right-0",style:{top:64,bottom:64},children:(0,n.jsx)(d.N,{initial:!1,children:m.map(t=>(0,n.jsx)(U,{cluster:t,isExpanded:r,sessionId:e},t.stableKey))})})]})})})},U=(0,f.memo)(({cluster:e,isExpanded:t,sessionId:r})=>{let{identities:i,position:s,hasCurrent:l}=e,a=i.length,o=i[0],u=(0,v.YQ)(o),d=(0,_.Y)(),m=(0,f.useDeferredValue)(s),h=(0,f.useMemo)(()=>u?(0,M.T3)((0,M.Ny)(u.identity))[d?"dark":"light"].accent:"",[d,u]);return u?(0,n.jsx)(c.m.div,{animate:{top:`${m}%`,opacity:1},className:"absolute left-0 right-0",exit:{opacity:0},initial:{opacity:0}
1,style:{marginTop:-10},transition:{top:{type:"spring",stiffness:120,damping:20,mass:.8},opacity:{duration:.15}},children:(0,n.jsxs)("div",{className:"flex items-center",children:[(0,n.jsx)(c.m.div,{style:{backgroundColor:h},transition:{type:"spring",stiffness:380,damping:30},animate:{width:t?4:3,height:t?20:a>1?14:10,borderRadius:4*!!t,marginLeft:6*!!t,opacity:l?1:t?.85:.6}}),t&&(0,n.jsxs)(c.m.div,{animate:{opacity:1,x:0},className:"ml-2.5 flex items-center gap-2 overflow-hidden",exit:{opacity:0,x:-8},initial:{opacity:0,x:-8},transition:{type:"spring",stiffness:350,damping:28,delay:.04},children:[(0,n.jsxs)("div",{className:"flex items-center",children:[i.slice(0,3).map((e,t)=>(0,n.jsx)(Y,{identity:e,isCurrent:e===r,isDark:d,overlap:t>0,zIndex:a-t},e)),a>3&&(0,n.jsxs)("div",{className:"-ml-1.5 flex size-[18px] shrink-0 items-center justify-center rounded-full text-caption-10 font-bold",style:{backgroundColor:h,color:"var(--fallback-b1)",zIndex:0},children:["+",a-3]})]}),(0,n.jsx)(G,{hasCurrent:l,identities:i,sessionId:r}),(0,n.jsxs)("span",{className:"text-label-12 tabular-nums text-neutral-9/40",children:[Math.round(m),"%"]})]})]})}):null});U.displayName="ClusterTimelineItem";let Y=(0,f.memo)(({identity:e,isCurrent:t,isDark:r,zIndex:a,overlap:o})=>{let u=(0,m.c)("activity"),c=(0,v.YQ)(e),d=(0,b.b5)(c?.readerId||""),h=(0,f.useMemo)(()=>c?(0,M.T3)((0,M.Ny)(c.identity))[r?"dark":"light"].accent:"#888",[r,c]);if(!c)return null;let p=d?.name||c.displayName||u(t?"presence_you":"presence_reader"),x={zIndex:a,...o?{marginLeft:"-6px"}:{}};return d?.image?(0,n.jsxs)(i.C,{className:"size-[18px] shrink-0 overflow-hidden rounded-full ring-1 ring-border/30",style:x,children:[(0,n.jsx)(s.B,{alt:p,src:d.image}),(0,n.jsx)(l.q,{className:"text-caption-10 font-semibold",style:{backgroundColor:h,color:"var(--fallback-b1)"},children:p[0]})]}):(0,n.jsx)("div",{className:"flex size-[18px] shrink-0 items-center justify-center rounded-full",style:{backgroundColor:h,...x},children:t&&(0,n.jsx)("span",{className:"text-caption-10 font-bold",style:{color:"var(--fallback-b1)"},children:u("presence_me")})})});Y.displayName="ClusterAvatar";let G=(0,f.memo)(({identities:e,sessionId:t,hasCurrent:r})=>{let i=(0,m.c)("activity"),s=(0,v.e_)(),l=(0,b.Tk)(),a=(0,f.useMemo)(()=>{let n=e.length;if(0===n)return"";let a=e.filter(e=>e===t||(e=>{if(e===t)return!1;let r=s[e];if(!r)return!1;if(r.displayName?.trim())return!0;let n=r.readerId;return!!(n&&l[n]?.name)})(e));if(0===a.length&&!r)return 1===n?i("presence_reader"):i("presence_anonymous_readers",{count:n});let o=a.slice(0,2),u=o.map(e=>{if(e===t)return i("presence_you");let r=s[e],n=r?.readerId,a=n?l[n]:void 0;return a?.name||r?.displayName?.trim()||""}).filter(e=>e.length>0),c=e.length-o.length,d=u.join(i("presence_list_sep"));return c>0&&(d+=u.length>=2?i("presence_and_others_after_two",{count:c}):i("presence_and_others_after_one",{count:c})),d},[r,e,s,l,t,i]);return(0,n.jsx)("span",{className:`whitespace-nowrap text-label-12 font-semibold leading-none ${r?"text-neutral-9":"text-neutral-9/80"}`,children:a})});G.displayName="ClusterNames"},69803(e,t,r){"use strict";r.r(t),r.d(t,{RoomProvider:()=>c,useMaybeInRoomContext:()=>m,useRoomContext:()=>d});var n=r(27181),i=r(36537),s=r(32776),l=r(40920),a=r(66028),o=r(83e3);let u=(0,i.createContext)(null),c=({roomName:e,children:t})=>{let r=(0,l.ps)(),c=(0,l.OH)(),d=(0,i.useMemo)(()=>({roomName:e}),[e]),m=(0,s.Yc)();return(0,i.useEffect)(()=>{if(r)return a.socketWorker.emit(o.k.Join,{roomName:e}),()=>{a.socketWorker.emit(o.k.Leave,{roomName:e}),m(c)}},[e,r,c,m]),(0,n.jsx)(u,{value:d,children:t})},d=()=>{let e=(0,i.use)(u);if(!e)throw Error("useRoomContext must be used within RoomProvider");return e},m=()=>(0,i.use)(u)},7748(e,t,r){"use strict";r.d(t,{TocFAB:()=>f});var n=r(27181),i=r(77382),s=r(36537),l=r(59420),a=r(67366),o=r(19783),u=r(93263),c=r(33913),d=r
1(83222),m=r(88629);let f=()=>{let e=(0,i.c)("common"),{present:t}=(0,a.rs)(),[r,f]=(0,c.C)(),[h,v]=(0,s.useState)();(0,s.useEffect)(()=>{let e=()=>{(0,s.startTransition)(()=>{r()})};return document.addEventListener(u.v.RefreshToc,e),()=>{document.removeEventListener(u.v.RefreshToc,e)}},[r]);let p=(0,d.j)(),b=(0,s.useCallback)(()=>{let e=document.getElementById(o.e);e?v(p(e)):v(void 0)},[p]);(0,s.useEffect)(()=>{let e=requestAnimationFrame(()=>{b()});return()=>cancelAnimationFrame(e)},[b,f]);let x=(0,s.useCallback)(()=>{t({title:e("toc_title"),clickOutsideToDismiss:!0,content:({dismiss:e})=>(0,n.jsx)(m.F,{scrollInNextTick:!0,$headings:h,className:"max-h-full space-y-3 overflow-y-auto [&>li]:py-1",grouping:!1,onItemClick:()=>{e()}})})},[h,t,e]);return h?.length?(0,n.jsx)(l.fr,{"aria-label":e("aria_toc"),title:e("toc_title"),onClick:x,children:(0,n.jsx)("i",{className:"i-mingcute-list-expansion-line"})}):null}},59420(e,t,r){"use strict";r.d(t,{rH:()=>y,fr:()=>g});var n=r(27181),i=r(72103),s=r(61951),l=r(83273),a=r(94354),o=r(17328),u=r(74168),c=r(13980),d=r(99300),m=r(77382),f=r(36537),h=r(17895),v=r(69372),p=r(68053);let b=(0,o.eU)(null),x=(0,a.u)((e,t)=>{let r=(0,m.c)("common"),{children:i,show:s=!0,...l}=e,{className:a,...o}=l;return(0,n.jsx)(c.N,{initial:!1,children:s&&(0,n.jsx)(d.m.div,{className:"mt-2 overflow-hidden",style:{transformOrigin:"right center"},animate:{opacity:1,width:48},exit:{opacity:0,width:0},initial:{opacity:0,width:0},transition:{duration:.28,ease:[.22,1,.36,1]},children:(0,n.jsx)(d.m.button,{"aria-label":o["aria-label"]||r("aria_fab"),ref:t,whileTap:{scale:.97},className:(0,h.c)("group relative flex h-14 w-12 items-center justify-center overflow-hidden rounded-l-2xl border border-r-0 pr-1","border-black/8 bg-paper/95 text-neutral-6","transition-colors duration-200 ease-[cubic-bezier(0.22,1,0.36,1)]","hover:bg-black/[0.02] hover:text-neutral-9","active:bg-black/[0.04]","focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-black/10","dark:border-white/10 dark:bg-paper/95 dark:text-neutral-4 dark:hover:bg-white/4 dark:hover:text-neutral-1 dark:active:bg-white/6 dark:focus-visible:ring-white/12",a),...o,children:(0,n.jsx)("span",{className:"relative flex text-copy-16 opacity-75 transition-opacity duration-200 group-hover:opacity-100",children:i})})})})}),g=(0,a.u)((e,t)=>{let{onClick:r,children:s,show:l=!0,...a}=e,o=(0,f.useId)(),c=(0,u.useAtomValue)(b,{store:v.Z});return(0,i.al)()&&c?(0,n.jsx)(p.RootPortal,{to:c,children:(0,n.jsx)(x,{id:o,ref:t,show:l,onClick:r,...a,children:s})}):null}),y=e=>{let t=(0,i.al)(),r=(0,f.useCallback)(e=>v.Z.set(b,e),[]);(0,f.useEffect)(()=>{t||v.Z.set(b,null)},[t]);let a=(0,s.Um)(e=>t&&"down"===e,[t]);return t?(0,n.jsx)(d.m.div,{"data-hide-print":!0,"data-testid":"fab-container",initial:!1,ref:r,animate:{opacity:+!a,y:12*!!a,pointerEvents:a?"none":"auto"},className:(0,l.A)("fixed bottom-[calc(5rem+env(safe-area-inset-bottom))] right-[max(0px,env(safe-area-inset-right))] z-[9] flex flex-col items-end overflow-x-clip"),transition:{duration:.3,ease:[.22,1,.36,1]},children:e.children}):null}},83836(e,t,r){"use strict";r.d(t,{OnlyMobile:()=>s});var n=r(72103),i=r(38678);let s=({children:e})=>{let t=(0,i.D)(),r=(0,n.al)();return t&&r?e:null}},82259(e,t,r){"use strict";r.d(t,{YQ:()=>i});var n=r(36537);function i(e,t,r,i){var s=this,l=(0,n.useRef)(null),a=(0,n.useRef)(0),o=(0,n.useRef)(0),u=(0,n.useRef)(null),c=(0,n.useRef)([]),d=(0,n.useRef)(),m=(0,n.useRef)(),f=(0,n.useRef)(e),h=(0,n.useRef)(!0),v=(0,n.useRef)(),p=(0,n.useRef)();f.current=e;var b="undefined"!=typeof window,x=!t&&0!==t&&b;if("function"!=typeof e)throw TypeError("Expected a function");t=+t||0;var g=!!(r=r||{}).leading,y=!("trailing"in r)||!!r.trailing,j=!!r.flushOnExit&&y,k="maxWait"in r,C="debounceOnServer"in r&&!!r.debounceOnServer,P=k?Math.max(+r.maxWait||0,t):null,N=(0,n.useMemo)(function(){var e=function(e){var t=c.current,r=d.current;return c.current=d.current=null,a.current=e,o.current=o.current||e,m.current=f.current.apply(r,t)},r=function(e,t){x&&cancelAnimationFrame(u.current),u.current=x?requestAnimationFrame(e):setTimeout(e,t)},n=function(e){if(!h.current)return!1;var r=e-l.current;return!l.current||r>=t||r<0||k&&e-a.current>=P},N=function(t){return u.current=null,y&&c.current?e(t):(c.current=d.current=null,m.current)},w=function e(){var i=Date.now();if(g&&o.current===a.current&&_(),n(i))return N(i);if(h.current){var s=t-(i-l.current);r(e,k?Math.min(s,P-(i-a.current)):s)}},_=function(){i&&i({})},E=function(){if(b||C){var i,o=Date.now(),f=n(o);if(c.current=[].slice.call(arguments),d.current=s,l.current=o,j&&!v.current&&(v.current=function(){var e;"hidden"===(null==(e=globalThis.document)?void 0:e.visibilityState)&&p.current.flush()},null==(i=globalThis.document)||null==i.addEventListener||i.addEventListener("visibilitychange",v.current)),f){if(!u.current&&h.current)return a.current=l.current,r(w,t),g?e(l.current):m.current;if(k)return r(w,t),e(l.current)}return u.current||r(w,t),m.current}};return E.cancel=function(){var e=u.current;e&&(x?cancelAnimationFrame(u.current):clearTimeout(u.current)),a.current=0,c.current=l.current=d.current=u.current=null,e&&i&&i({})},E.isPending=function(){return!!u.current},E.flush=function(){return u.current?N(Date.now()):m.current},E},[g,k,t,P,y,j,x,b,C,i]);return p.current=N,(0,n.useEffect)(function(){return h.current=!0,function(){var e;j&&p.current.flush(),v.current&&(null==(e=globalThis.document)||null==e.removeEventListener||e.removeEventListener("visibilitychange",v.current),v.current=null),h.current=!1}},[j]),N}},94354(e,t,r){"use strict";r.d(t,{u:()=>n});let n=r(36537).forwardRef},1627(e,t,r){"use strict";r.d(t,{a:()=>p,c:()=>m});
1var n=r(27181),i=r(36537),s=r(82362),l=r(17328),a=r(74168),o=r(74318),u=r(55274);let c=Object.freeze([]),d=()=>{},m=()=>{let e=(0,i.createContext)(null),t=(0,l.eU)(null),r=(0,i.memo)(r=>{var n,s;let l,{data:o,children:u}=r,c=(0,a.useSetAtom)(null!=(n=(0,i.useContext)(e))?n:t);return s=()=>{c(o)},(l=(0,i.useRef)(!1)).current||(l.current=!0,null==s||s()),(0,i.useEffect)(()=>{c(o)},[o]),(0,i.useEffect)(()=>(c(o),()=>{c(null)}),[]),u});return r.displayName="ModelDataProvider",{ModelDataAtomProvider:r=>{let{children:i,overrideAtom:s}=r;return(0,n.jsx)(e.Provider,{value:null!=s?s:t,children:i})},ModelDataProvider:r,useModelDataSelector:(r,n)=>{var s;return(0,a.useAtomValue)((0,o.mg)(null!=(s=(0,i.useContext)(e))?s:t,(0,i.useCallback)(e=>e?r(e):null,n||c)))},useSetModelData:()=>{var r;return(0,a.useSetAtom)(null!=(r=(0,i.useContext)(e))?r:t)},useGetModelData:()=>{var r;let n=null!=(r=(0,i.useContext)(e))?r:t,s=(0,a.useStore)();return()=>s.get(n)},useModelData:()=>{var r;return(0,a.useAtomValue)(null!=(r=(0,i.useContext)(e))?r:t)},setGlobalModelData:e=>{let r=(0,u.g)();r.set(t,(0,s.jM)(r.get(t),e))},getGlobalModelData:()=>(0,u.g)().get(t),ModelDataAtomContext:e}},f=Symbol("ATOMS_CONTEXT"),h=(0,u.g)(),v={get:h.get,set:h.set},p=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:d,r=(0,i.createContext)(e),s=t({...v,atoms:e}),l=(0,i.createContext)(s),o=(0,i.createContext)(null),u={ActionsContext:l,AtomsContext:r,actionsFactory:t},c=()=>(0,i.useContext)(r),m=[s=>{let c,{children:d}=s,m=(c=(0,a.useStore)(),(0,i.useMemo)(()=>({get:c.get,set:c.set,atoms:e}),[c,e])),f=(0,i.useMemo)(()=>t(m),[t,m]);return(0,n.jsx)(r.Provider,{value:e,children:(0,n.jsx)(l.Provider,{value:f,children:(0,n.jsx)(o.Provider,{value:u,children:d})})})},[c,e=>(0,a.useAtomValue)(c()[e]),()=>(0,i.useContext)(l)],e,s];return Reflect.defineProperty(m,f,{value:o,writable:!1,enumerable:!1}),m}}},function(e){e.O(0,["12490","1284","13607","1381","14365","14861","1654","16674","19290","19754","20216","23371","2341","25172","26635","27169","29508","3037","31384","32548","354
115","35694","35852","36123","36139","37322","38313","38921","39109","40399","40804","40929","43088","43400","44096","44445","44534","44970","45095","47252","48269","48891","49383","49908","49941","50478","56966","5747","58089","59948","69178","69572","70604","70823","71266","71382","73046","73650","73780","75716","83049","83753","84112","85714","86893","87072","89186","90236","92710","92829","93597","94920","96502","97763","98632","9887"],function(){return e(e.s=15243)}),_N_E=e.O()}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.