@profoundlogic/coderflow-server 0.9.1 → 0.9.3

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.
Files changed (197) hide show
  1. package/dist/coder-server.js +1 -1
  2. package/dist/config/skill-catalog.json +1 -1
  3. package/dist/config.js +1 -1
  4. package/dist/lib/agent-keepalive.js +1 -1
  5. package/dist/lib/agent-models.js +1 -1
  6. package/dist/lib/api-keys.js +1 -1
  7. package/dist/lib/apiKeys.js +1 -1
  8. package/dist/lib/app-server-ports.js +1 -1
  9. package/dist/lib/auto-judge.js +1 -1
  10. package/dist/lib/automation-service.js +1 -1
  11. package/dist/lib/basic-auth.js +1 -1
  12. package/dist/lib/bindings.js +1 -1
  13. package/dist/lib/build-history.js +1 -1
  14. package/dist/lib/build-output-service.js +1 -1
  15. package/dist/lib/build-scheduler.js +1 -1
  16. package/dist/lib/build-service.js +1 -1
  17. package/dist/lib/ca-certificates.js +1 -1
  18. package/dist/lib/claude-oauth-refresh.js +1 -1
  19. package/dist/lib/cli/build.js +1 -1
  20. package/dist/lib/cli/cleanup-users.js +1 -1
  21. package/dist/lib/cli/config-command.js +1 -1
  22. package/dist/lib/cli/config.js +1 -1
  23. package/dist/lib/cli/create-user.js +1 -1
  24. package/dist/lib/cli/grant-admin.js +1 -1
  25. package/dist/lib/cli/init.js +1 -1
  26. package/dist/lib/cli/jira.js +1 -1
  27. package/dist/lib/cli/license.js +1 -1
  28. package/dist/lib/cli/list-roles.js +1 -1
  29. package/dist/lib/cli/list-users.js +1 -1
  30. package/dist/lib/cli/server-manager.js +1 -1
  31. package/dist/lib/cli/set-password.js +1 -1
  32. package/dist/lib/compression-filter.js +1 -1
  33. package/dist/lib/config-migration.js +1 -1
  34. package/dist/lib/container-credential-sync.js +1 -1
  35. package/dist/lib/container-tokens.js +1 -1
  36. package/dist/lib/data-dir.js +1 -1
  37. package/dist/lib/deployment-history.js +1 -1
  38. package/dist/lib/deployment-service.js +1 -1
  39. package/dist/lib/docker-utils.js +1 -1
  40. package/dist/lib/email.js +1 -1
  41. package/dist/lib/emailTemplates.js +1 -1
  42. package/dist/lib/entitlement.js +1 -1
  43. package/dist/lib/external-connections.js +1 -1
  44. package/dist/lib/fetch-utils.js +1 -1
  45. package/dist/lib/git-commit-details-route.js +1 -1
  46. package/dist/lib/git-history-diff-guardrails.js +1 -1
  47. package/dist/lib/git-provider-service.js +1 -1
  48. package/dist/lib/git-provider-setup/github-setup-handler.js +1 -1
  49. package/dist/lib/git-provider-setup/index.js +1 -1
  50. package/dist/lib/git-provider-setup/setup-factory.js +1 -1
  51. package/dist/lib/git-provider-setup/setup-interface.js +1 -1
  52. package/dist/lib/git-providers/azure-devops-provider.js +1 -1
  53. package/dist/lib/git-providers/github-app-provider.js +1 -1
  54. package/dist/lib/git-providers/index.js +1 -1
  55. package/dist/lib/git-providers/provider-factory.js +1 -1
  56. package/dist/lib/git-providers/provider-interface.js +1 -1
  57. package/dist/lib/github-urls.js +1 -1
  58. package/dist/lib/group-objective-linking.js +1 -1
  59. package/dist/lib/ibmi-sync.js +1 -1
  60. package/dist/lib/jira-client.js +1 -1
  61. package/dist/lib/judge-blinding.js +1 -1
  62. package/dist/lib/logger.js +1 -1
  63. package/dist/lib/memory-utils.js +1 -1
  64. package/dist/lib/migration-to-scoped-rbac.js +1 -1
  65. package/dist/lib/model-fetcher.js +1 -1
  66. package/dist/lib/notifications.js +1 -1
  67. package/dist/lib/objective-context.js +1 -1
  68. package/dist/lib/oidc-auth.js +1 -1
  69. package/dist/lib/oidc-device-flow.js +1 -1
  70. package/dist/lib/passwordTokens.js +1 -1
  71. package/dist/lib/permission-resolver.js +1 -1
  72. package/dist/lib/pin-cascade.js +1 -1
  73. package/dist/lib/provider-accounts.js +1 -1
  74. package/dist/lib/provider-oauth.js +1 -1
  75. package/dist/lib/provider-profile.js +1 -1
  76. package/dist/lib/provider-token-refresh.js +1 -1
  77. package/dist/lib/rbac-user-state.js +1 -1
  78. package/dist/lib/request-url.js +1 -1
  79. package/dist/lib/rewind.js +1 -1
  80. package/dist/lib/role-definitions.js +1 -1
  81. package/dist/lib/roles.js +1 -1
  82. package/dist/lib/secrets.js +1 -1
  83. package/dist/lib/session-file-store.js +1 -0
  84. package/dist/lib/setup-repo-git-auth.js +1 -1
  85. package/dist/lib/slack-service.js +1 -1
  86. package/dist/lib/state-capture.js +1 -1
  87. package/dist/lib/static-files.js +1 -1
  88. package/dist/lib/task-aliases.js +1 -1
  89. package/dist/lib/task-container-init.js +1 -1
  90. package/dist/lib/task-context-usage.js +1 -1
  91. package/dist/lib/task-git-auth-errors.js +1 -1
  92. package/dist/lib/task-name-format.js +1 -1
  93. package/dist/lib/task-name-generator.js +1 -1
  94. package/dist/lib/task-source-metadata.js +1 -1
  95. package/dist/lib/teams.js +1 -1
  96. package/dist/lib/user-git-oauth.js +1 -1
  97. package/dist/lib/user-git-tokens.js +1 -1
  98. package/dist/lib/users.js +1 -1
  99. package/dist/middleware/requireAuth.js +1 -1
  100. package/dist/middleware/requireInit.js +1 -1
  101. package/dist/middleware/requirePermission.js +1 -1
  102. package/dist/package.json +1 -1
  103. package/dist/playwright.config.js +1 -1
  104. package/dist/playwright.task-terminal.config.js +1 -1
  105. package/dist/routes/apiKeys.js +1 -1
  106. package/dist/routes/auth-oidc.js +1 -1
  107. package/dist/routes/auth.js +1 -1
  108. package/dist/routes/automations.js +1 -1
  109. package/dist/routes/bindings.js +1 -1
  110. package/dist/routes/build.js +1 -1
  111. package/dist/routes/containers.js +1 -1
  112. package/dist/routes/deploy-task.js +1 -1
  113. package/dist/routes/environment-management.js +1 -1
  114. package/dist/routes/environments.js +1 -1
  115. package/dist/routes/external-skills.js +1 -1
  116. package/dist/routes/git-credentials.js +1 -1
  117. package/dist/routes/git-oauth.js +1 -1
  118. package/dist/routes/git-provider-setup.js +1 -1
  119. package/dist/routes/health.js +1 -1
  120. package/dist/routes/jira.js +1 -1
  121. package/dist/routes/logs.js +1 -1
  122. package/dist/routes/objective-management.js +1 -1
  123. package/dist/routes/password.js +1 -1
  124. package/dist/routes/prompt.js +1 -1
  125. package/dist/routes/provider-auth.js +1 -1
  126. package/dist/routes/qa.js +1 -1
  127. package/dist/routes/roles.js +1 -1
  128. package/dist/routes/settings.js +1 -1
  129. package/dist/routes/skill-management.js +1 -1
  130. package/dist/routes/skills.js +1 -1
  131. package/dist/routes/slack.js +1 -1
  132. package/dist/routes/stats.js +1 -1
  133. package/dist/routes/tasks.js +1 -1
  134. package/dist/routes/teams.js +1 -1
  135. package/dist/routes/templates.js +1 -1
  136. package/dist/routes/test-task.js +1 -1
  137. package/dist/routes/test.js +1 -1
  138. package/dist/routes/users.js +1 -1
  139. package/dist/routes/visualizations.js +1 -1
  140. package/dist/scripts/create-user.js +1 -1
  141. package/dist/scripts/migrate-config-to-data-dir.js +1 -1
  142. package/dist/start.js +1 -1
  143. package/dist/web-ui/public/activity-detail-modal.js +1 -1
  144. package/dist/web-ui/public/activity-feed.js +1 -1
  145. package/dist/web-ui/public/activity-formatters.js +1 -1
  146. package/dist/web-ui/public/admin.html +6 -6
  147. package/dist/web-ui/public/admin.js +1 -1
  148. package/dist/web-ui/public/agent-event-parser.js +1 -1
  149. package/dist/web-ui/public/app.js +1 -1
  150. package/dist/web-ui/public/approve-dialog.js +1 -1
  151. package/dist/web-ui/public/automation-links.js +1 -1
  152. package/dist/web-ui/public/automation-schedule.js +1 -1
  153. package/dist/web-ui/public/comments-widget.js +1 -1
  154. package/dist/web-ui/public/diff-utils.js +1 -1
  155. package/dist/web-ui/public/docs/admin/automations.md +2 -1
  156. package/dist/web-ui/public/docs/admin/environments.md +2 -0
  157. package/dist/web-ui/public/docs/code/files-and-editing.md +1 -4
  158. package/dist/web-ui/public/docs/docsify-proxy-helper.js +1 -1
  159. package/dist/web-ui/public/environments.css +28 -0
  160. package/dist/web-ui/public/environments.html +33 -7
  161. package/dist/web-ui/public/environments.js +1 -1
  162. package/dist/web-ui/public/feedback-widget.js +1 -1
  163. package/dist/web-ui/public/file-selection-tree.js +1 -1
  164. package/dist/web-ui/public/git-history-lazy-utils.js +1 -1
  165. package/dist/web-ui/public/git-history.html +1 -1
  166. package/dist/web-ui/public/git-history.js +1 -1
  167. package/dist/web-ui/public/git-status.js +1 -1
  168. package/dist/web-ui/public/ibmi-file-filter.js +1 -1
  169. package/dist/web-ui/public/index.html +1 -1
  170. package/dist/web-ui/public/index.js +1 -1
  171. package/dist/web-ui/public/login.js +1 -1
  172. package/dist/web-ui/public/markdown-editor.js +1 -1
  173. package/dist/web-ui/public/markdown-file-editor.js +1 -1
  174. package/dist/web-ui/public/modal-maximize.js +1 -1
  175. package/dist/web-ui/public/notifications.js +1 -1
  176. package/dist/web-ui/public/permissions.js +1 -1
  177. package/dist/web-ui/public/pr-dialog.js +1 -1
  178. package/dist/web-ui/public/roles.html +1 -1
  179. package/dist/web-ui/public/roles.js +1 -1
  180. package/dist/web-ui/public/settings.html +1 -1
  181. package/dist/web-ui/public/settings.js +1 -1
  182. package/dist/web-ui/public/setup-password.js +1 -1
  183. package/dist/web-ui/public/skills.html +1 -1
  184. package/dist/web-ui/public/skills.js +1 -1
  185. package/dist/web-ui/public/sse-client.js +1 -1
  186. package/dist/web-ui/public/sse-client.transport-warning.js +1 -1
  187. package/dist/web-ui/public/sse-shared-worker.js +1 -1
  188. package/dist/web-ui/public/task-judging-helpers.js +1 -1
  189. package/dist/web-ui/public/task.js +1 -1
  190. package/dist/web-ui/public/teams.html +2 -2
  191. package/dist/web-ui/public/teams.js +1 -1
  192. package/dist/web-ui/public/terminal.js +1 -1
  193. package/dist/web-ui/public/theme.js +1 -1
  194. package/dist/web-ui/public/users.html +2 -2
  195. package/dist/web-ui/public/users.js +1 -1
  196. package/dist/web-ui/public/variant-grouping.js +1 -1
  197. package/package.json +1 -1
