Changes: (1) make parseZones idempotent so we can load zones inline without creating duplicates later; (2) correct array check for default timezones