¿QUE ES EL KERNEL? El kernel, sin entrar en tecnicismos y definiéndolo de forma sencilla es el que se encarga de servir como intermediario cuando presionamos la pantalla para ejecutar una acción y llevarlo a cabo en el sistema. Por ejemplo, un kernel puede aumentar o disminuir la cantidad del voltaje que utiliza el procesador (CPU).
A partir del kernel original, se han ido creando kernels personalizados por desarrolladores de la comunidad Android que consiguen hacer trabajar en condiciones óptimas el móvil y con el máximo rendimiento de la batería manteniendo la seguridad y estabilidad.
CARACTERÍSTICAS DE LOS KERNEL PERSONALIZADOS
Una de las muchas ventajas de tener el móvil rooteado es la posibilidad de modificar los parámetros del procesador del móvil, con el fin de incrementar el rendimiento del móvil o aumentar la duración de la batería. Se debe saber que estos parámetros están íntimamente relacionados con el kernel. Entre los parámetros que se pueden modificar, cabe destacar cuatro parámetros fundamentalmente, con los cuales, se permitiría conseguir una mejor relación entre el consumo de la batería y el rendimiento general del móvil.
- Permiten modificar el governador (CPU Governor). Este se encarga de analizar todo el consumo de tareas, juegos, aplicaciones y determina si es necesario enviarle instrucciones a la CPU para aumentar la frecuencia, el Voltaje y el consumo de páginas de memoria para poder completar satisfactoriamente y en tiempo necesario dicha acción.
- Permiten modificar el planificador de las operaciones de entrada/salida (Planificador E/S). Este es el que decide el método que utiliza el kernel para establecer el orden de las diferentes peticiones de operaciones de entrada/salida. Las operaciones de lectura o escritura en memoria son el verdadero cuello de botella del móvil, y suponen un elevado porcentaje del tiempo destinado a la ejecución de programas. Existen varios algoritmos para implementar diferentes planificadores que mejoran al que viene por defecto, los cuales reseño más abajo.
- Permiten modificar el voltaje (VCORE) del núcleo de la CPU. Cuando el móvil no tiene tareas pesadas, automáticamente además de reducir la velocidad del procesador, reduce el voltaje para ahorrar la batería. Cuando un Kernel no está bien “trabajado” ese cambio de velocidad del procesador puede tardar más de lo normal o simplemente nunca ocurrir y ahí es cuando la batería se "drena" con mayor velocidad.
- Permiten hacer Overclocking (OC) o Underclocking (UC), es decir, aumentar o reducir la velocidad de frecuencia de la CPU fuera de los límites que marcan las especificaciones por defecto de Samsung. Se debe recordar que al hacer Overcloking, aumentará el rendimiento pero conllevará un mayor consumo de batería, y a la inversa, si se hace Underclocking.
GOBERNADORES CPU (REGULADORES) El CPU Governor (regulador de la frecuencia de la CPU), también llamado gobernador, es el que se encarga de gestionar tanto la velocidad a la que trabaja el procesador en un momento determinado como las reglas que permiten que éstas velocidades se incrementen o decrementen dentro de los rangos mínimos y máximos que se hayan establecido, dicho de otra modo, es el que decide cuándo utilizar la frecuencia máxima para sacar todo el rendimiento del móvil, las intermedias o cuándo trabajar a la mínima frecuencia. El gobernador, en general se basa en la carga de trabajo del mismo procesador. Al elegir (y configurar) un gobernador, habrá de tener en cuenta que el consumo del procesador es, generalmente, mayor cuanto mayor sea la frecuencia a la que éste trabaje, por lo que políticas muy agresivas para los incrementos de frecuencia podrán tener efectos nefastos en la ya de por si no demasiado autonomía de móvil.
CONSIDERACIONES
- Cuando un kernel no tiene un gobernador muy eficiente, suceden varias cosas:
- Por lo general, aumentara al máximo la velocidad de frecuencia de la CPU y todo lo que sea necesario para "mover" una tarea sencilla, lo que repercutirá en el consumo de batería.
- También crea problemas de congelamiento de pantalla. Al igual que la CPU, el sistema necesita recursos para trabajar a fondo y de manera silenciosa muchas tareas mientras no usas el móvil. Si el gobernador no le da los recursos al móvil para estas tareas, el móvil carece de recursos y es cuando en muchos casos se congela.
- Como dije anteriormente, los Governors de encargan de elegir la frecuencia de la CPU, lo hacen según el uso del mismo, esto quiere decir que, por ejemplo, el Governor puede estar configurado para pasar a un nivel mayor al actual cuando los procesos usan el 80% de la potencia y pasar a un nivel menor cuando se usa menos de 25%.
- Los governors también pueden estar configurados para no pasar ciertos límites de mHz dependiendo si la pantalla está encendida o apagada.
- Disminuir demasiado el voltaje puede causar un estado llamado "Death Sleep", en este estado el móvil simplemente no logra despertarse al intentar desbloquearlo y se queda con la pantalla negra, sin reaccionar, lo que hace que haya que reiniciarlo, sacando la batería.
- Tener Voltajes muy bajos puede causar reinicios y falta de rendimiento, a su vez, tener voltajes altos provoca un gran aumento de temperatura y por consiguiente disminuye la vida útil del procesador.
- Hay varios tipos de Governor, si tu necesidad son los juegos, hay unos que mantienen al máximo en todo momento el potencial de todos los periféricos del móvil llamado “Performance”. Pero si en tu caso te gusta mantener la batería maximo posible, el llamado Powersave sería el adecuado para ti.
- Lulzactive y SmartassV2 mantiene un buen equilibrio entre rendimiento y batería. Para tareas ligeras, Lulzactive debería ser mejor en cuanto a batería, y para tareas más pesadas, Lulzactive debería ser mejor para rendimiento también. Para obtener un rendimiento máximo usa un Ondemand retocado o un Conservative.
- Si nota cierto lag con un governor determinado, por ejemplo cuando haces scroll en el menú de aplicaciones o en el navegador web, tendrás que configurar el governor para que muestree con menos frecuencia cuándo baja la velocidad de la CPU. Incrementar el tiempo de muestro para bajar la frecuencia hace que la CPU esté durante más tiempo en una misma frecuencia antes de disminuirla.
¿CÓMO CAMBIAR EL GOBERNADOR?
Se pueden cambiar de varias formas, una de ellas es utilizando scripts en la carpeta init.d si el kernel está preparado para ello, pero voy a explicar la manera más sencilla a mi juicio, que es mediante la utilización de aplicaciones disponibles en el Market. Hay bastantes aplicaciones para este cometido, pero voy a citar las más conocidas.
- SetCPU, simplemente tenemos que pulsar en "scalling" y nos saldrá la lista de gobernadores disponibles que nos ofrece nuestro kernel, ya sólo queda elegir el que más nos guste. También podemos variar la frecuencia máxima y mínima a la que trabajará nuestra CPU. Cuando hayamos terminado, si queremos que las modificaciones que hemos hecho se apliquen al reiniciar el terminal debermos marcar la casilla "Set on Boot". Existen más opciones en esta aplicación pero no las citaré ya que se alejan del cometido de este manual y ya existen otros tutoriales específicos para utilizar SetCPU.
- Voltage Control, para cambiar el gobernador con Voltage Control pulsamos en "CPU Governor" y elegimos el gobernador que más nos interese. También nos permite elegir la frecuencia máxima y mínima a la que trabajará nuestra CPU. Si queremos mantener nuestra configuración al reiniciar el teléfono marcamos la tecla "menú > Save as boot settings". Esta aplicación tiene la ventaja respecto a SetCPU que no se queda en memoria. Existen más opciones pero no las mencionaré al alejarse de la temática.
PARÁMETROS Y AJUSTES
Diferentes governors tendrán diferentes parámetros, pero es fácil entenderlos. Normalmente un governor tendrá:
- Tiempo/frecuencia de muestreo (Sampling Time/Rate): medido en µs y según la cual la función de muestreo determina la frecuencia para "sondear" y decidir si la misma debe ser reducida o incrementada. Algunos governors tendrán diferentes tiempos de muestreo tanto para aumentar como disminuir.
- Umbrales (Thresholds): medidos en porcentaje. Cuando la carga de la CPU alcanza este punto, el governor aumenta o disminuye la frecuencia de la misma.
Hay muchos otros parámetros, pero todos están relacionados de alguna manera con estos dos, principalmente.

