Implementación completa.