/** Checks whether a given string is a palindrome or not. * *@param inputString the string to check for palindrome *@param ignoreCase a flag to indicate whether case should be ignored when checking for palindrome *@return true if the input string is a palindrome, false otherwise *@throws IllegalArguementException if the input string is null * *Example: *isPalindrome("racecar", true);//returns true *isPalindrome("Racecar", true); //returns true *isPalindrome("hello", true); // returns false * */ public static boolean isPalindrome(String inputString, boolean ignoreCase) { if (inputString == null) { throw new IllegalArguementException("Input string cannot be null."); } int leftIndex = 0; int rightIndex = inputString.length() -1; while (leftIndex < rightIndex) { if (inputString.charAt(leftIndex) != inputString.charAt(rightIndex)) { return false; } leftIndex++; rightIndex--; } return true; } Based on the code, answer the following questions: please! 1. Draw the control flow graph that represents abstraction of its execution. Label edges and nodes in the graph with the corresponding code fragments. (15 points) Hint-1: Do not forget to indicate initial and end node(s). Hint-2: You do not need to create a node for the method declaration part in the first line 2. List the test requirements for Node Coverage(3 points) 3. Identify test paths that achieve the test requirements for Node Coverage 4. Give a set of test cases for the test paths in c. Make sure to include test input values and expected outputs. If it is impossible to design a test case for any test requirements, briefly discuss why. 5. List the test requirements for Edge Coverage 6.Identify test paths that achieve the test requirements for Edge Coverage 7. Give a set of test cases for the test paths in f. Make sure to include test input values and expected outputs. If it is impossible to design a test case for any test requirements, briefly discuss why..