diff --git a/cmd/skywire-visor/static/268.1002767682a89a010d06.js b/cmd/skywire-visor/static/268.1002767682a89a010d06.js
new file mode 100644
index 0000000000..5394b07aef
--- /dev/null
+++ b/cmd/skywire-visor/static/268.1002767682a89a010d06.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkskywire_manager=self.webpackChunkskywire_manager||[]).push([[268],{84268:function(e){e.exports=JSON.parse('{"common":{"save":"Guardar","cancel":"Cancelar","downloaded":"Recibido","uploaded":"Enviado","loading-error":"Hubo un error obteniendo los datos. Reintentando...","operation-error":"Hubo un error al intentar completar la operaci\xf3n.","no-connection-error":"No hay conexi\xf3n a Internet o conexi\xf3n con el hipervisor.","error":"Error:","refreshed":"Datos refrescados.","options":"Opciones","logout":"Cerrar sesi\xf3n","logout-error":"Error cerrando la sesi\xf3n.","logout-confirmation":"Are you sure you want to log out?","time-in-ms":"{{ time }}ms.","time-in-segs":"{{ time }}s.","ok":"Ok","yes":"S\xed","no":"No","unknown":"Desconocido","close":"Cerrar","window-size-error":"La ventana es demasiado estrecha para el contenido."},"labeled-element":{"edit-label":"Editar etiqueta","remove-label":"Remover etiqueta","copy":"Copiar","remove-label-confirmation":"\xbfRealmente desea eliminar la etiqueta?","unnamed-element":"Sin nombre","unnamed-local-visor":"Visor local","local-element":"Local","tooltip":"Haga clic para copiar la entrada o cambiar la etiqueta","tooltip-with-text":"{{ text }} (Haga clic para copiar la entrada o cambiar la etiqueta)"},"labels":{"title":"Etiquetas","info":"Etiquetas que ha introducido para identificar f\xe1cilmente visores, transportes y otros elementos, en lugar de tener que leer identificadores generados por una m\xe1quina.","list-title":"Lista de etiquetas","label":"Etiqueta","id":"ID del elemento","type":"Tipo","delete-confirmation":"\xbfSeguro que desea borrar la etiqueta?","delete-selected-confirmation":"\xbfSeguro que desea borrar las etiquetas seleccionados?","delete":"Borrar etiqueta","deleted":"Operaci\xf3n de borrado completada.","empty":"No hay etiquetas guardadas.","empty-with-filter":"Ninguna etiqueta coincide con los criterios de filtrado seleccionados.","filter-dialog":{"label":"La etiqueta debe contener","id":"El id debe contener","type":"El tipo debe ser","type-options":{"any":"Cualquiera","visor":"Visor","dmsg-server":"Servidor DMSG","transport":"Transporte"}}},"filters":{"filter-action":"Filtrar","filter-info":"Lista de filtros.","press-to-remove":"(Presione para remover los filtros)","remove-confirmation":"\xbfSeguro que desea remover los filtros?"},"tables":{"title":"Ordenar por","sorting-title":"Ordenado por:","sort-by-value":"Valor","sort-by-label":"Etiqueta","label":"(etiqueta)","inverted-order":"(invertido)"},"start":{"title":"Inicio"},"node":{"title":"Detalles del visor","not-found":"Visor no encontrado.","statuses":{"online":"Online","online-tooltip":"El visor se encuentra online.","connecting":"Conectando","connecting-tooltip":"El visor se encuentra online, pero todav\xeda est\xe1 conectando con el uptime tracker.","unknown":"Desconocido","unknown-tooltip":"El visor se encuentra online, pero no ha sido posible determinar si est\xe1 conectado con el uptime tracker.","partially-online":"Online con problemas","partially-online-tooltip":"El visor se encuentra online, pero desconectado del uptime tracker.","offline":"Offline","offline-tooltip":"El visor se encuentra offline."},"details":{"node-info":{"title":"Informaci\xf3n del visor","label":"Etiqueta:","public-key":"Llave p\xfablica:","symmetic-nat":"NAT sim\xe9trica:","public-ip":"IP p\xfablica:","ip":"IP:","dmsg-server":"Servidor DMSG:","ping":"Ping:","node-version":"Versi\xf3n del visor:","skybian-version":"Versi\xf3n de Skybian:","no-skybian-version":"(no se usa Skybian)","time":{"title":"Tiempo online:","seconds":"unos segundos","minute":"1 minuto","minutes":"{{ time }} minutos","hour":"1 hora","hours":"{{ time }} horas","day":"1 d\xeda","days":"{{ time }} d\xedas","week":"1 semana","weeks":"{{ time }} semanas"}},"transports-info":{"title":"Informaci\xf3n de Transportes","autoconnect":"Autoconectar:","autoconnect-info":"Al activarse, el visor crear\xe1 autom\xe1ticamente los transportes necesarios cuando se solicite la conexi\xf3n a un visor p\xfablico. Al desactivarse, los transportes deber\xe1n ser creados antes de poder establecer la conexi\xf3n.","enabled":"Activado","disabled":"Desactivado","enable-button":"Activar","disable-button":"Desactivar","enable-confirmation":"\xbfSeguro que desea activar la funci\xf3n de autoconectar?","disable-confirmation":"\xbfSeguro que desea desactivar la funci\xf3n de autoconectar?","enable-done":"La funci\xf3n de autoconectar ha sido activada.","disable-done":"La funci\xf3n de autoconectar ha sido desactivada."},"router-info":{"title":"Informaci\xf3n del Enrutador","min-hops":"Saltos m\xednimos:","max-hops":"Saltos m\xe1ximos:","change-config-button":"Cambiar configuraci\xf3n"},"node-health":{"title":"Informaci\xf3n de Salud","status":"Estatus:","transport-discovery":"Transport discovery:","route-finder":"Route finder:","setup-node":"Setup node:","uptime-tracker":"Uptime tracker:","address-resolver":"Address resolver:","element-offline":"Offline"},"node-traffic-data":"Datos de tr\xe1fico"},"tabs":{"info":"Info","apps":"Apps","routing":"Enrutamiento"},"error-load":"Hubo un error al intentar refrescar los datos. Reintentando..."},"router-config":{"title":"Configuraci\xf3n del Enrutador","info":"Aqu\xed podr\xe1 configurar cuantos saltos la conexi\xf3n deber\xe1 realizar a trav\xe9s de otros visores de Skywire antes de alcanzar el destino final. NOTA: los cambios no afectar\xe1n a las rutas ya existentes.","min-hops":"Saltos m\xednimos","save-config-button":"Guardar configuraci\xf3n","done":"Cambios guardados."},"nodes":{"title":"Lista de visores","dmsg-title":"DMSG","update-all":"Actualizar todos los visores online","hypervisor":"Hypervisor","state":"Estado","state-tooltip":"Estado actual","label":"Etiqueta","key":"Llave","dmsg-server":"Servidor DMSG","ping":"Ping","hypervisor-info":"Este visor es el Hypervisor actual.","copy-key":"Copiar llave","copy-dmsg":"Copiar llave DMSG","copy-data":"Copiar datos","view-node":"Ver visor","delete-node":"Remover visor","delete-all-offline":"Remover todos los visores offline","error-load":"Hubo un error al intentar refrescar la lista. Reintentando...","empty":"No hay ning\xfan visor conectado a este hypervisor.","empty-with-filter":"Ningun visor coincide con los criterios de filtrado seleccionados.","delete-node-confirmation":"\xbfSeguro que desea remover el visor de la lista?","delete-all-offline-confirmation":"\xbfSeguro que desea remover todos los visores offline de la lista?","delete-all-filtered-offline-confirmation":"Todos los visores offline que satisfagan los criterios de filtrado actuales ser\xe1n removidos de la lista. \xbfSeguro que desea continuar?","deleted":"Visor removido.","deleted-singular":"1 visor offline removido.","deleted-plural":"{{ number }} visores offline removidos.","no-visors-to-update":"No hay visores para actualizar.","filter-dialog":{"online":"El visor debe estar","label":"La etiqueta debe contener","key":"La llave debe contener","dmsg":"La llave del servidor DMSG debe contener","online-options":{"any":"Online u offline","online":"Online","offline":"Offline"}}},"edit-label":{"label":"Etiqueta","done":"Etiqueta guardada.","label-removed-warning":"La etiqueta fue removida."},"settings":{"title":"Configuraci\xf3n","password":{"initial-config-help":"Use esta opci\xf3n para establecer la contrase\xf1a inicial. Despu\xe9s de establecer una contrase\xf1a no es posible usar esta opci\xf3n para modificarla.","help":"Opciones para cambiar la contrase\xf1a.","old-password":"Contrase\xf1a actual","new-password":"Nueva contrase\xf1a","repeat-password":"Repita la contrase\xf1a","password-changed":"Contrase\xf1a cambiada.","error-changing":"Error cambiando la contrase\xf1a.","initial-config":{"title":"Establecer contrase\xf1a inicial","password":"Contrase\xf1a","repeat-password":"Repita la contrase\xf1a","set-password":"Establecer contrase\xf1a","done":"Contrase\xf1a establecida. Por favor \xfasela para acceder al sistema.","error":"Error. Por favor aseg\xfarese de que no hubiese establecido la contrase\xf1a anteriormente."},"errors":{"bad-old-password":"La contrase\xf1a actual introducida no es correcta.","old-password-required":"La contrase\xf1a actual es requerida.","new-password-error":"La contrase\xf1a debe tener entre 6 y 64 caracteres.","passwords-not-match":"Las contrase\xf1as no coinciden.","default-password":"No utilice la contrase\xf1a por defecto (1234)."}},"updater-config":{"open-link":"Mostrar la configuraci\xf3n del actualizador","open-confirmation":"La configuraci\xf3n del actualizador es s\xf3lo para usuarios experimentados. Seguro que desea continuar?","help":"Utilice este formulario para modificar la configuraci\xf3n que utilizar\xe1 el actualizador. Se ignorar\xe1n todos los campos vac\xedos. La configuraci\xf3n se utilizar\xe1 para todas las operaciones de actualizaci\xf3n, sin importar qu\xe9 elemento se est\xe9 actualizando, as\xed que por favor tenga cuidado.","channel":"Canal","version":"Versi\xf3n","archive-url":"URL del archivo","checksum-url":"URL del checksum","not-saved":"Los cambios a\xfan no se han guardado.","save":"Guardar cambios","remove-settings":"Remover la configuraci\xf3n","saved":"Las configuracion personalizada ha sido guardada.","removed":"Las configuracion personalizada ha sido removida.","save-confirmation":"\xbfSeguro que desea aplicar la configuraci\xf3n personalizada?","remove-confirmation":"\xbfSeguro que desea remover la configuraci\xf3n personalizada?"},"change-password":"Cambiar contrase\xf1a","refresh-rate":"Frecuencia de refrescado","refresh-rate-help":"Tiempo que el sistema espera para actualizar autom\xe1ticamente los datos.","refresh-rate-confirmation":"Frecuencia de refrescado cambiada.","seconds":"segundos"},"login":{"password":"Contrase\xf1a","incorrect-password":"Contrase\xf1a incorrecta.","initial-config":"Configurar lanzamiento inicial"},"actions":{"menu":{"terminal":"Terminal","config":"Configuraci\xf3n","update":"Actualizar","reboot":"Reiniciar","logs":"Ver logs"},"reboot":{"confirmation":"\xbfSeguro que desea reiniciar el visor?","done":"El visor se est\xe1 reiniciando."},"terminal-options":{"full":"Terminal completa","simple":"Terminal simple"},"terminal":{"title":"Terminal","input-start":"Terminal de Skywire para {{address}}","error":"Error inesperado mientras se intentaba ejecutar el comando."}},"update":{"title":"Actualizar","error-title":"Error","processing":"Buscando actualizaciones...","no-update":"No hay ninguna actualizaci\xf3n para el visor. La versi\xf3n instalada actualmente es:","no-updates":"No se encontraron nuevas actualizaciones.","already-updating":"Algunos visores ya est\xe1n siendo actualizandos:","update-available":"Las siguientes actualizaciones fueron encontradas:","update-available-singular":"Las siguientes actualizaciones para 1 visor fueron encontradas:","update-available-plural":"Las siguientes actualizaciones para {{ number }} visores fueron encontradas:","update-available-additional-singular":"Las siguientes actualizaciones adicionales para 1 visor fueron encontradas:","update-available-additional-plural":"Las siguientes actualizaciones adicionales para {{ number }} visores fueron encontradas:","update-instructions":"Haga clic en el bot\xf3n \'Instalar actualizaciones\' para continuar.","updating":"La operaci\xf3n de actualizaci\xf3n se ha iniciado, puede abrir esta ventana nuevamente para verificar el progreso:","version-change":"De {{ currentVersion }} a {{ newVersion }}","selected-channel":"Canal seleccionado:","downloaded-file-name-prefix":"Descargando: ","speed-prefix":"Velocidad: ","time-downloading-prefix":"Tiempo descargando: ","time-left-prefix":"Tiempo aprox. faltante: ","starting":"Preparando para actualizar","finished":"Conexi\xf3n de estado terminada","install":"Instalar actualizaciones"},"apps":{"log":{"title":"Log","empty":"No hay mensajes de log para el rango de fecha seleccionado.","filter-button":"Mostrando s\xf3lo logs generados desde:","filter":{"title":"Filtro","filter":"Mostrar s\xf3lo logs generados desde","7-days":"Los \xfaltimos 7 d\xedas","1-month":"Los \xfaltimos 30 d\xedas","3-months":"Los \xfaltimos 3 meses","6-months":"Los \xfaltimos 6 meses","1-year":"El \xfaltimo a\xf1o","all":"mostrar todos"}},"apps-list":{"title":"Aplicaciones","list-title":"Lista de aplicaciones","app-name":"Nombre","port":"Puerto","state":"Estado","state-tooltip":"Estado actual","auto-start":"Autoinicio","empty":"El visor no tiene ninguna aplicaci\xf3n.","empty-with-filter":"Ninguna app coincide con los criterios de filtrado seleccionados.","disable-autostart":"Deshabilitar autoinicio","enable-autostart":"Habilitar autoinicio","autostart-disabled":"Autoinicio deshabilitado","autostart-enabled":"Autoinicio habilitado","unavailable-logs-error":"No es posible mostrar los logs mientras la aplicaci\xf3n no se est\xe1 ejecutando.","filter-dialog":{"state":"El estado debe ser","name":"El nombre debe contener","port":"El puerto debe contener","autostart":"El autoinicio debe estar","state-options":{"any":"Iniciada o detenida","running":"Iniciada","stopped":"Detenida"},"autostart-options":{"any":"Activado or desactivado","enabled":"Activado","disabled":"Desactivado"}}},"vpn-socks-server-settings":{"socks-title":"Configuraci\xf3n de Skysocks","vpn-title":"Configuraci\xf3n de VPN-Server","new-password":"Nueva contrase\xf1a (dejar en blanco para eliminar la contrase\xf1a)","repeat-password":"Repita la contrase\xf1a","passwords-not-match":"Las contrase\xf1as no coinciden.","secure-mode-check":"Usar modo seguro","secure-mode-info":"Cuando est\xe1 activo, el servidor no permite SSH con los clientes y no permite ning\xfan tr\xe1fico de clientes VPN a la red local del servidor.","save":"Guardar","remove-passowrd-confirmation":"Ha dejado el campo de contrase\xf1a vac\xedo. \xbfSeguro que desea eliminar la contrase\xf1a?","change-passowrd-confirmation":"\xbfSeguro que desea cambiar la contrase\xf1a?","changes-made":"Los cambios han sido realizados."},"vpn-socks-client-settings":{"socks-title":"Configuraci\xf3n de Skysocks-Client","vpn-title":"Configuraci\xf3n de VPN-Client","discovery-tab":"Buscar","remote-visor-tab":"Introducir manualmente","settings-tab":"Configuracion","history-tab":"Historial","use":"Usar estos datos","change-note":"Cambiar nota","remove-entry":"Remover entrada","note":"Nota:","note-entered-manually":"Introducido manualmente","note-obtained":"Obtenido del servicio de descubrimiento","key":"Llave:","port":"Puerto:","location":"Ubicaci\xf3n:","state-available":"Disponible","state-offline":"Offline","public-key":"Llave p\xfablica del visor remoto","password":"Contrase\xf1a","password-history-warning":"Nota: la contrase\xf1a no se guardar\xe1 en el historial.","copy-pk-info":"Copiar la llave p\xfablica.","copied-pk-info":"La llave p\xfablica ha sido copiada.","copy-pk-error":"Hubo un problema al intentar cambiar la llave p\xfablica.","no-elements":"Actualmente no hay elementos para mostrar. Por favor, int\xe9ntelo de nuevo m\xe1s tarde.","no-elements-for-filters":"No hay elementos que cumplan los criterios de filtro.","no-filter":"No se ha seleccionado ning\xfan filtro","click-to-change":"Haga clic para cambiar","remote-key-length-error":"La llave p\xfablica debe tener 66 caracteres.","remote-key-chars-error":"La llave p\xfablica s\xf3lo debe contener caracteres hexadecimales.","save":"Guardar","remove-from-history-confirmation":"\xbfSeguro de que desea eliminar la entrada del historial?","change-key-confirmation":"\xbfSeguro que desea cambiar la llave p\xfablica del visor remoto?","changes-made":"Los cambios han sido realizados.","no-history":"Esta pesta\xf1a mostrar\xe1 las \xfaltimas {{ number }} llaves p\xfablicas usadas.","default-note-warning":"La nota por defecto ha sido utilizada.","pagination-info":"{{ currentElementsRange }} de {{ totalElements }}","killswitch-check":"Activar killswitch","killswitch-info":"Cuando est\xe1 activo, todas las conexiones de red se desactivar\xe1n si la aplicaci\xf3n se est\xe1 ejecutando pero la protecci\xf3n VPN est\xe1 interrumpida (por errores temporales o cualquier otro problema). Esto evita fugas de datos.","settings-changed-alert":"Los cambios a\xfan no se han guardado.","save-settings":"Guardar configuracion","change-note-dialog":{"title":"Cambiar Nota","note":"Nota"},"password-dialog":{"title":"Introducir Contrase\xf1a","password":"Contrase\xf1a","info":"Se le solicita una contrase\xf1a porque una contrase\xf1a fue utilizada cuando se cre\xf3 la entrada seleccionada, pero no fue guardada por razones de seguridad. Puede dejar la contrase\xf1a vac\xeda si es necesario.","continue-button":"Continuar"},"filter-dialog":{"title":"Filtros","country":"El pa\xeds debe ser","any-country":"Cualquiera","location":"La ubicaci\xf3n debe contener","pub-key":"La llave p\xfablica debe contener","apply":"Aplicar"}},"stop-app":"Detener","start-app":"Iniciar","view-logs":"Ver logs","settings":"Configuraci\xf3n","open":"Abrir","error":"Se produjo un error y no fue posible realizar la operaci\xf3n.","stop-confirmation":"\xbfSeguro que desea detener la aplicaci\xf3n?","stop-selected-confirmation":"\xbfSeguro que desea detener las aplicaciones seleccionadas?","disable-autostart-confirmation":"\xbfSeguro que desea deshabilitar el autoinicio de la aplicaci\xf3n?","enable-autostart-confirmation":"\xbfSeguro que desea habilitar el autoinicio de la aplicaci\xf3n?","disable-autostart-selected-confirmation":"\xbfSeguro que desea deshabilitar el autoinicio de las aplicaciones seleccionadas?","enable-autostart-selected-confirmation":"\xbfSeguro que desea habilitar el autoinicio de las aplicaciones seleccionadas?","operation-completed":"Operaci\xf3n completada.","operation-unnecessary":"La selecci\xf3n ya tiene la configuraci\xf3n solicitada.","status-running":"Corriendo","status-stopped":"Detenida","status-failed":"Fallida","status-running-tooltip":"La aplicaci\xf3n est\xe1 actualmente corriendo","status-stopped-tooltip":"La aplicaci\xf3n est\xe1 actualmente detenida","status-failed-tooltip":"Algo sali\xf3 mal. Revise los mensajes de la aplicaci\xf3n para m\xe1s informaci\xf3n"},"transports":{"title":"Transportes","info":"Conexiones que tiene con visores remotos de Skywire, para permitir que las aplicaciones Skywire locales se comuniquen con las aplicaciones que se ejecutan en esos visores remotos.","list-title":"Lista de transportes","offline":"Offline","persistent":"Persistente","persistent-tooltip":"Transportes persistentes, los cuales son creados autom\xe1ticamente al iniciar el visor y son recreados autom\xe1ticamente en caso de desconexi\xf3n.","persistent-transport-tooltip":"Este transporte es persistente, as\xed que es creado autom\xe1ticamente al iniciar el visor y es recreado autom\xe1ticamente en caso de desconexi\xf3n.","persistent-transport-button-tooltip":"Este transporte es persistente, as\xed que es creado autom\xe1ticamente al iniciar el visor y es recreado autom\xe1ticamente en caso de desconexi\xf3n. Presione aqu\xed para volverlo no persistente.","non-persistent-transport-button-tooltip":"Presione aqu\xed para volver persistente el transporte. Los transportes persistentes son creados autom\xe1ticamente al iniciar el visor y son recreados autom\xe1ticamente en caso de desconexi\xf3n.","make-persistent":"Volver persistente","make-non-persistent":"Volver no persistente","make-selected-persistent":"Volver persistentes los seleccionados","make-selected-non-persistent":"Volver no persistentes los seleccionados","changes-made":"Cambios hechos.","no-changes-needed":"Ning\xfan cambio fue necesario.","id":"ID","remote-node":"Remoto","type":"Tipo","create":"Crear transporte","make-persistent-confirmation":"\xbfSeguro que desea volver persistente el transporte?","make-non-persistent-confirmation":"\xbfSeguro que desea volver no persistente el transporte?","make-selected-persistent-confirmation":"\xbfSeguro que desea volver persistentes los transportes seleccionados?","make-selected-non-persistent-confirmation":"\xbfSeguro que desea volver no persistentes los transportes seleccionados?","make-offline-non-persistent-confirmation":"\xbfSeguro que desea volver no persistente el transporte? No seguir\xe1 siendo mostrado en la lista mientras se encuentre offline.","delete-confirmation":"\xbfSeguro que desea borrar el transporte?","delete-persistent-confirmation":"Este transporte es persistente, as\xed que puede ser recreado poco despu\xe9s de ser borrado. \xbfSeguro que desea borrarlo?","delete-selected-confirmation":"\xbfSeguro que desea borrar los transportes seleccionados?","delete":"Borrar transporte","deleted":"Operaci\xf3n de borrado completada.","empty":"El visor no tiene ning\xfan transporte.","empty-with-filter":"Ningun transporte coincide con los criterios de filtrado seleccionados.","details":{"title":"Detalles","basic":{"title":"Informaci\xf3n b\xe1sica","persistent":"Persistente:","id":"ID:","local-pk":"Llave p\xfablica local:","remote-pk":"Llave p\xfablica remota:","type":"Tipo:"},"data":{"title":"Transmisi\xf3n de datos","uploaded":"Datos enviados:","downloaded":"Datos recibidos:"}},"dialog":{"remote-key":"Llave p\xfablica remota","label":"Nombre del transporte (opcional)","transport-type":"Tipo de transporte","make-persistent":"Hacer persistente","persistent-tooltip":"Los transportes persistentes son creados autom\xe1ticamente al iniciar el visor y son recreados autom\xe1ticamente en caso de desconexi\xf3n.","only-persistent-created":"El transporte persistente fue creado, pero podr\xeda no haber sido activado.","success":"Transporte creado.","success-without-label":"El transporte fue creado, pero no fue posible guardar la etiqueta.","errors":{"remote-key-length-error":"La llave p\xfablica remota debe tener 66 caracteres.","remote-key-chars-error":"La llave p\xfablica remota s\xf3lo debe contener caracteres hexadecimales.","transport-type-error":"El tipo de transporte es requerido."}},"filter-dialog":{"persistent":"El transporte debe ser","id":"El id debe contener","remote-node":"La llave remota debe contener","persistent-options":{"any":"Cualquiera","persistent":"Persistente","non-persistent":"No persistente"}}},"routes":{"title":"Rutas","info":"Caminos utilizados para llegar a los visores remotos con los que se han establecido transportes. Las rutas se generan autom\xe1ticamente seg\xfan sea necesario.","list-title":"Lista de rutas","key":"Llave","type":"Tipo","source":"Inicio","destination":"Destino","delete-confirmation":"\xbfSeguro que desea borrar la ruta?","delete-selected-confirmation":"\xbfSeguro que desea borrar las rutas seleccionadas?","delete":"Borrar ruta","deleted":"Operaci\xf3n de borrado completada.","empty":"El visor no tiene ninguna ruta.","empty-with-filter":"Ninguna ruta coincide con los criterios de filtrado seleccionados.","details":{"title":"Detalles","basic":{"title":"Informaci\xf3n b\xe1sica","key":"Llave:","rule":"Regla:"},"summary":{"title":"Resumen de regla","keep-alive":"Keep alive:","type":"Tipo de regla:","key-route-id":"ID de la llave de la ruta:"},"specific-fields-titles":{"app":"Campos de applicaci\xf3n","forward":"Campos de reenv\xedo","intermediary-forward":"Campos de reenv\xedo intermedio"},"specific-fields":{"route-id":"ID de la siguiente ruta:","transport-id":"ID del siguiente transporte:","destination-pk":"Llave p\xfablica de destino:","source-pk":"Llave p\xfablica de origen:","destination-port":"Puerto de destino:","source-port":"Puerto de origen:"}},"filter-dialog":{"key":"La llave debe contener","type":"El tipo debe ser","source":"El inicio debe contener","destination":"El destino debe contener","any-type-option":"Cualquiera"}},"copy":{"tooltip":"Presione para copiar","tooltip-with-text":"{{ text }} (Presione para copiar)","copied":"\xa1Copiado!"},"selection":{"select-all":"Seleccionar todo","unselect-all":"Deseleccionar todo","delete-all":"Borrar los elementos seleccionados","start-all":"Iniciar las apps seleccionadas","stop-all":"Detener las apps seleccionadas","enable-autostart-all":"Habilitar el autoinicio de las apps seleccionadas","disable-autostart-all":"Deshabilitar el autoinicio de las apps seleccionadas"},"refresh-button":{"seconds":"Refrescado hace unos segundos","minute":"Refrescado hace un minuto","minutes":"Refrescado hace {{ time }} minutos","hour":"Refrescado hace una hora","hours":"Refrescado hace {{ time }} horas","day":"Refrescado hace un d\xeda","days":"Refrescado hace {{ time }} d\xedas","week":"Refrescado hace una semana","weeks":"Refrescado hace {{ time }} semanas","error-tooltip":"Hubo un error al intentar refrescar los datos. Reintentando autom\xe1ticamente cada {{ time }} segundos..."},"view-all-link":{"label":"Ver todos los {{ number }} elementos"},"paginator":{"first":"Primera","last":"\xdaltima","total":"Total: {{ number }} p\xe1ginas","select-page-title":"Seleccionar p\xe1gina"},"confirmation":{"header-text":"Confirmaci\xf3n","confirm-button":"S\xed","cancel-button":"No","close":"Cerrar","error-header-text":"Error","done-header-text":"Hecho"},"language":{"title":"Seleccionar lenguaje"},"tabs-window":{"title":"Cambiar pesta\xf1a"},"vpn":{"title":"Panel de Control de VPN","start":"Inicio","servers":"Servidores","settings":"Configuracion","unnamed":"Sin nombre","starting-blocked-server-error":"No se puede conectar con el servidor seleccionado porque se ha agregado a la lista de servidores bloqueados.","unexpedted-error":"Se produjo un error inesperado y no se pudo completar la operaci\xf3n.","remote-access-title":"Parece que est\xe1 accediendo al sistema de manera remota","remote-access-text":"Esta aplicaci\xf3n s\xf3lo permite administrar la protecci\xf3n VPN del dispositivo en el que fue instalada. Los cambios hechos con ella no afectar\xe1n a dispositivos remotos como el que parece estar usando. Tambi\xe9n es posible que los datos de IP que se muestren sean incorrectos.","server-change":{"busy-error":"El sistema est\xe1 ocupado. Por favor, espere.","backend-error":"No fue posible cambiar el servidor. Por favor, aseg\xfarese de que la clave p\xfablica sea correcta y de que la aplicaci\xf3n VPN se est\xe9 ejecutando.","already-selected-warning":"El servidor seleccionado ya est\xe1 siendo utilizando.","change-server-while-connected-confirmation":"La protecci\xf3n VPN se interrumpir\xe1 mientras se cambia el servidor y algunos datos pueden transmitirse sin protecci\xf3n durante el proceso. \xbfDesea continuar?","start-same-server-confirmation":"Ya hab\xeda seleccionado ese servidor. \xbfDesea conectarte a \xe9l?"},"error-page":{"text":"La aplicaci\xf3n de cliente VPN no est\xe1 disponible.","more-info":"No fue posible conectarse a la aplicaci\xf3n cliente VPN. Esto puede deberse a un error de configuraci\xf3n, un problema inesperado con el visor o porque utiliz\xf3 una clave p\xfablica no v\xe1lida en la URL.","text-pk":"Configuraci\xf3n inv\xe1lida.","more-info-pk":"La aplicaci\xf3n no puede ser iniciada porque no ha especificado la clave p\xfablica del visor.","text-storage":"Error al guardar los datos.","more-info-storage":"Ha habido un conflicto al intentar guardar los datos y la aplicaci\xf3n se ha cerrado para prevenir errores. Esto puede suceder si abre la aplicaci\xf3n en m\xe1s de una pesta\xf1a o ventana.","text-pk-change":"Operaci\xf3n inv\xe1lida.","more-info-pk-change":"Por favor, utilice esta aplicaci\xf3n para administrar s\xf3lo un cliente VPN."},"connection-info":{"state-title":"El estado de tu conexi\xf3n es actualmente:","state-connecting":"Conectando","state-connecting-info":"Se est\xe1 activando la protecci\xf3n VPN.","state-connected":"Conectado","state-connected-info":"La protecci\xf3n VPN est\xe1 activada.","state-disconnecting":"Desconectando","state-disconnecting-info":"Se est\xe1 desactivando la protecci\xf3n VPN.","state-reconnecting":"Reconectando","state-reconnecting-info":"Se est\xe1 restaurando la protecci\xf3n de VPN.","state-disconnected":"Desconectado","state-disconnected-info":"La protecci\xf3n VPN est\xe1 desactivada.","state-info":"Estado actual de la conexi\xf3n.","latency-info":"Latencia actual.","upload-info":"Velocidad de subida.","download-info":"Velocidad de descarga."},"connection-error":{"text":"Error de conexi\xf3n","info":"Problema conectando con la app vpn. Algunos datos mostrados podr\xedan estar desactualizados."},"status-page":{"start-title":"Iniciar VPN","no-server":"\xa1Ning\xfan servidor seleccionado!","disconnect":"Desconectar","last-error":"\xdaltimo error:","unknown-error":"Error desconocido.","disconnect-confirmation":"\xbfRealmente desea detener la protecci\xf3n VPN?","upload-info":"Estad\xedsticas de datos subidos.","download-info":"Estad\xedsticas de datos descargados.","latency-info":"Estad\xedsticas de latencia.","total-data-label":"total","problem-connecting-error":"No fue posible conectarse al servidor. El servidor puede no ser v\xe1lido o estar temporalmente inactivo.","problem-starting-error":"No fue posible iniciar la VPN. Por favor, aseg\xfarese de que la aplicaci\xf3n base de cliente VPN est\xe9 ejecutandose.","problem-stopping-error":"No fue posible detener la VPN. Por favor, aseg\xfarese de que la aplicaci\xf3n base de cliente VPN est\xe9 ejecutandose.","generic-problem-error":"No fue posible realizar la operaci\xf3n. Por favor, aseg\xfarese de que la aplicaci\xf3n base de cliente VPN est\xe9 ejecutandose.","select-server-warning":"Por favor, seleccione un servidor primero.","data":{"ip":"Direcci\xf3n IP:","ip-problem-info":"Hubo un problema al intentar obtener la IP. Por favor, verif\xedquela utilizando un servicio externo.","ip-country-problem-info":"Hubo un problema al intentar obtener el pa\xeds. Por favor, verif\xedquelo utilizando un servicio externo.","ip-refresh-info":"Refrescar","ip-refresh-time-warning":"Por favor, espere {{ seconds }} segundo(s) antes de refrescar los datos.","ip-refresh-loading-warning":"Por favor, espere a que finalice la operaci\xf3n anterior.","country":"Pa\xeds:","server":"Servidor:","server-note":"Nota del servidor:","original-server-note":"Nota original del servidor:","local-pk":"Llave p\xfablica del visor local:","remote-pk":"Llave p\xfablica del visor remoto:","unavailable":"No disponible"}},"server-options":{"tooltip":"Opciones","connect-without-password":"Conectarse sin contrase\xf1a","connect-without-password-confirmation":"La conexi\xf3n se realizar\xe1 sin la contrase\xf1a. \xbfSeguro que desea continuar?","connect-using-password":"Conectarse usando una contrase\xf1a","connect-using-another-password":"Conectarse usando otra contrase\xf1a","edit-name":"Nombre personalizado","edit-label":"Nota personalizada","make-favorite":"Hacer favorito","make-favorite-confirmation":"\xbfRealmente desea marcar este servidor como favorito? Se eliminar\xe1 de la lista de bloqueados.","make-favorite-done":"Agregado a la lista de favoritos.","remove-from-favorites":"Quitar de favoritos","remove-from-favorites-done":"Eliminado de la lista de favoritos.","block":"Bloquear servidor","block-done":"Agregado a la lista de bloqueados.","block-confirmation":"\xbfRealmente desea bloquear este servidor? Se eliminar\xe1 de la lista de favoritos.","block-selected-confirmation":"\xbfRealmente desea bloquear el servidor actualmente seleccionado? Se cerrar\xe1n todas las conexiones.","block-selected-favorite-confirmation":"\xbfRealmente desea bloquear el servidor actualmente seleccionado? Se cerrar\xe1n todas las conexiones y se eliminar\xe1 de la lista de favoritos.","unblock":"Desbloquear servidor","unblock-done":"Eliminado de la lista de bloqueados.","remove-from-history":"Quitar del historial","remove-from-history-confirmation":"\xbfRealmente desea quitar del historial el servidor?","remove-from-history-done":"Eliminado del historial.","edit-value":{"name-title":"Nombre Personalizado","note-title":"Nota Personalizada","name-label":"Nombre personalizado","note-label":"Nota personalizada","apply-button":"Aplicar","changes-made-confirmation":"Se ha realizado el cambio."}},"server-conditions":{"selected-info":"Este es el servidor actualmente seleccionado.","blocked-info":"Este servidor est\xe1 en la lista de bloqueados.","favorite-info":"Este servidor est\xe1 en la lista de favoritos.","history-info":"Este servidor est\xe1 en el historial de servidores.","has-password-info":"Se estableci\xf3 una contrase\xf1a para conectarse con este servidor."},"server-list":{"date-small-table-label":"Fecha","date-info":"\xdaltima vez en la que us\xf3 este servidor.","country-small-table-label":"Pa\xeds","country-info":"Pa\xeds donde se encuentra el servidor.","name-small-table-label":"Nombre","location-small-table-label":"Ubicaci\xf3n","public-key-small-table-label":"Lp","public-key-info":"Llave p\xfablica del servidor.","congestion-rating-small-table-label":"Calificaci\xf3n de congesti\xf3n","congestion-rating-info":"Calificaci\xf3n del servidor relacionada con lo congestionado que suele estar.","congestion-small-table-label":"Congesti\xf3n","congestion-info":"Congesti\xf3n actual del servidor.","latency-rating-small-table-label":"Calificaci\xf3n de latencia","latency-rating-info":"Calificaci\xf3n del servidor relacionada con la latencia que suele tener.","latency-small-table-label":"Latencia","latency-info":"Latencia actual del servidor.","hops-small-table-label":"Saltos","hops-info":"Cu\xe1ntos saltos se necesitan para conectarse con el servidor.","note-small-table-label":"Nota","note-info":"Nota acerca del servidor.","gold-rating-info":"Oro","silver-rating-info":"Plata","bronze-rating-info":"Bronce","notes-info":"Nota personalizada: {{ custom }} - Nota original: {{ original }}","empty-discovery":"Actualmente no hay servidores VPN para mostrar. Por favor, int\xe9ntelo de nuevo m\xe1s tarde.","empty-history":"No hay historial que mostrar.","empty-favorites":"No hay servidores favoritos para mostrar.","empty-blocked":"No hay servidores bloqueados para mostrar.","empty-with-filter":"Ning\xfan servidor VPN coincide con los criterios de filtrado seleccionados.","add-manually-info":"Agregar el servidor manualmente.","current-filters":"Filtros actuales (presione para eliminar)","none":"Ninguno","unknown":"Desconocido","tabs":{"public":"P\xfablicos","history":"Historial","favorites":"Favoritos","blocked":"Bloqueados"},"add-server-dialog":{"title":"Ingresar manualmente","pk-label":"Llave p\xfablica del servidor","password-label":"Contrase\xf1a del servidor (si tiene)","name-label":"Nombre del servidor (opcional)","note-label":"Nota personal (opcional)","pk-length-error":"La llave p\xfablica debe tener 66 caracteres.","pk-chars-error":"La llave p\xfablica s\xf3lo debe contener caracteres hexadecimales.","use-server-button":"Usar servidor"},"password-dialog":{"title":"Introducir Contrase\xf1a","password-if-any-label":"Contrase\xf1a del servidor (si tiene)","password-label":"Contrase\xf1a del servidor","continue-button":"Continuar"},"filter-dialog":{"country":"El pa\xeds debe ser","name":"El nombre debe contener","location":"La ubicaci\xf3n debe contener","public-key":"La llave p\xfablica debe contener","congestion-rating":"La calificaci\xf3n de congesti\xf3n debe ser","latency-rating":"La calificaci\xf3n de latencia debe ser","rating-options":{"any":"Cualquiera","gold":"Oro","silver":"Plata","bronze":"Bronce"},"country-options":{"any":"Cualquiera"}}},"settings-page":{"setting-small-table-label":"Ajuste","value-small-table-label":"Valor","killswitch":"Killswitch","killswitch-info":"Cuando est\xe1 activo, todas las conexiones de red se desactivar\xe1n si la aplicaci\xf3n se est\xe1 ejecutando pero la protecci\xf3n VPN es interrumpida (por errores temporales o cualquier otro problema). Esto evita fugas de datos.","get-ip":"Obtener informaci\xf3n de IP","get-ip-info":"Cuando est\xe1 activa, la aplicaci\xf3n utilizar\xe1 servicios externos para obtener informaci\xf3n sobre la IP actual.","data-units":"Unidades de datos","data-units-info":"Permite seleccionar las unidades que se utilizar\xe1n para mostrar las estad\xedsticas de transmisi\xf3n de datos.","minimum-hops":"Saltos m\xednimos","minimum-hops-info":"Permite configurar la cantidad m\xednima de saltos que la conexi\xf3n deber\xe1 realizar a trav\xe9s de otros visores de Skywire antes de alcanzar el destino final.","setting-on":"Encendido","setting-off":"Apagado","working-warning":"El sistema est\xe1 ocupado. Por favor, espere a que finalice la operaci\xf3n anterior.","change-while-connected-confirmation":"La protecci\xf3n VPN se interrumpir\xe1 mientras se realiza el cambio. \xbfDesea continuar?","data-units-modal":{"title":"Unidades de Datos","only-bits":"Bits para todas las estad\xedsticas","only-bytes":"Bytes para todas las estad\xedsticas","bits-speed-and-bytes-volume":"Bits para velocidad y bytes para volumen (predeterminado)"}}}}')}}]);
\ No newline at end of file
diff --git a/cmd/skywire-visor/static/3rdpartylicenses.txt b/cmd/skywire-visor/static/3rdpartylicenses.txt
index 20a1082aff..ee27fa3243 100644
--- a/cmd/skywire-visor/static/3rdpartylicenses.txt
+++ b/cmd/skywire-visor/static/3rdpartylicenses.txt
@@ -30,7 +30,7 @@ MIT
MIT
The MIT License
-Copyright (c) 2020 Google LLC.
+Copyright (c) 2021 Google LLC.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
@@ -64,7 +64,7 @@ MIT
MIT
The MIT License
-Copyright (c) 2020 Google LLC.
+Copyright (c) 2021 Google LLC.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
@@ -247,7 +247,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
core-js
MIT
-Copyright (c) 2014-2018 Denis Pushkarev
+Copyright (c) 2014-2021 Denis Pushkarev
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
@@ -268,30 +268,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
-css-loader
-MIT
-Copyright JS Foundation and other contributors
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-'Software'), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-
moment
MIT
Copyright (c) JS Foundation and other contributors
@@ -549,35 +525,11 @@ Apache-2.0
-webpack
-MIT
-Copyright JS Foundation and other contributors
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-'Software'), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-
zone.js
MIT
The MIT License
-Copyright (c) 2010-2020 Google LLC. http://angular.io/license
+Copyright (c) 2010-2020 Google LLC. https://angular.io/license
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/cmd/skywire-visor/static/431.2466f78395672178a3a2.js b/cmd/skywire-visor/static/431.2466f78395672178a3a2.js
new file mode 100644
index 0000000000..91a9ea864a
--- /dev/null
+++ b/cmd/skywire-visor/static/431.2466f78395672178a3a2.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkskywire_manager=self.webpackChunkskywire_manager||[]).push([[431],{3431:function(e){e.exports=JSON.parse('{"common":{"save":"Save","cancel":"Cancel","downloaded":"Downloaded","uploaded":"Uploaded","loading-error":"There was an error getting the data. Retrying...","operation-error":"There was an error trying to complete the operation.","no-connection-error":"There is no internet connection or connection to the Hypervisor.","error":"Error:","refreshed":"Data refreshed.","options":"Options","logout":"Logout","logout-error":"Error logging out.","logout-confirmation":"Are you sure you want to log out?","time-in-ms":"{{ time }}ms","ok":"Ok","unknown":"Unknown","close":"Close"},"labeled-element":{"edit-label":"Edit label","remove-label":"Remove label","copy":"Copy","remove-label-confirmation":"Do you really want to remove the label?","unnamed-element":"Unnamed","unnamed-local-visor":"Local visor","local-element":"Local","tooltip":"Click to copy the entry or change the label","tooltip-with-text":"{{ text }} (Click to copy the entry or change the label)"},"labels":{"title":"Labels","info":"Labels you have entered to easily identify visors, transports and other elements, instead of having to read machine generated identifiers.","list-title":"Label list","label":"Label","id":"Element ID","type":"Type","delete-confirmation":"Are you sure you want to delete the label?","delete-selected-confirmation":"Are you sure you want to delete the selected labels?","delete":"Delete label","deleted":"Delete operation completed.","empty":"There aren\'t any saved labels.","empty-with-filter":"No label matches the selected filtering criteria.","filter-dialog":{"label":"The label must contain","id":"The id must contain","type":"The type must be","type-options":{"any":"Any","visor":"Visor","dmsg-server":"DMSG server","transport":"Transport"}}},"filters":{"filter-action":"Filter","press-to-remove":"(Press to remove the filters)","remove-confirmation":"Are you sure you want to remove the filters?"},"tables":{"title":"Order by","sorting-title":"Ordered by:","sort-by-value":"Value","sort-by-label":"Label","label":"(label)","inverted-order":"(inverted)"},"start":{"title":"Start"},"node":{"title":"Visor details","not-found":"Visor not found.","statuses":{"online":"Online","online-tooltip":"Visor is online.","partially-online":"Online with problems","partially-online-tooltip":"Visor is online but not all services are working. For more information, open the details page and check the \\"Health info\\" section.","offline":"Offline","offline-tooltip":"Visor is offline."},"details":{"node-info":{"title":"Visor Info","label":"Label:","public-key":"Public key:","dmsg-server":"DMSG server:","ping":"Ping:","node-version":"Visor version:","time":{"title":"Time online:","seconds":"a few seconds","minute":"1 minute","minutes":"{{ time }} minutes","hour":"1 hour","hours":"{{ time }} hours","day":"1 day","days":"{{ time }} days","week":"1 week","weeks":"{{ time }} weeks"}},"node-health":{"title":"Health info","status":"Status:","transport-discovery":"Transport discovery:","route-finder":"Route finder:","setup-node":"Setup node:","uptime-tracker":"Uptime tracker:","address-resolver":"Address resolver:","element-offline":"Offline"},"node-traffic-data":"Traffic data"},"tabs":{"info":"Info","apps":"Apps","routing":"Routing"},"error-load":"An error occurred while refreshing the data. Retrying..."},"nodes":{"title":"Visor list","dmsg-title":"DMSG","update-all":"Update all visors","hypervisor":"Hypervisor","state":"State","state-tooltip":"Current state","label":"Label","key":"Key","dmsg-server":"DMSG server","ping":"Ping","hypervisor-info":"This visor is the current Hypervisor.","copy-key":"Copy key","copy-dmsg":"Copy DMSG server key","copy-data":"Copy data","view-node":"View visor","delete-node":"Remove visor","delete-all-offline":"Remove all offline visors","error-load":"An error occurred while refreshing the list. Retrying...","empty":"There aren\'t any visors connected to this hypervisor.","empty-with-filter":"No visor matches the selected filtering criteria.","delete-node-confirmation":"Are you sure you want to remove the visor from the list?","delete-all-offline-confirmation":"Are you sure you want to remove all offline visors from the list?","delete-all-filtered-offline-confirmation":"All offline visors satisfying the current filtering criteria will be removed from the list. Are you sure you want to continue?","deleted":"Visor removed.","deleted-singular":"1 offline visor removed.","deleted-plural":"{{ number }} offline visors removed.","no-visors-to-update":"There are no visors to update.","filter-dialog":{"online":"The visor must be","label":"The label must contain","key":"The public key must contain","dmsg":"The DMSG server key must contain","online-options":{"any":"Online or offline","online":"Online","offline":"Offline"}}},"edit-label":{"label":"Label","done":"Label saved.","label-removed-warning":"The label was removed."},"settings":{"title":"Settings","password":{"initial-config-help":"Use this option for setting the initial password. After a password has been set, it is not possible to use this option to modify it.","help":"Options for changing your password.","old-password":"Old password","new-password":"New password","repeat-password":"Repeat password","password-changed":"Password changed.","error-changing":"Error changing password.","initial-config":{"title":"Set initial password","password":"Password","repeat-password":"Repeat password","set-password":"Set password","done":"Password set. Please use it to access the system.","error":"Error. Please make sure you have not already set the password."},"errors":{"bad-old-password":"The provided old password is not correct.","old-password-required":"Old password is required.","new-password-error":"Password must be 6-64 characters long.","passwords-not-match":"Passwords do not match.","default-password":"Don\'t use the default password (1234)."}},"updater-config":{"open-link":"Show updater settings","open-confirmation":"The updater settings are for experienced users only. Are you sure you want to continue?","help":"Use this form for overriding the settings that will be used by the updater. All empty fields will be ignored. The settings will be used for all updating operations, no mater which element is being updated, so please be careful.","channel":"Channel","version":"Version","archive-url":"Archive URL","checksum-url":"Checksum URL","not-saved":"The changes have not been saved yet.","save":"Save changes","remove-settings":"Remove the settings","saved":"The custom settings have been saved.","removed":"The custom settings have been removed.","save-confirmation":"Are you sure you want to apply the custom settings?","remove-confirmation":"Are you sure you want to remove the custom settings?"},"change-password":"Change password","refresh-rate":"Refresh rate","refresh-rate-help":"Time the system waits to update the data automatically.","refresh-rate-confirmation":"Refresh rate changed.","seconds":"seconds"},"login":{"password":"Password","incorrect-password":"Incorrect password.","initial-config":"Configure initial launch"},"actions":{"menu":{"terminal":"Terminal","config":"Configuration","update":"Update","reboot":"Reboot"},"reboot":{"confirmation":"Are you sure you want to reboot the visor?","done":"The visor is restarting."},"terminal-options":{"full":"Full terminal","simple":"Simple terminal"},"terminal":{"title":"Terminal","input-start":"Skywire terminal for {{address}}","error":"Unexpected error while trying to execute the command."}},"update":{"title":"Update","error-title":"Error","processing":"Looking for updates...","no-update":"There is no update for the visor. The currently installed version is:","no-updates":"No new updates were found.","already-updating":"Some visors are already being updated:","update-available":"The following updates were found:","update-available-singular":"The following updates for 1 visor were found:","update-available-plural":"The following updates for {{ number }} visors were found:","update-available-additional-singular":"The following additional updates for 1 visor were found:","update-available-additional-plural":"The following additional updates for {{ number }} visors were found:","update-instructions":"Click the \'Install updates\' button to continue.","updating":"The update operation has been started, you can open this window again for checking the progress:","version-change":"From {{ currentVersion }} to {{ newVersion }}","selected-channel":"Selected channel:","downloaded-file-name-prefix":"Downloading: ","speed-prefix":"Speed: ","time-downloading-prefix":"Time downloading: ","time-left-prefix":"Aprox. time left: ","starting":"Preparing to update","finished":"Status connection finished","install":"Install updates"},"apps":{"log":{"title":"Log","empty":"There are no log messages for the selected time range.","filter-button":"Only showing logs generated since:","filter":{"title":"Filter","filter":"Only show logs generated since","7-days":"The last 7 days","1-month":"The last 30 days","3-months":"The last 3 months","6-months":"The last 6 months","1-year":"The last year","all":"Show all"}},"apps-list":{"title":"Applications","list-title":"Application list","app-name":"Name","port":"Port","state":"State","state-tooltip":"Current state","auto-start":"Auto start","empty":"Visor doesn\'t have any applications.","empty-with-filter":"No app matches the selected filtering criteria.","disable-autostart":"Disable autostart","enable-autostart":"Enable autostart","autostart-disabled":"Autostart disabled","autostart-enabled":"Autostart enabled","unavailable-logs-error":"Unable to show the logs while the app is not running.","filter-dialog":{"state":"The state must be","name":"The name must contain","port":"The port must contain","autostart":"The autostart must be","state-options":{"any":"Running or stopped","running":"Running","stopped":"Stopped"},"autostart-options":{"any":"Enabled or disabled","enabled":"Enabled","disabled":"Disabled"}}},"vpn-socks-server-settings":{"socks-title":"Skysocks Settings","vpn-title":"VPN-Server Settings","new-password":"New password (Leave empty to remove the password)","repeat-password":"Repeat password","passwords-not-match":"Passwords do not match.","secure-mode-check":"Use secure mode","secure-mode-info":"When active, the server doesn\'t allow client/server SSH and doesn\'t allow any traffic from VPN clients to the server local network.","save":"Save","remove-passowrd-confirmation":"You left the password field empty. Are you sure you want to remove the password?","change-passowrd-confirmation":"Are you sure you want to change the password?","changes-made":"The changes have been made."},"vpn-socks-client-settings":{"socks-title":"Skysocks-Client Settings","vpn-title":"VPN-Client Settings","discovery-tab":"Search","remote-visor-tab":"Enter manually","history-tab":"History","settings-tab":"Settings","use":"Use this data","change-note":"Change note","remove-entry":"Remove entry","note":"Note:","note-entered-manually":"Entered manually","note-obtained":"Obtained from the discovery service","key":"Key:","port":"Port:","location":"Location:","state-available":"Available","state-offline":"Offline","public-key":"Remote visor public key","password":"Password","password-history-warning":"Note: the password will not be saved in the history.","copy-pk-info":"Copy public key.","copied-pk-info":"The public key has been copied.","copy-pk-error":"There was a problem copying the public key.","no-elements":"Currently there are no elements to show. Please try again later.","no-elements-for-filters":"There are no elements that meet the filter criteria.","no-filter":"No filter has been selected","click-to-change":"Click to change","remote-key-length-error":"The public key must be 66 characters long.","remote-key-chars-error":"The public key must only contain hexadecimal characters.","save":"Save","remove-from-history-confirmation":"Are you sure you want to remove the entry from the history?","change-key-confirmation":"Are you sure you want to change the remote visor public key?","changes-made":"The changes have been made.","no-history":"This tab will show the last {{ number }} public keys used.","default-note-warning":"The default note has been used.","pagination-info":"{{ currentElementsRange }} of {{ totalElements }}","killswitch-check":"Activate killswitch","killswitch-info":"When active, all network connections will be disabled if the app is running but the VPN protection is interrupted (for temporary errors or any other problem).","settings-changed-alert":" The changes have not been saved yet.","save-settings":"Save settings","change-note-dialog":{"title":"Change Note","note":"Note"},"password-dialog":{"title":"Enter Password","password":"Password","info":"You are being asked for a password because a password was set when the selected entry was created, but the it was not saved for security reasons. You can leave the password empty if needed.","continue-button":"Continue"},"filter-dialog":{"title":"Filters","country":"The country must be","any-country":"Any","location":"The location must contain","pub-key":"The public key must contain","apply":"Apply"}},"stop-app":"Stop","start-app":"Start","view-logs":"View logs","settings":"Settings","error":"An error has occured and it was not possible to perform the operation.","stop-confirmation":"Are you sure you want to stop the app?","stop-selected-confirmation":"Are you sure you want to stop the selected apps?","disable-autostart-confirmation":"Are you sure you want to disable autostart for the app?","enable-autostart-confirmation":"Are you sure you want to enable autostart for the app?","disable-autostart-selected-confirmation":"Are you sure you want to disable autostart for the selected apps?","enable-autostart-selected-confirmation":"Are you sure you want to enable autostart for the selected apps?","operation-completed":"Operation completed.","operation-unnecessary":"The selection already has the requested setting.","status-running":"Running","status-stopped":"Stopped","status-failed":"Failed","status-running-tooltip":"App is currently running","status-stopped-tooltip":"App is currently stopped","status-failed-tooltip":"Something went wrong. Check the app\'s messages for more information"},"transports":{"title":"Transports","remove-all-offline":"Remove all offline transports","remove-all-offline-confirmation":"Are you sure you want to remove all offline transports?","remove-all-filtered-offline-confirmation":"All offline transports satisfying the current filtering criteria will be removed. Are you sure you want to continue?","info":"Connections you have with remote Skywire visors, to allow local Skywire apps to communicate with apps running on those remote visors.","list-title":"Transport list","state":"State","state-tooltip":"Current state","id":"ID","remote-node":"Remote","type":"Type","create":"Create transport","delete-confirmation":"Are you sure you want to delete the transport?","delete-selected-confirmation":"Are you sure you want to delete the selected transports?","delete":"Delete transport","deleted":"Delete operation completed.","empty":"Visor doesn\'t have any transports.","empty-with-filter":"No transport matches the selected filtering criteria.","statuses":{"online":"Online","online-tooltip":"Transport is online","offline":"Offline","offline-tooltip":"Transport is offline"},"details":{"title":"Details","basic":{"title":"Basic info","state":"State:","id":"ID:","local-pk":"Local public key:","remote-pk":"Remote public key:","type":"Type:"},"data":{"title":"Data transmission","uploaded":"Uploaded data:","downloaded":"Downloaded data:"}},"dialog":{"remote-key":"Remote public key","label":"Identification name (optional)","transport-type":"Transport type","success":"Transport created.","success-without-label":"The transport was created, but it was not possible to save the label.","errors":{"remote-key-length-error":"The remote public key must be 66 characters long.","remote-key-chars-error":"The remote public key must only contain hexadecimal characters.","transport-type-error":"The transport type is required."}},"filter-dialog":{"online":"The transport must be","id":"The id must contain","remote-node":"The remote key must contain","online-options":{"any":"Online or offline","online":"Online","offline":"Offline"}}},"routes":{"title":"Routes","info":"Paths used to reach the remote visors to which transports have been established. Routes are automatically generated as needed.","list-title":"Route list","key":"Key","type":"Type","source":"Source","destination":"Destination","delete-confirmation":"Are you sure you want to delete the route?","delete-selected-confirmation":"Are you sure you want to delete the selected routes?","delete":"Delete route","deleted":"Delete operation completed.","empty":"Visor doesn\'t have any routes.","empty-with-filter":"No route matches the selected filtering criteria.","details":{"title":"Details","basic":{"title":"Basic info","key":"Key:","rule":"Rule:"},"summary":{"title":"Rule summary","keep-alive":"Keep alive:","type":"Rule type:","key-route-id":"Key route ID:"},"specific-fields-titles":{"app":"App fields","forward":"Forward fields","intermediary-forward":"Intermediary forward fields"},"specific-fields":{"route-id":"Next route ID:","transport-id":"Next transport ID:","destination-pk":"Destination public key:","source-pk":"Source public key:","destination-port":"Destination port:","source-port":"Source port:"}},"filter-dialog":{"key":"The key must contain","type":"The type must be","source":"The source must contain","destination":"The destination must contain","any-type-option":"Any"}},"copy":{"tooltip":"Click to copy","tooltip-with-text":"{{ text }} (Click to copy)","copied":"Copied!"},"selection":{"select-all":"Select all","unselect-all":"Unselect all","delete-all":"Delete all selected elements","start-all":"Start all selected apps","stop-all":"Stop all selected apps","enable-autostart-all":"Enable autostart for all selected apps","disable-autostart-all":"Disable autostart for all selected apps"},"refresh-button":{"seconds":"Updated a few seconds ago","minute":"Updated 1 minute ago","minutes":"Updated {{ time }} minutes ago","hour":"Updated 1 hour ago","hours":"Updated {{ time }} hours ago","day":"Updated 1 day ago","days":"Updated {{ time }} days ago","week":"Updated 1 week ago","weeks":"Updated {{ time }} weeks ago","error-tooltip":"There was an error updating the data. Retrying automatically every {{ time }} seconds..."},"view-all-link":{"label":"View all {{ number }} elements"},"paginator":{"first":"First","last":"Last","total":"Total: {{ number }} pages","select-page-title":"Select page"},"confirmation":{"header-text":"Confirmation","confirm-button":"Yes","cancel-button":"No","close":"Close","error-header-text":"Error","done-header-text":"Done"},"language":{"title":"Select language"},"tabs-window":{"title":"Change tab"}}')}}]);
\ No newline at end of file
diff --git a/cmd/skywire-visor/static/48.686120e8d57d3c0c7516.js b/cmd/skywire-visor/static/48.686120e8d57d3c0c7516.js
new file mode 100644
index 0000000000..fb229dbeb5
--- /dev/null
+++ b/cmd/skywire-visor/static/48.686120e8d57d3c0c7516.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkskywire_manager=self.webpackChunkskywire_manager||[]).push([[48],{77048:function(e){e.exports=JSON.parse('{"common":{"save":"Save","cancel":"Cancel","downloaded":"Downloaded","uploaded":"Uploaded","loading-error":"There was an error getting the data. Retrying...","operation-error":"There was an error trying to complete the operation.","no-connection-error":"There is no internet connection or connection to the Hypervisor.","error":"Error:","refreshed":"Data refreshed.","options":"Options","logout":"Logout","logout-error":"Error logging out.","logout-confirmation":"Are you sure you want to log out?","time-in-ms":"{{ time }}ms","ok":"Ok","unknown":"Unknown","close":"Close"},"labeled-element":{"edit-label":"Edit label","remove-label":"Remove label","copy":"Copy","remove-label-confirmation":"Do you really want to remove the label?","unnamed-element":"Unnamed","unnamed-local-visor":"Local visor","local-element":"Local","tooltip":"Click to copy the entry or change the label","tooltip-with-text":"{{ text }} (Click to copy the entry or change the label)"},"labels":{"title":"Labels","info":"Labels you have entered to easily identify visors, transports and other elements, instead of having to read machine generated identifiers.","list-title":"Label list","label":"Label","id":"Element ID","type":"Type","delete-confirmation":"Are you sure you want to delete the label?","delete-selected-confirmation":"Are you sure you want to delete the selected labels?","delete":"Delete label","deleted":"Delete operation completed.","empty":"There aren\'t any saved labels.","empty-with-filter":"No label matches the selected filtering criteria.","filter-dialog":{"label":"The label must contain","id":"The id must contain","type":"The type must be","type-options":{"any":"Any","visor":"Visor","dmsg-server":"DMSG server","transport":"Transport"}}},"filters":{"filter-action":"Filter","press-to-remove":"(Press to remove the filters)","remove-confirmation":"Are you sure you want to remove the filters?"},"tables":{"title":"Order by","sorting-title":"Ordered by:","sort-by-value":"Value","sort-by-label":"Label","label":"(label)","inverted-order":"(inverted)"},"start":{"title":"Start"},"node":{"title":"Visor details","not-found":"Visor not found.","statuses":{"online":"Online","online-tooltip":"Visor is online.","partially-online":"Online with problems","partially-online-tooltip":"Visor is online but not all services are working. For more information, open the details page and check the \\"Health info\\" section.","offline":"Offline","offline-tooltip":"Visor is offline."},"details":{"node-info":{"title":"Visor Info","label":"Label:","public-key":"Public key:","port":"Port:","dmsg-server":"DMSG server:","ping":"Ping:","node-version":"Visor version:","time":{"title":"Time online:","seconds":"a few seconds","minute":"1 minute","minutes":"{{ time }} minutes","hour":"1 hour","hours":"{{ time }} hours","day":"1 day","days":"{{ time }} days","week":"1 week","weeks":"{{ time }} weeks"}},"node-health":{"title":"Health info","status":"Status:","transport-discovery":"Transport discovery:","route-finder":"Route finder:","setup-node":"Setup node:","uptime-tracker":"Uptime tracker:","address-resolver":"Address resolver:","element-offline":"Offline"},"node-traffic-data":"Traffic data"},"tabs":{"info":"Info","apps":"Apps","routing":"Routing"},"error-load":"An error occurred while refreshing the data. Retrying..."},"nodes":{"title":"Visor list","dmsg-title":"DMSG","update-all":"Update all visors","hypervisor":"Hypervisor","state":"State","state-tooltip":"Current state","label":"Label","key":"Key","dmsg-server":"DMSG server","ping":"Ping","hypervisor-info":"This visor is the current Hypervisor.","copy-key":"Copy key","copy-dmsg":"Copy DMSG server key","copy-data":"Copy data","view-node":"View visor","delete-node":"Remove visor","delete-all-offline":"Remove all offline visors","error-load":"An error occurred while refreshing the list. Retrying...","empty":"There aren\'t any visors connected to this hypervisor.","empty-with-filter":"No visor matches the selected filtering criteria.","delete-node-confirmation":"Are you sure you want to remove the visor from the list?","delete-all-offline-confirmation":"Are you sure you want to remove all offline visors from the list?","delete-all-filtered-offline-confirmation":"All offline visors satisfying the current filtering criteria will be removed from the list. Are you sure you want to continue?","deleted":"Visor removed.","deleted-singular":"1 offline visor removed.","deleted-plural":"{{ number }} offline visors removed.","no-visors-to-update":"There are no visors to update.","filter-dialog":{"online":"The visor must be","label":"The label must contain","key":"The public key must contain","dmsg":"The DMSG server key must contain","online-options":{"any":"Online or offline","online":"Online","offline":"Offline"}}},"edit-label":{"label":"Label","done":"Label saved.","label-removed-warning":"The label was removed."},"settings":{"title":"Settings","password":{"initial-config-help":"Use this option for setting the initial password. After a password has been set, it is not possible to use this option to modify it.","help":"Options for changing your password.","old-password":"Old password","new-password":"New password","repeat-password":"Repeat password","password-changed":"Password changed.","error-changing":"Error changing password.","initial-config":{"title":"Set initial password","password":"Password","repeat-password":"Repeat password","set-password":"Set password","done":"Password set. Please use it to access the system.","error":"Error. Please make sure you have not already set the password."},"errors":{"bad-old-password":"The provided old password is not correct.","old-password-required":"Old password is required.","new-password-error":"Password must be 6-64 characters long.","passwords-not-match":"Passwords do not match.","default-password":"Don\'t use the default password (1234)."}},"updater-config":{"open-link":"Show updater settings","open-confirmation":"The updater settings are for experienced users only. Are you sure you want to continue?","help":"Use this form for overriding the settings that will be used by the updater. All empty fields will be ignored. The settings will be used for all updating operations, no mater which element is being updated, so please be careful.","channel":"Channel","version":"Version","archive-url":"Archive URL","checksum-url":"Checksum URL","not-saved":"The changes have not been saved yet.","save":"Save changes","remove-settings":"Remove the settings","saved":"The custom settings have been saved.","removed":"The custom settings have been removed.","save-confirmation":"Are you sure you want to apply the custom settings?","remove-confirmation":"Are you sure you want to remove the custom settings?"},"change-password":"Change password","refresh-rate":"Refresh rate","refresh-rate-help":"Time the system waits to update the data automatically.","refresh-rate-confirmation":"Refresh rate changed.","seconds":"seconds"},"login":{"password":"Password","incorrect-password":"Incorrect password.","initial-config":"Configure initial launch"},"actions":{"menu":{"terminal":"Terminal","config":"Configuration","update":"Update","reboot":"Reboot"},"reboot":{"confirmation":"Are you sure you want to reboot the visor?","done":"The visor is restarting."},"terminal-options":{"full":"Full terminal","simple":"Simple terminal"},"terminal":{"title":"Terminal","input-start":"Skywire terminal for {{address}}","error":"Unexpected error while trying to execute the command."}},"update":{"title":"Update","error-title":"Error","processing":"Looking for updates...","no-update":"There is no update for the visor. The currently installed version is:","no-updates":"No new updates were found.","already-updating":"Some visors are already being updated:","update-available":"The following updates were found:","update-available-singular":"The following updates for 1 visor were found:","update-available-plural":"The following updates for {{ number }} visors were found:","update-available-additional-singular":"The following additional updates for 1 visor were found:","update-available-additional-plural":"The following additional updates for {{ number }} visors were found:","update-instructions":"Click the \'Install updates\' button to continue.","updating":"The update operation has been started, you can open this window again for checking the progress:","version-change":"From {{ currentVersion }} to {{ newVersion }}","selected-channel":"Selected channel:","downloaded-file-name-prefix":"Downloading: ","speed-prefix":"Speed: ","time-downloading-prefix":"Time downloading: ","time-left-prefix":"Aprox. time left: ","starting":"Preparing to update","finished":"Status connection finished","install":"Install updates"},"apps":{"log":{"title":"Log","empty":"There are no log messages for the selected time range.","filter-button":"Only showing logs generated since:","filter":{"title":"Filter","filter":"Only show logs generated since","7-days":"The last 7 days","1-month":"The last 30 days","3-months":"The last 3 months","6-months":"The last 6 months","1-year":"The last year","all":"Show all"}},"apps-list":{"title":"Applications","list-title":"Application list","app-name":"Name","port":"Port","state":"State","state-tooltip":"Current state","auto-start":"Auto start","empty":"Visor doesn\'t have any applications.","empty-with-filter":"No app matches the selected filtering criteria.","disable-autostart":"Disable autostart","enable-autostart":"Enable autostart","autostart-disabled":"Autostart disabled","autostart-enabled":"Autostart enabled","unavailable-logs-error":"Unable to show the logs while the app is not running.","filter-dialog":{"state":"The state must be","name":"The name must contain","port":"The port must contain","autostart":"The autostart must be","state-options":{"any":"Running or stopped","running":"Running","stopped":"Stopped"},"autostart-options":{"any":"Enabled or disabled","enabled":"Enabled","disabled":"Disabled"}}},"vpn-socks-server-settings":{"socks-title":"Skysocks Settings","vpn-title":"VPN-Server Settings","new-password":"New password (Leave empty to remove the password)","repeat-password":"Repeat password","passwords-not-match":"Passwords do not match.","secure-mode-check":"Use secure mode","secure-mode-info":"When active, the server doesn\'t allow client/server SSH and doesn\'t allow any traffic from VPN clients to the server local network.","save":"Save","remove-passowrd-confirmation":"You left the password field empty. Are you sure you want to remove the password?","change-passowrd-confirmation":"Are you sure you want to change the password?","changes-made":"The changes have been made."},"vpn-socks-client-settings":{"socks-title":"Skysocks-Client Settings","vpn-title":"VPN-Client Settings","discovery-tab":"Search","remote-visor-tab":"Enter manually","history-tab":"History","settings-tab":"Settings","use":"Use this data","change-note":"Change note","remove-entry":"Remove entry","note":"Note:","note-entered-manually":"Entered manually","note-obtained":"Obtained from the discovery service","key":"Key:","port":"Port:","location":"Location:","state-available":"Available","state-offline":"Offline","public-key":"Remote visor public key","password":"Password","password-history-warning":"Note: the password will not be saved in the history.","copy-pk-info":"Copy public key.","copied-pk-info":"The public key has been copied.","copy-pk-error":"There was a problem copying the public key.","no-elements":"Currently there are no elements to show. Please try again later.","no-elements-for-filters":"There are no elements that meet the filter criteria.","no-filter":"No filter has been selected","click-to-change":"Click to change","remote-key-length-error":"The public key must be 66 characters long.","remote-key-chars-error":"The public key must only contain hexadecimal characters.","save":"Save","remove-from-history-confirmation":"Are you sure you want to remove the entry from the history?","change-key-confirmation":"Are you sure you want to change the remote visor public key?","changes-made":"The changes have been made.","no-history":"This tab will show the last {{ number }} public keys used.","default-note-warning":"The default note has been used.","pagination-info":"{{ currentElementsRange }} of {{ totalElements }}","killswitch-check":"Activate killswitch","killswitch-info":"When active, all network connections will be disabled if the app is running but the VPN protection is interrupted (for temporary errors or any other problem).","settings-changed-alert":" The changes have not been saved yet.","save-settings":"Save settings","change-note-dialog":{"title":"Change Note","note":"Note"},"password-dialog":{"title":"Enter Password","password":"Password","info":"You are being asked for a password because a password was set when the selected entry was created, but the it was not saved for security reasons. You can leave the password empty if needed.","continue-button":"Continue"},"filter-dialog":{"title":"Filters","country":"The country must be","any-country":"Any","location":"The location must contain","pub-key":"The public key must contain","apply":"Apply"}},"stop-app":"Stop","start-app":"Start","view-logs":"View logs","settings":"Settings","error":"An error has occured and it was not possible to perform the operation.","stop-confirmation":"Are you sure you want to stop the app?","stop-selected-confirmation":"Are you sure you want to stop the selected apps?","disable-autostart-confirmation":"Are you sure you want to disable autostart for the app?","enable-autostart-confirmation":"Are you sure you want to enable autostart for the app?","disable-autostart-selected-confirmation":"Are you sure you want to disable autostart for the selected apps?","enable-autostart-selected-confirmation":"Are you sure you want to enable autostart for the selected apps?","operation-completed":"Operation completed.","operation-unnecessary":"The selection already has the requested setting.","status-running":"Running","status-stopped":"Stopped","status-failed":"Failed","status-running-tooltip":"App is currently running","status-stopped-tooltip":"App is currently stopped","status-failed-tooltip":"Something went wrong. Check the app\'s messages for more information"},"transports":{"title":"Transports","remove-all-offline":"Remove all offline transports","remove-all-offline-confirmation":"Are you sure you want to remove all offline transports?","remove-all-filtered-offline-confirmation":"All offline transports satisfying the current filtering criteria will be removed. Are you sure you want to continue?","info":"Connections you have with remote Skywire visors, to allow local Skywire apps to communicate with apps running on those remote visors.","list-title":"Transport list","state":"State","state-tooltip":"Current state","id":"ID","remote-node":"Remote","type":"Type","create":"Create transport","delete-confirmation":"Are you sure you want to delete the transport?","delete-selected-confirmation":"Are you sure you want to delete the selected transports?","delete":"Delete transport","deleted":"Delete operation completed.","empty":"Visor doesn\'t have any transports.","empty-with-filter":"No transport matches the selected filtering criteria.","statuses":{"online":"Online","online-tooltip":"Transport is online","offline":"Offline","offline-tooltip":"Transport is offline"},"details":{"title":"Details","basic":{"title":"Basic info","state":"State:","id":"ID:","local-pk":"Local public key:","remote-pk":"Remote public key:","type":"Type:"},"data":{"title":"Data transmission","uploaded":"Uploaded data:","downloaded":"Downloaded data:"}},"dialog":{"remote-key":"Remote public key","label":"Identification name (optional)","transport-type":"Transport type","success":"Transport created.","success-without-label":"The transport was created, but it was not possible to save the label.","errors":{"remote-key-length-error":"The remote public key must be 66 characters long.","remote-key-chars-error":"The remote public key must only contain hexadecimal characters.","transport-type-error":"The transport type is required."}},"filter-dialog":{"online":"The transport must be","id":"The id must contain","remote-node":"The remote key must contain","online-options":{"any":"Online or offline","online":"Online","offline":"Offline"}}},"routes":{"title":"Routes","info":"Paths used to reach the remote visors to which transports have been established. Routes are automatically generated as needed.","list-title":"Route list","key":"Key","type":"Type","source":"Source","destination":"Destination","delete-confirmation":"Are you sure you want to delete the route?","delete-selected-confirmation":"Are you sure you want to delete the selected routes?","delete":"Delete route","deleted":"Delete operation completed.","empty":"Visor doesn\'t have any routes.","empty-with-filter":"No route matches the selected filtering criteria.","details":{"title":"Details","basic":{"title":"Basic info","key":"Key:","rule":"Rule:"},"summary":{"title":"Rule summary","keep-alive":"Keep alive:","type":"Rule type:","key-route-id":"Key route ID:"},"specific-fields-titles":{"app":"App fields","forward":"Forward fields","intermediary-forward":"Intermediary forward fields"},"specific-fields":{"route-id":"Next route ID:","transport-id":"Next transport ID:","destination-pk":"Destination public key:","source-pk":"Source public key:","destination-port":"Destination port:","source-port":"Source port:"}},"filter-dialog":{"key":"The key must contain","type":"The type must be","source":"The source must contain","destination":"The destination must contain","any-type-option":"Any"}},"copy":{"tooltip":"Click to copy","tooltip-with-text":"{{ text }} (Click to copy)","copied":"Copied!"},"selection":{"select-all":"Select all","unselect-all":"Unselect all","delete-all":"Delete all selected elements","start-all":"Start all selected apps","stop-all":"Stop all selected apps","enable-autostart-all":"Enable autostart for all selected apps","disable-autostart-all":"Disable autostart for all selected apps"},"refresh-button":{"seconds":"Updated a few seconds ago","minute":"Updated 1 minute ago","minutes":"Updated {{ time }} minutes ago","hour":"Updated 1 hour ago","hours":"Updated {{ time }} hours ago","day":"Updated 1 day ago","days":"Updated {{ time }} days ago","week":"Updated 1 week ago","weeks":"Updated {{ time }} weeks ago","error-tooltip":"There was an error updating the data. Retrying automatically every {{ time }} seconds..."},"view-all-link":{"label":"View all {{ number }} elements"},"paginator":{"first":"First","last":"Last","total":"Total: {{ number }} pages","select-page-title":"Select page"},"confirmation":{"header-text":"Confirmation","confirm-button":"Yes","cancel-button":"No","close":"Close","error-header-text":"Error","done-header-text":"Done"},"language":{"title":"Select language"},"tabs-window":{"title":"Change tab"}}')}}]);
\ No newline at end of file
diff --git a/cmd/skywire-visor/static/5.265280f3d0f4895d526f.js b/cmd/skywire-visor/static/5.265280f3d0f4895d526f.js
deleted file mode 100644
index fbae82c868..0000000000
--- a/cmd/skywire-visor/static/5.265280f3d0f4895d526f.js
+++ /dev/null
@@ -1 +0,0 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[5],{"K+GZ":function(e){e.exports=JSON.parse('{"common":{"save":"Speichern","cancel":"Abbrechen","downloaded":"Heruntergeladen","uploaded":"Hochgeladen","loading-error":"Beim Laden der Daten ist ein Fehler aufgetreten. Versuche es erneut...","operation-error":"Beim Ausf\xfchren der Aktion ist ein Fehler aufgetreten.","no-connection-error":"Es ist keine Internetverbindung oder Verbindung zum Hypervisor vorhanden.","error":"Fehler:","refreshed":"Daten aktualisiert.","options":"Optionen","logout":"Abmelden","logout-error":"Fehler beim Abmelden.","logout-confirmation":"Wirklich abmelden?","time-in-ms":"{{ time }}ms","ok":"Ok","unknown":"Unbekannt","close":"Schlie\xdfen"},"labeled-element":{"edit-label":"Bezeichnung \xe4ndern","remove-label":"Bezeichnung l\xf6schen","copy":"Kopieren","remove-label-confirmation":"Bezeichnung wirklich l\xf6schen?","unnamed-element":"Unbenannt","unnamed-local-visor":"Lokaler Visor","local-element":"Lokal","tooltip":"Klicken um Eintrag zu kopieren oder Bezeichnung zu \xe4ndern","tooltip-with-text":"{{ text }} (Klicken um Eintrag zu kopieren oder Bezeichnung zu \xe4ndern)"},"labels":{"title":"Bezeichnung","info":"Bezeichnungen, die eingegeben wurden um Visor, Transporte und andere Elemente einfach wiederzuerkennen.","list-title":"Bezeichnunen Liste","label":"Bezeichnung","id":"Element ID","type":"Typ","delete-confirmation":"Diese Bezeichnung wirklich l\xf6schen?","delete-selected-confirmation":"Ausgew\xe4hlte Bezeichnungen wirklich l\xf6schen?","delete":"Bezeichnung l\xf6schen","deleted":"Bezeichnung gel\xf6scht.","empty":"Keine gespeicherten Bezeichnungen vorhanden.","empty-with-filter":"Keine Bezeichnung erf\xfcllt die gew\xe4hlten Filterkriterien.","filter-dialog":{"label":"Die Bezeichnung muss beinhalten","id":"Die ID muss beinhalten","type":"Der Typ muss sein","type-options":{"any":"Jeder","visor":"Visor","dmsg-server":"DMSG Server","transport":"Transport"}}},"filters":{"filter-action":"Filter","press-to-remove":"(Dr\xfccken um Filter zu l\xf6schen)","remove-confirmation":"Filter wirkliche l\xf6schen?"},"tables":{"title":"Ordnen nach","sorting-title":"Geordnet nach:","sort-by-value":"Wert","sort-by-label":"Bezeichnung","label":"(Bezeichnung)","inverted-order":"(Umgekehrt)"},"start":{"title":"Start"},"node":{"title":"Visor Details","not-found":"Visor nicht gefunden.","statuses":{"online":"Online","online-tooltip":"Visor ist online","partially-online":"Online mit Problemen","partially-online-tooltip":"Visor ist online, aber nicht alle Dienste laufen. F\xfcr Informationen bitte die Details Seite \xf6ffnen und die \\"Zustand Info\\" \xfcberpr\xfcfen.","offline":"Offline","offline-tooltip":"Visor ist offline"},"details":{"node-info":{"title":"Visor Info","label":"Bezeichnung:","public-key":"\xd6ffentlicher Schl\xfcssel:","dmsg-server":"DMSG Server:","ping":"Ping:","node-version":"Visor Version:","time":{"title":"Online seit:","seconds":"ein paar Sekunden","minute":"1 Minute","minutes":"{{ time }} Minuten","hour":"1 Stunde","hours":"{{ time }} Stunden","day":"1 Tag","days":"{{ time }} Tage","week":"1 Woche","weeks":"{{ time }} Wochen"}},"node-health":{"title":"Zustand Info","status":"Status:","transport-discovery":"Transport Entdeckung:","route-finder":"Route Finder:","setup-node":"Setup Visor:","uptime-tracker":"Verf\xfcgbarkeitsmonitor:","address-resolver":"Addressaufl\xf6ser:","element-offline":"offline"},"node-traffic-data":"Datenverkehr"},"tabs":{"info":"Info","apps":"Anwendungen","routing":"Routing"},"error-load":"Beim Aktualisieren der Visordaten ist ein Fehler aufgetreten."},"nodes":{"title":"Visor Liste","dmsg-title":"DMSG","update-all":"Alle Visor aktualisieren","hypervisor":"Hypervisor","state":"Status","state-tooltip":"Aktueller Status","label":"Bezeichnung","key":"Schl\xfcssel","dmsg-server":"DMSG Server","ping":"Ping","hypervisor-info":"Dieser Visor ist der aktuelle Hypervisor.","copy-key":"Schl\xfcssel kopieren","copy-dmsg":"DMSG Server Schl\xfcssel kopieren","copy-data":"Daten kopieren","view-node":"Visor betrachten","delete-node":"Visor l\xf6schen","delete-all-offline":"Alle offline Visor l\xf6schen","error-load":"Beim Aktualisieren der Visor-Liste ist ein Fehler aufgetreten.","empty":"Es ist kein Visor zu diesem Hypervisor verbunden.","empty-with-filter":"Kein Visor erf\xfcllt die gew\xe4hlten Filterkriterien","delete-node-confirmation":"Visor wirklich von der Liste l\xf6schen?","delete-all-offline-confirmation":"Wirklich alle offline Visor von der Liste l\xf6schen?","delete-all-filtered-offline-confirmation":"Alle offline Visor, welche die Filterkriterien erf\xfcllen werden von der Liste gel\xf6scht. Wirklich fortfahren?","deleted":"Visor gel\xf6scht.","deleted-singular":"Ein offline Visor gel\xf6scht.","deleted-plural":"{{ number }} offline Visor gel\xf6scht.","no-visors-to-update":"Kein Visor zum Aktualiseren vorhanden.","filter-dialog":{"online":"Der Visor muss","label":"Der Bezeichner muss enthalten","key":"Der \xf6ffentliche Schl\xfcssel muss enthalten","dmsg":"Der DMSG Server Schl\xfcssel muss enthalten","online-options":{"any":"Online oder offline","online":"Online","offline":"Offline"}}},"edit-label":{"label":"Bezeichnung","done":"Bezeichnung gespeichert.","label-removed-warning":"Die Bezeichnung wurde gel\xf6scht."},"settings":{"title":"Einstellungen","password":{"initial-config-help":"Diese Option wird verwendet, um das erste Passwort festzulegen. Nachdem ein Passwort festgelegt wurde, ist es nicht m\xf6glich dieses, mit dieser Option zu \xe4ndern.","help":"Optionen um das Passwort zu \xe4ndern.","old-password":"Altes Passwort","new-password":"Neues Passwort","repeat-password":"Neues Passwort wiederholen","password-changed":"Passwort wurde ge\xe4ndert.","error-changing":"Fehler beim \xc4ndern des Passworts aufgetreten.","initial-config":{"title":"Erstes Passwort festlegen","password":"Passwort","repeat-password":"Passwort wiederholen","set-password":"Passwort \xe4ndern","done":"Passwort wurde ge\xe4ndert.","error":"Fehler. Es scheint ein erstes Passwort wurde schon gew\xe4hlt."},"errors":{"bad-old-password":"Altes Passwort falsch","old-password-required":"Altes Passwort wird ben\xf6tigt","new-password-error":"Passwort muss 6-64 Zeichen lang sein.","passwords-not-match":"Passw\xf6rter stimmen nicht \xfcberein.","default-password":"Das Standardpasswort darf nicht verwendet werden (1234)."}},"updater-config":{"open-link":"Aktualisierungseinstellungen anzeigen","open-confirmation":"Es wird nur erfahrenen Benutzern empfohlen, die Aktualisierungseinstellungen zu modifizieren. Wirkich fortfahren?","help":"Dieses Formular benutzen um Einstellungen f\xfcr die Aktualisierung zu \xfcberschreiben. Alle leeren Felder werden ignoriert. Die Einstellungen werden f\xfcr alle Aktualisierungen \xfcbernommen. Dies geschieht unabh\xe4ngig davon, welches Element aktualisiert wird. Bitte Vorsicht wahren.","channel":"Kanal","version":"Version","archive-url":"Archiv-URL","checksum-url":"Pr\xfcfsummen-URL","not-saved":"Die \xc4nderungen wurden noch nicht gespeichert.","save":"\xc4nderungen speichern","remove-settings":"Einstellungen l\xf6schen","saved":"Die benutzerdefinierten Einstellungen wurden gespeichert.","removed":"Die benutzerdefinierten Einstellungen wurden gel\xf6scht.","save-confirmation":"Wirklich die benutzerdefinierten Einstellungen anwenden?","remove-confirmation":"Wirklich die benutzerdefinierten Einstellungen l\xf6schen?"},"change-password":"Passwort \xe4ndern","refresh-rate":"Aktualisierungsintervall","refresh-rate-help":"Zeit, bis das System die Daten automatisch aktualisiert.","refresh-rate-confirmation":"Aktualisierungsintervall ge\xe4ndert.","seconds":"Sekunden"},"login":{"password":"Passwort","incorrect-password":"Falsches Passwort.","initial-config":"Erste Konfiguration"},"actions":{"menu":{"terminal":"Terminal","config":"Konfiguration","update":"Aktualisieren","reboot":"Neustart"},"reboot":{"confirmation":"Den Visor wirklich neustarten?","done":"Der Visor wird neu gestartet."},"terminal-options":{"full":"Terminal","simple":"Einfaches Terminal"},"terminal":{"title":"Terminal","input-start":"Skywire Terminal f\xfcr {{address}}","error":"Bei der Ausf\xfchrung des Befehls ist ein Fehler aufgetreten."}},"update":{"title":"Aktualisierung","error-title":"Error","processing":"Suche nach Aktualisierungen...","no-update":"Keine Aktualisierung vorhanden.
Installierte Version:","no-updates":"Keine neuen Aktualisierungen gefunden.","already-updating":"Einige Visor werden schon aktualisiert:","update-available":"Folgende Aktualisierungen wurden gefunden:","update-available-singular":"Folgende Aktualisierungen wurden f\xfcr einen Visor gefunden:","update-available-plural":"Folgende Aktualisierungen wurden f\xfcr {{ number }} Visor gefunden:","update-available-additional-singular":"Folgende zus\xe4tzliche Aktualisierungen f\xfcr einen Visor wurden gefunden:","update-available-additional-plural":"Folgende zus\xe4tzliche Aktualisierungen f\xfcr {{ number }} Visor wurden gefunden:","update-instructions":"\'Aktualisierungen installieren\' klicken um fortzufahren.","updating":"Die Aktualisierung wurde gestartet. Das Fenster kann erneut ge\xf6ffnet werden um den Fortschritt zu sehen:","version-change":"Von {{ currentVersion }} auf {{ newVersion }}","selected-channel":"Gew\xe4hlter Kanal:","downloaded-file-name-prefix":"Herunterladen: ","speed-prefix":"Geschwindigkeit: ","time-downloading-prefix":"Dauer: ","time-left-prefix":"Dauert ungef\xe4hr noch: ","starting":"Aktualisierung wird vorbereitet","finished":"Status Verbindung beendet","install":"Aktualisierungen installieren"},"apps":{"log":{"title":"Log","empty":"Im ausgew\xe4hlten Intervall sind keine Logs vorhanden","filter-button":"Log-Intervall:","filter":{"title":"Filter","filter":"Zeige generierte Logs","7-days":"der letzten 7 Tagen","1-month":"der letzten 30 Tagen","3-months":"der letzten 3 Monaten","6-months":"der letzten 6 Monaten","1-year":"des letzten Jahres","all":"Zeige alle"}},"apps-list":{"title":"Anwendungen","list-title":"Anwendungsliste","app-name":"Name","port":"Port","state":"Status","state-tooltip":"Aktueller Status","auto-start":"Auto-Start","empty":"Visor hat keine Anwendungen.","empty-with-filter":"Keine Anwendung erf\xfcllt die Filterkriterien","disable-autostart":"Autostart ausschalten","enable-autostart":"Autostart einschalten","autostart-disabled":"Autostart aus","autostart-enabled":"Autostart ein","unavailable-logs-error":"Kann Logs nicht zeigen, solange die Anwendung gestoppt ist.","filter-dialog":{"state":"Der Status muss sein","name":"Der Name muss enthalten","port":"Der Port muss enthalten","autostart":"Autostart muss sein","state-options":{"any":"L\xe4uft oder gestoppt","running":"L\xe4uft","stopped":"Gestoppt"},"autostart-options":{"any":"An oder Aus","enabled":"An","disabled":"Aus"}}},"vpn-socks-server-settings":{"socks-title":"Skysocks Einstellungen","vpn-title":"VPN-Server Einstellungen","new-password":"Neues Passwort (Um Passwort zu entfernen leer lassen)","repeat-password":"Passwort wiederholen","passwords-not-match":"Passw\xf6rter stimmen nicht \xfcberein.","secure-mode-check":"Sicherheitsmodus benutzen","secure-mode-info":"Wenn aktiv, erlaubt der Server kein Client/Server SSH und erlaubt kein Datenverkehr vom VPN-Client zum lokalen Netzwerk des Servers.","save":"Speichern","remove-passowrd-confirmation":"Kein Passwort eingegeben. Wirklich Passwort entfernen?","change-passowrd-confirmation":"Passwort wirklich \xe4ndern?","changes-made":"\xc4nderungen wurden gespeichert."},"vpn-socks-client-settings":{"socks-title":"Skysocks-Client Einstellungen","vpn-title":"VPN-Client Einstellungen","discovery-tab":"Suche","remote-visor-tab":"Manuelle Eingabe","history-tab":"Verlauf","settings-tab":"Einstellungen","use":"Diese Daten benutzen","change-note":"Notiz \xe4ndern","remove-entry":"Eintrag l\xf6schen","note":"Notiz:","note-entered-manually":"Manuell eingegeben","note-obtained":"Von Discovery-Service erhalten","key":"Schl\xfcssel:","port":"Port:","location":"Ort:","state-available":"Verf\xfcgbar","state-offline":"Offline","public-key":"Remote Visor \xf6ffentlicher Schl\xfcssel","password":"Passwort","password-history-warning":"Achtung: Das Passwort wird nicht im Verlauf gespeichert.","copy-pk-info":"\xd6ffentlichen Schl\xfcssel kopieren.","copied-pk-info":"\xd6ffentlicher Schl\xfcssel wurde kopiert","copy-pk-error":"Beim Kopieren des \xf6ffentlichen Schl\xfcssels ist ein Problem aufgetreten.","no-elements":"Derzeit k\xf6nnen keine Elemente angezeigt werden. Bitte sp\xe4ter versuchen.","no-elements-for-filters":"Keine Elemente, welche die Filterkriterien erf\xfcllen.","no-filter":"Es wurde kein Filter gew\xe4hlt.","click-to-change":"Zum \xc4ndern klicken","remote-key-length-error":"Der \xf6ffentliche Schl\xfcssel muss 66 Zeichen lang sein.","remote-key-chars-error":"Der \xf6ffentliche Schl\xfcssel darf nur hexadezimale Zeichen enthalten.","save":"Speichern","remove-from-history-confirmation":"Eintrag wirklich aus dem Verlauf l\xf6schen?","change-key-confirmation":"Wirklich den \xf6ffentlichen Schl\xfcssel des remote Visors \xe4ndern?","changes-made":"\xc4nderungen wurden gespeichert.","no-history":"Dieser Tab zeigt die letzten {{ number }} \xf6ffentlichen Schl\xfcssel, die benutzt wurden.","default-note-warning":"Die Standardnotiz wurde nicht benutzt.","pagination-info":"{{ currentElementsRange }} von {{ totalElements }}","killswitch-check":"Killswitch aktivieren","killswitch-info":"Wenn aktiv, werden alle Netzwerkverbindungen deaktiviert falls die Anwendung l\xe4uft aber der VPN Schutz unterbrochen wird (f\xfcr tempor\xe4re Fehler oder andere Probleme).","settings-changed-alert":"Die \xc4nderungen wurden noch nicht gespeichert.","save-settings":"Einstellungen speichern","change-note-dialog":{"title":"Notiz \xe4ndern","note":"Notiz"},"password-dialog":{"title":"Passwort eingeben","password":"Passwort","info":"Ein Passwort wird abgefragt, da bei der Erstellung des gew\xe4hlten Eintrags ein Passwort gesetzt wurde, aus Sicherheitsgr\xfcnden aber nicht gespeichert wurde. Das Passwort kann frei gelassen werden.","continue-button":"Fortfahren"},"filter-dialog":{"title":"Filter","country":"Das Land muss sein","any-country":"Jedes","location":"Der Ort muss enthalten","pub-key":"Der \xf6ffentliche Schl\xfcssel muss enthalten","apply":"Anwenden"}},"stop-app":"Stopp","start-app":"Start","view-logs":"Zeige Logs","settings":"Einstellungen","error":"Ein Fehler ist aufgetreten.","stop-confirmation":"Anwendung wirklich anhalten?","stop-selected-confirmation":"Ausgew\xe4hlte Anwendung wirklich anhalten?","disable-autostart-confirmation":"Auto-Start f\xfcr diese Anwendung wirklich ausschalten?","enable-autostart-confirmation":"Auto-Start f\xfcr diese Anwendung wirklich einschalten?","disable-autostart-selected-confirmation":"Auto-Start f\xfcr ausgew\xe4hlte Anwendungen wirklich ausschalten?","enable-autostart-selected-confirmation":"Auto-Start f\xfcr ausgew\xe4hlte Anwendungen wirklich einschalten","operation-completed":"Operation ausgef\xfchrt","operation-unnecessary":"Gew\xfcnschte Einstellungen schon aktiv.","status-running":"L\xe4uft","status-stopped":"Gestoppt","status-failed":"Fehler","status-running-tooltip":"Anwendung l\xe4uft","status-stopped-tooltip":"Anwendung gestoppt","status-failed-tooltip":"Ein Fehler ist aufgetreten. Log der Anwendung \xfcberpr\xfcfen."},"transports":{"title":"Transporte","remove-all-offline":"Alle offline Transporte l\xf6schen","remove-all-offline-confirmation":"Wirkliche alle offline Transporte l\xf6schen?","remove-all-filtered-offline-confirmation":"Alle offline Transporte, welche die Filterkriterien erf\xfcllen werden gel\xf6scht. Wirklich fortfahren?","info":"Verbindungen mit remote Skywire Visor, um lokalen Skywire Anwendungen zu erlauben mit diesen remote Visor zu kommunizieren.","list-title":"Transport-Liste","state":"Status","state-tooltip":"Aktueller Status","id":"ID","remote-node":"Remote","type":"Typ","create":"Transport erstellen","delete-confirmation":"Transport wirklich entfernen?","delete-selected-confirmation":"Ausgew\xe4hlte Transporte wirklich entfernen?","delete":"Transport entfernen","deleted":"Transport erfolgreich entfernt.","empty":"Visor hat keine Transporte.","empty-with-filter":"Kein Transport erf\xfcllt die gew\xe4hlten Filterkriterien.","statuses":{"online":"Online","online-tooltip":"Transport ist online","offline":"Offline","offline-tooltip":"Transport ist offline"},"details":{"title":"Details","basic":{"title":"Basis Info","state":"Status:","id":"ID:","local-pk":"Lokaler \xf6ffentlicher Schl\xfcssel:","remote-pk":"Remote \xf6ffentlicher Schl\xfcssel:","type":"Typ:"},"data":{"title":"Daten\xfcbertragung","uploaded":"Hochgeladen:","downloaded":"Heruntergeladen:"}},"dialog":{"remote-key":"Remote \xf6ffentlicher Schl\xfcssel:","label":"Bezeichnung (optional)","transport-type":"Transport-Typ","success":"Transport erstellt.","success-without-label":"Der Transport wurde erstellt, aber die Bezeichnung konnte nicht gespeichert werden.","errors":{"remote-key-length-error":"Der remote \xf6ffentliche Schl\xfcssel muss 66 Zeichen lang sein.","remote-key-chars-error":"Der remote \xf6ffentliche Schl\xfcssel darf nur hexadezimale Zeichen enthalten.","transport-type-error":"Ein Transport-Typ wird ben\xf6tigt."}},"filter-dialog":{"online":"Der Transport muss sein","id":"Die ID muss enthalten","remote-node":"Der remote Schl\xfcssel muss enthalten","online-options":{"any":"Online oder offline","online":"Online","offline":"Offline"}}},"routes":{"title":"Routen","info":"Netzwerkpfade zum Erreichen von remote Visor. Routen werden bei Bedarf automatisch generiert.","list-title":"Routen-Liste","key":"Schl\xfcssel","type":"Typ","source":"Quelle","destination":"Ziel","delete-confirmation":"Diese Route wirklich entfernen?","delete-selected-confirmation":"Ausgew\xe4hlte Routen wirklich entfernen?","delete":"Route entfernen","deleted":"Route erfolgreich entfernt.","empty":"Visor hat keine Routen.","empty-with-filter":"Keine Route erf\xfcllt die gew\xe4hlten Filterkriterien.","details":{"title":"Details","basic":{"title":"Basis Info","key":"Schl\xfcssel:","rule":"Regel:"},"summary":{"title":"Regel Zusammenfassung","keep-alive":"Keep alive:","type":"Typ:","key-route-id":"Schl\xfcssel-Route ID:"},"specific-fields-titles":{"app":"Anwendung","forward":"Weiterleitung","intermediary-forward":"Vermittelte Weiterleitung"},"specific-fields":{"route-id":"N\xe4chste Routen ID:","transport-id":"N\xe4chste Transport ID:","destination-pk":"Ziel \xf6ffentlicher Schl\xfcssel:","source-pk":"Quelle \xf6ffentlicher Schl\xfcssel:","destination-port":"Ziel Port:","source-port":"Quelle Port:"}},"filter-dialog":{"key":"Der Schl\xfcssel muss enthalten","type":"Der Typ muss sein","source":"Die Quelle muss enhalten","destination":"Das Ziel muss enthalten","any-type-option":"Egal"}},"copy":{"tooltip":"In Zwischenablage kopieren","tooltip-with-text":"{{ text }} (In Zwischenablage kopieren)","copied":"In Zwischenablage kopiert!"},"selection":{"select-all":"Alle ausw\xe4hlen","unselect-all":"Alle abw\xe4hlen","delete-all":"Alle ausgew\xe4hlten Elemente entfernen","start-all":"Starte ausgew\xe4hlte Anwendung","stop-all":"Stoppe ausgew\xe4hlte Anwendung","enable-autostart-all":"Auto-Start f\xfcr ausgew\xe4hlte Anwendungen einschalten","disable-autostart-all":"Auto-Start f\xfcr ausgew\xe4hlte Anwendungen ausschalten"},"refresh-button":{"seconds":"K\xfcrzlich aktualisiert","minute":"Vor einer Minute aktualisiert","minutes":"Vor {{ time }} Minuten aktualisiert","hour":"Vor einer Stunde aktualisiert","hours":"Vor {{ time }} Stunden aktualisert","day":"Vor einem Tag aktualisiert","days":"Vor {{ time }} Tagen aktualisert","week":"Vor einer Woche aktualisiert","weeks":"Vor {{ time }} Wochen aktualisert","error-tooltip":"Fehler beim Aktualiseren aufgetreten. Versuche erneut alle {{ time }} Sekunden..."},"view-all-link":{"label":"Zeige alle {{ number }} Elemente"},"paginator":{"first":"Erste","last":"Letzte","total":"Insgesamt: {{ number }} Seiten","select-page-title":"Seite ausw\xe4hlen"},"confirmation":{"header-text":"Best\xe4tigung","confirm-button":"Ja","cancel-button":"Nein","close":"Schlie\xdfen","error-header-text":"Fehler","done-header-text":"Fertig"},"language":{"title":"Sprache ausw\xe4hlen"},"tabs-window":{"title":"Tab wechseln"}}')}}]);
\ No newline at end of file
diff --git a/cmd/skywire-visor/static/502.8c453718666fa967b3a8.js b/cmd/skywire-visor/static/502.8c453718666fa967b3a8.js
new file mode 100644
index 0000000000..f5c8a6b74f
--- /dev/null
+++ b/cmd/skywire-visor/static/502.8c453718666fa967b3a8.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkskywire_manager=self.webpackChunkskywire_manager||[]).push([[502],{40502:function(e){e.exports=JSON.parse('{"common":{"save":"Save","cancel":"Cancel","downloaded":"Downloaded","uploaded":"Uploaded","loading-error":"There was an error getting the data. Retrying...","operation-error":"There was an error trying to complete the operation.","no-connection-error":"There is no internet connection or connection to the Hypervisor.","error":"Error:","refreshed":"Data refreshed.","options":"Options","logout":"Logout","logout-error":"Error logging out.","logout-confirmation":"Are you sure you want to log out?","time-in-ms":"{{ time }}ms.","time-in-segs":"{{ time }}s.","ok":"Ok","yes":"Yes","no":"No","unknown":"Unknown","close":"Close","window-size-error":"The window is too narrow for the content."},"labeled-element":{"edit-label":"Edit label","remove-label":"Remove label","copy":"Copy","remove-label-confirmation":"Do you really want to remove the label?","unnamed-element":"Unnamed","unnamed-local-visor":"Local visor","local-element":"Local","tooltip":"Click to copy the entry or change the label","tooltip-with-text":"{{ text }} (Click to copy the entry or change the label)"},"labels":{"title":"Labels","info":"Labels you have entered to easily identify visors, transports and other elements, instead of having to read machine generated identifiers.","list-title":"Label list","label":"Label","id":"Element ID","type":"Type","delete-confirmation":"Are you sure you want to delete the label?","delete-selected-confirmation":"Are you sure you want to delete the selected labels?","delete":"Delete label","deleted":"Delete operation completed.","empty":"There aren\'t any saved labels.","empty-with-filter":"No label matches the selected filtering criteria.","filter-dialog":{"label":"The label must contain","id":"The id must contain","type":"The type must be","type-options":{"any":"Any","visor":"Visor","dmsg-server":"DMSG server","transport":"Transport"}}},"filters":{"filter-action":"Filter","filter-info":"Filter list.","press-to-remove":"(Press to remove the filters)","remove-confirmation":"Are you sure you want to remove the filters?"},"tables":{"title":"Order by","sorting-title":"Ordered by:","sort-by-value":"Value","sort-by-label":"Label","label":"(label)","inverted-order":"(inverted)"},"start":{"title":"Start"},"node":{"title":"Visor details","not-found":"Visor not found.","statuses":{"online":"Online","online-tooltip":"The visor is online.","connecting":"Connecting","connecting-tooltip":"The visor is online, but still connecting to the uptime tracker.","unknown":"Unknown","unknown-tooltip":"The visor is online, but it has not been possible to determine if it is connected to the uptime tracker.","partially-online":"Online with problems","partially-online-tooltip":"The visor is online, but disconnected from the uptime tracker.","offline":"Offline","offline-tooltip":"The visor is offline."},"details":{"node-info":{"title":"Visor Info","label":"Label:","public-key":"Public key:","symmetic-nat":"Symmetic NAT:","public-ip":"Public IP:","ip":"IP:","dmsg-server":"DMSG server:","ping":"Ping:","node-version":"Visor version:","skybian-version":"Skybian version:","no-skybian-version":"(not using Skybian)","time":{"title":"Time online:","seconds":"a few seconds","minute":"1 minute","minutes":"{{ time }} minutes","hour":"1 hour","hours":"{{ time }} hours","day":"1 day","days":"{{ time }} days","week":"1 week","weeks":"{{ time }} weeks"}},"transports-info":{"title":"Transports Info","autoconnect":"Autoconnect:","autoconnect-info":"When enabled, the visor will automatically create the transports needed when a connection to a public visor is requested. If disabled, the transports will have to be created before being able to make the connection.","enabled":"Enabled","disabled":"Disabled","enable-button":"Enable","disable-button":"Disable","enable-confirmation":"Are you sure you want to enable the autoconnect feature?","disable-confirmation":"Are you sure you want to disable the autoconnect feature?","enable-done":"The autoconnect feature has been enabled.","disable-done":"The autoconnect feature has been disabled."},"router-info":{"title":"Router Info","min-hops":"Min hops:","max-hops":"Max hops:","change-config-button":"Change configuration"},"node-health":{"title":"Health Info","uptime-tracker":"Uptime tracker:","connected":"Connected","disconnected":"Disconnected"},"node-traffic-data":"Traffic data"},"tabs":{"info":"Info","apps":"Apps","routing":"Routing"},"error-load":"An error occurred while refreshing the data. Retrying..."},"router-config":{"title":"Router Configuration","info":"Here you can configure how many hops the connections must pass through other Skywire visors before reaching the final destination. NOTE: the changes will not affect the existing routes.","min-hops":"Min hops","save-config-button":"Save configuration","done":"Changes saved."},"nodes":{"title":"Visor list","dmsg-title":"DMSG","update-all":"Update all online visors","hypervisor":"Hypervisor","state":"State","state-tooltip":"Current state","label":"Label","key":"Key","dmsg-server":"DMSG server","ping":"Ping","hypervisor-info":"This visor is the current Hypervisor.","copy-key":"Copy key","copy-dmsg":"Copy DMSG server key","copy-data":"Copy data","view-node":"View visor","delete-node":"Remove visor","delete-all-offline":"Remove all offline visors","error-load":"An error occurred while refreshing the list. Retrying...","empty":"There aren\'t any visors connected to this hypervisor.","empty-with-filter":"No visor matches the selected filtering criteria.","delete-node-confirmation":"Are you sure you want to remove the visor from the list?","delete-all-offline-confirmation":"Are you sure you want to remove all offline visors from the list?","delete-all-filtered-offline-confirmation":"All offline visors satisfying the current filtering criteria will be removed from the list. Are you sure you want to continue?","deleted":"Visor removed.","deleted-singular":"1 offline visor removed.","deleted-plural":"{{ number }} offline visors removed.","no-visors-to-update":"There are no visors to update.","filter-dialog":{"online":"The visor must be","label":"The label must contain","key":"The public key must contain","dmsg":"The DMSG server key must contain","online-options":{"any":"Online or offline","online":"Online","offline":"Offline"}}},"edit-label":{"label":"Label","done":"Label saved.","label-removed-warning":"The label was removed."},"settings":{"title":"Settings","password":{"initial-config-help":"Use this option for setting the initial password. After a password has been set, it is not possible to use this option to modify it.","help":"Options for changing your password.","old-password":"Old password","new-password":"New password","repeat-password":"Repeat password","password-changed":"Password changed.","error-changing":"Error changing password.","initial-config":{"title":"Set initial password","password":"Password","repeat-password":"Repeat password","set-password":"Set password","done":"Password set. Please use it to access the system.","error":"Error. Please make sure you have not already set the password."},"errors":{"bad-old-password":"The provided old password is not correct.","old-password-required":"Old password is required.","new-password-error":"Password must be 6-64 characters long.","passwords-not-match":"Passwords do not match.","default-password":"Don\'t use the default password (1234)."}},"updater-config":{"open-link":"Show updater settings","open-confirmation":"The updater settings are for experienced users only. Are you sure you want to continue?","help":"Use this form for overriding the settings that will be used by the updater. All empty fields will be ignored. The settings will be used for all updating operations, no mater which element is being updated, so please be careful.","channel":"Channel","version":"Version","archive-url":"Archive URL","checksum-url":"Checksum URL","not-saved":"The changes have not been saved yet.","save":"Save changes","remove-settings":"Remove the settings","saved":"The custom settings have been saved.","removed":"The custom settings have been removed.","save-confirmation":"Are you sure you want to apply the custom settings?","remove-confirmation":"Are you sure you want to remove the custom settings?"},"change-password":"Change password","refresh-rate":"Refresh rate","refresh-rate-help":"Time the system waits to update the data automatically.","refresh-rate-confirmation":"Refresh rate changed.","seconds":"seconds"},"login":{"password":"Password","incorrect-password":"Incorrect password.","initial-config":"Configure initial launch"},"actions":{"menu":{"terminal":"Terminal","config":"Configuration","update":"Update","reboot":"Reboot","logs":"View logs"},"reboot":{"confirmation":"Are you sure you want to reboot the visor?","done":"The visor is restarting."},"terminal-options":{"full":"Full terminal","simple":"Simple terminal"},"terminal":{"title":"Terminal","input-start":"Skywire terminal for {{address}}","error":"Unexpected error while trying to execute the command."}},"update":{"title":"Update","error-title":"Error","processing":"Looking for updates...","no-update":"There is no update for the visor. The currently installed version is:","no-updates":"No new updates were found.","already-updating":"Some visors are already being updated:","update-available":"The following updates were found:","update-available-singular":"The following updates for 1 visor were found:","update-available-plural":"The following updates for {{ number }} visors were found:","update-available-additional-singular":"The following additional updates for 1 visor were found:","update-available-additional-plural":"The following additional updates for {{ number }} visors were found:","update-instructions":"Click the \'Install updates\' button to continue.","updating":"The update operation has been started, you can open this window again for checking the progress:","version-change":"From {{ currentVersion }} to {{ newVersion }}","selected-channel":"Selected channel:","downloaded-file-name-prefix":"Downloading: ","speed-prefix":"Speed: ","time-downloading-prefix":"Time downloading: ","time-left-prefix":"Aprox. time left: ","starting":"Preparing to update","finished":"Status connection finished","install":"Install updates"},"apps":{"log":{"title":"Log","empty":"There are no log messages for the selected time range.","filter-button":"Only showing logs generated since:","filter":{"title":"Filter","filter":"Only show logs generated since","7-days":"The last 7 days","1-month":"The last 30 days","3-months":"The last 3 months","6-months":"The last 6 months","1-year":"The last year","all":"Show all"}},"apps-list":{"title":"Applications","list-title":"Application list","app-name":"Name","port":"Port","state":"State","state-tooltip":"Current state","auto-start":"Auto start","empty":"Visor doesn\'t have any applications.","empty-with-filter":"No app matches the selected filtering criteria.","disable-autostart":"Disable autostart","enable-autostart":"Enable autostart","autostart-disabled":"Autostart disabled","autostart-enabled":"Autostart enabled","unavailable-logs-error":"Unable to show the logs while the app is not running.","filter-dialog":{"state":"The state must be","name":"The name must contain","port":"The port must contain","autostart":"The autostart must be","state-options":{"any":"Running or stopped","running":"Running","stopped":"Stopped"},"autostart-options":{"any":"Enabled or disabled","enabled":"Enabled","disabled":"Disabled"}}},"vpn-socks-server-settings":{"socks-title":"Skysocks Settings","vpn-title":"VPN-Server Settings","new-password":"New password (Leave empty to remove the password)","repeat-password":"Repeat password","passwords-not-match":"Passwords do not match.","secure-mode-check":"Use secure mode","secure-mode-info":"When active, the server doesn\'t allow client/server SSH and doesn\'t allow any traffic from VPN clients to the server local network.","save":"Save","remove-passowrd-confirmation":"You left the password field empty. Are you sure you want to remove the password?","change-passowrd-confirmation":"Are you sure you want to change the password?","changes-made":"The changes have been made."},"vpn-socks-client-settings":{"socks-title":"Skysocks-Client Settings","vpn-title":"VPN-Client Settings","discovery-tab":"Search","remote-visor-tab":"Enter manually","history-tab":"History","settings-tab":"Settings","use":"Use this data","change-note":"Change note","remove-entry":"Remove entry","note":"Note:","note-entered-manually":"Entered manually","note-obtained":"Obtained from the discovery service","key":"Key:","port":"Port:","location":"Location:","state-available":"Available","state-offline":"Offline","public-key":"Remote visor public key","password":"Password","password-history-warning":"Note: the password will not be saved in the history.","copy-pk-info":"Copy public key.","copied-pk-info":"The public key has been copied.","copy-pk-error":"There was a problem copying the public key.","no-elements":"Currently there are no elements to show. Please try again later.","no-elements-for-filters":"There are no elements that meet the filter criteria.","no-filter":"No filter has been selected","click-to-change":"Click to change","remote-key-length-error":"The public key must be 66 characters long.","remote-key-chars-error":"The public key must only contain hexadecimal characters.","save":"Save","remove-from-history-confirmation":"Are you sure you want to remove the entry from the history?","change-key-confirmation":"Are you sure you want to change the remote visor public key?","changes-made":"The changes have been made.","no-history":"This tab will show the last {{ number }} public keys used.","default-note-warning":"The default note has been used.","pagination-info":"{{ currentElementsRange }} of {{ totalElements }}","killswitch-check":"Activate killswitch","killswitch-info":"When active, all network connections will be disabled if the app is running but the VPN protection is interrupted (for temporary errors or any other problem). This avoids data leaks.","settings-changed-alert":" The changes have not been saved yet.","save-settings":"Save settings","change-note-dialog":{"title":"Change Note","note":"Note"},"password-dialog":{"title":"Enter Password","password":"Password","info":"You are being asked for a password because a password was set when the selected entry was created, but the it was not saved for security reasons. You can leave the password empty if needed.","continue-button":"Continue"},"filter-dialog":{"title":"Filters","country":"The country must be","any-country":"Any","location":"The location must contain","pub-key":"The public key must contain","apply":"Apply"}},"stop-app":"Stop","start-app":"Start","view-logs":"View logs","settings":"Settings","open":"Open","error":"An error has occured and it was not possible to perform the operation.","stop-confirmation":"Are you sure you want to stop the app?","stop-selected-confirmation":"Are you sure you want to stop the selected apps?","disable-autostart-confirmation":"Are you sure you want to disable autostart for the app?","enable-autostart-confirmation":"Are you sure you want to enable autostart for the app?","disable-autostart-selected-confirmation":"Are you sure you want to disable autostart for the selected apps?","enable-autostart-selected-confirmation":"Are you sure you want to enable autostart for the selected apps?","operation-completed":"Operation completed.","operation-unnecessary":"The selection already has the requested setting.","status-running":"Running","status-stopped":"Stopped","status-failed":"Failed","status-running-tooltip":"App is currently running","status-stopped-tooltip":"App is currently stopped","status-failed-tooltip":"Something went wrong. Check the app\'s messages for more information"},"transports":{"title":"Transports","info":"Connections you have with remote Skywire visors, to allow local Skywire apps to communicate with apps running on those remote visors.","list-title":"Transport list","offline":"Offline","persistent":"Persistent","persistent-tooltip":"Persistent transports, which are created automatically when the visor is turned on and are automatically recreated in case of disconnection.","persistent-transport-tooltip":"This transport is persistent, so it is created automatically when the visor is turned on and automatically recreated in case of disconnection.","persistent-transport-button-tooltip":"This transport is persistent, so it is created automatically when the visor is turned on and automatically recreated in case of disconnection. Press to make non-persistent.","non-persistent-transport-button-tooltip":"Press to make this transport persistent. Persistent transports are created automatically when the visor is turned on and automatically recreated in case of disconnection.","make-persistent":"Make persistent","make-non-persistent":"Make non-persistent","make-selected-persistent":"Make all selected persistent","make-selected-non-persistent":"Make all selected non-persistent","changes-made":"Changes made.","no-changes-needed":"No changes were needed.","id":"ID","remote-node":"Remote","type":"Type","create":"Create transport","make-persistent-confirmation":"Are you sure you want to make the transport persistent?","make-non-persistent-confirmation":"Are you sure you want to make the transport non-persistent?","make-selected-persistent-confirmation":"Are you sure you want to make the selected transports persistent?","make-selected-non-persistent-confirmation":"Are you sure you want to make the selected transports non-persistent?","make-offline-non-persistent-confirmation":"Are you sure you want to make the transport non-persistent? It will not be shown in the list while offline anymore.","delete-confirmation":"Are you sure you want to delete the transport?","delete-persistent-confirmation":"This transport is persistent, so it may be recreated shortly after deletion. Are you sure you want to delete it?","delete-selected-confirmation":"Are you sure you want to delete the selected transports?","delete":"Delete transport","deleted":"Delete operation completed.","empty":"Visor doesn\'t have any transports.","empty-with-filter":"No transport matches the selected filtering criteria.","details":{"title":"Details","basic":{"title":"Basic info","persistent":"Persistent:","id":"ID:","local-pk":"Local public key:","remote-pk":"Remote public key:","type":"Type:"},"data":{"title":"Data transmission","uploaded":"Uploaded data:","downloaded":"Downloaded data:"}},"dialog":{"remote-key":"Remote public key","label":"Identification name (optional)","transport-type":"Transport type","make-persistent":"Make persistent","persistent-tooltip":"Persistent transports are created automatically when the visor is turned on and automatically recreated in case of disconnection.","only-persistent-created":"The persistent transport was created, but it may have not been activated.","success":"Transport created.","success-without-label":"The transport was created, but it was not possible to save the label.","errors":{"remote-key-length-error":"The remote public key must be 66 characters long.","remote-key-chars-error":"The remote public key must only contain hexadecimal characters.","transport-type-error":"The transport type is required."}},"filter-dialog":{"persistent":"The transport must be","id":"The id must contain","remote-node":"The remote key must contain","persistent-options":{"any":"Any","persistent":"Persistent","non-persistent":"Non-persistent"}}},"routes":{"title":"Routes","info":"Paths used to reach the remote visors to which transports have been established. Routes are automatically generated as needed.","list-title":"Route list","key":"Key","type":"Type","source":"Source","destination":"Destination","delete-confirmation":"Are you sure you want to delete the route?","delete-selected-confirmation":"Are you sure you want to delete the selected routes?","delete":"Delete route","deleted":"Delete operation completed.","empty":"Visor doesn\'t have any routes.","empty-with-filter":"No route matches the selected filtering criteria.","details":{"title":"Details","basic":{"title":"Basic info","key":"Key:","rule":"Rule:"},"summary":{"title":"Rule summary","keep-alive":"Keep alive:","type":"Rule type:","key-route-id":"Key route ID:"},"specific-fields-titles":{"app":"App fields","forward":"Forward fields","intermediary-forward":"Intermediary forward fields"},"specific-fields":{"route-id":"Next route ID:","transport-id":"Next transport ID:","destination-pk":"Destination public key:","source-pk":"Source public key:","destination-port":"Destination port:","source-port":"Source port:"}},"filter-dialog":{"key":"The key must contain","type":"The type must be","source":"The source must contain","destination":"The destination must contain","any-type-option":"Any"}},"copy":{"tooltip":"Click to copy","tooltip-with-text":"{{ text }} (Click to copy)","copied":"Copied!"},"selection":{"select-all":"Select all","unselect-all":"Unselect all","delete-all":"Delete all selected elements","start-all":"Start all selected apps","stop-all":"Stop all selected apps","enable-autostart-all":"Enable autostart for all selected apps","disable-autostart-all":"Disable autostart for all selected apps"},"refresh-button":{"seconds":"Updated a few seconds ago","minute":"Updated 1 minute ago","minutes":"Updated {{ time }} minutes ago","hour":"Updated 1 hour ago","hours":"Updated {{ time }} hours ago","day":"Updated 1 day ago","days":"Updated {{ time }} days ago","week":"Updated 1 week ago","weeks":"Updated {{ time }} weeks ago","error-tooltip":"There was an error updating the data. Retrying automatically every {{ time }} seconds..."},"view-all-link":{"label":"View all {{ number }} elements"},"paginator":{"first":"First","last":"Last","total":"Total: {{ number }} pages","select-page-title":"Select page"},"confirmation":{"header-text":"Confirmation","confirm-button":"Yes","cancel-button":"No","close":"Close","error-header-text":"Error","done-header-text":"Done"},"language":{"title":"Select language"},"tabs-window":{"title":"Change tab"},"vpn":{"title":"VPN Control Panel","start":"Start","servers":"Servers","settings":"Settings","unnamed":"Unnamed","starting-blocked-server-error":"Unable to connect to the selected server because it has been added to the blocked servers list.","unexpedted-error":"An unexpected error occurred and the operation could not be completed.","remote-access-title":"It appears that you are accessing the system remotely","remote-access-text":"This application only allows you to manage the VPN protection of the device on which it was installed. Changes made with it will not affect remote devices like the one you seem to be using. Also, the displayed IP data may be incorrect.","server-change":{"busy-error":"The system is busy. Please wait.","backend-error":"It was not possible to change the server. Please make sure the public key is correct and the VPN app is running.","already-selected-warning":"The selected server is already being used.","change-server-while-connected-confirmation":"The VPN protection will be interrupted while changing the server and some data may be transmitted unprotected during the process. Do you want to continue?","start-same-server-confirmation":"You had already selected that server. Do you want to connect to it?"},"error-page":{"text":"The VPN client app is not available.","more-info":"It was not possible to connect to the VPN client app. This may be due to a configuration error, an unexpected problem with the visor or because you used an invalid public key in the URL.","text-pk":"Invalid configuration.","more-info-pk":"The application cannot be started because you have not specified the visor public key.","text-storage":"Error saving data.","more-info-storage":"There has been a conflict when trying to save the data and the application has been closed to prevent errors. This could happen if you open the application in more than one tab or window.","text-pk-change":"Invalid operation.","more-info-pk-change":"Please use this application to manage only one VPN client."},"connection-info":{"state-title":"Your connection is currently:","state-connecting":"Connecting","state-connecting-info":"The VPN protection is being activated.","state-connected":"Connected","state-connected-info":"The VPN protection is on.","state-disconnecting":"Disconnecting","state-disconnecting-info":"The VPN protection is being deactivated.","state-reconnecting":"Reconnecting","state-reconnecting-info":"The VPN protection is being restored.","state-disconnected":"Disconnected","state-disconnected-info":"The VPN protection is off.","state-info":"Current connection status.","latency-info":"Current latency.","upload-info":"Upload speed.","download-info":"Download speed."},"connection-error":{"text":"Connection error","info":"Problem connecting with the vpn app. Some data being displayed could be outdated."},"status-page":{"start-title":"Start VPN","no-server":"No server selected!","disconnect":"Disconnect","last-error":"Last error:","unknown-error":"Unknown error.","disconnect-confirmation":"Are you sure you want to stop the VPN protection?","upload-info":"Uploaded data stats.","download-info":"Downloaded data stats.","latency-info":"Latency stats.","total-data-label":"total","problem-connecting-error":"It was not possible to connect to the server. The server may be invalid or temporarily down.","problem-starting-error":"It was not possible to start the VPN. Please make sure the base VPN client app is running.","problem-stopping-error":"It was not possible to stop the VPN. Please make sure the base VPN client app is running.","generic-problem-error":"It was not possible to perform the operation. Please make sure the base VPN client app is running.","select-server-warning":"Please select a server first.","data":{"ip":"IP address:","ip-problem-info":"There was a problem trying to get the IP. Please verify it using an external service.","ip-country-problem-info":"There was a problem trying to get the country. Please verify it using an external service.","ip-refresh-info":"Refresh","ip-refresh-time-warning":"Please wait {{ seconds }} second(s) before refreshing the data.","ip-refresh-loading-warning":"Please wait for the previous operation to finish.","country":"Country:","server":"Server:","server-note":"Server note:","original-server-note":"Original server note:","local-pk":"Local visor public key:","remote-pk":"Remote visor public key:","unavailable":"Unavailable"}},"server-options":{"tooltip":"Options","connect-without-password":"Connect without password","connect-without-password-confirmation":"The connection will be made without the password. Are you sure you want to continue?","connect-using-password":"Connect using a password","connect-using-another-password":"Connect using another password","edit-name":"Custom name","edit-label":"Custom note","make-favorite":"Make favorite","make-favorite-confirmation":"Are you sure you want to mark this server as favorite? It will be removed from the blocked list.","make-favorite-done":"Added to the favorites list.","remove-from-favorites":"Remove from favorites","remove-from-favorites-done":"Removed from the favorites list.","block":"Block server","block-done":"Added to the blocked list.","block-confirmation":"Are you sure you want to block this server? It will be removed from the favorites list.","block-selected-confirmation":"Are you sure you want to block the currently selected server? All connections will be closed.","block-selected-favorite-confirmation":"Are you sure you want to block the currently selected server? All connections will be closed and it will be removed from the favorites list.","unblock":"Unblock server","unblock-done":"Removed from the blocked list.","remove-from-history":"Remove from history","remove-from-history-confirmation":"Are you sure you want to remove this server from the history?","remove-from-history-done":"Removed from history.","edit-value":{"name-title":"Custom Name","note-title":"Custom Note","name-label":"Custom name","note-label":"Custom note","apply-button":"Apply","changes-made-confirmation":"The change has been made."}},"server-conditions":{"selected-info":"This is the currently selected server.","blocked-info":"This server is in the blocked list.","favorite-info":"This server is in the favorites list.","history-info":"This server is in the server history.","has-password-info":"A password was set for connecting with this server."},"server-list":{"date-small-table-label":"Date","date-info":"Last time you used this server.","country-small-table-label":"Country","country-info":"Country where the server is located.","name-small-table-label":"Name","location-small-table-label":"Location","public-key-small-table-label":"Pk","public-key-info":"Server public key.","congestion-rating-small-table-label":"Congestion rating","congestion-rating-info":"Rating of the server related to how congested it tends to be.","congestion-small-table-label":"Congestion","congestion-info":"Current server congestion.","latency-rating-small-table-label":"Latency rating","latency-rating-info":"Rating of the server related to how much latency it tends to have.","latency-small-table-label":"Latency","latency-info":"Current server latency.","hops-small-table-label":"Hops","hops-info":"How many hops are needed for connecting with the server.","note-small-table-label":"Note","note-info":"Note about the server.","gold-rating-info":"Gold","silver-rating-info":"Silver","bronze-rating-info":"Bronze","notes-info":"Custom note: {{ custom }} - Original note: {{ original }}","empty-discovery":"Currently there are no VPN servers to show. Please try again later.","empty-history":"There is no history to show.","empty-favorites":"There are no favorite servers to show.","empty-blocked":"There are no blocked servers to show.","empty-with-filter":"No VPN server matches the selected filtering criteria.","add-manually-info":"Add server manually.","current-filters":"Current filters (press to remove)","none":"None","unknown":"Unknown","tabs":{"public":"Public","history":"History","favorites":"Favorites","blocked":"Blocked"},"add-server-dialog":{"title":"Enter manually","pk-label":"Server public key","password-label":"Server password (if any)","name-label":"Server name (optional)","note-label":"Personal note (optional)","pk-length-error":"The public key must be 66 characters long.","pk-chars-error":"The public key must only contain hexadecimal characters.","use-server-button":"Use server"},"password-dialog":{"title":"Enter Password","password-if-any-label":"Server password (if any)","password-label":"Server password","continue-button":"Continue"},"filter-dialog":{"country":"The country must be","name":"The name must contain","location":"The location must contain","public-key":"The public key must contain","congestion-rating":"The congestion rating must be","latency-rating":"The latency rating must be","rating-options":{"any":"Any","gold":"Gold","silver":"Silver","bronze":"Bronze"},"country-options":{"any":"Any"}}},"settings-page":{"setting-small-table-label":"Setting","value-small-table-label":"Value","killswitch":"Killswitch","killswitch-info":"When active, all network connections will be disabled if the app is running but the VPN protection is interrupted (for temporary errors or any other problem). This avoids data leaks.","get-ip":"Get IP info","get-ip-info":"When active, the application will use external services to obtain information about the current IP.","data-units":"Data units","data-units-info":"Allows to select the units that will be used to display the data transmission statistics.","minimum-hops":"Minimum hops","minimum-hops-info":"Allows to set the minimum number of hops the connections must pass through other Skywire visors before reaching the final destination.","setting-on":"On","setting-off":"Off","working-warning":"The system is busy. Please wait for the previous operation to finish.","change-while-connected-confirmation":"The VPN protection will be interrupted while changing the setting. Do you want to continue?","data-units-modal":{"title":"Data Units","only-bits":"Bits for all stats","only-bytes":"Bytes for all stats","bits-speed-and-bytes-volume":"Bits for speed and bytes for volume (default)"}}}}')}}]);
\ No newline at end of file
diff --git a/cmd/skywire-visor/static/6.d7f14812f0504c4532c0.js b/cmd/skywire-visor/static/6.d7f14812f0504c4532c0.js
deleted file mode 100644
index cc91b44e29..0000000000
--- a/cmd/skywire-visor/static/6.d7f14812f0504c4532c0.js
+++ /dev/null
@@ -1 +0,0 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[6],{KPjT:function(e){e.exports=JSON.parse('{"common":{"save":"Save","cancel":"Cancel","downloaded":"Downloaded","uploaded":"Uploaded","loading-error":"There was an error getting the data. Retrying...","operation-error":"There was an error trying to complete the operation.","no-connection-error":"There is no internet connection or connection to the Hypervisor.","error":"Error:","refreshed":"Data refreshed.","options":"Options","logout":"Logout","logout-error":"Error logging out.","logout-confirmation":"Are you sure you want to log out?","time-in-ms":"{{ time }}ms","ok":"Ok","unknown":"Unknown","close":"Close"},"labeled-element":{"edit-label":"Edit label","remove-label":"Remove label","copy":"Copy","remove-label-confirmation":"Do you really want to remove the label?","unnamed-element":"Unnamed","unnamed-local-visor":"Local visor","local-element":"Local","tooltip":"Click to copy the entry or change the label","tooltip-with-text":"{{ text }} (Click to copy the entry or change the label)"},"labels":{"title":"Labels","info":"Labels you have entered to easily identify visors, transports and other elements, instead of having to read machine generated identifiers.","list-title":"Label list","label":"Label","id":"Element ID","type":"Type","delete-confirmation":"Are you sure you want to delete the label?","delete-selected-confirmation":"Are you sure you want to delete the selected labels?","delete":"Delete label","deleted":"Delete operation completed.","empty":"There aren\'t any saved labels.","empty-with-filter":"No label matches the selected filtering criteria.","filter-dialog":{"label":"The label must contain","id":"The id must contain","type":"The type must be","type-options":{"any":"Any","visor":"Visor","dmsg-server":"DMSG server","transport":"Transport"}}},"filters":{"filter-action":"Filter","press-to-remove":"(Press to remove the filters)","remove-confirmation":"Are you sure you want to remove the filters?"},"tables":{"title":"Order by","sorting-title":"Ordered by:","sort-by-value":"Value","sort-by-label":"Label","label":"(label)","inverted-order":"(inverted)"},"start":{"title":"Start"},"node":{"title":"Visor details","not-found":"Visor not found.","statuses":{"online":"Online","online-tooltip":"Visor is online.","partially-online":"Online with problems","partially-online-tooltip":"Visor is online but not all services are working. For more information, open the details page and check the \\"Health info\\" section.","offline":"Offline","offline-tooltip":"Visor is offline."},"details":{"node-info":{"title":"Visor Info","label":"Label:","public-key":"Public key:","dmsg-server":"DMSG server:","ping":"Ping:","node-version":"Visor version:","time":{"title":"Time online:","seconds":"a few seconds","minute":"1 minute","minutes":"{{ time }} minutes","hour":"1 hour","hours":"{{ time }} hours","day":"1 day","days":"{{ time }} days","week":"1 week","weeks":"{{ time }} weeks"}},"node-health":{"title":"Health info","status":"Status:","transport-discovery":"Transport discovery:","route-finder":"Route finder:","setup-node":"Setup node:","uptime-tracker":"Uptime tracker:","address-resolver":"Address resolver:","element-offline":"Offline"},"node-traffic-data":"Traffic data"},"tabs":{"info":"Info","apps":"Apps","routing":"Routing"},"error-load":"An error occurred while refreshing the data. Retrying..."},"nodes":{"title":"Visor list","dmsg-title":"DMSG","update-all":"Update all visors","hypervisor":"Hypervisor","state":"State","state-tooltip":"Current state","label":"Label","key":"Key","dmsg-server":"DMSG server","ping":"Ping","hypervisor-info":"This visor is the current Hypervisor.","copy-key":"Copy key","copy-dmsg":"Copy DMSG server key","copy-data":"Copy data","view-node":"View visor","delete-node":"Remove visor","delete-all-offline":"Remove all offline visors","error-load":"An error occurred while refreshing the list. Retrying...","empty":"There aren\'t any visors connected to this hypervisor.","empty-with-filter":"No visor matches the selected filtering criteria.","delete-node-confirmation":"Are you sure you want to remove the visor from the list?","delete-all-offline-confirmation":"Are you sure you want to remove all offline visors from the list?","delete-all-filtered-offline-confirmation":"All offline visors satisfying the current filtering criteria will be removed from the list. Are you sure you want to continue?","deleted":"Visor removed.","deleted-singular":"1 offline visor removed.","deleted-plural":"{{ number }} offline visors removed.","no-visors-to-update":"There are no visors to update.","filter-dialog":{"online":"The visor must be","label":"The label must contain","key":"The public key must contain","dmsg":"The DMSG server key must contain","online-options":{"any":"Online or offline","online":"Online","offline":"Offline"}}},"edit-label":{"label":"Label","done":"Label saved.","label-removed-warning":"The label was removed."},"settings":{"title":"Settings","password":{"initial-config-help":"Use this option for setting the initial password. After a password has been set, it is not possible to use this option to modify it.","help":"Options for changing your password.","old-password":"Old password","new-password":"New password","repeat-password":"Repeat password","password-changed":"Password changed.","error-changing":"Error changing password.","initial-config":{"title":"Set initial password","password":"Password","repeat-password":"Repeat password","set-password":"Set password","done":"Password set. Please use it to access the system.","error":"Error. Please make sure you have not already set the password."},"errors":{"bad-old-password":"The provided old password is not correct.","old-password-required":"Old password is required.","new-password-error":"Password must be 6-64 characters long.","passwords-not-match":"Passwords do not match.","default-password":"Don\'t use the default password (1234)."}},"updater-config":{"open-link":"Show updater settings","open-confirmation":"The updater settings are for experienced users only. Are you sure you want to continue?","help":"Use this form for overriding the settings that will be used by the updater. All empty fields will be ignored. The settings will be used for all updating operations, no mater which element is being updated, so please be careful.","channel":"Channel","version":"Version","archive-url":"Archive URL","checksum-url":"Checksum URL","not-saved":"The changes have not been saved yet.","save":"Save changes","remove-settings":"Remove the settings","saved":"The custom settings have been saved.","removed":"The custom settings have been removed.","save-confirmation":"Are you sure you want to apply the custom settings?","remove-confirmation":"Are you sure you want to remove the custom settings?"},"change-password":"Change password","refresh-rate":"Refresh rate","refresh-rate-help":"Time the system waits to update the data automatically.","refresh-rate-confirmation":"Refresh rate changed.","seconds":"seconds"},"login":{"password":"Password","incorrect-password":"Incorrect password.","initial-config":"Configure initial launch"},"actions":{"menu":{"terminal":"Terminal","config":"Configuration","update":"Update","reboot":"Reboot"},"reboot":{"confirmation":"Are you sure you want to reboot the visor?","done":"The visor is restarting."},"terminal-options":{"full":"Full terminal","simple":"Simple terminal"},"terminal":{"title":"Terminal","input-start":"Skywire terminal for {{address}}","error":"Unexpected error while trying to execute the command."}},"update":{"title":"Update","error-title":"Error","processing":"Looking for updates...","no-update":"There is no update for the visor. The currently installed version is:","no-updates":"No new updates were found.","already-updating":"Some visors are already being updated:","update-available":"The following updates were found:","update-available-singular":"The following updates for 1 visor were found:","update-available-plural":"The following updates for {{ number }} visors were found:","update-available-additional-singular":"The following additional updates for 1 visor were found:","update-available-additional-plural":"The following additional updates for {{ number }} visors were found:","update-instructions":"Click the \'Install updates\' button to continue.","updating":"The update operation has been started, you can open this window again for checking the progress:","version-change":"From {{ currentVersion }} to {{ newVersion }}","selected-channel":"Selected channel:","downloaded-file-name-prefix":"Downloading: ","speed-prefix":"Speed: ","time-downloading-prefix":"Time downloading: ","time-left-prefix":"Aprox. time left: ","starting":"Preparing to update","finished":"Status connection finished","install":"Install updates"},"apps":{"log":{"title":"Log","empty":"There are no log messages for the selected time range.","filter-button":"Only showing logs generated since:","filter":{"title":"Filter","filter":"Only show logs generated since","7-days":"The last 7 days","1-month":"The last 30 days","3-months":"The last 3 months","6-months":"The last 6 months","1-year":"The last year","all":"Show all"}},"apps-list":{"title":"Applications","list-title":"Application list","app-name":"Name","port":"Port","state":"State","state-tooltip":"Current state","auto-start":"Auto start","empty":"Visor doesn\'t have any applications.","empty-with-filter":"No app matches the selected filtering criteria.","disable-autostart":"Disable autostart","enable-autostart":"Enable autostart","autostart-disabled":"Autostart disabled","autostart-enabled":"Autostart enabled","unavailable-logs-error":"Unable to show the logs while the app is not running.","filter-dialog":{"state":"The state must be","name":"The name must contain","port":"The port must contain","autostart":"The autostart must be","state-options":{"any":"Running or stopped","running":"Running","stopped":"Stopped"},"autostart-options":{"any":"Enabled or disabled","enabled":"Enabled","disabled":"Disabled"}}},"vpn-socks-server-settings":{"socks-title":"Skysocks Settings","vpn-title":"VPN-Server Settings","new-password":"New password (Leave empty to remove the password)","repeat-password":"Repeat password","passwords-not-match":"Passwords do not match.","secure-mode-check":"Use secure mode","secure-mode-info":"When active, the server doesn\'t allow client/server SSH and doesn\'t allow any traffic from VPN clients to the server local network.","save":"Save","remove-passowrd-confirmation":"You left the password field empty. Are you sure you want to remove the password?","change-passowrd-confirmation":"Are you sure you want to change the password?","changes-made":"The changes have been made."},"vpn-socks-client-settings":{"socks-title":"Skysocks-Client Settings","vpn-title":"VPN-Client Settings","discovery-tab":"Search","remote-visor-tab":"Enter manually","history-tab":"History","settings-tab":"Settings","use":"Use this data","change-note":"Change note","remove-entry":"Remove entry","note":"Note:","note-entered-manually":"Entered manually","note-obtained":"Obtained from the discovery service","key":"Key:","port":"Port:","location":"Location:","state-available":"Available","state-offline":"Offline","public-key":"Remote visor public key","password":"Password","password-history-warning":"Note: the password will not be saved in the history.","copy-pk-info":"Copy public key.","copied-pk-info":"The public key has been copied.","copy-pk-error":"There was a problem copying the public key.","no-elements":"Currently there are no elements to show. Please try again later.","no-elements-for-filters":"There are no elements that meet the filter criteria.","no-filter":"No filter has been selected","click-to-change":"Click to change","remote-key-length-error":"The public key must be 66 characters long.","remote-key-chars-error":"The public key must only contain hexadecimal characters.","save":"Save","remove-from-history-confirmation":"Are you sure you want to remove the entry from the history?","change-key-confirmation":"Are you sure you want to change the remote visor public key?","changes-made":"The changes have been made.","no-history":"This tab will show the last {{ number }} public keys used.","default-note-warning":"The default note has been used.","pagination-info":"{{ currentElementsRange }} of {{ totalElements }}","killswitch-check":"Activate killswitch","killswitch-info":"When active, all network connections will be disabled if the app is running but the VPN protection is interrupted (for temporary errors or any other problem).","settings-changed-alert":" The changes have not been saved yet.","save-settings":"Save settings","change-note-dialog":{"title":"Change Note","note":"Note"},"password-dialog":{"title":"Enter Password","password":"Password","info":"You are being asked for a password because a password was set when the selected entry was created, but the it was not saved for security reasons. You can leave the password empty if needed.","continue-button":"Continue"},"filter-dialog":{"title":"Filters","country":"The country must be","any-country":"Any","location":"The location must contain","pub-key":"The public key must contain","apply":"Apply"}},"stop-app":"Stop","start-app":"Start","view-logs":"View logs","settings":"Settings","error":"An error has occured and it was not possible to perform the operation.","stop-confirmation":"Are you sure you want to stop the app?","stop-selected-confirmation":"Are you sure you want to stop the selected apps?","disable-autostart-confirmation":"Are you sure you want to disable autostart for the app?","enable-autostart-confirmation":"Are you sure you want to enable autostart for the app?","disable-autostart-selected-confirmation":"Are you sure you want to disable autostart for the selected apps?","enable-autostart-selected-confirmation":"Are you sure you want to enable autostart for the selected apps?","operation-completed":"Operation completed.","operation-unnecessary":"The selection already has the requested setting.","status-running":"Running","status-stopped":"Stopped","status-failed":"Failed","status-running-tooltip":"App is currently running","status-stopped-tooltip":"App is currently stopped","status-failed-tooltip":"Something went wrong. Check the app\'s messages for more information"},"transports":{"title":"Transports","remove-all-offline":"Remove all offline transports","remove-all-offline-confirmation":"Are you sure you want to remove all offline transports?","remove-all-filtered-offline-confirmation":"All offline transports satisfying the current filtering criteria will be removed. Are you sure you want to continue?","info":"Connections you have with remote Skywire visors, to allow local Skywire apps to communicate with apps running on those remote visors.","list-title":"Transport list","state":"State","state-tooltip":"Current state","id":"ID","remote-node":"Remote","type":"Type","create":"Create transport","delete-confirmation":"Are you sure you want to delete the transport?","delete-selected-confirmation":"Are you sure you want to delete the selected transports?","delete":"Delete transport","deleted":"Delete operation completed.","empty":"Visor doesn\'t have any transports.","empty-with-filter":"No transport matches the selected filtering criteria.","statuses":{"online":"Online","online-tooltip":"Transport is online","offline":"Offline","offline-tooltip":"Transport is offline"},"details":{"title":"Details","basic":{"title":"Basic info","state":"State:","id":"ID:","local-pk":"Local public key:","remote-pk":"Remote public key:","type":"Type:"},"data":{"title":"Data transmission","uploaded":"Uploaded data:","downloaded":"Downloaded data:"}},"dialog":{"remote-key":"Remote public key","label":"Identification name (optional)","transport-type":"Transport type","success":"Transport created.","success-without-label":"The transport was created, but it was not possible to save the label.","errors":{"remote-key-length-error":"The remote public key must be 66 characters long.","remote-key-chars-error":"The remote public key must only contain hexadecimal characters.","transport-type-error":"The transport type is required."}},"filter-dialog":{"online":"The transport must be","id":"The id must contain","remote-node":"The remote key must contain","online-options":{"any":"Online or offline","online":"Online","offline":"Offline"}}},"routes":{"title":"Routes","info":"Paths used to reach the remote visors to which transports have been established. Routes are automatically generated as needed.","list-title":"Route list","key":"Key","type":"Type","source":"Source","destination":"Destination","delete-confirmation":"Are you sure you want to delete the route?","delete-selected-confirmation":"Are you sure you want to delete the selected routes?","delete":"Delete route","deleted":"Delete operation completed.","empty":"Visor doesn\'t have any routes.","empty-with-filter":"No route matches the selected filtering criteria.","details":{"title":"Details","basic":{"title":"Basic info","key":"Key:","rule":"Rule:"},"summary":{"title":"Rule summary","keep-alive":"Keep alive:","type":"Rule type:","key-route-id":"Key route ID:"},"specific-fields-titles":{"app":"App fields","forward":"Forward fields","intermediary-forward":"Intermediary forward fields"},"specific-fields":{"route-id":"Next route ID:","transport-id":"Next transport ID:","destination-pk":"Destination public key:","source-pk":"Source public key:","destination-port":"Destination port:","source-port":"Source port:"}},"filter-dialog":{"key":"The key must contain","type":"The type must be","source":"The source must contain","destination":"The destination must contain","any-type-option":"Any"}},"copy":{"tooltip":"Click to copy","tooltip-with-text":"{{ text }} (Click to copy)","copied":"Copied!"},"selection":{"select-all":"Select all","unselect-all":"Unselect all","delete-all":"Delete all selected elements","start-all":"Start all selected apps","stop-all":"Stop all selected apps","enable-autostart-all":"Enable autostart for all selected apps","disable-autostart-all":"Disable autostart for all selected apps"},"refresh-button":{"seconds":"Updated a few seconds ago","minute":"Updated 1 minute ago","minutes":"Updated {{ time }} minutes ago","hour":"Updated 1 hour ago","hours":"Updated {{ time }} hours ago","day":"Updated 1 day ago","days":"Updated {{ time }} days ago","week":"Updated 1 week ago","weeks":"Updated {{ time }} weeks ago","error-tooltip":"There was an error updating the data. Retrying automatically every {{ time }} seconds..."},"view-all-link":{"label":"View all {{ number }} elements"},"paginator":{"first":"First","last":"Last","total":"Total: {{ number }} pages","select-page-title":"Select page"},"confirmation":{"header-text":"Confirmation","confirm-button":"Yes","cancel-button":"No","close":"Close","error-header-text":"Error","done-header-text":"Done"},"language":{"title":"Select language"},"tabs-window":{"title":"Change tab"}}')}}]);
\ No newline at end of file
diff --git a/cmd/skywire-visor/static/634.58120e5014668deb7e50.js b/cmd/skywire-visor/static/634.58120e5014668deb7e50.js
new file mode 100644
index 0000000000..46cc6e56d3
--- /dev/null
+++ b/cmd/skywire-visor/static/634.58120e5014668deb7e50.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkskywire_manager=self.webpackChunkskywire_manager||[]).push([[634],{23634:function(e){e.exports=JSON.parse('{"common":{"save":"Speichern","cancel":"Abbrechen","downloaded":"Heruntergeladen","uploaded":"Hochgeladen","loading-error":"Beim Laden der Daten ist ein Fehler aufgetreten. Versuche es erneut...","operation-error":"Beim Ausf\xfchren der Aktion ist ein Fehler aufgetreten.","no-connection-error":"Es ist keine Internetverbindung oder Verbindung zum Hypervisor vorhanden.","error":"Fehler:","refreshed":"Daten aktualisiert.","options":"Optionen","logout":"Abmelden","logout-error":"Fehler beim Abmelden.","logout-confirmation":"Wirklich abmelden?","time-in-ms":"{{ time }}ms","ok":"Ok","unknown":"Unbekannt","close":"Schlie\xdfen"},"labeled-element":{"edit-label":"Bezeichnung \xe4ndern","remove-label":"Bezeichnung l\xf6schen","copy":"Kopieren","remove-label-confirmation":"Bezeichnung wirklich l\xf6schen?","unnamed-element":"Unbenannt","unnamed-local-visor":"Lokaler Visor","local-element":"Lokal","tooltip":"Klicken um Eintrag zu kopieren oder Bezeichnung zu \xe4ndern","tooltip-with-text":"{{ text }} (Klicken um Eintrag zu kopieren oder Bezeichnung zu \xe4ndern)"},"labels":{"title":"Bezeichnung","info":"Bezeichnungen, die eingegeben wurden um Visor, Transporte und andere Elemente einfach wiederzuerkennen.","list-title":"Bezeichnunen Liste","label":"Bezeichnung","id":"Element ID","type":"Typ","delete-confirmation":"Diese Bezeichnung wirklich l\xf6schen?","delete-selected-confirmation":"Ausgew\xe4hlte Bezeichnungen wirklich l\xf6schen?","delete":"Bezeichnung l\xf6schen","deleted":"Bezeichnung gel\xf6scht.","empty":"Keine gespeicherten Bezeichnungen vorhanden.","empty-with-filter":"Keine Bezeichnung erf\xfcllt die gew\xe4hlten Filterkriterien.","filter-dialog":{"label":"Die Bezeichnung muss beinhalten","id":"Die ID muss beinhalten","type":"Der Typ muss sein","type-options":{"any":"Jeder","visor":"Visor","dmsg-server":"DMSG Server","transport":"Transport"}}},"filters":{"filter-action":"Filter","press-to-remove":"(Dr\xfccken um Filter zu l\xf6schen)","remove-confirmation":"Filter wirkliche l\xf6schen?"},"tables":{"title":"Ordnen nach","sorting-title":"Geordnet nach:","sort-by-value":"Wert","sort-by-label":"Bezeichnung","label":"(Bezeichnung)","inverted-order":"(Umgekehrt)"},"start":{"title":"Start"},"node":{"title":"Visor Details","not-found":"Visor nicht gefunden.","statuses":{"online":"Online","online-tooltip":"Visor ist online","partially-online":"Online mit Problemen","partially-online-tooltip":"Visor ist online, aber nicht alle Dienste laufen. F\xfcr Informationen bitte die Details Seite \xf6ffnen und die \\"Zustand Info\\" \xfcberpr\xfcfen.","offline":"Offline","offline-tooltip":"Visor ist offline"},"details":{"node-info":{"title":"Visor Info","label":"Bezeichnung:","public-key":"\xd6ffentlicher Schl\xfcssel:","dmsg-server":"DMSG Server:","ping":"Ping:","node-version":"Visor Version:","time":{"title":"Online seit:","seconds":"ein paar Sekunden","minute":"1 Minute","minutes":"{{ time }} Minuten","hour":"1 Stunde","hours":"{{ time }} Stunden","day":"1 Tag","days":"{{ time }} Tage","week":"1 Woche","weeks":"{{ time }} Wochen"}},"node-health":{"title":"Zustand Info","status":"Status:","transport-discovery":"Transport Entdeckung:","route-finder":"Route Finder:","setup-node":"Setup Visor:","uptime-tracker":"Verf\xfcgbarkeitsmonitor:","address-resolver":"Addressaufl\xf6ser:","element-offline":"offline"},"node-traffic-data":"Datenverkehr"},"tabs":{"info":"Info","apps":"Anwendungen","routing":"Routing"},"error-load":"Beim Aktualisieren der Visordaten ist ein Fehler aufgetreten."},"nodes":{"title":"Visor Liste","dmsg-title":"DMSG","update-all":"Alle Visor aktualisieren","hypervisor":"Hypervisor","state":"Status","state-tooltip":"Aktueller Status","label":"Bezeichnung","key":"Schl\xfcssel","dmsg-server":"DMSG Server","ping":"Ping","hypervisor-info":"Dieser Visor ist der aktuelle Hypervisor.","copy-key":"Schl\xfcssel kopieren","copy-dmsg":"DMSG Server Schl\xfcssel kopieren","copy-data":"Daten kopieren","view-node":"Visor betrachten","delete-node":"Visor l\xf6schen","delete-all-offline":"Alle offline Visor l\xf6schen","error-load":"Beim Aktualisieren der Visor-Liste ist ein Fehler aufgetreten.","empty":"Es ist kein Visor zu diesem Hypervisor verbunden.","empty-with-filter":"Kein Visor erf\xfcllt die gew\xe4hlten Filterkriterien","delete-node-confirmation":"Visor wirklich von der Liste l\xf6schen?","delete-all-offline-confirmation":"Wirklich alle offline Visor von der Liste l\xf6schen?","delete-all-filtered-offline-confirmation":"Alle offline Visor, welche die Filterkriterien erf\xfcllen werden von der Liste gel\xf6scht. Wirklich fortfahren?","deleted":"Visor gel\xf6scht.","deleted-singular":"Ein offline Visor gel\xf6scht.","deleted-plural":"{{ number }} offline Visor gel\xf6scht.","no-visors-to-update":"Kein Visor zum Aktualiseren vorhanden.","filter-dialog":{"online":"Der Visor muss","label":"Der Bezeichner muss enthalten","key":"Der \xf6ffentliche Schl\xfcssel muss enthalten","dmsg":"Der DMSG Server Schl\xfcssel muss enthalten","online-options":{"any":"Online oder offline","online":"Online","offline":"Offline"}}},"edit-label":{"label":"Bezeichnung","done":"Bezeichnung gespeichert.","label-removed-warning":"Die Bezeichnung wurde gel\xf6scht."},"settings":{"title":"Einstellungen","password":{"initial-config-help":"Diese Option wird verwendet, um das erste Passwort festzulegen. Nachdem ein Passwort festgelegt wurde, ist es nicht m\xf6glich dieses, mit dieser Option zu \xe4ndern.","help":"Optionen um das Passwort zu \xe4ndern.","old-password":"Altes Passwort","new-password":"Neues Passwort","repeat-password":"Neues Passwort wiederholen","password-changed":"Passwort wurde ge\xe4ndert.","error-changing":"Fehler beim \xc4ndern des Passworts aufgetreten.","initial-config":{"title":"Erstes Passwort festlegen","password":"Passwort","repeat-password":"Passwort wiederholen","set-password":"Passwort \xe4ndern","done":"Passwort wurde ge\xe4ndert.","error":"Fehler. Es scheint ein erstes Passwort wurde schon gew\xe4hlt."},"errors":{"bad-old-password":"Altes Passwort falsch","old-password-required":"Altes Passwort wird ben\xf6tigt","new-password-error":"Passwort muss 6-64 Zeichen lang sein.","passwords-not-match":"Passw\xf6rter stimmen nicht \xfcberein.","default-password":"Das Standardpasswort darf nicht verwendet werden (1234)."}},"updater-config":{"open-link":"Aktualisierungseinstellungen anzeigen","open-confirmation":"Es wird nur erfahrenen Benutzern empfohlen, die Aktualisierungseinstellungen zu modifizieren. Wirkich fortfahren?","help":"Dieses Formular benutzen um Einstellungen f\xfcr die Aktualisierung zu \xfcberschreiben. Alle leeren Felder werden ignoriert. Die Einstellungen werden f\xfcr alle Aktualisierungen \xfcbernommen. Dies geschieht unabh\xe4ngig davon, welches Element aktualisiert wird. Bitte Vorsicht wahren.","channel":"Kanal","version":"Version","archive-url":"Archiv-URL","checksum-url":"Pr\xfcfsummen-URL","not-saved":"Die \xc4nderungen wurden noch nicht gespeichert.","save":"\xc4nderungen speichern","remove-settings":"Einstellungen l\xf6schen","saved":"Die benutzerdefinierten Einstellungen wurden gespeichert.","removed":"Die benutzerdefinierten Einstellungen wurden gel\xf6scht.","save-confirmation":"Wirklich die benutzerdefinierten Einstellungen anwenden?","remove-confirmation":"Wirklich die benutzerdefinierten Einstellungen l\xf6schen?"},"change-password":"Passwort \xe4ndern","refresh-rate":"Aktualisierungsintervall","refresh-rate-help":"Zeit, bis das System die Daten automatisch aktualisiert.","refresh-rate-confirmation":"Aktualisierungsintervall ge\xe4ndert.","seconds":"Sekunden"},"login":{"password":"Passwort","incorrect-password":"Falsches Passwort.","initial-config":"Erste Konfiguration"},"actions":{"menu":{"terminal":"Terminal","config":"Konfiguration","update":"Aktualisieren","reboot":"Neustart"},"reboot":{"confirmation":"Den Visor wirklich neustarten?","done":"Der Visor wird neu gestartet."},"terminal-options":{"full":"Terminal","simple":"Einfaches Terminal"},"terminal":{"title":"Terminal","input-start":"Skywire Terminal f\xfcr {{address}}","error":"Bei der Ausf\xfchrung des Befehls ist ein Fehler aufgetreten."}},"update":{"title":"Aktualisierung","error-title":"Error","processing":"Suche nach Aktualisierungen...","no-update":"Keine Aktualisierung vorhanden.
Installierte Version:","no-updates":"Keine neuen Aktualisierungen gefunden.","already-updating":"Einige Visor werden schon aktualisiert:","update-available":"Folgende Aktualisierungen wurden gefunden:","update-available-singular":"Folgende Aktualisierungen wurden f\xfcr einen Visor gefunden:","update-available-plural":"Folgende Aktualisierungen wurden f\xfcr {{ number }} Visor gefunden:","update-available-additional-singular":"Folgende zus\xe4tzliche Aktualisierungen f\xfcr einen Visor wurden gefunden:","update-available-additional-plural":"Folgende zus\xe4tzliche Aktualisierungen f\xfcr {{ number }} Visor wurden gefunden:","update-instructions":"\'Aktualisierungen installieren\' klicken um fortzufahren.","updating":"Die Aktualisierung wurde gestartet. Das Fenster kann erneut ge\xf6ffnet werden um den Fortschritt zu sehen:","version-change":"Von {{ currentVersion }} auf {{ newVersion }}","selected-channel":"Gew\xe4hlter Kanal:","downloaded-file-name-prefix":"Herunterladen: ","speed-prefix":"Geschwindigkeit: ","time-downloading-prefix":"Dauer: ","time-left-prefix":"Dauert ungef\xe4hr noch: ","starting":"Aktualisierung wird vorbereitet","finished":"Status Verbindung beendet","install":"Aktualisierungen installieren"},"apps":{"log":{"title":"Log","empty":"Im ausgew\xe4hlten Intervall sind keine Logs vorhanden","filter-button":"Log-Intervall:","filter":{"title":"Filter","filter":"Zeige generierte Logs","7-days":"der letzten 7 Tagen","1-month":"der letzten 30 Tagen","3-months":"der letzten 3 Monaten","6-months":"der letzten 6 Monaten","1-year":"des letzten Jahres","all":"Zeige alle"}},"apps-list":{"title":"Anwendungen","list-title":"Anwendungsliste","app-name":"Name","port":"Port","state":"Status","state-tooltip":"Aktueller Status","auto-start":"Auto-Start","empty":"Visor hat keine Anwendungen.","empty-with-filter":"Keine Anwendung erf\xfcllt die Filterkriterien","disable-autostart":"Autostart ausschalten","enable-autostart":"Autostart einschalten","autostart-disabled":"Autostart aus","autostart-enabled":"Autostart ein","unavailable-logs-error":"Kann Logs nicht zeigen, solange die Anwendung gestoppt ist.","filter-dialog":{"state":"Der Status muss sein","name":"Der Name muss enthalten","port":"Der Port muss enthalten","autostart":"Autostart muss sein","state-options":{"any":"L\xe4uft oder gestoppt","running":"L\xe4uft","stopped":"Gestoppt"},"autostart-options":{"any":"An oder Aus","enabled":"An","disabled":"Aus"}}},"vpn-socks-server-settings":{"socks-title":"Skysocks Einstellungen","vpn-title":"VPN-Server Einstellungen","new-password":"Neues Passwort (Um Passwort zu entfernen leer lassen)","repeat-password":"Passwort wiederholen","passwords-not-match":"Passw\xf6rter stimmen nicht \xfcberein.","secure-mode-check":"Sicherheitsmodus benutzen","secure-mode-info":"Wenn aktiv, erlaubt der Server kein Client/Server SSH und erlaubt kein Datenverkehr vom VPN-Client zum lokalen Netzwerk des Servers.","save":"Speichern","remove-passowrd-confirmation":"Kein Passwort eingegeben. Wirklich Passwort entfernen?","change-passowrd-confirmation":"Passwort wirklich \xe4ndern?","changes-made":"\xc4nderungen wurden gespeichert."},"vpn-socks-client-settings":{"socks-title":"Skysocks-Client Einstellungen","vpn-title":"VPN-Client Einstellungen","discovery-tab":"Suche","remote-visor-tab":"Manuelle Eingabe","history-tab":"Verlauf","settings-tab":"Einstellungen","use":"Diese Daten benutzen","change-note":"Notiz \xe4ndern","remove-entry":"Eintrag l\xf6schen","note":"Notiz:","note-entered-manually":"Manuell eingegeben","note-obtained":"Von Discovery-Service erhalten","key":"Schl\xfcssel:","port":"Port:","location":"Ort:","state-available":"Verf\xfcgbar","state-offline":"Offline","public-key":"Remote Visor \xf6ffentlicher Schl\xfcssel","password":"Passwort","password-history-warning":"Achtung: Das Passwort wird nicht im Verlauf gespeichert.","copy-pk-info":"\xd6ffentlichen Schl\xfcssel kopieren.","copied-pk-info":"\xd6ffentlicher Schl\xfcssel wurde kopiert","copy-pk-error":"Beim Kopieren des \xf6ffentlichen Schl\xfcssels ist ein Problem aufgetreten.","no-elements":"Derzeit k\xf6nnen keine Elemente angezeigt werden. Bitte sp\xe4ter versuchen.","no-elements-for-filters":"Keine Elemente, welche die Filterkriterien erf\xfcllen.","no-filter":"Es wurde kein Filter gew\xe4hlt.","click-to-change":"Zum \xc4ndern klicken","remote-key-length-error":"Der \xf6ffentliche Schl\xfcssel muss 66 Zeichen lang sein.","remote-key-chars-error":"Der \xf6ffentliche Schl\xfcssel darf nur hexadezimale Zeichen enthalten.","save":"Speichern","remove-from-history-confirmation":"Eintrag wirklich aus dem Verlauf l\xf6schen?","change-key-confirmation":"Wirklich den \xf6ffentlichen Schl\xfcssel des remote Visors \xe4ndern?","changes-made":"\xc4nderungen wurden gespeichert.","no-history":"Dieser Tab zeigt die letzten {{ number }} \xf6ffentlichen Schl\xfcssel, die benutzt wurden.","default-note-warning":"Die Standardnotiz wurde nicht benutzt.","pagination-info":"{{ currentElementsRange }} von {{ totalElements }}","killswitch-check":"Killswitch aktivieren","killswitch-info":"Wenn aktiv, werden alle Netzwerkverbindungen deaktiviert falls die Anwendung l\xe4uft aber der VPN Schutz unterbrochen wird (f\xfcr tempor\xe4re Fehler oder andere Probleme).","settings-changed-alert":"Die \xc4nderungen wurden noch nicht gespeichert.","save-settings":"Einstellungen speichern","change-note-dialog":{"title":"Notiz \xe4ndern","note":"Notiz"},"password-dialog":{"title":"Passwort eingeben","password":"Passwort","info":"Ein Passwort wird abgefragt, da bei der Erstellung des gew\xe4hlten Eintrags ein Passwort gesetzt wurde, aus Sicherheitsgr\xfcnden aber nicht gespeichert wurde. Das Passwort kann frei gelassen werden.","continue-button":"Fortfahren"},"filter-dialog":{"title":"Filter","country":"Das Land muss sein","any-country":"Jedes","location":"Der Ort muss enthalten","pub-key":"Der \xf6ffentliche Schl\xfcssel muss enthalten","apply":"Anwenden"}},"stop-app":"Stopp","start-app":"Start","view-logs":"Zeige Logs","settings":"Einstellungen","error":"Ein Fehler ist aufgetreten.","stop-confirmation":"Anwendung wirklich anhalten?","stop-selected-confirmation":"Ausgew\xe4hlte Anwendung wirklich anhalten?","disable-autostart-confirmation":"Auto-Start f\xfcr diese Anwendung wirklich ausschalten?","enable-autostart-confirmation":"Auto-Start f\xfcr diese Anwendung wirklich einschalten?","disable-autostart-selected-confirmation":"Auto-Start f\xfcr ausgew\xe4hlte Anwendungen wirklich ausschalten?","enable-autostart-selected-confirmation":"Auto-Start f\xfcr ausgew\xe4hlte Anwendungen wirklich einschalten","operation-completed":"Operation ausgef\xfchrt","operation-unnecessary":"Gew\xfcnschte Einstellungen schon aktiv.","status-running":"L\xe4uft","status-stopped":"Gestoppt","status-failed":"Fehler","status-running-tooltip":"Anwendung l\xe4uft","status-stopped-tooltip":"Anwendung gestoppt","status-failed-tooltip":"Ein Fehler ist aufgetreten. Log der Anwendung \xfcberpr\xfcfen."},"transports":{"title":"Transporte","remove-all-offline":"Alle offline Transporte l\xf6schen","remove-all-offline-confirmation":"Wirkliche alle offline Transporte l\xf6schen?","remove-all-filtered-offline-confirmation":"Alle offline Transporte, welche die Filterkriterien erf\xfcllen werden gel\xf6scht. Wirklich fortfahren?","info":"Verbindungen mit remote Skywire Visor, um lokalen Skywire Anwendungen zu erlauben mit diesen remote Visor zu kommunizieren.","list-title":"Transport-Liste","state":"Status","state-tooltip":"Aktueller Status","id":"ID","remote-node":"Remote","type":"Typ","create":"Transport erstellen","delete-confirmation":"Transport wirklich entfernen?","delete-selected-confirmation":"Ausgew\xe4hlte Transporte wirklich entfernen?","delete":"Transport entfernen","deleted":"Transport erfolgreich entfernt.","empty":"Visor hat keine Transporte.","empty-with-filter":"Kein Transport erf\xfcllt die gew\xe4hlten Filterkriterien.","statuses":{"online":"Online","online-tooltip":"Transport ist online","offline":"Offline","offline-tooltip":"Transport ist offline"},"details":{"title":"Details","basic":{"title":"Basis Info","state":"Status:","id":"ID:","local-pk":"Lokaler \xf6ffentlicher Schl\xfcssel:","remote-pk":"Remote \xf6ffentlicher Schl\xfcssel:","type":"Typ:"},"data":{"title":"Daten\xfcbertragung","uploaded":"Hochgeladen:","downloaded":"Heruntergeladen:"}},"dialog":{"remote-key":"Remote \xf6ffentlicher Schl\xfcssel:","label":"Bezeichnung (optional)","transport-type":"Transport-Typ","success":"Transport erstellt.","success-without-label":"Der Transport wurde erstellt, aber die Bezeichnung konnte nicht gespeichert werden.","errors":{"remote-key-length-error":"Der remote \xf6ffentliche Schl\xfcssel muss 66 Zeichen lang sein.","remote-key-chars-error":"Der remote \xf6ffentliche Schl\xfcssel darf nur hexadezimale Zeichen enthalten.","transport-type-error":"Ein Transport-Typ wird ben\xf6tigt."}},"filter-dialog":{"online":"Der Transport muss sein","id":"Die ID muss enthalten","remote-node":"Der remote Schl\xfcssel muss enthalten","online-options":{"any":"Online oder offline","online":"Online","offline":"Offline"}}},"routes":{"title":"Routen","info":"Netzwerkpfade zum Erreichen von remote Visor. Routen werden bei Bedarf automatisch generiert.","list-title":"Routen-Liste","key":"Schl\xfcssel","type":"Typ","source":"Quelle","destination":"Ziel","delete-confirmation":"Diese Route wirklich entfernen?","delete-selected-confirmation":"Ausgew\xe4hlte Routen wirklich entfernen?","delete":"Route entfernen","deleted":"Route erfolgreich entfernt.","empty":"Visor hat keine Routen.","empty-with-filter":"Keine Route erf\xfcllt die gew\xe4hlten Filterkriterien.","details":{"title":"Details","basic":{"title":"Basis Info","key":"Schl\xfcssel:","rule":"Regel:"},"summary":{"title":"Regel Zusammenfassung","keep-alive":"Keep alive:","type":"Typ:","key-route-id":"Schl\xfcssel-Route ID:"},"specific-fields-titles":{"app":"Anwendung","forward":"Weiterleitung","intermediary-forward":"Vermittelte Weiterleitung"},"specific-fields":{"route-id":"N\xe4chste Routen ID:","transport-id":"N\xe4chste Transport ID:","destination-pk":"Ziel \xf6ffentlicher Schl\xfcssel:","source-pk":"Quelle \xf6ffentlicher Schl\xfcssel:","destination-port":"Ziel Port:","source-port":"Quelle Port:"}},"filter-dialog":{"key":"Der Schl\xfcssel muss enthalten","type":"Der Typ muss sein","source":"Die Quelle muss enhalten","destination":"Das Ziel muss enthalten","any-type-option":"Egal"}},"copy":{"tooltip":"In Zwischenablage kopieren","tooltip-with-text":"{{ text }} (In Zwischenablage kopieren)","copied":"In Zwischenablage kopiert!"},"selection":{"select-all":"Alle ausw\xe4hlen","unselect-all":"Alle abw\xe4hlen","delete-all":"Alle ausgew\xe4hlten Elemente entfernen","start-all":"Starte ausgew\xe4hlte Anwendung","stop-all":"Stoppe ausgew\xe4hlte Anwendung","enable-autostart-all":"Auto-Start f\xfcr ausgew\xe4hlte Anwendungen einschalten","disable-autostart-all":"Auto-Start f\xfcr ausgew\xe4hlte Anwendungen ausschalten"},"refresh-button":{"seconds":"K\xfcrzlich aktualisiert","minute":"Vor einer Minute aktualisiert","minutes":"Vor {{ time }} Minuten aktualisiert","hour":"Vor einer Stunde aktualisiert","hours":"Vor {{ time }} Stunden aktualisert","day":"Vor einem Tag aktualisiert","days":"Vor {{ time }} Tagen aktualisert","week":"Vor einer Woche aktualisiert","weeks":"Vor {{ time }} Wochen aktualisert","error-tooltip":"Fehler beim Aktualiseren aufgetreten. Versuche erneut alle {{ time }} Sekunden..."},"view-all-link":{"label":"Zeige alle {{ number }} Elemente"},"paginator":{"first":"Erste","last":"Letzte","total":"Insgesamt: {{ number }} Seiten","select-page-title":"Seite ausw\xe4hlen"},"confirmation":{"header-text":"Best\xe4tigung","confirm-button":"Ja","cancel-button":"Nein","close":"Schlie\xdfen","error-header-text":"Fehler","done-header-text":"Fertig"},"language":{"title":"Sprache ausw\xe4hlen"},"tabs-window":{"title":"Tab wechseln"}}')}}]);
\ No newline at end of file
diff --git a/cmd/skywire-visor/static/7.72a6169da00a1ffee18d.js b/cmd/skywire-visor/static/7.72a6169da00a1ffee18d.js
deleted file mode 100644
index 1f558ed8b7..0000000000
--- a/cmd/skywire-visor/static/7.72a6169da00a1ffee18d.js
+++ /dev/null
@@ -1 +0,0 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[7],{amrp:function(e){e.exports=JSON.parse('{"common":{"save":"Save","cancel":"Cancel","downloaded":"Downloaded","uploaded":"Uploaded","loading-error":"There was an error getting the data. Retrying...","operation-error":"There was an error trying to complete the operation.","no-connection-error":"There is no internet connection or connection to the Hypervisor.","error":"Error:","refreshed":"Data refreshed.","options":"Options","logout":"Logout","logout-error":"Error logging out.","logout-confirmation":"Are you sure you want to log out?","time-in-ms":"{{ time }}ms.","time-in-segs":"{{ time }}s.","ok":"Ok","unknown":"Unknown","close":"Close","window-size-error":"The window is too narrow for the content."},"labeled-element":{"edit-label":"Edit label","remove-label":"Remove label","copy":"Copy","remove-label-confirmation":"Do you really want to remove the label?","unnamed-element":"Unnamed","unnamed-local-visor":"Local visor","local-element":"Local","tooltip":"Click to copy the entry or change the label","tooltip-with-text":"{{ text }} (Click to copy the entry or change the label)"},"labels":{"title":"Labels","info":"Labels you have entered to easily identify visors, transports and other elements, instead of having to read machine generated identifiers.","list-title":"Label list","label":"Label","id":"Element ID","type":"Type","delete-confirmation":"Are you sure you want to delete the label?","delete-selected-confirmation":"Are you sure you want to delete the selected labels?","delete":"Delete label","deleted":"Delete operation completed.","empty":"There aren\'t any saved labels.","empty-with-filter":"No label matches the selected filtering criteria.","filter-dialog":{"label":"The label must contain","id":"The id must contain","type":"The type must be","type-options":{"any":"Any","visor":"Visor","dmsg-server":"DMSG server","transport":"Transport"}}},"filters":{"filter-action":"Filter","filter-info":"Filter list.","press-to-remove":"(Press to remove the filters)","remove-confirmation":"Are you sure you want to remove the filters?"},"tables":{"title":"Order by","sorting-title":"Ordered by:","sort-by-value":"Value","sort-by-label":"Label","label":"(label)","inverted-order":"(inverted)"},"start":{"title":"Start"},"node":{"title":"Visor details","not-found":"Visor not found.","statuses":{"online":"Online","online-tooltip":"Visor is online.","partially-online":"Online with problems","partially-online-tooltip":"Visor is online but not all services are working. For more information, open the details page and check the \\"Health info\\" section.","offline":"Offline","offline-tooltip":"Visor is offline."},"details":{"node-info":{"title":"Visor Info","label":"Label:","public-key":"Public key:","ip":"IP:","dmsg-server":"DMSG server:","ping":"Ping:","node-version":"Visor version:","time":{"title":"Time online:","seconds":"a few seconds","minute":"1 minute","minutes":"{{ time }} minutes","hour":"1 hour","hours":"{{ time }} hours","day":"1 day","days":"{{ time }} days","week":"1 week","weeks":"{{ time }} weeks"}},"router-info":{"title":"Router Info","min-hops":"Min hops:","max-hops":"Max hops:","change-config-button":"Change configuration"},"node-health":{"title":"Health Info","status":"Status:","transport-discovery":"Transport discovery:","route-finder":"Route finder:","setup-node":"Setup node:","uptime-tracker":"Uptime tracker:","address-resolver":"Address resolver:","element-offline":"Offline"},"node-traffic-data":"Traffic data"},"tabs":{"info":"Info","apps":"Apps","routing":"Routing"},"error-load":"An error occurred while refreshing the data. Retrying..."},"router-config":{"title":"Router Configuration","info":"Here you can configure how many hops the connections must pass through other Skywire visors before reaching the final destination. NOTE: the changes will not affect the existing routes.","min-hops":"Min hops","save-config-button":"Save configuration","done":"Changes saved."},"nodes":{"title":"Visor list","dmsg-title":"DMSG","update-all":"Update all online visors","hypervisor":"Hypervisor","state":"State","state-tooltip":"Current state","label":"Label","key":"Key","dmsg-server":"DMSG server","ping":"Ping","hypervisor-info":"This visor is the current Hypervisor.","copy-key":"Copy key","copy-dmsg":"Copy DMSG server key","copy-data":"Copy data","view-node":"View visor","delete-node":"Remove visor","delete-all-offline":"Remove all offline visors","error-load":"An error occurred while refreshing the list. Retrying...","empty":"There aren\'t any visors connected to this hypervisor.","empty-with-filter":"No visor matches the selected filtering criteria.","delete-node-confirmation":"Are you sure you want to remove the visor from the list?","delete-all-offline-confirmation":"Are you sure you want to remove all offline visors from the list?","delete-all-filtered-offline-confirmation":"All offline visors satisfying the current filtering criteria will be removed from the list. Are you sure you want to continue?","deleted":"Visor removed.","deleted-singular":"1 offline visor removed.","deleted-plural":"{{ number }} offline visors removed.","no-visors-to-update":"There are no visors to update.","filter-dialog":{"online":"The visor must be","label":"The label must contain","key":"The public key must contain","dmsg":"The DMSG server key must contain","online-options":{"any":"Online or offline","online":"Online","offline":"Offline"}}},"edit-label":{"label":"Label","done":"Label saved.","label-removed-warning":"The label was removed."},"settings":{"title":"Settings","password":{"initial-config-help":"Use this option for setting the initial password. After a password has been set, it is not possible to use this option to modify it.","help":"Options for changing your password.","old-password":"Old password","new-password":"New password","repeat-password":"Repeat password","password-changed":"Password changed.","error-changing":"Error changing password.","initial-config":{"title":"Set initial password","password":"Password","repeat-password":"Repeat password","set-password":"Set password","done":"Password set. Please use it to access the system.","error":"Error. Please make sure you have not already set the password."},"errors":{"bad-old-password":"The provided old password is not correct.","old-password-required":"Old password is required.","new-password-error":"Password must be 6-64 characters long.","passwords-not-match":"Passwords do not match.","default-password":"Don\'t use the default password (1234)."}},"updater-config":{"open-link":"Show updater settings","open-confirmation":"The updater settings are for experienced users only. Are you sure you want to continue?","help":"Use this form for overriding the settings that will be used by the updater. All empty fields will be ignored. The settings will be used for all updating operations, no mater which element is being updated, so please be careful.","channel":"Channel","version":"Version","archive-url":"Archive URL","checksum-url":"Checksum URL","not-saved":"The changes have not been saved yet.","save":"Save changes","remove-settings":"Remove the settings","saved":"The custom settings have been saved.","removed":"The custom settings have been removed.","save-confirmation":"Are you sure you want to apply the custom settings?","remove-confirmation":"Are you sure you want to remove the custom settings?"},"change-password":"Change password","refresh-rate":"Refresh rate","refresh-rate-help":"Time the system waits to update the data automatically.","refresh-rate-confirmation":"Refresh rate changed.","seconds":"seconds"},"login":{"password":"Password","incorrect-password":"Incorrect password.","initial-config":"Configure initial launch"},"actions":{"menu":{"terminal":"Terminal","config":"Configuration","update":"Update","reboot":"Reboot","logs":"View logs"},"reboot":{"confirmation":"Are you sure you want to reboot the visor?","done":"The visor is restarting."},"terminal-options":{"full":"Full terminal","simple":"Simple terminal"},"terminal":{"title":"Terminal","input-start":"Skywire terminal for {{address}}","error":"Unexpected error while trying to execute the command."}},"update":{"title":"Update","error-title":"Error","processing":"Looking for updates...","no-update":"There is no update for the visor. The currently installed version is:","no-updates":"No new updates were found.","already-updating":"Some visors are already being updated:","update-available":"The following updates were found:","update-available-singular":"The following updates for 1 visor were found:","update-available-plural":"The following updates for {{ number }} visors were found:","update-available-additional-singular":"The following additional updates for 1 visor were found:","update-available-additional-plural":"The following additional updates for {{ number }} visors were found:","update-instructions":"Click the \'Install updates\' button to continue.","updating":"The update operation has been started, you can open this window again for checking the progress:","version-change":"From {{ currentVersion }} to {{ newVersion }}","selected-channel":"Selected channel:","downloaded-file-name-prefix":"Downloading: ","speed-prefix":"Speed: ","time-downloading-prefix":"Time downloading: ","time-left-prefix":"Aprox. time left: ","starting":"Preparing to update","finished":"Status connection finished","install":"Install updates"},"apps":{"log":{"title":"Log","empty":"There are no log messages for the selected time range.","filter-button":"Only showing logs generated since:","filter":{"title":"Filter","filter":"Only show logs generated since","7-days":"The last 7 days","1-month":"The last 30 days","3-months":"The last 3 months","6-months":"The last 6 months","1-year":"The last year","all":"Show all"}},"apps-list":{"title":"Applications","list-title":"Application list","app-name":"Name","port":"Port","state":"State","state-tooltip":"Current state","auto-start":"Auto start","empty":"Visor doesn\'t have any applications.","empty-with-filter":"No app matches the selected filtering criteria.","disable-autostart":"Disable autostart","enable-autostart":"Enable autostart","autostart-disabled":"Autostart disabled","autostart-enabled":"Autostart enabled","unavailable-logs-error":"Unable to show the logs while the app is not running.","filter-dialog":{"state":"The state must be","name":"The name must contain","port":"The port must contain","autostart":"The autostart must be","state-options":{"any":"Running or stopped","running":"Running","stopped":"Stopped"},"autostart-options":{"any":"Enabled or disabled","enabled":"Enabled","disabled":"Disabled"}}},"vpn-socks-server-settings":{"socks-title":"Skysocks Settings","vpn-title":"VPN-Server Settings","new-password":"New password (Leave empty to remove the password)","repeat-password":"Repeat password","passwords-not-match":"Passwords do not match.","secure-mode-check":"Use secure mode","secure-mode-info":"When active, the server doesn\'t allow client/server SSH and doesn\'t allow any traffic from VPN clients to the server local network.","save":"Save","remove-passowrd-confirmation":"You left the password field empty. Are you sure you want to remove the password?","change-passowrd-confirmation":"Are you sure you want to change the password?","changes-made":"The changes have been made."},"vpn-socks-client-settings":{"socks-title":"Skysocks-Client Settings","vpn-title":"VPN-Client Settings","discovery-tab":"Search","remote-visor-tab":"Enter manually","history-tab":"History","settings-tab":"Settings","use":"Use this data","change-note":"Change note","remove-entry":"Remove entry","note":"Note:","note-entered-manually":"Entered manually","note-obtained":"Obtained from the discovery service","key":"Key:","port":"Port:","location":"Location:","state-available":"Available","state-offline":"Offline","public-key":"Remote visor public key","password":"Password","password-history-warning":"Note: the password will not be saved in the history.","copy-pk-info":"Copy public key.","copied-pk-info":"The public key has been copied.","copy-pk-error":"There was a problem copying the public key.","no-elements":"Currently there are no elements to show. Please try again later.","no-elements-for-filters":"There are no elements that meet the filter criteria.","no-filter":"No filter has been selected","click-to-change":"Click to change","remote-key-length-error":"The public key must be 66 characters long.","remote-key-chars-error":"The public key must only contain hexadecimal characters.","save":"Save","remove-from-history-confirmation":"Are you sure you want to remove the entry from the history?","change-key-confirmation":"Are you sure you want to change the remote visor public key?","changes-made":"The changes have been made.","no-history":"This tab will show the last {{ number }} public keys used.","default-note-warning":"The default note has been used.","pagination-info":"{{ currentElementsRange }} of {{ totalElements }}","killswitch-check":"Activate killswitch","killswitch-info":"When active, all network connections will be disabled if the app is running but the VPN protection is interrupted (for temporary errors or any other problem). This avoids data leaks.","settings-changed-alert":" The changes have not been saved yet.","save-settings":"Save settings","change-note-dialog":{"title":"Change Note","note":"Note"},"password-dialog":{"title":"Enter Password","password":"Password","info":"You are being asked for a password because a password was set when the selected entry was created, but the it was not saved for security reasons. You can leave the password empty if needed.","continue-button":"Continue"},"filter-dialog":{"title":"Filters","country":"The country must be","any-country":"Any","location":"The location must contain","pub-key":"The public key must contain","apply":"Apply"}},"stop-app":"Stop","start-app":"Start","view-logs":"View logs","settings":"Settings","open":"Open","error":"An error has occured and it was not possible to perform the operation.","stop-confirmation":"Are you sure you want to stop the app?","stop-selected-confirmation":"Are you sure you want to stop the selected apps?","disable-autostart-confirmation":"Are you sure you want to disable autostart for the app?","enable-autostart-confirmation":"Are you sure you want to enable autostart for the app?","disable-autostart-selected-confirmation":"Are you sure you want to disable autostart for the selected apps?","enable-autostart-selected-confirmation":"Are you sure you want to enable autostart for the selected apps?","operation-completed":"Operation completed.","operation-unnecessary":"The selection already has the requested setting.","status-running":"Running","status-stopped":"Stopped","status-failed":"Failed","status-running-tooltip":"App is currently running","status-stopped-tooltip":"App is currently stopped","status-failed-tooltip":"Something went wrong. Check the app\'s messages for more information"},"transports":{"title":"Transports","remove-all-offline":"Remove all offline transports","remove-all-offline-confirmation":"Are you sure you want to remove all offline transports?","remove-all-filtered-offline-confirmation":"All offline transports satisfying the current filtering criteria will be removed. Are you sure you want to continue?","info":"Connections you have with remote Skywire visors, to allow local Skywire apps to communicate with apps running on those remote visors.","list-title":"Transport list","state":"State","state-tooltip":"Current state","id":"ID","remote-node":"Remote","type":"Type","create":"Create transport","delete-confirmation":"Are you sure you want to delete the transport?","delete-selected-confirmation":"Are you sure you want to delete the selected transports?","delete":"Delete transport","deleted":"Delete operation completed.","empty":"Visor doesn\'t have any transports.","empty-with-filter":"No transport matches the selected filtering criteria.","statuses":{"online":"Online","online-tooltip":"Transport is online","offline":"Offline","offline-tooltip":"Transport is offline"},"details":{"title":"Details","basic":{"title":"Basic info","state":"State:","id":"ID:","local-pk":"Local public key:","remote-pk":"Remote public key:","type":"Type:"},"data":{"title":"Data transmission","uploaded":"Uploaded data:","downloaded":"Downloaded data:"}},"dialog":{"remote-key":"Remote public key","label":"Identification name (optional)","transport-type":"Transport type","success":"Transport created.","success-without-label":"The transport was created, but it was not possible to save the label.","errors":{"remote-key-length-error":"The remote public key must be 66 characters long.","remote-key-chars-error":"The remote public key must only contain hexadecimal characters.","transport-type-error":"The transport type is required."}},"filter-dialog":{"online":"The transport must be","id":"The id must contain","remote-node":"The remote key must contain","online-options":{"any":"Online or offline","online":"Online","offline":"Offline"}}},"routes":{"title":"Routes","info":"Paths used to reach the remote visors to which transports have been established. Routes are automatically generated as needed.","list-title":"Route list","key":"Key","type":"Type","source":"Source","destination":"Destination","delete-confirmation":"Are you sure you want to delete the route?","delete-selected-confirmation":"Are you sure you want to delete the selected routes?","delete":"Delete route","deleted":"Delete operation completed.","empty":"Visor doesn\'t have any routes.","empty-with-filter":"No route matches the selected filtering criteria.","details":{"title":"Details","basic":{"title":"Basic info","key":"Key:","rule":"Rule:"},"summary":{"title":"Rule summary","keep-alive":"Keep alive:","type":"Rule type:","key-route-id":"Key route ID:"},"specific-fields-titles":{"app":"App fields","forward":"Forward fields","intermediary-forward":"Intermediary forward fields"},"specific-fields":{"route-id":"Next route ID:","transport-id":"Next transport ID:","destination-pk":"Destination public key:","source-pk":"Source public key:","destination-port":"Destination port:","source-port":"Source port:"}},"filter-dialog":{"key":"The key must contain","type":"The type must be","source":"The source must contain","destination":"The destination must contain","any-type-option":"Any"}},"copy":{"tooltip":"Click to copy","tooltip-with-text":"{{ text }} (Click to copy)","copied":"Copied!"},"selection":{"select-all":"Select all","unselect-all":"Unselect all","delete-all":"Delete all selected elements","start-all":"Start all selected apps","stop-all":"Stop all selected apps","enable-autostart-all":"Enable autostart for all selected apps","disable-autostart-all":"Disable autostart for all selected apps"},"refresh-button":{"seconds":"Updated a few seconds ago","minute":"Updated 1 minute ago","minutes":"Updated {{ time }} minutes ago","hour":"Updated 1 hour ago","hours":"Updated {{ time }} hours ago","day":"Updated 1 day ago","days":"Updated {{ time }} days ago","week":"Updated 1 week ago","weeks":"Updated {{ time }} weeks ago","error-tooltip":"There was an error updating the data. Retrying automatically every {{ time }} seconds..."},"view-all-link":{"label":"View all {{ number }} elements"},"paginator":{"first":"First","last":"Last","total":"Total: {{ number }} pages","select-page-title":"Select page"},"confirmation":{"header-text":"Confirmation","confirm-button":"Yes","cancel-button":"No","close":"Close","error-header-text":"Error","done-header-text":"Done"},"language":{"title":"Select language"},"tabs-window":{"title":"Change tab"},"vpn":{"title":"VPN Control Panel","start":"Start","servers":"Servers","settings":"Settings","starting-blocked-server-error":"Unable to connect to the selected server because it has been added to the blocked servers list.","unexpedted-error":"An unexpected error occurred and the operation could not be completed.","remote-access-title":"It appears that you are accessing the system remotely","remote-access-text":"This application only allows you to manage the VPN protection of the device on which it was installed. Changes made with it will not affect remote devices like the one you seem to be using. Also, the displayed IP data may be incorrect.","server-change":{"busy-error":"The system is busy. Please wait.","backend-error":"It was not possible to change the server. Please make sure the public key is correct and the VPN app is running.","already-selected-warning":"The selected server is already being used.","change-server-while-connected-confirmation":"The VPN protection will be interrupted while changing the server and some data may be transmitted unprotected during the process. Do you want to continue?","start-same-server-confirmation":"You had already selected that server. Do you want to connect to it?"},"error-page":{"text":"The VPN client app is not available.","more-info":"It was not possible to connect to the VPN client app. This may be due to a configuration error, an unexpected problem with the visor or because you used an invalid public key in the URL.","text-pk":"Invalid configuration.","more-info-pk":"The application cannot be started because you have not specified the visor public key.","text-storage":"Error saving data.","more-info-storage":"There has been a conflict when trying to save the data and the application has been closed to prevent errors. This could happen if you open the application in more than one tab or window.","text-pk-change":"Invalid operation.","more-info-pk-change":"Please use this application to manage only one VPN client."},"connection-info":{"state-connecting":"Connecting","state-connecting-info":"The VPN protection is being activated.","state-connected":"Connected","state-connected-info":"The VPN protection is on.","state-disconnecting":"Disconnecting","state-disconnecting-info":"The VPN protection is being deactivated.","state-reconnecting":"Reconnecting","state-reconnecting-info":"The VPN protection is being restored.","state-disconnected":"Disconnected","state-disconnected-info":"The VPN protection is off.","state-info":"Current connection status.","latency-info":"Current latency.","upload-info":"Upload speed.","download-info":"Download speed."},"status-page":{"start-title":"Start VPN","no-server":"No server selected!","disconnect":"Disconnect","disconnect-confirmation":"Are you sure you want to stop the VPN protection?","entered-manually":"Entered manually","upload-info":"Uploaded data stats.","download-info":"Downloaded data stats.","latency-info":"Latency stats.","total-data-label":"total","problem-connecting-error":"It was not possible to connect to the server. The server may be invalid or temporarily down.","problem-starting-error":"It was not possible to start the VPN. Please make sure the base VPN client app is running.","problem-stopping-error":"It was not possible to stop the VPN. Please make sure the base VPN client app is running.","generic-problem-error":"It was not possible to perform the operation. Please make sure the base VPN client app is running.","select-server-warning":"Please select a server first.","data":{"ip":"IP address:","ip-problem-info":"There was a problem trying to get the IP. Please verify it using an external service.","ip-country-problem-info":"There was a problem trying to get the country. Please verify it using an external service.","ip-refresh-info":"Refresh","ip-refresh-time-warning":"Please wait {{ seconds }} second(s) before refreshing the data.","ip-refresh-loading-warning":"Please wait for the previous operation to finish.","country":"Country:","server":"Server:","server-note":"Server note:","original-server-note":"Original server note:","local-pk":"Local visor public key:","remote-pk":"Remote visor public key:","unavailable":"Unavailable"}},"server-options":{"tooltip":"Options","connect-without-password":"Connect without password","connect-without-password-confirmation":"The connection will be made without the password. Are you sure you want to continue?","connect-using-password":"Connect using a password","edit-name":"Custom name","edit-label":"Custom note","make-favorite":"Make favorite","make-favorite-confirmation":"Are you sure you want to mark this server as favorite? It will be removed from the blocked list.","make-favorite-done":"Added to the favorites list.","remove-from-favorites":"Remove from favorites","remove-from-favorites-done":"Removed from the favorites list.","block":"Block server","block-done":"Added to the blocked list.","block-confirmation":"Are you sure you want to block this server? It will be removed from the favorites list.","block-selected-confirmation":"Are you sure you want to block the currently selected server? All connections will be closed.","block-selected-favorite-confirmation":"Are you sure you want to block the currently selected server? All connections will be closed and it will be removed from the favorites list.","unblock":"Unblock server","unblock-done":"Removed from the blocked list.","remove-from-history":"Remove from history","remove-from-history-confirmation":"Are you sure you want to remove this server from the history?","remove-from-history-done":"Removed from history.","edit-value":{"name-title":"Custom Name","note-title":"Custom Note","name-label":"Custom name","note-label":"Custom note","apply-button":"Apply","changes-made-confirmation":"The change has been made."}},"server-conditions":{"selected-info":"This is the currently selected server.","blocked-info":"This server is in the blocked list.","favorite-info":"This server is in the favorites list.","history-info":"This server is in the server history.","has-password-info":"A password was set for connecting with this server."},"server-list":{"date-small-table-label":"Date","date-info":"Last time you used this server.","country-small-table-label":"Country","country-info":"Country where the server is located.","name-small-table-label":"Name","location-small-table-label":"Location","public-key-small-table-label":"Pk","public-key-info":"Server public key.","congestion-rating-small-table-label":"Congestion rating","congestion-rating-info":"Rating of the server related to how congested it tends to be.","congestion-small-table-label":"Congestion","congestion-info":"Current server congestion.","latency-rating-small-table-label":"Latency rating","latency-rating-info":"Rating of the server related to how much latency it tends to have.","latency-small-table-label":"Latency","latency-info":"Current server latency.","hops-small-table-label":"Hops","hops-info":"How many hops are needed for connecting with the server.","note-small-table-label":"Note","note-info":"Note about the server.","gold-rating-info":"Gold","silver-rating-info":"Silver","bronze-rating-info":"Bronze","notes-info":"Custom note: {{ custom }} - Original note: {{ original }}","empty-discovery":"Currently there are no VPN servers to show. Please try again later.","empty-history":"There is no history to show.","empty-favorites":"There are no favorite servers to show.","empty-blocked":"There are no blocked servers to show.","empty-with-filter":"No VPN server matches the selected filtering criteria.","add-manually-info":"Add server manually.","current-filters":"Current filters (press to remove)","none":"None","unknown":"Unknown","tabs":{"public":"Public","history":"History","favorites":"Favorites","blocked":"Blocked"},"add-server-dialog":{"title":"Enter manually","pk-label":"Server public key","password-label":"Server password (if any)","name-label":"Server name (optional)","note-label":"Personal note (optional)","pk-length-error":"The public key must be 66 characters long.","pk-chars-error":"The public key must only contain hexadecimal characters.","use-server-button":"Use server"},"password-dialog":{"title":"Enter Password","password-if-any-label":"Server password (if any)","password-label":"Server password","continue-button":"Continue"},"filter-dialog":{"country":"The country must be","name":"The name must contain","location":"The location must contain","public-key":"The public key must contain","congestion-rating":"The congestion rating must be","latency-rating":"The latency rating must be","rating-options":{"any":"Any","gold":"Gold","silver":"Silver","bronze":"Bronze"},"country-options":{"any":"Any"}}},"settings-page":{"setting-small-table-label":"Setting","value-small-table-label":"Value","killswitch":"Killswitch","killswitch-info":"When active, all network connections will be disabled if the app is running but the VPN protection is interrupted (for temporary errors or any other problem). This avoids data leaks.","get-ip":"Get IP info","get-ip-info":"When active, the application will use external services to obtain information about the current IP.","data-units":"Data units","data-units-info":"Allows to select the units that will be used to display the data transmission statistics.","setting-on":"On","setting-off":"Off","working-warning":"The system is busy. Please wait for the previous operation to finish.","change-while-connected-confirmation":"The VPN protection will be interrupted while changing the setting. Do you want to continue?","data-units-modal":{"title":"Data Units","only-bits":"Bits for all stats","only-bytes":"Bytes for all stats","bits-speed-and-bytes-volume":"Bits for speed and bytes for volume (default)"}}}}')}}]);
\ No newline at end of file
diff --git a/cmd/skywire-visor/static/733.cc7b7ed566bcafed0765.js b/cmd/skywire-visor/static/733.cc7b7ed566bcafed0765.js
new file mode 100644
index 0000000000..f0afc95b43
--- /dev/null
+++ b/cmd/skywire-visor/static/733.cc7b7ed566bcafed0765.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkskywire_manager=self.webpackChunkskywire_manager||[]).push([[733],{5733:function(e){e.exports=JSON.parse('{"common":{"save":"Salvar","cancel":"Cancelar","downloaded":"Baixado","uploaded":"Enviado","loading-error":"Ocorreu um erro ao obter os dados. Tentando novamente...","operation-error":"Ocorreu um erro ao tentar concluir a opera\xe7\xe3o.","no-connection-error":"N\xe3o h\xe1 conex\xe3o com a Internet ou conex\xe3o com o Hypervisor.","error":"Erro:","refreshed":"Dados atualizados.","options":"Op\xe7\xf5es","logout":"Sair","logout-error":"Erro ao sair.","logout-confirmation":"Tem certeza que deseja sair?","time-in-ms":"{{ time }}ms","ok":"Ok","unknown":"Desconhecido","close":"Fechar"},"labeled-element":{"edit-label":"Editar r\xf3tulo","remove-label":"Remover r\xf3tulo","copy":"Copiar","remove-label-confirmation":"Tem certeza de que deseja remover o r\xf3tulo?","unnamed-element":"Sem nome","unnamed-local-visor":"Visor local","local-element":"Local","tooltip":"Clique para copiar a entrada ou alterar o r\xf3tulo","tooltip-with-text":"{{ text }} (Clique para copiar a entrada ou alterar o r\xf3tulo)"},"labels":{"title":"R\xf3tulos","info":"R\xf3tulos que voc\xea inseriu para identificar facilmente visores, transportes e outros elementos, em vez de ter que ler identificadores gerados por m\xe1quina.","list-title":"Lista de R\xf3tulos","label":"R\xf3tulo","id":"ID do elemento","type":"Tipo","delete-confirmation":"Tem certeza de que deseja excluir o r\xf3tulo?","delete-selected-confirmation":"Tem certeza de que deseja excluir os r\xf3tulos selecionados?","delete":"Apagar r\xf3tulo","deleted":"Opera\xe7\xe3o de exclus\xe3o conclu\xedda.","empty":"N\xe3o h\xe1 r\xf3tulos salvos.","empty-with-filter":"Nenhum r\xf3tulo corresponde aos crit\xe9rios de filtragem selecionados.","filter-dialog":{"label":"O r\xf3tulo deve conter","id":"O id deve conter","type":"O tipo deve ser","type-options":{"any":"Algum","visor":"Visor","dmsg-server":"Servidor DMSG","transport":"Transporte"}}},"filters":{"filter-action":"Filtro","press-to-remove":"(Pressione para remover os filtros)","remove-confirmation":"Tem certeza de que deseja remover os filtros?"},"tables":{"title":"Ordenar por","sorting-title":"Ordenado por:","sort-by-value":"Valor","sort-by-label":"R\xf3tulo","label":"(R\xf3tulo)","inverted-order":"(invertido)"},"start":{"title":"Come\xe7ar"},"node":{"title":"Detalhes do Visor","not-found":"Visor n\xe3o encontrado.","statuses":{"online":"Online","online-tooltip":"Visor est\xe1 online.","partially-online":"Online com problemas","partially-online-tooltip":"O Visor est\xe1 online, mas nem todos os servi\xe7os est\xe3o funcionando. Para mais informa\xe7\xf5es, abra a p\xe1gina de detalhes e verifique a se\xe7\xe3o \\"Informa\xe7\xf5es de sa\xfade\\".","offline":"Offline","offline-tooltip":"Visor est\xe1 offline."},"details":{"node-info":{"title":"Informa\xe7\xe3o do Visor","label":"R\xf3tulo:","public-key":"Chave p\xfablica:","port":"Porta:","dmsg-server":"Servidor DMSG:","ping":"Ping:","node-version":"Vers\xe3o do Visor:","time":{"title":"Tempo online:","seconds":"alguns segundos","minute":"1 minuto","minutes":"{{ time }} minutos","hour":"1 hora","hours":"{{ time }} horas","day":"1 dia","days":"{{ time }} dias","week":"1 semana","weeks":"{{ time }} semanas"}},"node-health":{"title":"Informa\xe7\xe3o de sa\xfade","status":"Status:","transport-discovery":"Descoberta de transporte:","route-finder":"Localizador de rota:","setup-node":"Configura\xe7\xe3o de N\xf3:","uptime-tracker":"Rastreador de tempo de atividade:","address-resolver":"Resolvedor de endere\xe7os:","element-offline":"Offline"},"node-traffic-data":"Tr\xe1fego de dados"},"tabs":{"info":"Informa\xe7\xe3o","apps":"Aplicativos","routing":"Encaminhamento"},"error-load":"Ocorreu um erro ao atualizar os dados. Tentando novamente..."},"nodes":{"title":"Lista de Visor","dmsg-title":"DMSG","update-all":"Atualizar todas as Visores","hypervisor":"Hypervisor","state":"Estado","state-tooltip":"Estado atual","label":"R\xf3tulo","key":"Chave","dmsg-server":"Servidor DMSG","ping":"Ping","hypervisor-info":"Este visor \xe9 o hipervisor atual.","copy-key":"Copiar chave","copy-dmsg":"Copiar chave do servidor DMSG","copy-data":"Copiar dados","view-node":"Ver visor","delete-node":"Remover visor","delete-all-offline":"Remover todos visores offline","error-load":"Ocorreu um erro ao atualizar a lista. Tentando novamente...","empty":"N\xe3o h\xe1 visores conectados a este hipervisor.","empty-with-filter":"Nenhum visor corresponde aos crit\xe9rios de filtragem selecionados.","delete-node-confirmation":"Tem certeza de que deseja remover o visor da lista?","delete-all-offline-confirmation":"Tem certeza de que deseja remover todas as visores offline da lista?","delete-all-filtered-offline-confirmation":"Todos os visores offline que satisfa\xe7am os crit\xe9rios de filtragem atuais ser\xe3o removidos da lista. Voc\xea tem certeza que quer continuar?","deleted":"Visor removido.","deleted-singular":"1 visor offline removido.","deleted-plural":"{{ number }} visores offline removidos.","no-visors-to-update":"N\xe3o h\xe1 visores para atualizar.","filter-dialog":{"online":"O visor deve ser","label":"O r\xf3tulo deve conter","key":"A chave p\xfablica deve conter","dmsg":"A chave do servidor DMSG deve conter","online-options":{"any":"Online ou offline","online":"Online","offline":"Offline"}}},"edit-label":{"label":"R\xf3tulo","done":"R\xf3tulo salvo.","label-removed-warning":"O r\xf3tulo foi removido."},"settings":{"title":"Defini\xe7\xf5es","password":{"initial-config-help":"Use esta op\xe7\xe3o para definir a senha inicial. Depois de definir uma senha, n\xe3o \xe9 poss\xedvel usar esta op\xe7\xe3o para modific\xe1-la.","help":"Op\xe7\xf5es para alterar sua senha.","old-password":"Senha Antiga","new-password":"Nova Senha","repeat-password":"Repita a senha","password-changed":"Senha alterada.","error-changing":"Erro ao alterar a senha.","initial-config":{"title":"Definir senha inicial","password":"Senha","repeat-password":"Repita a senha","set-password":"Definir senha","done":"Senha definida. Use-a para acessar o sistema.","error":"Erro. Certifique-se de que ainda n\xe3o definiu a senha."},"errors":{"bad-old-password":"A senha antiga fornecida n\xe3o est\xe1 correta.","old-password-required":"A senha antiga \xe9 necess\xe1ria.","new-password-error":"A senha deve ter de 6 a 64 caracteres.","passwords-not-match":"As senhas n\xe3o coincidem.","default-password":"N\xe3o use a senha padr\xe3o (1234)."}},"updater-config":{"open-link":"Mostrar configura\xe7\xf5es do atualizador","open-confirmation":"As configura\xe7\xf5es do atualizador s\xe3o apenas para usu\xe1rios experientes. Voc\xea tem certeza que quer continuar?","help":"Use este formul\xe1rio para substituir as configura\xe7\xf5es que ser\xe3o usadas pelo atualizador. Todos os campos vazios ser\xe3o ignorados. As configura\xe7\xf5es ser\xe3o usadas para todas as opera\xe7\xf5es de atualiza\xe7\xe3o, independentemente de qual elemento est\xe1 sendo atualizado, portanto, tome cuidado.","channel":"Canal","version":"Vers\xe3o","archive-url":"URL do arquivo","checksum-url":"URL do Checksum ","not-saved":"As altera\xe7\xf5es ainda n\xe3o foram salvas.","save":"Salvar altera\xe7\xf5es","remove-settings":"Remover as configura\xe7\xf5es","saved":"As configura\xe7\xf5es personalizadas foram salvas.","removed":"As configura\xe7\xf5es personalizadas foram removidas.","save-confirmation":"Tem certeza de que deseja aplicar as configura\xe7\xf5es personalizadas?","remove-confirmation":"Tem certeza de que deseja remover as configura\xe7\xf5es personalizadas?"},"change-password":"Mudar senha","refresh-rate":"Taxa de atualiza\xe7\xe3o","refresh-rate-help":"Tempo que o sistema espera para atualizar os dados automaticamente.","refresh-rate-confirmation":"Taxa de atualiza\xe7\xe3o alterada.","seconds":"segundos"},"login":{"password":"Senha","incorrect-password":"Senha incorreta.","initial-config":"Configurar a inicializa\xe7\xe3o inicial"},"actions":{"menu":{"terminal":"Terminal","config":"Configura\xe7\xe3o","update":"Atualizar","reboot":"Reiniciar"},"reboot":{"confirmation":"Tem certeza de que deseja reiniciar o visor?","done":"O visor est\xe1 reiniciando."},"terminal-options":{"full":"Terminal completo","simple":"Terminal simples"},"terminal":{"title":"Terminal","input-start":"Terminal Skywire para {{address}}","error":"Erro inesperado ao tentar executar o comando."}},"update":{"title":"Atualizar","error-title":"Erro","processing":"Procurando por atualiza\xe7\xf5es...","no-update":"N\xe3o h\xe1 atualiza\xe7\xe3o para o visor. A vers\xe3o atualmente instalada \xe9:","no-updates":"Nenhuma nova atualiza\xe7\xe3o foi encontrada.","already-updating":"Algumas visores j\xe1 est\xe3o sendo atualizadas:","update-available":"As seguintes atualiza\xe7\xf5es foram encontradas:","update-available-singular":"As seguintes atualiza\xe7\xf5es para 1 visor foram encontradas:","update-available-plural":"As seguintes atualiza\xe7\xf5es para visores {{ number }} foram encontradas:","update-available-additional-singular":"As seguintes atualiza\xe7\xf5es adicionais para 1 visor foram encontradas:","update-available-additional-plural":"As seguintes atualiza\xe7\xf5es adicionais para visores {{ number }} foram encontradas:","update-instructions":"Clique no bot\xe3o \'Instalar atualiza\xe7\xf5es\' para continuar.","updating":"A opera\xe7\xe3o de atualiza\xe7\xe3o foi iniciada, voc\xea pode abrir esta janela novamente para verificar o andamento:","version-change":"De {{ currentVersion }} para {{ newVersion }}","selected-channel":"Canal selecionado:","downloaded-file-name-prefix":"Baixando: ","speed-prefix":"Velocidade: ","time-downloading-prefix":"Tempo de download: ","time-left-prefix":"Tempo restante (aprox.): ","starting":"Preparando para atualizar","finished":"Conex\xe3o de status finalizada","install":"Instalar atualiza\xe7\xf5es"},"apps":{"log":{"title":"Registro","empty":"N\xe3o h\xe1 mensagens de registro para o intervalo de tempo selecionado.","filter-button":"Mostrando apenas os registros gerados desde:","filter":{"title":"Filtro","filter":"Mostrar apenas os registros gerados desde","7-days":"\xdaltimos 7 dias","1-month":"\xdaltimos 30 dias","3-months":"\xdaltimos 03 meses","6-months":"\xdaltimos 06 meses","1-year":"\xdaltimo ano","all":"Mostrar todos"}},"apps-list":{"title":"Aplicativos","list-title":"Lista de aplicativos","app-name":"Nome","port":"Porta","state":"Estado","state-tooltip":"Estado atual","auto-start":"Inicializa\xe7\xe3o automaticamente","empty":"Visor n\xe3o tem nenhum aplicativo.","empty-with-filter":"Nenhum aplicativo corresponde aos crit\xe9rios de filtragem selecionados.","disable-autostart":"Desativar inicializa\xe7\xe3o autom\xe1tica","enable-autostart":"Habilitar inicializa\xe7\xe3o autom\xe1tica","autostart-disabled":"Inicializa\xe7\xe3o autom\xe1tica desativada","autostart-enabled":"Inicializa\xe7\xe3o autom\xe1tica ativada","unavailable-logs-error":"N\xe3o \xe9 poss\xedvel mostrar os logs enquanto o aplicativo n\xe3o est\xe1 em execu\xe7\xe3o.","filter-dialog":{"state":"O estado deve ser","name":"O nome deve conter","port":"A porta deve conter","autostart":"A inicializa\xe7\xe3o autom\xe1tica deve ser","state-options":{"any":"Executando ou parado","running":"Executando","stopped":"Parado"},"autostart-options":{"any":"Habilitado ou desabilitado","enabled":"Habilitado","disabled":"Desabilitado"}}},"vpn-socks-server-settings":{"socks-title":"Configura\xe7\xf5es do Skysocks","vpn-title":"Configura\xe7\xf5es do servidor VPN","new-password":"Nova senha (deixe em branco para remover a senha)","repeat-password":"Repita a senha","passwords-not-match":"As senhas n\xe3o coincidem.","secure-mode-check":"Use o modo seguro","secure-mode-info":"Quando ativo, o servidor n\xe3o permite SSH cliente / servidor e n\xe3o permite nenhum tr\xe1fego de clientes VPN para a rede local do servidor.","save":"Salvar","remove-passowrd-confirmation":"Voc\xea deixou o campo de senha vazio. Tem certeza de que deseja remover a senha?","change-passowrd-confirmation":"Tem certeza que deseja alterar a senha?","changes-made":"As mudan\xe7as foram feitas."},"vpn-socks-client-settings":{"socks-title":"Configura\xe7\xf5es do cliente Skysocks","vpn-title":"Configura\xe7\xf5es de cliente VPN","discovery-tab":"Procurar","remote-visor-tab":"Inserir manualmente","history-tab":"Hist\xf3rico","settings-tab":"Configura\xe7\xf5es","use":"Use estes dados","change-note":"Mudar nota","remove-entry":"Remover entrada","note":"Nota:","note-entered-manually":"Inserida manualmente","note-obtained":"Obtida do servi\xe7o de descoberta","key":"Chave:","port":"Porta:","location":"Localiza\xe7\xe3o:","state-available":"Dispon\xedvel","state-offline":"Offline","public-key":"Chave p\xfablica do visor remoto","password":"Senha","password-history-warning":"Nota: a senha n\xe3o ser\xe1 salva no hist\xf3rico.","copy-pk-info":"Copiar chave p\xfablica.","copied-pk-info":"A chave p\xfablica foi copiada.","copy-pk-error":"Ocorreu um problema ao copiar a chave p\xfablica.","no-elements":"Atualmente n\xe3o h\xe1 elementos para mostrar. Por favor, tente novamente mais tarde.","no-elements-for-filters":"N\xe3o h\xe1 elementos que atendam aos crit\xe9rios do filtro.","no-filter":"Nenhum filtro foi selecionado","click-to-change":"Clique para mudar","remote-key-length-error":"A chave p\xfablica deve ter 66 caracteres.","remote-key-chars-error":"A chave p\xfablica deve conter apenas caracteres hexadecimais.","save":"Salvar","remove-from-history-confirmation":"Tem certeza de que deseja remover a entrada do hist\xf3rico?","change-key-confirmation":"Tem certeza de que deseja alterar a chave p\xfablica do visor remoto?","changes-made":"As mudan\xe7as foram feitas.","no-history":"Esta guia mostrar\xe1 as \xfaltimas {{ number }} chaves p\xfablicas usadas.","default-note-warning":"A nota padr\xe3o foi usada.","pagination-info":"{{ currentElementsRange }} de {{ totalElements }}","killswitch-check":"Ativar killswitch","killswitch-info":"Quando ativo, todas as conex\xf5es de rede ser\xe3o desativadas se o aplicativo estiver em execu\xe7\xe3o, exceto a prote\xe7\xe3o VPN for interrompida (por erros tempor\xe1rios ou qualquer outro problema).","settings-changed-alert":"As altera\xe7\xf5es ainda n\xe3o foram salvas.","save-settings":"Salvar configura\xe7\xf5es","change-note-dialog":{"title":"Mudar nota","note":"Nota"},"password-dialog":{"title":"Digite a senha","password":"Senha","info":"Uma senha est\xe1 sendo solicitada porque uma senha foi definida quando a entrada selecionada foi criada, mas n\xe3o foi salva por motivos de seguran\xe7a. Voc\xea pode deixar a senha em branco, se necess\xe1rio.","continue-button":"Continuar"},"filter-dialog":{"title":"Filtros","country":"O pa\xeds deve ser","any-country":"Qualquer um","location":"O local deve conter","pub-key":"A chave p\xfablica deve conter","apply":"Aplicar"}},"stop-app":"Parar","start-app":"Iniciar","view-logs":"Ver registros","settings":"Configura\xe7\xf5es","error":"Ocorreu um erro e n\xe3o foi poss\xedvel realizar a opera\xe7\xe3o.","stop-confirmation":"Tem certeza de que deseja parar o aplicativo?","stop-selected-confirmation":"Tem certeza de que deseja parar os aplicativos selecionados?","disable-autostart-confirmation":"Tem certeza de que deseja desativar a inicializa\xe7\xe3o autom\xe1tica do aplicativo?","enable-autostart-confirmation":"Tem certeza de que deseja ativar a inicializa\xe7\xe3o autom\xe1tica do aplicativo?","disable-autostart-selected-confirmation":"Tem certeza de que deseja desativar o in\xedcio autom\xe1tico para os aplicativos selecionados?","enable-autostart-selected-confirmation":"Tem certeza de que deseja ativar o in\xedcio autom\xe1tico para os aplicativos selecionados?","operation-completed":"Opera\xe7\xe3o conclu\xedda.","operation-unnecessary":"A sele\xe7\xe3o j\xe1 possui a configura\xe7\xe3o solicitada.","status-running":"Executando","status-stopped":"Parado","status-failed":"Fracassado","status-running-tooltip":"O aplicativo est\xe1 em execu\xe7\xe3o","status-stopped-tooltip":"O aplicativo est\xe1 parado no momento","status-failed-tooltip":"Algo deu errado. Verifique as mensagens do aplicativo para obter mais informa\xe7\xf5es"},"transports":{"title":"Transportes","remove-all-offline":"Remover todos os transportes offline","remove-all-offline-confirmation":"Tem certeza de que deseja remover todos os transportes offline?","remove-all-filtered-offline-confirmation":"Todos os transportes off-line que atendem aos crit\xe9rios de filtragem atuais ser\xe3o removidos. Tem certeza de que deseja continuar?","info":"Conex\xf5es que voc\xea tem com visores Skywire remotos, para permitir que aplicativos Skywire locais se comuniquem com aplicativos executados nesses visores remotos.","list-title":"Lista de transporte","state":"Estado","state-tooltip":"Estado atual","id":"ID","remote-node":"Remoto","type":"Tipo","create":"Criar transporte","delete-confirmation":"Tem certeza que deseja excluir o transporte?","delete-selected-confirmation":"Tem certeza que deseja excluir os transportes selecionados?","delete":"Excluir transporte","deleted":"Opera\xe7\xe3o de exclus\xe3o conclu\xedda.","empty":"Visor n\xe3o tem transportes.","empty-with-filter":"Nenhum transporte corresponde aos crit\xe9rios de filtragem selecionados.","statuses":{"online":"Online","online-tooltip":"Transporte est\xe1 online","offline":"Offline","offline-tooltip":"Transporte est\xe1 offline"},"details":{"title":"Detalhes","basic":{"title":"Informa\xe7\xe3o b\xe1sica","state":"Estado:","id":"ID:","local-pk":"Chave p\xfablica local:","remote-pk":"Chave p\xfablica remota:","type":"Tipo:"},"data":{"title":"Transmiss\xe3o de dados","uploaded":"Dados carregados:","downloaded":"Dados baixados:"}},"dialog":{"remote-key":"Chave p\xfablica remota","label":"Nome de identifica\xe7\xe3o (opcional)","transport-type":"Tipo de transporte","success":"Transporte criado.","success-without-label":"O transporte foi criado, mas n\xe3o foi poss\xedvel salvar a etiqueta.","errors":{"remote-key-length-error":"A chave p\xfablica remota deve ter 66 caracteres.","remote-key-chars-error":"A chave p\xfablica remota deve conter apenas caracteres hexadecimais.","transport-type-error":"O tipo de transporte \xe9 obrigat\xf3rio."}},"filter-dialog":{"online":"O transporte deve ser","id":"O id deve conter","remote-node":"A chave remota deve conter","online-options":{"any":"Online ou offline","online":"Online","offline":"Offline"}}},"routes":{"title":"Rotas","info":"Caminhos usados para alcan\xe7ar os visores remotos para os quais os transportes foram estabelecidos. As rotas s\xe3o geradas automaticamente conforme necess\xe1rio.","list-title":"Lista de rotas","key":"Chave","type":"Tipo","source":"Fonte","destination":"Destino","delete-confirmation":"Tem certeza que deseja excluir a rota?","delete-selected-confirmation":"Tem certeza que deseja excluir as rotas selecionadas?","delete":"Excluir rota","deleted":"Opera\xe7\xe3o de exclus\xe3o conclu\xedda.","empty":"Visor n\xe3o tem nenhuma rota.","empty-with-filter":"Nenhuma rota corresponde aos crit\xe9rios de filtragem selecionados.","details":{"title":"Detalhes","basic":{"title":"Informa\xe7\xe3o b\xe1sica","key":"Chave:","rule":"Regras:"},"summary":{"title":"Resumo da regra","keep-alive":"Ativo:","type":"Tipo de regra:","key-route-id":"ID de rota chave:"},"specific-fields-titles":{"app":"Campos de aplicativos","forward":"Campos de encaminhamento","intermediary-forward":"Campos intermedi\xe1rios de encaminhamento"},"specific-fields":{"route-id":"Pr\xf3ximo ID de rota:","transport-id":"Pr\xf3ximo ID de transporte:","destination-pk":"Chave p\xfablica de destino:","source-pk":"Chave p\xfablica de origem:","destination-port":"Porta de destino:","source-port":"Porta de origem:"}},"filter-dialog":{"key":"A chave deve conter","type":"O tipo deve ser","source":"A fonte deve conter","destination":"O destino deve conter","any-type-option":"Qualquer uma"}},"copy":{"tooltip":"Clique para copiar","tooltip-with-text":"{{ text }} (Clique para copiar)","copied":"Copiado!"},"selection":{"select-all":"Selecionar tudo","unselect-all":"Desmarque todos","delete-all":"Excluir todos os elementos selecionados","start-all":"Iniciar todos os aplicativos selecionados","stop-all":"Parar todos os aplicativos selecionados","enable-autostart-all":"Habilitar inicializa\xe7\xe3o autom\xe1tica para todos os aplicativos selecionados","disable-autostart-all":"Desativar inicializa\xe7\xe3o autom\xe1tica para todos os aplicativos selecionados"},"refresh-button":{"seconds":"Atualizado alguns segundos atr\xe1s","minute":"Atualizado 1 minuto atr\xe1s","minutes":"Atualizado {{ time }} minutos atr\xe1s","hour":"Atualizado 1 hora atr\xe1s","hours":"Atualizado {{ time }} horas atr\xe1s","day":"Atualizado 1 dia atr\xe1s","days":"Atualizado {{ time }} dias atr\xe1s","week":"Atualizado 1 semana atr\xe1s","weeks":"Atualizado {{ time }} semanas atr\xe1s","error-tooltip":"Ocorreu um erro ao atualizar os dados. Tentando novamente a cada {{ time }} segundos automaticamente..."},"view-all-link":{"label":"Ver todos os elementos {{ number }}"},"paginator":{"first":"Primeira","last":"\xdaltima","total":"Total: {{ number }} p\xe1ginas","select-page-title":"Selecione a p\xe1gina"},"confirmation":{"header-text":"Confirma\xe7\xe3o","confirm-button":"Sim","cancel-button":"N\xe3o","close":"Fechar","error-header-text":"Erro","done-header-text":"Feito"},"language":{"title":"Selecione o idioma"},"tabs-window":{"title":"Alterar guia"}}')}}]);
\ No newline at end of file
diff --git a/cmd/skywire-visor/static/8.2df6eecb0737fbac3a92.js b/cmd/skywire-visor/static/8.2df6eecb0737fbac3a92.js
deleted file mode 100644
index b619e52e67..0000000000
--- a/cmd/skywire-visor/static/8.2df6eecb0737fbac3a92.js
+++ /dev/null
@@ -1 +0,0 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[8],{"ZF/7":function(e){e.exports=JSON.parse('{"common":{"save":"Guardar","cancel":"Cancelar","downloaded":"Recibido","uploaded":"Enviado","loading-error":"Hubo un error obteniendo los datos. Reintentando...","operation-error":"Hubo un error al intentar completar la operaci\xf3n.","no-connection-error":"No hay conexi\xf3n a Internet o conexi\xf3n con el hipervisor.","error":"Error:","refreshed":"Datos refrescados.","options":"Opciones","logout":"Cerrar sesi\xf3n","logout-error":"Error cerrando la sesi\xf3n.","logout-confirmation":"Are you sure you want to log out?","time-in-ms":"{{ time }}ms.","time-in-segs":"{{ time }}s.","ok":"Ok","unknown":"Desconocido","close":"Cerrar","window-size-error":"La ventana es demasiado estrecha para el contenido."},"labeled-element":{"edit-label":"Editar etiqueta","remove-label":"Remover etiqueta","copy":"Copiar","remove-label-confirmation":"\xbfRealmente desea eliminar la etiqueta?","unnamed-element":"Sin nombre","unnamed-local-visor":"Visor local","local-element":"Local","tooltip":"Haga clic para copiar la entrada o cambiar la etiqueta","tooltip-with-text":"{{ text }} (Haga clic para copiar la entrada o cambiar la etiqueta)"},"labels":{"title":"Etiquetas","info":"Etiquetas que ha introducido para identificar f\xe1cilmente visores, transportes y otros elementos, en lugar de tener que leer identificadores generados por una m\xe1quina.","list-title":"Lista de etiquetas","label":"Etiqueta","id":"ID del elemento","type":"Tipo","delete-confirmation":"\xbfSeguro que desea borrar la etiqueta?","delete-selected-confirmation":"\xbfSeguro que desea borrar las etiquetas seleccionados?","delete":"Borrar etiqueta","deleted":"Operaci\xf3n de borrado completada.","empty":"No hay etiquetas guardadas.","empty-with-filter":"Ninguna etiqueta coincide con los criterios de filtrado seleccionados.","filter-dialog":{"label":"La etiqueta debe contener","id":"El id debe contener","type":"El tipo debe ser","type-options":{"any":"Cualquiera","visor":"Visor","dmsg-server":"Servidor DMSG","transport":"Transporte"}}},"filters":{"filter-action":"Filtrar","filter-info":"Lista de filtros.","press-to-remove":"(Presione para remover los filtros)","remove-confirmation":"\xbfSeguro que desea remover los filtros?"},"tables":{"title":"Ordenar por","sorting-title":"Ordenado por:","sort-by-value":"Valor","sort-by-label":"Etiqueta","label":"(etiqueta)","inverted-order":"(invertido)"},"start":{"title":"Inicio"},"node":{"title":"Detalles del visor","not-found":"Visor no encontrado.","statuses":{"online":"Online","online-tooltip":"El visor se encuentra online.","partially-online":"Online con problemas","partially-online-tooltip":"El visor se encuentra online pero no todos los servicios est\xe1n funcionando. Para m\xe1s informaci\xf3n, abra la p\xe1gina de detalles y consulte la secci\xf3n \\"Informaci\xf3n de salud\\".","offline":"Offline","offline-tooltip":"El visor se encuentra offline."},"details":{"node-info":{"title":"Informaci\xf3n del visor","label":"Etiqueta:","public-key":"Llave p\xfablica:","ip":"IP:","dmsg-server":"Servidor DMSG:","ping":"Ping:","node-version":"Versi\xf3n del visor:","time":{"title":"Tiempo online:","seconds":"unos segundos","minute":"1 minuto","minutes":"{{ time }} minutos","hour":"1 hora","hours":"{{ time }} horas","day":"1 d\xeda","days":"{{ time }} d\xedas","week":"1 semana","weeks":"{{ time }} semanas"}},"router-info":{"title":"Informaci\xf3n del Enrutador","min-hops":"Saltos m\xednimos:","max-hops":"Saltos m\xe1ximos:","change-config-button":"Cambiar configuraci\xf3n"},"node-health":{"title":"Informaci\xf3n de Salud","status":"Estatus:","transport-discovery":"Transport discovery:","route-finder":"Route finder:","setup-node":"Setup node:","uptime-tracker":"Uptime tracker:","address-resolver":"Address resolver:","element-offline":"Offline"},"node-traffic-data":"Datos de tr\xe1fico"},"tabs":{"info":"Info","apps":"Apps","routing":"Enrutamiento"},"error-load":"Hubo un error al intentar refrescar los datos. Reintentando..."},"router-config":{"title":"Configuraci\xf3n del Enrutador","info":"Aqu\xed podr\xe1 configurar cuantos saltos la conexi\xf3n deber\xe1 realizar a trav\xe9s de otros visores de Skywire antes de alcanzar el destino final. NOTA: los cambios no afectar\xe1n a las rutas ya existentes.","min-hops":"Saltos m\xednimos","save-config-button":"Guardar configuraci\xf3n","done":"Cambios guardados."},"nodes":{"title":"Lista de visores","dmsg-title":"DMSG","update-all":"Actualizar todos los visores online","hypervisor":"Hypervisor","state":"Estado","state-tooltip":"Estado actual","label":"Etiqueta","key":"Llave","dmsg-server":"Servidor DMSG","ping":"Ping","hypervisor-info":"Este visor es el Hypervisor actual.","copy-key":"Copiar llave","copy-dmsg":"Copiar llave DMSG","copy-data":"Copiar datos","view-node":"Ver visor","delete-node":"Remover visor","delete-all-offline":"Remover todos los visores offline","error-load":"Hubo un error al intentar refrescar la lista. Reintentando...","empty":"No hay ning\xfan visor conectado a este hypervisor.","empty-with-filter":"Ningun visor coincide con los criterios de filtrado seleccionados.","delete-node-confirmation":"\xbfSeguro que desea remover el visor de la lista?","delete-all-offline-confirmation":"\xbfSeguro que desea remover todos los visores offline de la lista?","delete-all-filtered-offline-confirmation":"Todos los visores offline que satisfagan los criterios de filtrado actuales ser\xe1n removidos de la lista. \xbfSeguro que desea continuar?","deleted":"Visor removido.","deleted-singular":"1 visor offline removido.","deleted-plural":"{{ number }} visores offline removidos.","no-visors-to-update":"No hay visores para actualizar.","filter-dialog":{"online":"El visor debe estar","label":"La etiqueta debe contener","key":"La llave debe contener","dmsg":"La llave del servidor DMSG debe contener","online-options":{"any":"Online u offline","online":"Online","offline":"Offline"}}},"edit-label":{"label":"Etiqueta","done":"Etiqueta guardada.","label-removed-warning":"La etiqueta fue removida."},"settings":{"title":"Configuraci\xf3n","password":{"initial-config-help":"Use esta opci\xf3n para establecer la contrase\xf1a inicial. Despu\xe9s de establecer una contrase\xf1a no es posible usar esta opci\xf3n para modificarla.","help":"Opciones para cambiar la contrase\xf1a.","old-password":"Contrase\xf1a actual","new-password":"Nueva contrase\xf1a","repeat-password":"Repita la contrase\xf1a","password-changed":"Contrase\xf1a cambiada.","error-changing":"Error cambiando la contrase\xf1a.","initial-config":{"title":"Establecer contrase\xf1a inicial","password":"Contrase\xf1a","repeat-password":"Repita la contrase\xf1a","set-password":"Establecer contrase\xf1a","done":"Contrase\xf1a establecida. Por favor \xfasela para acceder al sistema.","error":"Error. Por favor aseg\xfarese de que no hubiese establecido la contrase\xf1a anteriormente."},"errors":{"bad-old-password":"La contrase\xf1a actual introducida no es correcta.","old-password-required":"La contrase\xf1a actual es requerida.","new-password-error":"La contrase\xf1a debe tener entre 6 y 64 caracteres.","passwords-not-match":"Las contrase\xf1as no coinciden.","default-password":"No utilice la contrase\xf1a por defecto (1234)."}},"updater-config":{"open-link":"Mostrar la configuraci\xf3n del actualizador","open-confirmation":"La configuraci\xf3n del actualizador es s\xf3lo para usuarios experimentados. Seguro que desea continuar?","help":"Utilice este formulario para modificar la configuraci\xf3n que utilizar\xe1 el actualizador. Se ignorar\xe1n todos los campos vac\xedos. La configuraci\xf3n se utilizar\xe1 para todas las operaciones de actualizaci\xf3n, sin importar qu\xe9 elemento se est\xe9 actualizando, as\xed que por favor tenga cuidado.","channel":"Canal","version":"Versi\xf3n","archive-url":"URL del archivo","checksum-url":"URL del checksum","not-saved":"Los cambios a\xfan no se han guardado.","save":"Guardar cambios","remove-settings":"Remover la configuraci\xf3n","saved":"Las configuracion personalizada ha sido guardada.","removed":"Las configuracion personalizada ha sido removida.","save-confirmation":"\xbfSeguro que desea aplicar la configuraci\xf3n personalizada?","remove-confirmation":"\xbfSeguro que desea remover la configuraci\xf3n personalizada?"},"change-password":"Cambiar contrase\xf1a","refresh-rate":"Frecuencia de refrescado","refresh-rate-help":"Tiempo que el sistema espera para actualizar autom\xe1ticamente los datos.","refresh-rate-confirmation":"Frecuencia de refrescado cambiada.","seconds":"segundos"},"login":{"password":"Contrase\xf1a","incorrect-password":"Contrase\xf1a incorrecta.","initial-config":"Configurar lanzamiento inicial"},"actions":{"menu":{"terminal":"Terminal","config":"Configuraci\xf3n","update":"Actualizar","reboot":"Reiniciar","logs":"Ver logs"},"reboot":{"confirmation":"\xbfSeguro que desea reiniciar el visor?","done":"El visor se est\xe1 reiniciando."},"terminal-options":{"full":"Terminal completa","simple":"Terminal simple"},"terminal":{"title":"Terminal","input-start":"Terminal de Skywire para {{address}}","error":"Error inesperado mientras se intentaba ejecutar el comando."}},"update":{"title":"Actualizar","error-title":"Error","processing":"Buscando actualizaciones...","no-update":"No hay ninguna actualizaci\xf3n para el visor. La versi\xf3n instalada actualmente es:","no-updates":"No se encontraron nuevas actualizaciones.","already-updating":"Algunos visores ya est\xe1n siendo actualizandos:","update-available":"Las siguientes actualizaciones fueron encontradas:","update-available-singular":"Las siguientes actualizaciones para 1 visor fueron encontradas:","update-available-plural":"Las siguientes actualizaciones para {{ number }} visores fueron encontradas:","update-available-additional-singular":"Las siguientes actualizaciones adicionales para 1 visor fueron encontradas:","update-available-additional-plural":"Las siguientes actualizaciones adicionales para {{ number }} visores fueron encontradas:","update-instructions":"Haga clic en el bot\xf3n \'Instalar actualizaciones\' para continuar.","updating":"La operaci\xf3n de actualizaci\xf3n se ha iniciado, puede abrir esta ventana nuevamente para verificar el progreso:","version-change":"De {{ currentVersion }} a {{ newVersion }}","selected-channel":"Canal seleccionado:","downloaded-file-name-prefix":"Descargando: ","speed-prefix":"Velocidad: ","time-downloading-prefix":"Tiempo descargando: ","time-left-prefix":"Tiempo aprox. faltante: ","starting":"Preparando para actualizar","finished":"Conexi\xf3n de estado terminada","install":"Instalar actualizaciones"},"apps":{"log":{"title":"Log","empty":"No hay mensajes de log para el rango de fecha seleccionado.","filter-button":"Mostrando s\xf3lo logs generados desde:","filter":{"title":"Filtro","filter":"Mostrar s\xf3lo logs generados desde","7-days":"Los \xfaltimos 7 d\xedas","1-month":"Los \xfaltimos 30 d\xedas","3-months":"Los \xfaltimos 3 meses","6-months":"Los \xfaltimos 6 meses","1-year":"El \xfaltimo a\xf1o","all":"mostrar todos"}},"apps-list":{"title":"Aplicaciones","list-title":"Lista de aplicaciones","app-name":"Nombre","port":"Puerto","state":"Estado","state-tooltip":"Estado actual","auto-start":"Autoinicio","empty":"El visor no tiene ninguna aplicaci\xf3n.","empty-with-filter":"Ninguna app coincide con los criterios de filtrado seleccionados.","disable-autostart":"Deshabilitar autoinicio","enable-autostart":"Habilitar autoinicio","autostart-disabled":"Autoinicio deshabilitado","autostart-enabled":"Autoinicio habilitado","unavailable-logs-error":"No es posible mostrar los logs mientras la aplicaci\xf3n no se est\xe1 ejecutando.","filter-dialog":{"state":"El estado debe ser","name":"El nombre debe contener","port":"El puerto debe contener","autostart":"El autoinicio debe estar","state-options":{"any":"Iniciada o detenida","running":"Iniciada","stopped":"Detenida"},"autostart-options":{"any":"Activado or desactivado","enabled":"Activado","disabled":"Desactivado"}}},"vpn-socks-server-settings":{"socks-title":"Configuraci\xf3n de Skysocks","vpn-title":"Configuraci\xf3n de VPN-Server","new-password":"Nueva contrase\xf1a (dejar en blanco para eliminar la contrase\xf1a)","repeat-password":"Repita la contrase\xf1a","passwords-not-match":"Las contrase\xf1as no coinciden.","secure-mode-check":"Usar modo seguro","secure-mode-info":"Cuando est\xe1 activo, el servidor no permite SSH con los clientes y no permite ning\xfan tr\xe1fico de clientes VPN a la red local del servidor.","save":"Guardar","remove-passowrd-confirmation":"Ha dejado el campo de contrase\xf1a vac\xedo. \xbfSeguro que desea eliminar la contrase\xf1a?","change-passowrd-confirmation":"\xbfSeguro que desea cambiar la contrase\xf1a?","changes-made":"Los cambios han sido realizados."},"vpn-socks-client-settings":{"socks-title":"Configuraci\xf3n de Skysocks-Client","vpn-title":"Configuraci\xf3n de VPN-Client","discovery-tab":"Buscar","remote-visor-tab":"Introducir manualmente","settings-tab":"Configuracion","history-tab":"Historial","use":"Usar estos datos","change-note":"Cambiar nota","remove-entry":"Remover entrada","note":"Nota:","note-entered-manually":"Introducido manualmente","note-obtained":"Obtenido del servicio de descubrimiento","key":"Llave:","port":"Puerto:","location":"Ubicaci\xf3n:","state-available":"Disponible","state-offline":"Offline","public-key":"Llave p\xfablica del visor remoto","password":"Contrase\xf1a","password-history-warning":"Nota: la contrase\xf1a no se guardar\xe1 en el historial.","copy-pk-info":"Copiar la llave p\xfablica.","copied-pk-info":"La llave p\xfablica ha sido copiada.","copy-pk-error":"Hubo un problema al intentar cambiar la llave p\xfablica.","no-elements":"Actualmente no hay elementos para mostrar. Por favor, int\xe9ntelo de nuevo m\xe1s tarde.","no-elements-for-filters":"No hay elementos que cumplan los criterios de filtro.","no-filter":"No se ha seleccionado ning\xfan filtro","click-to-change":"Haga clic para cambiar","remote-key-length-error":"La llave p\xfablica debe tener 66 caracteres.","remote-key-chars-error":"La llave p\xfablica s\xf3lo debe contener caracteres hexadecimales.","save":"Guardar","remove-from-history-confirmation":"\xbfSeguro de que desea eliminar la entrada del historial?","change-key-confirmation":"\xbfSeguro que desea cambiar la llave p\xfablica del visor remoto?","changes-made":"Los cambios han sido realizados.","no-history":"Esta pesta\xf1a mostrar\xe1 las \xfaltimas {{ number }} llaves p\xfablicas usadas.","default-note-warning":"La nota por defecto ha sido utilizada.","pagination-info":"{{ currentElementsRange }} de {{ totalElements }}","killswitch-check":"Activar killswitch","killswitch-info":"Cuando est\xe1 activo, todas las conexiones de red se desactivar\xe1n si la aplicaci\xf3n se est\xe1 ejecutando pero la protecci\xf3n VPN est\xe1 interrumpida (por errores temporales o cualquier otro problema). Esto evita fugas de datos.","settings-changed-alert":"Los cambios a\xfan no se han guardado.","save-settings":"Guardar configuracion","change-note-dialog":{"title":"Cambiar Nota","note":"Nota"},"password-dialog":{"title":"Introducir Contrase\xf1a","password":"Contrase\xf1a","info":"Se le solicita una contrase\xf1a porque una contrase\xf1a fue utilizada cuando se cre\xf3 la entrada seleccionada, pero no fue guardada por razones de seguridad. Puede dejar la contrase\xf1a vac\xeda si es necesario.","continue-button":"Continuar"},"filter-dialog":{"title":"Filtros","country":"El pa\xeds debe ser","any-country":"Cualquiera","location":"La ubicaci\xf3n debe contener","pub-key":"La llave p\xfablica debe contener","apply":"Aplicar"}},"stop-app":"Detener","start-app":"Iniciar","view-logs":"Ver logs","settings":"Configuraci\xf3n","open":"Abrir","error":"Se produjo un error y no fue posible realizar la operaci\xf3n.","stop-confirmation":"\xbfSeguro que desea detener la aplicaci\xf3n?","stop-selected-confirmation":"\xbfSeguro que desea detener las aplicaciones seleccionadas?","disable-autostart-confirmation":"\xbfSeguro que desea deshabilitar el autoinicio de la aplicaci\xf3n?","enable-autostart-confirmation":"\xbfSeguro que desea habilitar el autoinicio de la aplicaci\xf3n?","disable-autostart-selected-confirmation":"\xbfSeguro que desea deshabilitar el autoinicio de las aplicaciones seleccionadas?","enable-autostart-selected-confirmation":"\xbfSeguro que desea habilitar el autoinicio de las aplicaciones seleccionadas?","operation-completed":"Operaci\xf3n completada.","operation-unnecessary":"La selecci\xf3n ya tiene la configuraci\xf3n solicitada.","status-running":"Corriendo","status-stopped":"Detenida","status-failed":"Fallida","status-running-tooltip":"La aplicaci\xf3n est\xe1 actualmente corriendo","status-stopped-tooltip":"La aplicaci\xf3n est\xe1 actualmente detenida","status-failed-tooltip":"Algo sali\xf3 mal. Revise los mensajes de la aplicaci\xf3n para m\xe1s informaci\xf3n"},"transports":{"title":"Transportes","remove-all-offline":"Remover todos los transportes offline","remove-all-offline-confirmation":"\xbfSeguro que desea remover todos los transportes offline?","remove-all-filtered-offline-confirmation":"Todos los transportes offline que satisfagan los criterios de filtrado actuales ser\xe1n removidos. \xbfSeguro que desea continuar?","info":"Conexiones que tiene con visores remotos de Skywire, para permitir que las aplicaciones Skywire locales se comuniquen con las aplicaciones que se ejecutan en esos visores remotos.","list-title":"Lista de transportes","state":"Estado","state-tooltip":"Estado actual","id":"ID","remote-node":"Remoto","type":"Tipo","create":"Crear transporte","delete-confirmation":"\xbfSeguro que desea borrar el transporte?","delete-selected-confirmation":"\xbfSeguro que desea borrar los transportes seleccionados?","delete":"Borrar transporte","deleted":"Operaci\xf3n de borrado completada.","empty":"El visor no tiene ning\xfan transporte.","empty-with-filter":"Ningun transporte coincide con los criterios de filtrado seleccionados.","statuses":{"online":"Online","online-tooltip":"El transporte est\xe1 online","offline":"Offline","offline-tooltip":"El transporte est\xe1 offline"},"details":{"title":"Detalles","basic":{"title":"Informaci\xf3n b\xe1sica","state":"Estado:","id":"ID:","local-pk":"Llave p\xfablica local:","remote-pk":"Llave p\xfablica remota:","type":"Tipo:"},"data":{"title":"Transmisi\xf3n de datos","uploaded":"Datos enviados:","downloaded":"Datos recibidos:"}},"dialog":{"remote-key":"Llave p\xfablica remota","label":"Nombre del transporte (opcional)","transport-type":"Tipo de transporte","success":"Transporte creado.","success-without-label":"El transporte fue creado, pero no fue posible guardar la etiqueta.","errors":{"remote-key-length-error":"La llave p\xfablica remota debe tener 66 caracteres.","remote-key-chars-error":"La llave p\xfablica remota s\xf3lo debe contener caracteres hexadecimales.","transport-type-error":"El tipo de transporte es requerido."}},"filter-dialog":{"online":"El transporte debe estar","id":"El id debe contener","remote-node":"La llave remota debe contener","online-options":{"any":"Online u offline","online":"Online","offline":"Offline"}}},"routes":{"title":"Rutas","info":"Caminos utilizados para llegar a los visores remotos con los que se han establecido transportes. Las rutas se generan autom\xe1ticamente seg\xfan sea necesario.","list-title":"Lista de rutas","key":"Llave","type":"Tipo","source":"Inicio","destination":"Destino","delete-confirmation":"\xbfSeguro que desea borrar la ruta?","delete-selected-confirmation":"\xbfSeguro que desea borrar las rutas seleccionadas?","delete":"Borrar ruta","deleted":"Operaci\xf3n de borrado completada.","empty":"El visor no tiene ninguna ruta.","empty-with-filter":"Ninguna ruta coincide con los criterios de filtrado seleccionados.","details":{"title":"Detalles","basic":{"title":"Informaci\xf3n b\xe1sica","key":"Llave:","rule":"Regla:"},"summary":{"title":"Resumen de regla","keep-alive":"Keep alive:","type":"Tipo de regla:","key-route-id":"ID de la llave de la ruta:"},"specific-fields-titles":{"app":"Campos de applicaci\xf3n","forward":"Campos de reenv\xedo","intermediary-forward":"Campos de reenv\xedo intermedio"},"specific-fields":{"route-id":"ID de la siguiente ruta:","transport-id":"ID del siguiente transporte:","destination-pk":"Llave p\xfablica de destino:","source-pk":"Llave p\xfablica de origen:","destination-port":"Puerto de destino:","source-port":"Puerto de origen:"}},"filter-dialog":{"key":"La llave debe contener","type":"El tipo debe ser","source":"El inicio debe contener","destination":"El destino debe contener","any-type-option":"Cualquiera"}},"copy":{"tooltip":"Presione para copiar","tooltip-with-text":"{{ text }} (Presione para copiar)","copied":"\xa1Copiado!"},"selection":{"select-all":"Seleccionar todo","unselect-all":"Deseleccionar todo","delete-all":"Borrar los elementos seleccionados","start-all":"Iniciar las apps seleccionadas","stop-all":"Detener las apps seleccionadas","enable-autostart-all":"Habilitar el autoinicio de las apps seleccionadas","disable-autostart-all":"Deshabilitar el autoinicio de las apps seleccionadas"},"refresh-button":{"seconds":"Refrescado hace unos segundos","minute":"Refrescado hace un minuto","minutes":"Refrescado hace {{ time }} minutos","hour":"Refrescado hace una hora","hours":"Refrescado hace {{ time }} horas","day":"Refrescado hace un d\xeda","days":"Refrescado hace {{ time }} d\xedas","week":"Refrescado hace una semana","weeks":"Refrescado hace {{ time }} semanas","error-tooltip":"Hubo un error al intentar refrescar los datos. Reintentando autom\xe1ticamente cada {{ time }} segundos..."},"view-all-link":{"label":"Ver todos los {{ number }} elementos"},"paginator":{"first":"Primera","last":"\xdaltima","total":"Total: {{ number }} p\xe1ginas","select-page-title":"Seleccionar p\xe1gina"},"confirmation":{"header-text":"Confirmaci\xf3n","confirm-button":"S\xed","cancel-button":"No","close":"Cerrar","error-header-text":"Error","done-header-text":"Hecho"},"language":{"title":"Seleccionar lenguaje"},"tabs-window":{"title":"Cambiar pesta\xf1a"},"vpn":{"title":"Panel de Control de VPN","start":"Inicio","servers":"Servidores","settings":"Configuracion","starting-blocked-server-error":"No se puede conectar con el servidor seleccionado porque se ha agregado a la lista de servidores bloqueados.","unexpedted-error":"Se produjo un error inesperado y no se pudo completar la operaci\xf3n.","remote-access-title":"Parece que est\xe1 accediendo al sistema de manera remota","remote-access-text":"Esta aplicaci\xf3n s\xf3lo permite administrar la protecci\xf3n VPN del dispositivo en el que fue instalada. Los cambios hechos con ella no afectar\xe1n a dispositivos remotos como el que parece estar usando. Tambi\xe9n es posible que los datos de IP que se muestren sean incorrectos.","server-change":{"busy-error":"El sistema est\xe1 ocupado. Por favor, espere.","backend-error":"No fue posible cambiar el servidor. Por favor, aseg\xfarese de que la clave p\xfablica sea correcta y de que la aplicaci\xf3n VPN se est\xe9 ejecutando.","already-selected-warning":"El servidor seleccionado ya est\xe1 siendo utilizando.","change-server-while-connected-confirmation":"La protecci\xf3n VPN se interrumpir\xe1 mientras se cambia el servidor y algunos datos pueden transmitirse sin protecci\xf3n durante el proceso. \xbfDesea continuar?","start-same-server-confirmation":"Ya hab\xeda seleccionado ese servidor. \xbfDesea conectarte a \xe9l?"},"error-page":{"text":"La aplicaci\xf3n de cliente VPN no est\xe1 disponible.","more-info":"No fue posible conectarse a la aplicaci\xf3n cliente VPN. Esto puede deberse a un error de configuraci\xf3n, un problema inesperado con el visor o porque utiliz\xf3 una clave p\xfablica no v\xe1lida en la URL.","text-pk":"Configuraci\xf3n inv\xe1lida.","more-info-pk":"La aplicaci\xf3n no puede ser iniciada porque no ha especificado la clave p\xfablica del visor.","text-storage":"Error al guardar los datos.","more-info-storage":"Ha habido un conflicto al intentar guardar los datos y la aplicaci\xf3n se ha cerrado para prevenir errores. Esto puede suceder si abre la aplicaci\xf3n en m\xe1s de una pesta\xf1a o ventana.","text-pk-change":"Operaci\xf3n inv\xe1lida.","more-info-pk-change":"Por favor, utilice esta aplicaci\xf3n para administrar s\xf3lo un cliente VPN."},"connection-info":{"state-connecting":"Conectando","state-connecting-info":"Se est\xe1 activando la protecci\xf3n VPN.","state-connected":"Conectado","state-connected-info":"La protecci\xf3n VPN est\xe1 activada.","state-disconnecting":"Desconectando","state-disconnecting-info":"Se est\xe1 desactivando la protecci\xf3n VPN.","state-reconnecting":"Reconectando","state-reconnecting-info":"Se est\xe1 restaurando la protecci\xf3n de VPN.","state-disconnected":"Desconectado","state-disconnected-info":"La protecci\xf3n VPN est\xe1 desactivada.","state-info":"Estado actual de la conexi\xf3n.","latency-info":"Latencia actual.","upload-info":"Velocidad de subida.","download-info":"Velocidad de descarga."},"status-page":{"start-title":"Iniciar VPN","no-server":"\xa1Ning\xfan servidor seleccionado!","disconnect":"Desconectar","disconnect-confirmation":"\xbfRealmente desea detener la protecci\xf3n VPN?","entered-manually":"Ingresado manualmente","upload-info":"Estad\xedsticas de datos subidos.","download-info":"Estad\xedsticas de datos descargados.","latency-info":"Estad\xedsticas de latencia.","total-data-label":"total","problem-connecting-error":"No fue posible conectarse al servidor. El servidor puede no ser v\xe1lido o estar temporalmente inactivo.","problem-starting-error":"No fue posible iniciar la VPN. Por favor, aseg\xfarese de que la aplicaci\xf3n base de cliente VPN est\xe9 ejecutandose.","problem-stopping-error":"No fue posible detener la VPN. Por favor, aseg\xfarese de que la aplicaci\xf3n base de cliente VPN est\xe9 ejecutandose.","generic-problem-error":"No fue posible realizar la operaci\xf3n. Por favor, aseg\xfarese de que la aplicaci\xf3n base de cliente VPN est\xe9 ejecutandose.","select-server-warning":"Por favor, seleccione un servidor primero.","data":{"ip":"Direcci\xf3n IP:","ip-problem-info":"Hubo un problema al intentar obtener la IP. Por favor, verif\xedquela utilizando un servicio externo.","ip-country-problem-info":"Hubo un problema al intentar obtener el pa\xeds. Por favor, verif\xedquelo utilizando un servicio externo.","ip-refresh-info":"Refrescar","ip-refresh-time-warning":"Por favor, espere {{ seconds }} segundo(s) antes de refrescar los datos.","ip-refresh-loading-warning":"Por favor, espere a que finalice la operaci\xf3n anterior.","country":"Pa\xeds:","server":"Servidor:","server-note":"Nota del servidor:","original-server-note":"Nota original del servidor:","local-pk":"Llave p\xfablica del visor local:","remote-pk":"Llave p\xfablica del visor remoto:","unavailable":"No disponible"}},"server-options":{"tooltip":"Opciones","connect-without-password":"Conectarse sin contrase\xf1a","connect-without-password-confirmation":"La conexi\xf3n se realizar\xe1 sin la contrase\xf1a. \xbfSeguro que desea continuar?","connect-using-password":"Conectarse usando una contrase\xf1a","edit-name":"Nombre personalizado","edit-label":"Nota personalizada","make-favorite":"Hacer favorito","make-favorite-confirmation":"\xbfRealmente desea marcar este servidor como favorito? Se eliminar\xe1 de la lista de bloqueados.","make-favorite-done":"Agregado a la lista de favoritos.","remove-from-favorites":"Quitar de favoritos","remove-from-favorites-done":"Eliminado de la lista de favoritos.","block":"Bloquear servidor","block-done":"Agregado a la lista de bloqueados.","block-confirmation":"\xbfRealmente desea bloquear este servidor? Se eliminar\xe1 de la lista de favoritos.","block-selected-confirmation":"\xbfRealmente desea bloquear el servidor actualmente seleccionado? Se cerrar\xe1n todas las conexiones.","block-selected-favorite-confirmation":"\xbfRealmente desea bloquear el servidor actualmente seleccionado? Se cerrar\xe1n todas las conexiones y se eliminar\xe1 de la lista de favoritos.","unblock":"Desbloquear servidor","unblock-done":"Eliminado de la lista de bloqueados.","remove-from-history":"Quitar del historial","remove-from-history-confirmation":"\xbfRealmente desea quitar del historial el servidor?","remove-from-history-done":"Eliminado del historial.","edit-value":{"name-title":"Nombre Personalizado","note-title":"Nota Personalizada","name-label":"Nombre personalizado","note-label":"Nota personalizada","apply-button":"Aplicar","changes-made-confirmation":"Se ha realizado el cambio."}},"server-conditions":{"selected-info":"Este es el servidor actualmente seleccionado.","blocked-info":"Este servidor est\xe1 en la lista de bloqueados.","favorite-info":"Este servidor est\xe1 en la lista de favoritos.","history-info":"Este servidor est\xe1 en el historial de servidores.","has-password-info":"Se estableci\xf3 una contrase\xf1a para conectarse con este servidor."},"server-list":{"date-small-table-label":"Fecha","date-info":"\xdaltima vez en la que us\xf3 este servidor.","country-small-table-label":"Pa\xeds","country-info":"Pa\xeds donde se encuentra el servidor.","name-small-table-label":"Nombre","location-small-table-label":"Ubicaci\xf3n","public-key-small-table-label":"Lp","public-key-info":"Llave p\xfablica del servidor.","congestion-rating-small-table-label":"Calificaci\xf3n de congesti\xf3n","congestion-rating-info":"Calificaci\xf3n del servidor relacionada con lo congestionado que suele estar.","congestion-small-table-label":"Congesti\xf3n","congestion-info":"Congesti\xf3n actual del servidor.","latency-rating-small-table-label":"Calificaci\xf3n de latencia","latency-rating-info":"Calificaci\xf3n del servidor relacionada con la latencia que suele tener.","latency-small-table-label":"Latencia","latency-info":"Latencia actual del servidor.","hops-small-table-label":"Saltos","hops-info":"Cu\xe1ntos saltos se necesitan para conectarse con el servidor.","note-small-table-label":"Nota","note-info":"Nota acerca del servidor.","gold-rating-info":"Oro","silver-rating-info":"Plata","bronze-rating-info":"Bronce","notes-info":"Nota personalizada: {{ custom }} - Nota original: {{ original }}","empty-discovery":"Actualmente no hay servidores VPN para mostrar. Por favor, int\xe9ntelo de nuevo m\xe1s tarde.","empty-history":"No hay historial que mostrar.","empty-favorites":"No hay servidores favoritos para mostrar.","empty-blocked":"No hay servidores bloqueados para mostrar.","empty-with-filter":"Ning\xfan servidor VPN coincide con los criterios de filtrado seleccionados.","add-manually-info":"Agregar el servidor manualmente.","current-filters":"Filtros actuales (presione para eliminar)","none":"Ninguno","unknown":"Desconocido","tabs":{"public":"P\xfablicos","history":"Historial","favorites":"Favoritos","blocked":"Bloqueados"},"add-server-dialog":{"title":"Ingresar manualmente","pk-label":"Llave p\xfablica del servidor","password-label":"Contrase\xf1a del servidor (si tiene)","name-label":"Nombre del servidor (opcional)","note-label":"Nota personal (opcional)","pk-length-error":"La llave p\xfablica debe tener 66 caracteres.","pk-chars-error":"La llave p\xfablica s\xf3lo debe contener caracteres hexadecimales.","use-server-button":"Usar servidor"},"password-dialog":{"title":"Introducir Contrase\xf1a","password-if-any-label":"Contrase\xf1a del servidor (si tiene)","password-label":"Contrase\xf1a del servidor","continue-button":"Continuar"},"filter-dialog":{"country":"El pa\xeds debe ser","name":"El nombre debe contener","location":"La ubicaci\xf3n debe contener","public-key":"La llave p\xfablica debe contener","congestion-rating":"La calificaci\xf3n de congesti\xf3n debe ser","latency-rating":"La calificaci\xf3n de latencia debe ser","rating-options":{"any":"Cualquiera","gold":"Oro","silver":"Plata","bronze":"Bronce"},"country-options":{"any":"Cualquiera"}}},"settings-page":{"setting-small-table-label":"Ajuste","value-small-table-label":"Valor","killswitch":"Killswitch","killswitch-info":"Cuando est\xe1 activo, todas las conexiones de red se desactivar\xe1n si la aplicaci\xf3n se est\xe1 ejecutando pero la protecci\xf3n VPN es interrumpida (por errores temporales o cualquier otro problema). Esto evita fugas de datos.","get-ip":"Obtener informaci\xf3n de IP","get-ip-info":"Cuando est\xe1 activa, la aplicaci\xf3n utilizar\xe1 servicios externos para obtener informaci\xf3n sobre la IP actual.","data-units":"Unidades de datos","data-units-info":"Permite seleccionar las unidades que se utilizar\xe1n para mostrar las estad\xedsticas de transmisi\xf3n de datos.","setting-on":"Encendido","setting-off":"Apagado","working-warning":"El sistema est\xe1 ocupado. Por favor, espere a que finalice la operaci\xf3n anterior.","change-while-connected-confirmation":"La protecci\xf3n VPN se interrumpir\xe1 mientras se realiza el cambio. \xbfDesea continuar?","data-units-modal":{"title":"Unidades de Datos","only-bits":"Bits para todas las estad\xedsticas","only-bytes":"Bytes para todas las estad\xedsticas","bits-speed-and-bytes-volume":"Bits para velocidad y bytes para volumen (predeterminado)"}}}}')}}]);
\ No newline at end of file
diff --git a/cmd/skywire-visor/static/9.5338194eab44f674bbd0.js b/cmd/skywire-visor/static/9.5338194eab44f674bbd0.js
deleted file mode 100644
index 162a44e6fd..0000000000
--- a/cmd/skywire-visor/static/9.5338194eab44f674bbd0.js
+++ /dev/null
@@ -1 +0,0 @@
-(window.webpackJsonp=window.webpackJsonp||[]).push([[9],{bIFx:function(e){e.exports=JSON.parse('{"common":{"save":"Save","cancel":"Cancel","downloaded":"Downloaded","uploaded":"Uploaded","loading-error":"There was an error getting the data. Retrying...","operation-error":"There was an error trying to complete the operation.","no-connection-error":"There is no internet connection or connection to the Hypervisor.","error":"Error:","refreshed":"Data refreshed.","options":"Options","logout":"Logout","logout-error":"Error logging out.","logout-confirmation":"Are you sure you want to log out?","time-in-ms":"{{ time }}ms.","time-in-segs":"{{ time }}s.","ok":"Ok","unknown":"Unknown","close":"Close","window-size-error":"The window is too narrow for the content."},"labeled-element":{"edit-label":"Edit label","remove-label":"Remove label","copy":"Copy","remove-label-confirmation":"Do you really want to remove the label?","unnamed-element":"Unnamed","unnamed-local-visor":"Local visor","local-element":"Local","tooltip":"Click to copy the entry or change the label","tooltip-with-text":"{{ text }} (Click to copy the entry or change the label)"},"labels":{"title":"Labels","info":"Labels you have entered to easily identify visors, transports and other elements, instead of having to read machine generated identifiers.","list-title":"Label list","label":"Label","id":"Element ID","type":"Type","delete-confirmation":"Are you sure you want to delete the label?","delete-selected-confirmation":"Are you sure you want to delete the selected labels?","delete":"Delete label","deleted":"Delete operation completed.","empty":"There aren\'t any saved labels.","empty-with-filter":"No label matches the selected filtering criteria.","filter-dialog":{"label":"The label must contain","id":"The id must contain","type":"The type must be","type-options":{"any":"Any","visor":"Visor","dmsg-server":"DMSG server","transport":"Transport"}}},"filters":{"filter-action":"Filter","filter-info":"Filter list.","press-to-remove":"(Press to remove the filters)","remove-confirmation":"Are you sure you want to remove the filters?"},"tables":{"title":"Order by","sorting-title":"Ordered by:","sort-by-value":"Value","sort-by-label":"Label","label":"(label)","inverted-order":"(inverted)"},"start":{"title":"Start"},"node":{"title":"Visor details","not-found":"Visor not found.","statuses":{"online":"Online","online-tooltip":"Visor is online.","partially-online":"Online with problems","partially-online-tooltip":"Visor is online but not all services are working. For more information, open the details page and check the \\"Health info\\" section.","offline":"Offline","offline-tooltip":"Visor is offline."},"details":{"node-info":{"title":"Visor Info","label":"Label:","public-key":"Public key:","ip":"IP:","dmsg-server":"DMSG server:","ping":"Ping:","node-version":"Visor version:","time":{"title":"Time online:","seconds":"a few seconds","minute":"1 minute","minutes":"{{ time }} minutes","hour":"1 hour","hours":"{{ time }} hours","day":"1 day","days":"{{ time }} days","week":"1 week","weeks":"{{ time }} weeks"}},"router-info":{"title":"Router Info","min-hops":"Min hops:","max-hops":"Max hops:","change-config-button":"Change configuration"},"node-health":{"title":"Health Info","status":"Status:","transport-discovery":"Transport discovery:","route-finder":"Route finder:","setup-node":"Setup node:","uptime-tracker":"Uptime tracker:","address-resolver":"Address resolver:","element-offline":"Offline"},"node-traffic-data":"Traffic data"},"tabs":{"info":"Info","apps":"Apps","routing":"Routing"},"error-load":"An error occurred while refreshing the data. Retrying..."},"router-config":{"title":"Router Configuration","info":"Here you can configure how many hops the connections must pass through other Skywire visors before reaching the final destination. NOTE: the changes will not affect the existing routes.","min-hops":"Min hops","save-config-button":"Save configuration","done":"Changes saved."},"nodes":{"title":"Visor list","dmsg-title":"DMSG","update-all":"Update all online visors","hypervisor":"Hypervisor","state":"State","state-tooltip":"Current state","label":"Label","key":"Key","dmsg-server":"DMSG server","ping":"Ping","hypervisor-info":"This visor is the current Hypervisor.","copy-key":"Copy key","copy-dmsg":"Copy DMSG server key","copy-data":"Copy data","view-node":"View visor","delete-node":"Remove visor","delete-all-offline":"Remove all offline visors","error-load":"An error occurred while refreshing the list. Retrying...","empty":"There aren\'t any visors connected to this hypervisor.","empty-with-filter":"No visor matches the selected filtering criteria.","delete-node-confirmation":"Are you sure you want to remove the visor from the list?","delete-all-offline-confirmation":"Are you sure you want to remove all offline visors from the list?","delete-all-filtered-offline-confirmation":"All offline visors satisfying the current filtering criteria will be removed from the list. Are you sure you want to continue?","deleted":"Visor removed.","deleted-singular":"1 offline visor removed.","deleted-plural":"{{ number }} offline visors removed.","no-visors-to-update":"There are no visors to update.","filter-dialog":{"online":"The visor must be","label":"The label must contain","key":"The public key must contain","dmsg":"The DMSG server key must contain","online-options":{"any":"Online or offline","online":"Online","offline":"Offline"}}},"edit-label":{"label":"Label","done":"Label saved.","label-removed-warning":"The label was removed."},"settings":{"title":"Settings","password":{"initial-config-help":"Use this option for setting the initial password. After a password has been set, it is not possible to use this option to modify it.","help":"Options for changing your password.","old-password":"Old password","new-password":"New password","repeat-password":"Repeat password","password-changed":"Password changed.","error-changing":"Error changing password.","initial-config":{"title":"Set initial password","password":"Password","repeat-password":"Repeat password","set-password":"Set password","done":"Password set. Please use it to access the system.","error":"Error. Please make sure you have not already set the password."},"errors":{"bad-old-password":"The provided old password is not correct.","old-password-required":"Old password is required.","new-password-error":"Password must be 6-64 characters long.","passwords-not-match":"Passwords do not match.","default-password":"Don\'t use the default password (1234)."}},"updater-config":{"open-link":"Show updater settings","open-confirmation":"The updater settings are for experienced users only. Are you sure you want to continue?","help":"Use this form for overriding the settings that will be used by the updater. All empty fields will be ignored. The settings will be used for all updating operations, no mater which element is being updated, so please be careful.","channel":"Channel","version":"Version","archive-url":"Archive URL","checksum-url":"Checksum URL","not-saved":"The changes have not been saved yet.","save":"Save changes","remove-settings":"Remove the settings","saved":"The custom settings have been saved.","removed":"The custom settings have been removed.","save-confirmation":"Are you sure you want to apply the custom settings?","remove-confirmation":"Are you sure you want to remove the custom settings?"},"change-password":"Change password","refresh-rate":"Refresh rate","refresh-rate-help":"Time the system waits to update the data automatically.","refresh-rate-confirmation":"Refresh rate changed.","seconds":"seconds"},"login":{"password":"Password","incorrect-password":"Incorrect password.","initial-config":"Configure initial launch"},"actions":{"menu":{"terminal":"Terminal","config":"Configuration","update":"Update","reboot":"Reboot","logs":"View logs"},"reboot":{"confirmation":"Are you sure you want to reboot the visor?","done":"The visor is restarting."},"terminal-options":{"full":"Full terminal","simple":"Simple terminal"},"terminal":{"title":"Terminal","input-start":"Skywire terminal for {{address}}","error":"Unexpected error while trying to execute the command."}},"update":{"title":"Update","error-title":"Error","processing":"Looking for updates...","no-update":"There is no update for the visor. The currently installed version is:","no-updates":"No new updates were found.","already-updating":"Some visors are already being updated:","update-available":"The following updates were found:","update-available-singular":"The following updates for 1 visor were found:","update-available-plural":"The following updates for {{ number }} visors were found:","update-available-additional-singular":"The following additional updates for 1 visor were found:","update-available-additional-plural":"The following additional updates for {{ number }} visors were found:","update-instructions":"Click the \'Install updates\' button to continue.","updating":"The update operation has been started, you can open this window again for checking the progress:","version-change":"From {{ currentVersion }} to {{ newVersion }}","selected-channel":"Selected channel:","downloaded-file-name-prefix":"Downloading: ","speed-prefix":"Speed: ","time-downloading-prefix":"Time downloading: ","time-left-prefix":"Aprox. time left: ","starting":"Preparing to update","finished":"Status connection finished","install":"Install updates"},"apps":{"log":{"title":"Log","empty":"There are no log messages for the selected time range.","filter-button":"Only showing logs generated since:","filter":{"title":"Filter","filter":"Only show logs generated since","7-days":"The last 7 days","1-month":"The last 30 days","3-months":"The last 3 months","6-months":"The last 6 months","1-year":"The last year","all":"Show all"}},"apps-list":{"title":"Applications","list-title":"Application list","app-name":"Name","port":"Port","state":"State","state-tooltip":"Current state","auto-start":"Auto start","empty":"Visor doesn\'t have any applications.","empty-with-filter":"No app matches the selected filtering criteria.","disable-autostart":"Disable autostart","enable-autostart":"Enable autostart","autostart-disabled":"Autostart disabled","autostart-enabled":"Autostart enabled","unavailable-logs-error":"Unable to show the logs while the app is not running.","filter-dialog":{"state":"The state must be","name":"The name must contain","port":"The port must contain","autostart":"The autostart must be","state-options":{"any":"Running or stopped","running":"Running","stopped":"Stopped"},"autostart-options":{"any":"Enabled or disabled","enabled":"Enabled","disabled":"Disabled"}}},"vpn-socks-server-settings":{"socks-title":"Skysocks Settings","vpn-title":"VPN-Server Settings","new-password":"New password (Leave empty to remove the password)","repeat-password":"Repeat password","passwords-not-match":"Passwords do not match.","secure-mode-check":"Use secure mode","secure-mode-info":"When active, the server doesn\'t allow client/server SSH and doesn\'t allow any traffic from VPN clients to the server local network.","save":"Save","remove-passowrd-confirmation":"You left the password field empty. Are you sure you want to remove the password?","change-passowrd-confirmation":"Are you sure you want to change the password?","changes-made":"The changes have been made."},"vpn-socks-client-settings":{"socks-title":"Skysocks-Client Settings","vpn-title":"VPN-Client Settings","discovery-tab":"Search","remote-visor-tab":"Enter manually","history-tab":"History","settings-tab":"Settings","use":"Use this data","change-note":"Change note","remove-entry":"Remove entry","note":"Note:","note-entered-manually":"Entered manually","note-obtained":"Obtained from the discovery service","key":"Key:","port":"Port:","location":"Location:","state-available":"Available","state-offline":"Offline","public-key":"Remote visor public key","password":"Password","password-history-warning":"Note: the password will not be saved in the history.","copy-pk-info":"Copy public key.","copied-pk-info":"The public key has been copied.","copy-pk-error":"There was a problem copying the public key.","no-elements":"Currently there are no elements to show. Please try again later.","no-elements-for-filters":"There are no elements that meet the filter criteria.","no-filter":"No filter has been selected","click-to-change":"Click to change","remote-key-length-error":"The public key must be 66 characters long.","remote-key-chars-error":"The public key must only contain hexadecimal characters.","save":"Save","remove-from-history-confirmation":"Are you sure you want to remove the entry from the history?","change-key-confirmation":"Are you sure you want to change the remote visor public key?","changes-made":"The changes have been made.","no-history":"This tab will show the last {{ number }} public keys used.","default-note-warning":"The default note has been used.","pagination-info":"{{ currentElementsRange }} of {{ totalElements }}","killswitch-check":"Activate killswitch","killswitch-info":"When active, all network connections will be disabled if the app is running but the VPN protection is interrupted (for temporary errors or any other problem). This avoids data leaks.","settings-changed-alert":" The changes have not been saved yet.","save-settings":"Save settings","change-note-dialog":{"title":"Change Note","note":"Note"},"password-dialog":{"title":"Enter Password","password":"Password","info":"You are being asked for a password because a password was set when the selected entry was created, but the it was not saved for security reasons. You can leave the password empty if needed.","continue-button":"Continue"},"filter-dialog":{"title":"Filters","country":"The country must be","any-country":"Any","location":"The location must contain","pub-key":"The public key must contain","apply":"Apply"}},"stop-app":"Stop","start-app":"Start","view-logs":"View logs","settings":"Settings","open":"Open","error":"An error has occured and it was not possible to perform the operation.","stop-confirmation":"Are you sure you want to stop the app?","stop-selected-confirmation":"Are you sure you want to stop the selected apps?","disable-autostart-confirmation":"Are you sure you want to disable autostart for the app?","enable-autostart-confirmation":"Are you sure you want to enable autostart for the app?","disable-autostart-selected-confirmation":"Are you sure you want to disable autostart for the selected apps?","enable-autostart-selected-confirmation":"Are you sure you want to enable autostart for the selected apps?","operation-completed":"Operation completed.","operation-unnecessary":"The selection already has the requested setting.","status-running":"Running","status-stopped":"Stopped","status-failed":"Failed","status-running-tooltip":"App is currently running","status-stopped-tooltip":"App is currently stopped","status-failed-tooltip":"Something went wrong. Check the app\'s messages for more information"},"transports":{"title":"Transports","remove-all-offline":"Remove all offline transports","remove-all-offline-confirmation":"Are you sure you want to remove all offline transports?","remove-all-filtered-offline-confirmation":"All offline transports satisfying the current filtering criteria will be removed. Are you sure you want to continue?","info":"Connections you have with remote Skywire visors, to allow local Skywire apps to communicate with apps running on those remote visors.","list-title":"Transport list","state":"State","state-tooltip":"Current state","id":"ID","remote-node":"Remote","type":"Type","create":"Create transport","delete-confirmation":"Are you sure you want to delete the transport?","delete-selected-confirmation":"Are you sure you want to delete the selected transports?","delete":"Delete transport","deleted":"Delete operation completed.","empty":"Visor doesn\'t have any transports.","empty-with-filter":"No transport matches the selected filtering criteria.","statuses":{"online":"Online","online-tooltip":"Transport is online","offline":"Offline","offline-tooltip":"Transport is offline"},"details":{"title":"Details","basic":{"title":"Basic info","state":"State:","id":"ID:","local-pk":"Local public key:","remote-pk":"Remote public key:","type":"Type:"},"data":{"title":"Data transmission","uploaded":"Uploaded data:","downloaded":"Downloaded data:"}},"dialog":{"remote-key":"Remote public key","label":"Identification name (optional)","transport-type":"Transport type","success":"Transport created.","success-without-label":"The transport was created, but it was not possible to save the label.","errors":{"remote-key-length-error":"The remote public key must be 66 characters long.","remote-key-chars-error":"The remote public key must only contain hexadecimal characters.","transport-type-error":"The transport type is required."}},"filter-dialog":{"online":"The transport must be","id":"The id must contain","remote-node":"The remote key must contain","online-options":{"any":"Online or offline","online":"Online","offline":"Offline"}}},"routes":{"title":"Routes","info":"Paths used to reach the remote visors to which transports have been established. Routes are automatically generated as needed.","list-title":"Route list","key":"Key","type":"Type","source":"Source","destination":"Destination","delete-confirmation":"Are you sure you want to delete the route?","delete-selected-confirmation":"Are you sure you want to delete the selected routes?","delete":"Delete route","deleted":"Delete operation completed.","empty":"Visor doesn\'t have any routes.","empty-with-filter":"No route matches the selected filtering criteria.","details":{"title":"Details","basic":{"title":"Basic info","key":"Key:","rule":"Rule:"},"summary":{"title":"Rule summary","keep-alive":"Keep alive:","type":"Rule type:","key-route-id":"Key route ID:"},"specific-fields-titles":{"app":"App fields","forward":"Forward fields","intermediary-forward":"Intermediary forward fields"},"specific-fields":{"route-id":"Next route ID:","transport-id":"Next transport ID:","destination-pk":"Destination public key:","source-pk":"Source public key:","destination-port":"Destination port:","source-port":"Source port:"}},"filter-dialog":{"key":"The key must contain","type":"The type must be","source":"The source must contain","destination":"The destination must contain","any-type-option":"Any"}},"copy":{"tooltip":"Click to copy","tooltip-with-text":"{{ text }} (Click to copy)","copied":"Copied!"},"selection":{"select-all":"Select all","unselect-all":"Unselect all","delete-all":"Delete all selected elements","start-all":"Start all selected apps","stop-all":"Stop all selected apps","enable-autostart-all":"Enable autostart for all selected apps","disable-autostart-all":"Disable autostart for all selected apps"},"refresh-button":{"seconds":"Updated a few seconds ago","minute":"Updated 1 minute ago","minutes":"Updated {{ time }} minutes ago","hour":"Updated 1 hour ago","hours":"Updated {{ time }} hours ago","day":"Updated 1 day ago","days":"Updated {{ time }} days ago","week":"Updated 1 week ago","weeks":"Updated {{ time }} weeks ago","error-tooltip":"There was an error updating the data. Retrying automatically every {{ time }} seconds..."},"view-all-link":{"label":"View all {{ number }} elements"},"paginator":{"first":"First","last":"Last","total":"Total: {{ number }} pages","select-page-title":"Select page"},"confirmation":{"header-text":"Confirmation","confirm-button":"Yes","cancel-button":"No","close":"Close","error-header-text":"Error","done-header-text":"Done"},"language":{"title":"Select language"},"tabs-window":{"title":"Change tab"},"vpn":{"title":"VPN Control Panel","start":"Start","servers":"Servers","settings":"Settings","starting-blocked-server-error":"Unable to connect to the selected server because it has been added to the blocked servers list.","unexpedted-error":"An unexpected error occurred and the operation could not be completed.","remote-access-title":"It appears that you are accessing the system remotely","remote-access-text":"This application only allows you to manage the VPN protection of the device on which it was installed. Changes made with it will not affect remote devices like the one you seem to be using. Also, the displayed IP data may be incorrect.","server-change":{"busy-error":"The system is busy. Please wait.","backend-error":"It was not possible to change the server. Please make sure the public key is correct and the VPN app is running.","already-selected-warning":"The selected server is already being used.","change-server-while-connected-confirmation":"The VPN protection will be interrupted while changing the server and some data may be transmitted unprotected during the process. Do you want to continue?","start-same-server-confirmation":"You had already selected that server. Do you want to connect to it?"},"error-page":{"text":"The VPN client app is not available.","more-info":"It was not possible to connect to the VPN client app. This may be due to a configuration error, an unexpected problem with the visor or because you used an invalid public key in the URL.","text-pk":"Invalid configuration.","more-info-pk":"The application cannot be started because you have not specified the visor public key.","text-storage":"Error saving data.","more-info-storage":"There has been a conflict when trying to save the data and the application has been closed to prevent errors. This could happen if you open the application in more than one tab or window.","text-pk-change":"Invalid operation.","more-info-pk-change":"Please use this application to manage only one VPN client."},"connection-info":{"state-connecting":"Connecting","state-connecting-info":"The VPN protection is being activated.","state-connected":"Connected","state-connected-info":"The VPN protection is on.","state-disconnecting":"Disconnecting","state-disconnecting-info":"The VPN protection is being deactivated.","state-reconnecting":"Reconnecting","state-reconnecting-info":"The VPN protection is being restored.","state-disconnected":"Disconnected","state-disconnected-info":"The VPN protection is off.","state-info":"Current connection status.","latency-info":"Current latency.","upload-info":"Upload speed.","download-info":"Download speed."},"status-page":{"start-title":"Start VPN","no-server":"No server selected!","disconnect":"Disconnect","disconnect-confirmation":"Are you sure you want to stop the VPN protection?","entered-manually":"Entered manually","upload-info":"Uploaded data stats.","download-info":"Downloaded data stats.","latency-info":"Latency stats.","total-data-label":"total","problem-connecting-error":"It was not possible to connect to the server. The server may be invalid or temporarily down.","problem-starting-error":"It was not possible to start the VPN. Please make sure the base VPN client app is running.","problem-stopping-error":"It was not possible to stop the VPN. Please make sure the base VPN client app is running.","generic-problem-error":"It was not possible to perform the operation. Please make sure the base VPN client app is running.","select-server-warning":"Please select a server first.","data":{"ip":"IP address:","ip-problem-info":"There was a problem trying to get the IP. Please verify it using an external service.","ip-country-problem-info":"There was a problem trying to get the country. Please verify it using an external service.","ip-refresh-info":"Refresh","ip-refresh-time-warning":"Please wait {{ seconds }} second(s) before refreshing the data.","ip-refresh-loading-warning":"Please wait for the previous operation to finish.","country":"Country:","server":"Server:","server-note":"Server note:","original-server-note":"Original server note:","local-pk":"Local visor public key:","remote-pk":"Remote visor public key:","unavailable":"Unavailable"}},"server-options":{"tooltip":"Options","connect-without-password":"Connect without password","connect-without-password-confirmation":"The connection will be made without the password. Are you sure you want to continue?","connect-using-password":"Connect using a password","edit-name":"Custom name","edit-label":"Custom note","make-favorite":"Make favorite","make-favorite-confirmation":"Are you sure you want to mark this server as favorite? It will be removed from the blocked list.","make-favorite-done":"Added to the favorites list.","remove-from-favorites":"Remove from favorites","remove-from-favorites-done":"Removed from the favorites list.","block":"Block server","block-done":"Added to the blocked list.","block-confirmation":"Are you sure you want to block this server? It will be removed from the favorites list.","block-selected-confirmation":"Are you sure you want to block the currently selected server? All connections will be closed.","block-selected-favorite-confirmation":"Are you sure you want to block the currently selected server? All connections will be closed and it will be removed from the favorites list.","unblock":"Unblock server","unblock-done":"Removed from the blocked list.","remove-from-history":"Remove from history","remove-from-history-confirmation":"Are you sure you want to remove this server from the history?","remove-from-history-done":"Removed from history.","edit-value":{"name-title":"Custom Name","note-title":"Custom Note","name-label":"Custom name","note-label":"Custom note","apply-button":"Apply","changes-made-confirmation":"The change has been made."}},"server-conditions":{"selected-info":"This is the currently selected server.","blocked-info":"This server is in the blocked list.","favorite-info":"This server is in the favorites list.","history-info":"This server is in the server history.","has-password-info":"A password was set for connecting with this server."},"server-list":{"date-small-table-label":"Date","date-info":"Last time you used this server.","country-small-table-label":"Country","country-info":"Country where the server is located.","name-small-table-label":"Name","location-small-table-label":"Location","public-key-small-table-label":"Pk","public-key-info":"Server public key.","congestion-rating-small-table-label":"Congestion rating","congestion-rating-info":"Rating of the server related to how congested it tends to be.","congestion-small-table-label":"Congestion","congestion-info":"Current server congestion.","latency-rating-small-table-label":"Latency rating","latency-rating-info":"Rating of the server related to how much latency it tends to have.","latency-small-table-label":"Latency","latency-info":"Current server latency.","hops-small-table-label":"Hops","hops-info":"How many hops are needed for connecting with the server.","note-small-table-label":"Note","note-info":"Note about the server.","gold-rating-info":"Gold","silver-rating-info":"Silver","bronze-rating-info":"Bronze","notes-info":"Custom note: {{ custom }} - Original note: {{ original }}","empty-discovery":"Currently there are no VPN servers to show. Please try again later.","empty-history":"There is no history to show.","empty-favorites":"There are no favorite servers to show.","empty-blocked":"There are no blocked servers to show.","empty-with-filter":"No VPN server matches the selected filtering criteria.","add-manually-info":"Add server manually.","current-filters":"Current filters (press to remove)","none":"None","unknown":"Unknown","tabs":{"public":"Public","history":"History","favorites":"Favorites","blocked":"Blocked"},"add-server-dialog":{"title":"Enter manually","pk-label":"Server public key","password-label":"Server password (if any)","name-label":"Server name (optional)","note-label":"Personal note (optional)","pk-length-error":"The public key must be 66 characters long.","pk-chars-error":"The public key must only contain hexadecimal characters.","use-server-button":"Use server"},"password-dialog":{"title":"Enter Password","password-if-any-label":"Server password (if any)","password-label":"Server password","continue-button":"Continue"},"filter-dialog":{"country":"The country must be","name":"The name must contain","location":"The location must contain","public-key":"The public key must contain","congestion-rating":"The congestion rating must be","latency-rating":"The latency rating must be","rating-options":{"any":"Any","gold":"Gold","silver":"Silver","bronze":"Bronze"},"country-options":{"any":"Any"}}},"settings-page":{"setting-small-table-label":"Setting","value-small-table-label":"Value","killswitch":"Killswitch","killswitch-info":"When active, all network connections will be disabled if the app is running but the VPN protection is interrupted (for temporary errors or any other problem). This avoids data leaks.","get-ip":"Get IP info","get-ip-info":"When active, the application will use external services to obtain information about the current IP.","data-units":"Data units","data-units-info":"Allows to select the units that will be used to display the data transmission statistics.","setting-on":"On","setting-off":"Off","working-warning":"The system is busy. Please wait for the previous operation to finish.","change-while-connected-confirmation":"The VPN protection will be interrupted while changing the setting. Do you want to continue?","data-units-modal":{"title":"Data Units","only-bits":"Bits for all stats","only-bytes":"Bytes for all stats","bits-speed-and-bytes-volume":"Bits for speed and bytes for volume (default)"}}}}')}}]);
\ No newline at end of file
diff --git a/cmd/skywire-visor/static/974.75912ef3d0e91c36ba42.js b/cmd/skywire-visor/static/974.75912ef3d0e91c36ba42.js
new file mode 100644
index 0000000000..24a5752957
--- /dev/null
+++ b/cmd/skywire-visor/static/974.75912ef3d0e91c36ba42.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkskywire_manager=self.webpackChunkskywire_manager||[]).push([[974],{43974:function(e){e.exports=JSON.parse('{"common":{"save":"Save","cancel":"Cancel","downloaded":"Downloaded","uploaded":"Uploaded","loading-error":"There was an error getting the data. Retrying...","operation-error":"There was an error trying to complete the operation.","no-connection-error":"There is no internet connection or connection to the Hypervisor.","error":"Error:","refreshed":"Data refreshed.","options":"Options","logout":"Logout","logout-error":"Error logging out.","logout-confirmation":"Are you sure you want to log out?","time-in-ms":"{{ time }}ms.","time-in-segs":"{{ time }}s.","ok":"Ok","yes":"Yes","no":"No","unknown":"Unknown","close":"Close","window-size-error":"The window is too narrow for the content."},"labeled-element":{"edit-label":"Edit label","remove-label":"Remove label","copy":"Copy","remove-label-confirmation":"Do you really want to remove the label?","unnamed-element":"Unnamed","unnamed-local-visor":"Local visor","local-element":"Local","tooltip":"Click to copy the entry or change the label","tooltip-with-text":"{{ text }} (Click to copy the entry or change the label)"},"labels":{"title":"Labels","info":"Labels you have entered to easily identify visors, transports and other elements, instead of having to read machine generated identifiers.","list-title":"Label list","label":"Label","id":"Element ID","type":"Type","delete-confirmation":"Are you sure you want to delete the label?","delete-selected-confirmation":"Are you sure you want to delete the selected labels?","delete":"Delete label","deleted":"Delete operation completed.","empty":"There aren\'t any saved labels.","empty-with-filter":"No label matches the selected filtering criteria.","filter-dialog":{"label":"The label must contain","id":"The id must contain","type":"The type must be","type-options":{"any":"Any","visor":"Visor","dmsg-server":"DMSG server","transport":"Transport"}}},"filters":{"filter-action":"Filter","filter-info":"Filter list.","press-to-remove":"(Press to remove the filters)","remove-confirmation":"Are you sure you want to remove the filters?"},"tables":{"title":"Order by","sorting-title":"Ordered by:","sort-by-value":"Value","sort-by-label":"Label","label":"(label)","inverted-order":"(inverted)"},"start":{"title":"Start"},"node":{"title":"Visor details","not-found":"Visor not found.","statuses":{"online":"Online","online-tooltip":"The visor is online.","connecting":"Connecting","connecting-tooltip":"The visor is online, but still connecting to the uptime tracker.","unknown":"Unknown","unknown-tooltip":"The visor is online, but it has not been possible to determine if it is connected to the uptime tracker.","partially-online":"Online with problems","partially-online-tooltip":"The visor is online, but disconnected from the uptime tracker.","offline":"Offline","offline-tooltip":"The visor is offline."},"details":{"node-info":{"title":"Visor Info","label":"Label:","public-key":"Public key:","symmetic-nat":"Symmetic NAT:","public-ip":"Public IP:","ip":"IP:","dmsg-server":"DMSG server:","ping":"Ping:","node-version":"Visor version:","skybian-version":"Skybian version:","no-skybian-version":"(not using Skybian)","time":{"title":"Time online:","seconds":"a few seconds","minute":"1 minute","minutes":"{{ time }} minutes","hour":"1 hour","hours":"{{ time }} hours","day":"1 day","days":"{{ time }} days","week":"1 week","weeks":"{{ time }} weeks"}},"transports-info":{"title":"Transports Info","autoconnect":"Autoconnect:","autoconnect-info":"When enabled, the visor will automatically create the transports needed when a connection to a public visor is requested. If disabled, the transports will have to be created before being able to make the connection.","enabled":"Enabled","disabled":"Disabled","enable-button":"Enable","disable-button":"Disable","enable-confirmation":"Are you sure you want to enable the autoconnect feature?","disable-confirmation":"Are you sure you want to disable the autoconnect feature?","enable-done":"The autoconnect feature has been enabled.","disable-done":"The autoconnect feature has been disabled."},"router-info":{"title":"Router Info","min-hops":"Min hops:","max-hops":"Max hops:","change-config-button":"Change configuration"},"node-health":{"title":"Health Info","status":"Status:","transport-discovery":"Transport discovery:","route-finder":"Route finder:","setup-node":"Setup node:","uptime-tracker":"Uptime tracker:","address-resolver":"Address resolver:","element-offline":"Offline"},"node-traffic-data":"Traffic data"},"tabs":{"info":"Info","apps":"Apps","routing":"Routing"},"error-load":"An error occurred while refreshing the data. Retrying..."},"router-config":{"title":"Router Configuration","info":"Here you can configure how many hops the connections must pass through other Skywire visors before reaching the final destination. NOTE: the changes will not affect the existing routes.","min-hops":"Min hops","save-config-button":"Save configuration","done":"Changes saved."},"nodes":{"title":"Visor list","dmsg-title":"DMSG","update-all":"Update all online visors","hypervisor":"Hypervisor","state":"State","state-tooltip":"Current state","label":"Label","key":"Key","dmsg-server":"DMSG server","ping":"Ping","hypervisor-info":"This visor is the current Hypervisor.","copy-key":"Copy key","copy-dmsg":"Copy DMSG server key","copy-data":"Copy data","view-node":"View visor","delete-node":"Remove visor","delete-all-offline":"Remove all offline visors","error-load":"An error occurred while refreshing the list. Retrying...","empty":"There aren\'t any visors connected to this hypervisor.","empty-with-filter":"No visor matches the selected filtering criteria.","delete-node-confirmation":"Are you sure you want to remove the visor from the list?","delete-all-offline-confirmation":"Are you sure you want to remove all offline visors from the list?","delete-all-filtered-offline-confirmation":"All offline visors satisfying the current filtering criteria will be removed from the list. Are you sure you want to continue?","deleted":"Visor removed.","deleted-singular":"1 offline visor removed.","deleted-plural":"{{ number }} offline visors removed.","no-visors-to-update":"There are no visors to update.","filter-dialog":{"online":"The visor must be","label":"The label must contain","key":"The public key must contain","dmsg":"The DMSG server key must contain","online-options":{"any":"Online or offline","online":"Online","offline":"Offline"}}},"edit-label":{"label":"Label","done":"Label saved.","label-removed-warning":"The label was removed."},"settings":{"title":"Settings","password":{"initial-config-help":"Use this option for setting the initial password. After a password has been set, it is not possible to use this option to modify it.","help":"Options for changing your password.","old-password":"Old password","new-password":"New password","repeat-password":"Repeat password","password-changed":"Password changed.","error-changing":"Error changing password.","initial-config":{"title":"Set initial password","password":"Password","repeat-password":"Repeat password","set-password":"Set password","done":"Password set. Please use it to access the system.","error":"Error. Please make sure you have not already set the password."},"errors":{"bad-old-password":"The provided old password is not correct.","old-password-required":"Old password is required.","new-password-error":"Password must be 6-64 characters long.","passwords-not-match":"Passwords do not match.","default-password":"Don\'t use the default password (1234)."}},"updater-config":{"open-link":"Show updater settings","open-confirmation":"The updater settings are for experienced users only. Are you sure you want to continue?","help":"Use this form for overriding the settings that will be used by the updater. All empty fields will be ignored. The settings will be used for all updating operations, no mater which element is being updated, so please be careful.","channel":"Channel","version":"Version","archive-url":"Archive URL","checksum-url":"Checksum URL","not-saved":"The changes have not been saved yet.","save":"Save changes","remove-settings":"Remove the settings","saved":"The custom settings have been saved.","removed":"The custom settings have been removed.","save-confirmation":"Are you sure you want to apply the custom settings?","remove-confirmation":"Are you sure you want to remove the custom settings?"},"change-password":"Change password","refresh-rate":"Refresh rate","refresh-rate-help":"Time the system waits to update the data automatically.","refresh-rate-confirmation":"Refresh rate changed.","seconds":"seconds"},"login":{"password":"Password","incorrect-password":"Incorrect password.","initial-config":"Configure initial launch"},"actions":{"menu":{"terminal":"Terminal","config":"Configuration","update":"Update","reboot":"Reboot","logs":"View logs"},"reboot":{"confirmation":"Are you sure you want to reboot the visor?","done":"The visor is restarting."},"terminal-options":{"full":"Full terminal","simple":"Simple terminal"},"terminal":{"title":"Terminal","input-start":"Skywire terminal for {{address}}","error":"Unexpected error while trying to execute the command."}},"update":{"title":"Update","error-title":"Error","processing":"Looking for updates...","no-update":"There is no update for the visor. The currently installed version is:","no-updates":"No new updates were found.","already-updating":"Some visors are already being updated:","update-available":"The following updates were found:","update-available-singular":"The following updates for 1 visor were found:","update-available-plural":"The following updates for {{ number }} visors were found:","update-available-additional-singular":"The following additional updates for 1 visor were found:","update-available-additional-plural":"The following additional updates for {{ number }} visors were found:","update-instructions":"Click the \'Install updates\' button to continue.","updating":"The update operation has been started, you can open this window again for checking the progress:","version-change":"From {{ currentVersion }} to {{ newVersion }}","selected-channel":"Selected channel:","downloaded-file-name-prefix":"Downloading: ","speed-prefix":"Speed: ","time-downloading-prefix":"Time downloading: ","time-left-prefix":"Aprox. time left: ","starting":"Preparing to update","finished":"Status connection finished","install":"Install updates"},"apps":{"log":{"title":"Log","empty":"There are no log messages for the selected time range.","filter-button":"Only showing logs generated since:","filter":{"title":"Filter","filter":"Only show logs generated since","7-days":"The last 7 days","1-month":"The last 30 days","3-months":"The last 3 months","6-months":"The last 6 months","1-year":"The last year","all":"Show all"}},"apps-list":{"title":"Applications","list-title":"Application list","app-name":"Name","port":"Port","state":"State","state-tooltip":"Current state","auto-start":"Auto start","empty":"Visor doesn\'t have any applications.","empty-with-filter":"No app matches the selected filtering criteria.","disable-autostart":"Disable autostart","enable-autostart":"Enable autostart","autostart-disabled":"Autostart disabled","autostart-enabled":"Autostart enabled","unavailable-logs-error":"Unable to show the logs while the app is not running.","filter-dialog":{"state":"The state must be","name":"The name must contain","port":"The port must contain","autostart":"The autostart must be","state-options":{"any":"Running or stopped","running":"Running","stopped":"Stopped"},"autostart-options":{"any":"Enabled or disabled","enabled":"Enabled","disabled":"Disabled"}}},"vpn-socks-server-settings":{"socks-title":"Skysocks Settings","vpn-title":"VPN-Server Settings","new-password":"New password (Leave empty to remove the password)","repeat-password":"Repeat password","passwords-not-match":"Passwords do not match.","secure-mode-check":"Use secure mode","secure-mode-info":"When active, the server doesn\'t allow client/server SSH and doesn\'t allow any traffic from VPN clients to the server local network.","save":"Save","remove-passowrd-confirmation":"You left the password field empty. Are you sure you want to remove the password?","change-passowrd-confirmation":"Are you sure you want to change the password?","changes-made":"The changes have been made."},"vpn-socks-client-settings":{"socks-title":"Skysocks-Client Settings","vpn-title":"VPN-Client Settings","discovery-tab":"Search","remote-visor-tab":"Enter manually","history-tab":"History","settings-tab":"Settings","use":"Use this data","change-note":"Change note","remove-entry":"Remove entry","note":"Note:","note-entered-manually":"Entered manually","note-obtained":"Obtained from the discovery service","key":"Key:","port":"Port:","location":"Location:","state-available":"Available","state-offline":"Offline","public-key":"Remote visor public key","password":"Password","password-history-warning":"Note: the password will not be saved in the history.","copy-pk-info":"Copy public key.","copied-pk-info":"The public key has been copied.","copy-pk-error":"There was a problem copying the public key.","no-elements":"Currently there are no elements to show. Please try again later.","no-elements-for-filters":"There are no elements that meet the filter criteria.","no-filter":"No filter has been selected","click-to-change":"Click to change","remote-key-length-error":"The public key must be 66 characters long.","remote-key-chars-error":"The public key must only contain hexadecimal characters.","save":"Save","remove-from-history-confirmation":"Are you sure you want to remove the entry from the history?","change-key-confirmation":"Are you sure you want to change the remote visor public key?","changes-made":"The changes have been made.","no-history":"This tab will show the last {{ number }} public keys used.","default-note-warning":"The default note has been used.","pagination-info":"{{ currentElementsRange }} of {{ totalElements }}","killswitch-check":"Activate killswitch","killswitch-info":"When active, all network connections will be disabled if the app is running but the VPN protection is interrupted (for temporary errors or any other problem). This avoids data leaks.","settings-changed-alert":" The changes have not been saved yet.","save-settings":"Save settings","change-note-dialog":{"title":"Change Note","note":"Note"},"password-dialog":{"title":"Enter Password","password":"Password","info":"You are being asked for a password because a password was set when the selected entry was created, but the it was not saved for security reasons. You can leave the password empty if needed.","continue-button":"Continue"},"filter-dialog":{"title":"Filters","country":"The country must be","any-country":"Any","location":"The location must contain","pub-key":"The public key must contain","apply":"Apply"}},"stop-app":"Stop","start-app":"Start","view-logs":"View logs","settings":"Settings","open":"Open","error":"An error has occured and it was not possible to perform the operation.","stop-confirmation":"Are you sure you want to stop the app?","stop-selected-confirmation":"Are you sure you want to stop the selected apps?","disable-autostart-confirmation":"Are you sure you want to disable autostart for the app?","enable-autostart-confirmation":"Are you sure you want to enable autostart for the app?","disable-autostart-selected-confirmation":"Are you sure you want to disable autostart for the selected apps?","enable-autostart-selected-confirmation":"Are you sure you want to enable autostart for the selected apps?","operation-completed":"Operation completed.","operation-unnecessary":"The selection already has the requested setting.","status-running":"Running","status-stopped":"Stopped","status-failed":"Failed","status-running-tooltip":"App is currently running","status-stopped-tooltip":"App is currently stopped","status-failed-tooltip":"Something went wrong. Check the app\'s messages for more information"},"transports":{"title":"Transports","info":"Connections you have with remote Skywire visors, to allow local Skywire apps to communicate with apps running on those remote visors.","list-title":"Transport list","offline":"Offline","persistent":"Persistent","persistent-tooltip":"Persistent transports, which are created automatically when the visor is turned on and are automatically recreated in case of disconnection.","persistent-transport-tooltip":"This transport is persistent, so it is created automatically when the visor is turned on and automatically recreated in case of disconnection.","persistent-transport-button-tooltip":"This transport is persistent, so it is created automatically when the visor is turned on and automatically recreated in case of disconnection. Press to make non-persistent.","non-persistent-transport-button-tooltip":"Press to make this transport persistent. Persistent transports are created automatically when the visor is turned on and automatically recreated in case of disconnection.","make-persistent":"Make persistent","make-non-persistent":"Make non-persistent","make-selected-persistent":"Make all selected persistent","make-selected-non-persistent":"Make all selected non-persistent","changes-made":"Changes made.","no-changes-needed":"No changes were needed.","id":"ID","remote-node":"Remote","type":"Type","create":"Create transport","make-persistent-confirmation":"Are you sure you want to make the transport persistent?","make-non-persistent-confirmation":"Are you sure you want to make the transport non-persistent?","make-selected-persistent-confirmation":"Are you sure you want to make the selected transports persistent?","make-selected-non-persistent-confirmation":"Are you sure you want to make the selected transports non-persistent?","make-offline-non-persistent-confirmation":"Are you sure you want to make the transport non-persistent? It will not be shown in the list while offline anymore.","delete-confirmation":"Are you sure you want to delete the transport?","delete-persistent-confirmation":"This transport is persistent, so it may be recreated shortly after deletion. Are you sure you want to delete it?","delete-selected-confirmation":"Are you sure you want to delete the selected transports?","delete":"Delete transport","deleted":"Delete operation completed.","empty":"Visor doesn\'t have any transports.","empty-with-filter":"No transport matches the selected filtering criteria.","details":{"title":"Details","basic":{"title":"Basic info","persistent":"Persistent:","id":"ID:","local-pk":"Local public key:","remote-pk":"Remote public key:","type":"Type:"},"data":{"title":"Data transmission","uploaded":"Uploaded data:","downloaded":"Downloaded data:"}},"dialog":{"remote-key":"Remote public key","label":"Identification name (optional)","transport-type":"Transport type","make-persistent":"Make persistent","persistent-tooltip":"Persistent transports are created automatically when the visor is turned on and automatically recreated in case of disconnection.","only-persistent-created":"The persistent transport was created, but it may have not been activated.","success":"Transport created.","success-without-label":"The transport was created, but it was not possible to save the label.","errors":{"remote-key-length-error":"The remote public key must be 66 characters long.","remote-key-chars-error":"The remote public key must only contain hexadecimal characters.","transport-type-error":"The transport type is required."}},"filter-dialog":{"persistent":"The transport must be","id":"The id must contain","remote-node":"The remote key must contain","persistent-options":{"any":"Any","persistent":"Persistent","non-persistent":"Non-persistent"}}},"routes":{"title":"Routes","info":"Paths used to reach the remote visors to which transports have been established. Routes are automatically generated as needed.","list-title":"Route list","key":"Key","type":"Type","source":"Source","destination":"Destination","delete-confirmation":"Are you sure you want to delete the route?","delete-selected-confirmation":"Are you sure you want to delete the selected routes?","delete":"Delete route","deleted":"Delete operation completed.","empty":"Visor doesn\'t have any routes.","empty-with-filter":"No route matches the selected filtering criteria.","details":{"title":"Details","basic":{"title":"Basic info","key":"Key:","rule":"Rule:"},"summary":{"title":"Rule summary","keep-alive":"Keep alive:","type":"Rule type:","key-route-id":"Key route ID:"},"specific-fields-titles":{"app":"App fields","forward":"Forward fields","intermediary-forward":"Intermediary forward fields"},"specific-fields":{"route-id":"Next route ID:","transport-id":"Next transport ID:","destination-pk":"Destination public key:","source-pk":"Source public key:","destination-port":"Destination port:","source-port":"Source port:"}},"filter-dialog":{"key":"The key must contain","type":"The type must be","source":"The source must contain","destination":"The destination must contain","any-type-option":"Any"}},"copy":{"tooltip":"Click to copy","tooltip-with-text":"{{ text }} (Click to copy)","copied":"Copied!"},"selection":{"select-all":"Select all","unselect-all":"Unselect all","delete-all":"Delete all selected elements","start-all":"Start all selected apps","stop-all":"Stop all selected apps","enable-autostart-all":"Enable autostart for all selected apps","disable-autostart-all":"Disable autostart for all selected apps"},"refresh-button":{"seconds":"Updated a few seconds ago","minute":"Updated 1 minute ago","minutes":"Updated {{ time }} minutes ago","hour":"Updated 1 hour ago","hours":"Updated {{ time }} hours ago","day":"Updated 1 day ago","days":"Updated {{ time }} days ago","week":"Updated 1 week ago","weeks":"Updated {{ time }} weeks ago","error-tooltip":"There was an error updating the data. Retrying automatically every {{ time }} seconds..."},"view-all-link":{"label":"View all {{ number }} elements"},"paginator":{"first":"First","last":"Last","total":"Total: {{ number }} pages","select-page-title":"Select page"},"confirmation":{"header-text":"Confirmation","confirm-button":"Yes","cancel-button":"No","close":"Close","error-header-text":"Error","done-header-text":"Done"},"language":{"title":"Select language"},"tabs-window":{"title":"Change tab"},"vpn":{"title":"VPN Control Panel","start":"Start","servers":"Servers","settings":"Settings","unnamed":"Unnamed","starting-blocked-server-error":"Unable to connect to the selected server because it has been added to the blocked servers list.","unexpedted-error":"An unexpected error occurred and the operation could not be completed.","remote-access-title":"It appears that you are accessing the system remotely","remote-access-text":"This application only allows you to manage the VPN protection of the device on which it was installed. Changes made with it will not affect remote devices like the one you seem to be using. Also, the displayed IP data may be incorrect.","server-change":{"busy-error":"The system is busy. Please wait.","backend-error":"It was not possible to change the server. Please make sure the public key is correct and the VPN app is running.","already-selected-warning":"The selected server is already being used.","change-server-while-connected-confirmation":"The VPN protection will be interrupted while changing the server and some data may be transmitted unprotected during the process. Do you want to continue?","start-same-server-confirmation":"You had already selected that server. Do you want to connect to it?"},"error-page":{"text":"The VPN client app is not available.","more-info":"It was not possible to connect to the VPN client app. This may be due to a configuration error, an unexpected problem with the visor or because you used an invalid public key in the URL.","text-pk":"Invalid configuration.","more-info-pk":"The application cannot be started because you have not specified the visor public key.","text-storage":"Error saving data.","more-info-storage":"There has been a conflict when trying to save the data and the application has been closed to prevent errors. This could happen if you open the application in more than one tab or window.","text-pk-change":"Invalid operation.","more-info-pk-change":"Please use this application to manage only one VPN client."},"connection-info":{"state-title":"Your connection is currently:","state-connecting":"Connecting","state-connecting-info":"The VPN protection is being activated.","state-connected":"Connected","state-connected-info":"The VPN protection is on.","state-disconnecting":"Disconnecting","state-disconnecting-info":"The VPN protection is being deactivated.","state-reconnecting":"Reconnecting","state-reconnecting-info":"The VPN protection is being restored.","state-disconnected":"Disconnected","state-disconnected-info":"The VPN protection is off.","state-info":"Current connection status.","latency-info":"Current latency.","upload-info":"Upload speed.","download-info":"Download speed."},"connection-error":{"text":"Connection error","info":"Problem connecting with the vpn app. Some data being displayed could be outdated."},"status-page":{"start-title":"Start VPN","no-server":"No server selected!","disconnect":"Disconnect","last-error":"Last error:","unknown-error":"Unknown error.","disconnect-confirmation":"Are you sure you want to stop the VPN protection?","upload-info":"Uploaded data stats.","download-info":"Downloaded data stats.","latency-info":"Latency stats.","total-data-label":"total","problem-connecting-error":"It was not possible to connect to the server. The server may be invalid or temporarily down.","problem-starting-error":"It was not possible to start the VPN. Please make sure the base VPN client app is running.","problem-stopping-error":"It was not possible to stop the VPN. Please make sure the base VPN client app is running.","generic-problem-error":"It was not possible to perform the operation. Please make sure the base VPN client app is running.","select-server-warning":"Please select a server first.","data":{"ip":"IP address:","ip-problem-info":"There was a problem trying to get the IP. Please verify it using an external service.","ip-country-problem-info":"There was a problem trying to get the country. Please verify it using an external service.","ip-refresh-info":"Refresh","ip-refresh-time-warning":"Please wait {{ seconds }} second(s) before refreshing the data.","ip-refresh-loading-warning":"Please wait for the previous operation to finish.","country":"Country:","server":"Server:","server-note":"Server note:","original-server-note":"Original server note:","local-pk":"Local visor public key:","remote-pk":"Remote visor public key:","unavailable":"Unavailable"}},"server-options":{"tooltip":"Options","connect-without-password":"Connect without password","connect-without-password-confirmation":"The connection will be made without the password. Are you sure you want to continue?","connect-using-password":"Connect using a password","connect-using-another-password":"Connect using another password","edit-name":"Custom name","edit-label":"Custom note","make-favorite":"Make favorite","make-favorite-confirmation":"Are you sure you want to mark this server as favorite? It will be removed from the blocked list.","make-favorite-done":"Added to the favorites list.","remove-from-favorites":"Remove from favorites","remove-from-favorites-done":"Removed from the favorites list.","block":"Block server","block-done":"Added to the blocked list.","block-confirmation":"Are you sure you want to block this server? It will be removed from the favorites list.","block-selected-confirmation":"Are you sure you want to block the currently selected server? All connections will be closed.","block-selected-favorite-confirmation":"Are you sure you want to block the currently selected server? All connections will be closed and it will be removed from the favorites list.","unblock":"Unblock server","unblock-done":"Removed from the blocked list.","remove-from-history":"Remove from history","remove-from-history-confirmation":"Are you sure you want to remove this server from the history?","remove-from-history-done":"Removed from history.","edit-value":{"name-title":"Custom Name","note-title":"Custom Note","name-label":"Custom name","note-label":"Custom note","apply-button":"Apply","changes-made-confirmation":"The change has been made."}},"server-conditions":{"selected-info":"This is the currently selected server.","blocked-info":"This server is in the blocked list.","favorite-info":"This server is in the favorites list.","history-info":"This server is in the server history.","has-password-info":"A password was set for connecting with this server."},"server-list":{"date-small-table-label":"Date","date-info":"Last time you used this server.","country-small-table-label":"Country","country-info":"Country where the server is located.","name-small-table-label":"Name","location-small-table-label":"Location","public-key-small-table-label":"Pk","public-key-info":"Server public key.","congestion-rating-small-table-label":"Congestion rating","congestion-rating-info":"Rating of the server related to how congested it tends to be.","congestion-small-table-label":"Congestion","congestion-info":"Current server congestion.","latency-rating-small-table-label":"Latency rating","latency-rating-info":"Rating of the server related to how much latency it tends to have.","latency-small-table-label":"Latency","latency-info":"Current server latency.","hops-small-table-label":"Hops","hops-info":"How many hops are needed for connecting with the server.","note-small-table-label":"Note","note-info":"Note about the server.","gold-rating-info":"Gold","silver-rating-info":"Silver","bronze-rating-info":"Bronze","notes-info":"Custom note: {{ custom }} - Original note: {{ original }}","empty-discovery":"Currently there are no VPN servers to show. Please try again later.","empty-history":"There is no history to show.","empty-favorites":"There are no favorite servers to show.","empty-blocked":"There are no blocked servers to show.","empty-with-filter":"No VPN server matches the selected filtering criteria.","add-manually-info":"Add server manually.","current-filters":"Current filters (press to remove)","none":"None","unknown":"Unknown","tabs":{"public":"Public","history":"History","favorites":"Favorites","blocked":"Blocked"},"add-server-dialog":{"title":"Enter manually","pk-label":"Server public key","password-label":"Server password (if any)","name-label":"Server name (optional)","note-label":"Personal note (optional)","pk-length-error":"The public key must be 66 characters long.","pk-chars-error":"The public key must only contain hexadecimal characters.","use-server-button":"Use server"},"password-dialog":{"title":"Enter Password","password-if-any-label":"Server password (if any)","password-label":"Server password","continue-button":"Continue"},"filter-dialog":{"country":"The country must be","name":"The name must contain","location":"The location must contain","public-key":"The public key must contain","congestion-rating":"The congestion rating must be","latency-rating":"The latency rating must be","rating-options":{"any":"Any","gold":"Gold","silver":"Silver","bronze":"Bronze"},"country-options":{"any":"Any"}}},"settings-page":{"setting-small-table-label":"Setting","value-small-table-label":"Value","killswitch":"Killswitch","killswitch-info":"When active, all network connections will be disabled if the app is running but the VPN protection is interrupted (for temporary errors or any other problem). This avoids data leaks.","get-ip":"Get IP info","get-ip-info":"When active, the application will use external services to obtain information about the current IP.","data-units":"Data units","data-units-info":"Allows to select the units that will be used to display the data transmission statistics.","minimum-hops":"Minimum hops","minimum-hops-info":"Allows to set the minimum number of hops the connections must pass through other Skywire visors before reaching the final destination.","setting-on":"On","setting-off":"Off","working-warning":"The system is busy. Please wait for the previous operation to finish.","change-while-connected-confirmation":"The VPN protection will be interrupted while changing the setting. Do you want to continue?","data-units-modal":{"title":"Data Units","only-bits":"Bits for all stats","only-bytes":"Bytes for all stats","bits-speed-and-bytes-volume":"Bits for speed and bytes for volume (default)"}}}}')}}]);
\ No newline at end of file
diff --git a/cmd/skywire-visor/static/assets/i18n/en.json b/cmd/skywire-visor/static/assets/i18n/en.json
index 240d2a5f38..1863502b4d 100644
--- a/cmd/skywire-visor/static/assets/i18n/en.json
+++ b/cmd/skywire-visor/static/assets/i18n/en.json
@@ -16,6 +16,8 @@
"time-in-ms": "{{ time }}ms.",
"time-in-segs": "{{ time }}s.",
"ok": "Ok",
+ "yes": "Yes",
+ "no": "No",
"unknown": "Unknown",
"close": "Close",
"window-size-error": "The window is too narrow for the content."
@@ -85,21 +87,29 @@
"not-found": "Visor not found.",
"statuses": {
"online": "Online",
- "online-tooltip": "Visor is online.",
+ "online-tooltip": "The visor is online.",
+ "connecting": "Connecting",
+ "connecting-tooltip": "The visor is online, but still connecting to the uptime tracker.",
+ "unknown": "Unknown",
+ "unknown-tooltip": "The visor is online, but it has not been possible to determine if it is connected to the uptime tracker.",
"partially-online": "Online with problems",
- "partially-online-tooltip": "Visor is online but not all services are working. For more information, open the details page and check the \"Health info\" section.",
+ "partially-online-tooltip": "The visor is online, but disconnected from the uptime tracker.",
"offline": "Offline",
- "offline-tooltip": "Visor is offline."
+ "offline-tooltip": "The visor is offline."
},
"details": {
"node-info": {
"title": "Visor Info",
"label": "Label:",
"public-key": "Public key:",
+ "symmetic-nat": "Symmetic NAT:",
+ "public-ip": "Public IP:",
"ip": "IP:",
"dmsg-server": "DMSG server:",
"ping": "Ping:",
"node-version": "Visor version:",
+ "skybian-version": "Skybian version:",
+ "no-skybian-version": "(not using Skybian)",
"time": {
"title": "Time online:",
"seconds": "a few seconds",
@@ -113,6 +123,19 @@
"weeks": "{{ time }} weeks"
}
},
+ "transports-info": {
+ "title": "Transports Info",
+ "autoconnect": "Autoconnect:",
+ "autoconnect-info": "When enabled, the visor will automatically create the transports needed when a connection to a public visor is requested. If disabled, the transports will have to be created before being able to make the connection.",
+ "enabled": "Enabled",
+ "disabled": "Disabled",
+ "enable-button": "Enable",
+ "disable-button": "Disable",
+ "enable-confirmation": "Are you sure you want to enable the autoconnect feature?",
+ "disable-confirmation": "Are you sure you want to disable the autoconnect feature?",
+ "enable-done": "The autoconnect feature has been enabled.",
+ "disable-done": "The autoconnect feature has been disabled."
+ },
"router-info": {
"title": "Router Info",
"min-hops": "Min hops:",
@@ -121,13 +144,9 @@
},
"node-health": {
"title": "Health Info",
- "status": "Status:",
- "transport-discovery": "Transport discovery:",
- "route-finder": "Route finder:",
- "setup-node": "Setup node:",
"uptime-tracker": "Uptime tracker:",
- "address-resolver": "Address resolver:",
- "element-offline": "Offline"
+ "connected": "Connected",
+ "disconnected": "Disconnected"
},
"node-traffic-data": "Traffic data"
},
@@ -449,34 +468,41 @@
"transports": {
"title": "Transports",
- "remove-all-offline": "Remove all offline transports",
- "remove-all-offline-confirmation": "Are you sure you want to remove all offline transports?",
- "remove-all-filtered-offline-confirmation": "All offline transports satisfying the current filtering criteria will be removed. Are you sure you want to continue?",
"info": "Connections you have with remote Skywire visors, to allow local Skywire apps to communicate with apps running on those remote visors.",
"list-title": "Transport list",
- "state": "State",
- "state-tooltip": "Current state",
+ "offline": "Offline",
+ "persistent": "Persistent",
+ "persistent-tooltip": "Persistent transports, which are created automatically when the visor is turned on and are automatically recreated in case of disconnection.",
+ "persistent-transport-tooltip": "This transport is persistent, so it is created automatically when the visor is turned on and automatically recreated in case of disconnection.",
+ "persistent-transport-button-tooltip": "This transport is persistent, so it is created automatically when the visor is turned on and automatically recreated in case of disconnection. Press to make non-persistent.",
+ "non-persistent-transport-button-tooltip": "Press to make this transport persistent. Persistent transports are created automatically when the visor is turned on and automatically recreated in case of disconnection.",
+ "make-persistent": "Make persistent",
+ "make-non-persistent": "Make non-persistent",
+ "make-selected-persistent": "Make all selected persistent",
+ "make-selected-non-persistent": "Make all selected non-persistent",
+ "changes-made": "Changes made.",
+ "no-changes-needed": "No changes were needed.",
"id": "ID",
"remote-node": "Remote",
"type": "Type",
"create": "Create transport",
+ "make-persistent-confirmation": "Are you sure you want to make the transport persistent?",
+ "make-non-persistent-confirmation": "Are you sure you want to make the transport non-persistent?",
+ "make-selected-persistent-confirmation": "Are you sure you want to make the selected transports persistent?",
+ "make-selected-non-persistent-confirmation": "Are you sure you want to make the selected transports non-persistent?",
+ "make-offline-non-persistent-confirmation": "Are you sure you want to make the transport non-persistent? It will not be shown in the list while offline anymore.",
"delete-confirmation": "Are you sure you want to delete the transport?",
+ "delete-persistent-confirmation": "This transport is persistent, so it may be recreated shortly after deletion. Are you sure you want to delete it?",
"delete-selected-confirmation": "Are you sure you want to delete the selected transports?",
"delete": "Delete transport",
"deleted": "Delete operation completed.",
"empty": "Visor doesn't have any transports.",
"empty-with-filter": "No transport matches the selected filtering criteria.",
- "statuses": {
- "online": "Online",
- "online-tooltip": "Transport is online",
- "offline": "Offline",
- "offline-tooltip": "Transport is offline"
- },
"details": {
"title": "Details",
"basic": {
"title": "Basic info",
- "state": "State:",
+ "persistent": "Persistent:",
"id": "ID:",
"local-pk": "Local public key:",
"remote-pk": "Remote public key:",
@@ -492,6 +518,9 @@
"remote-key": "Remote public key",
"label": "Identification name (optional)",
"transport-type": "Transport type",
+ "make-persistent": "Make persistent",
+ "persistent-tooltip": "Persistent transports are created automatically when the visor is turned on and automatically recreated in case of disconnection.",
+ "only-persistent-created": "The persistent transport was created, but it may have not been activated.",
"success": "Transport created.",
"success-without-label": "The transport was created, but it was not possible to save the label.",
"errors": {
@@ -501,14 +530,14 @@
}
},
"filter-dialog": {
- "online": "The transport must be",
+ "persistent": "The transport must be",
"id": "The id must contain",
"remote-node": "The remote key must contain",
- "online-options": {
- "any": "Online or offline",
- "online": "Online",
- "offline": "Offline"
+ "persistent-options": {
+ "any": "Any",
+ "persistent": "Persistent",
+ "non-persistent": "Non-persistent"
}
}
},
@@ -626,6 +655,8 @@
"servers": "Servers",
"settings": "Settings",
+ "unnamed": "Unnamed",
+
"starting-blocked-server-error": "Unable to connect to the selected server because it has been added to the blocked servers list.",
"unexpedted-error": "An unexpected error occurred and the operation could not be completed.",
@@ -652,6 +683,7 @@
},
"connection-info" : {
+ "state-title": "Your connection is currently:",
"state-connecting": "Connecting",
"state-connecting-info": "The VPN protection is being activated.",
"state-connected": "Connected",
@@ -668,12 +700,18 @@
"download-info": "Download speed."
},
+ "connection-error" : {
+ "text": "Connection error",
+ "info": "Problem connecting with the vpn app. Some data being displayed could be outdated."
+ },
+
"status-page": {
"start-title": "Start VPN",
"no-server": "No server selected!",
"disconnect": "Disconnect",
+ "last-error": "Last error:",
+ "unknown-error": "Unknown error.",
"disconnect-confirmation": "Are you sure you want to stop the VPN protection?",
- "entered-manually": "Entered manually",
"upload-info": "Uploaded data stats.",
"download-info": "Downloaded data stats.",
"latency-info": "Latency stats.",
@@ -706,6 +744,7 @@
"connect-without-password": "Connect without password",
"connect-without-password-confirmation": "The connection will be made without the password. Are you sure you want to continue?",
"connect-using-password": "Connect using a password",
+ "connect-using-another-password": "Connect using another password",
"edit-name": "Custom name",
"edit-label": "Custom note",
"make-favorite": "Make favorite",
@@ -832,6 +871,8 @@
"get-ip-info": "When active, the application will use external services to obtain information about the current IP.",
"data-units": "Data units",
"data-units-info": "Allows to select the units that will be used to display the data transmission statistics.",
+ "minimum-hops": "Minimum hops",
+ "minimum-hops-info": "Allows to set the minimum number of hops the connections must pass through other Skywire visors before reaching the final destination.",
"setting-on": "On",
"setting-off": "Off",
"working-warning": "The system is busy. Please wait for the previous operation to finish.",
diff --git a/cmd/skywire-visor/static/assets/i18n/es.json b/cmd/skywire-visor/static/assets/i18n/es.json
index 7812802fad..685d9ad3d7 100644
--- a/cmd/skywire-visor/static/assets/i18n/es.json
+++ b/cmd/skywire-visor/static/assets/i18n/es.json
@@ -16,6 +16,8 @@
"time-in-ms": "{{ time }}ms.",
"time-in-segs": "{{ time }}s.",
"ok": "Ok",
+ "yes": "SÃ",
+ "no": "No",
"unknown": "Desconocido",
"close": "Cerrar",
"window-size-error": "La ventana es demasiado estrecha para el contenido."
@@ -86,8 +88,12 @@
"statuses": {
"online": "Online",
"online-tooltip": "El visor se encuentra online.",
+ "connecting": "Conectando",
+ "connecting-tooltip": "El visor se encuentra online, pero todavÃa está conectando con el uptime tracker.",
+ "unknown": "Desconocido",
+ "unknown-tooltip": "El visor se encuentra online, pero no ha sido posible determinar si está conectado con el uptime tracker.",
"partially-online": "Online con problemas",
- "partially-online-tooltip": "El visor se encuentra online pero no todos los servicios están funcionando. Para más información, abra la página de detalles y consulte la sección \"Información de salud\".",
+ "partially-online-tooltip": "El visor se encuentra online, pero desconectado del uptime tracker.",
"offline": "Offline",
"offline-tooltip": "El visor se encuentra offline."
},
@@ -96,10 +102,14 @@
"title": "Información del visor",
"label": "Etiqueta:",
"public-key": "Llave pública:",
+ "symmetic-nat": "NAT simétrica:",
+ "public-ip": "IP pública:",
"ip": "IP:",
"dmsg-server": "Servidor DMSG:",
"ping": "Ping:",
"node-version": "Versión del visor:",
+ "skybian-version": "Versión de Skybian:",
+ "no-skybian-version": "(no se usa Skybian)",
"time": {
"title": "Tiempo online:",
"seconds": "unos segundos",
@@ -113,6 +123,19 @@
"weeks": "{{ time }} semanas"
}
},
+ "transports-info": {
+ "title": "Información de Transportes",
+ "autoconnect": "Autoconectar:",
+ "autoconnect-info": "Al activarse, el visor creará automáticamente los transportes necesarios cuando se solicite la conexión a un visor público. Al desactivarse, los transportes deberán ser creados antes de poder establecer la conexión.",
+ "enabled": "Activado",
+ "disabled": "Desactivado",
+ "enable-button": "Activar",
+ "disable-button": "Desactivar",
+ "enable-confirmation": "¿Seguro que desea activar la función de autoconectar?",
+ "disable-confirmation": "¿Seguro que desea desactivar la función de autoconectar?",
+ "enable-done": "La función de autoconectar ha sido activada.",
+ "disable-done": "La función de autoconectar ha sido desactivada."
+ },
"router-info": {
"title": "Información del Enrutador",
"min-hops": "Saltos mÃnimos:",
@@ -449,34 +472,41 @@
"transports": {
"title": "Transportes",
- "remove-all-offline": "Remover todos los transportes offline",
- "remove-all-offline-confirmation": "¿Seguro que desea remover todos los transportes offline?",
- "remove-all-filtered-offline-confirmation": "Todos los transportes offline que satisfagan los criterios de filtrado actuales serán removidos. ¿Seguro que desea continuar?",
"info": "Conexiones que tiene con visores remotos de Skywire, para permitir que las aplicaciones Skywire locales se comuniquen con las aplicaciones que se ejecutan en esos visores remotos.",
"list-title": "Lista de transportes",
- "state": "Estado",
- "state-tooltip": "Estado actual",
+ "offline": "Offline",
+ "persistent": "Persistente",
+ "persistent-tooltip": "Transportes persistentes, los cuales son creados automáticamente al iniciar el visor y son recreados automáticamente en caso de desconexión.",
+ "persistent-transport-tooltip": "Este transporte es persistente, asà que es creado automáticamente al iniciar el visor y es recreado automáticamente en caso de desconexión.",
+ "persistent-transport-button-tooltip": "Este transporte es persistente, asà que es creado automáticamente al iniciar el visor y es recreado automáticamente en caso de desconexión. Presione aquà para volverlo no persistente.",
+ "non-persistent-transport-button-tooltip": "Presione aquà para volver persistente el transporte. Los transportes persistentes son creados automáticamente al iniciar el visor y son recreados automáticamente en caso de desconexión.",
+ "make-persistent": "Volver persistente",
+ "make-non-persistent": "Volver no persistente",
+ "make-selected-persistent": "Volver persistentes los seleccionados",
+ "make-selected-non-persistent": "Volver no persistentes los seleccionados",
+ "changes-made": "Cambios hechos.",
+ "no-changes-needed": "Ningún cambio fue necesario.",
"id": "ID",
"remote-node": "Remoto",
"type": "Tipo",
"create": "Crear transporte",
+ "make-persistent-confirmation": "¿Seguro que desea volver persistente el transporte?",
+ "make-non-persistent-confirmation": "¿Seguro que desea volver no persistente el transporte?",
+ "make-selected-persistent-confirmation": "¿Seguro que desea volver persistentes los transportes seleccionados?",
+ "make-selected-non-persistent-confirmation": "¿Seguro que desea volver no persistentes los transportes seleccionados?",
+ "make-offline-non-persistent-confirmation": "¿Seguro que desea volver no persistente el transporte? No seguirá siendo mostrado en la lista mientras se encuentre offline.",
"delete-confirmation": "¿Seguro que desea borrar el transporte?",
+ "delete-persistent-confirmation": "Este transporte es persistente, asà que puede ser recreado poco después de ser borrado. ¿Seguro que desea borrarlo?",
"delete-selected-confirmation": "¿Seguro que desea borrar los transportes seleccionados?",
"delete": "Borrar transporte",
"deleted": "Operación de borrado completada.",
"empty": "El visor no tiene ningún transporte.",
"empty-with-filter": "Ningun transporte coincide con los criterios de filtrado seleccionados.",
- "statuses": {
- "online": "Online",
- "online-tooltip": "El transporte está online",
- "offline": "Offline",
- "offline-tooltip": "El transporte está offline"
- },
"details": {
"title": "Detalles",
"basic": {
"title": "Información básica",
- "state": "Estado:",
+ "persistent": "Persistente:",
"id": "ID:",
"local-pk": "Llave pública local:",
"remote-pk": "Llave pública remota:",
@@ -492,6 +522,9 @@
"remote-key": "Llave pública remota",
"label": "Nombre del transporte (opcional)",
"transport-type": "Tipo de transporte",
+ "make-persistent": "Hacer persistente",
+ "persistent-tooltip": "Los transportes persistentes son creados automáticamente al iniciar el visor y son recreados automáticamente en caso de desconexión.",
+ "only-persistent-created": "El transporte persistente fue creado, pero podrÃa no haber sido activado.",
"success": "Transporte creado.",
"success-without-label": "El transporte fue creado, pero no fue posible guardar la etiqueta.",
"errors": {
@@ -501,14 +534,14 @@
}
},
"filter-dialog": {
- "online": "El transporte debe estar",
+ "persistent": "El transporte debe ser",
"id": "El id debe contener",
"remote-node": "La llave remota debe contener",
- "online-options": {
- "any": "Online u offline",
- "online": "Online",
- "offline": "Offline"
+ "persistent-options": {
+ "any": "Cualquiera",
+ "persistent": "Persistente",
+ "non-persistent": "No persistente"
}
}
},
@@ -626,6 +659,8 @@
"servers": "Servidores",
"settings": "Configuracion",
+ "unnamed": "Sin nombre",
+
"starting-blocked-server-error": "No se puede conectar con el servidor seleccionado porque se ha agregado a la lista de servidores bloqueados.",
"unexpedted-error": "Se produjo un error inesperado y no se pudo completar la operación.",
@@ -652,6 +687,7 @@
},
"connection-info" : {
+ "state-title": "El estado de tu conexión es actualmente:",
"state-connecting": "Conectando",
"state-connecting-info": "Se está activando la protección VPN.",
"state-connected": "Conectado",
@@ -668,12 +704,18 @@
"download-info": "Velocidad de descarga."
},
+ "connection-error" : {
+ "text": "Error de conexión",
+ "info": "Problema conectando con la app vpn. Algunos datos mostrados podrÃan estar desactualizados."
+ },
+
"status-page": {
"start-title": "Iniciar VPN",
"no-server": "¡Ningún servidor seleccionado!",
"disconnect": "Desconectar",
+ "last-error": "Último error:",
+ "unknown-error": "Error desconocido.",
"disconnect-confirmation": "¿Realmente desea detener la protección VPN?",
- "entered-manually": "Ingresado manualmente",
"upload-info": "EstadÃsticas de datos subidos.",
"download-info": "EstadÃsticas de datos descargados.",
"latency-info": "EstadÃsticas de latencia.",
@@ -706,6 +748,7 @@
"connect-without-password": "Conectarse sin contraseña",
"connect-without-password-confirmation": "La conexión se realizará sin la contraseña. ¿Seguro que desea continuar?",
"connect-using-password": "Conectarse usando una contraseña",
+ "connect-using-another-password": "Conectarse usando otra contraseña",
"edit-name": "Nombre personalizado",
"edit-label": "Nota personalizada",
"make-favorite": "Hacer favorito",
@@ -832,6 +875,8 @@
"get-ip-info": "Cuando está activa, la aplicación utilizará servicios externos para obtener información sobre la IP actual.",
"data-units": "Unidades de datos",
"data-units-info": "Permite seleccionar las unidades que se utilizarán para mostrar las estadÃsticas de transmisión de datos.",
+ "minimum-hops": "Saltos mÃnimos",
+ "minimum-hops-info": "Permite configurar la cantidad mÃnima de saltos que la conexión deberá realizar a través de otros visores de Skywire antes de alcanzar el destino final.",
"setting-on": "Encendido",
"setting-off": "Apagado",
"working-warning": "El sistema está ocupado. Por favor, espere a que finalice la operación anterior.",
diff --git a/cmd/skywire-visor/static/assets/i18n/es_base.json b/cmd/skywire-visor/static/assets/i18n/es_base.json
index 1ffce09e32..3a005ed2cd 100644
--- a/cmd/skywire-visor/static/assets/i18n/es_base.json
+++ b/cmd/skywire-visor/static/assets/i18n/es_base.json
@@ -16,6 +16,8 @@
"time-in-ms": "{{ time }}ms.",
"time-in-segs": "{{ time }}s.",
"ok": "Ok",
+ "yes": "Yes",
+ "no": "No",
"unknown": "Unknown",
"close": "Close",
"window-size-error": "The window is too narrow for the content."
@@ -85,21 +87,29 @@
"not-found": "Visor not found.",
"statuses": {
"online": "Online",
- "online-tooltip": "Visor is online.",
+ "online-tooltip": "The visor is online.",
+ "connecting": "Connecting",
+ "connecting-tooltip": "The visor is online, but still connecting to the uptime tracker.",
+ "unknown": "Unknown",
+ "unknown-tooltip": "The visor is online, but it has not been possible to determine if it is connected to the uptime tracker.",
"partially-online": "Online with problems",
- "partially-online-tooltip": "Visor is online but not all services are working. For more information, open the details page and check the \"Health info\" section.",
+ "partially-online-tooltip": "The visor is online, but disconnected from the uptime tracker.",
"offline": "Offline",
- "offline-tooltip": "Visor is offline."
+ "offline-tooltip": "The visor is offline."
},
"details": {
"node-info": {
"title": "Visor Info",
"label": "Label:",
"public-key": "Public key:",
+ "symmetic-nat": "Symmetic NAT:",
+ "public-ip": "Public IP:",
"ip": "IP:",
"dmsg-server": "DMSG server:",
"ping": "Ping:",
"node-version": "Visor version:",
+ "skybian-version": "Skybian version:",
+ "no-skybian-version": "(not using Skybian)",
"time": {
"title": "Time online:",
"seconds": "a few seconds",
@@ -113,6 +123,19 @@
"weeks": "{{ time }} weeks"
}
},
+ "transports-info": {
+ "title": "Transports Info",
+ "autoconnect": "Autoconnect:",
+ "autoconnect-info": "When enabled, the visor will automatically create the transports needed when a connection to a public visor is requested. If disabled, the transports will have to be created before being able to make the connection.",
+ "enabled": "Enabled",
+ "disabled": "Disabled",
+ "enable-button": "Enable",
+ "disable-button": "Disable",
+ "enable-confirmation": "Are you sure you want to enable the autoconnect feature?",
+ "disable-confirmation": "Are you sure you want to disable the autoconnect feature?",
+ "enable-done": "The autoconnect feature has been enabled.",
+ "disable-done": "The autoconnect feature has been disabled."
+ },
"router-info": {
"title": "Router Info",
"min-hops": "Min hops:",
@@ -449,34 +472,41 @@
"transports": {
"title": "Transports",
- "remove-all-offline": "Remove all offline transports",
- "remove-all-offline-confirmation": "Are you sure you want to remove all offline transports?",
- "remove-all-filtered-offline-confirmation": "All offline transports satisfying the current filtering criteria will be removed. Are you sure you want to continue?",
"info": "Connections you have with remote Skywire visors, to allow local Skywire apps to communicate with apps running on those remote visors.",
"list-title": "Transport list",
- "state": "State",
- "state-tooltip": "Current state",
+ "offline": "Offline",
+ "persistent": "Persistent",
+ "persistent-tooltip": "Persistent transports, which are created automatically when the visor is turned on and are automatically recreated in case of disconnection.",
+ "persistent-transport-tooltip": "This transport is persistent, so it is created automatically when the visor is turned on and automatically recreated in case of disconnection.",
+ "persistent-transport-button-tooltip": "This transport is persistent, so it is created automatically when the visor is turned on and automatically recreated in case of disconnection. Press to make non-persistent.",
+ "non-persistent-transport-button-tooltip": "Press to make this transport persistent. Persistent transports are created automatically when the visor is turned on and automatically recreated in case of disconnection.",
+ "make-persistent": "Make persistent",
+ "make-non-persistent": "Make non-persistent",
+ "make-selected-persistent": "Make all selected persistent",
+ "make-selected-non-persistent": "Make all selected non-persistent",
+ "changes-made": "Changes made.",
+ "no-changes-needed": "No changes were needed.",
"id": "ID",
"remote-node": "Remote",
"type": "Type",
"create": "Create transport",
+ "make-persistent-confirmation": "Are you sure you want to make the transport persistent?",
+ "make-non-persistent-confirmation": "Are you sure you want to make the transport non-persistent?",
+ "make-selected-persistent-confirmation": "Are you sure you want to make the selected transports persistent?",
+ "make-selected-non-persistent-confirmation": "Are you sure you want to make the selected transports non-persistent?",
+ "make-offline-non-persistent-confirmation": "Are you sure you want to make the transport non-persistent? It will not be shown in the list while offline anymore.",
"delete-confirmation": "Are you sure you want to delete the transport?",
+ "delete-persistent-confirmation": "This transport is persistent, so it may be recreated shortly after deletion. Are you sure you want to delete it?",
"delete-selected-confirmation": "Are you sure you want to delete the selected transports?",
"delete": "Delete transport",
"deleted": "Delete operation completed.",
"empty": "Visor doesn't have any transports.",
"empty-with-filter": "No transport matches the selected filtering criteria.",
- "statuses": {
- "online": "Online",
- "online-tooltip": "Transport is online",
- "offline": "Offline",
- "offline-tooltip": "Transport is offline"
- },
"details": {
"title": "Details",
"basic": {
"title": "Basic info",
- "state": "State:",
+ "persistent": "Persistent:",
"id": "ID:",
"local-pk": "Local public key:",
"remote-pk": "Remote public key:",
@@ -492,6 +522,9 @@
"remote-key": "Remote public key",
"label": "Identification name (optional)",
"transport-type": "Transport type",
+ "make-persistent": "Make persistent",
+ "persistent-tooltip": "Persistent transports are created automatically when the visor is turned on and automatically recreated in case of disconnection.",
+ "only-persistent-created": "The persistent transport was created, but it may have not been activated.",
"success": "Transport created.",
"success-without-label": "The transport was created, but it was not possible to save the label.",
"errors": {
@@ -501,14 +534,14 @@
}
},
"filter-dialog": {
- "online": "The transport must be",
+ "persistent": "The transport must be",
"id": "The id must contain",
"remote-node": "The remote key must contain",
- "online-options": {
- "any": "Online or offline",
- "online": "Online",
- "offline": "Offline"
+ "persistent-options": {
+ "any": "Any",
+ "persistent": "Persistent",
+ "non-persistent": "Non-persistent"
}
}
},
@@ -626,6 +659,8 @@
"servers": "Servers",
"settings": "Settings",
+ "unnamed": "Unnamed",
+
"starting-blocked-server-error": "Unable to connect to the selected server because it has been added to the blocked servers list.",
"unexpedted-error": "An unexpected error occurred and the operation could not be completed.",
@@ -652,6 +687,7 @@
},
"connection-info" : {
+ "state-title": "Your connection is currently:",
"state-connecting": "Connecting",
"state-connecting-info": "The VPN protection is being activated.",
"state-connected": "Connected",
@@ -668,12 +704,18 @@
"download-info": "Download speed."
},
+ "connection-error" : {
+ "text": "Connection error",
+ "info": "Problem connecting with the vpn app. Some data being displayed could be outdated."
+ },
+
"status-page": {
"start-title": "Start VPN",
"no-server": "No server selected!",
"disconnect": "Disconnect",
+ "last-error": "Last error:",
+ "unknown-error": "Unknown error.",
"disconnect-confirmation": "Are you sure you want to stop the VPN protection?",
- "entered-manually": "Entered manually",
"upload-info": "Uploaded data stats.",
"download-info": "Downloaded data stats.",
"latency-info": "Latency stats.",
@@ -706,6 +748,7 @@
"connect-without-password": "Connect without password",
"connect-without-password-confirmation": "The connection will be made without the password. Are you sure you want to continue?",
"connect-using-password": "Connect using a password",
+ "connect-using-another-password": "Connect using another password",
"edit-name": "Custom name",
"edit-label": "Custom note",
"make-favorite": "Make favorite",
@@ -832,6 +875,8 @@
"get-ip-info": "When active, the application will use external services to obtain information about the current IP.",
"data-units": "Data units",
"data-units-info": "Allows to select the units that will be used to display the data transmission statistics.",
+ "minimum-hops": "Minimum hops",
+ "minimum-hops-info": "Allows to set the minimum number of hops the connections must pass through other Skywire visors before reaching the final destination.",
"setting-on": "On",
"setting-off": "Off",
"working-warning": "The system is busy. Please wait for the previous operation to finish.",
diff --git a/cmd/skywire-visor/static/assets/i18n/pt.json b/cmd/skywire-visor/static/assets/i18n/pt.json
new file mode 100644
index 0000000000..599e931a86
--- /dev/null
+++ b/cmd/skywire-visor/static/assets/i18n/pt.json
@@ -0,0 +1,571 @@
+{
+ "common": {
+ "save": "Salvar",
+ "cancel": "Cancelar",
+ "downloaded": "Baixado",
+ "uploaded": "Enviado",
+ "loading-error": "Ocorreu um erro ao obter os dados. Tentando novamente...",
+ "operation-error": "Ocorreu um erro ao tentar concluir a operação.",
+ "no-connection-error": "Não há conexão com a Internet ou conexão com o Hypervisor.",
+ "error": "Erro:",
+ "refreshed": "Dados atualizados.",
+ "options": "Opções",
+ "logout": "Sair",
+ "logout-error": "Erro ao sair.",
+ "logout-confirmation": "Tem certeza que deseja sair?",
+ "time-in-ms": "{{ time }}ms",
+ "ok": "Ok",
+ "unknown": "Desconhecido",
+ "close": "Fechar"
+ },
+ "labeled-element": {
+ "edit-label": "Editar rótulo",
+ "remove-label": "Remover rótulo",
+ "copy": "Copiar",
+ "remove-label-confirmation": "Tem certeza de que deseja remover o rótulo?",
+ "unnamed-element": "Sem nome",
+ "unnamed-local-visor": "Visor local",
+ "local-element": "Local",
+ "tooltip": "Clique para copiar a entrada ou alterar o rótulo",
+ "tooltip-with-text": "{{ text }} (Clique para copiar a entrada ou alterar o rótulo)"
+ },
+ "labels": {
+ "title": "Rótulos",
+ "info": "Rótulos que você inseriu para identificar facilmente visores, transportes e outros elementos, em vez de ter que ler identificadores gerados por máquina.",
+ "list-title": "Lista de Rótulos",
+ "label": "Rótulo",
+ "id": "ID do elemento",
+ "type": "Tipo",
+ "delete-confirmation": "Tem certeza de que deseja excluir o rótulo?",
+ "delete-selected-confirmation": "Tem certeza de que deseja excluir os rótulos selecionados?",
+ "delete": "Apagar rótulo",
+ "deleted": "Operação de exclusão concluÃda.",
+ "empty": "Não há rótulos salvos.",
+ "empty-with-filter": "Nenhum rótulo corresponde aos critérios de filtragem selecionados.",
+ "filter-dialog": {
+ "label": "O rótulo deve conter",
+ "id": "O id deve conter",
+ "type": "O tipo deve ser",
+ "type-options": {
+ "any": "Algum",
+ "visor": "Visor",
+ "dmsg-server": "Servidor DMSG",
+ "transport": "Transporte"
+ }
+ }
+ },
+ "filters": {
+ "filter-action": "Filtro",
+ "press-to-remove": "(Pressione para remover os filtros)",
+ "remove-confirmation": "Tem certeza de que deseja remover os filtros?"
+ },
+ "tables": {
+ "title": "Ordenar por",
+ "sorting-title": "Ordenado por:",
+ "sort-by-value": "Valor",
+ "sort-by-label": "Rótulo",
+ "label": "(Rótulo)",
+ "inverted-order": "(invertido)"
+ },
+ "start": {
+ "title": "Começar"
+ },
+ "node": {
+ "title": "Detalhes do Visor",
+ "not-found": "Visor não encontrado.",
+ "statuses": {
+ "online": "Online",
+ "online-tooltip": "Visor está online.",
+ "partially-online": "Online com problemas",
+ "partially-online-tooltip": "O Visor está online, mas nem todos os serviços estão funcionando. Para mais informações, abra a página de detalhes e verifique a seção \"Informações de saúde\".",
+ "offline": "Offline",
+ "offline-tooltip": "Visor está offline."
+ },
+ "details": {
+ "node-info": {
+ "title": "Informação do Visor",
+ "label": "Rótulo:",
+ "public-key": "Chave pública:",
+ "port": "Porta:",
+ "dmsg-server": "Servidor DMSG:",
+ "ping": "Ping:",
+ "node-version": "Versão do Visor:",
+ "time": {
+ "title": "Tempo online:",
+ "seconds": "alguns segundos",
+ "minute": "1 minuto",
+ "minutes": "{{ time }} minutos",
+ "hour": "1 hora",
+ "hours": "{{ time }} horas",
+ "day": "1 dia",
+ "days": "{{ time }} dias",
+ "week": "1 semana",
+ "weeks": "{{ time }} semanas"
+ }
+ },
+ "node-health": {
+ "title": "Informação de saúde",
+ "status": "Status:",
+ "transport-discovery": "Descoberta de transporte:",
+ "route-finder": "Localizador de rota:",
+ "setup-node": "Configuração de Nó:",
+ "uptime-tracker": "Rastreador de tempo de atividade:",
+ "address-resolver": "Resolvedor de endereços:",
+ "element-offline": "Offline"
+ },
+ "node-traffic-data": "Tráfego de dados"
+ },
+ "tabs": {
+ "info": "Informação",
+ "apps": "Aplicativos",
+ "routing": "Encaminhamento"
+ },
+ "error-load": "Ocorreu um erro ao atualizar os dados. Tentando novamente..."
+ },
+ "nodes": {
+ "title": "Lista de Visor",
+ "dmsg-title": "DMSG",
+ "update-all": "Atualizar todas as Visores",
+ "hypervisor": "Hypervisor",
+ "state": "Estado",
+ "state-tooltip": "Estado atual",
+ "label": "Rótulo",
+ "key": "Chave",
+ "dmsg-server": "Servidor DMSG",
+ "ping": "Ping",
+ "hypervisor-info": "Este visor é o hipervisor atual.",
+ "copy-key": "Copiar chave",
+ "copy-dmsg": "Copiar chave do servidor DMSG",
+ "copy-data": "Copiar dados",
+ "view-node": "Ver visor",
+ "delete-node": "Remover visor",
+ "delete-all-offline": "Remover todos visores offline",
+ "error-load": "Ocorreu um erro ao atualizar a lista. Tentando novamente...",
+ "empty": "Não há visores conectados a este hipervisor.",
+ "empty-with-filter": "Nenhum visor corresponde aos critérios de filtragem selecionados.",
+ "delete-node-confirmation": "Tem certeza de que deseja remover o visor da lista?",
+ "delete-all-offline-confirmation": "Tem certeza de que deseja remover todas as visores offline da lista?",
+ "delete-all-filtered-offline-confirmation": "Todos os visores offline que satisfaçam os critérios de filtragem atuais serão removidos da lista. Você tem certeza que quer continuar?",
+ "deleted": "Visor removido.",
+ "deleted-singular": "1 visor offline removido.",
+ "deleted-plural": "{{ number }} visores offline removidos.",
+ "no-visors-to-update": "Não há visores para atualizar.",
+ "filter-dialog": {
+ "online": "O visor deve ser",
+ "label": "O rótulo deve conter",
+ "key": "A chave pública deve conter",
+ "dmsg": "A chave do servidor DMSG deve conter",
+ "online-options": {
+ "any": "Online ou offline",
+ "online": "Online",
+ "offline": "Offline"
+ }
+ }
+ },
+ "edit-label": {
+ "label": "Rótulo",
+ "done": "Rótulo salvo.",
+ "label-removed-warning": "O rótulo foi removido."
+ },
+ "settings": {
+ "title": "Definições",
+ "password": {
+ "initial-config-help": "Use esta opção para definir a senha inicial. Depois de definir uma senha, não é possÃvel usar esta opção para modificá-la.",
+ "help": "Opções para alterar sua senha.",
+ "old-password": "Senha Antiga",
+ "new-password": "Nova Senha",
+ "repeat-password": "Repita a senha",
+ "password-changed": "Senha alterada.",
+ "error-changing": "Erro ao alterar a senha.",
+ "initial-config": {
+ "title": "Definir senha inicial",
+ "password": "Senha",
+ "repeat-password": "Repita a senha",
+ "set-password": "Definir senha",
+ "done": "Senha definida. Use-a para acessar o sistema.",
+ "error": "Erro. Certifique-se de que ainda não definiu a senha."
+ },
+ "errors": {
+ "bad-old-password": "A senha antiga fornecida não está correta.",
+ "old-password-required": "A senha antiga é necessária.",
+ "new-password-error": "A senha deve ter de 6 a 64 caracteres.",
+ "passwords-not-match": "As senhas não coincidem.",
+ "default-password": "Não use a senha padrão (1234)."
+ }
+ },
+ "updater-config": {
+ "open-link": "Mostrar configurações do atualizador",
+ "open-confirmation": "As configurações do atualizador são apenas para usuários experientes. Você tem certeza que quer continuar?",
+ "help": "Use este formulário para substituir as configurações que serão usadas pelo atualizador. Todos os campos vazios serão ignorados. As configurações serão usadas para todas as operações de atualização, independentemente de qual elemento está sendo atualizado, portanto, tome cuidado.",
+ "channel": "Canal",
+ "version": "Versão",
+ "archive-url": "URL do arquivo",
+ "checksum-url": "URL do Checksum ",
+ "not-saved": "As alterações ainda não foram salvas.",
+ "save": "Salvar alterações",
+ "remove-settings": "Remover as configurações",
+ "saved": "As configurações personalizadas foram salvas.",
+ "removed": "As configurações personalizadas foram removidas.",
+ "save-confirmation": "Tem certeza de que deseja aplicar as configurações personalizadas?",
+ "remove-confirmation": "Tem certeza de que deseja remover as configurações personalizadas?"
+ },
+ "change-password": "Mudar senha",
+ "refresh-rate": "Taxa de atualização",
+ "refresh-rate-help": "Tempo que o sistema espera para atualizar os dados automaticamente.",
+ "refresh-rate-confirmation": "Taxa de atualização alterada.",
+ "seconds": "segundos"
+ },
+ "login": {
+ "password": "Senha",
+ "incorrect-password": "Senha incorreta.",
+ "initial-config": "Configurar a inicialização inicial"
+ },
+ "actions": {
+ "menu": {
+ "terminal": "Terminal",
+ "config": "Configuração",
+ "update": "Atualizar",
+ "reboot": "Reiniciar"
+ },
+ "reboot": {
+ "confirmation": "Tem certeza de que deseja reiniciar o visor?",
+ "done": "O visor está reiniciando."
+ },
+ "terminal-options": {
+ "full": "Terminal completo",
+ "simple": "Terminal simples"
+ },
+ "terminal": {
+ "title": "Terminal",
+ "input-start": "Terminal Skywire para {{address}}",
+ "error": "Erro inesperado ao tentar executar o comando."
+ }
+ },
+ "update": {
+ "title": "Atualizar",
+ "error-title": "Erro",
+ "processing": "Procurando por atualizações...",
+ "no-update": "Não há atualização para o visor. A versão atualmente instalada é:",
+ "no-updates": "Nenhuma nova atualização foi encontrada.",
+ "already-updating": "Algumas visores já estão sendo atualizadas:",
+ "update-available": "As seguintes atualizações foram encontradas:",
+ "update-available-singular": "As seguintes atualizações para 1 visor foram encontradas:",
+ "update-available-plural": "As seguintes atualizações para visores {{ number }} foram encontradas:",
+ "update-available-additional-singular": "As seguintes atualizações adicionais para 1 visor foram encontradas:",
+ "update-available-additional-plural": "As seguintes atualizações adicionais para visores {{ number }} foram encontradas:",
+ "update-instructions": "Clique no botão 'Instalar atualizações' para continuar.",
+ "updating": "A operação de atualização foi iniciada, você pode abrir esta janela novamente para verificar o andamento:",
+ "version-change": "De {{ currentVersion }} para {{ newVersion }}",
+ "selected-channel": "Canal selecionado:",
+ "downloaded-file-name-prefix": "Baixando: ",
+ "speed-prefix": "Velocidade: ",
+ "time-downloading-prefix": "Tempo de download: ",
+ "time-left-prefix": "Tempo restante (aprox.): ",
+ "starting": "Preparando para atualizar",
+ "finished": "Conexão de status finalizada",
+ "install": "Instalar atualizações"
+ },
+ "apps": {
+ "log": {
+ "title": "Registro",
+ "empty": "Não há mensagens de registro para o intervalo de tempo selecionado.",
+ "filter-button": "Mostrando apenas os registros gerados desde:",
+ "filter": {
+ "title": "Filtro",
+ "filter": "Mostrar apenas os registros gerados desde",
+ "7-days": "Últimos 7 dias",
+ "1-month": "Últimos 30 dias",
+ "3-months": "Últimos 03 meses",
+ "6-months": "Últimos 06 meses",
+ "1-year": "Último ano",
+ "all": "Mostrar todos"
+ }
+ },
+ "apps-list": {
+ "title": "Aplicativos",
+ "list-title": "Lista de aplicativos",
+ "app-name": "Nome",
+ "port": "Porta",
+ "state": "Estado",
+ "state-tooltip": "Estado atual",
+ "auto-start": "Inicialização automaticamente",
+ "empty": "Visor não tem nenhum aplicativo.",
+ "empty-with-filter": "Nenhum aplicativo corresponde aos critérios de filtragem selecionados.",
+ "disable-autostart": "Desativar inicialização automática",
+ "enable-autostart": "Habilitar inicialização automática",
+ "autostart-disabled": "Inicialização automática desativada",
+ "autostart-enabled": "Inicialização automática ativada",
+ "unavailable-logs-error": "Não é possÃvel mostrar os logs enquanto o aplicativo não está em execução.",
+ "filter-dialog": {
+ "state": "O estado deve ser",
+ "name": "O nome deve conter",
+ "port": "A porta deve conter",
+ "autostart": "A inicialização automática deve ser",
+ "state-options": {
+ "any": "Executando ou parado",
+ "running": "Executando",
+ "stopped": "Parado"
+ },
+ "autostart-options": {
+ "any": "Habilitado ou desabilitado",
+ "enabled": "Habilitado",
+ "disabled": "Desabilitado"
+ }
+ }
+ },
+ "vpn-socks-server-settings": {
+ "socks-title": "Configurações do Skysocks",
+ "vpn-title": "Configurações do servidor VPN",
+ "new-password": "Nova senha (deixe em branco para remover a senha)",
+ "repeat-password": "Repita a senha",
+ "passwords-not-match": "As senhas não coincidem.",
+ "secure-mode-check": "Use o modo seguro",
+ "secure-mode-info": "Quando ativo, o servidor não permite SSH cliente / servidor e não permite nenhum tráfego de clientes VPN para a rede local do servidor.",
+ "save": "Salvar",
+ "remove-passowrd-confirmation": "Você deixou o campo de senha vazio. Tem certeza de que deseja remover a senha?",
+ "change-passowrd-confirmation": "Tem certeza que deseja alterar a senha?",
+ "changes-made": "As mudanças foram feitas."
+ },
+ "vpn-socks-client-settings": {
+ "socks-title": "Configurações do cliente Skysocks",
+ "vpn-title": "Configurações de cliente VPN",
+ "discovery-tab": "Procurar",
+ "remote-visor-tab": "Inserir manualmente",
+ "history-tab": "Histórico",
+ "settings-tab": "Configurações",
+ "use": "Use estes dados",
+ "change-note": "Mudar nota",
+ "remove-entry": "Remover entrada",
+ "note": "Nota:",
+ "note-entered-manually": "Inserida manualmente",
+ "note-obtained": "Obtida do serviço de descoberta",
+ "key": "Chave:",
+ "port": "Porta:",
+ "location": "Localização:",
+ "state-available": "DisponÃvel",
+ "state-offline": "Offline",
+ "public-key": "Chave pública do visor remoto",
+ "password": "Senha",
+ "password-history-warning": "Nota: a senha não será salva no histórico.",
+ "copy-pk-info": "Copiar chave pública.",
+ "copied-pk-info": "A chave pública foi copiada.",
+ "copy-pk-error": "Ocorreu um problema ao copiar a chave pública.",
+ "no-elements": "Atualmente não há elementos para mostrar. Por favor, tente novamente mais tarde.",
+ "no-elements-for-filters": "Não há elementos que atendam aos critérios do filtro.",
+ "no-filter": "Nenhum filtro foi selecionado",
+ "click-to-change": "Clique para mudar",
+ "remote-key-length-error": "A chave pública deve ter 66 caracteres.",
+ "remote-key-chars-error": "A chave pública deve conter apenas caracteres hexadecimais.",
+ "save": "Salvar",
+ "remove-from-history-confirmation": "Tem certeza de que deseja remover a entrada do histórico?",
+ "change-key-confirmation": "Tem certeza de que deseja alterar a chave pública do visor remoto?",
+ "changes-made": "As mudanças foram feitas.",
+ "no-history": "Esta guia mostrará as últimas {{ number }} chaves públicas usadas.",
+ "default-note-warning": "A nota padrão foi usada.",
+ "pagination-info": "{{ currentElementsRange }} de {{ totalElements }}",
+ "killswitch-check": "Ativar killswitch",
+ "killswitch-info": "Quando ativo, todas as conexões de rede serão desativadas se o aplicativo estiver em execução, exceto a proteção VPN for interrompida (por erros temporários ou qualquer outro problema).",
+ "settings-changed-alert": "As alterações ainda não foram salvas.",
+ "save-settings": "Salvar configurações",
+ "change-note-dialog": {
+ "title": "Mudar nota",
+ "note": "Nota"
+ },
+ "password-dialog": {
+ "title": "Digite a senha",
+ "password": "Senha",
+ "info": "Uma senha está sendo solicitada porque uma senha foi definida quando a entrada selecionada foi criada, mas não foi salva por motivos de segurança. Você pode deixar a senha em branco, se necessário.",
+ "continue-button": "Continuar"
+ },
+ "filter-dialog": {
+ "title": "Filtros",
+ "country": "O paÃs deve ser",
+ "any-country": "Qualquer um",
+ "location": "O local deve conter",
+ "pub-key": "A chave pública deve conter",
+ "apply": "Aplicar"
+ }
+ },
+ "stop-app": "Parar",
+ "start-app": "Iniciar",
+ "view-logs": "Ver registros",
+ "settings": "Configurações",
+ "error": "Ocorreu um erro e não foi possÃvel realizar a operação.",
+ "stop-confirmation": "Tem certeza de que deseja parar o aplicativo?",
+ "stop-selected-confirmation": "Tem certeza de que deseja parar os aplicativos selecionados?",
+ "disable-autostart-confirmation": "Tem certeza de que deseja desativar a inicialização automática do aplicativo?",
+ "enable-autostart-confirmation": "Tem certeza de que deseja ativar a inicialização automática do aplicativo?",
+ "disable-autostart-selected-confirmation": "Tem certeza de que deseja desativar o inÃcio automático para os aplicativos selecionados?",
+ "enable-autostart-selected-confirmation": "Tem certeza de que deseja ativar o inÃcio automático para os aplicativos selecionados?",
+ "operation-completed": "Operação concluÃda.",
+ "operation-unnecessary": "A seleção já possui a configuração solicitada.",
+ "status-running": "Executando",
+ "status-stopped": "Parado",
+ "status-failed": "Fracassado",
+ "status-running-tooltip": "O aplicativo está em execução",
+ "status-stopped-tooltip": "O aplicativo está parado no momento",
+ "status-failed-tooltip": "Algo deu errado. Verifique as mensagens do aplicativo para obter mais informações"
+ },
+ "transports": {
+ "title": "Transportes",
+ "remove-all-offline": "Remover todos os transportes offline",
+ "remove-all-offline-confirmation": "Tem certeza de que deseja remover todos os transportes offline?",
+ "remove-all-filtered-offline-confirmation": "Todos os transportes off-line que atendem aos critérios de filtragem atuais serão removidos. Tem certeza de que deseja continuar?",
+ "info": "Conexões que você tem com visores Skywire remotos, para permitir que aplicativos Skywire locais se comuniquem com aplicativos executados nesses visores remotos.",
+ "list-title": "Lista de transporte",
+ "state": "Estado",
+ "state-tooltip": "Estado atual",
+ "id": "ID",
+ "remote-node": "Remoto",
+ "type": "Tipo",
+ "create": "Criar transporte",
+ "delete-confirmation": "Tem certeza que deseja excluir o transporte?",
+ "delete-selected-confirmation": "Tem certeza que deseja excluir os transportes selecionados?",
+ "delete": "Excluir transporte",
+ "deleted": "Operação de exclusão concluÃda.",
+ "empty": "Visor não tem transportes.",
+ "empty-with-filter": "Nenhum transporte corresponde aos critérios de filtragem selecionados.",
+ "statuses": {
+ "online": "Online",
+ "online-tooltip": "Transporte está online",
+ "offline": "Offline",
+ "offline-tooltip": "Transporte está offline"
+ },
+ "details": {
+ "title": "Detalhes",
+ "basic": {
+ "title": "Informação básica",
+ "state": "Estado:",
+ "id": "ID:",
+ "local-pk": "Chave pública local:",
+ "remote-pk": "Chave pública remota:",
+ "type": "Tipo:"
+ },
+ "data": {
+ "title": "Transmissão de dados",
+ "uploaded": "Dados carregados:",
+ "downloaded": "Dados baixados:"
+ }
+ },
+ "dialog": {
+ "remote-key": "Chave pública remota",
+ "label": "Nome de identificação (opcional)",
+ "transport-type": "Tipo de transporte",
+ "success": "Transporte criado.",
+ "success-without-label": "O transporte foi criado, mas não foi possÃvel salvar a etiqueta.",
+ "errors": {
+ "remote-key-length-error": "A chave pública remota deve ter 66 caracteres.",
+ "remote-key-chars-error": "A chave pública remota deve conter apenas caracteres hexadecimais.",
+ "transport-type-error": "O tipo de transporte é obrigatório."
+ }
+ },
+ "filter-dialog": {
+ "online": "O transporte deve ser",
+ "id": "O id deve conter",
+ "remote-node": "A chave remota deve conter",
+ "online-options": {
+ "any": "Online ou offline",
+ "online": "Online",
+ "offline": "Offline"
+ }
+ }
+ },
+ "routes": {
+ "title": "Rotas",
+ "info": "Caminhos usados para alcançar os visores remotos para os quais os transportes foram estabelecidos. As rotas são geradas automaticamente conforme necessário.",
+ "list-title": "Lista de rotas",
+ "key": "Chave",
+ "type": "Tipo",
+ "source": "Fonte",
+ "destination": "Destino",
+ "delete-confirmation": "Tem certeza que deseja excluir a rota?",
+ "delete-selected-confirmation": "Tem certeza que deseja excluir as rotas selecionadas?",
+ "delete": "Excluir rota",
+ "deleted": "Operação de exclusão concluÃda.",
+ "empty": "Visor não tem nenhuma rota.",
+ "empty-with-filter": "Nenhuma rota corresponde aos critérios de filtragem selecionados.",
+ "details": {
+ "title": "Detalhes",
+ "basic": {
+ "title": "Informação básica",
+ "key": "Chave:",
+ "rule": "Regras:"
+ },
+ "summary": {
+ "title": "Resumo da regra",
+ "keep-alive": "Ativo:",
+ "type": "Tipo de regra:",
+ "key-route-id": "ID de rota chave:"
+ },
+ "specific-fields-titles": {
+ "app": "Campos de aplicativos",
+ "forward": "Campos de encaminhamento",
+ "intermediary-forward": "Campos intermediários de encaminhamento"
+ },
+ "specific-fields": {
+ "route-id": "Próximo ID de rota:",
+ "transport-id": "Próximo ID de transporte:",
+ "destination-pk": "Chave pública de destino:",
+ "source-pk": "Chave pública de origem:",
+ "destination-port": "Porta de destino:",
+ "source-port": "Porta de origem:"
+ }
+ },
+ "filter-dialog": {
+ "key": "A chave deve conter",
+ "type": "O tipo deve ser",
+ "source": "A fonte deve conter",
+ "destination": "O destino deve conter",
+ "any-type-option": "Qualquer uma"
+ }
+ },
+ "copy": {
+ "tooltip": "Clique para copiar",
+ "tooltip-with-text": "{{ text }} (Clique para copiar)",
+ "copied": "Copiado!"
+ },
+ "selection": {
+ "select-all": "Selecionar tudo",
+ "unselect-all": "Desmarque todos",
+ "delete-all": "Excluir todos os elementos selecionados",
+ "start-all": "Iniciar todos os aplicativos selecionados",
+ "stop-all": "Parar todos os aplicativos selecionados",
+ "enable-autostart-all": "Habilitar inicialização automática para todos os aplicativos selecionados",
+ "disable-autostart-all": "Desativar inicialização automática para todos os aplicativos selecionados"
+ },
+ "refresh-button": {
+ "seconds": "Atualizado alguns segundos atrás",
+ "minute": "Atualizado 1 minuto atrás",
+ "minutes": "Atualizado {{ time }} minutos atrás",
+ "hour": "Atualizado 1 hora atrás",
+ "hours": "Atualizado {{ time }} horas atrás",
+ "day": "Atualizado 1 dia atrás",
+ "days": "Atualizado {{ time }} dias atrás",
+ "week": "Atualizado 1 semana atrás",
+ "weeks": "Atualizado {{ time }} semanas atrás",
+ "error-tooltip": "Ocorreu um erro ao atualizar os dados. Tentando novamente a cada {{ time }} segundos automaticamente..."
+ },
+ "view-all-link": {
+ "label": "Ver todos os elementos {{ number }}"
+ },
+ "paginator": {
+ "first": "Primeira",
+ "last": "Última",
+ "total": "Total: {{ number }} páginas",
+ "select-page-title": "Selecione a página"
+ },
+ "confirmation": {
+ "header-text": "Confirmação",
+ "confirm-button": "Sim",
+ "cancel-button": "Não",
+ "close": "Fechar",
+ "error-header-text": "Erro",
+ "done-header-text": "Feito"
+ },
+ "language": {
+ "title": "Selecione o idioma"
+ },
+ "tabs-window": {
+ "title": "Alterar guia"
+ }
+}
\ No newline at end of file
diff --git a/cmd/skywire-visor/static/assets/i18n/pt_base.json b/cmd/skywire-visor/static/assets/i18n/pt_base.json
new file mode 100644
index 0000000000..d274ee959e
--- /dev/null
+++ b/cmd/skywire-visor/static/assets/i18n/pt_base.json
@@ -0,0 +1,603 @@
+{
+ "common": {
+ "save": "Save",
+ "cancel": "Cancel",
+ "downloaded": "Downloaded",
+ "uploaded": "Uploaded",
+ "loading-error": "There was an error getting the data. Retrying...",
+ "operation-error": "There was an error trying to complete the operation.",
+ "no-connection-error": "There is no internet connection or connection to the Hypervisor.",
+ "error": "Error:",
+ "refreshed": "Data refreshed.",
+ "options": "Options",
+ "logout": "Logout",
+ "logout-error": "Error logging out.",
+ "logout-confirmation": "Are you sure you want to log out?",
+ "time-in-ms": "{{ time }}ms",
+ "ok": "Ok",
+ "unknown": "Unknown",
+ "close": "Close"
+ },
+
+ "labeled-element": {
+ "edit-label": "Edit label",
+ "remove-label": "Remove label",
+ "copy": "Copy",
+ "remove-label-confirmation": "Do you really want to remove the label?",
+ "unnamed-element": "Unnamed",
+ "unnamed-local-visor": "Local visor",
+ "local-element": "Local",
+ "tooltip": "Click to copy the entry or change the label",
+ "tooltip-with-text": "{{ text }} (Click to copy the entry or change the label)"
+ },
+
+ "labels": {
+ "title": "Labels",
+ "info": "Labels you have entered to easily identify visors, transports and other elements, instead of having to read machine generated identifiers.",
+ "list-title": "Label list",
+ "label": "Label",
+ "id": "Element ID",
+ "type": "Type",
+ "delete-confirmation": "Are you sure you want to delete the label?",
+ "delete-selected-confirmation": "Are you sure you want to delete the selected labels?",
+ "delete": "Delete label",
+ "deleted": "Delete operation completed.",
+ "empty": "There aren't any saved labels.",
+ "empty-with-filter": "No label matches the selected filtering criteria.",
+ "filter-dialog": {
+ "label": "The label must contain",
+ "id": "The id must contain",
+ "type": "The type must be",
+
+ "type-options": {
+ "any": "Any",
+ "visor": "Visor",
+ "dmsg-server": "DMSG server",
+ "transport": "Transport"
+ }
+ }
+ },
+
+ "filters": {
+ "filter-action": "Filter",
+ "press-to-remove": "(Press to remove the filters)",
+ "remove-confirmation": "Are you sure you want to remove the filters?"
+ },
+
+ "tables": {
+ "title": "Order by",
+ "sorting-title": "Ordered by:",
+ "sort-by-value": "Value",
+ "sort-by-label": "Label",
+ "label": "(label)",
+ "inverted-order": "(inverted)"
+ },
+
+ "start": {
+ "title": "Start"
+ },
+
+ "node": {
+ "title": "Visor details",
+ "not-found": "Visor not found.",
+ "statuses": {
+ "online": "Online",
+ "online-tooltip": "Visor is online.",
+ "partially-online": "Online with problems",
+ "partially-online-tooltip": "Visor is online but not all services are working. For more information, open the details page and check the \"Health info\" section.",
+ "offline": "Offline",
+ "offline-tooltip": "Visor is offline."
+ },
+ "details": {
+ "node-info": {
+ "title": "Visor Info",
+ "label": "Label:",
+ "public-key": "Public key:",
+ "port": "Port:",
+ "dmsg-server": "DMSG server:",
+ "ping": "Ping:",
+ "node-version": "Visor version:",
+ "time": {
+ "title": "Time online:",
+ "seconds": "a few seconds",
+ "minute": "1 minute",
+ "minutes": "{{ time }} minutes",
+ "hour": "1 hour",
+ "hours": "{{ time }} hours",
+ "day": "1 day",
+ "days": "{{ time }} days",
+ "week": "1 week",
+ "weeks": "{{ time }} weeks"
+ }
+ },
+ "node-health": {
+ "title": "Health info",
+ "status": "Status:",
+ "transport-discovery": "Transport discovery:",
+ "route-finder": "Route finder:",
+ "setup-node": "Setup node:",
+ "uptime-tracker": "Uptime tracker:",
+ "address-resolver": "Address resolver:",
+ "element-offline": "Offline"
+ },
+ "node-traffic-data": "Traffic data"
+ },
+ "tabs": {
+ "info": "Info",
+ "apps": "Apps",
+ "routing": "Routing"
+ },
+ "error-load": "An error occurred while refreshing the data. Retrying..."
+ },
+
+ "nodes": {
+ "title": "Visor list",
+ "dmsg-title": "DMSG",
+ "update-all": "Update all visors",
+ "hypervisor": "Hypervisor",
+ "state": "State",
+ "state-tooltip": "Current state",
+ "label": "Label",
+ "key": "Key",
+ "dmsg-server": "DMSG server",
+ "ping": "Ping",
+ "hypervisor-info": "This visor is the current Hypervisor.",
+ "copy-key": "Copy key",
+ "copy-dmsg": "Copy DMSG server key",
+ "copy-data": "Copy data",
+ "view-node": "View visor",
+ "delete-node": "Remove visor",
+ "delete-all-offline": "Remove all offline visors",
+ "error-load": "An error occurred while refreshing the list. Retrying...",
+ "empty": "There aren't any visors connected to this hypervisor.",
+ "empty-with-filter": "No visor matches the selected filtering criteria.",
+ "delete-node-confirmation": "Are you sure you want to remove the visor from the list?",
+ "delete-all-offline-confirmation": "Are you sure you want to remove all offline visors from the list?",
+ "delete-all-filtered-offline-confirmation": "All offline visors satisfying the current filtering criteria will be removed from the list. Are you sure you want to continue?",
+ "deleted": "Visor removed.",
+ "deleted-singular": "1 offline visor removed.",
+ "deleted-plural": "{{ number }} offline visors removed.",
+ "no-visors-to-update": "There are no visors to update.",
+ "filter-dialog": {
+ "online": "The visor must be",
+ "label": "The label must contain",
+ "key": "The public key must contain",
+ "dmsg": "The DMSG server key must contain",
+
+ "online-options": {
+ "any": "Online or offline",
+ "online": "Online",
+ "offline": "Offline"
+ }
+ }
+ },
+
+ "edit-label": {
+ "label": "Label",
+ "done": "Label saved.",
+ "label-removed-warning": "The label was removed."
+ },
+
+ "settings": {
+ "title": "Settings",
+ "password" : {
+ "initial-config-help": "Use this option for setting the initial password. After a password has been set, it is not possible to use this option to modify it.",
+ "help": "Options for changing your password.",
+ "old-password": "Old password",
+ "new-password": "New password",
+ "repeat-password": "Repeat password",
+ "password-changed": "Password changed.",
+ "error-changing": "Error changing password.",
+ "initial-config": {
+ "title": "Set initial password",
+ "password": "Password",
+ "repeat-password": "Repeat password",
+ "set-password": "Set password",
+ "done": "Password set. Please use it to access the system.",
+ "error": "Error. Please make sure you have not already set the password."
+ },
+ "errors": {
+ "bad-old-password": "The provided old password is not correct.",
+ "old-password-required": "Old password is required.",
+ "new-password-error": "Password must be 6-64 characters long.",
+ "passwords-not-match": "Passwords do not match.",
+ "default-password": "Don't use the default password (1234)."
+ }
+ },
+ "updater-config" : {
+ "open-link": "Show updater settings",
+ "open-confirmation": "The updater settings are for experienced users only. Are you sure you want to continue?",
+ "help": "Use this form for overriding the settings that will be used by the updater. All empty fields will be ignored. The settings will be used for all updating operations, no mater which element is being updated, so please be careful.",
+ "channel": "Channel",
+ "version": "Version",
+ "archive-url": "Archive URL",
+ "checksum-url": "Checksum URL",
+ "not-saved": "The changes have not been saved yet.",
+ "save": "Save changes",
+ "remove-settings": "Remove the settings",
+ "saved": "The custom settings have been saved.",
+ "removed": "The custom settings have been removed.",
+ "save-confirmation": "Are you sure you want to apply the custom settings?",
+ "remove-confirmation": "Are you sure you want to remove the custom settings?"
+ },
+ "change-password": "Change password",
+ "refresh-rate": "Refresh rate",
+ "refresh-rate-help": "Time the system waits to update the data automatically.",
+ "refresh-rate-confirmation": "Refresh rate changed.",
+ "seconds": "seconds"
+ },
+
+ "login": {
+ "password": "Password",
+ "incorrect-password": "Incorrect password.",
+ "initial-config": "Configure initial launch"
+ },
+
+ "actions": {
+ "menu": {
+ "terminal": "Terminal",
+ "config": "Configuration",
+ "update": "Update",
+ "reboot": "Reboot"
+ },
+ "reboot": {
+ "confirmation": "Are you sure you want to reboot the visor?",
+ "done": "The visor is restarting."
+ },
+ "terminal-options": {
+ "full": "Full terminal",
+ "simple": "Simple terminal"
+ },
+ "terminal": {
+ "title": "Terminal",
+ "input-start": "Skywire terminal for {{address}}",
+ "error": "Unexpected error while trying to execute the command."
+ }
+ },
+
+ "update": {
+ "title": "Update",
+ "error-title": "Error",
+ "processing": "Looking for updates...",
+ "no-update": "There is no update for the visor. The currently installed version is:",
+ "no-updates": "No new updates were found.",
+ "already-updating": "Some visors are already being updated:",
+ "update-available": "The following updates were found:",
+ "update-available-singular": "The following updates for 1 visor were found:",
+ "update-available-plural": "The following updates for {{ number }} visors were found:",
+ "update-available-additional-singular": "The following additional updates for 1 visor were found:",
+ "update-available-additional-plural": "The following additional updates for {{ number }} visors were found:",
+ "update-instructions": "Click the 'Install updates' button to continue.",
+ "updating": "The update operation has been started, you can open this window again for checking the progress:",
+ "version-change": "From {{ currentVersion }} to {{ newVersion }}",
+ "selected-channel": "Selected channel:",
+ "downloaded-file-name-prefix": "Downloading: ",
+ "speed-prefix": "Speed: ",
+ "time-downloading-prefix": "Time downloading: ",
+ "time-left-prefix": "Aprox. time left: ",
+ "starting": "Preparing to update",
+ "finished": "Status connection finished",
+ "install": "Install updates"
+ },
+
+ "apps": {
+ "log": {
+ "title": "Log",
+ "empty": "There are no log messages for the selected time range.",
+ "filter-button": "Only showing logs generated since:",
+ "filter": {
+ "title": "Filter",
+ "filter": "Only show logs generated since",
+ "7-days": "The last 7 days",
+ "1-month": "The last 30 days",
+ "3-months": "The last 3 months",
+ "6-months": "The last 6 months",
+ "1-year": "The last year",
+ "all": "Show all"
+ }
+ },
+ "apps-list": {
+ "title": "Applications",
+ "list-title": "Application list",
+ "app-name": "Name",
+ "port": "Port",
+ "state": "State",
+ "state-tooltip": "Current state",
+ "auto-start": "Auto start",
+ "empty": "Visor doesn't have any applications.",
+ "empty-with-filter": "No app matches the selected filtering criteria.",
+ "disable-autostart": "Disable autostart",
+ "enable-autostart": "Enable autostart",
+ "autostart-disabled": "Autostart disabled",
+ "autostart-enabled": "Autostart enabled",
+ "unavailable-logs-error": "Unable to show the logs while the app is not running.",
+
+ "filter-dialog": {
+ "state": "The state must be",
+ "name": "The name must contain",
+ "port": "The port must contain",
+ "autostart": "The autostart must be",
+
+ "state-options": {
+ "any": "Running or stopped",
+ "running": "Running",
+ "stopped": "Stopped"
+ },
+
+ "autostart-options": {
+ "any": "Enabled or disabled",
+ "enabled": "Enabled",
+ "disabled": "Disabled"
+ }
+ }
+ },
+ "vpn-socks-server-settings": {
+ "socks-title": "Skysocks Settings",
+ "vpn-title": "VPN-Server Settings",
+ "new-password": "New password (Leave empty to remove the password)",
+ "repeat-password": "Repeat password",
+ "passwords-not-match": "Passwords do not match.",
+ "secure-mode-check": "Use secure mode",
+ "secure-mode-info": "When active, the server doesn't allow client/server SSH and doesn't allow any traffic from VPN clients to the server local network.",
+ "save": "Save",
+ "remove-passowrd-confirmation": "You left the password field empty. Are you sure you want to remove the password?",
+ "change-passowrd-confirmation": "Are you sure you want to change the password?",
+ "changes-made": "The changes have been made."
+ },
+ "vpn-socks-client-settings": {
+ "socks-title": "Skysocks-Client Settings",
+ "vpn-title": "VPN-Client Settings",
+ "discovery-tab": "Search",
+ "remote-visor-tab": "Enter manually",
+ "history-tab": "History",
+ "settings-tab": "Settings",
+ "use": "Use this data",
+ "change-note": "Change note",
+ "remove-entry": "Remove entry",
+ "note": "Note:",
+ "note-entered-manually": "Entered manually",
+ "note-obtained": "Obtained from the discovery service",
+ "key": "Key:",
+ "port": "Port:",
+ "location": "Location:",
+ "state-available": "Available",
+ "state-offline": "Offline",
+ "public-key": "Remote visor public key",
+ "password": "Password",
+ "password-history-warning": "Note: the password will not be saved in the history.",
+ "copy-pk-info": "Copy public key.",
+ "copied-pk-info": "The public key has been copied.",
+ "copy-pk-error": "There was a problem copying the public key.",
+ "no-elements": "Currently there are no elements to show. Please try again later.",
+ "no-elements-for-filters": "There are no elements that meet the filter criteria.",
+ "no-filter": "No filter has been selected",
+ "click-to-change": "Click to change",
+ "remote-key-length-error": "The public key must be 66 characters long.",
+ "remote-key-chars-error": "The public key must only contain hexadecimal characters.",
+ "save": "Save",
+ "remove-from-history-confirmation": "Are you sure you want to remove the entry from the history?",
+ "change-key-confirmation": "Are you sure you want to change the remote visor public key?",
+ "changes-made": "The changes have been made.",
+ "no-history": "This tab will show the last {{ number }} public keys used.",
+ "default-note-warning": "The default note has been used.",
+ "pagination-info": "{{ currentElementsRange }} of {{ totalElements }}",
+ "killswitch-check": "Activate killswitch",
+ "killswitch-info": "When active, all network connections will be disabled if the app is running but the VPN protection is interrupted (for temporary errors or any other problem).",
+ "settings-changed-alert": " The changes have not been saved yet.",
+ "save-settings": "Save settings",
+
+ "change-note-dialog": {
+ "title": "Change Note",
+ "note": "Note"
+ },
+
+ "password-dialog": {
+ "title": "Enter Password",
+ "password": "Password",
+ "info": "You are being asked for a password because a password was set when the selected entry was created, but the it was not saved for security reasons. You can leave the password empty if needed.",
+ "continue-button": "Continue"
+ },
+
+ "filter-dialog": {
+ "title": "Filters",
+ "country": "The country must be",
+ "any-country": "Any",
+ "location": "The location must contain",
+ "pub-key": "The public key must contain",
+ "apply": "Apply"
+ }
+ },
+ "stop-app": "Stop",
+ "start-app": "Start",
+ "view-logs": "View logs",
+ "settings": "Settings",
+ "error": "An error has occured and it was not possible to perform the operation.",
+ "stop-confirmation": "Are you sure you want to stop the app?",
+ "stop-selected-confirmation": "Are you sure you want to stop the selected apps?",
+ "disable-autostart-confirmation": "Are you sure you want to disable autostart for the app?",
+ "enable-autostart-confirmation": "Are you sure you want to enable autostart for the app?",
+ "disable-autostart-selected-confirmation": "Are you sure you want to disable autostart for the selected apps?",
+ "enable-autostart-selected-confirmation": "Are you sure you want to enable autostart for the selected apps?",
+ "operation-completed": "Operation completed.",
+ "operation-unnecessary": "The selection already has the requested setting.",
+ "status-running": "Running",
+ "status-stopped": "Stopped",
+ "status-failed": "Failed",
+ "status-running-tooltip": "App is currently running",
+ "status-stopped-tooltip": "App is currently stopped",
+ "status-failed-tooltip": "Something went wrong. Check the app's messages for more information"
+ },
+
+ "transports": {
+ "title": "Transports",
+ "remove-all-offline": "Remove all offline transports",
+ "remove-all-offline-confirmation": "Are you sure you want to remove all offline transports?",
+ "remove-all-filtered-offline-confirmation": "All offline transports satisfying the current filtering criteria will be removed. Are you sure you want to continue?",
+ "info": "Connections you have with remote Skywire visors, to allow local Skywire apps to communicate with apps running on those remote visors.",
+ "list-title": "Transport list",
+ "state": "State",
+ "state-tooltip": "Current state",
+ "id": "ID",
+ "remote-node": "Remote",
+ "type": "Type",
+ "create": "Create transport",
+ "delete-confirmation": "Are you sure you want to delete the transport?",
+ "delete-selected-confirmation": "Are you sure you want to delete the selected transports?",
+ "delete": "Delete transport",
+ "deleted": "Delete operation completed.",
+ "empty": "Visor doesn't have any transports.",
+ "empty-with-filter": "No transport matches the selected filtering criteria.",
+ "statuses": {
+ "online": "Online",
+ "online-tooltip": "Transport is online",
+ "offline": "Offline",
+ "offline-tooltip": "Transport is offline"
+ },
+ "details": {
+ "title": "Details",
+ "basic": {
+ "title": "Basic info",
+ "state": "State:",
+ "id": "ID:",
+ "local-pk": "Local public key:",
+ "remote-pk": "Remote public key:",
+ "type": "Type:"
+ },
+ "data": {
+ "title": "Data transmission",
+ "uploaded": "Uploaded data:",
+ "downloaded": "Downloaded data:"
+ }
+ },
+ "dialog": {
+ "remote-key": "Remote public key",
+ "label": "Identification name (optional)",
+ "transport-type": "Transport type",
+ "success": "Transport created.",
+ "success-without-label": "The transport was created, but it was not possible to save the label.",
+ "errors": {
+ "remote-key-length-error": "The remote public key must be 66 characters long.",
+ "remote-key-chars-error": "The remote public key must only contain hexadecimal characters.",
+ "transport-type-error": "The transport type is required."
+ }
+ },
+ "filter-dialog": {
+ "online": "The transport must be",
+ "id": "The id must contain",
+ "remote-node": "The remote key must contain",
+
+ "online-options": {
+ "any": "Online or offline",
+ "online": "Online",
+ "offline": "Offline"
+ }
+ }
+ },
+
+ "routes": {
+ "title": "Routes",
+ "info": "Paths used to reach the remote visors to which transports have been established. Routes are automatically generated as needed.",
+ "list-title": "Route list",
+ "key": "Key",
+ "type": "Type",
+ "source": "Source",
+ "destination": "Destination",
+ "delete-confirmation": "Are you sure you want to delete the route?",
+ "delete-selected-confirmation": "Are you sure you want to delete the selected routes?",
+ "delete": "Delete route",
+ "deleted": "Delete operation completed.",
+ "empty": "Visor doesn't have any routes.",
+ "empty-with-filter": "No route matches the selected filtering criteria.",
+ "details": {
+ "title": "Details",
+ "basic": {
+ "title": "Basic info",
+ "key": "Key:",
+ "rule": "Rule:"
+ },
+ "summary": {
+ "title": "Rule summary",
+ "keep-alive": "Keep alive:",
+ "type": "Rule type:",
+ "key-route-id": "Key route ID:"
+ },
+ "specific-fields-titles": {
+ "app": "App fields",
+ "forward": "Forward fields",
+ "intermediary-forward": "Intermediary forward fields"
+ },
+ "specific-fields": {
+ "route-id": "Next route ID:",
+ "transport-id": "Next transport ID:",
+ "destination-pk": "Destination public key:",
+ "source-pk": "Source public key:",
+ "destination-port": "Destination port:",
+ "source-port": "Source port:"
+ }
+ },
+ "filter-dialog": {
+ "key": "The key must contain",
+ "type": "The type must be",
+ "source": "The source must contain",
+ "destination": "The destination must contain",
+ "any-type-option": "Any"
+ }
+ },
+
+ "copy": {
+ "tooltip": "Click to copy",
+ "tooltip-with-text": "{{ text }} (Click to copy)",
+ "copied": "Copied!"
+ },
+
+ "selection": {
+ "select-all": "Select all",
+ "unselect-all": "Unselect all",
+ "delete-all": "Delete all selected elements",
+ "start-all": "Start all selected apps",
+ "stop-all": "Stop all selected apps",
+ "enable-autostart-all": "Enable autostart for all selected apps",
+ "disable-autostart-all": "Disable autostart for all selected apps"
+ },
+
+ "refresh-button": {
+ "seconds": "Updated a few seconds ago",
+ "minute": "Updated 1 minute ago",
+ "minutes": "Updated {{ time }} minutes ago",
+ "hour": "Updated 1 hour ago",
+ "hours": "Updated {{ time }} hours ago",
+ "day": "Updated 1 day ago",
+ "days": "Updated {{ time }} days ago",
+ "week": "Updated 1 week ago",
+ "weeks": "Updated {{ time }} weeks ago",
+ "error-tooltip": "There was an error updating the data. Retrying automatically every {{ time }} seconds..."
+ },
+
+ "view-all-link": {
+ "label": "View all {{ number }} elements"
+ },
+
+ "paginator": {
+ "first": "First",
+ "last": "Last",
+ "total": "Total: {{ number }} pages",
+ "select-page-title": "Select page"
+ },
+
+ "confirmation" : {
+ "header-text": "Confirmation",
+ "confirm-button": "Yes",
+ "cancel-button": "No",
+ "close": "Close",
+ "error-header-text": "Error",
+ "done-header-text": "Done"
+ },
+
+ "language" : {
+ "title": "Select language"
+ },
+
+ "tabs-window" : {
+ "title" : "Change tab"
+ }
+}
diff --git a/cmd/skywire-visor/static/assets/img/lang/pt.png b/cmd/skywire-visor/static/assets/img/lang/pt.png
new file mode 100644
index 0000000000..fef9c359db
Binary files /dev/null and b/cmd/skywire-visor/static/assets/img/lang/pt.png differ
diff --git a/cmd/skywire-visor/static/assets/scss/_icons.scss b/cmd/skywire-visor/static/assets/scss/_icons.scss
index 42dfa3245c..b1d824aae7 100644
--- a/cmd/skywire-visor/static/assets/scss/_icons.scss
+++ b/cmd/skywire-visor/static/assets/scss/_icons.scss
@@ -10,7 +10,7 @@ $dot-size-sm: 7px;
@each $color-name, $color-value in $dot-icons
{
- .dot-#{$color-name}
+ .dot-#{"" + $color-name}
{
height: $dot-size;
width: $dot-size;
@@ -34,7 +34,7 @@ $outlines: (
@each $color-name, $color-value in $outlines
{
- .dot-outline-#{$color-name}
+ .dot-outline-#{"" + $color-name}
{
height: $dot-size;
width: $dot-size;
diff --git a/cmd/skywire-visor/static/assets/scss/_text.scss b/cmd/skywire-visor/static/assets/scss/_text.scss
index 012e6c80b7..fe2c883c00 100644
--- a/cmd/skywire-visor/static/assets/scss/_text.scss
+++ b/cmd/skywire-visor/static/assets/scss/_text.scss
@@ -45,3 +45,7 @@ span {
.red-clear-text {
color: $red-clear;
}
+
+.grey-text {
+ color: $light-gray !important;
+}
diff --git a/cmd/skywire-visor/static/index.html b/cmd/skywire-visor/static/index.html
index 1495d24415..66b26d1460 100644
--- a/cmd/skywire-visor/static/index.html
+++ b/cmd/skywire-visor/static/index.html
@@ -1,15 +1,14 @@
-
-
-