I need some help.  I'm getting this error and can't figure out the code the developer created that would cause this now. I'm not a developer so a lot of this doesn't make sense to me.

CaseToLeadTrigger: execution of AfterInsert

caused by: System.NullPointerException: Attempt to de-reference a null object

Class.CaseToLeadHandler.getCasetoLead: line 61, column 1
Class.CaseToLeadHandler.isAfterInsert: line 3, column 1
Trigger.CaseToLeadTrigger: line 6, column 1

**CaseToLeadHander code:**
```
public class CaseToLeadHandler {
    public static void isAfterInsert(List<Case> inputList) {
        getCasetoLead(inputList);
    }
    
    
    private static void getCasetoLead (List<Case> inputList) {
        Id RTIdContactUs = Schema.SObjectType.Case.getRecordTypeInfosByName().get('Contact Form').getRecordTypeId();
        Id RTIdDoIQualify = Schema.SObjectType.Case.getRecordTypeInfosByName().get('Get Pre-Qualified').getRecordTypeId();
        Id RTIdUnpaidAppointment = Schema.SObjectType.Case.getRecordTypeInfosByName().get('Unpaid Appointment').getRecordTypeId();
        Id RTIdPrepaidAppointment = Schema.SObjectType.Case.getRecordTypeInfosByName().get('Prepaid Appointment').getRecordTypeId();
        Id RTIdPaymentReceived = Schema.SObjectType.Case.getRecordTypeInfosByName().get('Payment received').getRecordTypeId();
        set<id> caseId = new set<id>();
        
        String lastNameCase;
        String caseMail;
        
        List<String> lstSTR = new List<String>();
        List<Lead> lstLeadForCreate = new List<Lead>();
        List<Case> caseWithNewAccountList = new List<Case>();
        List<Case> paymentPrePayCase = new List<Case>();
        List<Payment_History__c> createListPaymentHistory = new List<Payment_History__c>();
        
        Map<String, Case> mapStrToCase = new Map<String, Case>();
        Map<String, Case> mapStrToCaseUpdate = new Map<String, Case>();
        Map<String, Case> updateCaseForPrePay = new Map<String, Case>();
        
        for (Case itemCase : inputList) {
            caseId.add(itemCase.Id);
        }
        
        List<Case> lstCase = [SELECT Id, Description, Lead__c, What__c, When__c, Availability_of_the_health_conditions__c,
                                   Message__c, Subject, Where__c, Staff__c, Copy_of_diagnosis_letter_from_doctor__c, 
                                   What_is_your_date_of_birth__c, How_did_you_hear_about_us__c, Suffering_from_any_condition_on_website__c 
                              FROM Case 
                              WHERE Id IN:caseId];
        
        for (Case itemCase : lstCase) {
            if (itemCase.Subject != null && itemCase.Description != null) {
                if (itemCase.Description.contains('Name:') != FALSE) {
                    mapStrToCase.put(updateTrim(itemCase, 'Email:', '<mailto').toUpperCase(), itemCase);
                    mapStrToCaseUpdate.put(updateTrim(itemCase, 'Email:', '<mailto').toUpperCase(), itemCase);
                }
                
                if (itemCase.Description.contains('Customer:') != FALSE) {
                    mapStrToCase.put(updateTrim(itemCase, 'Email:', 'What').toUpperCase(),itemCase);
                    mapStrToCaseUpdate.put(updateTrim(itemCase, 'Email:', 'What').toUpperCase(),itemCase);
                }
                if(itemCase.Subject.contains('Payment received from')){
                    updateCaseForPrePay.put(itemCase.Subject.substring(itemCase.Subject.indexOf('Payment received from ')+22, itemCase.Subject.length()).toUpperCase(), itemCase);
                    itemcase.Price__c = itemCase.Description.substringBetween('Total: $', ' ');
                }
            }
        }
        
        List<Lead> lstLeadForUpdate = [SELECT Id, FirstName, LastName, Email, Status FROM Lead WHERE Email IN:mapStrToCase.keySet()];
        List<Lead> lstLeadForPrePay = [SELECT Id, FirstName, LastName, Email, Status FROM Lead WHERE Email IN:updateCaseForPrePay.keySet()];
        
        if (!lstLeadForUpdate.isEmpty()) {
            for (Lead itemLead : lstLeadForUpdate) {
                **if (mapStrToCase.get(itemLead.Email.toUpperCase()).Subject != null && mapStrToCase.get(itemLead.Email.toUpperCase()).Subject.contains('PREPAID') != FALSE) {
                  itemLead.Status = 'Booked - Need Diagnosis';**
                     if (itemLead.FirstName == null) {
               itemLead.FirstName = (updateTrim(mapStrToCase.get(itemLead.Email.toUpperCase()), updateTrim(mapStrToCase.get(itemLead.Email.toUpperCase()), 'Customer:       ', ' '), 'Phone') == '')?'':updateTrim(mapStrToCase.get(itemLead.Email.toUpperCase()), 'Customer:       ', ' ');
                    itemLead.LastName = (updateTrim(mapStrToCase.get(itemLead.Email.toUpperCase()), updateTrim(mapStrToCase.get(itemLead.Email.toUpperCase()), 'Customer:       ', ' '), 'Phone') == '')?updateTrim(mapStrToCase.get(itemLead.Email.toUpperCase()), 'Customer:       ', 'Phone'):updateTrim(mapStrToCase.get(itemLead.Email.toUpperCase()), updateTrim(mapStrToCase.get(itemLead.Email.toUpperCase()), 'Customer:       ', ' '), 'Phone');
                  }
                }
                if (mapStrToCase.get(itemLead.Email.toUpperCase()).Subject != null && mapStrToCase.get(itemLead.Email.toUpperCase()).Subject.contains('PREPAID') == FALSE) {
                     itemLead.Status = 'Booked - Need Diagnosis';
                     if (mapStrToCase.get(itemLead.Email.toUpperCase()).Description.contains('Customer') == TRUE) {
                       if (itemLead.FirstName == null) {
                 itemLead.FirstName = (updateTrim(mapStrToCase.get(itemLead.Email.toUpperCase()), updateTrim(mapStrToCase.get(itemLead.Email.toUpperCase()), 'Customer:       ', ' '), 'Phone') == '')?'':updateTrim(mapStrToCase.get(itemLead.Email.toUpperCase()), 'Customer:       ', ' ');
                      itemLead.LastName = (updateTrim(mapStrToCase.get(itemLead.Email.toUpperCase()), updateTrim(mapStrToCase.get(itemLead.Email.toUpperCase()), 'Customer:       ', ' '), 'Phone') == '')?updateTrim(mapStrToCase.get(itemLead.Email.toUpperCase()), 'Customer:       ', 'Phone'):updateTrim(mapStrToCase.get(itemLead.Email.toUpperCase()), updateTrim(mapStrToCase.get(itemLead.Email.toUpperCase()), 'Customer:       ', ' '), 'Phone');
                        }
                     }
                     If (mapStrToCase.get(itemLead.Email.toUpperCase()).Description.contains('Name:') != FALSE) {
                       if (itemLead.FirstName == null) {
                          itemLead.FirstName = (updateTrim(mapStrToCase.get(itemLead.Email.toUpperCase()), updateTrim(mapStrToCase.get(itemLead.Email.toUpperCase()), 'Name:', ' '), '<mailto') == '')?'':updateTrim(mapStrToCase.get(itemLead.Email.toUpperCase()), 'Name:', ' ');
                    itemLead.LastName = (updateTrim(mapStrToCase.get(itemLead.Email.toUpperCase()), updateTrim(mapStrToCase.get(itemLead.Email.toUpperCase()), 'Name:', ' '), '<mailto') == '')?updateTrim(mapStrToCase.get(itemLead.Email.toUpperCase()), 'Name:', 'Email:'):updateTrim(mapStrToCase.get(itemLead.Email.toUpperCase()), updateTrim(mapStrToCase.get(itemLead.Email.toUpperCase()), 'Name:', ' '), 'Email:');
                        }
                     }
                }                                                            
                mapStrToCase.get(itemLead.Email.toUpperCase()).Lead__c = itemLead.Id;
                subStrMethod(mapStrToCase.get(itemLead.Email.toUpperCase()), RTIdContactUs, RTIdDoIQualify, RTIdUnpaidAppointment, RTIdPrepaidAppointment, RTIdPaymentReceived);
              mapStrToCaseUpdate.remove(itemLead.Email.toUpperCase());
            }
            try{
              update mapStrToCase.values();
            }
            catch(DmlException e) {
                System.debug('The following exception has occurred: ' + e.getMessage());
            }
            try{
              update lstLeadForUpdate;
            }
            catch(DmlException e) {
                System.debug('The following exception has occurred: ' + e.getMessage());
            }
        }
        
        if (!lstLeadForPrePay.isEmpty()) {
            
            for (Lead itemLead : lstLeadForPrePay) {
                updateCaseForPrePay.get(itemLead.Email.toUpperCase()).Lead__c = itemLead.Id;
                updateCaseForPrePay.get(itemLead.Email.toUpperCase()).RecordTypeId = RTIdPaymentReceived;
                
                Payment_History__c paymentHistory = new Payment_History__c();
                paymentHistory.Lead__c = itemLead.Id;
                paymentHistory.Description__c = updateCaseForPrePay.get(itemLead.Email.toUpperCase()).Description.substringBetween('Description: ', 'Unit');
        paymentHistory.Amount__c = decimal.valueOf(updateCaseForPrePay.get(itemLead.Email.toUpperCase()).Description.substringBetween('Total: $', ' '));
                paymentHistory.Receipt_No__c = updateCaseForPrePay.get(itemLead.Email.toUpperCase()).Description.substringBetween('Receipt No: ', '"');
                paymentHistory.Payment_type__c = 'PayPal';
                
                createListPaymentHistory.add(paymentHistory);
            }
            try{
                update updateCaseForPrePay.values();
            } 
            catch(DmlException e) {
                System.debug('The following exception has occurred: ' + e.getMessage());
            }
            try{
              insert createListPaymentHistory;
            }
            catch(DmlException e) {
                System.debug('The following exception has occurred: ' + e.getMessage());
            }
        }
        
        for (Case itemCase : mapStrToCaseUpdate.values()) {
                            
            Lead itemLead = new Lead();
            
            
            if (itemCase.Description.contains('Name:') != FALSE) {  
                itemLead.Status = 'New Lead';
                itemLead.LeadSource = 'Email';
              itemLead.FirstName = (updateTrim(itemCase, updateTrim(itemCase, 'Name:', ' '), '<mailto') == '')?'':updateTrim(itemCase, 'Name:', ' ');
              itemLead.LastName = (updateTrim(itemCase, updateTrim(itemCase, 'Name:', ' '), '<mailto') == '')?updateTrim(itemCase, 'Name:', 'Email:'):updateTrim(itemCase, updateTrim(itemCase, 'Name:', ' '), 'Email:');
              itemLead.Email = updateTrim(itemCase, 'Email:', '<mailto');
                
                if (itemCase.Description.contains('Are you a Permanent or Temporary resident?')) {
                    itemLead.Phone = updateTrim(itemCase, 'Phone Number:', 'Are');
                    itemLead.Permanent_or_Temporary_resident__c = updateTrim(itemCase, 'Are you a Permanent or Temporary resident?:', 'Zip');
                }
                
                if (!itemCase.Description.contains('Are you a Permanent or Temporary resident?')) {
                    itemLead.Phone = updateTrim(itemCase, 'Phone Number :', 'Zip');
                }
                
              itemLead.Company = 'Unknown';
            }
            
            if (itemCase.Description.contains('Customer:       ') != FALSE) {              
                if (itemCase.Subject != null && itemCase.Subject.contains('PREPAID') != FALSE) {
                  itemLead.Status = 'Booked - Need Diagnosis';
                }
                if (itemCase.Subject != null && itemCase.Subject.contains('PREPAID') == FALSE) {
                    itemLead.Status = 'Booked - Need Diagnosis';
                }
                itemLead.FirstName = (updateTrim(itemCase, updateTrim(itemCase, 'Customer:       ', ' '), 'Phone') == '')?'':updateTrim(itemCase, 'Customer:       ', ' ');
                itemLead.LastName = (updateTrim(itemCase, updateTrim(itemCase, 'Customer:       ', ' '), 'Phone') == '')?updateTrim(itemCase, 'Customer:       ', 'Phone'):updateTrim(itemCase, updateTrim(itemCase, 'Customer:       ', ' '), 'Phone');
                itemLead.Phone = updateTrim(itemCase, 'Phone:', 'Email');
                itemLead.Email = updateTrim(itemCase, 'Email:', 'What');
              itemLead.Company = 'Unknown';
                itemLead.LeadSource = 'Email';
                
            }
            
            lstLeadForCreate.add(itemLead);
            caseWithNewAccountList.add(itemCase);
        } 
       
        if (!lstLeadForCreate.isEmpty()) {
            try{
              insert lstLeadForCreate;
            } 
            catch(DmlException e) {
                System.debug('The following exception has occurred: ' + e.getMessage());
            }
        }
        
        for (integer i = 0; i < lstLeadForCreate.size(); i++ ) {
          caseWithNewAccountList.get(i).Lead__c = lstLeadForCreate.get(i).Id;
            subStrMethod(caseWithNewAccountList.get(i), RTIdContactUs, RTIdDoIQualify, RTIdUnpaidAppointment, RTIdPrepaidAppointment, RTIdPaymentReceived);
        }
        
        try{
          update caseWithNewAccountList;
        } 
        catch(DmlException e) {
            System.debug('The following exception has occurred: ' + e.getMessage());
        }
        
    }
    
    
    private static void subStrMethod (Case itemCase, Id contactUs, Id DoIQualify, Id UnAppointment, Id RTIdPrepaidAppointment, Id RTIdPaymentReceived) {
        if (itemCase.Description.contains('Customer:') != FALSE) {
            if(itemCase.Subject != null && itemCase.Subject.contains('PREPAID') != FALSE){
                itemCase.RecordTypeId = RTIdPrepaidAppointment;
                itemCase.Duration__c = itemCase.Description.substringBetween('When:', 'Where').substringBetween('(', ')');
                itemCase.Staff__c = itemCase.Description.substringBetween('Staff:', 'Payment');
            }
            if(itemCase.Subject != null && itemCase.Subject.contains('PREPAID') == FALSE){
                itemCase.RecordTypeId = UnAppointment;
                itemCase.Staff__c = itemCase.Description.substringBetween('Staff:', 'Questions');
            }
            
            itemCase.What__c = itemCase.Description.substringBetween('What:', 'When');
            itemCase.When__c = itemCase.Description.substringBetween('When:',  'Where');
            itemCase.Where__c = itemCase.Description.substringBetween('Where:', 'Staff');
            itemCase.Copy_of_diagnosis_letter_from_doctor__c = itemCase.Description.substringBetween('appointment?', 'What');
            itemCase.What_is_your_date_of_birth__c = itemCase.Description.substringBetween('YYYY', 'How');
            itemCase.How_did_you_hear_about_us__c = itemCase.Description.substring(itemCase.Description.IndexOf('us?')+3, itemCase.Description.IndexOf('Manage appointment'));
        }
        
        if (itemCase.Description.contains('Name:') != FALSE) {
            
            if (itemCase.Description.contains('Are you a Permanent or Temporary resident?')) {
                itemCase.RecordTypeId = DoIQualify;
              itemCase.Suffering_from_any_condition_on_website__c = itemCase.Description.substringBetween('website? :', 'How');
              itemCase.How_did_you_hear_about_us__c = itemCase.Description.substring(itemCase.Description.IndexOf('us?')+5, itemCase.Description.IndexOf('This message')-33);
            }
            
            if (!itemCase.Description.contains('Are you a Permanent or Temporary resident?')) {
                itemCase.RecordTypeId = contactUs;
                itemCase.Availability_of_the_health_conditions__c = itemCase.Description.substringBetween('Do you have one of the health conditions approved by the state for cannabis?:', 'How did you hear about us?');
                itemCase.How_did_you_hear_about_us__c = itemCase.Description.substringBetween('How did you hear about us?:', 'Message:');
                itemCase.Message__c = itemCase.Description.substring(itemCase.Description.IndexOf('Message:')+8, itemCase.Description.IndexOf('This message')-34);
            }
        }
    }
    
    
    private static String updateTrim (Case objCase, String startStr, String endStr) {
        
        String strStrin = objCase.Description.substringBetween(startStr, endStr);
        
    if (strStrin != null) {
          return strStrin.trim().replaceAll('\\s+','');    
        }
        else {
            return '';
        }
        
    }
}
```

Line 61:  
`if (mapStrToCase.get(itemLead.Email.toUpperCase()).Subject != null && mapStrToCase.get(itemLead.Email.toUpperCase()).Subject.contains('PREPAID') != FALSE)`