| *** Settings *** | 
 | Documentation  This module contains keywords for list manipulation. | 
 | Library  Collections | 
 |  | 
 | *** Keywords *** | 
 | Smart Combine Lists | 
 |     [Documentation]  Combine all valid list arguments and return the result. | 
 |     [Arguments]  @{lists} | 
 |  | 
 |     # Description of argument(s): | 
 |     # lists  A list of lists to be combined.  Any item in this list which is | 
 |     #        NOT a list will be removed. | 
 |  | 
 |     ${list_size}=  Get Length  ${lists} | 
 |     ${index}=  Set Variable  ${0} | 
 |     : FOR  ${arg}  IN  @{lists} | 
 |     \    ${type_arg}=  Evaluate  str(type($lists[${index}])).split("'")[1] | 
 |     \    Run Keyword If  '${type_arg}' != 'list'  Run Keywords | 
 |     ...      Remove From List  ${lists}  ${index}  AND | 
 |     ...      Continue For Loop | 
 |     \    ${index}=  Evaluate  ${index}+1 | 
 |  | 
 |     ${new_list}=  Combine Lists  @{lists} | 
 |  | 
 |     [Return]  ${new_list} | 
 |  | 
 |  | 
 | Intersect Lists | 
 |     [Documentation]  Intersects the two lists passed in. Returns a list of | 
 |     ...  values common to both lists with no duplicates. | 
 |     [Arguments]  ${list1}  ${list2} | 
 |  | 
 |     # list1      The first list to intersect. | 
 |     # list2      The second list to intersect. | 
 |  | 
 |     ${length1}=  Get Length  ${list1} | 
 |     ${length2}=  Get Length  ${list2} | 
 |  | 
 |     @{intersected_list}  Create List | 
 |  | 
 |     @{larger_list}=  Set Variable If  ${length1} >= ${length2}  ${list1} | 
 |     ...                               ${length1} < ${length2}  ${list2} | 
 |     @{smaller_list}=  Set Variable If  ${length1} >= ${length2}  ${list2} | 
 |     ...                                ${length1} < ${length2}  ${list1} | 
 |  | 
 |     :FOR  ${element}  IN  @{larger_list} | 
 |     \  ${rc}=  Run Keyword and Return Status  List Should Contain Value | 
 |     ...  ${smaller_list}  ${element} | 
 |     \  Run Keyword If  '${rc}' == 'True'  Append to List  ${intersected_list} | 
 |     ...  ${element} | 
 |  | 
 |     @{intersected_list}=  Remove Duplicates  ${intersected_list} | 
 |  | 
 |     [Return]  @{intersected_list} | 
 |  | 
 |  | 
 | Subtract Lists | 
 |     [Documentation]  Subtract list 2 from list 1 and return the result. | 
 |     #  Return list contain items from the list 1 which are not present | 
 |     #  in the list 2. | 
 |     [Arguments]  ${list1}  ${list2} | 
 |     # Description of argument(s): | 
 |     # list1      The base list which is to be subtracted from. | 
 |     # list2      The list which is to be subtracted from list1. | 
 |  | 
 |     ${diff_list}=  Create List | 
 |     :FOR  ${item}  IN  @{list1} | 
 |     \  ${status}=  Run Keyword And Return Status | 
 |     ...  Should Contain  ${list2}  ${item} | 
 |     \  Run Keyword If  '${status}' == '${False}' | 
 |     ...  Append To List  ${diff_list}  ${item} | 
 |  | 
 |     [Return]  ${diff_list} |