1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8499],{88499:(e,r,t)=>{t.d(r,{AT:()=>V,LX:()=>_,a_:()=>U});var l=t(14232),n=t(56803),a=t(34001),o=t(59688),i=t(5824);let s=(e,r,t)=>"".concat(e," ").concat(e>1?t:r),u=e=>{var r,t,l;let n=null!=(l=null!=(t=null==e?void 0:e.jobId)?t:null==e?void 0:e.id)?l:null==e||null==(r=e.summary)?void 0:r.jobId;return n?String(n):null},c=e=>!!e&&Number.isFinite(e.total),d="completed",f="downloading",g=null,p="empara-dl-batch",w="empara-dl-suspended",y=new Set,h=new Map,m=e=>(e.completed||0)>=(e.total||0);async function S(e){let r=await Promise.allSettled(e.map(e=>a.w.retryJob(e)));for(let e of r)"fulfilled"===e.status&&k(e.value);r.some(e=>"rejected"===e.status)&&o.oR.error("Impossible de relancer ce t\xe9l\xe9chargement pour le moment.")}async function b(){let e;if(0===y.size)return;try{e=await a.w.getJobs()}catch(e){console.error("[useOfflineDownloads] Lots illisibles pour le bilan:",e);return}let r=Array.isArray(e)?e:[];if(!r.every(e=>null==e?void 0:e.isSettled)||a.w.suspension)return;let t=new Map;for(let e of r){let r=u(e);r&&c(e)&&t.set(r,e)}let l=[];for(let e of y){let r=t.get(e)||h.get(e);r&&l.push({jobId:e,summary:r})}if(0!==l.length)for(let{jobId:e}of((0,i.JK)()&&function(e){let r,t=e.filter(e=>(e.total||0)>0);if(0===t.length)return;let{total:l,completed:n,missing:i}=function(e){let r=new Set,t=new Map,l=0,n=0;for(let o of e){let e=function(e){var r,t;let l=null==(t=a.w.jobs)||null==(r=t[e])?void 0:r.videoIds;return Array.isArray(l)?l.map(String):null}(o.jobId);if(e)for(let t of e)r.add(t);else l+=o.total||0,n+=o.completed||0;for(let r of Array.isArray(o.missing)?o.missing:[]){let l=(null==r?void 0:r.videoId)?String(r.videoId):Symbol("sans-id"),n=t.get(l);n?e&&(n.known=!0):t.set(l,{entry:r,known:!!e})}}let o=0,i=0,s=[];for(let[e,{entry:l,known:n}]of t)s.push(l),n&&("string"==typeof e?(r.add(e),o+=1):i+=1);return{total:r.size+i+l,completed:r.size-o+n,missing:s}}(t),u=1===t.length?t[0]:null,c=null!==u&&("video"===u.scope||u.total<=1),d=(null==u?void 0:u.label)||"Ce contenu";if(t.every(m))return o.oR.success(c?'"'.concat(d,'" est disponible hors-ligne.'):"".concat(s(n,"vid\xe9o disponible","vid\xe9os disponibles")," hors-ligne."),{id:p});let f=Math.max(0,l-n),g=function(e){let r=Array.isArray(e)?e:[],t=[];for(let e of r){let r=String((null==e?void 0:e.title)||"").trim();if(r&&(t.push(r),3===t.length))break}if(0===t.length)return"";let l=r.length-t.length,n=t.join(", ");return l>0?"".concat(n," et ").concat(s(l,"autre","autres")):n}(i);r=c?'"'.concat(d,"\" n'a pas pu \xeatre t\xe9l\xe9charg\xe9e."):u?g?'"'.concat(d,'" : ').concat(n," sur ").concat(l," t\xe9l\xe9charg\xe9es. Manquent : ").concat(g,"."):'"'.concat(d,'" : ').concat(n," sur ").concat(l," t\xe9l\xe9charg\xe9es, ").concat(f," en \xe9chec."):g?"".concat(n," sur ").concat(l," vid\xe9os t\xe9l\xe9charg\xe9es. Manquent : ").concat(g,"."):"".concat(n," sur ").concat(l," vid\xe9os t\xe9l\xe9charg\xe9es, ").concat(f," en \xe9chec.");let w=t.filter(e=>!m(e)&&(e.total||0)-(e.completed||0)-(e.unavailable||0)>0).map(e=>String(e.jobId));o.oR.error(r,{id:p,duration:12e3,...w.length>0?{action:{label:"R\xe9essayer",onClick:()=>S(w)}}:{}})}(l.map(e=>e.summary)),l))y.delete(e),h.delete(e)}let v=null,C=!1;function R(){return v?(C=!0,v):v=(async()=>{do C=!1,await b();while(C)})().catch(e=>{console.error("[useOfflineDownloads] Bilan de t\xe9l\xe9chargement en erreur:",e)}).finally(()=>{v=null})}function k(e){if(!(0,i.JK)())return;let r=u(e);r&&c(e)&&(y.add(r),e.isSettled&&(h.set(r,e),R()))}function I(e){let r=null==e?void 0:e.type,t=(null==e?void 0:e.jobId)?String(e.jobId):null;if("job_settled"===r){if(!t||!y.has(t))return;c(e.summary)&&h.set(t,e.summary),R();return}if("queue_state"===r){if(e.ownerChanged){y.clear(),h.clear();return}if(e.cancelled){t&&(y.delete(t),h.delete(t)),R();return}if("suspended"in e)if(e.suspended){if((0,i.JK)()){let r=e.suspended.message||"Espace de stockage insuffisant";o.oR.error("".concat(r,". Les t\xe9l\xe9chargements sont en pause : lib\xe9rez de l'espace, puis relancez le t\xe9l\xe9chargement."),{id:w,duration:12e3})}}else o.oR.dismiss(w),R()}}
1let A=!1,D=null,M=null,J=Symbol("quality-no-choice"),E=Symbol("quality-cancelled"),O=null,P=new Set,q=0;function K(){let e=null!==O;for(let r of P)try{r(e)}catch(e){console.error("[useOfflineDownloads] Abonn\xe9 au prompt de qualit\xe9 en erreur:",e)}}function j(e){let r=O;O=null,r&&r.resolve(null==e?E:e),K()}function _(){q+=1,O&&K()}function V(){if(0===(q=Math.max(0,q-1))&&O){let e=O;O=null,e.resolve(J),K()}}function z(e,r){if(e===r)return!0;if(e.size!==r.size)return!1;for(let t of e)if(!r.has(t))return!1;return!0}function L(e){let r=new Set;for(let t of(null==e?void 0:e.missing)||[])(null==t?void 0:t.videoId)&&r.add(String(t.videoId));return r}function B(e,r){for(let t of e)if(r.has(t))return!0;return!1}async function N(){let{courseId:e=null,chapterId:r=null}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=[];try{t=await n.offlineMediaStorage.getAllDownloadedVideos()}catch(e){return console.error("[useOfflineDownloads] Index local illisible avant suppression:",e),new Set}let l=new Set;for(let n of Array.isArray(t)?t:[])(null==n?void 0:n.videoId)&&n.status!==d&&(!e||String(n.courseId)===String(e))&&(r&&String(n.chapterId)!==String(r)||l.add(String(n.videoId)));return l}async function x(e){let r=[];try{r=await n.offlineMediaStorage.getAllDownloadedVideos()}catch(e){console.error("[useOfflineDownloads] Index local illisible avant suppression:",e)}return function(e,r){let t=Array.isArray(e)?e:[],l=new Set(r.map(String));for(let e of[e=>"".concat(null==e?void 0:e.courseId,"::").concat(null==e?void 0:e.chapterId),e=>"".concat(null==e?void 0:e.courseId)]){let r=new Map;for(let l of t){let t=(null==l?void 0:l.videoId)!=null?String(l.videoId):"";if(!t)continue;let n=e(l),a=r.get(n);a||(a={onDisk:[],pending:[]},r.set(n,a)),l.status===d?a.onDisk.push(t):l.status!==f&&a.pending.push(t)}let n=new Set(l);for(let e of r.values())if(0!==e.onDisk.length&&0!==e.pending.length&&e.onDisk.every(e=>l.has(e)))for(let r of e.pending)n.add(r);l=n}return l}(r,e)}let T={emparaBytes:0,emparaMB:0,emparaGB:0,totalDeviceGB:0,freeDeviceGB:0,totalVideosCount:0,isEstimateReliable:!1};function G(e){try{if(!(0,i.JK)())return;let r=String((null==e?void 0:e._id)||(null==e?void 0:e.id)||"");if(!r)return;let l=String((null==e?void 0:e.url)||(null==e?void 0:e.slug)||"");t.e(5698).then(t.bind(t,95698)).then(e=>{let{captureCourseSnapshot:t}=e;return t({courseId:r,slug:l||null,allowNetwork:!0})}).catch(e=>{console.warn("[useOfflineDownloads] Snapshot de cours non captur\xe9:",e)})}catch(e){console.warn("[useOfflineDownloads] Snapshot de cours non captur\xe9:",e)}}async function Q(){try{let e;if(!(0,i.JK)())return 0;let{listCourseSnapshots:r,deleteCourseSnapshot:l}=await t.e(5698).then(t.bind(t,95698)),a=await r();if(!Array.isArray(a)||0===a.length)return 0;try{e=await n.offlineMediaStorage.getAllDownloadedVideos()}catch(e){return console.warn("[useOfflineDownloads] Index local illisible : snapshots conserv\xe9s.",e),0}let o=new Set;for(let r of Array.isArray(e)?e:[])(null==r?void 0:r.courseId)&&o.add(String(r.courseId));let s=a.filter(e=>(null==e?void 0:e.courseId)&&!o.has(String(e.courseId)));if(0===s.length)return 0;return(await Promise.allSettled(s.map(e=>l(e.courseId)))).filter(e=>"fulfilled"===e.status&&e.value).length}catch(e){return console.warn("[useOfflineDownloads] Snapshots orphelins non purg\xe9s:",e),0}}function U(){let[e,r]=(0,l.useState)(()=>n.offlineMediaStorage.getCachedManifestSync()),[t,p]=(0,l.useState)(()=>(function(e){let r=new Set;if(Array.isArray(e)){for(let t of e)if(Array.isArray(t.chapters)){for(let e of t.chapters)if(Array.isArray(e.videos))for(let t of e.videos){let e=t.videoId||t.id||t._id;e&&r.add(String(e))}}}return r})(n.offlineMediaStorage.getCachedManifestSync())),[w,y]=(0,l.useState)(()=>new Set),[h,m]=(0,l.useState)({}),[S,b]=(0,l.useState)(()=>new Set),[v,C]=(0,l.useState)([]),[R,_]=(0,l.useState)([]),[V,U]=(0,l.useState)(()=>({...T,...n.offlineMediaStorage.getCachedStatsSync()})),[F,W]=(0,l.useState)(!1),[X,Y]=(0,l.useState)(!1),[H,Z]=(0,l.useState)(null),[$,ee]=(0,l.useState)("low"),[er,et]=(0,l.useState)(n.DEFAULT_DOWNLOAD_CONCURRENCY),[el,en]=(0,l.useState)([]),[ea,eo]=(0,l.useState)(()=>({isOpen:null!==O})),ei=(0,l.useRef)(!0),es=(0,l.useRef)(!1),eu=(0,l.useRef)(null);(0,l.useEffect)(()=>{let e=e=>{eo(r=>r.isOpen===e?r:{isOpen:e})};return P.add(e),e(null!==O),()=>{P.delete(e)}},[]),(0,l.useEffect)(()=>(ei.current=!0,()=>{ei.current=!1}),[]);let ec=(0,l.useCallback)(e=>{n.offlineMediaStorage.setDownloadQualityPreference(e),ee(e),o.oR.success("Pr\xe9f\xe9rence de qualit\xe9 enregistr\xe9e")},[]),ed=(0,l.useCallback)(e=>{let r=(0,n.clampDownloadConcurrency)(e);et(r);try{n.offlineMediaStorage.setDownloadConcurrencyPreference(r)}catch(e){console.error("[useOfflineDownloads] Pr\xe9f\xe9rence de simultan\xe9it\xe9 non enregistr\xe9e:",e)}a.w.setMaxConcurrent(r)},[]),ef=(0,l.useCallback)(()=>{j(null)},[]),eg=(0,l.useCallback)(e=>{j(e);try{n.offlineMediaStorage.setDownloadQualityPreference(e)}catch(e){console.error("[useOfflineDownloads] Pr\xe9f\xe9rence de qualit\xe9 non enregistr\xe9e:",e)}},[]),ep=(0,l.useCallback)(async()=>
1{if(!(0,i.JK)())return void Y(!0);es.current||W(!0);try{Z(null);let{grouped:e,all:t,stats:l}=await (D||(D=Promise.all([n.offlineMediaStorage.getGroupedDownloads(),n.offlineMediaStorage.getAllDownloadedVideos(),n.offlineMediaStorage.getStorageStats()]).then(e=>{let[r,t,l]=e;return{grouped:r,all:t,stats:l}}).finally(()=>{D=null})));if(!ei.current)return;r(e),U(l);let a=new Set,o=new Set,i=new Set,s=[],u=[],c={};for(let e of t){let r=String(e.videoId);e.status===d?(a.add(r),("native"===e.mediaStore||e.nativeAssetId)&&o.add(r)):e.status===f?(s.push(e),c[r]=e.progress||0):"error"===e.status?u.push(e):"queued"===e.status&&i.add(r)}p(e=>z(e,a)?e:a),y(e=>z(e,o)?e:o),m(c),C(s),_(u),b(e=>z(e,i)?e:i);let g=n.offlineMediaStorage.getDownloadQualityPreference();g&&ee(g),et(n.offlineMediaStorage.getDownloadConcurrencyPreference())}catch(e){console.error("[useOfflineDownloads] Erreur chargement:",e),ei.current&&Z(e)}finally{es.current=!0,ei.current&&(W(!1),Y(!0))}},[]);(0,l.useEffect)(()=>{if(!(0,i.JK)())return;ep();let e=n.offlineMediaStorage.subscribe(e=>{if("progress"===e.type){let r=String(e.videoId);m(t=>t[r]===e.progress?t:{...t,[r]:e.progress})}else"quality_preference_changed"===e.type?ee(e.quality):"concurrency_preference_changed"===e.type?et(e.concurrency):ep()});return()=>e()},[ep]);let ew=(0,l.useCallback)(async()=>{if((0,i.JK)())try{let e=await (M||(M=(async()=>{let e=await a.w.getJobs();return Promise.all((Array.isArray(e)?e:[]).map(async e=>{if(c(e))return e;let r=u(e);if(!r)return null;try{return await a.w.getJobSummary(r)}catch(e){return null}}))})().finally(()=>{M=null})));if(!ei.current)return;en(e.filter(c))}catch(e){console.error("[useOfflineDownloads] Erreur lecture des lots:",e)}},[]),ey=(0,l.useCallback)(()=>{eu.current||(eu.current=setTimeout(()=>{eu.current=null,ew()},400))},[ew]),eh=(0,l.useCallback)(async e=>{if(!e||!(0,i.JK)())return null;try{let r=await a.w.retryJob(e);return k(r),await ew(),r}catch(e){return o.oR.error("Impossible de relancer ce t\xe9l\xe9chargement pour le moment."),null}},[ew]);(0,l.useEffect)(()=>{if(!(0,i.JK)())return;(!g&&(A||(A=!0,a.w.subscribe(I)),g=a.w.start().catch(e=>{console.error("[useOfflineDownloads] D\xe9marrage de la file:",e),g=null})),g).then(()=>ew());let e=a.w.subscribe(()=>{ey()});return()=>{"function"==typeof e&&e(),eu.current&&(clearTimeout(eu.current),eu.current=null)}},[ew,ey]);let em=(0,l.useCallback)(async e=>{if(!e||!(0,i.JK)())return!1;try{return await a.w.cancelJob(e),await ew(),o.oR.success("T\xe9l\xe9chargement annul\xe9."),!0}catch(e){return o.oR.error("Impossible d'annuler ce t\xe9l\xe9chargement."),!1}},[ew]),eS=(0,l.useCallback)(async e=>{if(!e||!(0,i.JK)())return null;try{let r=await a.w.verifyJob(e);return k(r),await ew(),await ep(),r}catch(e){return o.oR.error("Impossible de v\xe9rifier ce t\xe9l\xe9chargement."),null}},[ew,ep]),eb=(0,l.useCallback)(async e=>{if(!e||!(0,i.JK)())return null;try{return await a.w.getCourseCompleteness(e)}catch(e){return console.error("[useOfflineDownloads] Erreur compl\xe9tude formation:",e),null}},[]),ev=(0,l.useCallback)(async e=>{let r;if(!(0,i.JK)())return 0;try{r=await a.w.getJobs()}catch(e){return console.error("[useOfflineDownloads] Lots illisibles avant suppression:",e),0}let t=(Array.isArray(r)?r:[]).filter(r=>{if(!(null==r?void 0:r.jobId))return!1;try{return!!e(r)}catch(e){return!1}}),l=0;for(let e of t)try{await a.w.cancelJob(e.jobId),l+=1}catch(e){console.error("[useOfflineDownloads] Annulation du lot impossible:",e)}return l>0&&await ew(),l},[ew]),eC=(0,l.useCallback)(async e=>{let{course:r,chapter:t,video:l,quality:n=null}=e;G(r);let i=o.oR.loading("Pr\xe9paration du t\xe9l\xe9chargementâ¦");try{let e=await a.w.enqueueVideo({course:r,chapter:t,video:l,quality:n});return o.oR.dismiss(i),k(e),await ew(),e}catch(e){throw o.oR.dismiss(i),o.oR.error(e.message||"Erreur lors du t\xe9l\xe9chargement de la vid\xe9o"),e}},[ew]),eR=(0,l.useCallback)(async e=>{let{course:r,chapter:t,quality:l=null}=e;G(r);let n=o.oR.loading("Pr\xe9paration du t\xe9l\xe9chargementâ¦");try{let e=await a.w.enqueueChapter({course:r,chapter:t,quality:l});return o.oR.dismiss(n),k(e),await ew(),e}catch(e){throw o.oR.dismiss(n),o.oR.error(e.message||"Erreur lors du t\xe9l\xe9chargement du chapitre"),e}},[ew]),ek=(0,l.useCallback)(async e=>{let{course:r,quality:t=null}=e;G(r);let l=o.oR.loading("Pr\xe9paration du t\xe9l\xe9chargementâ¦");try{let e=await a.w.enqueueCourse({course:r,quality:t});return o.oR.dismiss(l),k(e),await ew(),e}catch(e){throw o.oR.dismiss(l),o.oR.error(e.message||"Erreur lors du t\xe9l\xe9chargement de la formation"),e}},[ew]),eI=(0,l.useCallback)(async e=>{if(e)return e;if(n.offlineMediaStorage.getDownloadQualityPreference())return null;let r=await function(){let e;if(0===q)return Promise.resolve(J);if(O)return O.promise;let r=new Promise(r=>{e=r});return O={promise:r,resolve:e},K(),r}();return r===E?E:r===J?null:r},[]),eA=(0,l.useCallback)(async e=>{let{course:r,chapter:t,video:l,quality:n=null}=e,a=await eI(n);return a===E?null:eC({course:r,chapter:t,video:l,quality:a})},[eC,eI]),eD=(0,l.useCallback)(async e=>{let{course:r,chapter:t,quality:l=null}=e,n=await eI(l);return n===E?null:eR({course:r,chapter:t,quality:n})},[eR,eI]),eM=(0,l.useCallback)(async e=>{let{course:r,quality:t=null}=e,l=await eI(t);return l===E?null:ek({course:r,quality:l})},[ek,eI]),eJ=(0,l.useCallback)(async function(e){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",{silent:t=!1}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};try{if((0,i.JK)()){let r=String(e),t=await x([r]);await ev(e=>(function(e){if((null==e?void 0:e.scope)!=="video")return null;let r=String(e.jobId||"").split(":");return r.length>=3?r[r.length-1]:null})(e)===r||t.size>1&&B(L(e),t))}await n.offlineMediaStorage.deleteDownloadedVideo(e),t||o.oR.success(r?'"'.concat(r,'" a \xe9t\xe9 supprim\xe9e.'):"Vid\xe9o supprim\xe9e du stockage local.")}catch(e){o.oR.error("Erreur lors de la suppression de la vid\xe9o")}finally{await Q()}},[ev]),eE=(0,l.useCallback)(async function(e){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;try{let l=(0,i.JK)()?await N({courseId:t,chapterId:e}):new Set;await ev(r=>{let n=function(e){if((null==e?void 0:e.scope)!=="chapter")return null;let r=String(e.jobId||"").split(":");return r.length>=3?r[r.length-1]:null}(r);return!!n&&n===String(e)&&(!t||String(r.courseId)===String(t))||l.size>0&&B(L(r),l)}),await n.offlineMediaStorage.deleteDownloadedChapter(e,t),o.oR.success(r?'Le chapitre "'.concat(r,'" a \xe9t\xe9 supprim\xe9.'):"Chapitre supprim\xe9.")}catch(e){o.oR.error("Erreur lors de la suppression du chapitre")}finally{await Q()}}
1,[ev]),eO=(0,l.useCallback)(async function(e){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";try{await ev(r=>String(r.courseId)===String(e)),await n.offlineMediaStorage.deleteDownloadedCourse(e),o.oR.success(r?'La formation "'.concat(r,'" a \xe9t\xe9 supprim\xe9e.'):"Formation supprim\xe9e.")}catch(e){o.oR.error("Erreur lors de la suppression de la formation")}finally{await Q()}},[ev]),eP=(0,l.useCallback)(async e=>{let r=Array.isArray(e)?e.filter(Boolean).map(String):[];if(0===r.length)return 0;try{let e=r;if((0,i.JK)()){let t=await x(r);(e=[...t]).length>r.length&&await ev(e=>B(L(e),t))}let t=await n.offlineMediaStorage.deleteDownloadedVideos(e);return t===e.length?o.oR.success("".concat(s(t,"le\xe7on supprim\xe9e","le\xe7ons supprim\xe9es"),".")):t>0?o.oR.warning("".concat(t," sur ").concat(e.length," le\xe7ons supprim\xe9es â les autres n'ont pas pu \xeatre retir\xe9es.")):o.oR.error("Aucune le\xe7on n'a pu \xeatre supprim\xe9e."),t}catch(e){return o.oR.error("Erreur lors de la suppression"),0}finally{await Q()}},[ev]),eq=(0,l.useCallback)(async()=>{try{await ev(()=>!0);let e=(await n.offlineMediaStorage.getAllDownloadedVideos()).filter(e=>e.status!==f).map(e=>String(e.videoId)).filter(Boolean);return await eP(e)}catch(e){return o.oR.error("Erreur lors de la suppression"),0}finally{await Q()}},[eP,ev]),eK=(0,l.useCallback)(async()=>{if("undefined"!=typeof navigator&&!1===navigator.onLine)return o.oR.error("Reconnectez-vous pour prolonger vos acc\xe8s hors-ligne."),!1;try{let e=await n.offlineMediaStorage.refreshAllOfflineEntitlements();if(await ep(),!e)return o.oR.error("Impossible de prolonger l'acc\xe8s pour le moment."),!1;return o.oR.success("Acc\xe8s prolong\xe9 de 30 jours."),!0}catch(e){return o.oR.error("Impossible de prolonger l'acc\xe8s pour le moment."),!1}},[ep]),ej=(0,l.useCallback)(async e=>{if(!e)return 0;if("undefined"!=typeof navigator&&!1===navigator.onLine)return o.oR.error("Reconnectez-vous pour prolonger vos acc\xe8s hors-ligne."),0;try{let r=await n.offlineMediaStorage.refreshAllOfflineEntitlements({courseId:e});if(await ep(),!r)return o.oR.error("Impossible de prolonger l'acc\xe8s pour le moment."),0;return o.oR.success("Acc\xe8s prolong\xe9 de 30 jours."),r}catch(e){return o.oR.error("Impossible de prolonger l'acc\xe8s pour le moment."),0}},[ep]),e_=(0,l.useCallback)(async e=>await n.offlineMediaStorage.getVideoPlaybackUrl(e),[]),eV=(0,l.useCallback)(e=>{n.offlineMediaStorage.revokePlaybackUrl(e)},[]),ez=(0,l.useCallback)(e=>n.offlineMediaStorage.checkOfflineValidity(e),[]),eL=(0,l.useCallback)(e=>t.has(String(e)),[t]),eB=(0,l.useCallback)(e=>w.has(String(e)),[w]),eN=!!(null==V?void 0:V.isEstimateReliable);return{courses:e,downloadedVideoIds:t,activeDownloads:h,queuedVideoIds:S,activeItems:v,failedItems:R,storageStats:V,storageIsEstimated:!eN,isStorageEstimateReliable:eN,isLoading:F,hasLoaded:X,loadError:H,downloadQuality:$,setDownloadQuality:ec,downloadConcurrency:er,setDownloadConcurrency:ed,qualityPromptState:ea,closeQualityPrompt:ef,confirmQualityPrompt:eg,refreshData:ep,jobs:el,refreshJobs:ew,retryJob:eh,cancelJob:em,verifyJob:eS,getCourseCompleteness:eb,downloadVideo:eA,downloadChapter:eD,downloadCourse:eM,deleteVideo:eJ,deleteChapter:eE,deleteCourse:eO,deleteMany:eP,deleteAll:eq,renewAllEntitlements:eK,renewCourseEntitlements:ej,getVideoPlaybackUrl:e_,revokePlaybackUrl:eV,checkOfflineValidity:ez,isVideoDownloaded:eL,isVideoNativeStored:eB,nativeVideoIds:w}}}}]);
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.