TIPOS DE GOBERNADORES Y SUS CARACTERÍSTICAS
1. UserSpace
Se caracteriza porque en lugar de determinar automáticamente las frecuencias, permite al usuario configurar las frecuencias.
2. PowerSave
Powersave ajusta la frecuencia máxima del procesador en el nivel más bajo, lo que incrementa la autonomía a costa de reducir notablemente el rendimiento. No es recomendable usar este governor como un perfil de pantalla encendida, o incluso apagada si la frecuencia mínima es demasiado baja.
3. Performance
La prioridad de este governor es conseguir el máximo rendimiento ya que establece la frecuencia del procesador a la máxima posible en todo momento lo que, evidentemente, puede tener efectos negativos en cuanto a duración de batería. Este regulador es apropiado para hacer testeos tipo benchmark, pero no para un uso habitual.
4. OnDemand
OnDemand, es el regulador que se encuentra por defecto en la mayoría de kernels de la Stock. Cuando el regulador detecta que la carga del procesador sube, incrementa la frecuencia del procesador hasta el máximo valor permitido, pasando posteriormente a decrementar poco a poco la frecuencia de ésta a medida que la carga baja. Uno de los objetivos principales del Ondemand es que cambia a la máxima frecuencia tan pronto como haya actividad en la CPU para asegurar la capacidad de respuesta del sistema, para que se entienda funciona en plan “lo importante es el rendimiento aquí y ahora”. Por lo tanto, escala a la máxima frecuencia cuando la CPU está trabajando y decrece gradualmente cuando la CPU se va quedando más libre. A pesar de que muchos consideran Ondemand como un gobernador fiable, se queda a mitad de camino entre ofrecer un buen rendimiento del teléfono y un ahorro de batería.
5. IntelliDemand
IntelliDemand, o también conocido como Intelligent Ondemand, es un gobernador basado en Ondemand. Este se comporta de manera diferente según el uso de la CPU. - Cuando la CPU está realmente ocupada (habitualmente juegos, benchmarking, aplicaciones con grandes necesidades, etc) el gobernador se comporta como OnDemand.
- Cuando la CPU está “idling” (al ralentí, por así decirlo), o no tan ocupada como antes, el gobernador limita la frecuencia máxima en función de las frecuencias disponibles del kernel para
ahorrar batería. Esto se denomina modo de navegación. El gobernador en este estado se comporta de modo similar al governador Interactive. La frecuencia con la que se toman las decisiones de escalar hacia arriba está basada en el tiempo de inactividad de la CPU. Un tiempo de inactividad bajo (<20%) hace que la CPU aumente la frecuencia actual.
En resumen, se trata de un Ondemand inteligente que entra en el modo navegación para limitar la frecuencia máxima cuando la CPU entra en inactividad, y se comporta con un Ondemand cuando la CPU está ocupada para ofrecer rendimiento para juegos, por ejemplo. Además Intellidemand no salta a la frecuencia más alta cuando la pantalla está apagada.
6. Wheatley
Pendiente.
7. PegasusQ
Pendiente.
8. Slp
Es una mezcla de PegasusQ y Ondemand.
9. Nightmare
Es una variante de PegasusQ modificada, menos agresiva y más estable, Mantiene un buen equilibrio entre rendimiento y consumo de batería. Es una versión Multi-Nucleo del Gobernador Ondemand con soporte “Hot plugging” integrado, es decir, los procesos en curso se pueden ejecutar simultáneamente. Se caracteriza por escalar a la frecuencia más alta muy rápidamente, y una vez alcanzada, mantiene esa frecuencia tanto como sea posible. Los procesos en curso se mantienen en una cola de ejecución y se organizan de acuerdo a la prioridad de cada proceso. Para asegurarse de que cada proceso tiene su parte justa de los recursos, cada uno se ejecuta durante un cierto período y luego se detiene y se coloca otra vez en la cola hasta el siguiente turno de ejecución. Este procedimiento continúa hasta que se terminan los procesos.
10. Darkness
Es una variante de Nightmare pero más simple y rápido.
11. Abyssplug
Es similar al gobernador OnDemand, pero escala mejor las frecuencias dependiendo de la carga de la CPU. Al igual que el gobernador HotPlug, se desactivan núcleos de la CPU no utilizados cuando la carga de la CPU es baja.
12. AbyssplugV2
No tengo Datos.
13. LagFree
Otro gobernador basado en OnDemand con la diferencia que la frecuencia aumenta y disminuye suavemente. LagFree no omite ningún escalón en las frecuencias mientras la aumenta o la disminuye, por lo que si hay un requerimiento repentino de energía, este governor no puede satisfacerlo ya que tiene que pasar por todas y cada una de las frecuencias, con lo que a veces llega muy tarde a la energía requerida, además que tampoco está optimizado para ahorro de batería.
14. Hyper
Es un gobernador basado en Ondemand, que se le añadido ajustes como “suspend_freq” y “fast_start”, “deep_sleep”. Además, la frecuencia máxima está en modo de suspensión a 500Mhz.
15. EfficientDemand
No tengo Datos
16. Interactive
Se puede considerar como un OnDemand pero escala de forma rápida más inteligentemente. En lugar de realizar muestreos en cada intervalo como OnDemand, Interactive determina la manera de escalar la CPU cuando sale de reposo. Al ser un escalado más rápido gasta más batería.
Tiene las siguientes ventajas:- Escala frecuencias de manera más consistente, ya que los otros governors hacen su muestreo de carga de la CPU en un contexto de espera (primero uno, hasta que no acabe con ese no pasa el siguiente), pero Interactive asigna unos tiempos a cada muestreo haciéndolo más consistente.
- Mayor prioridad para el incremento de frecuencia de la CPU, dando así un mayor beneficio al incremento de rendimiento.
17. SmartassH3
El SmartassH3 está optimizado para darle prioridad al ahorro de batería a costa del rendimiento del móvil.
18. Smartmax
Es una combinación de los gobernadores Ondemand y Smartass2. Por defecto está configurado para ahorro de batería.
19. Intelliactive
Basado en el gobernador Interactive, con las siguientes mejoras:
- 1. Capacidad de auto-refuerzo de los drivers de entrada (no es necesario PowerHAL)
- 2. Programación de las dos fases (Inactividad/Ocupado) para evitar que se escale directamente a la frecuencia máxima.
20. Asswax
No tengo Datos.
21. Conservative
Conservative, es similar a OnDemand, al ajustar dinámicamente las frecuencias según la utilización del procesador. Sin embargo, el Conservative aumenta y disminuye la velocidad de la CPU más gradualmente (más lentamente), lo que ahorra batería, puesto que el procesador llega a las frecuencias altas más tarde o, en caso de que la carga no sea excesiva, sencillamente no llega. Por ejemplo, el governor aumenta la frecuencia de la CPU paso por paso (100mhz >200mhz > 400mhz > etc), y salta a la frecuencia más baja cuando la CPU entra en “idle” (1000mhz > 100mhz).
22. KtoonservativeQ
KToonservativeQ se basa en el gobernador Conservative pero con soporte Hotplug, de forma que le permite apagar los nucleos del procesador dinámicamente que no son necesarios en ese momento. Con esto se consigue un buen equilibrio entre rendimiento y duración de la batería.
23. Dancedance
Este gobernador se basa en el gobernador conservador. El escalado hasta las frecuencias más altas se hace de modo diferente, así como las rutinas de “Deep Sleep”.
24. Lionheart
Es un gobernador basado en el gobernador Conservative. Los valores predeterminados de los umbrales y la frecuencia de muestreos difieren de Conservative ya que se hace más hincapié en el rendimiento, ya que el escalado es más agresivo, a costa de mayor gasto de batería. 25. Alucard
No tengo Datos.
26. Badass
Badass se caracteriza por eliminar el sistema de escalado rápido a la frecuencia máxima. En un sistema típico de la CPU no pasará por encima de 918Mhz, por lo que mantener la calma y utilizará menos energía. Para provocar un aumento de la frecuencia, el sistema debe ejecutar un bit @ 918Mhz con cargas altas, entonces la frecuencia se dispara a 1188Mhz. Si eso no es suficiente que el gobernador le da la máxima aceleración. (esta transición no debe durar más de 2-5 segundos, dependiendo de la carga de su sistema está experimentando)
Badass también tendrá la carga de GPU en consideración. Si el gpu es moderadamente lleno que pasará por alto la comprobación anterior y el reloj de la CPU con 1188Mhz. Si el gpu es aplastado bajo carga, badass levantará las restricciones a la cpu.
27. Adaptive
Es un gobernador con una política de frecuencias de la CPU dinámicas diseñado para cargas de trabajo sensibles a la latencia y también para darle prioridad al rendimiento. Este gobernador intenta reducir la latencia del reloj cuando aumenta de modo que el sistema es más sensible a las cargas de trabajo interactivas en el estado de equilibrio “loweset” pero reduce el voltaje en el nivel de procesos intermedio hasta que se impida al sistema escalar al nivel de máximas operaciones.
28. EfficientPower
No tengo Datos
29. EfficientSaver
No tengo Datos
I/O SHEDULERS (Planificadores de Entrada/Salida) Los planificadores de entrada/salida son los que se encargan de organizar las peticiones de lectura/escritura en el móvil o en la unidad de almacenamiento. Los objetivos principales de los planificadores son:
- Disminuir los tiempos de búsqueda (seek times) en la memoria
- Dar Prioridad a las peticiones de ciertos procesos de Entrada/salida (de 1er plano, 2º plano, etc)
- Otorgar el ancho de banda sucifiente para cada proceso
- Garantizar que determinadas peticiones sean resueltas antes de un plazo determinado.
CONSIDERACIONES
- No hay ninguno mejor que otro. Depende del uso que le des y las aplicaciones y tareas que tengas en ejecución, usa diferentes schedulers.