@@ -1 +1 @@
1
- import{API,Utils,initializeAdminMenu}from'./app.js';import{initTheme,mountThemeToggle}from'./theme.js';const HEALTH_REFRESH_INTERVAL_MS=0x7530,LOG_SEARCH_DEBOUNCE_MS=0xfa,LOG_ORDER_ASC='asc',LOG_ORDER_DESC='desc',RESTART_POLL_INTERVAL_MS=0x7d0,RESTART_POLL_MAX_ATTEMPTS=0x1e,RESTART_MIN_SUCCESS_DELAY_MS=0x1b58,USAGE_DRILLDOWN_LIMIT=0x19,NUMBER_FORMATTER=new Intl['NumberFormat'](),state={'currentSection':'health','environments':[],'health':{'loaded':![],'request':null,'autoRefreshTimer':null,'versionChecked':![],'currentVersion':null,'latestVersion':null,'installCommand':null,'updateEnabled':![],'hasRestartCommand':![],'updateInProgress':![],'restartInProgress':![],'updateAvailable':![]},'logs':{'loaded':![],'request':null,'entries':[],'nextEntryId':0x1,'selectedEntryIds':new Set(),'total':0x0,'minLevel':'INFO','level':'ALL','order':LOG_ORDER_ASC,'search':'','maxEntries':0x3e8,'stream':null,'streamState':'paused','live':![],'autoScroll':!![],'searchTimer':null},'usage':{'loaded':![],'request':null,'days':'30','environment':'','drilldown':{'open':![],'request':null,'requestToken':0x0,'group':'','value':'','label':'','data':null}}};document['addEventListener']('DOMContentLoaded',initialize);async function initialize(){try{initTheme(),mountThemeToggle();const _0x337a55=await checkAdminAccess();await initializeAdminMenu(_0x337a55),setupEventListeners(),await loadEnvironmentOptions(),document['getElementById']('admin-loading')['hidden']=!![],document['getElementById']('admin-content')['hidden']=![];const _0x444e2e=getSessionValue('admin-health-auto-refresh');if(_0x444e2e!==null){const _0x13ffa4=document['getElementById']('health-auto-refresh');if(_0x13ffa4)_0x13ffa4['checked']=_0x444e2e!=='false';}const _0x51d0b6=getSessionValue('admin-logs-order');(_0x51d0b6===LOG_ORDER_ASC||_0x51d0b6===LOG_ORDER_DESC)&&(state['logs']['order']=_0x51d0b6);syncLogOrderUi();const _0x22431f=getSessionValue('admin-active-section'),_0x363e99=['health','logs','usage']['includes'](_0x22431f)?_0x22431f:'health';await switchSection(_0x363e99);}catch(_0x32fa55){console['error']('Failed\x20to\x20initialize\x20Server\x20Administration\x20page',_0x32fa55),document['getElementById']('admin-loading')['hidden']=!![],document['getElementById']('admin-error')['hidden']=![],document['getElementById']('admin-error-message')['textContent']=_0x32fa55['message']||'Unknown\x20error';}}async function checkAdminAccess(){try{const _0x36472e=await API['getCurrentUser']();if(!window['Permissions']?.['hasServerPermission'](_0x36472e,'*')){Utils['showToast']('Access\x20denied:\x20Admin\x20privileges\x20required','error'),setTimeout(()=>{window['location']['href']='index.html';},0x7d0);throw new Error('Access\x20denied');}return _0x36472e;}catch(_0x3776d4){_0x3776d4['message']!=='Access\x20denied'&&(window['location']['href']='login.html');throw _0x3776d4;}}function setupEventListeners(){document['querySelectorAll']('.settings-nav-item')['forEach'](_0x1ddbca=>{_0x1ddbca['addEventListener']('click',()=>switchSection(_0x1ddbca['dataset']['section']));}),document['getElementById']('retry-admin-btn')?.['addEventListener']('click',()=>{window['location']['reload']();}),document['getElementById']('health-refresh-btn')?.['addEventListener']('click',()=>loadHealth({'showLoading':!![]})),document['getElementById']('retry-health-btn')?.['addEventListener']('click',()=>loadHealth({'showLoading':!![]})),document['getElementById']('health-auto-refresh')?.['addEventListener']('change',syncHealthAutoRefresh),document['getElementById']('health-check-updates-btn')?.['addEventListener']('click',()=>loadVersionStatus({'checkUpdates':!![]})),document['getElementById']('health-copy-install-btn')?.['addEventListener']('click',copyInstallCommand),document['getElementById']('health-update-btn')?.['addEventListener']('click',applyUpdate),document['getElementById']('health-restart-btn')?.['addEventListener']('click',showRestartConfirmation),document['getElementById']('confirm-restart-btn')?.['addEventListener']('click',confirmRestart),document['getElementById']('cancel-restart-btn')?.['addEventListener']('click',hideRestartModal),document['getElementById']('close-restart-modal')?.['addEventListener']('click',hideRestartModal),document['querySelector']('#restart-modal\x20.modal-overlay')?.['addEventListener']('click',hideRestartModal),document['getElementById']('restart-overlay-retry')?.['addEventListener']('click',()=>waitForServerRestart({'manualRetry':!![]})),document['getElementById']('server-stop-containers')?.['addEventListener']('click',()=>runCleanupAction('Stopping\x20containers',()=>API['stopAllContainers']())),document['getElementById']('server-remove-stopped')?.['addEventListener']('click',()=>runCleanupAction('Removing\x20stopped\x20containers',()=>API['removeStoppedContainers']())),document['getElementById']('server-prune-docker')?.['addEventListener']('click',()=>runCleanupAction('Pruning\x20Docker\x20resources',()=>API['pruneDockerResources']())),document['getElementById']('cleanup-toggle')?.['addEventListener']('click',toggleCleanupSection),document['getElementById']('logs-refresh-btn')?.['addEventListener']('click',()=>loadLogs({'showLoading':!![]})),document['getElementById']('retry-logs-btn')?.['addEventListener']('click',()=>loadLogs({'showLoading':!![]})),document['getElementById']('logs-live-toggle')?.['addEventListener']('click',toggleLogsLiveMode),document['getElementById']('logs-clear-btn')?.['addEventListener']('click',clearDisplayedLogs),document['getElementById']('logs-select-visible-btn')?.['addEventListener']('click',toggleVisibleLogSelection),document['getElementById']('logs-clear-selection-btn')?.['addEventListener']('click',clearSelectedLogEntries),document['getElementById']('logs-copy-selected-btn')?.['addEventListener']('click',copySelectedLogEntries),document['getElementById']('logs-search-input')?.['addEventListener']('input',handleLogsSearchInput),document['querySelectorAll']('#logs-level-filters\x20.admin-filter-btn')['forEach'](_0x4cb2f5=>{_0x4cb2f5['addEventListener']('click',()=>{state['logs']['level']=_0x4cb2f5['dataset']['level']||'ALL',updateActiveFilterButtons('#logs-level-filters',state['logs']['level']),loadLogs({'showLoading':![]});});}),document['querySelectorAll']('#logs-order-toggle\x20.admin-filter-btn')['forEach'](_0x2f61a5=>{_0x2f61a5['addEventListener']('click',()=>{setLogOrder(_0x2f61a5['dataset']['order'],{'focusLiveEdge':!![]});});}),document['getElementById']('logs-container')?.['addEventListener']('click',handleLogContainerClick),document['getElementById']('logs-container')?.['addEventListener']('change',handleLogContainerChange),document['getElementById']('logs-container')?.['addEventListener']('scroll',updateLogAutoScrollState),document['querySelectorAll']('.metric-card-drilldown')['forEach'](_0x5bb875=>{_0x5bb875['addEventListener']('click',()=>openDrilldown(_0x5bb875['dataset']['drilldown'])),_0x5bb875['addEventListener']('keydown',_0x3895c8=>{(_0x3895c8['key']==='Enter'||_0x3895c8['key']==='\x20')&&(_0x3895c8['preventDefault'](),openDrilldown(_0x5bb875['dataset']['drilldown']));});}),document['getElementById']('close-drilldown-modal')?.['addEventListener']('click',closeDrilldownModal),document['getElementById']('drilldown-modal-overlay')?.['addEventListener']('click',closeDrilldownModal),document['addEventListener']('keydown',_0x4b2aaf=>{_0x4b2aaf['key']==='Escape'&&!document['getElementById']('drilldown-modal')?.['hidden']&&closeDrilldownModal();}),document['getElementById']('usage-refresh-btn')?.['addEventListener']('click',()=>loadUsage({'showLoading':!![]})),document['getElementById']('retry-usage-btn')?.['addEventListener']('click',()=>loadUsage({'showLoading':!![]})),document['getElementById']('usage-environment-filter')?.['addEventListener']('change',_0x54cf15=>{state['usage']['environment']=_0x54cf15['target']['value']||'',loadUsage({'showLoading':![]});}),document['querySelectorAll']('#usage-period-buttons\x20.admin-filter-btn')['forEach'](_0x3cf58b=>{_0x3cf58b['addEventListener']('click',()=>{state['usage']['days']=_0x3cf58b['dataset']['days']||'30',updateActiveFilterButtons('#usage-period-buttons',state['usage']['days']),loadUsage({'showLoading':![]});});}),document['getElementById']('usage-content')?.['addEventListener']('click',handleUsageDrilldownClick),document['getElementById']('usage-content')?.['addEventListener']('keydown',handleUsageDrilldownKeydown),document['getElementById']('usage-drilldown-close')?.['addEventListener']('click',closeUsageDrilldown),document['getElementById']('usage-drilldown-overlay')?.['addEventListener']('click',closeUsageDrilldown),document['getElementById']('retry-usage-drilldown-btn')?.['addEventListener']('click',()=>loadUsageDrilldown({'showLoading':!![]})),window['addEventListener']('keydown',handleGlobalKeydown);}async function switchSection(_0x4a4912){if(!_0x4a4912)return;document['querySelectorAll']('.settings-nav-item')['forEach'](_0x28e455=>{const _0x23b1df=_0x28e455['dataset']['section']===_0x4a4912;_0x28e455['classList']['toggle']('active',_0x23b1df),_0x28e455['setAttribute']('aria-selected',String(_0x23b1df));}),document['querySelectorAll']('.settings-panel')['forEach'](_0x2321d7=>{const _0x4b76c2=_0x2321d7['id']==='section-'+_0x4a4912;_0x2321d7['hidden']=!_0x4b76c2,_0x2321d7['classList']['toggle']('active',_0x4b76c2);}),state['currentSection']=_0x4a4912,setSessionValue('admin-active-section',_0x4a4912),_0x4a4912!=='health'&&stopHealthAutoRefresh(),_0x4a4912!=='logs'&&stopLogStream(),_0x4a4912!=='usage'&&closeUsageDrilldown(),_0x4a4912==='health'&&(syncHealthAutoRefresh(),await loadHealth({'showLoading':!state['health']['loaded']})),_0x4a4912==='logs'&&(await loadLogs({'showLoading':!state['logs']['loaded']}),state['logs']['live']?startLogStream():updateLogsLiveUi()),_0x4a4912==='usage'&&await loadUsage({'showLoading':!state['usage']['loaded']});}function getSessionValue(_0x303058){try{return sessionStorage['getItem'](_0x303058);}catch{return null;}}function setSessionValue(_0x18f948,_0x4d4a69){try{sessionStorage['setItem'](_0x18f948,_0x4d4a69);}catch{}}async function loadEnvironmentOptions(){const _0x5af1d6=await API['get']('/environments');state['environments']=(_0x5af1d6['environments']||[])['map'](_0xede956=>_0xede956?.['name'])['filter'](Boolean)['sort']((_0x4b3694,_0x233fe2)=>_0x4b3694['localeCompare'](_0x233fe2));const _0x53e457=document['getElementById']('usage-environment-filter');if(!_0x53e457)return;_0x53e457['innerHTML']='<option\x20value=\x22\x22>All\x20environments</option>'+state['environments']['map'](_0x16cbe1=>'<option\x20value=\x22'+Utils['escapeHtml'](_0x16cbe1)+'\x22>'+Utils['escapeHtml'](_0x16cbe1)+'</option>')['join'](''),_0x53e457['value']=state['usage']['environment'];}function syncHealthAutoRefresh(){const _0x2d201b=document['getElementById']('health-auto-refresh');if(_0x2d201b)setSessionValue('admin-health-auto-refresh',String(_0x2d201b['checked']));const _0x439f12=state['currentSection']==='health'&&!!_0x2d201b?.['checked'];stopHealthAutoRefresh();if(!_0x439f12)return;state['health']['autoRefreshTimer']=window['setInterval'](()=>{loadHealth({'showLoading':![]});},HEALTH_REFRESH_INTERVAL_MS);}function stopHealthAutoRefresh(){state['health']['autoRefreshTimer']&&(clearInterval(state['health']['autoRefreshTimer']),state['health']['autoRefreshTimer']=null);}async function loadHealth({showLoading:showLoading=![]}={}){if(state['health']['request'])return state['health']['request'];return state['health']['request']=((async()=>{const _0x49df64=document['getElementById']('health-loading'),_0x31adc4=document['getElementById']('health-error'),_0x1f3d2a=document['getElementById']('health-content');(showLoading||!state['health']['loaded'])&&(_0x49df64['hidden']=![],_0x31adc4['hidden']=!![],_0x1f3d2a['hidden']=!![]);try{const [_0x518991]=await Promise['all']([API['get']('/health/metrics'),loadUpdateSettings()['catch'](_0x17ec86=>{console['error']('Failed\x20to\x20load\x20update\x20settings',_0x17ec86),state['health']['updateEnabled']=![],state['health']['hasRestartCommand']=![],syncHealthActionButtons();})]);renderHealthMetrics(_0x518991),!state['health']['currentVersion']&&await loadVersionStatus({'checkUpdates':![]}),_0x49df64['hidden']=!![],_0x31adc4['hidden']=!![],_0x1f3d2a['hidden']=![],state['health']['loaded']=!![];}catch(_0x3dff85){console['error']('Failed\x20to\x20load\x20server\x20metrics',_0x3dff85),_0x49df64['hidden']=!![],_0x31adc4['hidden']=![],_0x1f3d2a['hidden']=!![],document['getElementById']('health-error-message')['textContent']=_0x3dff85['message']||'Unknown\x20error';}finally{state['health']['request']=null;}})()),state['health']['request'];}function syncHealthActionButtons(){const _0x3e8803=document['getElementById']('health-update-btn'),_0x21a553=document['getElementById']('health-restart-btn');if(!_0x3e8803||!_0x21a553)return;const _0x4605ac=state['health']['updateEnabled'],_0x4a34a3=_0x4605ac&&state['health']['versionChecked']&&state['health']['updateAvailable'];_0x3e8803['hidden']=!_0x4a34a3,_0x3e8803['disabled']=state['health']['updateInProgress']||state['health']['restartInProgress']||!state['health']['latestVersion'],_0x3e8803['textContent']=state['health']['updateInProgress']?'Updating...':'Update\x20Server',_0x21a553['hidden']=!_0x4605ac,_0x21a553['disabled']=state['health']['updateInProgress']||state['health']['restartInProgress'];}function setUpdateOutput({status:_0x115edf,output:_0x48ee34}){const _0x3e1cfd=document['getElementById']('health-update-output-wrap'),_0x3e6b27=document['getElementById']('health-update-status'),_0x2e2c50=document['getElementById']('health-update-output');if(!_0x3e1cfd||!_0x3e6b27||!_0x2e2c50)return;const _0x51bc6d=_0x115edf||'';_0x3e1cfd['hidden']=![],_0x3e6b27['className']='admin-update-status',_0x51bc6d&&_0x3e6b27['classList']['add'](_0x51bc6d),_0x3e6b27['textContent']=_0x51bc6d==='success'?'Success':_0x51bc6d==='error'?'Failed':'In\x20Progress',_0x2e2c50['textContent']=_0x48ee34||'No\x20output\x20returned.';}function buildCommandOutput(_0xed5919,_0x503b7f){const _0x35070f=[];typeof _0xed5919==='string'&&_0xed5919['trim']()&&_0x35070f['push'](_0xed5919['trim']());if(typeof _0x503b7f==='string'&&_0x503b7f['trim']()){const _0x5ca787=_0x503b7f['trim'](),_0x2ab754=_0x35070f['some'](_0x4ce8a2=>_0x4ce8a2['includes'](_0x5ca787));!_0x2ab754&&_0x35070f['push']('Error:\x0a'+_0x5ca787);}return _0x35070f['join']('\x0a\x0a');}function showRestartOverlay({title:_0x2362c2,message:_0x318c34,showRetry:showRetry=![]}){const _0x278d2f=document['getElementById']('health-restart-overlay'),_0x398452=document['getElementById']('restart-overlay-title'),_0x33d2c2=document['getElementById']('restart-overlay-message'),_0x36328b=document['getElementById']('restart-overlay-retry');if(!_0x278d2f||!_0x398452||!_0x33d2c2||!_0x36328b)return;_0x398452['textContent']=_0x2362c2,_0x33d2c2['textContent']=_0x318c34,_0x36328b['hidden']=!showRetry,_0x278d2f['hidden']=![];}function hideRestartOverlay(){const _0x5a923e=document['getElementById']('health-restart-overlay');_0x5a923e&&(_0x5a923e['hidden']=!![]);}function sleep(_0x1e4df5){return new Promise(_0x396baf=>{window['setTimeout'](_0x396baf,_0x1e4df5);});}async function loadUpdateSettings(){const _0x490af4=await API['getUpdateSettings']();return state['health']['updateEnabled']=!!_0x490af4['enabled'],state['health']['hasRestartCommand']=!!_0x490af4['hasRestartCommand'],syncHealthActionButtons(),_0x490af4;}async function applyUpdate(){if(state['health']['updateInProgress']||!state['health']['latestVersion'])return;state['health']['updateInProgress']=!![],syncHealthActionButtons(),setUpdateOutput({'status':'in-progress','output':'Applying\x20server\x20update\x20to\x20'+state['health']['latestVersion']+'...'});try{const _0x564434=await API['applyServerUpdate'](state['health']['latestVersion']),_0x4d60c8=buildCommandOutput(_0x564434['output'],_0x564434['error']);_0x564434['success']?(setUpdateOutput({'status':'success','output':_0x4d60c8||'Server\x20update\x20to\x20'+state['health']['latestVersion']+'\x20completed.'}),Utils['showSuccess']('Server\x20update\x20to\x20'+state['health']['latestVersion']+'\x20completed')):(setUpdateOutput({'status':'error','output':_0x4d60c8||'Server\x20update\x20failed\x20without\x20additional\x20output.'}),Utils['showError'](_0x564434['error']||'Server\x20update\x20failed'));}catch(_0x477d64){setUpdateOutput({'status':'error','output':buildCommandOutput(_0x477d64['output'],_0x477d64['commandError']||_0x477d64['message'])||'Failed\x20to\x20apply\x20server\x20update.'}),Utils['showError'](_0x477d64['message']||'Failed\x20to\x20apply\x20server\x20update');}finally{state['health']['updateInProgress']=![],syncHealthActionButtons();}}function showRestartConfirmation(){if(!state['health']['updateEnabled']||state['health']['restartInProgress'])return;const _0x42338c=document['getElementById']('restart-modal');_0x42338c&&(_0x42338c['hidden']=![]);}function hideRestartModal(){const _0x2fb0d6=document['getElementById']('restart-modal');_0x2fb0d6&&(_0x2fb0d6['hidden']=!![]);}async function confirmRestart(){if(state['health']['restartInProgress'])return;hideRestartModal(),state['health']['restartInProgress']=!![],syncHealthActionButtons();try{await API['restartServer'](),await waitForServerRestart();}catch(_0x6abba9){state['health']['restartInProgress']=![],syncHealthActionButtons(),hideRestartOverlay(),Utils['showError'](_0x6abba9['message']||'Failed\x20to\x20restart\x20server');}}async function waitForServerRestart({manualRetry:manualRetry=![]}={}){state['health']['restartInProgress']=!![],syncHealthActionButtons(),stopHealthAutoRefresh(),showRestartOverlay({'title':manualRetry?'Retrying\x20server\x20connection...':'Waiting\x20for\x20server\x20to\x20restart...','message':'The\x20page\x20will\x20automatically\x20refresh\x20when\x20the\x20server\x20is\x20back\x20online.','showRetry':![]});const _0x32dc88=Date['now']();let _0x515c28=![];for(let _0x55ad89=0x0;_0x55ad89<RESTART_POLL_MAX_ATTEMPTS;_0x55ad89+=0x1){await sleep(RESTART_POLL_INTERVAL_MS);try{await API['get']('/health?ts='+Date['now']());const _0xc8862b=Date['now']()-_0x32dc88;if(_0x515c28||_0xc8862b>=RESTART_MIN_SUCCESS_DELAY_MS){state['health']['restartInProgress']=![],state['health']['currentVersion']=null,hideRestartOverlay(),syncHealthActionButtons(),Utils['showSuccess']('Server\x20restart\x20complete'),await loadHealth({'showLoading':!![]}),syncHealthAutoRefresh();return;}}catch(_0x5e2c2a){_0x515c28=!![];}}state['health']['restartInProgress']=![],syncHealthActionButtons(),showRestartOverlay({'title':'Unable\x20to\x20reconnect\x20to\x20the\x20server','message':'The\x20server\x20may\x20still\x20be\x20restarting.\x20Retry\x20the\x20connection\x20when\x20you\x20are\x20ready.','showRetry':!![]}),Utils['showError']('Server\x20restart\x20is\x20taking\x20longer\x20than\x20expected');}async function loadVersionStatus({checkUpdates:checkUpdates=![]}={}){const _0xcd8f2=document['getElementById']('health-check-updates-btn');_0xcd8f2&&(_0xcd8f2['disabled']=!![],_0xcd8f2['textContent']=checkUpdates?'Checking...':'Loading...');try{const _0x229eb4=await API['get']('/health');state['health']['currentVersion']=_0x229eb4['version']||'Unavailable',document['getElementById']('health-version-current')['textContent']=state['health']['currentVersion'];if(!checkUpdates&&!state['health']['versionChecked']){state['health']['updateAvailable']=![],document['getElementById']('health-version-status')['textContent']='Update\x20status\x20has\x20not\x20been\x20checked\x20yet.',document['getElementById']('health-version-latest')['textContent']=state['health']['latestVersion']||'Not\x20checked',syncHealthActionButtons();return;}if(checkUpdates){const _0xe4b009=await API['get']('/health/check-updates');state['health']['versionChecked']=!![],state['health']['latestVersion']=_0xe4b009['latestVersion']||'Unavailable',state['health']['installCommand']=_0xe4b009['installCommand']||null,state['health']['updateAvailable']=!!_0xe4b009['updateAvailable'],document['getElementById']('health-version-current')['textContent']=_0xe4b009['currentVersion']||state['health']['currentVersion'],document['getElementById']('health-version-latest')['textContent']=state['health']['latestVersion'],document['getElementById']('health-version-status')['textContent']=buildVersionStatusText(_0xe4b009),document['getElementById']('health-install-command')['textContent']=state['health']['installCommand']||'',document['getElementById']('health-install-command-wrap')['hidden']=!state['health']['installCommand'],document['getElementById']('health-copy-install-btn')['hidden']=!state['health']['installCommand'];}syncHealthActionButtons();}catch(_0x4043bd){console['error']('Failed\x20to\x20load\x20version\x20status',_0x4043bd),state['health']['updateAvailable']=![],document['getElementById']('health-version-status')['textContent']='Unable\x20to\x20load\x20version\x20status:\x20'+_0x4043bd['message'],document['getElementById']('health-install-command-wrap')['hidden']=!![],document['getElementById']('health-copy-install-btn')['hidden']=!![],syncHealthActionButtons();}finally{_0xcd8f2&&(_0xcd8f2['disabled']=![],_0xcd8f2['textContent']='Check\x20for\x20Updates');}}function buildVersionStatusText(_0x11c13e){const _0x41d8a2=_0x11c13e?.['versionStatus'];if(_0x41d8a2==='update-available')return'Update\x20available:\x20'+_0x11c13e['currentVersion']+'\x20→\x20'+_0x11c13e['latestVersion'];if(_0x41d8a2==='up-to-date')return'Running\x20the\x20latest\x20published\x20version\x20('+_0x11c13e['latestVersion']+').';if(_0x41d8a2==='ahead-of-latest')return'This\x20server\x20is\x20ahead\x20of\x20npm\x20latest\x20('+_0x11c13e['latestVersion']+').';return'Unable\x20to\x20compare\x20current\x20and\x20latest\x20versions.';}async function copyInstallCommand(){if(!state['health']['installCommand'])return;const _0x164a1c=await Utils['copyToClipboard'](state['health']['installCommand']);_0x164a1c?Utils['showSuccess']('Install\x20command\x20copied'):Utils['showError']('Failed\x20to\x20copy\x20install\x20command');}function renderHealthMetrics(_0x5a993f){document['getElementById']('cpu-usage')['textContent']=_0x5a993f['cpu']?.['display']||'-',document['getElementById']('memory-usage')['textContent']=_0x5a993f['memory']?.['display']||'-',document['getElementById']('disk-usage')['textContent']=_0x5a993f['disk']?.['display']||'-',document['getElementById']('docker-containers')['textContent']=_0x5a993f['docker']?.['display']||'-',document['getElementById']('server-uptime')['textContent']=_0x5a993f['uptime']?.['display']||'-',document['getElementById']('active-sessions')['textContent']=_0x5a993f['sessions']?.['display']||'-',setMetricProgress('cpu-progress',_0x5a993f['cpu']?.['percent'],statusFromPercent(_0x5a993f['cpu']?.['percent'])),setMetricProgress('memory-progress',_0x5a993f['memory']?.['percent'],statusFromPercent(_0x5a993f['memory']?.['percent'])),setMetricProgress('disk-progress',_0x5a993f['disk']?.['percent'],statusFromPercent(_0x5a993f['disk']?.['percent']));const _0x4d38a2=_0x5a993f['docker']?.['total']>0x0?_0x5a993f['docker']['running']/_0x5a993f['docker']['total']*0x64:0x0;setMetricProgress('docker-progress',_0x4d38a2,'ok');const _0xc79659=_0x5a993f['dockerStorage']||{},_0x1d44a2=document['getElementById']('docker-storage-card');document['getElementById']('docker-storage-total')['textContent']=_0xc79659['display']||'-',document['getElementById']('docker-storage-available')['textContent']=_0xc79659['availableDisplay']||'',document['getElementById']('docker-storage-available')['hidden']=!_0xc79659['availableDisplay'],document['getElementById']('docker-storage-reclaimable')['textContent']=_0xc79659['reclaimableDisplay']||'',document['getElementById']('docker-storage-images')['textContent']=_0xc79659['images']?.['display']||'-',document['getElementById']('docker-storage-containers')['textContent']=_0xc79659['containers']?.['display']||'-',document['getElementById']('docker-storage-volumes')['textContent']=_0xc79659['volumes']?.['display']||'-',document['getElementById']('docker-storage-buildcache')['textContent']=_0xc79659['buildCache']?.['display']||'-',setMetricProgress('docker-storage-progress',_0xc79659['percent'],_0xc79659['status']||'ok'),_0x1d44a2['classList']['remove']('status-warning','status-critical'),_0xc79659['status']==='warning'&&_0x1d44a2['classList']['add']('status-warning'),_0xc79659['status']==='critical'&&_0x1d44a2['classList']['add']('status-critical');}function clampPercent(_0x38c987){if(!Number['isFinite'](_0x38c987))return 0x0;return Math['max'](0x0,Math['min'](0x64,Math['round'](_0x38c987)));}function statusFromPercent(_0x44d85f){if(!Number['isFinite'](_0x44d85f))return'ok';if(_0x44d85f>=0x5a)return'critical';if(_0x44d85f>=0x4b)return'warning';return'ok';}function setMetricProgress(_0x5247dc,_0x3be7aa,_0x454d70='ok'){const _0x52e3bb=document['getElementById'](_0x5247dc);if(!_0x52e3bb)return;const _0x1d9a9b=clampPercent(_0x3be7aa);_0x52e3bb['style']['width']=_0x1d9a9b+'%',_0x52e3bb['classList']['remove']('status-ok','status-warning','status-critical'),_0x52e3bb['classList']['add'](_0x454d70==='critical'?'status-critical':_0x454d70==='warning'?'status-warning':'status-ok'),_0x52e3bb['parentElement']?.['setAttribute']('aria-valuenow',String(_0x1d9a9b));}async function runCleanupAction(_0x1787cc,_0x1a9da0){const _0x176337=document['getElementById']('server-health-action-status'),_0x3aa665=[document['getElementById']('health-refresh-btn'),document['getElementById']('server-stop-containers'),document['getElementById']('server-remove-stopped'),document['getElementById']('server-prune-docker')]['filter'](Boolean);_0x3aa665['forEach'](_0x1f7af9=>{_0x1f7af9['disabled']=!![];}),_0x176337['hidden']=![],_0x176337['classList']['remove']('success','error'),_0x176337['textContent']=_0x1787cc+'...';try{const _0x7f1452=await _0x1a9da0();_0x176337['classList']['add']('success'),_0x176337['textContent']=_0x7f1452?.['message']||_0x1787cc+'\x20complete',await loadHealth({'showLoading':!![]});}catch(_0x8bc8b3){console['error'](_0x1787cc+'\x20failed',_0x8bc8b3),_0x176337['classList']['add']('error'),_0x176337['textContent']=_0x8bc8b3['message']||_0x1787cc+'\x20failed';}finally{_0x3aa665['forEach'](_0x51d11d=>{_0x51d11d['disabled']=![];});}}function toggleCleanupSection(){const _0x59b88f=document['getElementById']('cleanup-section'),_0xf4507c=document['getElementById']('cleanup-content'),_0x1e73b1=document['getElementById']('cleanup-toggle');if(!_0x59b88f||!_0xf4507c||!_0x1e73b1)return;const _0x1c5aed=_0x59b88f['classList']['toggle']('expanded');_0xf4507c['hidden']=!_0x1c5aed,_0x1e73b1['setAttribute']('aria-expanded',String(_0x1c5aed));}async function loadLogs({showLoading:showLoading=![]}={}){if(state['logs']['request'])return state['logs']['request'];return state['logs']['request']=((async()=>{const _0x444b61=document['getElementById']('logs-loading'),_0xcad23b=document['getElementById']('logs-error');(showLoading||!state['logs']['loaded'])&&(_0x444b61['hidden']=![],_0xcad23b['hidden']=!![],document['getElementById']('logs-empty')['hidden']=!![],document['getElementById']('logs-container')['hidden']=!![]);try{const _0x23a6e2=new URLSearchParams({'limit':'500'});state['logs']['level']!=='ALL'&&_0x23a6e2['set']('level',state['logs']['level']);state['logs']['search']&&_0x23a6e2['set']('search',state['logs']['search']);const _0x5533c6=await API['get']('/logs?'+_0x23a6e2['toString']());state['logs']['entries']=Array['isArray'](_0x5533c6['entries'])?normalizeLogEntries(_0x5533c6['entries'])['slice'](-state['logs']['maxEntries']):[],state['logs']['selectedEntryIds']['clear'](),state['logs']['total']=Number(_0x5533c6['total'])||0x0,state['logs']['minLevel']=_0x5533c6['minLevel']||'INFO',state['logs']['loaded']=!![],_0x444b61['hidden']=!![],_0xcad23b['hidden']=!![],renderLogs();}catch(_0x14627d){console['error']('Failed\x20to\x20load\x20logs',_0x14627d),_0x444b61['hidden']=!![],_0xcad23b['hidden']=![],document['getElementById']('logs-error-message')['textContent']=_0x14627d['message']||'Unknown\x20error',document['getElementById']('logs-empty')['hidden']=!![],document['getElementById']('logs-container')['hidden']=!![];}finally{state['logs']['request']=null;}})()),state['logs']['request'];}function renderLogs({stickToLiveEdge:stickToLiveEdge=![]}={}){const _0x93f0c8=document['getElementById']('logs-container'),_0x29e3e4=document['getElementById']('logs-empty'),_0x1e73e7=stickToLiveEdge||state['logs']['autoScroll']&&state['logs']['live'],_0x283e07=_0x93f0c8?.['scrollTop']||0x0,_0x13e07e=_0x93f0c8?.['scrollHeight']||0x0,_0x5b1e3b=getOrderedLogEntries();updateLogsMeta(_0x5b1e3b['length']),syncLogSelectionUi(_0x5b1e3b);if(_0x5b1e3b['length']===0x0){_0x93f0c8['hidden']=!![],_0x29e3e4['hidden']=![];return;}_0x29e3e4['hidden']=!![],_0x93f0c8['hidden']=![],_0x93f0c8['innerHTML']=_0x5b1e3b['map'](renderLogEntry)['join']('');if(_0x1e73e7){scrollLogsToLiveEdge(_0x93f0c8);return;}if(state['logs']['order']===LOG_ORDER_DESC){const _0x21d08a=_0x93f0c8['scrollHeight'],_0x9ec1e5=_0x21d08a-_0x13e07e;_0x93f0c8['scrollTop']=_0x283e07>0x0?_0x283e07+Math['max'](_0x9ec1e5,0x0):_0x283e07;return;}_0x93f0c8['scrollTop']=_0x283e07;}function createLogEntryId(){const _0x2a2ddf=state['logs']['nextEntryId'];return state['logs']['nextEntryId']+=0x1,'server-log-'+_0x2a2ddf;}function normalizeLogEntry(_0xb764f7){return{..._0xb764f7,'_clientId':createLogEntryId()};}function normalizeLogEntries(_0x3e2b0d){return _0x3e2b0d['map'](normalizeLogEntry);}function getVisibleLogEntries(){const _0x1825dc=state['logs']['search']['trim']()['toLowerCase']();return state['logs']['entries']['filter'](_0x578143=>{if(state['logs']['level']!=='ALL'&&_0x578143['level']!==state['logs']['level'])return![];if(!_0x1825dc)return!![];const _0x136d8f=String(_0x578143['message']||'')['toLowerCase'](),_0x7f6bc8=_0x578143['context']?JSON['stringify'](_0x578143['context'])['toLowerCase']():'';return _0x136d8f['includes'](_0x1825dc)||_0x7f6bc8['includes'](_0x1825dc);});}function getOrderedLogEntries(){const _0x5443aa=getVisibleLogEntries();return state['logs']['order']===LOG_ORDER_DESC?_0x5443aa['slice']()['reverse']():_0x5443aa;}function findLogEntry(_0x381ffd){return state['logs']['entries']['find'](_0x5f5441=>_0x5f5441['_clientId']===_0x381ffd)||null;}function getSelectedVisibleLogEntries(_0x349c4f=getOrderedLogEntries()){return _0x349c4f['filter'](_0x2fc59b=>state['logs']['selectedEntryIds']['has'](_0x2fc59b['_clientId']));}function renderLogEntry(_0x54aa2a){const _0x599ce6=Utils['escapeHtml'](String(_0x54aa2a['_clientId']||'')),_0x4f34fd=Utils['escapeHtml'](formatDateTime(_0x54aa2a['timestamp'])),_0x5a9f4c=Utils['escapeHtml'](String(_0x54aa2a['level']||'INFO')),_0x434ffd=Utils['escapeHtml'](String(_0x54aa2a['message']||'')),_0x9af7a6=formatLogContext(_0x54aa2a['context']),_0x10ae3f=_0x9af7a6?'\x0a\x20\x20\x20\x20\x20\x20<details\x20class=\x22admin-log-context\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<summary>Context</summary>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<pre>'+Utils['escapeHtml'](_0x9af7a6)+'</pre>\x0a\x20\x20\x20\x20\x20\x20</details>\x0a\x20\x20\x20\x20':'',_0x2a2a5e=state['logs']['selectedEntryIds']['has'](_0x54aa2a['_clientId'])?'\x20selected':'';return'\x0a\x20\x20\x20\x20<div\x20class=\x22admin-log-entry'+_0x2a2a5e+'\x22\x20data-log-entry-id=\x22'+_0x599ce6+'\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-log-header\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-log-header-main\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label\x20class=\x22admin-log-select\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20type=\x22checkbox\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20class=\x22admin-log-select-checkbox\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20data-log-entry-id=\x22'+_0x599ce6+'\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20aria-label=\x22Select\x20log\x20entry\x20from\x20'+_0x4f34fd+'\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+(_0x2a2a5e?'checked':'')+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22admin-log-timestamp\x22>'+_0x4f34fd+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22admin-log-level\x20level-'+_0x5a9f4c['toLowerCase']()+'\x22>'+_0x5a9f4c+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-log-actions\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20type=\x22button\x22\x20class=\x22btn-ghost\x20btn-small\x20admin-log-copy-btn\x22\x20data-log-copy-id=\x22'+_0x599ce6+'\x22>Copy</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-log-message\x22>'+_0x434ffd+'</div>\x0a\x20\x20\x20\x20\x20\x20'+_0x10ae3f+'\x0a\x20\x20\x20\x20</div>\x0a\x20\x20';}function updateLogsMeta(_0xa39bc2){const _0x2d83e7=document['getElementById']('logs-meta');if(!_0x2d83e7)return;const _0x7c97c=state['logs']['entries']['length'],_0x3026ca=state['logs']['level']!=='ALL'||!!state['logs']['search']['trim'](),_0x9d5707=state['logs']['order']===LOG_ORDER_DESC?'newest\x20first':'oldest\x20first';_0x2d83e7['textContent']=_0x3026ca?'Showing\x20'+_0xa39bc2+'\x20of\x20'+_0x7c97c+'\x20loaded\x20entries\x20for\x20the\x20current\x20filters\x20in\x20'+_0x9d5707+'\x20order.\x20Minimum\x20runtime\x20level:\x20'+state['logs']['minLevel']+'.':'Showing\x20'+_0xa39bc2+'\x20recent\x20buffered\x20entries\x20in\x20'+_0x9d5707+'\x20order.\x20Minimum\x20runtime\x20level:\x20'+state['logs']['minLevel']+'.';}function syncLogSelectionUi(_0x142298=getOrderedLogEntries()){const _0x25e6c3=document['getElementById']('logs-selection-count'),_0x7fb232=document['getElementById']('logs-select-visible-btn'),_0x2d5779=document['getElementById']('logs-clear-selection-btn'),_0xc1ff2e=document['getElementById']('logs-copy-selected-btn'),_0x4bd4f5=getSelectedVisibleLogEntries(_0x142298),_0x587c7c=_0x142298['length']>0x0,_0x1398ae=_0x4bd4f5['length']>0x0,_0x17c5c1=_0x587c7c&&_0x4bd4f5['length']===_0x142298['length'],_0x1da90f=state['logs']['level']!=='ALL'||!!state['logs']['search']['trim'](),_0x16c94d=_0x1da90f?'Select\x20Filtered':'Select\x20All\x20Shown',_0x317303=_0x1da90f?'Deselect\x20Filtered':'Deselect\x20All\x20Shown';_0x25e6c3&&(_0x25e6c3['textContent']=_0x4bd4f5['length']+'\x20selected'),_0x7fb232&&(_0x7fb232['disabled']=!_0x587c7c,_0x7fb232['textContent']=_0x17c5c1?_0x317303:_0x16c94d),_0x2d5779&&(_0x2d5779['disabled']=!_0x1398ae),_0xc1ff2e&&(_0xc1ff2e['disabled']=!_0x1398ae);}function toggleLogsLiveMode(){state['logs']['live']=!state['logs']['live'],state['logs']['live']?(state['logs']['autoScroll']=!![],renderLogs({'stickToLiveEdge':!![]}),startLogStream()):stopLogStream(),updateLogsLiveUi();}function updateLogsLiveUi(){const _0xe9ae6e=document['getElementById']('logs-live-toggle'),_0x19377d=document['getElementById']('logs-stream-status');if(!_0xe9ae6e||!_0x19377d)return;_0x19377d['classList']['remove']('live','error');if(!state['logs']['live']){_0x19377d['textContent']='Paused',_0xe9ae6e['textContent']='Start\x20Live';return;}if(state['logs']['streamState']==='live')_0x19377d['textContent']='Live',_0x19377d['classList']['add']('live');else state['logs']['streamState']==='error'?(_0x19377d['textContent']='Reconnecting',_0x19377d['classList']['add']('error')):_0x19377d['textContent']='Connecting';_0xe9ae6e['textContent']='Pause\x20Live';}function startLogStream(){if(state['currentSection']!=='logs'||state['logs']['stream'])return;state['logs']['streamState']='connecting',updateLogsLiveUi();const _0x417697=new EventSource(API['getBaseUrl']()+'/logs/stream');state['logs']['stream']=_0x417697,_0x417697['addEventListener']('log',_0x23f382=>{try{const _0x16bde7=normalizeLogEntry(JSON['parse'](_0x23f382['data']));state['logs']['entries']['push'](_0x16bde7);if(state['logs']['entries']['length']>state['logs']['maxEntries']){const _0x23daaf=state['logs']['entries']['shift']();state['logs']['selectedEntryIds']['delete'](_0x23daaf?.['_clientId']);}renderLogs();}catch(_0x3c4d85){console['error']('Failed\x20to\x20parse\x20log\x20stream\x20event',_0x3c4d85);}}),_0x417697['onopen']=()=>{state['logs']['streamState']='live',updateLogsLiveUi();},_0x417697['onerror']=()=>{state['logs']['streamState']='error',updateLogsLiveUi();};}function stopLogStream(){state['logs']['stream']&&(state['logs']['stream']['close'](),state['logs']['stream']=null),state['logs']['streamState']='paused',updateLogsLiveUi();}function clearDisplayedLogs(){state['logs']['entries']=[],state['logs']['selectedEntryIds']['clear'](),renderLogs();}function handleLogContainerClick(_0x4c9503){const _0x2ceb01=_0x4c9503['target']['closest']('[data-log-copy-id]');if(!_0x2ceb01)return;const _0x5b87ea=findLogEntry(_0x2ceb01['dataset']['logCopyId']||'');if(!_0x5b87ea){Utils['showError']('Log\x20entry\x20is\x20no\x20longer\x20available');return;}copyLogEntries([_0x5b87ea],{'successMessage':'Log\x20entry\x20copied'});}function handleLogContainerChange(_0x1f92c4){const _0x86bc2d=_0x1f92c4['target']['closest']('.admin-log-select-checkbox');if(!_0x86bc2d)return;const _0x94f710=_0x86bc2d['dataset']['logEntryId']||'';if(!_0x94f710)return;_0x86bc2d['checked']?state['logs']['selectedEntryIds']['add'](_0x94f710):state['logs']['selectedEntryIds']['delete'](_0x94f710),_0x86bc2d['closest']('.admin-log-entry')?.['classList']['toggle']('selected',_0x86bc2d['checked']),syncLogSelectionUi();}function toggleVisibleLogSelection(){const _0x25b195=getOrderedLogEntries();if(_0x25b195['length']===0x0)return;const _0x28f2ff=getSelectedVisibleLogEntries(_0x25b195),_0x17aa6a=_0x28f2ff['length']!==_0x25b195['length'];_0x25b195['forEach'](_0x38be64=>{_0x17aa6a?state['logs']['selectedEntryIds']['add'](_0x38be64['_clientId']):state['logs']['selectedEntryIds']['delete'](_0x38be64['_clientId']);}),renderLogs();}function clearSelectedLogEntries(){if(state['logs']['selectedEntryIds']['size']===0x0)return;state['logs']['selectedEntryIds']['clear'](),renderLogs();}async function copySelectedLogEntries(){const _0x17c736=getSelectedVisibleLogEntries();if(_0x17c736['length']===0x0)return;await copyLogEntries(_0x17c736,{'successMessage':_0x17c736['length']===0x1?'Log\x20entry\x20copied':_0x17c736['length']+'\x20log\x20entries\x20copied'});}async function copyLogEntries(_0x18bfdf,{successMessage:successMessage='Log\x20entries\x20copied'}={}){const _0xd95704=formatLogEntriesForClipboard(_0x18bfdf);if(!_0xd95704){Utils['showError']('No\x20log\x20content\x20available\x20to\x20copy');return;}const _0x671564=await Utils['copyToClipboard'](_0xd95704);_0x671564?Utils['showSuccess'](successMessage):Utils['showError']('Failed\x20to\x20copy\x20logs');}function setLogOrder(_0x57ef62,{focusLiveEdge:focusLiveEdge=![]}={}){const _0x2917c1=_0x57ef62===LOG_ORDER_DESC?LOG_ORDER_DESC:LOG_ORDER_ASC;if(state['logs']['order']===_0x2917c1){focusLiveEdge&&(state['logs']['autoScroll']=!![],renderLogs({'stickToLiveEdge':!![]}));return;}state['logs']['order']=_0x2917c1,setSessionValue('admin-logs-order',_0x2917c1),syncLogOrderUi(),focusLiveEdge&&(state['logs']['autoScroll']=!![]),renderLogs({'stickToLiveEdge':focusLiveEdge});}function syncLogOrderUi(){updateActiveFilterButtons('#logs-order-toggle',state['logs']['order']);}function handleLogsSearchInput(_0x210674){const _0x1889af=_0x210674['target']['value']||'';state['logs']['searchTimer']&&clearTimeout(state['logs']['searchTimer']),state['logs']['searchTimer']=window['setTimeout'](()=>{state['logs']['search']=_0x1889af,loadLogs({'showLoading':![]});},LOG_SEARCH_DEBOUNCE_MS);}function updateLogAutoScrollState(){const _0x3c49b4=document['getElementById']('logs-container');if(!_0x3c49b4)return;const _0x59afeb=state['logs']['order']===LOG_ORDER_DESC?_0x3c49b4['scrollTop']:_0x3c49b4['scrollHeight']-_0x3c49b4['scrollTop']-_0x3c49b4['clientHeight'];state['logs']['autoScroll']=_0x59afeb<0x20;}async function loadUsage({showLoading:showLoading=![]}={}){if(state['usage']['request'])return state['usage']['request'];return state['usage']['request']=((async()=>{const _0x108a0c=document['getElementById']('usage-loading'),_0xe2b5ce=document['getElementById']('usage-error');(showLoading||!state['usage']['loaded'])&&(_0x108a0c['hidden']=![],_0xe2b5ce['hidden']=!![],document['getElementById']('usage-empty')['hidden']=!![],document['getElementById']('usage-content')['hidden']=!![]);try{const _0xa4751d=new URLSearchParams();_0xa4751d['set']('days',state['usage']['days']);state['usage']['environment']&&_0xa4751d['set']('environment',state['usage']['environment']);const _0xba1f93=await API['get']('/stats?'+_0xa4751d['toString']());state['usage']['loaded']=!![],_0x108a0c['hidden']=!![],_0xe2b5ce['hidden']=!![],renderUsage(_0xba1f93),state['usage']['drilldown']['open']&&state['usage']['drilldown']['group']&&state['usage']['drilldown']['value']&&await loadUsageDrilldown({'showLoading':![]});}catch(_0x2bcc5b){console['error']('Failed\x20to\x20load\x20usage\x20statistics',_0x2bcc5b),_0x108a0c['hidden']=!![],_0xe2b5ce['hidden']=![],document['getElementById']('usage-error-message')['textContent']=_0x2bcc5b['message']||'Unknown\x20error',document['getElementById']('usage-empty')['hidden']=!![],document['getElementById']('usage-content')['hidden']=!![];}finally{state['usage']['request']=null;}})()),state['usage']['request'];}function renderUsage(_0x1f5128){const _0x5dbbd2=Number(_0x1f5128?.['tasks']?.['total'])||0x0,_0x148fce=document['getElementById']('usage-empty'),_0x20b084=document['getElementById']('usage-content');if(_0x5dbbd2===0x0){closeUsageDrilldown(),_0x148fce['hidden']=![],_0x20b084['hidden']=!![];return;}_0x148fce['hidden']=!![],_0x20b084['hidden']=![];const _0x3c1361=Number(_0x1f5128?.['approvalRate']?.['successRate'])||0x0,_0x1fdfc8=Math['round'](_0x3c1361*0x64),_0x16aded=_0x1f5128?.['code']?.['approved']||{},_0x43b3d1=Number(_0x16aded?.['tasks'])||0x0,_0x51c4c3=(Number(_0x16aded?.['linesAdded'])||0x0)-(Number(_0x16aded?.['linesDeleted'])||0x0),_0x227c7a=(Number(_0x1f5128?.['code']?.['linesAdded'])||0x0)-(Number(_0x1f5128?.['code']?.['linesDeleted'])||0x0),_0x270870=Number(_0x1f5128?.['timing']?.['averageDurationMinutes'])||0x0;setSummaryValue('usage-total-tasks',formatNumber(_0x5dbbd2)),setSummaryValue('usage-success-rate',_0x1fdfc8+'%',statusClassFromPercent(_0x1fdfc8)),setSummaryValue('usage-net-lines',formatSignedNumber(_0x227c7a)),setSummaryValue('usage-average-duration',formatDurationMinutes(_0x270870));const _0x1ed0b4=_0x5dbbd2>0x0?Math['round'](_0x43b3d1/_0x5dbbd2*0x64):0x0;document['getElementById']('usage-approved-summary')['textContent']=formatNumber(_0x43b3d1)+'\x20approved\x20('+_0x1ed0b4+'%)\x20·\x20'+formatNumber(_0x1f5128['timing']['totalDurationHours']||0x0)+'h\x20total',document['getElementById']('usage-success-detail')['textContent']=(_0x1f5128['approvalRate']['completed']||0x0)+'\x20completed\x20/\x20'+(_0x1f5128['approvalRate']['failed']||0x0)+'\x20failed\x20/\x20'+(_0x1f5128['approvalRate']['interrupted']||0x0)+'\x20interrupted',document['getElementById']('usage-net-lines-detail')['textContent']='+'+formatNumber(_0x1f5128['code']['linesAdded']||0x0)+'\x20/\x20-'+formatNumber(_0x1f5128['code']['linesDeleted']||0x0)+'\x20·\x20Approved\x20'+formatSignedNumber(_0x51c4c3)+'\x20net',document['getElementById']('usage-average-duration-detail')['textContent']=formatDurationMinutes(_0x1f5128['timing']['medianDurationMinutes']||0x0)+'\x20median\x20·\x20'+formatNumber(_0x1f5128['timing']['totalDurationHours']||0x0)+'h\x20total',document['getElementById']('usage-period-summary')['textContent']=buildPeriodSummary(_0x1f5128['period']),renderBarList('usage-status-bars',_0x1f5128['tasks']['byStatus']||{},{'drilldownGroup':'status','labelFormatter':prettifyKey}),renderObjectTable('usage-type-body',_0x1f5128['tasks']['byType']||{},_0x5dbbd2,{'includePercent':!![],'labelFormatter':prettifyKey,'drilldownGroup':'type'}),renderObjectTable('usage-environment-body',_0x1f5128['tasks']['byEnvironment']||{},_0x5dbbd2,{'drilldownGroup':'environment'}),renderUserTable('usage-user-body',_0x1f5128['tasks']['byUser']||[]),renderObjectTable('usage-source-body',_0x1f5128['tasks']['bySource']||{},_0x5dbbd2,{'labelFormatter':prettifyKey,'drilldownGroup':'source'}),document['getElementById']('usage-lines-added')['textContent']=formatNumber(_0x1f5128['code']['linesAdded']||0x0),document['getElementById']('usage-lines-deleted')['textContent']=formatNumber(_0x1f5128['code']['linesDeleted']||0x0),document['getElementById']('usage-files-changed')['textContent']=formatNumber(_0x1f5128['code']['filesChanged']||0x0),document['getElementById']('usage-repositories-affected')['textContent']=formatNumber(_0x1f5128['code']['repositoriesAffected']||0x0),document['getElementById']('usage-approved-lines-added')['textContent']=formatNumber(_0x16aded['linesAdded']||0x0),document['getElementById']('usage-approved-lines-deleted')['textContent']=formatNumber(_0x16aded['linesDeleted']||0x0),document['getElementById']('usage-approved-files-changed')['textContent']=formatNumber(_0x16aded['filesChanged']||0x0),document['getElementById']('usage-approved-repositories-affected')['textContent']=formatNumber(_0x16aded['repositoriesAffected']||0x0);const _0x50943c=(_0x48f96b,_0x89d084)=>_0x48f96b>0x0?Math['round'](_0x89d084/_0x48f96b*0x64):0x0;document['getElementById']('usage-added-pct')['style']['width']=_0x50943c(_0x1f5128['code']['linesAdded']||0x0,_0x16aded['linesAdded']||0x0)+'%',document['getElementById']('usage-deleted-pct')['style']['width']=_0x50943c(_0x1f5128['code']['linesDeleted']||0x0,_0x16aded['linesDeleted']||0x0)+'%',document['getElementById']('usage-files-pct')['style']['width']=_0x50943c(_0x1f5128['code']['filesChanged']||0x0,_0x16aded['filesChanged']||0x0)+'%',document['getElementById']('usage-repos-pct')['style']['width']=_0x50943c(_0x1f5128['code']['repositoriesAffected']||0x0,_0x16aded['repositoriesAffected']||0x0)+'%',syncUsageDrilldownActionButtons(),refreshUsageDrilldownHighlights();}function buildPeriodSummary(_0x465976){const _0xa552c6=_0x465976?.['from']?formatDateTime(_0x465976['from']):'the\x20earliest\x20loaded\x20task',_0x3545f7=_0x465976?.['to']?formatDateTime(_0x465976['to']):'now',_0x443590=_0x465976?.['days']?_0x465976['days']+'\x20day\x20window':'All\x20available\x20task\x20history';return _0x443590+'\x20·\x20'+_0xa552c6+'\x20to\x20'+_0x3545f7;}function isUsageDrilldownActive(_0x138b7e,_0x51ab2a){return state['usage']['drilldown']['open']&&state['usage']['drilldown']['group']===_0x138b7e&&state['usage']['drilldown']['value']===_0x51ab2a;}function buildDrilldownTriggerAttrs(_0x42b672,_0x1ab518,_0x1c3441,{active:active=![]}={}){return'\x0a\x20\x20\x20\x20data-drilldown-group=\x22'+Utils['escapeHtml'](_0x42b672)+'\x22\x0a\x20\x20\x20\x20data-drilldown-value=\x22'+Utils['escapeHtml'](String(_0x1ab518))+'\x22\x0a\x20\x20\x20\x20data-drilldown-label=\x22'+Utils['escapeHtml'](String(_0x1c3441))+'\x22\x0a\x20\x20\x20\x20'+(active?'data-drilldown-active=\x22true\x22':'')+'\x0a\x20\x20';}function syncUsageDrilldownActionButtons(){document['querySelectorAll']('.admin-drilldown-action')['forEach'](_0x551a06=>{const _0x519c65=_0x551a06['dataset']['drilldownGroup']||'',_0x5da6a4=_0x551a06['dataset']['drilldownValue']||'';_0x551a06['classList']['toggle']('active',isUsageDrilldownActive(_0x519c65,_0x5da6a4));});}function renderBarList(_0x5b8b75,_0x26abca,{drilldownGroup:drilldownGroup='',labelFormatter:labelFormatter=null}={}){const _0x5cc3bc=document['getElementById'](_0x5b8b75);if(!_0x5cc3bc)return;const _0x4ecdad=Object['entries'](_0x26abca)['filter'](([,_0x17e797])=>Number(_0x17e797)>0x0)['sort']((_0x13b57e,_0x32dcab)=>_0x32dcab[0x1]-_0x13b57e[0x1]),_0x5458db=_0x4ecdad['reduce']((_0x49b6e0,[,_0x5d49f8])=>_0x49b6e0+Number(_0x5d49f8||0x0),0x0);if(_0x4ecdad['length']===0x0){_0x5cc3bc['innerHTML']='<div\x20class=\x22text-muted\x22>No\x20data\x20available.</div>';return;}_0x5cc3bc['innerHTML']=_0x4ecdad['map'](([_0x4728d6,_0x148be5])=>{const _0x2d8fa6=_0x5458db>0x0?Math['max'](0x2,Math['round'](_0x148be5/_0x5458db*0x64)):0x0,_0x3c7817=labelFormatter?labelFormatter(_0x4728d6):prettifyKey(_0x4728d6),_0x1ba0d4=Utils['escapeHtml'](_0x3c7817),_0x5e1b33=Utils['escapeHtml'](formatNumber(_0x148be5)),_0x2a4f31=drilldownGroup?isUsageDrilldownActive(drilldownGroup,String(_0x4728d6)):![],_0x413a21='\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-bar-label\x22>'+_0x1ba0d4+'</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-bar-track\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-bar-fill\x20status-'+Utils['escapeHtml'](String(_0x4728d6)['toLowerCase']())+'\x22\x20style=\x22width:\x20'+_0x2d8fa6+'%\x22></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-bar-value\x22>'+_0x5e1b33+'</div>\x0a\x20\x20\x20\x20';if(!drilldownGroup)return'<div\x20class=\x22admin-bar-row\x22>'+_0x413a21+'</div>';return'\x0a\x20\x20\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20\x20\x20type=\x22button\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20class=\x22admin-bar-row\x20admin-bar-row-button'+(_0x2a4f31?'\x20active':'')+'\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20'+buildDrilldownTriggerAttrs(drilldownGroup,_0x4728d6,_0x3c7817,{'active':_0x2a4f31})+'\x0a\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20'+_0x413a21+'\x0a\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20';})['join']('');}function renderObjectTable(_0x2a07f2,_0x46a32d,_0x3ed896,{includePercent:includePercent=![],labelFormatter:labelFormatter=null,drilldownGroup:drilldownGroup=''}={}){const _0x597714=document['getElementById'](_0x2a07f2);if(!_0x597714)return;const _0x5c04fb=Object['entries'](_0x46a32d)['filter'](([,_0x1855f8])=>Number(_0x1855f8)>0x0)['sort']((_0x22a3d6,_0x2ccd59)=>_0x2ccd59[0x1]-_0x22a3d6[0x1]||String(_0x22a3d6[0x0])['localeCompare'](String(_0x2ccd59[0x0])));if(_0x5c04fb['length']===0x0){_0x597714['innerHTML']='<tr><td\x20colspan=\x22'+(includePercent?0x3:0x2)+'\x22\x20class=\x22text-muted\x22>No\x20data\x20available.</td></tr>';return;}_0x597714['innerHTML']=_0x5c04fb['map'](([_0x44e492,_0x192a7f])=>{const _0x3eb913=labelFormatter?labelFormatter(_0x44e492):_0x44e492,_0x31d564=drilldownGroup?isUsageDrilldownActive(drilldownGroup,String(_0x44e492)):![],_0x5c355d=drilldownGroup?buildDrilldownTriggerAttrs(drilldownGroup,_0x44e492,_0x3eb913,{'active':_0x31d564}):'',_0x264f74=includePercent?'<td>'+formatPercent(_0x3ed896>0x0?_0x192a7f/_0x3ed896*0x64:0x0)+'</td>':'';return'\x0a\x20\x20\x20\x20\x20\x20<tr\x0a\x20\x20\x20\x20\x20\x20\x20\x20'+(drilldownGroup?'class=\x22admin-drilldown-row'+(_0x31d564?'\x20active':'')+'\x22\x20tabindex=\x220\x22\x20role=\x22button\x22\x20aria-label=\x22Show\x20'+Utils['escapeHtml'](String(_0x3eb913))+'\x20tasks\x22\x20'+_0x5c355d:'')+'\x0a\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<td>'+Utils['escapeHtml'](String(_0x3eb913))+'</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<td>'+Utils['escapeHtml'](formatNumber(_0x192a7f))+'</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20'+_0x264f74+'\x0a\x20\x20\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20';})['join']('');}function renderUserTable(_0xb72a83,_0x519448){const _0x20bd26=document['getElementById'](_0xb72a83);if(!_0x20bd26)return;if(!Array['isArray'](_0x519448)||_0x519448['length']===0x0){_0x20bd26['innerHTML']='<tr><td\x20colspan=\x222\x22\x20class=\x22text-muted\x22>No\x20data\x20available.</td></tr>';return;}_0x20bd26['innerHTML']=_0x519448['map'](_0x3eef9e=>'\x0a\x20\x20\x20\x20<tr\x0a\x20\x20\x20\x20\x20\x20class=\x22admin-drilldown-row'+(isUsageDrilldownActive('user',String(_0x3eef9e['userId']||'unknown'))?'\x20active':'')+'\x22\x0a\x20\x20\x20\x20\x20\x20tabindex=\x220\x22\x0a\x20\x20\x20\x20\x20\x20role=\x22button\x22\x0a\x20\x20\x20\x20\x20\x20aria-label=\x22Show\x20tasks\x20for\x20'+Utils['escapeHtml'](_0x3eef9e['name']||_0x3eef9e['username']||_0x3eef9e['userId']||'Unknown')+'\x22\x0a\x20\x20\x20\x20\x20\x20'+buildDrilldownTriggerAttrs('user',_0x3eef9e['userId']||'unknown',_0x3eef9e['name']||_0x3eef9e['username']||_0x3eef9e['userId']||'Unknown',{'active':isUsageDrilldownActive('user',String(_0x3eef9e['userId']||'unknown'))})+'\x0a\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20<td>'+Utils['escapeHtml'](_0x3eef9e['name']||_0x3eef9e['username']||_0x3eef9e['userId']||'Unknown')+'</td>\x0a\x20\x20\x20\x20\x20\x20<td>'+Utils['escapeHtml'](formatNumber(_0x3eef9e['count']||0x0))+'</td>\x0a\x20\x20\x20\x20</tr>\x0a\x20\x20')['join']('');}function handleUsageDrilldownClick(_0x9856ce){const _0x46a194=_0x9856ce['target']['closest']('[data-drilldown-group][data-drilldown-value]');if(!_0x46a194)return;_0x9856ce['preventDefault'](),toggleUsageDrilldown(_0x46a194);}function handleUsageDrilldownKeydown(_0xd1b4eb){if(_0xd1b4eb['key']!=='Enter'&&_0xd1b4eb['key']!=='\x20')return;const _0x384a5b=_0xd1b4eb['target']['closest']('.admin-drilldown-row[data-drilldown-group][data-drilldown-value]');if(!_0x384a5b)return;_0xd1b4eb['preventDefault'](),toggleUsageDrilldown(_0x384a5b);}function handleGlobalKeydown(_0x5994c4){_0x5994c4['key']==='Escape'&&state['usage']['drilldown']['open']&&closeUsageDrilldown();}function toggleUsageDrilldown(_0x3b86c1){const _0x48d374=_0x3b86c1['dataset']['drilldownGroup']||'',_0x2beb7b=_0x3b86c1['dataset']['drilldownValue']||'',_0x70ea26=_0x3b86c1['dataset']['drilldownLabel']||_0x2beb7b;if(!_0x48d374||!_0x2beb7b)return;if(isUsageDrilldownActive(_0x48d374,_0x2beb7b)){closeUsageDrilldown();return;}openUsageDrilldown({'group':_0x48d374,'value':_0x2beb7b,'label':_0x70ea26});}function openUsageDrilldown({group:_0x424eac,value:_0x3f1e4f,label:_0xa66b29}){state['usage']['drilldown']['group']=_0x424eac,state['usage']['drilldown']['value']=_0x3f1e4f,state['usage']['drilldown']['label']=_0xa66b29||_0x3f1e4f,state['usage']['drilldown']['open']=!![],state['usage']['drilldown']['data']=null;const _0x35f037=document['getElementById']('usage-drilldown-overlay'),_0x4b03c2=document['getElementById']('usage-drilldown-drawer');_0x35f037&&(_0x35f037['hidden']=![],requestAnimationFrame(()=>_0x35f037['classList']['add']('active'))),_0x4b03c2&&(_0x4b03c2['hidden']=![],_0x4b03c2['setAttribute']('aria-hidden','false'),requestAnimationFrame(()=>_0x4b03c2['classList']['add']('active'))),updateUsageDrilldownHeader(),syncUsageDrilldownActionButtons(),refreshUsageDrilldownHighlights(),loadUsageDrilldown({'showLoading':!![]});}function closeUsageDrilldown(){state['usage']['drilldown']['open']=![],state['usage']['drilldown']['requestToken']+=0x1,state['usage']['drilldown']['request']=null,state['usage']['drilldown']['group']='',state['usage']['drilldown']['value']='',state['usage']['drilldown']['label']='',state['usage']['drilldown']['data']=null;const _0xbf0172=document['getElementById']('usage-drilldown-overlay'),_0x240f86=document['getElementById']('usage-drilldown-drawer');_0xbf0172&&(_0xbf0172['classList']['remove']('active'),_0xbf0172['hidden']=!![]),_0x240f86&&(_0x240f86['classList']['remove']('active'),_0x240f86['hidden']=!![],_0x240f86['setAttribute']('aria-hidden','true')),renderUsageDrilldown(null),syncUsageDrilldownActionButtons(),refreshUsageDrilldownHighlights();}function refreshUsageDrilldownHighlights(){document['querySelectorAll']('.admin-drilldown-row')['forEach'](_0x332810=>{const _0xd7f77a=_0x332810['dataset']['drilldownGroup']||'',_0x2dc455=_0x332810['dataset']['drilldownValue']||'';_0x332810['classList']['toggle']('active',isUsageDrilldownActive(_0xd7f77a,_0x2dc455));}),document['querySelectorAll']('.admin-bar-row-button')['forEach'](_0x33d072=>{const _0x1cf05c=_0x33d072['dataset']['drilldownGroup']||'',_0x1fef74=_0x33d072['dataset']['drilldownValue']||'';_0x33d072['classList']['toggle']('active',isUsageDrilldownActive(_0x1cf05c,_0x1fef74));});}function updateUsageDrilldownHeader(_0x504f68=state['usage']['drilldown']['data']){const _0x5a0a36=document['getElementById']('usage-drilldown-title'),_0xc571ed=document['getElementById']('usage-drilldown-subtitle');if(!_0x5a0a36||!_0xc571ed)return;const _0x3a4ae0=state['usage']['environment']?'\x20in\x20'+state['usage']['environment']:'';_0x5a0a36['textContent']=state['usage']['drilldown']['label']||'Tasks';if(_0x504f68?.['summary']?.['total']>0x0){const _0x8081f6=formatNumber(_0x504f68['summary']['total']||0x0),_0x13c14f=formatNumber(_0x504f68['displayed']||0x0);_0xc571ed['textContent']=_0x504f68['hasMore']?'Showing\x20'+_0x13c14f+'\x20of\x20'+_0x8081f6+'\x20matching\x20tasks\x20for\x20the\x20current\x20'+buildPeriodLabel()+_0x3a4ae0+',\x20newest\x20first.':'Showing\x20all\x20'+_0x8081f6+'\x20matching\x20tasks\x20for\x20the\x20current\x20'+buildPeriodLabel()+_0x3a4ae0+'.';return;}if(_0x504f68){_0xc571ed['textContent']='No\x20matching\x20tasks\x20for\x20the\x20current\x20'+buildPeriodLabel()+_0x3a4ae0+'.';return;}_0xc571ed['textContent']='Loading\x20matching\x20tasks\x20for\x20the\x20current\x20'+buildPeriodLabel()+_0x3a4ae0+'.';}function buildPeriodLabel(){return state['usage']['days']==='all'?'all-time\x20window':state['usage']['days']+'-day\x20window';}async function loadUsageDrilldown({showLoading:showLoading=![]}={}){if(!state['usage']['drilldown']['open']||!state['usage']['drilldown']['group']||!state['usage']['drilldown']['value'])return null;if(state['usage']['drilldown']['request'])return state['usage']['drilldown']['request'];updateUsageDrilldownHeader();const _0x5ce5f9=state['usage']['drilldown']['requestToken']+0x1;return state['usage']['drilldown']['requestToken']=_0x5ce5f9,state['usage']['drilldown']['request']=((async()=>{showLoading&&setUsageDrilldownLoadingState();try{const _0x147c23=new URLSearchParams({'days':state['usage']['days'],'group':state['usage']['drilldown']['group'],'value':state['usage']['drilldown']['value'],'limit':String(USAGE_DRILLDOWN_LIMIT)});state['usage']['environment']&&_0x147c23['set']('environment',state['usage']['environment']);const _0x1cd3e3=await API['get']('/stats/drilldown?'+_0x147c23['toString']());if(state['usage']['drilldown']['requestToken']!==_0x5ce5f9||!state['usage']['drilldown']['open'])return null;return state['usage']['drilldown']['data']=_0x1cd3e3,renderUsageDrilldown(_0x1cd3e3),_0x1cd3e3;}catch(_0x4d86c6){if(state['usage']['drilldown']['requestToken']!==_0x5ce5f9||!state['usage']['drilldown']['open'])return null;return renderUsageDrilldownError(_0x4d86c6),null;}finally{state['usage']['drilldown']['requestToken']===_0x5ce5f9&&(state['usage']['drilldown']['request']=null);}})()),state['usage']['drilldown']['request'];}function setUsageDrilldownLoadingState(){const _0x9e8921=document['getElementById']('usage-drilldown-loading'),_0x5414ef=document['getElementById']('usage-drilldown-error'),_0x49fffb=document['getElementById']('usage-drilldown-empty'),_0x10c74d=document['getElementById']('usage-drilldown-list'),_0x48acad=document['getElementById']('usage-drilldown-summary');if(_0x9e8921)_0x9e8921['hidden']=![];if(_0x5414ef)_0x5414ef['hidden']=!![];if(_0x49fffb)_0x49fffb['hidden']=!![];_0x10c74d&&(_0x10c74d['hidden']=!![],_0x10c74d['innerHTML']=''),_0x48acad&&(_0x48acad['hidden']=!![],_0x48acad['innerHTML']='');}function renderUsageDrilldownError(_0x261098){const _0x2576ce=document['getElementById']('usage-drilldown-loading'),_0x3cf933=document['getElementById']('usage-drilldown-error'),_0x6f2318=document['getElementById']('usage-drilldown-empty'),_0x1776e7=document['getElementById']('usage-drilldown-list'),_0x32dca4=document['getElementById']('usage-drilldown-summary');if(_0x2576ce)_0x2576ce['hidden']=!![];if(_0x6f2318)_0x6f2318['hidden']=!![];_0x1776e7&&(_0x1776e7['hidden']=!![],_0x1776e7['innerHTML']=''),_0x32dca4&&(_0x32dca4['hidden']=!![],_0x32dca4['innerHTML']=''),_0x3cf933&&(_0x3cf933['hidden']=![]),document['getElementById']('usage-drilldown-error-message')['textContent']=_0x261098?.['message']||'Unknown\x20error';}function renderUsageDrilldown(_0x293610){const _0x19793f=document['getElementById']('usage-drilldown-loading'),_0x399a59=document['getElementById']('usage-drilldown-error'),_0xfa47a1=document['getElementById']('usage-drilldown-empty'),_0x50241f=document['getElementById']('usage-drilldown-list'),_0x9433bc=document['getElementById']('usage-drilldown-summary');if(_0x19793f)_0x19793f['hidden']=!![];if(_0x399a59)_0x399a59['hidden']=!![];if(!_0x293610){updateUsageDrilldownHeader(null);if(_0xfa47a1)_0xfa47a1['hidden']=!![];_0x50241f&&(_0x50241f['hidden']=!![],_0x50241f['innerHTML']='');_0x9433bc&&(_0x9433bc['hidden']=!![],_0x9433bc['innerHTML']='');return;}updateUsageDrilldownHeader(_0x293610),renderUsageDrilldownSummary(_0x293610);if(!Array['isArray'](_0x293610['tasks'])||_0x293610['tasks']['length']===0x0){if(_0xfa47a1)_0xfa47a1['hidden']=![];_0x50241f&&(_0x50241f['hidden']=!![],_0x50241f['innerHTML']='');return;}if(_0xfa47a1)_0xfa47a1['hidden']=!![];_0x50241f&&(_0x50241f['hidden']=![],_0x50241f['innerHTML']=_0x293610['tasks']['map'](_0x2fd7b2=>renderUsageDrilldownTask(_0x2fd7b2))['join'](''));}function renderUsageDrilldownSummary(_0x36f8cd){const _0x32228a=document['getElementById']('usage-drilldown-summary');if(!_0x32228a)return;const _0x31a918=_0x36f8cd['summary']||{},_0x412316=[{'label':'Matching\x20Tasks','value':formatNumber(_0x31a918['total']||0x0),'meta':_0x36f8cd['hasMore']?'Showing\x20'+formatNumber(_0x36f8cd['displayed']||0x0)+'\x20most\x20recent':'Current\x20filter\x20match'},{'label':'Approved','value':formatNumber(_0x31a918['approvedTasks']||0x0),'meta':formatNumber(_0x31a918['pushedTasks']||0x0)+'\x20pushed'},{'label':'Changed\x20Tasks','value':formatNumber(_0x31a918['tasksWithChanges']||0x0),'meta':formatNumber(_0x31a918['filesChanged']||0x0)+'\x20files\x20changed'},{'label':'Net\x20Lines','value':formatSignedNumber((Number(_0x31a918['linesAdded'])||0x0)-(Number(_0x31a918['linesDeleted'])||0x0)),'meta':'+'+formatNumber(_0x31a918['linesAdded']||0x0)+'\x20/\x20-'+formatNumber(_0x31a918['linesDeleted']||0x0)}];_0x32228a['hidden']=![],_0x32228a['innerHTML']=_0x412316['map'](_0x60185b=>'\x0a\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-summary-card\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-summary-label\x22>'+Utils['escapeHtml'](_0x60185b['label'])+'</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-summary-value\x22>'+Utils['escapeHtml'](_0x60185b['value'])+'</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-summary-meta\x22>'+Utils['escapeHtml'](_0x60185b['meta'])+'</div>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20')['join']('');}function renderUsageDrilldownTask(_0x20c4c0){const _0x469491=Utils['escapeHtml'](_0x20c4c0['name']||'Task\x20'+String(_0x20c4c0['taskId']||'')['slice'](0x0,0x8)),_0x4d0645=Utils['escapeHtml'](_0x20c4c0['taskId']||''),_0x5105a2='task.html?id='+encodeURIComponent(_0x20c4c0['taskId']||''),_0x181fb1=Utils['escapeHtml'](_0x20c4c0['user']?.['name']||_0x20c4c0['user']?.['username']||_0x20c4c0['user']?.['userId']||'Unknown'),_0x4c3c44=Utils['escapeHtml'](_0x20c4c0['environment']||'Unknown'),_0x3d415a=Utils['escapeHtml'](prettifyKey(_0x20c4c0['source']||'manual')),_0x3082d8=Utils['escapeHtml'](prettifyKey(_0x20c4c0['type']||'standard')),_0x300944=Utils['escapeHtml'](formatDateTime(_0x20c4c0['createdAt'])),_0xfa0126=_0x20c4c0['finishedAt']?Utils['escapeHtml'](formatDateTime(_0x20c4c0['finishedAt'])):'In\x20progress',_0x3db04c=_0x20c4c0['durationMinutes']===null?'Pending':Utils['escapeHtml'](formatDurationMinutes(_0x20c4c0['durationMinutes'])),_0x395ebd=Utils['escapeHtml'](prettifyKey(_0x20c4c0['status']||'unknown')),_0x3d317f=Utils['escapeHtml'](String(_0x20c4c0['status']||'unknown')['toLowerCase']()),_0x429cca=[_0x20c4c0['approved']?'<span\x20class=\x22admin-drilldown-flag\x20approved\x22>Approved</span>':'',_0x20c4c0['pushed']?'<span\x20class=\x22admin-drilldown-flag\x20pushed\x22>Pushed</span>':'',_0x20c4c0['hasChanges']?'<span\x20class=\x22admin-drilldown-flag\x20changed\x22>Has\x20Changes</span>':'']['filter'](Boolean)['join']('');return'\x0a\x20\x20\x20\x20<article\x20class=\x22admin-drilldown-card\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-card-header\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-card-title\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<h3\x20class=\x22admin-drilldown-task-name\x22>'+_0x469491+'</h3>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-task-id\x22>'+_0x4d0645+'</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22status-pill\x20status-'+_0x3d317f+'\x22>'+_0x395ebd+'</span>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-meta\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-meta-item\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22admin-drilldown-meta-label\x22>Environment</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>'+_0x4c3c44+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-meta-item\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22admin-drilldown-meta-label\x22>User</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>'+_0x181fb1+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-meta-item\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22admin-drilldown-meta-label\x22>Source</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>'+_0x3d415a+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-meta-item\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22admin-drilldown-meta-label\x22>Type</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>'+_0x3082d8+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-meta-item\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22admin-drilldown-meta-label\x22>Created</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>'+_0x300944+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-meta-item\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22admin-drilldown-meta-label\x22>Duration</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>'+_0x3db04c+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-meta-item\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22admin-drilldown-meta-label\x22>Finished</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>'+_0xfa0126+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-meta-item\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22admin-drilldown-meta-label\x22>Code\x20Impact</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>+'+Utils['escapeHtml'](formatNumber(_0x20c4c0['code']?.['linesAdded']||0x0))+'\x20/\x20-'+Utils['escapeHtml'](formatNumber(_0x20c4c0['code']?.['linesDeleted']||0x0))+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-stats\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22admin-drilldown-chip\x22>'+Utils['escapeHtml'](formatNumber(_0x20c4c0['code']?.['filesChanged']||0x0))+'\x20files</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22admin-drilldown-chip\x22>'+Utils['escapeHtml'](formatNumber(_0x20c4c0['code']?.['repositories']||0x0))+'\x20repos</span>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-actions\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-flags\x22>'+(_0x429cca||'<span\x20class=\x22admin-drilldown-flag\x20neutral\x22>Not\x20approved</span>')+'</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<a\x20class=\x22btn-secondary\x20btn-small\x22\x20href=\x22'+Utils['escapeHtml'](_0x5105a2)+'\x22\x20target=\x22_blank\x22\x20rel=\x22noopener\x20noreferrer\x22>Open\x20Task</a>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</article>\x0a\x20\x20';}function updateActiveFilterButtons(_0x79a2f6,_0x515f51){document['querySelectorAll'](_0x79a2f6+'\x20.admin-filter-btn')['forEach'](_0x54bb48=>{_0x54bb48['classList']['toggle']('active',_0x54bb48['dataset']['level']===_0x515f51||_0x54bb48['dataset']['days']===_0x515f51||_0x54bb48['dataset']['order']===_0x515f51);});}function scrollLogsToLiveEdge(_0x4e9b86){if(!_0x4e9b86)return;if(state['logs']['order']===LOG_ORDER_DESC){_0x4e9b86['scrollTop']=0x0;return;}_0x4e9b86['scrollTop']=_0x4e9b86['scrollHeight'];}function setSummaryValue(_0x4dd980,_0x12d715,_0x5afd73=''){const _0x275cf5=document['getElementById'](_0x4dd980);if(!_0x275cf5)return;_0x275cf5['textContent']=_0x12d715,_0x275cf5['classList']['remove']('status-good','status-warn','status-bad'),_0x5afd73&&_0x275cf5['classList']['add'](_0x5afd73);}function statusClassFromPercent(_0x259adc){if(_0x259adc>=0x50)return'status-good';if(_0x259adc>0x3c)return'status-warn';return'status-bad';}function formatDateTime(_0x574025){const _0x33cfc9=new Date(_0x574025);if(Number['isNaN'](_0x33cfc9['getTime']()))return _0x574025||'Unknown';return _0x33cfc9['toLocaleString']();}function formatLogContext(_0x3cb99e){if(!_0x3cb99e)return'';try{return JSON['stringify'](_0x3cb99e,null,0x2);}catch{return String(_0x3cb99e);}}function formatLogEntryForClipboard(_0x544a89){const _0x1acee1=['['+formatDateTime(_0x544a89['timestamp'])+']\x20'+String(_0x544a89['level']||'INFO')['toUpperCase']()];_0x544a89['message']&&_0x1acee1['push'](String(_0x544a89['message']));const _0x525cb6=formatLogContext(_0x544a89['context']);return _0x525cb6&&(_0x1acee1['push']('Context:'),_0x1acee1['push'](_0x525cb6)),_0x1acee1['join']('\x0a');}function formatLogEntriesForClipboard(_0x467419){if(!Array['isArray'](_0x467419)||_0x467419['length']===0x0)return'';return _0x467419['map'](formatLogEntryForClipboard)['join']('\x0a\x0a');}function formatDurationMinutes(_0x3a556c){const _0x452dd2=Math['round'](Number(_0x3a556c)||0x0);if(_0x452dd2<0x3c)return _0x452dd2+'m';const _0x30c634=Math['floor'](_0x452dd2/0x3c),_0x12071a=_0x452dd2%0x3c;return _0x12071a>0x0?_0x30c634+'h\x20'+_0x12071a+'m':_0x30c634+'h';}function formatPercent(_0x1027d){return Math['round'](Number(_0x1027d)||0x0)+'%';}function formatNumber(_0x5f5ba5){return NUMBER_FORMATTER['format'](Number(_0x5f5ba5)||0x0);}function formatSignedNumber(_0x43bfe3){const _0x5c6f50=Number(_0x43bfe3)||0x0;if(_0x5c6f50>0x0)return'+'+formatNumber(_0x5c6f50);return formatNumber(_0x5c6f50);}function prettifyKey(_0x5f1ed3){return String(_0x5f1ed3)['replace'](/[_-]+/g,'\x20')['replace'](/\b\w/g,_0x4b7a66=>_0x4b7a66['toUpperCase']());}const DRILLDOWN_TITLES={'containers':'Docker\x20Containers','storage':'Docker\x20Storage','sessions':'Active\x20Sessions','system':'System\x20Information'};function openDrilldown(_0x371621){if(!_0x371621||!DRILLDOWN_TITLES[_0x371621])return;const _0x4de069=document['getElementById']('drilldown-modal'),_0x5d7e77=document['getElementById']('drilldown-modal-title'),_0x2f446e=document['getElementById']('drilldown-loading'),_0x25b578=document['getElementById']('drilldown-error'),_0x3132b3=document['getElementById']('drilldown-content');_0x5d7e77['textContent']=DRILLDOWN_TITLES[_0x371621],_0x2f446e['hidden']=![],_0x25b578['hidden']=!![],_0x3132b3['innerHTML']='',_0x4de069['hidden']=![],loadDrilldownData(_0x371621)['then'](_0x5d13e3=>{_0x2f446e['hidden']=!![],_0x3132b3['innerHTML']=_0x5d13e3,attachDrilldownActions(_0x371621,_0x3132b3);})['catch'](_0x2027fe=>{_0x2f446e['hidden']=!![],_0x25b578['hidden']=![],document['getElementById']('drilldown-error-message')['textContent']=_0x2027fe['message']||'Failed\x20to\x20load\x20details';});}function closeDrilldownModal(){const _0x98e73a=document['getElementById']('drilldown-modal');_0x98e73a&&(_0x98e73a['hidden']=!![]);}async function loadDrilldownData(_0x1c583b){switch(_0x1c583b){case'containers':return loadContainersDrilldown();case'storage':return loadStorageDrilldown();case'sessions':return loadSessionsDrilldown();case'system':return loadSystemDrilldown();default:return'<div\x20class=\x22drilldown-empty\x22>Unknown\x20drilldown\x20type.</div>';}}async function loadContainersDrilldown(){const _0x149258=await API['getDockerContainers'](),_0x49e5cf=_0x149258['containers']||[];if(_0x49e5cf['length']===0x0)return'<div\x20class=\x22drilldown-empty\x22>No\x20Docker\x20containers\x20found.</div>';const _0x5cc496=_0x49e5cf['filter'](_0x5db237=>_0x5db237['state']==='running')['length'],_0xd9a6f9=_0x49e5cf['length']-_0x5cc496;let _0x363342='\x0a\x20\x20\x20\x20<div\x20class=\x22drilldown-inline-message\x22>\x0a\x20\x20\x20\x20\x20\x20'+esc(String(_0x49e5cf['length']))+'\x20container'+(_0x49e5cf['length']!==0x1?'s':'')+'\x20total\x20&mdash;\x0a\x20\x20\x20\x20\x20\x20'+esc(String(_0x5cc496))+'\x20running,\x20'+esc(String(_0xd9a6f9))+'\x20stopped\x0a\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20<div\x20class=\x22drilldown-table-wrap\x22>\x0a\x20\x20\x20\x20\x20\x20<table\x20class=\x22drilldown-table\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<thead>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Name</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Image</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Status</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Ports</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Created</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Actions</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</thead>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<tbody>\x0a\x20\x20';for(const _0x144c76 of _0x49e5cf){const _0x5d6700=esc((_0x144c76['names']||[])[0x0]||_0x144c76['shortId']||_0x144c76['id']),_0x3b2d71=esc(_0x144c76['image']||'-'),_0x327bbd=String(_0x144c76['state']||'unknown')['toLowerCase'](),_0x15b2ae=esc(_0x144c76['status']||_0x144c76['state']||'-'),_0x389115=(_0x144c76['ports']||[])['filter'](_0x11b823=>_0x11b823['public'])['map'](_0x70e1ae=>esc(_0x70e1ae['public']+':'+_0x70e1ae['private']+'/'+_0x70e1ae['type']))['join'](',\x20')||'-',_0x2f55d0=_0x144c76['created']?esc(formatDateTime(_0x144c76['created'])):'-',_0x5b4c12=_0x327bbd==='running';_0x363342+='\x0a\x20\x20\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<td><strong>'+_0x5d6700+'</strong><br><span\x20class=\x22text-muted\x22\x20style=\x22font-size:11px\x22>'+esc(_0x144c76['shortId']||'')+'</span></td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<td><span\x20class=\x22drilldown-tag\x22>'+_0x3b2d71+'</span></td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<td><span\x20class=\x22drilldown-status\x20drilldown-status-'+esc(_0x327bbd)+'\x22>'+_0x15b2ae+'</span></td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<td>'+_0x389115+'</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<td\x20style=\x22white-space:nowrap\x22>'+_0x2f55d0+'</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22drilldown-actions\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+(_0x5b4c12?'<button\x20class=\x22btn-secondary\x20btn-small\x22\x20data-action=\x22stop-container\x22\x20data-container-id=\x22'+esc(_0x144c76['id'])+'\x22>Stop</button>':'')+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20class=\x22btn-ghost\x20btn-small\x22\x20data-action=\x22remove-container\x22\x20data-container-id=\x22'+esc(_0x144c76['id'])+'\x22>Remove</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</td>\x0a\x20\x20\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20';}return _0x363342+='</tbody></table></div>',_0x363342;}async function loadStorageDrilldown(){const [_0x518385,_0x4b0017]=await Promise['all']([API['getDockerImages'](),API['getDockerVolumes']()]),_0x3a0754=_0x518385['images']||[],_0x2efdc7=_0x4b0017['volumes']||[];let _0x38ac90='';_0x38ac90+='<div\x20class=\x22drilldown-section\x22><div\x20class=\x22drilldown-section-title\x22>Images</div>';if(_0x3a0754['length']===0x0)_0x38ac90+='<div\x20class=\x22drilldown-empty\x22>No\x20images\x20found.</div>';else{_0x38ac90+='\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22drilldown-table-wrap\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<table\x20class=\x22drilldown-table\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<thead>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>ID</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Tags</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Size</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Created</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Containers</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</thead>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tbody>\x0a\x20\x20\x20\x20';for(const _0x4a0850 of _0x3a0754){const _0x56733d=(_0x4a0850['tags']||[])['filter'](_0x4b7aed=>_0x4b7aed!=='<none>:<none>'),_0x1f961a=_0x56733d['length']>0x0?'<div\x20class=\x22drilldown-tag-list\x22>'+_0x56733d['map'](_0x2ff13b=>'<span\x20class=\x22drilldown-tag\x22>'+esc(_0x2ff13b)+'</span>')['join']('')+'</div>':'<span\x20class=\x22text-muted\x22>untagged</span>';_0x38ac90+='\x0a\x20\x20\x20\x20\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td><code>'+esc(_0x4a0850['id']||'-')+'</code></td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td>'+_0x1f961a+'</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td\x20style=\x22white-space:nowrap\x22>'+esc(_0x4a0850['sizeDisplay']||'-')+'</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td\x20style=\x22white-space:nowrap\x22>'+(_0x4a0850['created']?esc(formatDateTime(_0x4a0850['created'])):'-')+'</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td>'+esc(String(_0x4a0850['containers']??'-'))+'</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20\x20\x20';}_0x38ac90+='</tbody></table></div>';}_0x38ac90+='</div>',_0x38ac90+='<div\x20class=\x22drilldown-section\x22><div\x20class=\x22drilldown-section-title\x22>Volumes</div>';if(_0x2efdc7['length']===0x0)_0x38ac90+='<div\x20class=\x22drilldown-empty\x22>No\x20volumes\x20found.</div>';else{_0x38ac90+='\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22drilldown-table-wrap\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<table\x20class=\x22drilldown-table\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<thead>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Name</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Driver</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Scope</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Created</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</thead>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tbody>\x0a\x20\x20\x20\x20';for(const _0x3a35d7 of _0x2efdc7){const _0x2123ce=_0x3a35d7['name']||'-',_0x45ff81=_0x2123ce['length']>0x28?_0x2123ce['substring'](0x0,0x25)+'...':_0x2123ce;_0x38ac90+='\x0a\x20\x20\x20\x20\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td\x20title=\x22'+esc(_0x2123ce)+'\x22><code>'+esc(_0x45ff81)+'</code></td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td>'+esc(_0x3a35d7['driver']||'-')+'</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td>'+esc(_0x3a35d7['scope']||'-')+'</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td\x20style=\x22white-space:nowrap\x22>'+(_0x3a35d7['created']?esc(formatDateTime(_0x3a35d7['created'])):'-')+'</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20\x20\x20';}_0x38ac90+='</tbody></table></div>';}return _0x38ac90+='</div>',_0x38ac90;}async function loadSessionsDrilldown(){const _0x568970=await API['getActiveSessions'](),_0x334ff7=_0x568970['sessions']||[];if(_0x334ff7['length']===0x0)return'<div\x20class=\x22drilldown-empty\x22>No\x20active\x20sessions\x20found.</div>';let _0xeb3d74='\x0a\x20\x20\x20\x20<div\x20class=\x22drilldown-inline-message\x22>\x0a\x20\x20\x20\x20\x20\x20'+esc(String(_0x334ff7['length']))+'\x20active\x20session'+(_0x334ff7['length']!==0x1?'s':'')+'\x0a\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20<div\x20class=\x22drilldown-table-wrap\x22>\x0a\x20\x20\x20\x20\x20\x20<table\x20class=\x22drilldown-table\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<thead>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Session\x20ID</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>User</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Created</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Last\x20Access</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</thead>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<tbody>\x0a\x20\x20';for(const _0x3d5028 of _0x334ff7){const _0x549611=(_0x3d5028['id']||'')['length']>0x10?_0x3d5028['id']['substring'](0x0,0xd)+'...':_0x3d5028['id']||'-';_0xeb3d74+='\x0a\x20\x20\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<td\x20title=\x22'+esc(_0x3d5028['id']||'')+'\x22><code>'+esc(_0x549611)+'</code></td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<td>'+esc(_0x3d5028['username']||'Unknown')+'</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<td\x20style=\x22white-space:nowrap\x22>'+(_0x3d5028['createdAt']?esc(formatDateTime(_0x3d5028['createdAt'])):'-')+'</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<td\x20style=\x22white-space:nowrap\x22>'+(_0x3d5028['lastAccess']?esc(formatDateTime(_0x3d5028['lastAccess'])):'-')+'</td>\x0a\x20\x20\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20';}return _0xeb3d74+='</tbody></table></div>',_0xeb3d74;}async function loadSystemDrilldown(){const _0x3e7386=await API['getSystemInfo']();let _0x261c5c='<div\x20class=\x22drilldown-info-grid\x22>';const _0x355023=[{'label':'Hostname','value':_0x3e7386['hostname']},{'label':'Platform','value':_0x3e7386['platform']+'\x20('+_0x3e7386['arch']+')'},{'label':'Kernel','value':_0x3e7386['release']},{'label':'Node.js','value':_0x3e7386['nodeVersion']},{'label':'Process\x20ID','value':_0x3e7386['pid']},{'label':'CPU\x20Model','value':_0x3e7386['cpuModel']},{'label':'CPU\x20Cores','value':_0x3e7386['coreCount']},{'label':'Total\x20Memory','value':_0x3e7386['totalMemoryDisplay']},{'label':'Free\x20Memory','value':_0x3e7386['freeMemoryDisplay']},{'label':'System\x20Uptime','value':formatUptimeSeconds(_0x3e7386['uptime']?.['system'])},{'label':'Process\x20Uptime','value':formatUptimeSeconds(_0x3e7386['uptime']?.['process'])}];for(const _0x3340ee of _0x355023){_0x261c5c+='\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22drilldown-info-item\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22drilldown-info-label\x22>'+esc(_0x3340ee['label'])+'</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22drilldown-info-value\x22>'+esc(String(_0x3340ee['value']??'-'))+'</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20';}_0x261c5c+='</div>';_0x3e7386['loadAverage']&&(_0x261c5c+='<div\x20class=\x22drilldown-section\x22><div\x20class=\x22drilldown-section-title\x22>Load\x20Average</div>',_0x261c5c+='<div\x20class=\x22drilldown-info-grid\x22>',_0x261c5c+='\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22drilldown-info-item\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22drilldown-info-label\x22>1\x20Minute</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22drilldown-info-value\x22>'+esc(_0x3e7386['loadAverage']['1m']||'-')+'</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22drilldown-info-item\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22drilldown-info-label\x22>5\x20Minutes</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22drilldown-info-value\x22>'+esc(_0x3e7386['loadAverage']['5m']||'-')+'</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22drilldown-info-item\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22drilldown-info-label\x22>15\x20Minutes</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22drilldown-info-value\x22>'+esc(_0x3e7386['loadAverage']['15m']||'-')+'</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20',_0x261c5c+='</div></div>');if(Array['isArray'](_0x3e7386['cores'])&&_0x3e7386['cores']['length']>0x0&&_0x3e7386['cores']['length']<=0x40){_0x261c5c+='<div\x20class=\x22drilldown-section\x22><div\x20class=\x22drilldown-section-title\x22>CPU\x20Cores</div>',_0x261c5c+='\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22drilldown-table-wrap\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<table\x20class=\x22drilldown-table\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<thead>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Core</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Model</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Speed\x20(MHz)</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</thead>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tbody>\x0a\x20\x20\x20\x20';for(const _0x5800ff of _0x3e7386['cores']){_0x261c5c+='\x0a\x20\x20\x20\x20\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td>'+esc(String(_0x5800ff['index']))+'</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td>'+esc(_0x5800ff['model']||'-')+'</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td>'+esc(String(_0x5800ff['speed']||'-'))+'</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20\x20\x20';}_0x261c5c+='</tbody></table></div></div>';}return _0x261c5c;}function formatUptimeSeconds(_0x4cfd60){if(!Number['isFinite'](_0x4cfd60)||_0x4cfd60<0x0)return'-';const _0x289f6a=Math['floor'](_0x4cfd60/0x15180),_0x39e427=Math['floor'](_0x4cfd60%0x15180/0xe10),_0x3b1061=Math['floor'](_0x4cfd60%0xe10/0x3c);if(_0x289f6a>0x0)return _0x289f6a+'d\x20'+_0x39e427+'h\x20'+_0x3b1061+'m';if(_0x39e427>0x0)return _0x39e427+'h\x20'+_0x3b1061+'m';return _0x3b1061+'m';}function esc(_0x8673c9){return Utils['escapeHtml'](String(_0x8673c9??''));}function attachDrilldownActions(_0x35fd9b,_0x47f4f5){_0x35fd9b==='containers'&&_0x47f4f5['addEventListener']('click',async _0x11c40d=>{const _0x23fbab=_0x11c40d['target']['closest']('[data-action]');if(!_0x23fbab)return;const _0x308284=_0x23fbab['dataset']['action'],_0x139736=_0x23fbab['dataset']['containerId'];if(!_0x139736)return;_0x23fbab['disabled']=!![],_0x23fbab['textContent']=_0x308284==='stop-container'?'Stopping...':'Removing...';try{if(_0x308284==='stop-container')await API['stopDockerContainer'](_0x139736),Utils['showSuccess']('Container\x20stopped');else _0x308284==='remove-container'&&(await API['removeDockerContainer'](_0x139736),Utils['showSuccess']('Container\x20removed'));const _0x57c26e=await loadContainersDrilldown();document['getElementById']('drilldown-content')['innerHTML']=_0x57c26e,attachDrilldownActions('containers',document['getElementById']('drilldown-content')),loadHealth({'showLoading':![]});}catch(_0x2ccdf1){Utils['showError'](_0x2ccdf1['message']||'Failed\x20to\x20'+_0x308284['replace']('-','\x20')),_0x23fbab['disabled']=![],_0x23fbab['textContent']=_0x308284==='stop-container'?'Stop':'Remove';}});}
1
+ import{API,Utils,initializeAdminMenu}from'./app.js';import{initTheme,mountThemeToggle}from'./theme.js';const HEALTH_REFRESH_INTERVAL_MS=0x7530,LOG_SEARCH_DEBOUNCE_MS=0xfa,LOG_ORDER_ASC='asc',LOG_ORDER_DESC='desc',RESTART_POLL_INTERVAL_MS=0x7d0,RESTART_POLL_MAX_ATTEMPTS=0x1e,RESTART_MIN_SUCCESS_DELAY_MS=0x1b58,USAGE_DRILLDOWN_LIMIT=0x19,NUMBER_FORMATTER=new Intl['NumberFormat'](),state={'currentSection':'health','environments':[],'health':{'loaded':![],'request':null,'autoRefreshTimer':null,'versionChecked':![],'currentVersion':null,'latestVersion':null,'installCommand':null,'updateEnabled':![],'hasRestartCommand':![],'updateInProgress':![],'restartInProgress':![],'updateAvailable':![]},'logs':{'loaded':![],'request':null,'entries':[],'nextEntryId':0x1,'selectedEntryIds':new Set(),'total':0x0,'minLevel':'INFO','level':'ALL','order':LOG_ORDER_ASC,'search':'','maxEntries':0x3e8,'stream':null,'streamState':'paused','live':![],'autoScroll':!![],'searchTimer':null},'usage':{'loaded':![],'request':null,'days':'30','environment':'','drilldown':{'open':![],'request':null,'requestToken':0x0,'group':'','value':'','label':'','data':null}}};document['addEventListener']('DOMContentLoaded',initialize);async function initialize(){try{initTheme(),mountThemeToggle();const _0x4e3e70=await checkAdminAccess();await initializeAdminMenu(_0x4e3e70),setupEventListeners(),await loadEnvironmentOptions(),document['getElementById']('admin-loading')['hidden']=!![],document['getElementById']('admin-content')['hidden']=![];const _0xb43c51=getSessionValue('admin-health-auto-refresh');if(_0xb43c51!==null){const _0x343e13=document['getElementById']('health-auto-refresh');if(_0x343e13)_0x343e13['checked']=_0xb43c51!=='false';}const _0x4c49e1=getSessionValue('admin-logs-order');(_0x4c49e1===LOG_ORDER_ASC||_0x4c49e1===LOG_ORDER_DESC)&&(state['logs']['order']=_0x4c49e1);syncLogOrderUi();const _0x5d024e=getSessionValue('admin-active-section'),_0xca43d5=['health','logs','usage']['includes'](_0x5d024e)?_0x5d024e:'health';await switchSection(_0xca43d5);}catch(_0x36742c){console['error']('Failed\x20to\x20initialize\x20Server\x20Administration\x20page',_0x36742c),document['getElementById']('admin-loading')['hidden']=!![],document['getElementById']('admin-error')['hidden']=![],document['getElementById']('admin-error-message')['textContent']=_0x36742c['message']||'Unknown\x20error';}}async function checkAdminAccess(){try{const _0x5ad19a=await API['getCurrentUser']();if(!window['Permissions']?.['hasServerPermission'](_0x5ad19a,'*')){Utils['showToast']('Access\x20denied:\x20Admin\x20privileges\x20required','error'),setTimeout(()=>{window['location']['href']='index.html';},0x7d0);throw new Error('Access\x20denied');}return _0x5ad19a;}catch(_0x26de63){_0x26de63['message']!=='Access\x20denied'&&(window['location']['href']='login.html');throw _0x26de63;}}function setupEventListeners(){document['querySelectorAll']('.settings-nav-item')['forEach'](_0x466085=>{_0x466085['addEventListener']('click',()=>switchSection(_0x466085['dataset']['section']));}),document['getElementById']('retry-admin-btn')?.['addEventListener']('click',()=>{window['location']['reload']();}),document['getElementById']('health-refresh-btn')?.['addEventListener']('click',()=>loadHealth({'showLoading':!![]})),document['getElementById']('retry-health-btn')?.['addEventListener']('click',()=>loadHealth({'showLoading':!![]})),document['getElementById']('health-auto-refresh')?.['addEventListener']('change',syncHealthAutoRefresh),document['getElementById']('health-check-updates-btn')?.['addEventListener']('click',()=>loadVersionStatus({'checkUpdates':!![]})),document['getElementById']('health-copy-install-btn')?.['addEventListener']('click',copyInstallCommand),document['getElementById']('health-update-btn')?.['addEventListener']('click',applyUpdate),document['getElementById']('health-restart-btn')?.['addEventListener']('click',showRestartConfirmation),document['getElementById']('confirm-restart-btn')?.['addEventListener']('click',confirmRestart),document['getElementById']('cancel-restart-btn')?.['addEventListener']('click',hideRestartModal),document['getElementById']('close-restart-modal')?.['addEventListener']('click',hideRestartModal),document['querySelector']('#restart-modal\x20.modal-overlay')?.['addEventListener']('click',hideRestartModal),document['getElementById']('restart-overlay-retry')?.['addEventListener']('click',()=>waitForServerRestart({'manualRetry':!![]})),document['getElementById']('server-stop-containers')?.['addEventListener']('click',()=>runCleanupAction('Stopping\x20containers',()=>API['stopAllContainers']())),document['getElementById']('server-remove-stopped')?.['addEventListener']('click',()=>runCleanupAction('Removing\x20stopped\x20containers',()=>API['removeStoppedContainers']())),document['getElementById']('server-prune-docker')?.['addEventListener']('click',()=>runCleanupAction('Pruning\x20Docker\x20resources',()=>API['pruneDockerResources']())),document['getElementById']('cleanup-toggle')?.['addEventListener']('click',toggleCleanupSection),document['getElementById']('logs-refresh-btn')?.['addEventListener']('click',()=>loadLogs({'showLoading':!![]})),document['getElementById']('retry-logs-btn')?.['addEventListener']('click',()=>loadLogs({'showLoading':!![]})),document['getElementById']('logs-live-toggle')?.['addEventListener']('click',toggleLogsLiveMode),document['getElementById']('logs-clear-btn')?.['addEventListener']('click',clearDisplayedLogs),document['getElementById']('logs-select-visible-btn')?.['addEventListener']('click',toggleVisibleLogSelection),document['getElementById']('logs-clear-selection-btn')?.['addEventListener']('click',clearSelectedLogEntries),document['getElementById']('logs-copy-selected-btn')?.['addEventListener']('click',copySelectedLogEntries),document['getElementById']('logs-search-input')?.['addEventListener']('input',handleLogsSearchInput),document['querySelectorAll']('#logs-level-filters\x20.admin-filter-btn')['forEach'](_0x4625e2=>{_0x4625e2['addEventListener']('click',()=>{state['logs']['level']=_0x4625e2['dataset']['level']||'ALL',updateActiveFilterButtons('#logs-level-filters',state['logs']['level']),loadLogs({'showLoading':![]});});}),document['querySelectorAll']('#logs-order-toggle\x20.admin-filter-btn')['forEach'](_0x1b3cbd=>{_0x1b3cbd['addEventListener']('click',()=>{setLogOrder(_0x1b3cbd['dataset']['order'],{'focusLiveEdge':!![]});});}),document['getElementById']('logs-container')?.['addEventListener']('click',handleLogContainerClick),document['getElementById']('logs-container')?.['addEventListener']('change',handleLogContainerChange),document['getElementById']('logs-container')?.['addEventListener']('scroll',updateLogAutoScrollState),document['querySelectorAll']('.metric-card-drilldown')['forEach'](_0x6ba6b0=>{_0x6ba6b0['addEventListener']('click',()=>openDrilldown(_0x6ba6b0['dataset']['drilldown'])),_0x6ba6b0['addEventListener']('keydown',_0x389ee9=>{(_0x389ee9['key']==='Enter'||_0x389ee9['key']==='\x20')&&(_0x389ee9['preventDefault'](),openDrilldown(_0x6ba6b0['dataset']['drilldown']));});}),document['getElementById']('close-drilldown-modal')?.['addEventListener']('click',closeDrilldownModal),document['getElementById']('drilldown-modal-overlay')?.['addEventListener']('click',closeDrilldownModal),document['addEventListener']('keydown',_0x1325ee=>{_0x1325ee['key']==='Escape'&&!document['getElementById']('drilldown-modal')?.['hidden']&&closeDrilldownModal();}),document['getElementById']('usage-refresh-btn')?.['addEventListener']('click',()=>loadUsage({'showLoading':!![]})),document['getElementById']('retry-usage-btn')?.['addEventListener']('click',()=>loadUsage({'showLoading':!![]})),document['getElementById']('usage-environment-filter')?.['addEventListener']('change',_0x5e3839=>{state['usage']['environment']=_0x5e3839['target']['value']||'',loadUsage({'showLoading':![]});}),document['querySelectorAll']('#usage-period-buttons\x20.admin-filter-btn')['forEach'](_0x6a59be=>{_0x6a59be['addEventListener']('click',()=>{state['usage']['days']=_0x6a59be['dataset']['days']||'30',updateActiveFilterButtons('#usage-period-buttons',state['usage']['days']),loadUsage({'showLoading':![]});});}),document['getElementById']('usage-content')?.['addEventListener']('click',handleUsageDrilldownClick),document['getElementById']('usage-content')?.['addEventListener']('keydown',handleUsageDrilldownKeydown),document['getElementById']('usage-drilldown-close')?.['addEventListener']('click',closeUsageDrilldown),document['getElementById']('usage-drilldown-overlay')?.['addEventListener']('click',closeUsageDrilldown),document['getElementById']('retry-usage-drilldown-btn')?.['addEventListener']('click',()=>loadUsageDrilldown({'showLoading':!![]})),window['addEventListener']('keydown',handleGlobalKeydown);}async function switchSection(_0x2f628a){if(!_0x2f628a)return;document['querySelectorAll']('.settings-nav-item')['forEach'](_0xb92861=>{const _0x436507=_0xb92861['dataset']['section']===_0x2f628a;_0xb92861['classList']['toggle']('active',_0x436507),_0xb92861['setAttribute']('aria-selected',String(_0x436507));}),document['querySelectorAll']('.settings-panel')['forEach'](_0x48b42b=>{const _0x1c896f=_0x48b42b['id']==='section-'+_0x2f628a;_0x48b42b['hidden']=!_0x1c896f,_0x48b42b['classList']['toggle']('active',_0x1c896f);}),state['currentSection']=_0x2f628a,setSessionValue('admin-active-section',_0x2f628a),_0x2f628a!=='health'&&stopHealthAutoRefresh(),_0x2f628a!=='logs'&&stopLogStream(),_0x2f628a!=='usage'&&closeUsageDrilldown(),_0x2f628a==='health'&&(syncHealthAutoRefresh(),await loadHealth({'showLoading':!state['health']['loaded']})),_0x2f628a==='logs'&&(await loadLogs({'showLoading':!state['logs']['loaded']}),state['logs']['live']?startLogStream():updateLogsLiveUi()),_0x2f628a==='usage'&&await loadUsage({'showLoading':!state['usage']['loaded']});}function getSessionValue(_0x27049a){try{return sessionStorage['getItem'](_0x27049a);}catch{return null;}}function setSessionValue(_0x3e5398,_0x5eb302){try{sessionStorage['setItem'](_0x3e5398,_0x5eb302);}catch{}}async function loadEnvironmentOptions(){const _0x497974=await API['get']('/environments');state['environments']=(_0x497974['environments']||[])['map'](_0x4c46b8=>_0x4c46b8?.['name'])['filter'](Boolean)['sort']((_0x17541b,_0x40f08d)=>_0x17541b['localeCompare'](_0x40f08d));const _0x64b227=document['getElementById']('usage-environment-filter');if(!_0x64b227)return;_0x64b227['innerHTML']='<option\x20value=\x22\x22>All\x20environments</option>'+state['environments']['map'](_0x9bc4a6=>'<option\x20value=\x22'+Utils['escapeHtml'](_0x9bc4a6)+'\x22>'+Utils['escapeHtml'](_0x9bc4a6)+'</option>')['join'](''),_0x64b227['value']=state['usage']['environment'];}function syncHealthAutoRefresh(){const _0x3cf3c7=document['getElementById']('health-auto-refresh');if(_0x3cf3c7)setSessionValue('admin-health-auto-refresh',String(_0x3cf3c7['checked']));const _0x361e77=state['currentSection']==='health'&&!!_0x3cf3c7?.['checked'];stopHealthAutoRefresh();if(!_0x361e77)return;state['health']['autoRefreshTimer']=window['setInterval'](()=>{loadHealth({'showLoading':![]});},HEALTH_REFRESH_INTERVAL_MS);}function stopHealthAutoRefresh(){state['health']['autoRefreshTimer']&&(clearInterval(state['health']['autoRefreshTimer']),state['health']['autoRefreshTimer']=null);}async function loadHealth({showLoading:showLoading=![]}={}){if(state['health']['request'])return state['health']['request'];return state['health']['request']=((async()=>{const _0x456278=document['getElementById']('health-loading'),_0x4f74ba=document['getElementById']('health-error'),_0x1d1360=document['getElementById']('health-content');(showLoading||!state['health']['loaded'])&&(_0x456278['hidden']=![],_0x4f74ba['hidden']=!![],_0x1d1360['hidden']=!![]);try{const [_0x221207]=await Promise['all']([API['get']('/health/metrics'),loadUpdateSettings()['catch'](_0x9b5500=>{console['error']('Failed\x20to\x20load\x20update\x20settings',_0x9b5500),state['health']['updateEnabled']=![],state['health']['hasRestartCommand']=![],syncHealthActionButtons();})]);renderHealthMetrics(_0x221207),!state['health']['currentVersion']&&await loadVersionStatus({'checkUpdates':![]}),_0x456278['hidden']=!![],_0x4f74ba['hidden']=!![],_0x1d1360['hidden']=![],state['health']['loaded']=!![];}catch(_0x21a69e){console['error']('Failed\x20to\x20load\x20server\x20metrics',_0x21a69e),_0x456278['hidden']=!![],_0x4f74ba['hidden']=![],_0x1d1360['hidden']=!![],document['getElementById']('health-error-message')['textContent']=_0x21a69e['message']||'Unknown\x20error';}finally{state['health']['request']=null;}})()),state['health']['request'];}function syncHealthActionButtons(){const _0x531d53=document['getElementById']('health-update-btn'),_0x105394=document['getElementById']('health-restart-btn');if(!_0x531d53||!_0x105394)return;const _0x1c5d60=state['health']['updateEnabled'],_0x5e58ab=_0x1c5d60&&state['health']['versionChecked']&&state['health']['updateAvailable'];_0x531d53['hidden']=!_0x5e58ab,_0x531d53['disabled']=state['health']['updateInProgress']||state['health']['restartInProgress']||!state['health']['latestVersion'],_0x531d53['textContent']=state['health']['updateInProgress']?'Updating...':'Update\x20Server',_0x105394['hidden']=!_0x1c5d60,_0x105394['disabled']=state['health']['updateInProgress']||state['health']['restartInProgress'];}function setUpdateOutput({status:_0x415709,output:_0x156a0a}){const _0x38252f=document['getElementById']('health-update-output-wrap'),_0x84ec07=document['getElementById']('health-update-status'),_0x265120=document['getElementById']('health-update-output');if(!_0x38252f||!_0x84ec07||!_0x265120)return;const _0x53b3da=_0x415709||'';_0x38252f['hidden']=![],_0x84ec07['className']='admin-update-status',_0x53b3da&&_0x84ec07['classList']['add'](_0x53b3da),_0x84ec07['textContent']=_0x53b3da==='success'?'Success':_0x53b3da==='error'?'Failed':'In\x20Progress',_0x265120['textContent']=_0x156a0a||'No\x20output\x20returned.';}function buildCommandOutput(_0x205346,_0x5124d6){const _0x33aee8=[];typeof _0x205346==='string'&&_0x205346['trim']()&&_0x33aee8['push'](_0x205346['trim']());if(typeof _0x5124d6==='string'&&_0x5124d6['trim']()){const _0x3b7b66=_0x5124d6['trim'](),_0xa7e427=_0x33aee8['some'](_0x12fa4d=>_0x12fa4d['includes'](_0x3b7b66));!_0xa7e427&&_0x33aee8['push']('Error:\x0a'+_0x3b7b66);}return _0x33aee8['join']('\x0a\x0a');}function showRestartOverlay({title:_0x4c9fb2,message:_0xc3d3b0,showRetry:showRetry=![]}){const _0x4d6d37=document['getElementById']('health-restart-overlay'),_0x58cc72=document['getElementById']('restart-overlay-title'),_0x3855b9=document['getElementById']('restart-overlay-message'),_0x59c0fa=document['getElementById']('restart-overlay-retry');if(!_0x4d6d37||!_0x58cc72||!_0x3855b9||!_0x59c0fa)return;_0x58cc72['textContent']=_0x4c9fb2,_0x3855b9['textContent']=_0xc3d3b0,_0x59c0fa['hidden']=!showRetry,_0x4d6d37['hidden']=![];}function hideRestartOverlay(){const _0x26eced=document['getElementById']('health-restart-overlay');_0x26eced&&(_0x26eced['hidden']=!![]);}function sleep(_0x3746ab){return new Promise(_0x1fdc2e=>{window['setTimeout'](_0x1fdc2e,_0x3746ab);});}async function loadUpdateSettings(){const _0x4437da=await API['getUpdateSettings']();return state['health']['updateEnabled']=!!_0x4437da['enabled'],state['health']['hasRestartCommand']=!!_0x4437da['hasRestartCommand'],syncHealthActionButtons(),_0x4437da;}async function applyUpdate(){if(state['health']['updateInProgress']||!state['health']['latestVersion'])return;state['health']['updateInProgress']=!![],syncHealthActionButtons(),setUpdateOutput({'status':'in-progress','output':'Applying\x20server\x20update\x20to\x20'+state['health']['latestVersion']+'...'});try{const _0x28ede1=await API['applyServerUpdate'](state['health']['latestVersion']),_0x2cb030=buildCommandOutput(_0x28ede1['output'],_0x28ede1['error']);_0x28ede1['success']?(setUpdateOutput({'status':'success','output':_0x2cb030||'Server\x20update\x20to\x20'+state['health']['latestVersion']+'\x20completed.'}),state['health']['updateAvailable']=![],state['health']['installCommand']=null,document['getElementById']('health-copy-install-btn')['hidden']=!![],document['getElementById']('health-install-command-wrap')['hidden']=!![],document['getElementById']('health-version-status')['textContent']='Update\x20to\x20'+state['health']['latestVersion']+'\x20applied.\x20Restart\x20the\x20server\x20to\x20use\x20the\x20new\x20version.',Utils['showSuccess']('Server\x20update\x20to\x20'+state['health']['latestVersion']+'\x20completed')):(setUpdateOutput({'status':'error','output':_0x2cb030||'Server\x20update\x20failed\x20without\x20additional\x20output.'}),Utils['showError'](_0x28ede1['error']||'Server\x20update\x20failed'));}catch(_0x1b623c){setUpdateOutput({'status':'error','output':buildCommandOutput(_0x1b623c['output'],_0x1b623c['commandError']||_0x1b623c['message'])||'Failed\x20to\x20apply\x20server\x20update.'}),Utils['showError'](_0x1b623c['message']||'Failed\x20to\x20apply\x20server\x20update');}finally{state['health']['updateInProgress']=![],syncHealthActionButtons();}}function showRestartConfirmation(){if(!state['health']['updateEnabled']||state['health']['restartInProgress'])return;const _0x2bcaa9=document['getElementById']('restart-modal');_0x2bcaa9&&(_0x2bcaa9['hidden']=![]);}function hideRestartModal(){const _0x37ff7c=document['getElementById']('restart-modal');_0x37ff7c&&(_0x37ff7c['hidden']=!![]);}async function confirmRestart(){if(state['health']['restartInProgress'])return;hideRestartModal(),state['health']['restartInProgress']=!![],syncHealthActionButtons();try{await API['restartServer'](),await waitForServerRestart();}catch(_0x26b257){state['health']['restartInProgress']=![],syncHealthActionButtons(),hideRestartOverlay(),Utils['showError'](_0x26b257['message']||'Failed\x20to\x20restart\x20server');}}async function waitForServerRestart({manualRetry:manualRetry=![]}={}){state['health']['restartInProgress']=!![],syncHealthActionButtons(),stopHealthAutoRefresh(),showRestartOverlay({'title':manualRetry?'Retrying\x20server\x20connection...':'Waiting\x20for\x20server\x20to\x20restart...','message':'The\x20page\x20will\x20automatically\x20refresh\x20when\x20the\x20server\x20is\x20back\x20online.','showRetry':![]});const _0x298cef=Date['now']();let _0x38ed14=![];for(let _0x568047=0x0;_0x568047<RESTART_POLL_MAX_ATTEMPTS;_0x568047+=0x1){await sleep(RESTART_POLL_INTERVAL_MS);try{await API['get']('/health?ts='+Date['now']());const _0x51d7b0=Date['now']()-_0x298cef;if(_0x38ed14||_0x51d7b0>=RESTART_MIN_SUCCESS_DELAY_MS){state['health']['restartInProgress']=![],state['health']['currentVersion']=null,hideRestartOverlay(),syncHealthActionButtons(),Utils['showSuccess']('Server\x20restart\x20complete'),await loadHealth({'showLoading':!![]}),syncHealthAutoRefresh();return;}}catch(_0x442a0f){_0x38ed14=!![];}}state['health']['restartInProgress']=![],syncHealthActionButtons(),showRestartOverlay({'title':'Unable\x20to\x20reconnect\x20to\x20the\x20server','message':'The\x20server\x20may\x20still\x20be\x20restarting.\x20Retry\x20the\x20connection\x20when\x20you\x20are\x20ready.','showRetry':!![]}),Utils['showError']('Server\x20restart\x20is\x20taking\x20longer\x20than\x20expected');}async function loadVersionStatus({checkUpdates:checkUpdates=![]}={}){const _0x45587b=document['getElementById']('health-check-updates-btn');_0x45587b&&(_0x45587b['disabled']=!![],_0x45587b['textContent']=checkUpdates?'Checking...':'Loading...');try{const _0x43c4bf=await API['get']('/health');state['health']['currentVersion']=_0x43c4bf['version']||'Unavailable',document['getElementById']('health-version-current')['textContent']=state['health']['currentVersion'];if(!checkUpdates&&!state['health']['versionChecked']){state['health']['updateAvailable']=![],document['getElementById']('health-version-status')['textContent']='Update\x20status\x20has\x20not\x20been\x20checked\x20yet.',document['getElementById']('health-version-latest')['textContent']=state['health']['latestVersion']||'Not\x20checked',syncHealthActionButtons();return;}if(checkUpdates){const _0x1ce151=await API['get']('/health/check-updates');state['health']['versionChecked']=!![],state['health']['latestVersion']=_0x1ce151['latestVersion']||'Unavailable',state['health']['installCommand']=_0x1ce151['installCommand']||null,state['health']['updateAvailable']=!!_0x1ce151['updateAvailable'],document['getElementById']('health-version-current')['textContent']=_0x1ce151['currentVersion']||state['health']['currentVersion'],document['getElementById']('health-version-latest')['textContent']=state['health']['latestVersion'],document['getElementById']('health-version-status')['textContent']=buildVersionStatusText(_0x1ce151),document['getElementById']('health-install-command')['textContent']=state['health']['installCommand']||'',document['getElementById']('health-install-command-wrap')['hidden']=!state['health']['installCommand'],document['getElementById']('health-copy-install-btn')['hidden']=!state['health']['installCommand'];}syncHealthActionButtons();}catch(_0x154a4c){console['error']('Failed\x20to\x20load\x20version\x20status',_0x154a4c),state['health']['updateAvailable']=![],document['getElementById']('health-version-status')['textContent']='Unable\x20to\x20load\x20version\x20status:\x20'+_0x154a4c['message'],document['getElementById']('health-install-command-wrap')['hidden']=!![],document['getElementById']('health-copy-install-btn')['hidden']=!![],syncHealthActionButtons();}finally{_0x45587b&&(_0x45587b['disabled']=![],_0x45587b['textContent']='Check\x20for\x20Updates');}}function buildVersionStatusText(_0x598c82){const _0xe1cb24=_0x598c82?.['versionStatus'];if(_0xe1cb24==='update-available')return'Update\x20available:\x20'+_0x598c82['currentVersion']+'\x20→\x20'+_0x598c82['latestVersion'];if(_0xe1cb24==='up-to-date')return'Running\x20the\x20latest\x20published\x20version\x20('+_0x598c82['latestVersion']+').';if(_0xe1cb24==='ahead-of-latest')return'This\x20server\x20is\x20ahead\x20of\x20npm\x20latest\x20('+_0x598c82['latestVersion']+').';return'Unable\x20to\x20compare\x20current\x20and\x20latest\x20versions.';}async function copyInstallCommand(){if(!state['health']['installCommand'])return;const _0xd8075c=await Utils['copyToClipboard'](state['health']['installCommand']);_0xd8075c?Utils['showSuccess']('Install\x20command\x20copied'):Utils['showError']('Failed\x20to\x20copy\x20install\x20command');}function renderHealthMetrics(_0x1f2da6){document['getElementById']('cpu-usage')['textContent']=_0x1f2da6['cpu']?.['display']||'-',document['getElementById']('memory-usage')['textContent']=_0x1f2da6['memory']?.['display']||'-',document['getElementById']('disk-usage')['textContent']=_0x1f2da6['disk']?.['display']||'-',document['getElementById']('docker-containers')['textContent']=_0x1f2da6['docker']?.['display']||'-',document['getElementById']('server-uptime')['textContent']=_0x1f2da6['uptime']?.['display']||'-',document['getElementById']('active-sessions')['textContent']=_0x1f2da6['sessions']?.['display']||'-',setMetricProgress('cpu-progress',_0x1f2da6['cpu']?.['percent'],statusFromPercent(_0x1f2da6['cpu']?.['percent'])),setMetricProgress('memory-progress',_0x1f2da6['memory']?.['percent'],statusFromPercent(_0x1f2da6['memory']?.['percent'])),setMetricProgress('disk-progress',_0x1f2da6['disk']?.['percent'],statusFromPercent(_0x1f2da6['disk']?.['percent']));const _0x1a9615=_0x1f2da6['docker']?.['total']>0x0?_0x1f2da6['docker']['running']/_0x1f2da6['docker']['total']*0x64:0x0;setMetricProgress('docker-progress',_0x1a9615,'ok');const _0x4e7939=_0x1f2da6['dockerStorage']||{},_0x225d28=document['getElementById']('docker-storage-card');document['getElementById']('docker-storage-total')['textContent']=_0x4e7939['display']||'-',document['getElementById']('docker-storage-available')['textContent']=_0x4e7939['availableDisplay']||'',document['getElementById']('docker-storage-available')['hidden']=!_0x4e7939['availableDisplay'],document['getElementById']('docker-storage-reclaimable')['textContent']=_0x4e7939['reclaimableDisplay']||'',document['getElementById']('docker-storage-images')['textContent']=_0x4e7939['images']?.['display']||'-',document['getElementById']('docker-storage-containers')['textContent']=_0x4e7939['containers']?.['display']||'-',document['getElementById']('docker-storage-volumes')['textContent']=_0x4e7939['volumes']?.['display']||'-',document['getElementById']('docker-storage-buildcache')['textContent']=_0x4e7939['buildCache']?.['display']||'-',setMetricProgress('docker-storage-progress',_0x4e7939['percent'],_0x4e7939['status']||'ok'),_0x225d28['classList']['remove']('status-warning','status-critical'),_0x4e7939['status']==='warning'&&_0x225d28['classList']['add']('status-warning'),_0x4e7939['status']==='critical'&&_0x225d28['classList']['add']('status-critical');}function clampPercent(_0xd895d8){if(!Number['isFinite'](_0xd895d8))return 0x0;return Math['max'](0x0,Math['min'](0x64,Math['round'](_0xd895d8)));}function statusFromPercent(_0x3ba21b){if(!Number['isFinite'](_0x3ba21b))return'ok';if(_0x3ba21b>=0x5a)return'critical';if(_0x3ba21b>=0x4b)return'warning';return'ok';}function setMetricProgress(_0xae2c6f,_0x3b0a9c,_0xded815='ok'){const _0x481438=document['getElementById'](_0xae2c6f);if(!_0x481438)return;const _0x56bbe5=clampPercent(_0x3b0a9c);_0x481438['style']['width']=_0x56bbe5+'%',_0x481438['classList']['remove']('status-ok','status-warning','status-critical'),_0x481438['classList']['add'](_0xded815==='critical'?'status-critical':_0xded815==='warning'?'status-warning':'status-ok'),_0x481438['parentElement']?.['setAttribute']('aria-valuenow',String(_0x56bbe5));}async function runCleanupAction(_0x872b64,_0x5c8a43){const _0x1f084f=document['getElementById']('server-health-action-status'),_0xc7b5f6=[document['getElementById']('health-refresh-btn'),document['getElementById']('server-stop-containers'),document['getElementById']('server-remove-stopped'),document['getElementById']('server-prune-docker')]['filter'](Boolean);_0xc7b5f6['forEach'](_0x4f5915=>{_0x4f5915['disabled']=!![];}),_0x1f084f['hidden']=![],_0x1f084f['classList']['remove']('success','error'),_0x1f084f['textContent']=_0x872b64+'...';try{const _0x5efcfd=await _0x5c8a43();_0x1f084f['classList']['add']('success'),_0x1f084f['textContent']=_0x5efcfd?.['message']||_0x872b64+'\x20complete',await loadHealth({'showLoading':!![]});}catch(_0xec8078){console['error'](_0x872b64+'\x20failed',_0xec8078),_0x1f084f['classList']['add']('error'),_0x1f084f['textContent']=_0xec8078['message']||_0x872b64+'\x20failed';}finally{_0xc7b5f6['forEach'](_0x40db2a=>{_0x40db2a['disabled']=![];});}}function toggleCleanupSection(){const _0x195693=document['getElementById']('cleanup-section'),_0x112e13=document['getElementById']('cleanup-content'),_0x4cd0fd=document['getElementById']('cleanup-toggle');if(!_0x195693||!_0x112e13||!_0x4cd0fd)return;const _0x3aa4a9=_0x195693['classList']['toggle']('expanded');_0x112e13['hidden']=!_0x3aa4a9,_0x4cd0fd['setAttribute']('aria-expanded',String(_0x3aa4a9));}async function loadLogs({showLoading:showLoading=![]}={}){if(state['logs']['request'])return state['logs']['request'];return state['logs']['request']=((async()=>{const _0x1aa25a=document['getElementById']('logs-loading'),_0xd11661=document['getElementById']('logs-error');(showLoading||!state['logs']['loaded'])&&(_0x1aa25a['hidden']=![],_0xd11661['hidden']=!![],document['getElementById']('logs-empty')['hidden']=!![],document['getElementById']('logs-container')['hidden']=!![]);try{const _0x9271d6=new URLSearchParams({'limit':'500'});state['logs']['level']!=='ALL'&&_0x9271d6['set']('level',state['logs']['level']);state['logs']['search']&&_0x9271d6['set']('search',state['logs']['search']);const _0x3957df=await API['get']('/logs?'+_0x9271d6['toString']());state['logs']['entries']=Array['isArray'](_0x3957df['entries'])?normalizeLogEntries(_0x3957df['entries'])['slice'](-state['logs']['maxEntries']):[],state['logs']['selectedEntryIds']['clear'](),state['logs']['total']=Number(_0x3957df['total'])||0x0,state['logs']['minLevel']=_0x3957df['minLevel']||'INFO',state['logs']['loaded']=!![],_0x1aa25a['hidden']=!![],_0xd11661['hidden']=!![],renderLogs();}catch(_0x2d9bb7){console['error']('Failed\x20to\x20load\x20logs',_0x2d9bb7),_0x1aa25a['hidden']=!![],_0xd11661['hidden']=![],document['getElementById']('logs-error-message')['textContent']=_0x2d9bb7['message']||'Unknown\x20error',document['getElementById']('logs-empty')['hidden']=!![],document['getElementById']('logs-container')['hidden']=!![];}finally{state['logs']['request']=null;}})()),state['logs']['request'];}function renderLogs({stickToLiveEdge:stickToLiveEdge=![]}={}){const _0x2df109=document['getElementById']('logs-container'),_0xb4161f=document['getElementById']('logs-empty'),_0x5b1a31=stickToLiveEdge||state['logs']['autoScroll']&&state['logs']['live'],_0x151f00=_0x2df109?.['scrollTop']||0x0,_0x9d1036=_0x2df109?.['scrollHeight']||0x0,_0x13d28c=getOrderedLogEntries();updateLogsMeta(_0x13d28c['length']),syncLogSelectionUi(_0x13d28c);if(_0x13d28c['length']===0x0){_0x2df109['hidden']=!![],_0xb4161f['hidden']=![];return;}_0xb4161f['hidden']=!![],_0x2df109['hidden']=![],_0x2df109['innerHTML']=_0x13d28c['map'](renderLogEntry)['join']('');if(_0x5b1a31){scrollLogsToLiveEdge(_0x2df109);return;}if(state['logs']['order']===LOG_ORDER_DESC){const _0x1cd741=_0x2df109['scrollHeight'],_0x39b44e=_0x1cd741-_0x9d1036;_0x2df109['scrollTop']=_0x151f00>0x0?_0x151f00+Math['max'](_0x39b44e,0x0):_0x151f00;return;}_0x2df109['scrollTop']=_0x151f00;}function createLogEntryId(){const _0x5909de=state['logs']['nextEntryId'];return state['logs']['nextEntryId']+=0x1,'server-log-'+_0x5909de;}function normalizeLogEntry(_0xddc1ab){return{..._0xddc1ab,'_clientId':createLogEntryId()};}function normalizeLogEntries(_0x373a7c){return _0x373a7c['map'](normalizeLogEntry);}function getVisibleLogEntries(){const _0x3dc82a=state['logs']['search']['trim']()['toLowerCase']();return state['logs']['entries']['filter'](_0x4d21bc=>{if(state['logs']['level']!=='ALL'&&_0x4d21bc['level']!==state['logs']['level'])return![];if(!_0x3dc82a)return!![];const _0x347a04=String(_0x4d21bc['message']||'')['toLowerCase'](),_0x10c6a8=_0x4d21bc['context']?JSON['stringify'](_0x4d21bc['context'])['toLowerCase']():'';return _0x347a04['includes'](_0x3dc82a)||_0x10c6a8['includes'](_0x3dc82a);});}function getOrderedLogEntries(){const _0xcaa301=getVisibleLogEntries();return state['logs']['order']===LOG_ORDER_DESC?_0xcaa301['slice']()['reverse']():_0xcaa301;}function findLogEntry(_0x2fc41f){return state['logs']['entries']['find'](_0x2458ba=>_0x2458ba['_clientId']===_0x2fc41f)||null;}function getSelectedVisibleLogEntries(_0x24d2fb=getOrderedLogEntries()){return _0x24d2fb['filter'](_0x5a1714=>state['logs']['selectedEntryIds']['has'](_0x5a1714['_clientId']));}function renderLogEntry(_0x5b407a){const _0xb331bc=Utils['escapeHtml'](String(_0x5b407a['_clientId']||'')),_0xbabb3e=Utils['escapeHtml'](formatDateTime(_0x5b407a['timestamp'])),_0x2695fd=Utils['escapeHtml'](String(_0x5b407a['level']||'INFO')),_0x268d9b=Utils['escapeHtml'](String(_0x5b407a['message']||'')),_0x480b77=formatLogContext(_0x5b407a['context']),_0x12e9a2=_0x480b77?'\x0a\x20\x20\x20\x20\x20\x20<details\x20class=\x22admin-log-context\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<summary>Context</summary>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<pre>'+Utils['escapeHtml'](_0x480b77)+'</pre>\x0a\x20\x20\x20\x20\x20\x20</details>\x0a\x20\x20\x20\x20':'',_0x478296=state['logs']['selectedEntryIds']['has'](_0x5b407a['_clientId'])?'\x20selected':'';return'\x0a\x20\x20\x20\x20<div\x20class=\x22admin-log-entry'+_0x478296+'\x22\x20data-log-entry-id=\x22'+_0xb331bc+'\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-log-header\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-log-header-main\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<label\x20class=\x22admin-log-select\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<input\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20type=\x22checkbox\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20class=\x22admin-log-select-checkbox\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20data-log-entry-id=\x22'+_0xb331bc+'\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20aria-label=\x22Select\x20log\x20entry\x20from\x20'+_0xbabb3e+'\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+(_0x478296?'checked':'')+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22admin-log-timestamp\x22>'+_0xbabb3e+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</label>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22admin-log-level\x20level-'+_0x2695fd['toLowerCase']()+'\x22>'+_0x2695fd+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-log-actions\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20type=\x22button\x22\x20class=\x22btn-ghost\x20btn-small\x20admin-log-copy-btn\x22\x20data-log-copy-id=\x22'+_0xb331bc+'\x22>Copy</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-log-message\x22>'+_0x268d9b+'</div>\x0a\x20\x20\x20\x20\x20\x20'+_0x12e9a2+'\x0a\x20\x20\x20\x20</div>\x0a\x20\x20';}function updateLogsMeta(_0x1f0b90){const _0x4e546c=document['getElementById']('logs-meta');if(!_0x4e546c)return;const _0x7dca45=state['logs']['entries']['length'],_0x5e274e=state['logs']['level']!=='ALL'||!!state['logs']['search']['trim'](),_0x375cc0=state['logs']['order']===LOG_ORDER_DESC?'newest\x20first':'oldest\x20first';_0x4e546c['textContent']=_0x5e274e?'Showing\x20'+_0x1f0b90+'\x20of\x20'+_0x7dca45+'\x20loaded\x20entries\x20for\x20the\x20current\x20filters\x20in\x20'+_0x375cc0+'\x20order.\x20Minimum\x20runtime\x20level:\x20'+state['logs']['minLevel']+'.':'Showing\x20'+_0x1f0b90+'\x20recent\x20buffered\x20entries\x20in\x20'+_0x375cc0+'\x20order.\x20Minimum\x20runtime\x20level:\x20'+state['logs']['minLevel']+'.';}function syncLogSelectionUi(_0x2954ca=getOrderedLogEntries()){const _0x50d485=document['getElementById']('logs-selection-count'),_0x1f41f2=document['getElementById']('logs-select-visible-btn'),_0x43ee68=document['getElementById']('logs-clear-selection-btn'),_0x3b2937=document['getElementById']('logs-copy-selected-btn'),_0x227d39=getSelectedVisibleLogEntries(_0x2954ca),_0x586966=_0x2954ca['length']>0x0,_0xe4bb96=_0x227d39['length']>0x0,_0x11ee69=_0x586966&&_0x227d39['length']===_0x2954ca['length'],_0x426243=state['logs']['level']!=='ALL'||!!state['logs']['search']['trim'](),_0x1bc9eb=_0x426243?'Select\x20Filtered':'Select\x20All\x20Shown',_0x4c3169=_0x426243?'Deselect\x20Filtered':'Deselect\x20All\x20Shown';_0x50d485&&(_0x50d485['textContent']=_0x227d39['length']+'\x20selected'),_0x1f41f2&&(_0x1f41f2['disabled']=!_0x586966,_0x1f41f2['textContent']=_0x11ee69?_0x4c3169:_0x1bc9eb),_0x43ee68&&(_0x43ee68['disabled']=!_0xe4bb96),_0x3b2937&&(_0x3b2937['disabled']=!_0xe4bb96);}function toggleLogsLiveMode(){state['logs']['live']=!state['logs']['live'],state['logs']['live']?(state['logs']['autoScroll']=!![],renderLogs({'stickToLiveEdge':!![]}),startLogStream()):stopLogStream(),updateLogsLiveUi();}function updateLogsLiveUi(){const _0x4cb86b=document['getElementById']('logs-live-toggle'),_0xd2657a=document['getElementById']('logs-stream-status');if(!_0x4cb86b||!_0xd2657a)return;_0xd2657a['classList']['remove']('live','error');if(!state['logs']['live']){_0xd2657a['textContent']='Paused',_0x4cb86b['textContent']='Start\x20Live';return;}if(state['logs']['streamState']==='live')_0xd2657a['textContent']='Live',_0xd2657a['classList']['add']('live');else state['logs']['streamState']==='error'?(_0xd2657a['textContent']='Reconnecting',_0xd2657a['classList']['add']('error')):_0xd2657a['textContent']='Connecting';_0x4cb86b['textContent']='Pause\x20Live';}function startLogStream(){if(state['currentSection']!=='logs'||state['logs']['stream'])return;state['logs']['streamState']='connecting',updateLogsLiveUi();const _0x1bacaf=new EventSource(API['getBaseUrl']()+'/logs/stream');state['logs']['stream']=_0x1bacaf,_0x1bacaf['addEventListener']('log',_0x4720f6=>{try{const _0x50c5ae=normalizeLogEntry(JSON['parse'](_0x4720f6['data']));state['logs']['entries']['push'](_0x50c5ae);if(state['logs']['entries']['length']>state['logs']['maxEntries']){const _0x4b24c5=state['logs']['entries']['shift']();state['logs']['selectedEntryIds']['delete'](_0x4b24c5?.['_clientId']);}renderLogs();}catch(_0x1e03ae){console['error']('Failed\x20to\x20parse\x20log\x20stream\x20event',_0x1e03ae);}}),_0x1bacaf['onopen']=()=>{state['logs']['streamState']='live',updateLogsLiveUi();},_0x1bacaf['onerror']=()=>{state['logs']['streamState']='error',updateLogsLiveUi();};}function stopLogStream(){state['logs']['stream']&&(state['logs']['stream']['close'](),state['logs']['stream']=null),state['logs']['streamState']='paused',updateLogsLiveUi();}function clearDisplayedLogs(){state['logs']['entries']=[],state['logs']['selectedEntryIds']['clear'](),renderLogs();}function handleLogContainerClick(_0x31cdf0){const _0x31af3c=_0x31cdf0['target']['closest']('[data-log-copy-id]');if(!_0x31af3c)return;const _0x14bd39=findLogEntry(_0x31af3c['dataset']['logCopyId']||'');if(!_0x14bd39){Utils['showError']('Log\x20entry\x20is\x20no\x20longer\x20available');return;}copyLogEntries([_0x14bd39],{'successMessage':'Log\x20entry\x20copied'});}function handleLogContainerChange(_0x5a8e1c){const _0x4156a4=_0x5a8e1c['target']['closest']('.admin-log-select-checkbox');if(!_0x4156a4)return;const _0x17dd26=_0x4156a4['dataset']['logEntryId']||'';if(!_0x17dd26)return;_0x4156a4['checked']?state['logs']['selectedEntryIds']['add'](_0x17dd26):state['logs']['selectedEntryIds']['delete'](_0x17dd26),_0x4156a4['closest']('.admin-log-entry')?.['classList']['toggle']('selected',_0x4156a4['checked']),syncLogSelectionUi();}function toggleVisibleLogSelection(){const _0x20f177=getOrderedLogEntries();if(_0x20f177['length']===0x0)return;const _0x38a5cd=getSelectedVisibleLogEntries(_0x20f177),_0x51e066=_0x38a5cd['length']!==_0x20f177['length'];_0x20f177['forEach'](_0x162649=>{_0x51e066?state['logs']['selectedEntryIds']['add'](_0x162649['_clientId']):state['logs']['selectedEntryIds']['delete'](_0x162649['_clientId']);}),renderLogs();}function clearSelectedLogEntries(){if(state['logs']['selectedEntryIds']['size']===0x0)return;state['logs']['selectedEntryIds']['clear'](),renderLogs();}async function copySelectedLogEntries(){const _0x3e9e49=getSelectedVisibleLogEntries();if(_0x3e9e49['length']===0x0)return;await copyLogEntries(_0x3e9e49,{'successMessage':_0x3e9e49['length']===0x1?'Log\x20entry\x20copied':_0x3e9e49['length']+'\x20log\x20entries\x20copied'});}async function copyLogEntries(_0x6a3fb8,{successMessage:successMessage='Log\x20entries\x20copied'}={}){const _0x385c94=formatLogEntriesForClipboard(_0x6a3fb8);if(!_0x385c94){Utils['showError']('No\x20log\x20content\x20available\x20to\x20copy');return;}const _0x89a755=await Utils['copyToClipboard'](_0x385c94);_0x89a755?Utils['showSuccess'](successMessage):Utils['showError']('Failed\x20to\x20copy\x20logs');}function setLogOrder(_0x54b5ce,{focusLiveEdge:focusLiveEdge=![]}={}){const _0x1bd58d=_0x54b5ce===LOG_ORDER_DESC?LOG_ORDER_DESC:LOG_ORDER_ASC;if(state['logs']['order']===_0x1bd58d){focusLiveEdge&&(state['logs']['autoScroll']=!![],renderLogs({'stickToLiveEdge':!![]}));return;}state['logs']['order']=_0x1bd58d,setSessionValue('admin-logs-order',_0x1bd58d),syncLogOrderUi(),focusLiveEdge&&(state['logs']['autoScroll']=!![]),renderLogs({'stickToLiveEdge':focusLiveEdge});}function syncLogOrderUi(){updateActiveFilterButtons('#logs-order-toggle',state['logs']['order']);}function handleLogsSearchInput(_0x1f3f1b){const _0x1f0c2a=_0x1f3f1b['target']['value']||'';state['logs']['searchTimer']&&clearTimeout(state['logs']['searchTimer']),state['logs']['searchTimer']=window['setTimeout'](()=>{state['logs']['search']=_0x1f0c2a,loadLogs({'showLoading':![]});},LOG_SEARCH_DEBOUNCE_MS);}function updateLogAutoScrollState(){const _0x1f00ba=document['getElementById']('logs-container');if(!_0x1f00ba)return;const _0xd3b35c=state['logs']['order']===LOG_ORDER_DESC?_0x1f00ba['scrollTop']:_0x1f00ba['scrollHeight']-_0x1f00ba['scrollTop']-_0x1f00ba['clientHeight'];state['logs']['autoScroll']=_0xd3b35c<0x20;}async function loadUsage({showLoading:showLoading=![]}={}){if(state['usage']['request'])return state['usage']['request'];return state['usage']['request']=((async()=>{const _0x19ec27=document['getElementById']('usage-loading'),_0x2dea8d=document['getElementById']('usage-error');(showLoading||!state['usage']['loaded'])&&(_0x19ec27['hidden']=![],_0x2dea8d['hidden']=!![],document['getElementById']('usage-empty')['hidden']=!![],document['getElementById']('usage-content')['hidden']=!![]);try{const _0x2aad08=new URLSearchParams();_0x2aad08['set']('days',state['usage']['days']);state['usage']['environment']&&_0x2aad08['set']('environment',state['usage']['environment']);const _0x2fe474=await API['get']('/stats?'+_0x2aad08['toString']());state['usage']['loaded']=!![],_0x19ec27['hidden']=!![],_0x2dea8d['hidden']=!![],renderUsage(_0x2fe474),state['usage']['drilldown']['open']&&state['usage']['drilldown']['group']&&state['usage']['drilldown']['value']&&await loadUsageDrilldown({'showLoading':![]});}catch(_0x121600){console['error']('Failed\x20to\x20load\x20usage\x20statistics',_0x121600),_0x19ec27['hidden']=!![],_0x2dea8d['hidden']=![],document['getElementById']('usage-error-message')['textContent']=_0x121600['message']||'Unknown\x20error',document['getElementById']('usage-empty')['hidden']=!![],document['getElementById']('usage-content')['hidden']=!![];}finally{state['usage']['request']=null;}})()),state['usage']['request'];}function renderUsage(_0x233b11){const _0x335a95=Number(_0x233b11?.['tasks']?.['total'])||0x0,_0x307ea6=document['getElementById']('usage-empty'),_0x167532=document['getElementById']('usage-content');if(_0x335a95===0x0){closeUsageDrilldown(),_0x307ea6['hidden']=![],_0x167532['hidden']=!![];return;}_0x307ea6['hidden']=!![],_0x167532['hidden']=![];const _0x4afe21=Number(_0x233b11?.['approvalRate']?.['successRate'])||0x0,_0x4644c5=Math['round'](_0x4afe21*0x64),_0x4d702f=_0x233b11?.['code']?.['approved']||{},_0x4f021e=Number(_0x4d702f?.['tasks'])||0x0,_0xdcbaf6=(Number(_0x4d702f?.['linesAdded'])||0x0)-(Number(_0x4d702f?.['linesDeleted'])||0x0),_0x223bd3=(Number(_0x233b11?.['code']?.['linesAdded'])||0x0)-(Number(_0x233b11?.['code']?.['linesDeleted'])||0x0),_0x173bd3=Number(_0x233b11?.['timing']?.['averageDurationMinutes'])||0x0;setSummaryValue('usage-total-tasks',formatNumber(_0x335a95)),setSummaryValue('usage-success-rate',_0x4644c5+'%',statusClassFromPercent(_0x4644c5)),setSummaryValue('usage-net-lines',formatSignedNumber(_0x223bd3)),setSummaryValue('usage-average-duration',formatDurationMinutes(_0x173bd3));const _0x12e8a2=_0x335a95>0x0?Math['round'](_0x4f021e/_0x335a95*0x64):0x0;document['getElementById']('usage-approved-summary')['textContent']=formatNumber(_0x4f021e)+'\x20approved\x20('+_0x12e8a2+'%)\x20·\x20'+formatNumber(_0x233b11['timing']['totalDurationHours']||0x0)+'h\x20total',document['getElementById']('usage-success-detail')['textContent']=(_0x233b11['approvalRate']['completed']||0x0)+'\x20completed\x20/\x20'+(_0x233b11['approvalRate']['failed']||0x0)+'\x20failed\x20/\x20'+(_0x233b11['approvalRate']['interrupted']||0x0)+'\x20interrupted',document['getElementById']('usage-net-lines-detail')['textContent']='+'+formatNumber(_0x233b11['code']['linesAdded']||0x0)+'\x20/\x20-'+formatNumber(_0x233b11['code']['linesDeleted']||0x0)+'\x20·\x20Approved\x20'+formatSignedNumber(_0xdcbaf6)+'\x20net',document['getElementById']('usage-average-duration-detail')['textContent']=formatDurationMinutes(_0x233b11['timing']['medianDurationMinutes']||0x0)+'\x20median\x20·\x20'+formatNumber(_0x233b11['timing']['totalDurationHours']||0x0)+'h\x20total',document['getElementById']('usage-period-summary')['textContent']=buildPeriodSummary(_0x233b11['period']),renderBarList('usage-status-bars',_0x233b11['tasks']['byStatus']||{},{'drilldownGroup':'status','labelFormatter':prettifyKey}),renderObjectTable('usage-type-body',_0x233b11['tasks']['byType']||{},_0x335a95,{'includePercent':!![],'labelFormatter':prettifyKey,'drilldownGroup':'type'}),renderObjectTable('usage-environment-body',_0x233b11['tasks']['byEnvironment']||{},_0x335a95,{'drilldownGroup':'environment'}),renderUserTable('usage-user-body',_0x233b11['tasks']['byUser']||[]),renderObjectTable('usage-source-body',_0x233b11['tasks']['bySource']||{},_0x335a95,{'labelFormatter':prettifyKey,'drilldownGroup':'source'}),document['getElementById']('usage-lines-added')['textContent']=formatNumber(_0x233b11['code']['linesAdded']||0x0),document['getElementById']('usage-lines-deleted')['textContent']=formatNumber(_0x233b11['code']['linesDeleted']||0x0),document['getElementById']('usage-files-changed')['textContent']=formatNumber(_0x233b11['code']['filesChanged']||0x0),document['getElementById']('usage-repositories-affected')['textContent']=formatNumber(_0x233b11['code']['repositoriesAffected']||0x0),document['getElementById']('usage-approved-lines-added')['textContent']=formatNumber(_0x4d702f['linesAdded']||0x0),document['getElementById']('usage-approved-lines-deleted')['textContent']=formatNumber(_0x4d702f['linesDeleted']||0x0),document['getElementById']('usage-approved-files-changed')['textContent']=formatNumber(_0x4d702f['filesChanged']||0x0),document['getElementById']('usage-approved-repositories-affected')['textContent']=formatNumber(_0x4d702f['repositoriesAffected']||0x0);const _0x121368=(_0x5cfe3a,_0x2279eb)=>_0x5cfe3a>0x0?Math['round'](_0x2279eb/_0x5cfe3a*0x64):0x0;document['getElementById']('usage-added-pct')['style']['width']=_0x121368(_0x233b11['code']['linesAdded']||0x0,_0x4d702f['linesAdded']||0x0)+'%',document['getElementById']('usage-deleted-pct')['style']['width']=_0x121368(_0x233b11['code']['linesDeleted']||0x0,_0x4d702f['linesDeleted']||0x0)+'%',document['getElementById']('usage-files-pct')['style']['width']=_0x121368(_0x233b11['code']['filesChanged']||0x0,_0x4d702f['filesChanged']||0x0)+'%',document['getElementById']('usage-repos-pct')['style']['width']=_0x121368(_0x233b11['code']['repositoriesAffected']||0x0,_0x4d702f['repositoriesAffected']||0x0)+'%',syncUsageDrilldownActionButtons(),refreshUsageDrilldownHighlights();}function buildPeriodSummary(_0x44a67b){const _0x4a8509=_0x44a67b?.['from']?formatDateTime(_0x44a67b['from']):'the\x20earliest\x20loaded\x20task',_0x4ff6fb=_0x44a67b?.['to']?formatDateTime(_0x44a67b['to']):'now',_0x4a63f7=_0x44a67b?.['days']?_0x44a67b['days']+'\x20day\x20window':'All\x20available\x20task\x20history';return _0x4a63f7+'\x20·\x20'+_0x4a8509+'\x20to\x20'+_0x4ff6fb;}function isUsageDrilldownActive(_0x5c13bf,_0x553ea6){return state['usage']['drilldown']['open']&&state['usage']['drilldown']['group']===_0x5c13bf&&state['usage']['drilldown']['value']===_0x553ea6;}function buildDrilldownTriggerAttrs(_0x9b9bdb,_0x52bf6e,_0x3b67b8,{active:active=![]}={}){return'\x0a\x20\x20\x20\x20data-drilldown-group=\x22'+Utils['escapeHtml'](_0x9b9bdb)+'\x22\x0a\x20\x20\x20\x20data-drilldown-value=\x22'+Utils['escapeHtml'](String(_0x52bf6e))+'\x22\x0a\x20\x20\x20\x20data-drilldown-label=\x22'+Utils['escapeHtml'](String(_0x3b67b8))+'\x22\x0a\x20\x20\x20\x20'+(active?'data-drilldown-active=\x22true\x22':'')+'\x0a\x20\x20';}function syncUsageDrilldownActionButtons(){document['querySelectorAll']('.admin-drilldown-action')['forEach'](_0xd79e38=>{const _0x12d41a=_0xd79e38['dataset']['drilldownGroup']||'',_0xefed78=_0xd79e38['dataset']['drilldownValue']||'';_0xd79e38['classList']['toggle']('active',isUsageDrilldownActive(_0x12d41a,_0xefed78));});}function renderBarList(_0x4699b7,_0xb633d8,{drilldownGroup:drilldownGroup='',labelFormatter:labelFormatter=null}={}){const _0x4db6cd=document['getElementById'](_0x4699b7);if(!_0x4db6cd)return;const _0x3165b6=Object['entries'](_0xb633d8)['filter'](([,_0x233a8a])=>Number(_0x233a8a)>0x0)['sort']((_0x46ba78,_0x466eee)=>_0x466eee[0x1]-_0x46ba78[0x1]),_0x2461eb=_0x3165b6['reduce']((_0x345696,[,_0x2290d5])=>_0x345696+Number(_0x2290d5||0x0),0x0);if(_0x3165b6['length']===0x0){_0x4db6cd['innerHTML']='<div\x20class=\x22text-muted\x22>No\x20data\x20available.</div>';return;}_0x4db6cd['innerHTML']=_0x3165b6['map'](([_0x5cd32f,_0x18952b])=>{const _0x32ce6c=_0x2461eb>0x0?Math['max'](0x2,Math['round'](_0x18952b/_0x2461eb*0x64)):0x0,_0x264e24=labelFormatter?labelFormatter(_0x5cd32f):prettifyKey(_0x5cd32f),_0x16d6b5=Utils['escapeHtml'](_0x264e24),_0x544302=Utils['escapeHtml'](formatNumber(_0x18952b)),_0x50cfc9=drilldownGroup?isUsageDrilldownActive(drilldownGroup,String(_0x5cd32f)):![],_0x2090ff='\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-bar-label\x22>'+_0x16d6b5+'</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-bar-track\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-bar-fill\x20status-'+Utils['escapeHtml'](String(_0x5cd32f)['toLowerCase']())+'\x22\x20style=\x22width:\x20'+_0x32ce6c+'%\x22></div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-bar-value\x22>'+_0x544302+'</div>\x0a\x20\x20\x20\x20';if(!drilldownGroup)return'<div\x20class=\x22admin-bar-row\x22>'+_0x2090ff+'</div>';return'\x0a\x20\x20\x20\x20\x20\x20<button\x0a\x20\x20\x20\x20\x20\x20\x20\x20type=\x22button\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20class=\x22admin-bar-row\x20admin-bar-row-button'+(_0x50cfc9?'\x20active':'')+'\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20'+buildDrilldownTriggerAttrs(drilldownGroup,_0x5cd32f,_0x264e24,{'active':_0x50cfc9})+'\x0a\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20'+_0x2090ff+'\x0a\x20\x20\x20\x20\x20\x20</button>\x0a\x20\x20\x20\x20';})['join']('');}function renderObjectTable(_0x504b15,_0x1ab12f,_0x1e65bb,{includePercent:includePercent=![],labelFormatter:labelFormatter=null,drilldownGroup:drilldownGroup=''}={}){const _0x56fd81=document['getElementById'](_0x504b15);if(!_0x56fd81)return;const _0x2adecb=Object['entries'](_0x1ab12f)['filter'](([,_0x24d49e])=>Number(_0x24d49e)>0x0)['sort']((_0x61c3ca,_0x48619d)=>_0x48619d[0x1]-_0x61c3ca[0x1]||String(_0x61c3ca[0x0])['localeCompare'](String(_0x48619d[0x0])));if(_0x2adecb['length']===0x0){_0x56fd81['innerHTML']='<tr><td\x20colspan=\x22'+(includePercent?0x3:0x2)+'\x22\x20class=\x22text-muted\x22>No\x20data\x20available.</td></tr>';return;}_0x56fd81['innerHTML']=_0x2adecb['map'](([_0x20a7b9,_0x14a56f])=>{const _0x5121b3=labelFormatter?labelFormatter(_0x20a7b9):_0x20a7b9,_0x26c65d=drilldownGroup?isUsageDrilldownActive(drilldownGroup,String(_0x20a7b9)):![],_0x6f5c10=drilldownGroup?buildDrilldownTriggerAttrs(drilldownGroup,_0x20a7b9,_0x5121b3,{'active':_0x26c65d}):'',_0x58a24b=includePercent?'<td>'+formatPercent(_0x1e65bb>0x0?_0x14a56f/_0x1e65bb*0x64:0x0)+'</td>':'';return'\x0a\x20\x20\x20\x20\x20\x20<tr\x0a\x20\x20\x20\x20\x20\x20\x20\x20'+(drilldownGroup?'class=\x22admin-drilldown-row'+(_0x26c65d?'\x20active':'')+'\x22\x20tabindex=\x220\x22\x20role=\x22button\x22\x20aria-label=\x22Show\x20'+Utils['escapeHtml'](String(_0x5121b3))+'\x20tasks\x22\x20'+_0x6f5c10:'')+'\x0a\x20\x20\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<td>'+Utils['escapeHtml'](String(_0x5121b3))+'</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<td>'+Utils['escapeHtml'](formatNumber(_0x14a56f))+'</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20'+_0x58a24b+'\x0a\x20\x20\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20';})['join']('');}function renderUserTable(_0x4450e1,_0x5b45da){const _0x5a9067=document['getElementById'](_0x4450e1);if(!_0x5a9067)return;if(!Array['isArray'](_0x5b45da)||_0x5b45da['length']===0x0){_0x5a9067['innerHTML']='<tr><td\x20colspan=\x222\x22\x20class=\x22text-muted\x22>No\x20data\x20available.</td></tr>';return;}_0x5a9067['innerHTML']=_0x5b45da['map'](_0xcc887=>'\x0a\x20\x20\x20\x20<tr\x0a\x20\x20\x20\x20\x20\x20class=\x22admin-drilldown-row'+(isUsageDrilldownActive('user',String(_0xcc887['userId']||'unknown'))?'\x20active':'')+'\x22\x0a\x20\x20\x20\x20\x20\x20tabindex=\x220\x22\x0a\x20\x20\x20\x20\x20\x20role=\x22button\x22\x0a\x20\x20\x20\x20\x20\x20aria-label=\x22Show\x20tasks\x20for\x20'+Utils['escapeHtml'](_0xcc887['name']||_0xcc887['username']||_0xcc887['userId']||'Unknown')+'\x22\x0a\x20\x20\x20\x20\x20\x20'+buildDrilldownTriggerAttrs('user',_0xcc887['userId']||'unknown',_0xcc887['name']||_0xcc887['username']||_0xcc887['userId']||'Unknown',{'active':isUsageDrilldownActive('user',String(_0xcc887['userId']||'unknown'))})+'\x0a\x20\x20\x20\x20>\x0a\x20\x20\x20\x20\x20\x20<td>'+Utils['escapeHtml'](_0xcc887['name']||_0xcc887['username']||_0xcc887['userId']||'Unknown')+'</td>\x0a\x20\x20\x20\x20\x20\x20<td>'+Utils['escapeHtml'](formatNumber(_0xcc887['count']||0x0))+'</td>\x0a\x20\x20\x20\x20</tr>\x0a\x20\x20')['join']('');}function handleUsageDrilldownClick(_0x5a3865){const _0x4a8e70=_0x5a3865['target']['closest']('[data-drilldown-group][data-drilldown-value]');if(!_0x4a8e70)return;_0x5a3865['preventDefault'](),toggleUsageDrilldown(_0x4a8e70);}function handleUsageDrilldownKeydown(_0xead8a8){if(_0xead8a8['key']!=='Enter'&&_0xead8a8['key']!=='\x20')return;const _0x4e3bde=_0xead8a8['target']['closest']('.admin-drilldown-row[data-drilldown-group][data-drilldown-value]');if(!_0x4e3bde)return;_0xead8a8['preventDefault'](),toggleUsageDrilldown(_0x4e3bde);}function handleGlobalKeydown(_0x31fe73){_0x31fe73['key']==='Escape'&&state['usage']['drilldown']['open']&&closeUsageDrilldown();}function toggleUsageDrilldown(_0x1689b1){const _0x48e237=_0x1689b1['dataset']['drilldownGroup']||'',_0x448022=_0x1689b1['dataset']['drilldownValue']||'',_0x317e16=_0x1689b1['dataset']['drilldownLabel']||_0x448022;if(!_0x48e237||!_0x448022)return;if(isUsageDrilldownActive(_0x48e237,_0x448022)){closeUsageDrilldown();return;}openUsageDrilldown({'group':_0x48e237,'value':_0x448022,'label':_0x317e16});}function openUsageDrilldown({group:_0x6e71be,value:_0x36f35a,label:_0x3f84ed}){state['usage']['drilldown']['group']=_0x6e71be,state['usage']['drilldown']['value']=_0x36f35a,state['usage']['drilldown']['label']=_0x3f84ed||_0x36f35a,state['usage']['drilldown']['open']=!![],state['usage']['drilldown']['data']=null;const _0x3ff914=document['getElementById']('usage-drilldown-overlay'),_0x2e3a4b=document['getElementById']('usage-drilldown-drawer');_0x3ff914&&(_0x3ff914['hidden']=![],requestAnimationFrame(()=>_0x3ff914['classList']['add']('active'))),_0x2e3a4b&&(_0x2e3a4b['hidden']=![],_0x2e3a4b['setAttribute']('aria-hidden','false'),requestAnimationFrame(()=>_0x2e3a4b['classList']['add']('active'))),updateUsageDrilldownHeader(),syncUsageDrilldownActionButtons(),refreshUsageDrilldownHighlights(),loadUsageDrilldown({'showLoading':!![]});}function closeUsageDrilldown(){state['usage']['drilldown']['open']=![],state['usage']['drilldown']['requestToken']+=0x1,state['usage']['drilldown']['request']=null,state['usage']['drilldown']['group']='',state['usage']['drilldown']['value']='',state['usage']['drilldown']['label']='',state['usage']['drilldown']['data']=null;const _0x45eb95=document['getElementById']('usage-drilldown-overlay'),_0x3045aa=document['getElementById']('usage-drilldown-drawer');_0x45eb95&&(_0x45eb95['classList']['remove']('active'),_0x45eb95['hidden']=!![]),_0x3045aa&&(_0x3045aa['classList']['remove']('active'),_0x3045aa['hidden']=!![],_0x3045aa['setAttribute']('aria-hidden','true')),renderUsageDrilldown(null),syncUsageDrilldownActionButtons(),refreshUsageDrilldownHighlights();}function refreshUsageDrilldownHighlights(){document['querySelectorAll']('.admin-drilldown-row')['forEach'](_0x410f0a=>{const _0x15d27d=_0x410f0a['dataset']['drilldownGroup']||'',_0xa29462=_0x410f0a['dataset']['drilldownValue']||'';_0x410f0a['classList']['toggle']('active',isUsageDrilldownActive(_0x15d27d,_0xa29462));}),document['querySelectorAll']('.admin-bar-row-button')['forEach'](_0x1de460=>{const _0x25c19c=_0x1de460['dataset']['drilldownGroup']||'',_0x410217=_0x1de460['dataset']['drilldownValue']||'';_0x1de460['classList']['toggle']('active',isUsageDrilldownActive(_0x25c19c,_0x410217));});}function updateUsageDrilldownHeader(_0x4e5b39=state['usage']['drilldown']['data']){const _0x2d7dcb=document['getElementById']('usage-drilldown-title'),_0x8e4c27=document['getElementById']('usage-drilldown-subtitle');if(!_0x2d7dcb||!_0x8e4c27)return;const _0x3fea2b=state['usage']['environment']?'\x20in\x20'+state['usage']['environment']:'';_0x2d7dcb['textContent']=state['usage']['drilldown']['label']||'Tasks';if(_0x4e5b39?.['summary']?.['total']>0x0){const _0x298368=formatNumber(_0x4e5b39['summary']['total']||0x0),_0xfaa6e8=formatNumber(_0x4e5b39['displayed']||0x0);_0x8e4c27['textContent']=_0x4e5b39['hasMore']?'Showing\x20'+_0xfaa6e8+'\x20of\x20'+_0x298368+'\x20matching\x20tasks\x20for\x20the\x20current\x20'+buildPeriodLabel()+_0x3fea2b+',\x20newest\x20first.':'Showing\x20all\x20'+_0x298368+'\x20matching\x20tasks\x20for\x20the\x20current\x20'+buildPeriodLabel()+_0x3fea2b+'.';return;}if(_0x4e5b39){_0x8e4c27['textContent']='No\x20matching\x20tasks\x20for\x20the\x20current\x20'+buildPeriodLabel()+_0x3fea2b+'.';return;}_0x8e4c27['textContent']='Loading\x20matching\x20tasks\x20for\x20the\x20current\x20'+buildPeriodLabel()+_0x3fea2b+'.';}function buildPeriodLabel(){return state['usage']['days']==='all'?'all-time\x20window':state['usage']['days']+'-day\x20window';}async function loadUsageDrilldown({showLoading:showLoading=![]}={}){if(!state['usage']['drilldown']['open']||!state['usage']['drilldown']['group']||!state['usage']['drilldown']['value'])return null;if(state['usage']['drilldown']['request'])return state['usage']['drilldown']['request'];updateUsageDrilldownHeader();const _0x5d83c7=state['usage']['drilldown']['requestToken']+0x1;return state['usage']['drilldown']['requestToken']=_0x5d83c7,state['usage']['drilldown']['request']=((async()=>{showLoading&&setUsageDrilldownLoadingState();try{const _0x5a70cc=new URLSearchParams({'days':state['usage']['days'],'group':state['usage']['drilldown']['group'],'value':state['usage']['drilldown']['value'],'limit':String(USAGE_DRILLDOWN_LIMIT)});state['usage']['environment']&&_0x5a70cc['set']('environment',state['usage']['environment']);const _0x522732=await API['get']('/stats/drilldown?'+_0x5a70cc['toString']());if(state['usage']['drilldown']['requestToken']!==_0x5d83c7||!state['usage']['drilldown']['open'])return null;return state['usage']['drilldown']['data']=_0x522732,renderUsageDrilldown(_0x522732),_0x522732;}catch(_0x5548d8){if(state['usage']['drilldown']['requestToken']!==_0x5d83c7||!state['usage']['drilldown']['open'])return null;return renderUsageDrilldownError(_0x5548d8),null;}finally{state['usage']['drilldown']['requestToken']===_0x5d83c7&&(state['usage']['drilldown']['request']=null);}})()),state['usage']['drilldown']['request'];}function setUsageDrilldownLoadingState(){const _0x5cde1a=document['getElementById']('usage-drilldown-loading'),_0x3d8950=document['getElementById']('usage-drilldown-error'),_0x518959=document['getElementById']('usage-drilldown-empty'),_0x470cb9=document['getElementById']('usage-drilldown-list'),_0x342ad9=document['getElementById']('usage-drilldown-summary');if(_0x5cde1a)_0x5cde1a['hidden']=![];if(_0x3d8950)_0x3d8950['hidden']=!![];if(_0x518959)_0x518959['hidden']=!![];_0x470cb9&&(_0x470cb9['hidden']=!![],_0x470cb9['innerHTML']=''),_0x342ad9&&(_0x342ad9['hidden']=!![],_0x342ad9['innerHTML']='');}function renderUsageDrilldownError(_0x47f427){const _0x23bbb4=document['getElementById']('usage-drilldown-loading'),_0xe2681f=document['getElementById']('usage-drilldown-error'),_0x1258e2=document['getElementById']('usage-drilldown-empty'),_0x51c75f=document['getElementById']('usage-drilldown-list'),_0x78086f=document['getElementById']('usage-drilldown-summary');if(_0x23bbb4)_0x23bbb4['hidden']=!![];if(_0x1258e2)_0x1258e2['hidden']=!![];_0x51c75f&&(_0x51c75f['hidden']=!![],_0x51c75f['innerHTML']=''),_0x78086f&&(_0x78086f['hidden']=!![],_0x78086f['innerHTML']=''),_0xe2681f&&(_0xe2681f['hidden']=![]),document['getElementById']('usage-drilldown-error-message')['textContent']=_0x47f427?.['message']||'Unknown\x20error';}function renderUsageDrilldown(_0x27c7c5){const _0x258ad8=document['getElementById']('usage-drilldown-loading'),_0x4a13db=document['getElementById']('usage-drilldown-error'),_0x30dddc=document['getElementById']('usage-drilldown-empty'),_0x2a152f=document['getElementById']('usage-drilldown-list'),_0x14082d=document['getElementById']('usage-drilldown-summary');if(_0x258ad8)_0x258ad8['hidden']=!![];if(_0x4a13db)_0x4a13db['hidden']=!![];if(!_0x27c7c5){updateUsageDrilldownHeader(null);if(_0x30dddc)_0x30dddc['hidden']=!![];_0x2a152f&&(_0x2a152f['hidden']=!![],_0x2a152f['innerHTML']='');_0x14082d&&(_0x14082d['hidden']=!![],_0x14082d['innerHTML']='');return;}updateUsageDrilldownHeader(_0x27c7c5),renderUsageDrilldownSummary(_0x27c7c5);if(!Array['isArray'](_0x27c7c5['tasks'])||_0x27c7c5['tasks']['length']===0x0){if(_0x30dddc)_0x30dddc['hidden']=![];_0x2a152f&&(_0x2a152f['hidden']=!![],_0x2a152f['innerHTML']='');return;}if(_0x30dddc)_0x30dddc['hidden']=!![];_0x2a152f&&(_0x2a152f['hidden']=![],_0x2a152f['innerHTML']=_0x27c7c5['tasks']['map'](_0x3212e8=>renderUsageDrilldownTask(_0x3212e8))['join'](''));}function renderUsageDrilldownSummary(_0x12ef4a){const _0x5dc3f7=document['getElementById']('usage-drilldown-summary');if(!_0x5dc3f7)return;const _0x1461fd=_0x12ef4a['summary']||{},_0x38b45b=[{'label':'Matching\x20Tasks','value':formatNumber(_0x1461fd['total']||0x0),'meta':_0x12ef4a['hasMore']?'Showing\x20'+formatNumber(_0x12ef4a['displayed']||0x0)+'\x20most\x20recent':'Current\x20filter\x20match'},{'label':'Approved','value':formatNumber(_0x1461fd['approvedTasks']||0x0),'meta':formatNumber(_0x1461fd['pushedTasks']||0x0)+'\x20pushed'},{'label':'Changed\x20Tasks','value':formatNumber(_0x1461fd['tasksWithChanges']||0x0),'meta':formatNumber(_0x1461fd['filesChanged']||0x0)+'\x20files\x20changed'},{'label':'Net\x20Lines','value':formatSignedNumber((Number(_0x1461fd['linesAdded'])||0x0)-(Number(_0x1461fd['linesDeleted'])||0x0)),'meta':'+'+formatNumber(_0x1461fd['linesAdded']||0x0)+'\x20/\x20-'+formatNumber(_0x1461fd['linesDeleted']||0x0)}];_0x5dc3f7['hidden']=![],_0x5dc3f7['innerHTML']=_0x38b45b['map'](_0x315880=>'\x0a\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-summary-card\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-summary-label\x22>'+Utils['escapeHtml'](_0x315880['label'])+'</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-summary-value\x22>'+Utils['escapeHtml'](_0x315880['value'])+'</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-summary-meta\x22>'+Utils['escapeHtml'](_0x315880['meta'])+'</div>\x0a\x20\x20\x20\x20</div>\x0a\x20\x20')['join']('');}function renderUsageDrilldownTask(_0x325237){const _0x54258b=Utils['escapeHtml'](_0x325237['name']||'Task\x20'+String(_0x325237['taskId']||'')['slice'](0x0,0x8)),_0x5e05b3=Utils['escapeHtml'](_0x325237['taskId']||''),_0x35b5da='task.html?id='+encodeURIComponent(_0x325237['taskId']||''),_0x1e3379=Utils['escapeHtml'](_0x325237['user']?.['name']||_0x325237['user']?.['username']||_0x325237['user']?.['userId']||'Unknown'),_0x5541ea=Utils['escapeHtml'](_0x325237['environment']||'Unknown'),_0x132962=Utils['escapeHtml'](prettifyKey(_0x325237['source']||'manual')),_0x230306=Utils['escapeHtml'](prettifyKey(_0x325237['type']||'standard')),_0x4d2cc9=Utils['escapeHtml'](formatDateTime(_0x325237['createdAt'])),_0x568bd0=_0x325237['finishedAt']?Utils['escapeHtml'](formatDateTime(_0x325237['finishedAt'])):'In\x20progress',_0x5921be=_0x325237['durationMinutes']===null?'Pending':Utils['escapeHtml'](formatDurationMinutes(_0x325237['durationMinutes'])),_0x108266=Utils['escapeHtml'](prettifyKey(_0x325237['status']||'unknown')),_0x9026c8=Utils['escapeHtml'](String(_0x325237['status']||'unknown')['toLowerCase']()),_0xb085ea=[_0x325237['approved']?'<span\x20class=\x22admin-drilldown-flag\x20approved\x22>Approved</span>':'',_0x325237['pushed']?'<span\x20class=\x22admin-drilldown-flag\x20pushed\x22>Pushed</span>':'',_0x325237['hasChanges']?'<span\x20class=\x22admin-drilldown-flag\x20changed\x22>Has\x20Changes</span>':'']['filter'](Boolean)['join']('');return'\x0a\x20\x20\x20\x20<article\x20class=\x22admin-drilldown-card\x22>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-card-header\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-card-title\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<h3\x20class=\x22admin-drilldown-task-name\x22>'+_0x54258b+'</h3>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-task-id\x22>'+_0x5e05b3+'</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22status-pill\x20status-'+_0x9026c8+'\x22>'+_0x108266+'</span>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-meta\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-meta-item\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22admin-drilldown-meta-label\x22>Environment</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>'+_0x5541ea+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-meta-item\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22admin-drilldown-meta-label\x22>User</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>'+_0x1e3379+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-meta-item\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22admin-drilldown-meta-label\x22>Source</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>'+_0x132962+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-meta-item\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22admin-drilldown-meta-label\x22>Type</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>'+_0x230306+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-meta-item\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22admin-drilldown-meta-label\x22>Created</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>'+_0x4d2cc9+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-meta-item\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22admin-drilldown-meta-label\x22>Duration</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>'+_0x5921be+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-meta-item\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22admin-drilldown-meta-label\x22>Finished</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>'+_0x568bd0+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-meta-item\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22admin-drilldown-meta-label\x22>Code\x20Impact</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<span>+'+Utils['escapeHtml'](formatNumber(_0x325237['code']?.['linesAdded']||0x0))+'\x20/\x20-'+Utils['escapeHtml'](formatNumber(_0x325237['code']?.['linesDeleted']||0x0))+'</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-stats\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22admin-drilldown-chip\x22>'+Utils['escapeHtml'](formatNumber(_0x325237['code']?.['filesChanged']||0x0))+'\x20files</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<span\x20class=\x22admin-drilldown-chip\x22>'+Utils['escapeHtml'](formatNumber(_0x325237['code']?.['repositories']||0x0))+'\x20repos</span>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-actions\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22admin-drilldown-flags\x22>'+(_0xb085ea||'<span\x20class=\x22admin-drilldown-flag\x20neutral\x22>Not\x20approved</span>')+'</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<a\x20class=\x22btn-secondary\x20btn-small\x22\x20href=\x22'+Utils['escapeHtml'](_0x35b5da)+'\x22\x20target=\x22_blank\x22\x20rel=\x22noopener\x20noreferrer\x22>Open\x20Task</a>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20</article>\x0a\x20\x20';}function updateActiveFilterButtons(_0x5633dd,_0x25bb41){document['querySelectorAll'](_0x5633dd+'\x20.admin-filter-btn')['forEach'](_0x52b2c8=>{_0x52b2c8['classList']['toggle']('active',_0x52b2c8['dataset']['level']===_0x25bb41||_0x52b2c8['dataset']['days']===_0x25bb41||_0x52b2c8['dataset']['order']===_0x25bb41);});}function scrollLogsToLiveEdge(_0x2279ee){if(!_0x2279ee)return;if(state['logs']['order']===LOG_ORDER_DESC){_0x2279ee['scrollTop']=0x0;return;}_0x2279ee['scrollTop']=_0x2279ee['scrollHeight'];}function setSummaryValue(_0x2c185c,_0x6081be,_0x1e0fe2=''){const _0x303c34=document['getElementById'](_0x2c185c);if(!_0x303c34)return;_0x303c34['textContent']=_0x6081be,_0x303c34['classList']['remove']('status-good','status-warn','status-bad'),_0x1e0fe2&&_0x303c34['classList']['add'](_0x1e0fe2);}function statusClassFromPercent(_0x490b26){if(_0x490b26>=0x50)return'status-good';if(_0x490b26>0x3c)return'status-warn';return'status-bad';}function formatDateTime(_0x73c2bc){const _0x1b1442=new Date(_0x73c2bc);if(Number['isNaN'](_0x1b1442['getTime']()))return _0x73c2bc||'Unknown';return _0x1b1442['toLocaleString']();}function formatLogContext(_0x50567f){if(!_0x50567f)return'';try{return JSON['stringify'](_0x50567f,null,0x2);}catch{return String(_0x50567f);}}function formatLogEntryForClipboard(_0x5ca5a9){const _0x507aa8=['['+formatDateTime(_0x5ca5a9['timestamp'])+']\x20'+String(_0x5ca5a9['level']||'INFO')['toUpperCase']()];_0x5ca5a9['message']&&_0x507aa8['push'](String(_0x5ca5a9['message']));const _0x55486e=formatLogContext(_0x5ca5a9['context']);return _0x55486e&&(_0x507aa8['push']('Context:'),_0x507aa8['push'](_0x55486e)),_0x507aa8['join']('\x0a');}function formatLogEntriesForClipboard(_0x2573ec){if(!Array['isArray'](_0x2573ec)||_0x2573ec['length']===0x0)return'';return _0x2573ec['map'](formatLogEntryForClipboard)['join']('\x0a\x0a');}function formatDurationMinutes(_0x56c538){const _0x3525d6=Math['round'](Number(_0x56c538)||0x0);if(_0x3525d6<0x3c)return _0x3525d6+'m';const _0x5a113e=Math['floor'](_0x3525d6/0x3c),_0x5e7950=_0x3525d6%0x3c;return _0x5e7950>0x0?_0x5a113e+'h\x20'+_0x5e7950+'m':_0x5a113e+'h';}function formatPercent(_0x1a4618){return Math['round'](Number(_0x1a4618)||0x0)+'%';}function formatNumber(_0x2f78dc){return NUMBER_FORMATTER['format'](Number(_0x2f78dc)||0x0);}function formatSignedNumber(_0x190e04){const _0x4ece15=Number(_0x190e04)||0x0;if(_0x4ece15>0x0)return'+'+formatNumber(_0x4ece15);return formatNumber(_0x4ece15);}function prettifyKey(_0x1e266e){return String(_0x1e266e)['replace'](/[_-]+/g,'\x20')['replace'](/\b\w/g,_0x284413=>_0x284413['toUpperCase']());}const DRILLDOWN_TITLES={'containers':'Docker\x20Containers','storage':'Docker\x20Storage','sessions':'Active\x20Sessions','system':'System\x20Information'};function openDrilldown(_0x3997f5){if(!_0x3997f5||!DRILLDOWN_TITLES[_0x3997f5])return;const _0x2674a9=document['getElementById']('drilldown-modal'),_0x48a9a6=document['getElementById']('drilldown-modal-title'),_0x369de0=document['getElementById']('drilldown-loading'),_0x4761bf=document['getElementById']('drilldown-error'),_0x3dc431=document['getElementById']('drilldown-content');_0x48a9a6['textContent']=DRILLDOWN_TITLES[_0x3997f5],_0x369de0['hidden']=![],_0x4761bf['hidden']=!![],_0x3dc431['innerHTML']='',_0x2674a9['hidden']=![],loadDrilldownData(_0x3997f5)['then'](_0x5822d7=>{_0x369de0['hidden']=!![],_0x3dc431['innerHTML']=_0x5822d7,attachDrilldownActions(_0x3997f5,_0x3dc431);})['catch'](_0x1b3e57=>{_0x369de0['hidden']=!![],_0x4761bf['hidden']=![],document['getElementById']('drilldown-error-message')['textContent']=_0x1b3e57['message']||'Failed\x20to\x20load\x20details';});}function closeDrilldownModal(){const _0x307ca1=document['getElementById']('drilldown-modal');_0x307ca1&&(_0x307ca1['hidden']=!![]);}async function loadDrilldownData(_0x383401){switch(_0x383401){case'containers':return loadContainersDrilldown();case'storage':return loadStorageDrilldown();case'sessions':return loadSessionsDrilldown();case'system':return loadSystemDrilldown();default:return'<div\x20class=\x22drilldown-empty\x22>Unknown\x20drilldown\x20type.</div>';}}async function loadContainersDrilldown(){const _0x2d86e0=await API['getDockerContainers'](),_0x378a33=_0x2d86e0['containers']||[];if(_0x378a33['length']===0x0)return'<div\x20class=\x22drilldown-empty\x22>No\x20Docker\x20containers\x20found.</div>';const _0x27e8e0=_0x378a33['filter'](_0x193b6f=>_0x193b6f['state']==='running')['length'],_0x325495=_0x378a33['length']-_0x27e8e0;let _0x1e2e71='\x0a\x20\x20\x20\x20<div\x20class=\x22drilldown-inline-message\x22>\x0a\x20\x20\x20\x20\x20\x20'+esc(String(_0x378a33['length']))+'\x20container'+(_0x378a33['length']!==0x1?'s':'')+'\x20total\x20&mdash;\x0a\x20\x20\x20\x20\x20\x20'+esc(String(_0x27e8e0))+'\x20running,\x20'+esc(String(_0x325495))+'\x20stopped\x0a\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20<div\x20class=\x22drilldown-table-wrap\x22>\x0a\x20\x20\x20\x20\x20\x20<table\x20class=\x22drilldown-table\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<thead>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Name</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Image</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Status</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Ports</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Created</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Actions</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</thead>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<tbody>\x0a\x20\x20';for(const _0x5bb3e9 of _0x378a33){const _0x457c89=esc((_0x5bb3e9['names']||[])[0x0]||_0x5bb3e9['shortId']||_0x5bb3e9['id']),_0x14a632=esc(_0x5bb3e9['image']||'-'),_0x40df69=String(_0x5bb3e9['state']||'unknown')['toLowerCase'](),_0x2ba949=esc(_0x5bb3e9['status']||_0x5bb3e9['state']||'-'),_0x409dda=(_0x5bb3e9['ports']||[])['filter'](_0xd5e517=>_0xd5e517['public'])['map'](_0x5ddc76=>esc(_0x5ddc76['public']+':'+_0x5ddc76['private']+'/'+_0x5ddc76['type']))['join'](',\x20')||'-',_0x2ba850=_0x5bb3e9['created']?esc(formatDateTime(_0x5bb3e9['created'])):'-',_0xb08dde=_0x40df69==='running';_0x1e2e71+='\x0a\x20\x20\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<td><strong>'+_0x457c89+'</strong><br><span\x20class=\x22text-muted\x22\x20style=\x22font-size:11px\x22>'+esc(_0x5bb3e9['shortId']||'')+'</span></td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<td><span\x20class=\x22drilldown-tag\x22>'+_0x14a632+'</span></td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<td><span\x20class=\x22drilldown-status\x20drilldown-status-'+esc(_0x40df69)+'\x22>'+_0x2ba949+'</span></td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<td>'+_0x409dda+'</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<td\x20style=\x22white-space:nowrap\x22>'+_0x2ba850+'</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22drilldown-actions\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+(_0xb08dde?'<button\x20class=\x22btn-secondary\x20btn-small\x22\x20data-action=\x22stop-container\x22\x20data-container-id=\x22'+esc(_0x5bb3e9['id'])+'\x22>Stop</button>':'')+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20class=\x22btn-ghost\x20btn-small\x22\x20data-action=\x22remove-container\x22\x20data-container-id=\x22'+esc(_0x5bb3e9['id'])+'\x22>Remove</button>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</td>\x0a\x20\x20\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20';}return _0x1e2e71+='</tbody></table></div>',_0x1e2e71;}async function loadStorageDrilldown(){const [_0xe6b73f,_0x3d6b52]=await Promise['all']([API['getDockerImages'](),API['getDockerVolumes']()]),_0x2767bd=_0xe6b73f['images']||[],_0x586b0e=_0x3d6b52['volumes']||[];let _0x4fcfe3='';_0x4fcfe3+='<div\x20class=\x22drilldown-section\x22><div\x20class=\x22drilldown-section-title\x22>Images</div>';if(_0x2767bd['length']===0x0)_0x4fcfe3+='<div\x20class=\x22drilldown-empty\x22>No\x20images\x20found.</div>';else{_0x4fcfe3+='\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22drilldown-table-wrap\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<table\x20class=\x22drilldown-table\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<thead>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>ID</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Tags</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Size</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Created</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Containers</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</thead>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tbody>\x0a\x20\x20\x20\x20';for(const _0xbba78e of _0x2767bd){const _0x1d38f9=(_0xbba78e['tags']||[])['filter'](_0x33f716=>_0x33f716!=='<none>:<none>'),_0x2d590c=_0x1d38f9['length']>0x0?'<div\x20class=\x22drilldown-tag-list\x22>'+_0x1d38f9['map'](_0x5b5df4=>'<span\x20class=\x22drilldown-tag\x22>'+esc(_0x5b5df4)+'</span>')['join']('')+'</div>':'<span\x20class=\x22text-muted\x22>untagged</span>';_0x4fcfe3+='\x0a\x20\x20\x20\x20\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td><code>'+esc(_0xbba78e['id']||'-')+'</code></td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td>'+_0x2d590c+'</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td\x20style=\x22white-space:nowrap\x22>'+esc(_0xbba78e['sizeDisplay']||'-')+'</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td\x20style=\x22white-space:nowrap\x22>'+(_0xbba78e['created']?esc(formatDateTime(_0xbba78e['created'])):'-')+'</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td>'+esc(String(_0xbba78e['containers']??'-'))+'</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20\x20\x20';}_0x4fcfe3+='</tbody></table></div>';}_0x4fcfe3+='</div>',_0x4fcfe3+='<div\x20class=\x22drilldown-section\x22><div\x20class=\x22drilldown-section-title\x22>Volumes</div>';if(_0x586b0e['length']===0x0)_0x4fcfe3+='<div\x20class=\x22drilldown-empty\x22>No\x20volumes\x20found.</div>';else{_0x4fcfe3+='\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22drilldown-table-wrap\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<table\x20class=\x22drilldown-table\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<thead>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Name</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Driver</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Scope</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Created</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</thead>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tbody>\x0a\x20\x20\x20\x20';for(const _0x328080 of _0x586b0e){const _0x4fbf49=_0x328080['name']||'-',_0x15bf2c=_0x4fbf49['length']>0x28?_0x4fbf49['substring'](0x0,0x25)+'...':_0x4fbf49;_0x4fcfe3+='\x0a\x20\x20\x20\x20\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td\x20title=\x22'+esc(_0x4fbf49)+'\x22><code>'+esc(_0x15bf2c)+'</code></td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td>'+esc(_0x328080['driver']||'-')+'</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td>'+esc(_0x328080['scope']||'-')+'</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td\x20style=\x22white-space:nowrap\x22>'+(_0x328080['created']?esc(formatDateTime(_0x328080['created'])):'-')+'</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20\x20\x20';}_0x4fcfe3+='</tbody></table></div>';}return _0x4fcfe3+='</div>',_0x4fcfe3;}async function loadSessionsDrilldown(){const _0x13fccb=await API['getActiveSessions'](),_0x36241c=_0x13fccb['sessions']||[];if(_0x36241c['length']===0x0)return'<div\x20class=\x22drilldown-empty\x22>No\x20active\x20sessions\x20found.</div>';let _0x57af0e='\x0a\x20\x20\x20\x20<div\x20class=\x22drilldown-inline-message\x22>\x0a\x20\x20\x20\x20\x20\x20'+esc(String(_0x36241c['length']))+'\x20active\x20session'+(_0x36241c['length']!==0x1?'s':'')+'\x0a\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20<div\x20class=\x22drilldown-table-wrap\x22>\x0a\x20\x20\x20\x20\x20\x20<table\x20class=\x22drilldown-table\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<thead>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Session\x20ID</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>User</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Created</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Last\x20Access</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</thead>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<tbody>\x0a\x20\x20';for(const _0x41271b of _0x36241c){const _0x199e6b=(_0x41271b['id']||'')['length']>0x10?_0x41271b['id']['substring'](0x0,0xd)+'...':_0x41271b['id']||'-';_0x57af0e+='\x0a\x20\x20\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<td\x20title=\x22'+esc(_0x41271b['id']||'')+'\x22><code>'+esc(_0x199e6b)+'</code></td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<td>'+esc(_0x41271b['username']||'Unknown')+'</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<td\x20style=\x22white-space:nowrap\x22>'+(_0x41271b['createdAt']?esc(formatDateTime(_0x41271b['createdAt'])):'-')+'</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<td\x20style=\x22white-space:nowrap\x22>'+(_0x41271b['lastAccess']?esc(formatDateTime(_0x41271b['lastAccess'])):'-')+'</td>\x0a\x20\x20\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20';}return _0x57af0e+='</tbody></table></div>',_0x57af0e;}async function loadSystemDrilldown(){const _0x238309=await API['getSystemInfo']();let _0x1d27bd='<div\x20class=\x22drilldown-info-grid\x22>';const _0x4c3aff=[{'label':'Hostname','value':_0x238309['hostname']},{'label':'Platform','value':_0x238309['platform']+'\x20('+_0x238309['arch']+')'},{'label':'Kernel','value':_0x238309['release']},{'label':'Node.js','value':_0x238309['nodeVersion']},{'label':'Process\x20ID','value':_0x238309['pid']},{'label':'CPU\x20Model','value':_0x238309['cpuModel']},{'label':'CPU\x20Cores','value':_0x238309['coreCount']},{'label':'Total\x20Memory','value':_0x238309['totalMemoryDisplay']},{'label':'Free\x20Memory','value':_0x238309['freeMemoryDisplay']},{'label':'System\x20Uptime','value':formatUptimeSeconds(_0x238309['uptime']?.['system'])},{'label':'Process\x20Uptime','value':formatUptimeSeconds(_0x238309['uptime']?.['process'])}];for(const _0x59def0 of _0x4c3aff){_0x1d27bd+='\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22drilldown-info-item\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22drilldown-info-label\x22>'+esc(_0x59def0['label'])+'</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22drilldown-info-value\x22>'+esc(String(_0x59def0['value']??'-'))+'</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20';}_0x1d27bd+='</div>';_0x238309['loadAverage']&&(_0x1d27bd+='<div\x20class=\x22drilldown-section\x22><div\x20class=\x22drilldown-section-title\x22>Load\x20Average</div>',_0x1d27bd+='<div\x20class=\x22drilldown-info-grid\x22>',_0x1d27bd+='\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22drilldown-info-item\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22drilldown-info-label\x22>1\x20Minute</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22drilldown-info-value\x22>'+esc(_0x238309['loadAverage']['1m']||'-')+'</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22drilldown-info-item\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22drilldown-info-label\x22>5\x20Minutes</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22drilldown-info-value\x22>'+esc(_0x238309['loadAverage']['5m']||'-')+'</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22drilldown-info-item\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22drilldown-info-label\x22>15\x20Minutes</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<div\x20class=\x22drilldown-info-value\x22>'+esc(_0x238309['loadAverage']['15m']||'-')+'</div>\x0a\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20',_0x1d27bd+='</div></div>');if(Array['isArray'](_0x238309['cores'])&&_0x238309['cores']['length']>0x0&&_0x238309['cores']['length']<=0x40){_0x1d27bd+='<div\x20class=\x22drilldown-section\x22><div\x20class=\x22drilldown-section-title\x22>CPU\x20Cores</div>',_0x1d27bd+='\x0a\x20\x20\x20\x20\x20\x20<div\x20class=\x22drilldown-table-wrap\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<table\x20class=\x22drilldown-table\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<thead>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Core</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Model</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<th>Speed\x20(MHz)</th>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</thead>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<tbody>\x0a\x20\x20\x20\x20';for(const _0x286c59 of _0x238309['cores']){_0x1d27bd+='\x0a\x20\x20\x20\x20\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td>'+esc(String(_0x286c59['index']))+'</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td>'+esc(_0x286c59['model']||'-')+'</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<td>'+esc(String(_0x286c59['speed']||'-'))+'</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</tr>\x0a\x20\x20\x20\x20\x20\x20';}_0x1d27bd+='</tbody></table></div></div>';}return _0x1d27bd;}function formatUptimeSeconds(_0x16d041){if(!Number['isFinite'](_0x16d041)||_0x16d041<0x0)return'-';const _0x3db2b5=Math['floor'](_0x16d041/0x15180),_0x457450=Math['floor'](_0x16d041%0x15180/0xe10),_0xca1628=Math['floor'](_0x16d041%0xe10/0x3c);if(_0x3db2b5>0x0)return _0x3db2b5+'d\x20'+_0x457450+'h\x20'+_0xca1628+'m';if(_0x457450>0x0)return _0x457450+'h\x20'+_0xca1628+'m';return _0xca1628+'m';}function esc(_0x54e8eb){return Utils['escapeHtml'](String(_0x54e8eb??''));}function attachDrilldownActions(_0x23c311,_0xbad787){_0x23c311==='containers'&&_0xbad787['addEventListener']('click',async _0x45e4ee=>{const _0x2997a4=_0x45e4ee['target']['closest']('[data-action]');if(!_0x2997a4)return;const _0x509c35=_0x2997a4['dataset']['action'],_0xa75b45=_0x2997a4['dataset']['containerId'];if(!_0xa75b45)return;_0x2997a4['disabled']=!![],_0x2997a4['textContent']=_0x509c35==='stop-container'?'Stopping...':'Removing...';try{if(_0x509c35==='stop-container')await API['stopDockerContainer'](_0xa75b45),Utils['showSuccess']('Container\x20stopped');else _0x509c35==='remove-container'&&(await API['removeDockerContainer'](_0xa75b45),Utils['showSuccess']('Container\x20removed'));const _0x32b17f=await loadContainersDrilldown();document['getElementById']('drilldown-content')['innerHTML']=_0x32b17f,attachDrilldownActions('containers',document['getElementById']('drilldown-content')),loadHealth({'showLoading':![]});}catch(_0x10954a){Utils['showError'](_0x10954a['message']||'Failed\x20to\x20'+_0x509c35['replace']('-','\x20')),_0x2997a4['disabled']=![],_0x2997a4['textContent']=_0x509c35==='stop-container'?'Stop':'Remove';}});}