update code เกือบสมบูรณ์