TIPOS DE PLANFICADORES Y SUS CARACTERÍSTICAS
1. Noop
Gestiona todas las peticiones siguiendo el método FIFO (First In First Out), o dicho de otra forma, las primeras en llegar son las primeras en ser atendidas. Es el planificador más simple que existe para el kernel, y se basa en el establecimiento de una cola de peticiones que van procesándose de forma secuencial según el orden establecido por el instante en que éstas son creadas. Su mayor problema es que no permite colarse a las peticiones provenientes de procesos prioritarios.
Lo mejor es utilizarlo con dispositivos de almacenamiento que no dependen de movimiento mecánico para acceder a los datos (si, como nuestras tarjetas flash). La ventaja aquí es que las unidades flash no requieren un reordenamiento de las múltiples peticiones I/O, a diferencia de los discos duros normales.
Ventajas:- Sirve las peticiones I/O con un menor número de ciclos de la CPU (¿mejora de la batería?).
- Es el mejor para unidades flash.
- Buen rendimiento en los sistemas db.
Inconvenientes:- La reducción en el número de ciclos de la CPU es proporcional a la pérdida de rendimiento.
2. Deadline
El objetivo es minimizar la latencia de I/O, o la necesidad de una petición. Este planificador funciona de modo similar al tiempo real, utilizando una política de asignación en circuito (round robin), para intentar distribuir equitativamente las peticiones de Entrada/Salida. Con la finalidad de impedir que se agote la capacidad de recibir peticiones, impone tiempos de ejecución (deadline) a todas las operaciones de Entrada/Salida, para ello utiliza cinco colas de procesamiento, dos de las cuales son ordenadas de acuerdo a los tiempos de ejecución, al mismo tiempo que las colas de procesamiento son ordenadas de acuerdo a su número de sector. De modo predeterminado, los tiempos de caducidad son de 500 ms para las peticiones de lectura, y de 5 segundos para las peticiones de escritura.
Ventajas:- Se acerca bastante a un planificador a tiempo real.
- Excelente en la reducción de latencia de peticiones I/O.
- El mejor planificador para el acceso a bases de datos y consultas.
- El requerimiento de “ancho de banda” de un proceso (el porcentaje de CPU que necesita) se puede calcular fácilmente.
- Al igual que Noop, es un buen planificador para memorias flash.
Inconvenientes:- Cuando el sistema está sobrecargado, la elección de procesos se puede volver impredecible.
3. CFQ
CFQ, que es el acrónimo de Completely Fair Queuing, que podría traducirse como cola de procesamiento equitativa, tiene el objetivo de mantener una cola de procesamiento escalable por proceso, e intentar distribuir equitativamente el porcentaje de uso del procesador disponible para los procesos de Entrada/Salida, entre todas las peticiones de Entrada/Salida manteniendo una buena capacidad de procesamiento. El intervalo de tiempo asignado a cada cola depende de la prioridad del proceso primario. Al permitir que las colas de procesamiento puedan detener al finalizar un proceso de Entrada/Salida, anticipando los procesos de Entrada/Salida más cercano de ese mismo proceso.
Ventajas:- Considerado el mejor ofreciendo un equilibrado rendimiento I/O.
- El más fácil de configurar.
- Excelente en sistemas multiprocesador.
- El mejor rendimiento del sistema en bases de datos, después de DeadLine.
Inconvenientes:- Algunos usuarios reportan que el escáner de medios tarda bastante en completarse usando CFQ. Esto podría deberse a que la distribución del uso de la CPU se reparte equitativamente entre todas las operaciones I/O durante el arranque y no se conceden prioridades.
- Jitter (el peor caso de retardo) puede llegar a ser alto debido a la cantidad de tareas que necesitan acceso al disco.
4. BFQ
En lugar de asignar intervalo de tiempo como CFQ, BFQ asigna como unos “presupuestos” estimativos. Garantiza el disco para el proceso activo hasta que ese presupuesto expira. El presupuesto asignado a un proceso varía con el tiempo como una función de su comportamiento.
Ventajas:- Se cree que es muy bueno para la tasa de transferencia de datos vía USB.
- Se cree que es el mejor scheduler para la grabación de videos de HD y video streaming (por el menor “jitter” en comparación con CFQ y los otros).
- Es considerado un scheduler I/O muy preciso.
- Alcanza alrededor de un 30% más de rendimiento que CFQ.
Inconvenientes:- No es el mejor scheduler para hacer benchmarking.
- El mayor “presupuesto” asignado a un proceso puede afectar a la experiencia de usuario y aumentar la latencia (retardos).
5. SIO
SIO es una mezcla entre Noop y Deadline. Se caracteriza por mantener unos consumos mínimos y lograr un escaso retardo al atender solicitudes. No existe un reordenamiento de las peticiones.
Ventajas- Simple y muy seguro.
- Minimiza la necesidad de atención de las solicitudes.
Inconvenientes- Velocidades lentas de lectura en memorias flash, en comparación con los otros schedulers.
- La velocidad de las lecturas secuenciales en memorias flash tampoco es buena.
6. V(R)
A diferencia de los otros schedulers, las peticiones sincrónicas y asíncrónicas no se tratan de forma separada. El procedimienyo que sigue es que la siguiente solicitud en ser atendida será la que más cercana esté a la última atendida.
Ventajas- Quizás es el mejor para benchmarking porque en el mejor de sus comportamientos, el rendimiento es mejor.
Inconvenientes- Los resultados de las variaciones de rendimiento pueden ser que esté por debajo del promedio a veces.
- Menos fiable y más inestable.
7. ROW
nuevo: - ROW significa "Lea WRITE", que es el principal peticiones despachan política de este algoritmo. El IO planificador ROW se desarrolló con los dispositivos móviles de necesidades en mente.En los dispositivos móviles nos volveremos tienen tanto hilos paralelos como en los escritorios. Por lo general es un solo hilo o como máximo 2 hilos de trabajo simultáneas de lectura y escritura. Favorecer las solicitudes de lectura más escribe disminuye la latencia de lectura mucho.
La idea principal de la política de planificación ROW es: Si hay solicitudes de lectura en la tubería - Envío ellos, pero no se mueren de hambre las solicitudes de escritura demasiado. se puede encontrar una pequeña comparación de fila para programadores existentes. La prueba que se ejecutó para estas mediciones se lee y se escribe paralelo. 8. Fiops
Programador Flash I / O justo, eficiente está dirigido a los medios de almacenamiento basados en Flash modernos también. 9. Zen
Este programador se basa en realidad en una combinación de los programadores NOOP, SIO y VR. Este programador combina solicitudes sincrónicas y asincrónicas otorgándole la misma prioridad. Emplea un tiempo límite a fin de obtener o determinar la prioridad de un proceso. 10. Fifo
Es el acrónimo de First In First Out Scheduler. Iimplementa un método prioritario simple basado en el procesamiento de las solicitudes según van llegando.
__________________
Recomiendo el uso de Firefox o Google Chrome, sobre todo, porque tiene corrector autográfico integrado. Los que escriben no aprenderán nada, pero al menos los que lo leen no le quemarán los ojos.
Última edición por bernarbernuli Día 30/11/14 a las 07:12:14.
|