You are given a code snippet that constructs a call graph recursively. The call graph represents the dependencies between various functions. In the code, the `trace_calls` function is called recursively to build the call graph. The overall process involves assigning a rank to each function and constructing an adjacency list to represent the dependencies between functions.

Your task is to implement a function, `construct_call_graph`, that takes two parameters: `XML` (a string representing XML data) and `FUNCTION` (the name of a top-level function). Your function should return the call graph constructed by the code snippet.

A call graph is represented as a dictionary, where the keys are function names and the values are lists of function names that the key function calls (direct dependencies). The call graph should include all functions encountered during the recursive call to `trace_calls`.

For example, given the following code snippet:

```
FUNCS[$next_rank]=$func
rank[$func]=$next_rank
((next_rank++))
done

# Create adjacency list for $2 and also mark treated:
graph[$2]=${FUNCS[@]}

for func in ${FUNCS[@]}; do
    trace_calls $1 "${func}"
done
}

info "Constructing call graph recursively..."
trace_calls "${XML}" "${FUNCTION}"
```

and the function call `construct_call_graph(xml_data, "main")`, where `xml_data` is an XML string, your function should return a dictionary representing the call graph.

Note:
- The rank assigned to each function represents the call sequence. The rank starts at 1 and increments for each new function encountered.
- The `trace_calls` function takes two parameters: `XML` and a function name. It is responsible for calling itself recursively for each function encountered and adding the function names to the `FUNCS` array.
- The `graph` variable is a dictionary that contains the adjacency list for each function. It is constructed by assigning the `FUNCS` array as the value for the current function in the `graph` dictionary.
0982e39f-758c-4022-863c-7831af244eba
Вам предоставлен фрагмент кода, который рекурсивно строит график вызовов. График вызовов представляет зависимости между различными функциями. В коде функция `trace_calls` вызывается рекурсивно для построения графика вызовов. Общий процесс включает в себя присвоение ранга каждой функции и построение списка смежности для представления зависимостей между функциями.

Ваша задача - реализовать функцию `construct_call_graph`, которая принимает два параметра: `XML` (строка, представляющая данные XML) и `FUNCTION` (имя функции верхнего уровня). Ваша функция должна возвращать график вызовов, построенный с помощью фрагмента кода.

Граф вызовов представлен в виде словаря, где ключами являются имена функций, а значениями - списки имен функций, вызываемых ключевой функцией (прямые зависимости). Граф вызовов должен включать все функции, встречающиеся во время рекурсивного вызова `trace_calls`.

Например, приведен следующий фрагмент кода:

```bash
FUNCS[$next_rank]=$func
rank[$func]=$next_rank
((next_rank++))
done

# Create adjacency list for $2 and also mark treated:
graph[$2]=${FUNCS[@]}

for func in ${FUNCS[@]}; do
    trace_calls $1 "${func}"
done
}

info "Constructing call graph recursively..."
trace_calls "${XML}" "${FUNCTION}"
```

При вызове функции `construct_call_graph(xml_data, "main")`, где `xml_data` - это строка XML, ваша функция должна возвращать словарь, представляющий граф вызовов.

**Примечание**:

- Ранг, присвоенный каждой функции, представляет последовательность вызовов. Ранг начинается с 1 и увеличивается для каждой новой обнаруженной функции.
- Функция `trace_calls` принимает два параметра: `XML` и имя функции. Она отвечает за рекурсивный вызов самой себя для каждой обнаруженной функции и добавление имен функций в массив `FUNCS`.
- Переменная `graph` представляет собой словарь, содержащий список смежности для каждой функции. Она создается путем присвоения массива `FUNCS` в качестве значения для текущей функции в словаре `graph`.

submitted
Вам дается снайп кода, который рекурсивно создает график вызова. Граф вызова представляет собой зависимости между различными функциями: `XML` (струн, представляющий XML-данные) и `FUNCTION (название функции верхнего уровня). В целом процесс включает в себя присвоение ранга каждой функции и создание списка соседства, чтобы представлять зависимости между функциями. Ваша задача - реализовать функцию `construct_call_graph`, которая принимает два параметра: `XML` (струн, представляющий XML-данные) и `FUNCTION (название функции верхнего уровня). Ваша функция должна возвращать график вызова, созданный диаграммой. Граф вызова представляется как словарь, где клю
{"evolved_from": null, "kind": "synthetic", "source": "argilla/DistiCoder-dpo-binarized"}