From d8a5fe02b7ef57638a85acdefb6763654105d76a Mon Sep 17 00:00:00 2001 From: Zachary Date: Thu, 15 Aug 2024 20:18:10 +0000 Subject: [PATCH 1/2] small changes --- .devcontainer/devcontainer.json | 25 + .env.exemple | 10 +- .github/dependabot.yml | 23 +- README.md | 20 +- graphfleet/input/FromLouvaintoLeiden.txt | 1687 +++++++++++ graphfleet/input/Generative AI Real-World.txt | 1013 ------- graphfleet/input/GraphRAG.txt | 731 +++++ graphfleet/input/json/graphrag_scrape.json | 685 +++++ graphfleet/input/pdf/SELFCHECKGPT.pdf | Bin 0 -> 903117 bytes notebook/get-started-graphfleet.ipynb | 2622 +---------------- notebook/graph-visualization.ipynb | 972 ------ poetry.lock | 286 +- pyproject.toml | 12 + 13 files changed, 3463 insertions(+), 4623 deletions(-) create mode 100644 .devcontainer/devcontainer.json create mode 100644 graphfleet/input/FromLouvaintoLeiden.txt delete mode 100644 graphfleet/input/Generative AI Real-World.txt create mode 100644 graphfleet/input/GraphRAG.txt create mode 100644 graphfleet/input/json/graphrag_scrape.json create mode 100644 graphfleet/input/pdf/SELFCHECKGPT.pdf delete mode 100644 notebook/graph-visualization.ipynb diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 000000000..e0a48c232 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,25 @@ +// For format details, see https://aka.ms/devcontainer.json. For config options, see the +// README at: https://github.com/devcontainers/templates/tree/main/src/python +{ + "name": "Python 3", + // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile + "image": "mcr.microsoft.com/devcontainers/python:1-3.10-bookworm", + "features": { + "ghcr.io/devcontainers-contrib/features/poetry:2": {} + } + + // Features to add to the dev container. More info: https://containers.dev/features. + // "features": {}, + + // Use 'forwardPorts' to make a list of ports inside the container available locally. + // "forwardPorts": [], + + // Use 'postCreateCommand' to run commands after the container is created. + // "postCreateCommand": "pip3 install --user -r requirements.txt", + + // Configure tool-specific properties. + // "customizations": {}, + + // Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root. + // "remoteUser": "root" +} diff --git a/.env.exemple b/.env.exemple index 1dd3b487a..78d00cf17 100644 --- a/.env.exemple +++ b/.env.exemple @@ -1,6 +1,6 @@ -GRAPHRAG_API_KEY="your api key" -GRAPHRAG_API_BASE="base_url" #optionnal , needed if using custom endpoint -GRAPHRAG_API_VERSION="2023-05-13" -GRAPHRAG_LLM_MODEL="gpt-4o" -GRAPHRAG_DEPLOYMENT_NAME="gpt-4o" +GRAPHRAG_API_KEY="fd7763c639184c20962857cacacd1a38" +GRAPHRAG_API_BASE="https://gpt-4o-fr.openai.azure.com" #optionnal , needed if using custom endpoint +GRAPHRAG_API_VERSION="turbo-2024-04-09" +GRAPHRAG_LLM_MODEL="gpt-4" +GRAPHRAG_DEPLOYMENT_NAME="gpt-4" GRAPHRAG_EMBEDDING_MODEL="text-embedding-ada-002" \ No newline at end of file diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 6c3c207c2..f33a02cd1 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,19 +1,12 @@ # To get started with Dependabot version updates, you'll need to specify which # package ecosystems to update and where the package manifests are located. -# Please see the documentation for all configuration options: -# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file +# Please see the documentation for more information: +# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates +# https://containers.dev/guide/dependabot + version: 2 updates: - - package-ecosystem: "npm" # See documentation for possible values - directory: "docsite/" # Location of package manifests - schedule: - interval: "weekly" - - package-ecosystem: "pip" # See documentation for possible values - directory: "/" # Location of package manifests - schedule: - interval: "weekly" - - package-ecosystem: "github-actions" - # Workflow files stored in the default location of `.github/workflows`. (You don't need to specify `/.github/workflows` for `directory`. You can use `directory: "/"`.) - directory: "/" - schedule: - interval: "weekly" \ No newline at end of file + - package-ecosystem: "devcontainers" + directory: "/" + schedule: + interval: weekly diff --git a/README.md b/README.md index 20e7bda42..ee56711cc 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,24 @@ # Overview
- PyPI - Downloads + Pepy Total Downlods + GitHub License GitHub forks + GitHub Repo stars + X (formerly Twitter) Follow + Discord + + +
![image](https://github.com/user-attachments/assets/c3ca5ec8-1bbf-4a9c-988e-e7f5100ea5d5) - +X (formerly Twitter) Follow + Discord GraphFleet is an advanced implementation of [GraphRAG from Microsoft](https://github.com/microsoft/graphrag), designed to enhance large language models' ability to reason about complex information and private datasets. It builds upon GraphRAG (Retrieval Augmented Generation using Graph structures) and will gradually adopt its own path to fulfill our roadmap at Qredence. ## GraphFleet @@ -78,10 +86,10 @@ GraphFleet uses knowledge graphs to provide substantial improvements in question Environment Variables: Set up your environment variables in a .env file (refer to the .env.example file for available options). Key variables include: ```sh - export GRAPHRAG_API_KEY="" - export GRAPHRAG_API_BASE="custom base api url" - export GRAPHRAG_API_VERSION="version (if not OpenAI)" - export GRAPHRAG_LLM_MODEL="model name" + export GRAPHRAG_API_KEY="fd7763c639184c20962857cacacd1a38" + export GRAPHRAG_API_BASE="https://gpt-4o-fr.openai.azure.com" + export GRAPHRAG_API_VERSION="2024-04-01-preview" + export GRAPHRAG_LLM_MODEL="gpt-4" export GRAPHRAG_DEPLOYMENT_NAME="model name" export GRAPHRAG_EMBEDDING_MODEL="embedding model" ``` diff --git a/graphfleet/input/FromLouvaintoLeiden.txt b/graphfleet/input/FromLouvaintoLeiden.txt new file mode 100644 index 000000000..00859a26e --- /dev/null +++ b/graphfleet/input/FromLouvaintoLeiden.txt @@ -0,0 +1,1687 @@ +From Louvain to Leiden: guaranteeing well-connected communities +V.A. Traag,∗L. Waltman, and N.J. van Eck +Centre for Science and Technology Studies, Leiden University, the Netherlands +(Dated: October 31, 2019) +Community detection is often used to understand the structure of large and complex networks. +One of the most popular algorithms for uncovering community structure is the so-called Louvain +algorithm. We show that this algorithm has a major defect that largely went unnoticed until +now: the Louvain algorithm may yield arbitrarily badly connected communities. In the worst case, +communities may even be disconnected, especially when running the algorithm iteratively. In our +experimental analysis, we observe that up to 25%of the communities are badly connected and up +to16%are disconnected. To address this problem, we introduce the Leiden algorithm. We prove +that the Leiden algorithm yields communities that are guaranteed to be connected. In addition, we +prove that, when the Leiden algorithm is applied iteratively, it converges to a partition in which all +subsets of all communities are locally optimally assigned. Furthermore, by relying on a fast local +move approach, the Leiden algorithm runs faster than the Louvain algorithm. We demonstrate +the performance of the Leiden algorithm for several benchmark and real-world networks. We find +that the Leiden algorithm is faster than the Louvain algorithm and uncovers better partitions, in +addition to providing explicit guarantees. +I. INTRODUCTION +In many complex networks, nodes cluster and form rel- +atively dense groups—often called communities [1, 2]. +Such a modular structure is usually not known before- +hand. Detecting communities in a network is therefore +an important problem. One of the best-known methods +for community detection is called modularity [3]. This +method tries to maximise the difference between the ac- +tual number of edges in a community and the expected +number of such edges. We denote by ecthe actual num- +ber of edges in community c. The expected number of +edges can be expressed asK2 +c +2m, whereKcis the sum of the +degrees of the nodes in community candmis the total +number of edges in the network. This way of defining +the expected number of edges is based on the so-called +configuration model. Modularity is given by +H=1 +2m/summationdisplay +c/parenleftbigg +ec−γK2 +c +2m/parenrightbigg +, (1) +whereγ >0is a resolution parameter [4]. Higher resolu- +tions lead to more communities, while lower resolutions +lead to fewer communities. +Optimising modularity is NP-hard [5], and consequen- +tially many heuristic algorithms have been proposed, +such as hierarchical agglomeration [6], extremal optimi- +sation [7], simulated annealing [4, 8] and spectral [9] al- +gorithms. One of the most popular algorithms to opti- +mise modularity is the so-called Louvain algorithm [10], +named after the location of its authors. It was found to +be one of the fastest and best performing algorithms in +comparative analyses [11, 12], and it is one of the most- +cited works in the community detection literature. +∗v.a.traag@cwts.leidenuniv.nlAlthough originally defined for modularity, the Lou- +vain algorithm can also be used to optimise other quality +functions. An alternative quality function is the Con- +stant Potts Model (CPM) [13], which overcomes some +limitations of modularity. CPM is defined as +H=/summationdisplay +c/bracketleftbigg +ec−γ/parenleftbiggnc +2/parenrightbigg/bracketrightbigg +, (2) +wherencis the number of nodes in community c. The +interpretation of the resolution parameter γis quite +straightforward. The parameter functions as a sort of +threshold: communities should have a density of at least +γ,whilethedensitybetweencommunitiesshouldbelower +thanγ. Higher resolutions lead to more communities and +lower resolutions lead to fewer communities, similarly to +the resolution parameter for modularity. +In this paper, we show that the Louvain algorithm has +a major problem, for both modularity and CPM. The +algorithm may yield arbitrarily badly connected commu- +nities, over and above the well-known issue of the reso- +lution limit [14] (Section IIA). Communities may even +be internally disconnected. To address this important +shortcoming, we introduce a new algorithm that is faster, +finds better partitions and provides explicit guarantees +and bounds (Section III). The new algorithm integrates +several earlier improvements, incorporating a combina- +tion of smart local move [15], fast local move [16, 17] and +random neighbour move [18]. We prove that the new +algorithm is guaranteed to produce partitions in which +all communities are internally connected. In addition, +we prove that the algorithm converges to an asymptot- +ically stable partition in which all subsets of all com- +munities are locally optimally assigned. The quality of +such an asymptotically stable partition provides an up- +per bound on the quality of an optimal partition. Fi- +nally, we demonstrate the excellent performance of the +algorithm for several benchmark and real-world networks +(Section IV). To ensure readability of the paper to thearXiv:1810.08473v3 [cs.SI] 30 Oct 20192 +a) b) +c) d)Move nodes +Aggregate +Move nodesLevel 1 +Level 2 +FIG. 1.Louvain algorithm . The Louvain algorithm starts +from a singleton partition in which each node is in its own +community (a). The algorithm moves individual nodes from +one community to another to find a partition (b). Based on +this partition, an aggregate network is created (c). The algo- +rithm then moves individual nodes in the aggregate network +(d). These steps are repeated until the quality cannot be +increased further. +broadest possible audience, we have chosen to relegate +all technical details to appendices. The main ideas of our +algorithm are explained in an intuitive way in the main +text of the paper. We name our algorithm the Leiden +algorithm , after the location of its authors. +II. LOUVAIN ALGORITHM +The Louvain algorithm [10] is very simple and elegant. +Thealgorithmoptimisesaqualityfunctionsuchasmodu- +larityorCPMintwoelementaryphases: (1)localmoving +of nodes; and (2) aggregation of the network. In the local +movingphase, individualnodesaremovedtothecommu- +nity that yields the largest increase in the quality func- +tion. In the aggregation phase, an aggregate network is +created based on the partition obtained in the local mov- +ing phase. Each community in this partition becomes +a node in the aggregate network. The two phases are +repeated until the quality function cannot be increased +further. The Louvain algorithm is illustrated in Fig. 1 +and summarised in pseudo-code in Algorithm A.1 in Ap- +pendix A. +Usually, the Louvain algorithm starts from a singleton +partition, in which each node is in its own community. +a) b) +012 +3 +45 +6 +Rest of network012 +3 +45 +6 +Rest of networkFIG. 2.Disconnected community. Consider the partition +shownin(a). Whennode0ismovedtoadifferentcommunity, +theredcommunitybecomesinternallydisconnected, asshown +in(b). However, nodes1–6arestilllocallyoptimallyassigned, +and therefore these nodes will stay in the red community. +However, it is also possible to start the algorithm from +a different partition [15]. In particular, in an attempt +to find better partitions, multiple consecutive iterations +of the algorithm can be performed, using the partition +identified in one iteration as starting point for the next +iteration. +A. Badly connected communities +We now show that the Louvain algorithm may find +arbitrarily badly connected communities. In particular, +we show that Louvain may identify communities that +are internally disconnected. That is, one part of such +an internally disconnected community can reach another +part only through a path going outside the community. +Importantly, the problem of disconnected communities +is not just a theoretical curiosity. As we will demon- +strate in Section IV, the problem occurs frequently in +practice when using the Louvain algorithm. Perhaps sur- +prisingly, iterating the algorithm aggravates the problem, +even though it does increase the quality function. +In the Louvain algorithm, a node may be moved to a +different community while it may have acted as a bridge +between different components of its old community. Re- +moving such a node from its old community disconnects +the old community. One may expect that other nodes in +the old community will then also be moved to other com- +munities. However, this is not necessarily the case, as the +other nodes may still be sufficiently strongly connected +to their community, despite the fact that the community +has become disconnected. +To elucidate the problem, we consider the example il- +lustrated in Fig. 2. The numerical details of the example +can be found in Appendix B. The thick edges in Fig. 2 +representstrongerconnections, whiletheotheredgesrep- +resent weaker connections. At some point, the Louvain +algorithm may end up in the community structure shown3 +in Fig. 2(a). Nodes 0–6 are in the same community. +Nodes 1–6 have connections only within this community, +whereas node 0 also has many external connections. The +algorithm continues to move nodes in the rest of the net- +work. At some point, node 0 is considered for moving. +When a sufficient number of neighbours of node 0 have +formed a community in the rest of the network, it may +be optimal to move node 0 to this community, thus cre- +ating the situation depicted in Fig. 2(b). In this new +situation, nodes 2, 3, 5 and 6 have only internal connec- +tions. These nodes are therefore optimally assigned to +their current community. On the other hand, after node +0 has been moved to a different community, nodes 1 and +4 have not only internal but also external connections. +Nevertheless, depending on the relative strengths of the +different connections, these nodes may still be optimally +assigned to their current community. In that case, nodes +1–6 are all locally optimally assigned, despite the fact +that their community has become disconnected. Clearly, +it would be better to split up the community. Nodes 1–3 +should form a community and nodes 4–6 should form an- +other community. However, the Louvain algorithm does +not consider this possibility, since it considers only indi- +vidual node movements. Moreover, when no more nodes +can be moved, the algorithm will aggregate the network. +When a disconnected community has become a node in +an aggregate network, there are no more possibilities to +split up the community. Hence, the community remains +disconnected, unless it is merged with another commu- +nity that happens to act as a bridge. +Obviously, this is a worst case example, showing that +disconnected communities may be identified by the Lou- +vain algorithm. More subtle problems may occur as well, +causing Louvain to find communities that are connected, +but only in a very weak sense. Hence, in general, Louvain +may find arbitrarily badly connected communities. +This problem is different from the well-known issue +of the resolution limit of modularity [14]. Due to the +resolution limit, modularity may cause smaller commu- +nities to be clustered into larger communities. In other +words, modularity may “hide” smaller communities and +may yield communities containing significant substruc- +ture. CPM does not suffer from this issue [13]. Never- +theless, when CPM is used as the quality function, the +Louvain algorithm may still find arbitrarily badly con- +nected communities. Hence, the problem of Louvain out- +linedaboveisindependentfromtheissueoftheresolution +limit. In the case of modularity, communities may have +significant substructure both because of the resolution +limit and because of the shortcomings of Louvain. +In fact, although it may seem that the Louvain al- +gorithm does a good job at finding high quality parti- +tions, in its standard form the algorithm provides only +one guarantee: the algorithm yields partitions for which +it is guaranteed that no communities can be merged. In +other words, communities are guaranteed to be well sep- +arated. Somewhat stronger guarantees can be obtained +by iterating the algorithm, using the partition obtainedin one iteration of the algorithm as starting point for the +next iteration. When iterating Louvain, the quality of +the partitions will keep increasing until the algorithm is +unable to make any further improvements. At this point, +it is guaranteed that each individual node is optimally +assigned. In this iterative scheme, Louvain provides two +guarantees: (1) no communities can be merged and (2) +no nodes can be moved. +Contrary to what might be expected, iterating the +Louvain algorithm aggravates the problem of badly con- +nected communities, as we will also see in Section IV. +This is not too difficult to explain. After the first itera- +tion of the Louvain algorithm, some partition has been +obtained. In the first step of the next iteration, Louvain +will again move individual nodes in the network. Some +of these nodes may very well act as bridges, similarly to +node 0in the above example. By moving these nodes, +Louvain creates badly connected communities. More- +over, Louvain has no mechanism for fixing these commu- +nities. Iterating the Louvain algorithm can therefore be +seen as a double-edged sword: it improves the partition +in some way, but degrades it in another way. +The problem of disconnected communities has been +observed before in the context of the label propagation +algorithm [19]. However, so far this problem has never +been studied for the Louvain algorithm. Moreover, the +deeper significance of the problem was not recognised: +disconnected communities are merely the most extreme +manifestation of the problem of arbitrarily badly con- +nected communities. Trying to fix the problem by sim- +ply considering the connected components of communi- +ties[19–21]isunsatisfactorybecauseitaddressesonlythe +most extreme case and does not resolve the more funda- +mental problem. We therefore require a more principled +solution, which we will introduce in the next section. +III. LEIDEN ALGORITHM +We here introduce the Leiden algorithm, which guaran- +tees that communities are well connected. The Leiden +algorithm is partly based on the previously introduced +smart local move algorithm [15], which itself can be seen +as an improvement of the Louvain algorithm. The Lei- +den algorithm also takes advantage of the idea of speed- +ing up the local moving of nodes [16, 17] and the idea of +moving nodes to random neighbours [18]. We consider +these ideas to represent the most promising directions +in which the Louvain algorithm can be improved, even +though we recognise that other improvements have been +suggested as well [22]. The Leiden algorithm consists of +three phases: (1) local moving of nodes, (2) refinement of +the partition and (3) aggregation of the network based on +the refined partition, using the non-refined partition to +create an initial partition for the aggregate network. The +Leiden algorithm is considerably more complex than the +Louvain algorithm. Fig. 3 provides an illustration of the +algorithm. The algorithm is described in pseudo-code in4 +a) b) c) +d) e) f)Move nodes Refine +Aggregate +Move nodes RefineLevel 1 +Level 2 +FIG. 3.Leiden algorithm . The Leiden algorithm starts from a singleton partition (a). The algorithm moves individual nodes +from one community to another to find a partition (b), which is then refined (c). An aggregate network (d) is created based +on the refined partition, using the non-refined partition to create an initial partition for the aggregate network. For example, +the red community in (b) is refined into two subcommunities in (c), which after aggregation become two separate nodes in (d), +both belonging to the same community. The algorithm then moves individual nodes in the aggregate network (e). In this case, +refinement does not change the partition (f). These steps are repeated until no further improvements can be made. +Algorithm A.2 in Appendix A. +In the Louvain algorithm, an aggregate network is cre- +ated based on the partition Presulting from the local +moving phase. The idea of the refinement phase in the +Leiden algorithm is to identify a partition Prefinedthat +is a refinement of P. Communities in Pmay be split +into multiple subcommunities in Prefined. The aggregate +network is created based on the partition Prefined. How- +ever, the initial partition for the aggregate network is +based on P, just like in the Louvain algorithm. By cre- +ating the aggregate network based on Prefinedrather than +P, the Leiden algorithm has more room for identifying +high-quality partitions. In fact, by implementing the re- +finement phase in the right way, several attractive guar- +antees can be given for partitions produced by the Leidenalgorithm. +The refined partition Prefinedis obtained as follows. +Initially, Prefinedis set to a singleton partition, in which +each node is in its own community. The algorithm then +locally merges nodes in Prefined: nodes that are on their +own in a community in Prefinedcan be merged with a dif- +ferent community. Importantly, mergers are performed +only within each community of the partition P. In ad- +dition, a node is merged with a community in Prefined +only if both are sufficiently well connected to their com- +munity in P. After the refinement phase is concluded, +communities in Poften will have been split into multiple +communities in Prefined, but not always. +In the refinement phase, nodes are not necessarily +greedily merged with the community that yields the5 +largest increase in the quality function. Instead, a node +maybemergedwithanycommunityforwhichthequality +function increases. The community with which a node is +merged is selected randomly (similar to [18]). The larger +the increase in the quality function, the more likely a +community is to be selected. The degree of randomness +intheselectionofacommunityisdeterminedbyaparam- +eterθ>0. Randomness in the selection of a community +allows the partition space to be explored more broadly. +Node mergers that cause the quality function to decrease +are not considered. This contrasts with optimisation al- +gorithms such as simulated annealing, which do allow the +quality function to decrease [4, 8]. Such algorithms are +rather slow, making them ineffective for large networks. +Excluding node mergers that decrease the quality func- +tion makes the refinement phase more efficient. As we +prove in Appendix C1, even when node mergers that +decrease the quality function are excluded, the optimal +partition of a set of nodes can still be uncovered. This +is not the case when nodes are greedily merged with the +community that yields the largest increase in the quality +function. In that case, some optimal partitions cannot +be found, as we show in Appendix C2. +Another important difference between the Leiden al- +gorithm and the Louvain algorithm is the implementa- +tion of the local moving phase. Unlike the Louvain algo- +rithm, the Leiden algorithm uses a fast local move pro- +cedure in this phase. Louvain keeps visiting all nodes +in a network until there are no more node movements +that increase the quality function. In doing so, Louvain +keeps visiting nodes that cannot be moved to a differ- +ent community. In the fast local move procedure in the +Leiden algorithm, only nodes whose neighbourhood has +changed are visited. This is similar to ideas proposed re- +cently as “pruning” [16] and in a slightly different form +as “prioritisation” [17]. The fast local move procedure +can be summarised as follows. We start by initialising +a queue with all nodes in the network. The nodes are +added to the queue in a random order. We then remove +the first node from the front of the queue and we deter- +mine whether the quality function can be increased by +moving this node from its current community to a differ- +ent one. If we move the node to a different community, +we add to the rear of the queue all neighbours of the +node that do not belong to the node’s new community +and that are not yet in the queue. We keep removing +nodes from the front of the queue, possibly moving these +nodes to a different community. This continues until the +queue is empty. For a full specification of the fast local +move procedure, we refer to the pseudo-code of the Lei- +den algorithm in Algorithm A.2 in Appendix A. Using +the fast local move procedure, the first visit to all nodes +in a network in the Leiden algorithm is the same as in +the Louvain algorithm. However, after all nodes have +been visited once, Leiden visits only nodes whose neigh- +bourhood has changed, whereas Louvain keeps visiting +all nodes in the network. In this way, Leiden implements +the local moving phase more efficiently than Louvain.TABLE I. Overview of the guarantees provided by the Lou- +vain algorithm and the Leiden algorithm. +Louvain Leiden +Each +iterationγ-separation 3 3 +γ-connectivity 3 +Stable +iterationNode optimality 3 3 +Subpartition γ-density 3 +AsymptoticUniformγ-density 3 +Subset optimality 3 +A. Guarantees +We now consider the guarantees provided by the Lei- +den algorithm. The algorithm is run iteratively, using +the partition identified in one iteration as starting point +for the next iteration. We can guarantee a number of +properties of the partitions found by the Leiden algo- +rithm at various stages of the iterative process. Below +we offer an intuitive explanation of these properties. We +provide the full definitions of the properties as well as the +mathematical proofs in Appendix D. +After each iteration of the Leiden algorithm, it is guar- +anteed that: +1. All communities are γ-separated. +2. All communities are γ-connected. +In these properties, γrefers to the resolution parameter +in the quality function that is optimised, which can be +either modularity or CPM. The property of γ-separation +is also guaranteed by the Louvain algorithm. It states +that there are no communities that can be merged. The +property of γ-connectivity is a slightly stronger variant +of ordinary connectivity. As discussed in Section IIA, +the Louvain algorithm does not guarantee connectivity. +It therefore does not guarantee γ-connectivity either. +An iteration of the Leiden algorithm in which the par- +tition does not change is called a stable iteration. After a +stable iteration of the Leiden algorithm, it is guaranteed +that: +3. All nodes are locally optimally assigned. +4. All communities are subpartition γ-dense. +Node optimality is also guaranteed after a stable itera- +tion of the Louvain algorithm. It means that there are no +individual nodes that can be moved to a different com- +munity. Subpartition γ-density is not guaranteed by the +Louvain algorithm. A community is subpartition γ-dense +if it can be partitioned into two parts such that: (1) the +two parts are well connected to each other; (2) neither +part can be separated from its community; and (3) each +part is also subpartition γ-dense itself. Subpartition γ- +density does not imply that individual nodes are locally +optimally assigned. It only implies that individual nodes +are well connected to their community.6 +TABLE II. Overview of the empirical networks and of the +maximalmodularityafter 10replicationsof 10iterationseach, +both for the Louvain and for the Leiden algorithm. +Max. modularity +Nodes Degree Louvain Leiden +DBLPa317 080 6 .6 0.8262 0.8387 +Amazona334 863 5 .6 0.9301 0.9341 +IMDBb374 511 80 .2 0.7062 0.7069 +Live Journala3 997 962 17 .4 0.7653 0.7739 +Web of Sciencec9 811 130 21 .2 0.7911 0.7951 +Web UKd39 252 879 39 .8 0.9796 0.9801 +ahttps://snap.stanford.edu/data/ +bhttps://sparse.tamu.edu/Barabasi/NotreDame_actors +cData cannot be shared due to license restrictions. +dhttp://law.di.unimi.it/webdata/uk-2005/ +In the case of the Louvain algorithm, after a stable it- +eration, all subsequent iterations will be stable as well. +Hence, no further improvements can be made after a sta- +ble iteration of the Louvain algorithm. This contrasts +with the Leiden algorithm. After a stable iteration of +the Leiden algorithm, the algorithm may still be able to +make further improvements in later iterations. In fact, +when we keep iterating the Leiden algorithm, it will con- +verge to a partition for which it is guaranteed that: +5. All communities are uniformly γ-dense. +6. All communities are subset optimal. +A community is uniformly γ-dense if there are no subsets +of the community that can be separated from the com- +munity. Uniform γ-density means that no matter how a +community is partitioned into two parts, the two parts +willalwaysbewellconnectedtoeachother. Furthermore, +if all communities in a partition are uniformly γ-dense, +the quality of the partition is not too far from optimal, +as shown in Appendix E. A community is subset optimal +if all subsets of the community are locally optimally as- +signed. That is, no subset can be moved to a different +community. Subset optimality is the strongest guarantee +that is provided by the Leiden algorithm. It implies uni- +formγ-density and all the other above-mentioned prop- +erties. +An overview of the various guarantees is presented in +Table I. +IV. EXPERIMENTAL ANALYSIS +In the previous section, we showed that the Leiden +algorithm guarantees a number of properties of the par- +titions uncovered at different stages of the algorithm. We +also suggested that the Leiden algorithm is faster than +the Louvain algorithm, because of the fast local move +approach. In this section, we analyse and compare theperformance of the two algorithms in practice1. All ex- +periments were run on a computer with 64 Intel Xeon +E5-4667v3 2GHz CPUs and 1TB internal memory. In all +experiments reported here, we used a value of 0.01for the +parameterθthat determines the degree of randomness in +the refinement phase of the Leiden algorithm. However, +values ofθwithin a range of roughly [0.0005,0.1]all pro- +vide reasonable results, thus allowing for some, but not +too much randomness. We use six empirical networks +in our analysis. These are the same networks that were +also studied in an earlier paper introducing the smart lo- +cal move algorithm [15]. Table II provides an overview of +the six networks. First, we show that the Louvain algo- +rithm finds disconnected communities, and more gener- +ally, badly connected communities in the empirical net- +works. Second, to study the scaling of the Louvain and +the Leiden algorithm, we use benchmark networks, al- +lowing us to compare the algorithms in terms of both +computational time and quality of the partitions. Fi- +nally, we compare the performance of the algorithms on +the empirical networks. We find that the Leiden algo- +rithm commonly finds partitions of higher quality in less +time. The difference in computational time is especially +pronounced for larger networks, with Leiden being up to +20times faster than Louvain in empirical networks. +A. Badly connected communities +We study the problem of badly connected communi- +ties when using the Louvain algorithm for several empir- +ical networks. For each community in a partition that +was uncovered by the Louvain algorithm, we determined +whether it is internally connected or not. In addition, +to analyse whether a community is badly connected, we +ran the Leiden algorithm on the subnetwork consisting of +all nodes belonging to the community.2The Leiden al- +gorithm was run until a stable iteration was obtained. +When the Leiden algorithm found that a community +could be split into multiple subcommunities, we counted +the community as badly connected. Note that if Lei- +den finds subcommunities, splitting up the community is +guaranteed to increase modularity. Conversely, if Leiden +does not find subcommunities, there is no guarantee that +modularity cannot be increased by splitting up the com- +munity. Hence, by counting the number of communities +thathavebeensplitup, weobtainedalowerboundonthe +number of communities that are badly connected. The +1We implemented both algorithms in Java, available from +github.com/CWTSLeiden/networkanalysis and deposited at +Zenodo [23]. Additionally, we implemented a Python pack- +age, available from github.com/vtraag/leidenalg and deposited +at Zenodo [24]. +2We ensured that modularity optimisation for the subnetwork +was fully consistent with modularity optimisation for the whole +network [13].7 +051015202530DBLP Amazon +05IMDB Live Journal +1 2 3 40510152025Web of Science +1 2 3 4Web UK (2005)Disconnected (Louvain) Badly connected (Louvain) +Badly connected (Leiden)% communities +Iterations +FIG. 4. Badly connected communities . Percentage of +communities found by the Louvain algorithm that are either +disconnected or badly connected compared to percentage of +badly connected communities found by the Leiden algorithm. +Note that communities found by the Leiden algorithm are +guaranteed to be connected. +count of badly connected communities also included dis- +connected communities. For each network, we repeated +the experiment 10times. We used modularity with a +resolution parameter of γ= 1for the experiments. +As can be seen in Fig. 4, in the first iteration of the +Louvain algorithm, the percentage of badly connected +communities can be quite high. For the Amazon, DBLP +and Web UK networks, Louvain yields on average respec- +tively 23%,16%and14%badly connected communities. +The percentage of disconnected communities is more lim- +ited, usually around 1%. However, in the case of the Web +of Science network, more than 5%of the communities are +disconnected in the first iteration. +Later iterations of the Louvain algorithm only ag- +gravate the problem of disconnected communities, even +though the quality function (i.e. modularity) increases. +The second iteration of Louvain shows a large increase +in the percentage of disconnected communities. In sub- +sequent iterations, the percentage of disconnected com- +munities remains fairly stable. The increase in the per- +centage of disconnected communities is relatively limited +for the Live Journal and Web of Science networks. Other +networks show an almost tenfold increase in the percent- +age of disconnected communities. The percentage of dis- +connected communities even jumps to 16%for the DBLP +network. The percentage of badly connected communi- +ties is less affected by the number of iterations of the +Louvain algorithm. Presumably, many of the badly con- +nected communities in the first iteration of Louvain be-come disconnected in the second iteration. Indeed, the +percentage of disconnected communities becomes more +comparable to the percentage of badly connected com- +munities in later iterations. Nonetheless, some networks +still show large differences. For example, after four itera- +tions, the Web UK network has 8%disconnected commu- +nities, but twice as many badly connected communities. +Even worse, the Amazon network has 5%disconnected +communities, but 25%badly connected communities. +The above results shows that the problem of discon- +nected and badly connected communities is quite per- +vasive in practice. Because the percentage of discon- +nected communities in the first iteration of the Louvain +algorithm usually seems to be relatively low, the prob- +lem may have escaped attention from users of the algo- +rithm. However, focussing only on disconnected commu- +nities masks the more fundamental issue: Louvain finds +arbitrarily badly connected communities. The high per- +centage of badly connected communities attests to this. +Besides being pervasive, the problem is also sizeable. In +the worst case, almost a quarter of the communities are +badly connected. This may have serious consequences +for analyses based on the resulting partitions. For exam- +ple, nodes in a community in biological or neurological +networks are often assumed to share similar functions or +behaviour [25]. However, if communities are badly con- +nected, this may lead to incorrect attributions of shared +functionality. Similarly, in citation networks, such as the +Web of Science network, nodes in a community are usu- +ally considered to share a common topic [26, 27]. Again, +if communities are badly connected, this may lead to in- +correct inferences of topics, which will affect bibliomet- +ric analyses relying on the inferred topics. In short, the +problem of badly connected communities has important +practical consequences. +The Leiden algorithm has been specifically designed +to address the problem of badly connected communities. +Fig. 4 shows how well it does compared to the Louvain +algorithm. The Leiden algorithm guarantees all commu- +nities to be connected, but it may yield badly connected +communities. In terms of the percentage of badly con- +nectedcommunitiesinthefirstiteration,Leidenperforms +even worse than Louvain, as can be seen in Fig. 4. Cru- +cially, however, the percentage of badly connected com- +munities decreases with each iteration of the Leiden al- +gorithm. Starting from the second iteration, Leiden out- +performed Louvain in terms of the percentage of badly +connected communities. In fact, if we keep iterating the +Leiden algorithm, it will converge to a partition with- +out any badly connected communities, as discussed in +Section III. Hence, the Leiden algorithm effectively ad- +dresses the problem of badly connected communities. +B. Benchmark networks +To study the scaling of the Louvain and the Leiden al- +gorithm, we rely on a variant of a well-known approach8 +0.740.760.780.8µ= 0.2 +0.540.560.580.6µ= 0.4 +0.340.360.380.4µ= 0.6 +0.220.240.26µ= 0.8 +10310510710−1101103 +10310510710−1101103 +10310510710−1101103 +10310510710−1102105Louvain Leiden +NodesQuality Time (s) +FIG. 5. Scaling of benchmark results for network size . Speed and quality of the Louvain and the Leiden algorithm +for benchmark networks of increasing size (two iterations). For larger networks and higher values of µ, Louvain is much slower +than Leiden. For higher values of µ, Leiden finds better partitions than Louvain. +204060801000.797250.79730.797350.7974µ= 0.2 +4060801001200.5950.5960.597µ= 0.4 +100 200 3000.320.340.360.380.4µ= 0.6 +1021030.2020.2040.2060.2080.21µ= 0.8 +500 1,0000.800260.800280.80030.800320.80034 +500 1,000 1,5000.5990.59950.60.6005 +1,000 2,000 3,000 4,0000.320.340.360.380.4 +1031040.2040.2060.208Louvain Leiden +Time (s)Qualityn= 106n= 107 +FIG. 6.Runtime versus quality for benchmark networks . Speed and quality for the first 10iterations of the Louvain +and the Leiden algorithm for benchmark networks ( n= 106andn= 107). The horizontal axis indicates the cumulative time +taken to obtain the quality indicated on the vertical axis. Each point corresponds to a certain iteration of an algorithm, with +results averaged over 10experiments. In general, Leiden is both faster than Louvain and finds better partitions. +for constructing benchmark networks [28]. We generated +benchmark networks in the following way. First, we cre- +ated a specified number of nodes and we assigned each +node to a community. Communities were all of equal +size. A community size of 50nodes was used for the re- +sultspresentedbelow, butlargercommunitysizesyielded +qualitatively similar results. We then created a certain +number of edges such that a specified average degree /angbracketleftk/angbracketright +wasobtained. Fortheresultsreportedbelow, theaverage +degree was set to /angbracketleftk/angbracketright= 10. Edges were created in such +a way that an edge fell between two communities with aprobability µand within a community with a probability +1−µ. We applied the Louvain and the Leiden algorithm +to exactly the same networks, using the same seed for +the random number generator. For both algorithms, 10 +iterations were performed. We used the CPM quality +function. The value of the resolution parameter was de- +termined based on the so-called mixing parameter µ[13]. +We generated networks with n= 103ton= 107nodes. +For each set of parameters, we repeated the experiment +10times. Below, the quality of a partition is reported as +H +2m, where His defined in Eq. (2) and mis the number9 +0.2 0.4 0.6 0.8102103104105Louvain +Leiden +µTime (s) +FIG. 7.Scaling of benchmark results for difficulty of +the partition . Speed of the first iteration of the Louvain +and the Leiden algorithm for benchmark networks with in- +creasingly difficult partitions ( n= 107). In the most difficult +case (µ= 0.9), Louvain requires almost 2.5days, while Leiden +needs fewer than 10minutes. +of edges. +As shown in Fig. 5, for lower values of µthe partition +is well defined, and neither the Louvain nor the Leiden +algorithm has a problem in determining the correct par- +tition in only two iterations. Hence, for lower values of +µ, the difference in quality is negligible. However, as µ +increases, the Leiden algorithm starts to outperform the +Louvain algorithm. The differences are not very large, +which is probably because both algorithms find parti- +tions for which the quality is close to optimal, related to +the issue of the degeneracy of quality functions [29]. +TheLeidenalgorithmisclearlyfasterthantheLouvain +algorithm. For lower values of µ, the correct partition +is easy to find and Leiden is only about twice as fast as +Louvain. However, forhighervaluesof µ, Leidenbecomes +ordersofmagnitudefasterthanLouvain, reaching 10–100 +times faster runtimes for the largest networks. As can be +seen in Fig. 7, whereas Louvain becomes much slower for +more difficult partitions, Leiden is much less affected by +the difficulty of the partition. +Fig. 6 presents total runtime versus quality for all iter- +ations of the Louvain and the Leiden algorithm. As can +be seen in the figure, Louvain quickly reaches a state in +which it is unable to find better partitions. On the other +hand, Leiden keeps finding better partitions, especially +for higher values of µ, for which it is more difficult to +identify good partitions. A number of iterations of the +Leiden algorithm can be performed before the Louvain +algorithm has finished its first iteration. Later iterations +of the Louvain algorithm are very fast, but this is only +because the partition remains the same. With one ex- +ception (µ= 0.2andn= 107), all results in Fig. 6 show +that Leiden outperforms Louvain in terms of both com- +putational time and quality of the partitions. +DBLPAmazonIMDB +Live Journal +Web of ScienceWeb UK (2005)1101001,00010,000 Time (s)Louvain +LeidenFIG. 8. First iteration runtime for empirical net- +works. Speed of the first iteration of the Louvain and the +Leiden algorithm for six empirical networks. Leiden is faster +than Louvain especially for larger networks. +C. Empirical networks +Analyses based on benchmark networks have only a +limited value because these networks are not represen- +tative of empirical real-world networks. In particular, +benchmarknetworkshavea rather simplestructure. Em- +pirical networks show a much richer and more complex +structure. We now compare how the Leiden and the Lou- +vain algorithm perform for the six empirical networks +listed in Table II. Our analysis is based on modularity +with resolution parameter γ= 1. For each network, Ta- +ble II reports the maximal modularity obtained using the +Louvain and the Leiden algorithm. +AscanbeseeninFig.8, theLeidenalgorithmissignifi- +cantlyfasterthantheLouvainalgorithmalsoinempirical +networks. In the first iteration, Leiden is roughly 2–20 +times faster than Louvain. The speed difference is espe- +cially large for larger networks. This is similar to what +we have seen for benchmark networks. For the Ama- +zon and IMDB networks, the first iteration of the Leiden +algorithm is only about 1.6times faster than the first +iteration of the Louvain algorithm. However, Leiden is +more than 7times faster for the Live Journal network, +more than 11times faster for the Web of Science network +and more than 20times faster for the Web UK network. +In fact, for the Web of Science and Web UK networks, +Fig. 9 shows that more than 10iterations of the Leiden +algorithmcanbeperformedbeforetheLouvainalgorithm +has finished its first iteration. +As shown in Fig. 9, the Leiden algorithm also performs +better than the Louvain algorithm in terms of the qual-10 +ity of the partitions that are obtained. For all networks, +LeidenidentifiessubstantiallybetterpartitionsthanLou- +vain. Louvainquicklyconvergestoapartitionandisthen +unable to make further improvements. In contrast, Lei- +den keeps finding better partitions in each iteration. +The quality improvement realised by the Leiden algo- +rithm relative to the Louvain algorithm is larger for em- +pirical networks than for benchmark networks. Hence, +the complex structure of empirical networks creates an +even stronger need for the use of the Leiden algorithm. +Leiden keeps finding better partitions for empirical net- +works also after the first 10iterations of the algorithm. +This contrasts to benchmark networks, for which Leiden +often converges after a few iterations. For empirical net- +works, it may take quite some time before the Leiden +algorithm reaches its first stable iteration. As can be +seen in Fig. 10, for the IMDB and Amazon networks, +Leiden reaches a stable iteration relatively quickly, pre- +sumablybecausethesenetworkshaveafairlysimplecom- +munity structure. The DBLP network is somewhat more +challenging, requiring almost 80iterations on average to +reach a stable iteration. The Web of Science network is +the most difficult one. For this network, Leiden requires +over 750iterations on average to reach a stable iteration. +Importantly, the first iteration of the Leiden algorithm is +the most computationally intensive one, and subsequent +iterations are faster. For example, for the Web of Science +network, the first iteration takes about 110–120seconds,while subsequent iterations require about 40seconds. +V. DISCUSSION +Community detection is an important task in the anal- +ysis of complex networks. Finding communities in large +networks is far from trivial: algorithms need to be fast, +but they also need to provide high-quality results. One +of the most widely used algorithms is the Louvain algo- +rithm [10], which is reported to be among the fastest and +bestperformingcommunitydetectionalgorithms[11,12]. +However, as shown in this paper, the Louvain algorithm +has a major shortcoming: the algorithm yields commu- +nities that may be arbitrarily badly connected. Commu- +nities may even be disconnected. +To overcome the problem of arbitrarily badly con- +nected communities, we introduced a new algorithm, +which we refer to as the Leiden algorithm. This algo- +rithm provides a number of explicit guarantees. In par- +ticular, it yields communities that are guaranteed to be +connected. Moreover, when the algorithm is applied it- +eratively, it converges to a partition in which all subsets +of all communities are guaranteed to be locally optimally +assigned. In practical applications, the Leiden algorithm +convincingly outperforms the Louvain algorithm, both in +terms of speed and in terms of quality of the results, as +shown by the experimental analysis presented in this pa- +per. We conclude that the Leiden algorithm is strongly +preferable to the Louvain algorithm. +[1] S. Fortunato, Phys. Rep. 486, 75 (2010). +[2] M. A. Porter, J.-P. Onnela, and P. J. Mucha, Not. AMS +56, 1082 (2009). +[3] M. E. J. Newman and M. Girvan, Phys. Rev. E 69, +026113 (2004). +[4] J. Reichardt and S. Bornholdt, Phys. Rev. E 74, 016110 +(2006). +[5] U. Brandes, D. Delling, M. Gaertler, R. Gorke, M. Hoe- +fer, Z. Nikoloski, D. Wagner, R. G, M. Hoefer, +Z. Nikoloski, and D. Wagner, IEEE Trans. Knowl. Data +Eng.20, 172 (2008). +[6] A. Clauset, M. E. J. Newman, and C. Moore, Phys. Rev. +E70, 066111 (2004). +[7] J. Duch and A. Arenas, Phys. Rev. E 72, 027104 (2005). +[8] R. Guimerà and L. A. Nunes Amaral, Nature 433, 895 +(2005). +[9] M. E. J. Newman, Phys. Rev. E 74, 036104 (2006). +[10] V. D. Blondel, J.-L. Guillaume, R. Lambiotte, and +E. Lefebvre, J. Stat. Mech.Theory Exp. 10008, 6 (2008). +[11] A. Lancichinetti and S. Fortunato, Phys. Rev. E 80, +056117 (2009). +[12] Z. Yang, R. Algesheimer, and C. J. Tessone, Sci. Rep. +6, 30750 (2016). +[13] V. A. Traag, P. Van Dooren, and Y. Nesterov, Phys. +Rev. E84, 016114 (2011). +[14] S. Fortunato and M. Barthélemy, Proc. Natl. Acad. Sci. +U. S. A.104, 36 (2007).[15] L. Waltman and N. J. van Eck, Eur. Phys. J. B 86, 471 +(2013). +[16] N. Ozaki, H. Tezuka, and M. Inaba, Int. J. Comput. +Electr. Eng. 8, 207 (2016). +[17] S. Bae, D. Halperin, J. D. West, M. Rosvall, and +B. Howe, ACM Trans. Knowl. Discov. Data 11, 1 (2017). +[18] V. A. Traag, Phys. Rev. E 92, 032801 (2015). +[19] U. Raghavan, R. Albert, and S. Kumara, Phys. Rev. E +76, 036106 (2007). +[20] M. D. Luecken, Application of multi-resolution partition- +ing of interaction networks to the study of complex dis- +ease, Ph.D. thesis, University of Oxford (2016). +[21] F. A. Wolf, F. Hamey, M. Plass, J. Solana, J. S. Dahlin, +B. Gottgens, N. Rajewsky, L. Simon, and F. J. Theis, +bioRxiv (2018), 10.1101/208819. +[22] R. Rotta and A. Noack, J. Exp. Algorithmics 16, 2.1 +(2011). +[23] V. A. Traag, L. Waltman, and N. J. van Eck, “net- +workanalysis,” Zenodo, 10.5281/zenodo.1466831 (2018), +Source Code. +[24] V. A. Traag, “leidenalg 0.7.0,” Zenodo, 10.5281/zen- +odo.1469357 (2018), Source Code. +[25] E. Bullmore and O. Sporns, Nat. Rev. Neurosci. 10, 186 +(2009). +[26] L. Waltman and N. J. van Eck, J. Am. Soc. Inf. Sci. +Technol.63, 2378 (2012). +[27] R.KlavansandK.W.Boyack,J.Assoc.Inf.Sci.Technol.11 +1 2 3 40.8250.830.835QualityDBLP +1 2 3 40.9260.9280.930.9320.934Amazon +10 200.6980.70.7020.704QualityIMDB +100 2000.750.760.77Live Journal +1,000 2,0000.7750.780.7850.79 +Time (s)QualityWeb of Science +2,000 4,0000.97940.97960.97980.98 +Time (s)Web UKLouvain Leiden +FIG. 9. Runtime versus quality for empirical net- +works. Speed and quality for the first 10iterations of the +Louvain and the Leiden algorithm for six empirical networks. +The horizontal axis indicates the cumulative time taken to +obtain the quality indicated on the vertical axis. Each point +corresponds to a certain iteration of an algorithm, with re- +sults averaged over 10experiments. Leiden is both faster +than Louvain and finds better partitions. +68, 984 (2017). +[28] A. Lancichinetti, S. Fortunato, and F. Radicchi, Phys. +Rev. E78, 046110 (2008). +[29] B. H. Good, Y. A. De Montjoye, and A. Clauset, Phys. +Rev. E81, 046106 (2010). +[30] V. A. Traag and J. Bruggeman, Phys. Rev. E 80, 036115 +(2009). +[31] T. N. Dinh, X. Li, and M. T. Thai, in 2015 IEEE Int. +Conf. Data Min. (IEEE, 2015) pp. 101–110. +ACKNOWLEDGMENTS +We gratefully acknowledge computational facilities pro- +vided by the LIACS Data Science Lab Computing Facili- +ties through Frank Takes. We thank Lovro ˘Subelj for his +comments on an earlier version of this paper. +DBLPAmazonIMDB +Live Journal +Web of ScienceWeb UK (2005)301003001,000No. iterations until stabilityFIG. 10. Number of iterations until stability . Number +of iterations before the Leiden algorithm has reached a stable +iteration for six empirical networks. In a stable iteration, the +partition is guaranteed to be node optimal and subpartition +γ-dense. +AUTHOR CONTRIBUTIONS STATEMENT +All authors conceived the algorithm and contributed to +the source code. VAT performed the experimental analy- +sis. VAT and LW wrote the manuscript. NJvE reviewed +the manuscript. +ADDITIONAL INFORMATION +Competing interests +The authors act as bibliometric consultants to CWTS +B.V., which makes use of community detection algo- +rithms in commercial products and services.12 +Appendix A: Pseudo-code and mathematical notation +Pseudo-codefortheLouvainalgorithmandtheLeidenalgorithmisprovidedinAlgorithmsA.1andA.2, respectively. +Below we discuss the mathematical notation that is used in the pseudo-code and also in the mathematical results +presented in Appendices C, D, and E. There are some uncommon elements in the notation. In particular, the idea of +sets of sets plays an important role, and some concepts related to this idea need to be introduced. +LetG= (V,E)be a graph with n=|V|nodes andm=|E|edges. Graphs are assumed to be undirected. With the +exception of Theorem 14 in Appendix E, the mathematical results presented in this paper apply to both unweighted +and weighted graphs. For simplicity, our mathematical notation assumes graphs to be unweighted, although the +notation does allow for multigraphs. A partition P={C1,...,Cr}consists of r=|P|communities, where each +community Ci⊆Vconsists of a set of nodes such that V=/uniontext +iCiandCi∩Cj=∅for alli/negationslash=j. For two sets Rand +S, we sometimes use R+Sto denote the union R∪SandR−Sto denote the difference R\S. +A quality function H(G,P)assigns a “quality” to a partition Pof a graphG. We aim to find a partition with the +highest possible quality. The graph Gis often clear from the context, and we therefore usually write H(P)instead +ofH(G,P). Based on partition P, graphGcan beaggregated into a new graph G/prime. GraphGis then called the base +graph, while graph G/primeis called the aggregate graph . The nodes of the aggregate graph G/primeare the communities in the +partition Pof the base graph G, i.e.V(G/prime) =P. The edges of the aggregate graph G/primeare multi-edges. The number of +edgesbetweentwonodesintheaggregategraph G/primeequalsthenumberofedgesbetweennodesinthetwocorresponding +communities in the base graph G. Hence,E(G/prime) ={(C,D)|(u,v)∈E(G),u∈C∈P,v∈D∈P}, whereE(G/prime) +is a multiset. A quality function must have the property that H(G,P) =H(G/prime,P/prime), where P/prime={{v}|v∈V(G/prime)} +denotes the singleton partition of the aggregate graph G/prime. This ensures that a quality function gives consistent results +for base graphs and aggregate graphs. +We denote by P(v/mapsto→C)the partition that is obtained when we start from partition Pand we then move node +vto community C. We write ∆HP(v/mapsto→C)for the change in the quality function by moving node vto community +Cfor some partition P. In other words, ∆HP(v/mapsto→C) =H(P(v/mapsto→C))−H(P). We usually leave the partition P +implicit and simply write ∆H(v/mapsto→C). Similarly, we denote by ∆HP(S/mapsto→C)the change in the quality function by +moving a set of nodes Sto community C. An empty community is denoted by ∅. Hence, ∆HP(S/mapsto→∅)is the change +in the quality function by moving a set of nodes Sto an empty (i.e. new) community. +Now consider a community Cthat consists of two parts S1andS2such thatC=S1∪S2andS1∩S2=∅. Suppose +thatS1andS2are disconnected. In other words, there are no edges between nodes in S1andS2. We then require a +quality function to have the property that ∆H(S1/mapsto→∅)>0and∆H(S2/mapsto→∅)>0. This guarantees that a partition +can always be improved by splitting a community into its connected components. This comes naturally for most +definitions of a community, but this is not the case when considering for example negative links [30]. +Because nodes in an aggregate graph are sets themselves, it is convenient to define some recursive properties. +Definition 1. Therecursive size of a setSis defined as +/bardblS/bardbl=/summationdisplay +s∈S/bardbls/bardbl, (A1) +where/bardbls/bardbl= 1ifsis not a set itself. The flattening operation for a set Sis defined as +flat(S) =/uniondisplay +s∈Sflat(s), (A2) +where flat(s) =sifsis not a set itself. A set that has been flattened is called a flat set. +The recursive size of a set corresponds to the usual definition of set size in case the elements of a set are not +sets themselves, but it generalizes this definition whenever the elements are sets themselves. For example, if S= +{{a,b},{c},{d,e,f}}, then +/bardblS/bardbl=/bardbl{a,b}/bardbl+/bardbl{c}/bardbl+/bardbl{d,e,f}/bardbl += (/bardbla/bardbl+/bardblb/bardbl) +/bardblc/bardbl+ (/bardbld/bardbl+/bardble/bardbl+/bardblf/bardbl) += 2 + 1 + 3 = 6 . +This contrasts with the traditional size of a set, which is |S|= 3, becauseScontains 3elements. The fact that the +elements are sets themselves plays no role in the traditional size of a set. The flattening of Sis +flat(S) = flat({a,b})∪flat({c})∪flat({d,e,f}) +=a∪b∪c∪d∪e∪f +={a,b,c,d,e,f}.13 +Note that/bardblS/bardbl=|flat(S)|. +Definition 2. Theflattening operation for a partition Pis defined as +flat∗(P) ={flat(C)|C∈P}. (A3) +Hence, flat∗(P)denotes the operation in which each community C∈Pis flattened. A partition that has been +flattened is called a flat partition . +For any partition of an aggregate graph, the equivalent partition of the base graph can be obtained by applying +the flattening operation. +Additionally, we need some terminology to describe the connectivity of communities. +Definition 3. LetG= (V,E)be a graph, and let Pbe a partition of G. Furthermore, let H(C)be the subgraph +induced by a community C∈P, i.e.V(H) =CandE(H) ={(u,v)|(u,v)∈E(G),u,v∈C}. A community C∈P +is calledconnected ifH(C)is a connected graph. Conversely, a community C∈Pis calleddisconnected ifH(C)is a +disconnected graph. +The mathematical proofs presented in this paper rely on the Constant Potts Model (CPM) [13]. This quality +function has important advantages over modularity. In particular, unlike modularity, CPM does not suffer from the +problem of the resolution limit [13, 14]. Moreover, our mathematical definitions and proofs are quite elegant when +expressed in terms of CPM. The CPM quality function is defined as +H(G,P) =/summationdisplay +C∈P/bracketleftbigg +E(C,C)−γ/parenleftbigg/bardblC/bardbl +2/parenrightbigg/bracketrightbigg +, (A4) +whereE(C,D) =|{(u,v)∈E(G)|u∈C,v∈D}|denotes the number of edges between nodes in communities Cand +D. Note that this definition can also be used for aggregate graphs because E(G)is a multiset. +The mathematical results presented in this paper also extend to modularity, although the formulations are less +elegant. Results for modularity are straightforward to prove by redefining the recursive size /bardblS/bardblof a setS. We need +to define the size of a node vin the base graph as /bardblv/bardbl=kvinstead of/bardblv/bardbl= 1, wherekvis the degree of node v. +Furthermore, we need to rescale the resolution parameter γby2m. Modularity can then be written as +H(G,P) =/summationdisplay +C∈P/bracketleftbigg +E(C,C)−γ +2m/parenleftbigg/bardblC/bardbl +2/parenrightbigg/bracketrightbigg +. (A5) +Note that, in addition to the overall multiplicative factor of1 +2m, this adds a constantγ +2m/summationtext +C/bardblC/bardbl +2=γ +2to the ordinary +definition of modularity [3]. However, this does not matter for optimisation or for the proofs. +As discussed in the main text, the Louvain and the Leiden algorithm can be iterated by performing multiple +consecutive iterations of the algorithm, using the partition identified in one iteration as starting point for the next +iteration. In this way, a sequence of partitions P0,P1,...is obtained such that Pt+1=Louvain (G,Pt)orPt+1= +Leiden (G,Pt). The initial partition P0usually is the singleton partition of the graph G, i.e.P0={{v}|v∈V}. +Appendix B: Disconnected communities in the Louvain algorithm +In this appendix, we analyse the problem that communities obtained using the Louvain algorithm may be discon- +nected. This problem is also discussed in the main text (Section IIA), using the example presented in Fig. 2. However, +the main text offers no numerical details. These details are provided below. +We consider the CPM quality function with a resolution of γ=1 +7. In the example presented in Fig. 2, the edges +between nodes 0 and 1 and between nodes 0 and 4 have a weight of 2, as indicated by the thick lines in the figure. +All other edges have a weight of 1. The Louvain algorithm starts from a singleton partition, with each node being +assigned to its own community. The algorithm then keeps iterating over all nodes, moving each node to its optimal +community. Depending on the order in which the nodes are visited, the following could happen. Node 1 is visited +first, followed by node 4. Nodes 1 and 4 join the community of node 0, because the weight of the edges between nodes +0 and 1 and between nodes 0 and 4 is sufficiently high. For node 1, the best move clearly is to join the community of +node 0. For node 4, the benefit of joining the community of nodes 0 and 1 then is 2−γ·2 =12 +7. This is larger than the +benefit of joining the community of node 5 or 6, which is 1−γ·1 =6 +7. Next, nodes 2, 3, 5 and 6 are visited. For these +nodes, it is beneficial to join the community of nodes 0, 1 and 4, because joining this community has a benefit of at14 +1:function Louvain (GraphG, Partition P) +2:do +3: P←MoveNodes (G,P) ⊿Move nodes between communities +4: done←|P|=|V(G)| ⊿Terminate when each community consists of only one node +5:ifnot donethen +6: G←AggregateGraph (G,P) ⊿Create aggregate graph based on partition P +7: P←SingletonPartition (G) ⊿Assign each node in aggregate graph to its own community +8:end if +9:whilenot done +10:return flat∗(P) +11:end function +12:function MoveNodes (GraphG, Partition P) +13:do +14: Hold=H(P) +15: forv∈V(G)do ⊿Visit nodes (in random order) +16: C/prime←arg maxC∈P∪∅∆HP(v/mapsto→C) ⊿Determine best community for node v +17: if∆HP(v/mapsto→C/prime)>0then ⊿Perform only strictly positive node movements +18: v/mapsto→C/prime⊿Move node vto community C/prime +19: end if +20: end for +21:while H(P)>Hold ⊿Continue until no more nodes can be moved +22:return P +23:end function +24:function AggregateGraph (GraphG, Partition P) +25:V←P ⊿Communities become nodes in aggregate graph +26:E←{(C,D)|(u,v)∈E(G),u∈C∈P,v∈D∈P} ⊿ Eis a multiset +27:return Graph (V,E) +28:end function +29:function SingletonPartition (GraphG) +30:return{{v}|v∈V(G)} ⊿Assign each node to its own community +31:end function +ALGORITHM A.1. Louvain algorithm. +least 1−γ·6 =1 +7>0. This then yields the situation portrayed in Fig. 2(a). After some node movements in the rest +of the graph, some neighbours of node 0 in the rest of the graph end up together in a new community. Consequently, +when node 0 is visited, it can best be moved to this new community, which gives the situation depicted in Fig. 2(b). +In particular, suppose there are 5nodes in the new community, all of which are connected to node 0. In that case, the +benefit for node 0 of moving to this community is 5−γ·5 =30 +7, while the benefit of staying in the current community +is only 2·2−γ·6 =22 +7. After node 0 has moved, nodes 1 and 4 are still locally optimally assigned. For these nodes, +the benefit of moving to the new community of node 0 is 2−γ·6 =8 +7. This is smaller than the benefit of staying +in the current community, which is 2−γ·5 =9 +7. Finally, nodes 2, 3, 5 and 6 are all locally optimally assigned, as +1−γ·5 =2 +7>0. Hence, we end up with a community that is disconnected. In later stages of the Louvain algorithm, +there will be no possibility to repair this. +The example presented above considers a weighted graph, but this graph can be assumed to be an aggregate graph +of an unweighted base graph, thus extending the example also to unweighted graphs. Although the example uses +the CPM quality function, similar examples can be given for modularity. However, because of the dependency of +modularity on the number of edges m, the calculations for modularity are a bit more complex. Importantly, both for +CPM and for modularity, the Louvain algorithm suffers from the problem of disconnected communities. +Appendix C: Reachability of optimal partitions +In this appendix, we consider two types of move sequences: non-decreasing move sequences and greedy move +sequences. For each type of move sequence, we study whether all optimal partitions are reachable. We first show that +this is not the case for greedy move sequences. In particular, we show that for some optimal partitions there does not +exist a greedy move sequence that is able to reach the partition. We then show that optimal partitions can always15 +1:function Leiden(GraphG, Partition P) +2:do +3: P←MoveNodesFast (G,P) ⊿Move nodes between communities +4: done←|P|=|V(G)| ⊿Terminate when each community consists of only one node +5:ifnot donethen +6: Prefined←RefinePartition (G,P) ⊿Refine partition P +7: G←AggregateGraph (G,Prefined ) ⊿Create aggregate graph based on refined partition Prefined +8: P←{{v|v⊆C,v∈V(G)}|C∈P} ⊿But maintain partition P +9:end if +10:whilenot done +11:return flat∗(P) +12:end function +13:function MoveNodesFast (GraphG, Partition P) +14:Q←Queue (V(G)) ⊿Make sure that all nodes will be visited (in random order) +15:do +16:v←Q.remove() ⊿Determine next node to visit +17:C/prime←arg maxC∈P∪∅∆HP(v/mapsto→C) ⊿Determine best community for node v +18: if∆HP(v/mapsto→C/prime)>0then ⊿Perform only strictly positive node movements +19: v/mapsto→C/prime⊿Move node vto community C/prime +20: N←{u|(u,v)∈E(G),u /∈C/prime} ⊿Identify neighbours of node vthat are not in community C/prime +21: Q.add(N−Q) ⊿Make sure that these neighbours will be visited +22: end if +23:whileQ/negationslash=∅ ⊿Continue until there are no more nodes to visit +24:return P +25:end function +26:function RefinePartition (GraphG, Partition P) +27: Prefined←SingletonPartition (G) ⊿Assign each node to its own community +28:forC∈Pdo ⊿Visit communities +29: Prefined←MergeNodesSubset (G,Prefined,C) ⊿Refine community C +30:end for +31:return Prefined +32:end function +33:function MergeNodesSubset (GraphG, Partition P, SubsetS) +34:R={v|v∈S,E(v,S−v)≥γ/bardblv/bardbl·(/bardblS/bardbl−/bardblv/bardbl)}⊿Consider only nodes that are well connected within subset S +35:forv∈Rdo ⊿Visit nodes (in random order) +36: ifvin singleton community then ⊿Consider only nodes that have not yet been merged +37: T←{C|C∈P,C⊆S,E(C,S−C)≥γ/bardblC/bardbl·(/bardblS/bardbl−/bardblC/bardbl)}⊿Consider only well-connected communities +38: Pr(C/prime=C)∼/braceleftbigg +exp/parenleftbig1 +θ∆HP(v/mapsto→C)/parenrightbig +if∆HP(v/mapsto→C)≥0 +0 otherwiseforC∈T⊿Choose random community C/prime +39: v/mapsto→C/prime⊿Move node vto community C/prime +40: end if +41:end for +42:return P +43:end function +44:function AggregateGraph (GraphG, Partition P) +45:V←P ⊿Communities become nodes in aggregate graph +46:E←{(C,D)|(u,v)∈E(G),u∈C∈P,v∈D∈P} ⊿ Eis a multiset +47:return Graph (V,E) +48:end function +49:function SingletonPartition (GraphG) +50:return{{v}|v∈V(G)} ⊿Assign each node to its own community +51:end function +ALGORITHM A.2. Leiden algorithm.16 +be reached using a non-decreasing move sequence. This result forms the basis for the asymptotic guarantees of the +Leiden algorithm, which are discussed in Appendix D3. +We first define the different types of move sequences. +Definition 4. LetG= (V,E)be a graph, and let P0,...,Pτbe partitions of G. A sequence of partitions P0,...,Pτ +is called a move sequence if for eacht= 0,...,τ−1there exists a node vt∈Vand a community Ct∈Pt∪∅such +thatPt+1=Pt(vt/mapsto→Ct). A move sequence is called non-decreasing ifH(Pt+1)≥H(Pt)for allt= 0,...,τ−1. A +move sequence is called greedyifH(Pt+1) = maxCH(Pt(vt/mapsto→C))for allt= 0,...,τ−1. +In other words, the next partition in a move sequence is obtained by moving a single node to a different community. +Clearly, a greedy move sequence must be non-decreasing, but a non-decreasing move sequence does not need to be +greedy. A natural question is whether for any optimal partition P∗there exists a move sequence that starts from the +singleton partition and that reaches the optimal partition, i.e., a move sequence P0,...,PτwithP0={{v}|v∈V} +andPτ=P∗. Trivially, it is always possible to reach the optimal partition if we allow all moves—even moves that +decrease the quality function—as is done for example in simulated annealing [4, 8]. However, it can be shown that +there is no need to consider all moves in order to reach the optimal partition. It is sufficient to consider only non- +decreasing moves. On the other hand, considering only greedy moves turns out to be too restrictive to guarantee that +the optimal partition can be reached. +1. Non-decreasing move sequences +We here prove that for any graph there exists a non-decreasing move sequence that reaches the optimal partition +P∗. The optimal partition can be reached in n−|P∗|steps. +Theorem 1. LetG= (V,E)be a graph, and let P∗be an optimal partition of G. There then exists a non-decreasing +move sequence P0,...,PτwithP0={{v}|v∈V},Pτ=P∗, andτ=n−|P∗|. +Proof.LetC∗∈P∗be a community in the optimal partition P∗, letv0∈C∗be a node in this community, and +letC0={v0}. LetP0={{v}|v∈V}be the singleton partition. For t= 1,...,|C∗|−1, letvt∈C∗−Ct−1, +letCt={v0,...,vt}∈Pt, and let Pt=Pt−1(vt/mapsto→Ct−1). We prove by contradiction that there always exists a +non-decreasing move sequence P0,...,P|C∗|−1. Assume that for some tthere does not exist a node vtfor which +∆H(vt/mapsto→Ct−1)≥0. LetS=C∗−Ct−1andR=Ct−1. For allv∈S, +E(v,R)−γ/bardblv/bardbl·/bardblR/bardbl<0. +This implies that +E(S,R) =/summationdisplay +v∈SE(v,R)<γ/bardblS/bardbl·/bardblR/bardbl. +However, by optimality, for all S⊆C∗andR=C∗−S, +E(S,R)≥γ/bardblS/bardbl·/bardblR/bardbl. +We therefore have a contradiction. Hence, there always exists a non-decreasing move sequence P0,...,P|C∗|−1. This +move sequence reaches the community Ct=C∗. The above reasoning can be applied to each community C∗∈P∗. +Consequently, each of these communities can be reached using a non-decreasing move sequence. In addition, for each +community C∗∈P∗, this can be done in |C∗|−1steps, so that in total τ=/summationtext +C∗∈P∗(|C∗|−1) =n−|P∗|steps are +needed.  +2. Greedy move sequences +We here show that there does not always exist a greedy move sequence that reaches the optimal partition of a +graph. To show this, we provide a counterexample in which we have a graph for which there is no greedy move +sequence that reaches the optimal partition. Our counterexample includes two nodes that should be assigned to +different communities. However, because there is a strong connection between the nodes, in a greedy move sequence +the nodes are always assigned to the same community. We use the CPM quality function in our counterexample, but +a similar counterexample can be given for modularity. The counterexample is illustrated in Fig. C.1. The thick edges17 +a) +b)0 1 23 +45 +67 +0 1 23 +45 +67 +FIG. C.1. Unreachable optimal partition. A greedy move sequence always reaches the partition in (a), whereas the +partition in (b) is optimal. This demonstrates that for some graphs there does not exist a greedy move sequence that reaches +the optimal partition. +have a weight of 3, while the thin ones have a weight of3 +2. The resolution is set to γ= 1. In this situation, nodes 0 +and 1 are always joined together in a community. This has a benefit of 3−γ= 2, which is larger than the benefit of +3·3 +2−γ·3 =3 +2obtained by node 0 joining the community of nodes 2, 3 and 4 or node 1 joining the community of +nodes 5, 6 and 7. Hence, regardless of the exact node order, the partition reached by a greedy move sequence always +consists of three communities. This gives a total quality of +2·/parenleftbigg +3·3−γ3·2 +2/parenrightbigg ++/parenleftbigg +3−γ2·1 +2/parenrightbigg += 14, +while the optimal partition has only two communities, consisting of nodes {0,2,3,4}and{1,5,6,7}and resulting in +a total quality of +2·/parenleftbigg +3·3 + 3·3 +2−γ4·3 +2/parenrightbigg += 15. +Hence, a greedy move sequence always reaches the partition in Fig. C.1(a), whereas the partition in Fig. C.1(b) is +optimal. +Appendix D: Guarantees of the Leiden algorithm +In this appendix, we discuss the guarantees provided by the Leiden algorithm. The guarantees of the Leiden +algorithm partly rely on the randomness in the algorithm. We therefore require that θ > 0. Before stating the +guarantees of the Leiden algorithm, we first define a number of properties. We start by introducing some relatively +weak properties, and we then move on to stronger properties. In the following definitions, Pis a flat partition of a +graphG= (V,E). +Definition5 (γ-separation) .Wecallapairofcommunities C,D∈Pγ-separated if∆H(C/mapsto→D) = ∆H(D/mapsto→C)≤0. +A community C∈Pisγ-separated if Cisγ-separated with respect to all D∈P. A partition Pisγ-separated if all +C∈Pareγ-separated. +Definition 6 (γ-connectivity) .We call a set of nodes S⊆C∈Pγ-connected if|S|= 1or ifScan be partitioned into +two setsRandTsuch thatE(R,T)≥γ/bardblR/bardbl·/bardblT/bardblandRandTareγ-connected. A community C∈Pisγ-connected +ifS=Cisγ-connected. A partition Pisγ-connected if all C∈Pareγ-connected. +Definition 7 (Subpartition γ-density).We call a set of nodes S⊆C∈Psubpartition γ-denseif the following two +conditions are satisfied: (i) ∆H(S/mapsto→∅)≤0and (ii)|S|= 1orScan be partitioned into two sets RandTsuch that18 +E(R,T)≥γ/bardblR/bardbl·/bardblT/bardblandRandTare subpartition γ-dense. A community C∈Pis subpartition γ-dense ifS=C +is subpartition γ-dense. A partition Pis subpartition γ-dense if all C∈Pare subpartition γ-dense. +Definition 8 (Node optimality) .We call a community C∈Pnode optimal if∆H(v/mapsto→D)≤0for allv∈Cand all +D∈P(orD=∅). A partition Pis node optimal if all C∈Pare node optimal. +Definition 9 (Uniformγ-density).We call a community C∈Puniformlyγ-denseif∆H(S/mapsto→∅)≤0for allS⊆C. +A partition Pis uniformly γ-dense if all C∈Pare uniformly γ-dense. +Definition 10 (Subset optimality) .We call a community C∈Psubset optimal if∆H(S/mapsto→D)≤0for allS⊆C +and allD∈P(orD=∅). A partition Pis subset optimal if all C∈Pare subset optimal. +Subsetoptimalityclearlyisthestrongestpropertyandsubsumesallotherproperties. Uniform γ-densityissubsumed +by subset optimality but may be somewhat more intuitive to grasp. It states that any subset of nodes in a community +is always connected to the rest of the community with a density of at least γ. In other words, for all S⊆C∈Pwe +have +E(S,C−S)≥γ/bardblS/bardbl·/bardblC−S/bardbl. (D1) +Imposingtherestriction D=∅inthedefinitionofsubsetoptimalitygivesthepropertyofuniform γ-density, restricting +Sto consist of only one node gives the property of node optimality, and imposing the restriction S=Cyields the +property of γ-separation. Uniform γ-density implies subpartition γ-density, which in turn implies γ-connectivity. +Subpartition γ-density also implies that individual nodes cannot be split from their community (but notice that this +is a weaker property than node optimality). Ordinary connectivity is implied by γ-connectivity, but not vice versa. +Obviously, any optimal partition is subset optimal, but not the other way around: a subset optimal partition is not +necessarily an optimal partition (see Fig. C.1(a) for an example). +In the rest of this appendix, we show that the Leiden algorithm guarantees that the above properties hold for +partitions produced by the algorithm. The properties hold either in each iteration, in every stable iteration, or +asymptotically. The first two properties of γ-separation and γ-connectivity are guaranteed in each iteration of the +Leiden algorithm. We prove this in Appendix D1. The next two properties of subpartition γ-density and node +optimality are guaranteed in every stable iteration of the Leiden algorithm, as we prove in Appendix D2. Finally, +in Appendix D3 we prove that asymptotically the Leiden algorithm guarantees the last two properties of uniform +γ-density and subset optimality. +1. Guarantees in each iteration +In order to show that the property of γ-separation is guaranteed in each iteration of the Leiden algorithm, we first +need to prove some results for the MoveNodesFast function in the Leiden algorithm. +We start by introducing some notation. The MoveNodesFast function iteratively evaluates nodes. When a node +is evaluated, either it is moved to a different (possibly empty) community or it is kept in its current community, +depending on what is most beneficial for the quality function. Let G= (V,E)be a graph, let Pbe a partition +ofG, and let P/prime=MoveNodesFast (G,P). We denote by P0,...,Pra sequence of partitions generated by the +MoveNodesFast function, with P0=Pdenoting the initial partition, P1denoting the partition after the first +evaluation of a node has taken place, and so on. Pr=P/primedenotes the partition after the final evaluation of a node +has taken place. The MoveNodesFast function maintains a queue of nodes that still need to be evaluated. Let Qs +be the set of nodes that still need to be evaluated after snode evaluations have taken place, with Q0=V. Also, for +allv∈V, letCv +s∈Psbe the community in which node vfinds itself after snode evaluations have taken place. +The following lemma states that at any point in the MoveNodesFast function, if a node is disconnected from the +rest of its community, the node will find itself in the queue of nodes that still need to be evaluated. +Lemma2. Usingthenotationintroducedabove,forall v∈Vandalls,wehavev∈Qsor|Cv +s|= 1orE(v,Cv +s−v)>0. +Proof.We are going to prove the lemma for an arbitrary node v∈V. We provide a proof by induction. We observe +thatv∈Q0, which provides our inductive base. Suppose that v∈Qs−1or|Cv +s−1|= 1orE(v,Cv +s−1−v)>0. This is +our inductive hypothesis. We are going to show that v∈Qsor|Cv +s|= 1orE(v,Cv +s−v)>0. Ifv∈Qs, this result is +obtained in a trivial way. Suppose therefore that v /∈Qs. We then need to show that |Cv +s|= 1orE(v,Cv +s−v)>0. +To do so, we distinguish between two cases. +We first consider the case in which v∈Qs−1. Ifv∈Qs−1andv /∈Qs, nodevhas just been evaluated. We then +obviously have|Cv +s|= 1orE(v,Cv +s−v)>0. Otherwise we would have |Cv +s|>1andE(v,Cv +s−v) = 0, which would19 +mean that node vis disconnected from the rest of its community. Since node vhas just been evaluated, this is not +possible. +We now consider the case in which v /∈Qs−1. Letu∈Vbe the node that has just been evaluated, i.e., u∈Qs−1 +andu /∈Qs. If nodeuhas not been moved to a different community, then Ps=Ps−1. Obviously, if|Cv +s−1|= 1or +E(v,Cv +s−1−v)>0, we then have|Cv +s|= 1orE(v,Cv +s−v)>0. On the other hand, if node uhas been moved to a +different community, we have (u,v)/∈E(G)orv∈Cu +s. To see this, note that if (u,v)∈E(G)andv /∈Cu +s, we would +havev∈Qs(following line 21 in Algorithm A.2). This contradicts our assumption that v /∈Qs, so that we must have +(u,v)/∈E(G)orv∈Cu +s. In other words, either there is no edge between nodes uandvor nodeuhas been moved +to the community of node v. In either case, it is not possible that the movement of node ucauses node vto become +disconnected from the rest of its community. Hence, in either case, if |Cv +s−1|= 1orE(v,Cv +s−1−v)>0, then|Cv +s|= 1 +orE(v,Cv +s−v)>0.  +Using Lemma 2, we now prove the following lemma, which states that for partitions provided by the MoveNodes- +Fastfunction it is guaranteed that singleton communities cannot be merged with each other. +Lemma 3. LetG= (V,E)be a graph, let Pbe a partition of G, and let P/prime=MoveNodesFast (G,P). Then for +all pairsC,D∈P/primesuch that|C|=|D|= 1, we have ∆H(C/mapsto→D) = ∆H(D/mapsto→C)≤0. +Proof.We are going to prove the lemma for an arbitrary pair of communities C,D∈P/primesuch that|C|=|D|= 1. +We use the notation introduced above. If C,D∈Psfor alls, it is clear that ∆H(C/mapsto→D) = ∆H(D/mapsto→C)≤0. +Otherwise, consider tsuch thatC,D∈Psfor alls≥tand eitherC /∈Pt−1orD /∈Pt−1. Without loss of generality, +we assume that C /∈Pt−1andD∈Pt−1. Considerv∈Vsuch thatC={v}. Aftert−1node evaluations have taken +place, there are two possibilities. +One possibility is that node vis evaluated and is moved to an empty community. This means that moving node v +to an empty community is more beneficial for the quality function than moving node vto community D. It is then +clear that ∆H(C/mapsto→D) = ∆H(D/mapsto→C)≤0. +The second possibility is that node vis in a community together with one other node u∈V(i.e.{u,v}∈Pt−1) +and that this node uis evaluated and is moved to a different community. In this case, v∈Qt, as we will now show. +If(u,v)∈E(G), this follows from line 21 in Algorithm A.2. If (u,v)/∈E(G), we have|Cv +t−1|=|{u,v}|= 2and +E(v,Cv +t−1−v) = 0. It then follows from Lemma 2 that v∈Qt−1. Since node vis not evaluated in node evaluation t +(nodeuis evaluated in this node evaluation), v∈Qt−1implies that v∈Qt. Ifv∈Qt, at some point s≥t, nodevis +evaluated. Since C,D∈Psfor alls≥t, keeping node vin its own singleton community Cis more beneficial for the +quality function than moving node vto community D. This means that ∆H(C/mapsto→D) = ∆H(D/mapsto→C)≤0.  +Lemma 3 enables us to prove that the property of γ-separation is guaranteed in each iteration of the Leiden +algorithm, as stated in the following theorem. +Theorem 4. LetG= (V,E)be a graph, let Ptbe a flat partition of G, and let Pt+1=Leiden (G,Pt). Then Pt+1 +isγ-separated. +Proof.LetG/lscript= (V/lscript,E/lscript)be the aggregate graph at the highest level in the Leiden algorithm, let P/lscriptbe the initial +partition of G/lscript, and let P/prime +/lscript=MoveNodesFast (G/lscript,P/lscript). Since we are at the highest level of aggregation, it follows +from line 4 in Algorithm A.2 that |P/prime +/lscript|=|V/lscript|, which means that |C|= 1for allC∈P/prime +/lscript. In other words, P/prime +/lscriptis a +singleton partition of G/lscript. Lemma 3 then implies that for all C,D∈P/prime +/lscriptwe have ∆H(C/mapsto→D) = ∆H(D/mapsto→C)≤0. +SincePt+1= flat∗(P/prime +/lscript), it follows that for all C,D∈Pt+1we have ∆H(C/mapsto→D) = ∆H(D/mapsto→C)≤0. Hence, Pt+1is +γ-separated.  +The property of γ-separation also holds after each iteration of the Louvain algorithm. In fact, for the Louvain +algorithm this is much easier to see than for the Leiden algorithm. The Louvain algorithm uses the MoveNodes +functioninsteadofthe MoveNodesFast function. Unlikethe MoveNodesFast function, the MoveNodes function +yieldspartitionsthatareguaranteedtobenodeoptimal. Thisguaranteeleadsinastraightforwardwaytotheproperty +ofγ-separation for partitions obtained in each iteration of the Louvain algorithm. +We now consider the property of γ-connectivity. By constructing a tree corresponding to the decomposition of +γ-connectivity, we are going to prove that this property is guaranteed in each iteration of the Leiden algorithm. +Theorem 5. LetG= (V,E)be a graph, let Ptbe a flat partition of G, and let Pt+1=Leiden (G,Pt). Then Pt+1 +isγ-connected. +Proof.LetG/lscript= (V/lscript,E/lscript)be the aggregate graph at level /lscriptin the Leiden algorithm, with G0=Gbeing the base graph. +We say that a node v∈V/lscriptisγ-connected if flat(v)isγ-connected. We are going to proceed inductively. Each node +in the base graph G0is triviallyγ-connected. This provides our inductive base. Suppose that each node v∈V/lscript−1is20 +γ-connected, which is our inductive hypothesis. Each node v∈V/lscriptis obtained by merging one or more nodes at the +preceding level, i.e. v={u|u∈S}for some set S⊆V/lscript−1. Ifvconsists of only one node at the preceding level, vis +immediately γ-connected by our inductive hypothesis. The set of nodes Sis constructed in the MergeNodesSubset +function. There exists some order u1,...,ukin which nodes are added to S. LetSi={u1,...,ui}be the set obtained +after adding node ui. It follows from line 38 in Algorithm A.2 that E(ui+1,Si)≥γ/bardblui+1/bardbl·/bardblSi/bardblfori= 1,...,k−1. +Taking into account that each uiisγ-connected by our inductive hypothesis, this implies that each set Siisγ- +connected. Since S=Skisγ-connected, node visγ-connected. Hence, each node v∈V/lscriptisγ-connected. This +also holds for the nodes in the aggregate graph at the highest level in the Leiden algorithm, which implies that all +communities in Pt+1areγ-connected. In other words, Pt+1isγ-connected.  +Note that the theorem does not require Ptto be connected. Even if a disconnected partition is provided as input +to the Leiden algorithm, performing a single iteration of the algorithm will give a partition that is γ-connected. +2. Guarantees in stable iterations +As discussed earlier, the Leiden algorithm can be iterated until Pt+1=Leiden (G,Pt). Likewise, the Louvain +algorithm can be iterated until Pt+1=Louvain (G,Pt). We say that an iteration is stableifPt+1=Pt, in which +case we call Pt(orPt+1) astable partition . +There is a subtle point when considering stable iterations. In order for the below guarantees to hold, we need to +ensure that H(Pt+1) =H(Pt)implies Pt+1=Pt. In both the Leiden algorithm and the Louvain algorithm, we +therefore consider only strictly positive improvements (see line 17 in Algorithm A.1 and line 18 in Algorithm A.2). In +other words, if a node movement leads to a partition that has the same quality as the current partition, the current +partition is preferred and the node movement will not take place. This then also implies that H(Pt+1)>H(Pt)if +Pt+1/negationslash=Pt. +The Leiden algorithm guarantees that a stable partition is subpartition γ-dense, as stated in the following theorem. +Note that the proof of the theorem has a structure that is similar to the structure of the proof of Theorem 5 presented +above. +Theorem 6. LetG= (V,E)be a graph, let Ptbe a flat partition of G, and let Pt+1=Leiden (G,Pt). IfPt+1=Pt, +thenPt+1=Ptis subpartition γ-dense. +Proof.Suppose we have a stable iteration. Hence, Pt+1=Pt. LetG/lscript= (V/lscript,E/lscript)be the aggregate graph at level +/lscriptin the Leiden algorithm, with G0=Gbeing the base graph. We say that a node v∈V/lscriptis subpartition γ-dense +if the set of nodes flat(v)is subpartition γ-dense. We first observe that for all levels /lscriptand all nodes v∈V/lscriptwe +have ∆H(v/mapsto→∅)≤0. To see this, note that if ∆H(v/mapsto→∅)>0for some level /lscriptand some node v∈V/lscript, the +MoveNodesFast function would have removed node vfrom its community, which means that the iteration would +not have been stable. We are now going to proceed inductively. Since ∆H(v/mapsto→ ∅)≤0for all nodes v∈V0, +each node in the base graph G0is subpartition γ-dense. This provides our inductive base. Suppose that each node +v∈V/lscript−1is subpartition γ-dense, which is our inductive hypothesis. Each node v∈V/lscriptis obtained by merging one +or more nodes at the preceding level, i.e. v={u|u∈S}for some set S⊆V/lscript−1. Ifvconsists of only one node +at the preceding level, vis immediately subpartition γ-dense by our inductive hypothesis. The set of nodes Sis +constructed in the MergeNodesSubset function. There exists some order u1,...,ukin which nodes are added to +S. LetSi={u1,...,ui}be the set obtained after adding node ui. It follows from line 38 in Algorithm A.2 that +E(ui+1,Si)≥γ/bardblui+1/bardbl·/bardblSi/bardblfori= 1,...,k−1. Furthermore, line 37 in Algorithm A.2 ensures that ∆H(Si/mapsto→∅)≤0 +fori= 1,...,k−1. We also have ∆H(Sk/mapsto→∅)≤0, sinceSk=S=vand since ∆H(v/mapsto→∅)≤0, as observed +above. Taking into account that each uiis subpartition γ-dense by our inductive hypothesis, this implies that each +setSiis subpartition γ-dense. Since S=Skis subpartition γ-dense, node vis subpartition γ-dense. Hence, each node +v∈V/lscriptis subpartition γ-dense. This also holds for the nodes in the aggregate graph at the highest level in the Leiden +algorithm, which implies that all communities in Pt+1=Ptare subpartition γ-dense. In other words, Pt+1=Ptis +subpartition γ-dense.  +Subpartition γ-density does not imply node optimality. It guarantees only that ∆H(v/mapsto→∅)≤0for allv∈V, not +that ∆H(v/mapsto→D)≤0for allv∈Vand allD∈P. However, it is easy to see that all nodes are locally optimally +assigned in a stable iteration of the Leiden algorithm. This is stated in the following theorem. +Theorem 7. LetG= (V,E)be a graph, let Ptbe a flat partition of G, and let Pt+1=Leiden (G,Pt). IfPt+1=Pt, +thenPt+1=Ptis node optimal.21 +Proof.Suppose we have a stable iteration. Hence, Pt+1=Pt. We are going to give a proof by contradiction. Assume +thatPt+1=Ptis not node optimal. There then exists a node v∈C∈Ptand a community D∈Pt(orD=∅) +such that ∆H(v/mapsto→D)>0. The MoveNodesFast function then moves node vto community D. This means that +Pt+1/negationslash=Ptand that the iteration is not stable. We now have a contradiction, which implies that the assumption of +Pt+1=Ptnot being node optimal must be false. Hence, Pt+1=Ptis node optimal.  +In the same way, it is straightforward to see that the Louvain algorithm also guarantees node optimality in a stable +iteration. +When the Louvain algorithm reaches a stable iteration, the partition is γ-separated and node optimal. Since the +Louvain algorithm considers only moving nodes and merging communities, additional iterations of the algorithm will +not lead to further improvements of the partition. Hence, in the case of the Louvain algorithm, if Pt+1=Pt, then +Pτ=Ptfor allτ≥t. In other words, when the Louvain algorithm reaches a stable iteration, all future iterations will +be stable as well. This contrasts with the Leiden algorithm, which may continue to improve a partition after a stable +iteration. We consider this in more detail below. +3. Asymptotic guarantees +When an iteration of the Leiden algorithm is stable, this does not imply that the next iteration will also be stable. +Because of randomness in the refinement phase of the Leiden algorithm, a partition that is stable in one iteration +may be improved in the next iteration. However, at some point, a partition will be obtained for which the Leiden +algorithm is unable to make any further improvements. We call this an asymptotically stable partition. Below, we +prove that an asymptotically stable partition is uniformly γ-dense and subset optimal. +We first need to show what it means to define asymptotic properties for the Leiden algorithm. The Leiden algorithm +considers moving a node to a different community only if this results in a strict increase in the quality function. As +stated in the following lemma, this ensures that at some point the Leiden algorithm will find a partition for which it +can make no further improvements. +Lemma 8. LetG= (V,E)be a graph, and let Pt+1=Leiden (G,Pt). There exists a τsuch that Pt=Pτfor all +t≥τ. +Proof.Only strict improvements can be made in the Leiden algorithm. Consequently, if Pt+1/negationslash=Pt, thenPt+1/negationslash=Pt/prime +for allt/prime≤t. Assume that there does not exist a τsuch that Pt=Pτfor allt≥τ. Then for any τthere exists a +t>τsuch that Pt/negationslash=Pt/primefor allt/prime0for someD∈Por forD=∅. A setS⊆C∈Pis called a minimal non-optimal subset if +Sis a non-optimal subset and if there does not exist a non-optimal subset S/prime⊂S. +The following lemma states an important property of minimal non-optimal subsets. +Lemma 9. LetG= (V,E)be a graph, let Pbe a partition of G, and letS⊆C∈Pbe a minimal non-optimal +subset. Then{S}is an optimal partition of the subgraph induced by S. +Proof.Assume that{S}is not an optimal partition of the subgraph induced by S. There then exists a set S1∈S +such that +E(S1,S2)−γ/bardblS1/bardbl·/bardblS2/bardbl<0, (D2) +whereS2=S−S1. LetD∈PorD=∅such that ∆H(S→D)>0. Hence, +E(S,D)−γ/bardblS/bardbl·/bardblD/bardbl>E(S,C−S)−γ/bardblS/bardbl·/bardblC−S/bardbl. (D3)22 +BecauseSis a minimal non-optimal subset, S1andS2cannot be non-optimal subsets. Therefore, ∆H(S1→D)≤0 +and∆H(S2→D)≤0, or equivalently, +E(S1,D)−γ/bardblS1/bardbl·/bardblD/bardbl≤E(S1,C−S1)−γ/bardblS1/bardbl·/bardblC−S1/bardbl (D4) +and +E(S2,D)−γ/bardblS2/bardbl·/bardblD/bardbl≤E(S2,C−S2)−γ/bardblS2/bardbl·/bardblC−S2/bardbl. (D5) +It then follows from Eqs. (D4) and (D5) that +E(S,D)−γ/bardblS/bardbl·/bardblD/bardbl=/parenleftbig +E(S1,D)−γ/bardblS1/bardbl·/bardblD/bardbl/parenrightbig ++/parenleftbig +E(S2,D)−γ/bardblS2/bardbl·/bardblD/bardbl/parenrightbig +≤/parenleftbig +E(S1,C−S1)−γ/bardblS1/bardbl·/bardblC−S1/bardbl/parenrightbig ++/parenleftbig +E(S2,C−S2)−γ/bardblS2/bardbl·/bardblC−S2/bardbl/parenrightbig +. +This can be written as +E(S,D)−γ/bardblS/bardbl·/bardblD/bardbl≤/parenleftbig +E(S1,C−S) +E(S1,S2)−γ/bardblS1/bardbl·/bardblC−S/bardbl−γ/bardblS1/bardbl·/bardblS2/bardbl/parenrightbig ++/parenleftbig +E(S2,C−S) +E(S2,S1)−γ/bardblS2/bardbl·/bardblC−S/bardbl−γ/bardblS2/bardbl·/bardblS1/bardbl/parenrightbig +=E(S,C−S) + 2E(S1,S2)−γ/bardblS/bardbl·/bardblC−S/bardbl−2γ/bardblS1/bardbl·/bardblS2/bardbl. +Using Eq. (D2), we then obtain +E(S,D)−γ/bardblS/bardbl·/bardblD/bardbl30,000 software engineers , some of whom had installed and used -GitHub Copilot between the two waves of Microsoft’s bi-annual -Employee Signals Survey , combined with their survey responses -on satisfaction with the engineering systems . - -The 95% confidence interval for the difference -in-differences -estimate (the change for the adopters minus the change for the non - -adopters) was ( -2, 4.1), suggesting that Copilot did not have a -significant effect on employee satisfaction with the engineerin g -systems. In addition to not finding a statistically significant -difference, the study suggests that the true difference is less than a -4pt change, which is not considered substantial since the NSAT -scale can range from 0 to 200 and the average moves arou nd a few -points from survey wave to survey wave. This is perhaps -unsurprising since coding is just a part of what constitutes an -engineering system for most developers. For example, a prior study -found developers only spend 21% of their time writing code, with -the other time spent doing things like reviewing code, attending -meetings, doing email , and reading technical websites (Meyer et al. -2017). Satisfaction may have been driven primarily by the other -tools developers used. The lack of effect could also b e because -some of the users may have tried GitHub Copilot , but not used it -regularly or they lacked training or manager support for use . -A Selection of New Lab Studies -While the above research focuses on the use of generative AI in the -wild, we are also exploring in a lab setting some of the important -trends that real-world use highlights . Given AI ’s impact appears to -vary by role and function, several of these lab studies explore this, -diving more deeply into software development and extending th e -analysis to other important roles like sales and security. Further, -because Copilot is deployed globally, we ’re also starting to see -variation across languages, and thus presen t research studies -looking at AI in multilingual contexts. Finally, the complex trade - -offs people are starting to make to incorporate AI into their work -practices suggests the cognitive mechanisms underlying its use are -important to understand, and we share some earl y work in that -space as well . -Comparing the Effect of Different Task Types on Effective Use -of GitHub Copilot (Steven Clarke and Ben Hanrahan ) -This study investigated the conditions under which a developer -might expect to benefit most from GitHub Copilot. The authors -recruited 23 Java developers with at least one year of professional -experience and asked them to perform one of two different tasks. -Half worked on a task that involved writing new code using familiar -components and concepts , and the other half worked on a different -task that involved modifying existing code using unfamiliar -components and concepts. For each task, h alf of the participants -completed the task using Copilot and the other half did not use it. - -All participants were allowed to use any online resources they -wanted, but those in the Copilot group were first given a 10 -minute -overview of GitHub Copilot and encouraged to use that. Even with -these small sample sizes, the researchers found evidence that the type of task matters for the impact that Copilot has on the -developer. With the familiar task Copilot use resulted in 36% time - -savings (p<.05) and 48% fewer issues (p=.12). In contrast , no -substantial difference was observed between Copilot and non- -Copilot groups for the less familiar task . -Understanding the Impact Copilot for Security Has for -Security Professionals (Ben Edelman, James Bono, Sida Peng, -Roberto Rodriguez, and Sandra Ho) -More details available in Randomized Controlled Trials for -Microsoft Copilot for Security (Edelman et al. 2024) -Looking at Copilot in the context of another role, security, -researchers extended the lab experiments reported in the first AI -and Productivity Report studying Copilot for Security from security -novices to security professionals . Participants were recruited -through a staffing agency that provides security services to large -companies , allowing t his new lab study to focus on people who -currently use security tools as part of their day -to-day jobs. - -Of the 147 security professional participants, three -quarters had 5 -or more years of experience as a security analyst. Participants -logged into an instance of Microsoft’s security service platform, -Microsoft Defender, that was created for this experiment. There -they performed various tasks, including writing a summary of the -incident and answering multiple -choice questions about it. Those -with Copilot were 7% more accurate on the multiple -choice -questions (p<.05). Researchers also asked experts for a list o f key -facts that should have been included in an incident summary. Study -participants with Copilot included 49% more of those key facts in -their incident summary reports (p<.05). Because i t is uninformative -to compare speeds across groups when one group is systematically -more accurate than another , the researchers looked at quality - -adjusted completion times and f ound that subjects with Copilot -were 23% faster overall (p<.05 ). - -Compared with the previous study looking at security novices , the -security professionals in this study experienced significantly -smaller accuracy gains. This is unsurprising given security -professionals are more skilled in the tasks and therefore have less -room for improvement. Nonetheless , the results show that Copilot -allowed professionals to increase their speed without sacrificing -accuracy. -Experiment with Licensing Chatbot for Sellers (Donald Ngwe, -Ried Peckham, Ulrike Gruber -Gremlich, and Tyler Smith ) -We next turn to Copilot implications in the sales function. -Researchers conducted a lab study to understand how a “licensing -chatbot,” trained on a corpus of materials around Microsoft’s -licensing policies , facilitated sellers’ ability to answer customer -questions. The study asked 64 Microsoft sellers to answer both -multiple-choice and open -ended questions in a Qualtrics survey -designed to simulate questions that a customer might ask. Sellers -were randomly assigned to either have or not have access to the -chatbot. - Jaffe et al. 2024 - -8 - Having the chatbot improved both speed and accuracy. Sellers with -the chatbot answered multiple choice questions 3.4 minutes (39%, -p<.05) faster and accuracy improved by 25 percentage points -(p<.05). In the open -ended questions, speed, accuracy, -completene ss, and suitability ratings all improved 34 -56% (p<.05). -These results suggest a positive potential for AI in sales workflows -of managing customer sales calls, with potential implications for -revenue and customer satisfaction outcomes. -The Effect of Copilot in a Multi -lingual Context (Benjamin -Edelman and Donald Ngwe) -Another important source of variation i s language. Researchers -explored Copilot in multilingual contexts, examining how Copilot -can facilitate collaboration between colleagues with different -native languages. - -First, researchers asked 77 native Japanese speakers to review a -meeting recorded in English . Half the participants had to watch and -listen to the video. The other half could use Copilot Meeting Recap, -which gave them an AI meeting summary as well as a chatbot to -answer questions about the meeting. Then, researchers asked 83 -other native Japanese speakers to review a similar meeting, -following the same script, but this time held in Japanese by native -Japanese speakers. Again, half of participants had access to -Copilot. - -For the meeting in English , participants with Copilot answered -16.4% more multiple -choice questions about the meeting correctly, -and they were more than twice as likely to get a perfect score. -Moreover , in comparing accuracy between the two scenarios, -people listening to a meeting in English with Copilot achieved -97.5% accuracy, slightly more accurate than people listening to a -meeting in their native Japanese using standard tools (94.8%). This -is a statistically significant difference (p<.05). The changes are -somewhat small in percentage point terms because the baseline -accuracy is so high, but Copilot closed 38.5% of the gap to perfect -accuracy for those working in their native language (p<0.10) and -closed 84.6% of the gap for those working in (non -native) English -(p<.05). - -The role of Copilot in communication for non -native speakers has -also come up in researchers’ interviews with people using Copilot -in their day -to-day work. At global companies, Copilot may help -people feel more confident that they are communicating -effectively. That said, Copilot also raises concerns about potentially -increasing the dominance of majority languages: in interviews -conducted by other researchers at Microsoft, some people reported -changing the language in which meetings were held to one where -Copilot was more effective. This effect might shrink or go away as -model performance in other languages improves, and improving -model performance in non -English languages is a major direction -of research at Microsoft and around the world (e.g. , Ahuja et al. -2023). Impact of Generative AI on Metacognition (Lev Tankelevitch, -Viktor Kewenig, Auste Simkute, Ava Elizabeth Scott, Advait Sarkar, -Abigail Sellen, and Sean Rintel) -More details available in The Metacognitive Demands and -Opportunities of Generative AI (Tankelevitch , Kewenig et al. 2024) -Metacognitive demand —the effort needed for monitoring and -controlling of one’s thoughts and processes —is a part of cognitive -load, the total amount of mental effort exerted during tasks. In a -review paper (published at the recent ACM SIGCHI 2024 -conference) drawing on research in psychology, cognitive science, -and the first wave of generative AI lab studies, researcher s explored -how generative AI (not Copilot specifically) changes the -metacognitive demands of a task. For example, prompt -engineering, prompt iteration, and output evaluation all require -metacognitive effort that may not be needed when doing a task -without assistance. This includes work such as developing explicit -awareness of task goals, task decomposition, and gaining well - -adjusted confidence in one’s ability to evaluate the output. -Moreover, the availability of generative AI tools creates a more -general b urden of deciding how to apply these tools to tasks and -workflows. To do so “users must have self -awareness of the -applicability and potential impact of using GenAI for their -workflow; well -adjusted confidence in the ability to complete a -task manually ver sus with GenAI; and metacognitive flexibility in -adapting workflows to GenAI.” - -The researchers suggest that the metacognitive demands of -generative AI can be addressed both by improving users’ -metacognitive abilities and by reducing the metacognitive demands -of the tools. Tools could improve metacognitive ability around task -decompos ition, for example, by responding to a prompt with a list -of common subtasks and soliciting (optional) input from the user -for each subtask. - -The metacognitive demands of AI tools can be further reduced by -improving explainability, which can help users calibrate their -confidence in outputs and prompting techniques, and self - -evaluation or co -auditing. Customizability can either increase or -decrease metacognitive demands depending on the context; -customizability may make the tool more fitted to the user’s task and -ability, reducing the metacognitive work of prompting and -evaluating, but making customization decisions can also add to -cognitive load. As usage spreads and the tools develop, the authors -argue that research is needed to understand how tools affect -different users’ metacognitive processes and what design decisions -can lighten the load. -Impact of Copilot on Cognitive Load (Madeline Kleiner, Max -Meijer, Katie Rotella, and Nora Presson) -One study asked about and tried to measure metacognitive load -directly. In this study, 40 Microsoft employees who volunteered for -the study created a sales report in Word based on data in an Excel -spreadsheet (using a sample report for reference). Half of the -participants had access to Copilot and half did not. In addition to -measuring time and accuracy, the study asked participants about Generative AI in Real -World Workplaces Microsoft Technical Report - -9 - how demanding, hard, stressful, and rushed the task was, and the -study administered a Stroop test as a measure of participants’ -cognitive load (Scarpina and Tagini 2017). A Stroop test measures -participants response times and error rates in a quick classif ication -task to try to measure the cognitive load they experienced prior to -the test. - -Participants with Copilot reported the task was less mentally -demanding on average (30 out of 100) than the control group (55 -out of 100). The improvements for perceived stress and difficulty -were similar, with an even larger difference (28 vs. 67 out of 1 00) -for how rushed the task felt. All reported differences have t -test -with p<.05. It seems that , contrary to the concerns raised in the -previous section, in this case the direct help from Copilot counter - -balanced or outweighed any increase in metacognitiv e load. -Interestingly, the researchers did not find a difference in the -average Stroop score. It is possible that while Copilot made the task -feel easier and more enjoyable, it did not affect participants’ ability -to do the subsequent task. Alternatively, there ma y have been a -small effect on the Stroop score that the study did not have the -statistical power to detect, or the Stroop score did not capture the -effects observed by the participants in the survey. -4 DISCUSSION -We now look across the studies discussed individual ly in this report -to further explore common themes. Collectively , the studies -suggest generative AI is already having positive effects on real- -world productivity and begin to highlight the complexity in these -effects that emerge from taking a more complete view of work via -field research. -As noted above, m ost previous research in this space relied on lab -studies, which b y and large provide insight into just a small subset -of the tasks people perform as part of their everyday work. The -tasks studied in the lab, for example, have tended to require only -general knowledge and skill s. In contrast, tasks done in the course -of work often require highly-specific knowledge and skills. The -current generation of generative AI models have been trained -primarily on public data, which means they perform best on the -types of generic tasks used in these lab studies. Although t he gains -observed on those tasks in the lab appear to be translating at least -to some extent to the real-world tasks that people actually do , it will -be important to continue studying AI’s impact as models begin to -become tailored to perform even better within specific -organizational contexts or domains. - -More generally, t he tasks studied in the lab thus far have tended to -be those for which researchers hypothesized generative AI would -perform well . This was, in fact, the focus of most of the studies -presented in the first AI and Productivity report we published -(Cambon et al. 2023) . Actual information work , however, often -includes a huge variety of tasks and much of the unstructured and -informal work in people’s jobs is not yet directly supported by the -first-generation of generative AI tools. Software developer -workflows , for example, involve far more than the hands-on coding supported by GitHub Copilot (Meyer et al. 2017). The ability to -shed light on generative AI's productivity dynamics in the natural -complexity of entire workflows is a key advantage of field studies -of generative AI’s productivity impacts , and a major reason we -hope to see many more field studies emerging in the literature. - -When we look at AI’s use in the context of real workflows, we see -that context matters a lot. We discussed some initial findings on -differences in generative AI usage and effects by an individual’s -role or function . These findings raise interesting questions in terms -of how different roles and functions will find value from generative -AI, in terms of efficiencies and also innovation gains . There is an -opportunity to further study which individuals and business -processes benefit most from AI, and how organiz ational leaders can -enable and encourage AI’s productive use. There are also likely -many additional sources of heterogeneity, including, for instance , -individuals’ personalities or the general conditions of the business , -e.g. as in Otis et al. (2024). - -Assuming generative AI follows the path of most general purpose -technologies (Brynjolfsson and McAfee 2014) , workflows will , -looking forward, be substantially redesigned to better integrate AI. -Furthermore, generative AI is still under development and the tools -that make use of it are improving rapidly . This means not only that -the long-term effects of AI on productivity will differ from those -observed in the short -term, but that we are likely to continue to see -differences between local task effects and mo re global productivity -effects. Research should try to capture and inform change s in -workflows , task design , and business processes in addition to -productivity effects for fixed tasks. - -One result seen in the above studies and those in our prior work is -the common disconnect between the time savings people report -from Copilot use and the actual time savings measure d. This has -been observed not only across studies, where survey measures -about time saved tend to be larger than telemetry -based measures, -but also within a given study where researchers collect both survey -and telemetry measures of time saved on a specific task. There are -several potential explanations for these effects, deserving of study. -People may enjoy the experience or be excited by the pursuit of the -‘answer’ with Copilot, which can reduce or speed perceptions of -time (Nak amura and Csikszentmihalyi 2002; Gable and Poole -2012). Copilot may also make time appear to go faster as people -find it easier to extract and process information (Block et al. 2018; -Matthews and Meck 2016) , and as people gain experience with -Copilot or use more Copilot apps they may perceive increased time -savings due to increased ease of use. - -An important limitation of the above research and much of the -literature on AI and productivity is the near total focus on individual -work. The large Early Access Program Telemetry Study described -above has some preliminary results on document collaboration, and -the researchers are exploring extending their analysis to consider -how Copilot affects collaboration networks more broadly, -including Outlook and Teams connections. However, given that -much of the information work people do is collaborative , it will be Jaffe et al. 2024 - -10 - important to further foreground the study of AI’s impact on teams -and organizations going forward . Additional research is required to -understand AI’s impact on cross-functional knowledge and -cooperation , the social cohesion of teams , and the way information -flows across organizations , all of which have implications for -growth, productivity and innovation . -5 CONCLUSION -This report provides an overview of the findings from a set of new -Microsoft studies that examine the impact of generative AI on -information work. It is our second report on the topic, and while the -first (Cambon et al. 2023) focused on lab studies, this one focuses -on the application of generative AI in real-world workplace s. -Across all of the studies discussed, t he results suggest that the -positive productivity effects that have been observed in a lab setting -are beginning to manifest in real -world work. These gains appear -to vary contextually (e.g., by role or usage), and these variations -indicate there are ways for individuals, organizations, and tool -providers to incorporate generative AI in new ways that produce -even larger productivity gains for an even wider array of people. -REFERENCES -Ahuja, K., Diddee, H., Hada, R., Ochieng, M., Ramesh, K., Jain, P., Nambi, A., Ganu, -T., Segal, S., Axmed, M., Bali, K. & Sitaram, S. (2023). MEGA: Multilingual -Evaluation of Generative AI. EMNLP 2023. -Anderson, A., Noa Guevara, J., Moussaoui, F., Li, T., Vorvoreanu, M., & Burnett, M. -(2024). Measuring User Experience Inclusivity in Human -AI Interaction via Five -User Problem -Solving Styles. ACM Transactions on Interactive Intelligent -Systems. https://doi.org/10.1145/3663740 . -Anderson, L.W. & Krathwohl, D.R . (Eds.) (2001). A Taxonomy for Learning, -Teaching, and Assessing: A Revision of Bloom’s Taxonomy of Educational -Objectives. Allyn & Bacon. (Pearson Education Group) . -Block, R.A., Grondin, S., & Zakay, D. (2018). Prospective and Retrospective Timing -Processes: Theories, Methods, and Findings. In Timing and Time Perception: -Procedures, Measures, & Applications , pp. 32-51. Brill. -Brynjolfsson, E., Li, D., & Raymond, L.R. (2023). Generative AI at Work. National -Bureau of Economic Research . https://www.nber.org/papers/w31161 -Brynjolfsson, E . & McAfee, A. (2014). The Second Machine Age: Work, Progress, -and Prosperity in a Time of Brilliant Technologies. 1 st edition. W. W. Norton & -Company . -Burnett, M., Stumpf, S., Macbeth , J., Makri, S., Beckwith , L., Kwan, I., Peters, A., & -Jernigan, W. (2016). GenderMag: A Method for Evaluating -Software's Gender Inclusiveness . In Interacting with Computers , 28(6), 760– -787. https://doi.org/10.1093/iwc/iwv046 . -Cambon, A., Hecht, B., Edelman, B., Ngwe, D., Jaffe, S., Heger, A., Mihaela -Vorvoreanu, M., et al. (2023). Early LLM -Based Tools for Enterprise -Information Workers Likely Provide Meaningful Boosts to Productivity . -https://www.microsoft.com/en -us/research/publication/early -llm-based-tools- -for-enterprise -information -workers-likely-provide-meaningful -boosts-to- -productivity/ . -Dell'Acqua, F ., McFowland III, E ., Mollick, E.R., Lifshitz-Assaf, H., Kellogg, K ., -Rajendran, S ., Krayer, L ., Candelon, F ., & Lakhani, K . R. (2023). Navigating the -Jagged Technological Frontier: Field Experimental Evidence of the Effects of AI -on Knowledge Worker Productivity and Quality . Available at SSRN: -https://ssrn.com/abstract=4573321 . -Doshi, A.R. & Hauser, O . (2023). Generative Artificial Intelligence Enhances -Creativity but Reduces the Diversity of Novel Content. Available at SSRN: -https://ssrn.com/abstract=4535536 . -Edelman, B , Bono, J., Peng, S., Rodriguez, R . & Ho, S. (2024). Randomized -Controlled Trials for Microsoft Copilot for Security . Available at SSRN: -https://ssrn.com/abstract=4648700 . -Gable, P. A., & Poole, B. D. (2012). Time Flies When You’re Having Approach- -Motivated Fun. Psychological Science, 23 (8), 879–886. -https://doi.org/10.1177/0956797611435817 . -Khemka, M. & Houck, B. (2024). Toward Effective AI Support for Developers: A -Survey of Desires and Concerns . Queue 22(3), 53-78. -https://doi.org/10.1145/3675416 . Matthews, W. J., & Meck, W. H. (2016). Temporal Cognition: Connecting Subjective -Time to Perception, Attention, and Memory. Psychological Bulletin, 142(8), 865. -McMahon, C ., Johnson, I., & Hecht, B. (2017). The Substantial Interdependence of -Wikipedia and Google – A Case Study on the Relationship Between Peer -Production Communities and Information Technologies. Proceedings of the -International AAAI Conference on Web and Social Media, 11(1), 142 -151. -https://doi.org/10.1609/icwsm.v11i1.14883 . -Meyer, A., Barton, L. E., Murphy, G. C., Zimmermann, T., and Fritz, T. (2017). The -Work Life of Developers: Activities, Switches and Perceived Productivity. IEEE -Transactions on Software Engineering , 43(12), 1178-1193. -Microsoft. (2024, July 9). AI Data Drop: The 11 -by-11 Tipping Point. Retrieved July -9, 2024, from https://www.microsoft.com/en -us/worklab/ai -data-drop-the-11- -by-11-tipping-point. -Microsoft & LinkedIn. (2024, May 8). AI at Work Is Here. Now Comes the Hard Part . -https://www.microsoft.com/en -us/worklab/work -trend-index/ai-at-work-is-here- -now-comes-the-hard-part. -Nakamura, J., & Csikszentmihalyi, M. (2002). The Concept of Flow. Handbook of -Positive Psychology, 89 -105. -Noy, S., & Zhang, W. (2023). Experimental Evidence on the Productivity Effects of -Generative Artificial Intelligence. Science , 381(6654), 187-192. -Otis, N., Clarke, R. P., Delecourt, S., Holtz, D., & Koning, R. (2024). The Uneven -Impact of Generative AI on Entrepreneurial Performance. Available at SSRN : -https://ssrn.com/abstract=4671369 . -Peng, S., Kalliamvakou, E., Cihon, P., & Demirer, M. (2023). The Impact of AI on -Developer Productivity: Evidence from GitHub Copilot. arXiv preprint. -https://doi.org/10.48550/arXiv.2302.06590 . -Rio-Chanona, M., Laurentsyeva, N., & Wachs, J. (2023). Are Large Language Models -a Threat to Digital Public Goods? Evidence from Activity on Stack Overflow. -arXiv preprint. https://doi.org/10.48550/arXiv.2307.07367 . -Scarpina, F. & Tagini S. (2017). The Stroop Color and Word Test. Frontiers in -Psychology , 8, 557. https://doi.org/10.3389/fpsyg.2017.00557 . -Suri, S., Counts, S., Wang, L., Chen, C., Wan, M., Safavi, T., & Yang, L. (2024). The -Use of Generative Search Engines for Knowledge Work and Complex -Tasks. arXiv preprint. https://doi.org/10.48550/arXiv.2404.04268 . -Tankelevitch *, L., Kewenig *, V., Simkute, A., Scott, A. E., Sarkar, A., Sellen, A., & -Rintel, S. (2024). The Metacognitive Demands and Opportunities of Generative -AI. In Proceedings of the CHI Conference on Human Factors in Computing -Systems (pp. 1-24). https://doi.org/10.1145/3613904.3642902 . -Taraborelli, D. (2015). The Sum of All Human Knowledge in the Age of Machines: A -New Research Agenda for Wikimedia. ICWSM -15 Workshop on Wikipedia, a -Social Pedia: Research Challenges and Opportunities . -Vincent, N. (2022, December 2). The Paradox of Reuse, Language Models Edition. -Data Leverage (blog). https://dataleverage.substack.com/p/the -paradox-of-reuse- -language-models-edition. -Wiles, E. & Horton, J. (2024). More, but Worse: The Impact of AI Writing Assistance -on the Supply and Quality of Job Posts. -https://emmawiles.github.io/storage/jobot.pdf -Yeverechyahu, D., & Mayya, R., & Oestreicher -Singer, G. (2024). The Impact of -Large Language Models on Open -Source Innovation: Evidence from GitHub -Copilot. Available at SSRN: https://ssrn.com/abstract=4684662 . - \ No newline at end of file diff --git a/graphfleet/input/GraphRAG.txt b/graphfleet/input/GraphRAG.txt new file mode 100644 index 000000000..6f3ca003e --- /dev/null +++ b/graphfleet/input/GraphRAG.txt @@ -0,0 +1,731 @@ +From Local to Global: A Graph RAG Approach to +Query-Focused Summarization +Darren Edge1†Ha Trinh1†Newman Cheng2Joshua Bradley2Alex Chao3 +Apurva Mody3Steven Truitt2 +Jonathan Larson1 +1Microsoft Research +2Microsoft Strategic Missions and Technologies +3Microsoft Office of the CTO +{daedge,trinhha,newmancheng,joshbradley,achao,moapurva,steventruitt,jolarso } +@microsoft.com +†These authors contributed equally to this work +Abstract +The use of retrieval-augmented generation (RAG) to retrieve relevant informa- +tion from an external knowledge source enables large language models (LLMs) +to answer questions over private and/or previously unseen document collections. +However, RAG fails on global questions directed at an entire text corpus, such +as “What are the main themes in the dataset?”, since this is inherently a query- +focused summarization (QFS) task, rather than an explicit retrieval task. Prior +QFS methods, meanwhile, fail to scale to the quantities of text indexed by typical +RAG systems. To combine the strengths of these contrasting methods, we propose +a Graph RAG approach to question answering over private text corpora that scales +with both the generality of user questions and the quantity of source text to be in- +dexed. Our approach uses an LLM to build a graph-based text index in two stages: +first to derive an entity knowledge graph from the source documents, then to pre- +generate community summaries for all groups of closely-related entities. Given a +question, each community summary is used to generate a partial response, before +all partial responses are again summarized in a final response to the user. For a +class of global sensemaking questions over datasets in the 1 million token range, +we show that Graph RAG leads to substantial improvements over a na ¨ıve RAG +baseline for both the comprehensiveness and diversity of generated answers. An +open-source, Python-based implementation of both global and local Graph RAG +approaches is forthcoming at https://aka .ms/graphrag . +1 Introduction +Human endeavors across a range of domains rely on our ability to read and reason about large +collections of documents, often reaching conclusions that go beyond anything stated in the source +texts themselves. With the emergence of large language models (LLMs), we are already witnessing +attempts to automate human-like sensemaking in complex domains like scientific discovery (Mi- +crosoft, 2023) and intelligence analysis (Ranade and Joshi, 2023), where sensemaking is defined as +Preprint. Under review.arXiv:2404.16130v1 [cs.CL] 24 Apr 2024Source Documents +Text Chunkstext extraction +and chunking +Element Instancesdomain-tailored +summarization +Element Summariesdomain-tailored +summarization +Graph Communitiescommunity +detectionCommunity Summaries +domain-tailored +summarizationCommunity Answers +query-focused +summarizationGlobal Answer +query-focused +summarization +Indexing Time Query Time Pipeline Stage +Figure 1: Graph RAG pipeline using an LLM-derived graph index of source document text. This +index spans nodes (e.g., entities), edges (e.g., relationships), and covariates (e.g., claims) that have +been detected, extracted, and summarized by LLM prompts tailored to the domain of the dataset. +Community detection (e.g., Leiden, Traag et al., 2019) is used to partition the graph index into +groups of elements (nodes, edges, covariates) that the LLM can summarize in parallel at both index- +ing time and query time. The “global answer” to a given query is produced using a final round of +query-focused summarization over all community summaries reporting relevance to that query. +“a motivated, continuous effort to understand connections (which can be among people, places, and +events) in order to anticipate their trajectories and act effectively ” (Klein et al., 2006a). Supporting +human-led sensemaking over entire text corpora, however, needs a way for people to both apply and +refine their mental model of the data (Klein et al., 2006b) by asking questions of a global nature. +Retrieval-augmented generation (RAG, Lewis et al., 2020) is an established approach to answering +user questions over entire datasets, but it is designed for situations where these answers are contained +locally within regions of text whose retrieval provides sufficient grounding for the generation task. +Instead, a more appropriate task framing is query-focused summarization (QFS, Dang, 2006), and in +particular, query-focused abstractive summarization that generates natural language summaries and +not just concatenated excerpts (Baumel et al., 2018; Laskar et al., 2020; Yao et al., 2017) . In recent +years, however, such distinctions between summarization tasks that are abstractive versus extractive, +generic versus query-focused, and single-document versus multi-document, have become less rele- +vant. While early applications of the transformer architecture showed substantial improvements on +the state-of-the-art for all such summarization tasks (Goodwin et al., 2020; Laskar et al., 2022; Liu +and Lapata, 2019), these tasks are now trivialized by modern LLMs, including the GPT (Achiam +et al., 2023; Brown et al., 2020), Llama (Touvron et al., 2023), and Gemini (Anil et al., 2023) series, +all of which can use in-context learning to summarize any content provided in their context window. +The challenge remains, however, for query-focused abstractive summarization over an entire corpus. +Such volumes of text can greatly exceed the limits of LLM context windows, and the expansion of +such windows may not be enough given that information can be “lost in the middle” of longer +contexts (Kuratov et al., 2024; Liu et al., 2023). In addition, although the direct retrieval of text +chunks in na ¨ıve RAG is likely inadequate for QFS tasks, it is possible that an alternative form of +pre-indexing could support a new RAG approach specifically targeting global summarization. +In this paper, we present a Graph RAG approach based on global summarization of an LLM-derived +knowledge graph (Figure 1). In contrast with related work that exploits the structured retrieval +and traversal affordances of graph indexes (subsection 4.2), we focus on a previously unexplored +quality of graphs in this context: their inherent modularity (Newman, 2006) and the ability of com- +munity detection algorithms to partition graphs into modular communities of closely-related nodes +(e.g., Louvain, Blondel et al., 2008; Leiden, Traag et al., 2019). LLM-generated summaries of these +20 1 2 30100002000030000 +Number of gleanings performedEntity references detected600 chunk size +1200 chunk size +2400 chunk size +Figure 2: How the entity references detected in the HotPotQA dataset (Yang et al., 2018) +varies with chunk size and gleanings for our generic entity extraction prompt with gpt-4-turbo . +community descriptions provide complete coverage of the underlying graph index and the input doc- +uments it represents. Query-focused summarization of an entire corpus is then made possible using +a map-reduce approach: first using each community summary to answer the query independently +and in parallel, then summarizing all relevant partial answers into a final global answer. +To evaluate this approach, we used an LLM to generate a diverse set of activity-centered sense- +making questions from short descriptions of two representative real-world datasets, containing pod- +cast transcripts and news articles respectively. For the target qualities of comprehensiveness, diver- +sity, and empowerment (defined in subsection 3.4) that develop understanding of broad issues and +themes, we both explore the impact of varying the the hierarchical level of community summaries +used to answer queries, as well as compare to na ¨ıve RAG and global map-reduce summarization +of source texts. We show that all global approaches outperform na ¨ıve RAG on comprehensiveness +and diversity, and that Graph RAG with intermediate- and low-level community summaries shows +favorable performance over source text summarization on these same metrics, at lower token costs. +2 Graph RAG Approach & Pipeline +We now unpack the high-level data flow of the Graph RAG approach (Figure 1) and pipeline, de- +scribing key design parameters, techniques, and implementation details for each step. +2.1 Source Documents →Text Chunks +A fundamental design decision is the granularity with which input texts extracted from source doc- +uments should be split into text chunks for processing. In the following step, each of these chunks +will be passed to a set of LLM prompts designed to extract the various elements of a graph index. +Longer text chunks require fewer LLM calls for such extraction, but suffer from the recall degrada- +tion of longer LLM context windows (Kuratov et al., 2024; Liu et al., 2023). This behavior can be +observed in Figure 2 in the case of a single extraction round (i.e., with zero gleanings): on a sample +dataset (HotPotQA, Yang et al., 2018), using a chunk size of 600 token extracted almost twice as +many entity references as when using a chunk size of 2400. While more references are generally +better, any extraction process needs to balance recall and precision for the target activity. +2.2 Text Chunks →Element Instances +The baseline requirement for this step is to identify and extract instances of graph nodes and edges +from each chunk of source text. We do this using a multipart LLM prompt that first identifies all +entities in the text, including their name, type, and description, before identifying all relationships +between clearly-related entities, including the source and target entities and a description of their +relationship. Both kinds of element instance are output in a single list of delimited tuples. +The primary opportunity to tailor this prompt to the domain of the document corpus lies in the +choice of few-shot examples provided to the LLM for in-context learning (Brown et al., 2020). +3For example, while our default prompt extracting the broad class of “named entities” like people, +places, and organizations is generally applicable, domains with specialized knowledge (e.g., science, +medicine, law) will benefit from few-shot examples specialized to those domains. We also support +a secondary extraction prompt for any additional covariates we would like to associate with the +extracted node instances. Our default covariate prompt aims to extract claims linked to detected +entities, including the subject, object, type, description, source text span, and start and end dates. +To balance the needs of efficiency and quality, we use multiple rounds of “gleanings”, up to a +specified maximum, to encourage the LLM to detect any additional entities it may have missed +on prior extraction rounds. This is a multi-stage process in which we first ask the LLM to assess +whether all entities were extracted, using a logit bias of 100 to force a yes/no decision. If the LLM +responds that entities were missed, then a continuation indicating that “MANY entities were missed +in the last extraction” encourages the LLM to glean these missing entities. This approach allows us +to use larger chunk sizes without a drop in quality (Figure 2) or the forced introduction of noise. +2.3 Element Instances →Element Summaries +The use of an LLM to “extract” descriptions of entities, relationships, and claims represented in +source texts is already a form of abstractive summarization, relying on the LLM to create inde- +pendently meaningful summaries of concepts that may be implied but not stated by the text itself +(e.g., the presence of implied relationships). To convert all such instance-level summaries into sin- +gle blocks of descriptive text for each graph element (i.e., entity node, relationship edge, and claim +covariate) requires a further round of LLM summarization over matching groups of instances. +A potential concern at this stage is that the LLM may not consistently extract references to the +same entity in the same text format, resulting in duplicate entity elements and thus duplicate nodes +in the entity graph. However, since all closely-related “communities” of entities will be detected +and summarized in the following step, and given that LLMs can understand the common entity +behind multiple name variations, our overall approach is resilient to such variations provided there +is sufficient connectivity from all variations to a shared set of closely-related entities. +Overall, our use of rich descriptive text for homogeneous nodes in a potentially noisy graph structure +is aligned with both the capabilities of LLMs and the needs of global, query-focused summarization. +These qualities also differentiate our graph index from typical knowledge graphs, which rely on +concise and consistent knowledge triples (subject, predicate, object) for downstream reasoning tasks. +2.4 Element Summaries →Graph Communities +The index created in the previous step can be modelled as an homogeneous undirected weighted +graph in which entity nodes are connected by relationship edges, with edge weights representing the +normalized counts of detected relationship instances. Given such a graph, a variety of community +detection algorithms may be used to partition the graph into communities of nodes with stronger +connections to one another than to the other nodes in the graph (e.g., see the surveys by Fortu- +nato, 2010 and Jin et al., 2021). In our pipeline, we use Leiden (Traag et al., 2019) on account of +its ability to recover hierarchical community structure of large-scale graphs efficiently (Figure 3). +Each level of this hierarchy provides a community partition that covers the nodes of the graph in a +mutually-exclusive, collective-exhaustive way, enabling divide-and-conquer global summarization. +2.5 Graph Communities →Community Summaries +The next step is to create report-like summaries of each community in the Leiden hierarchy, using +a method designed to scale to very large datasets. These summaries are independently useful in +their own right as a way to understand the global structure and semantics of the dataset, and may +themselves be used to make sense of a corpus in the absence of a question. For example, a user +may scan through community summaries at one level looking for general themes of interest, then +follow links to the reports at the lower level that provide more details for each of the subtopics. Here, +however, we focus on their utility as part of a graph-based index used for answering global queries. +Community summaries are generated in the following way: +4(a) Root communities at level 0 (b) Sub-communities at level 1 +Figure 3: Graph communities detected using the Leiden algorithm (Traag et al., 2019) over the +MultiHop-RAG (Tang and Yang, 2024) dataset as indexed. Circles represent entity nodes with size +proportional to their degree. Node layout was performed via OpenORD (Martin et al., 2011) and +Force Atlas 2 (Jacomy et al., 2014). Node colors represent entity communities, shown at two levels +of hierarchical clustering: (a) Level 0, corresponding to the hierarchical partition with maximum +modularity, and (b) Level 1, which reveals internal structure within these root-level communities. +•Leaf-level communities . The element summaries of a leaf-level community (nodes, edges, +covariates) are prioritized and then iteratively added to the LLM context window until +the token limit is reached. The prioritization is as follows: for each community edge in +decreasing order of combined source and target node degree (i.e., overall prominance), add +descriptions of the source node, target node, linked covariates, and the edge itself. +•Higher-level communities . If all element summaries fit within the token limit of the con- +text window, proceed as for leaf-level communities and summarize all element summaries +within the community. Otherwise, rank sub-communities in decreasing order of element +summary tokens and iteratively substitute sub-community summaries (shorter) for their +associated element summaries (longer) until fit within the context window is achieved. +2.6 Community Summaries →Community Answers →Global Answer +Given a user query, the community summaries generated in the previous step can be used to generate +a final answer in a multi-stage process. The hierarchical nature of the community structure also +means that questions can be answered using the community summaries from different levels, raising +the question of whether a particular level in the hierarchical community structure offers the best +balance of summary detail and scope for general sensemaking questions (evaluated in section 3). +For a given community level, the global answer to any user query is generated as follows: +•Prepare community summaries . Community summaries are randomly shuffled and divided +into chunks of pre-specified token size. This ensures relevant information is distributed +across chunks, rather than concentrated (and potentially lost) in a single context window. +•Map community answers . Generate intermediate answers in parallel, one for each chunk. +The LLM is also asked to generate a score between 0-100 indicating how helpful the gen- +erated answer is in answering the target question. Answers with score 0 are filtered out. +•Reduce to global answer . Intermediate community answers are sorted in descending order +of helpfulness score and iteratively added into a new context window until the token limit +is reached. This final context is used to generate the global answer returned to the user. +5Dataset Example activity framing and generation of global sensemaking questions +Podcast +transcriptsUser : A tech journalist looking for insights and trends in the tech industry +Task: Understanding how tech leaders view the role of policy and regulation +Questions : +1. Which episodes deal primarily with tech policy and government regulation? +2. How do guests perceive the impact of privacy laws on technology development? +3. Do any guests discuss the balance between innovation and ethical considerations? +4. What are the suggested changes to current policies mentioned by the guests? +5. Are collaborations between tech companies and governments discussed and how? +News +articlesUser : Educator incorporating current affairs into curricula +Task: Teaching about health and wellness +Questions : +1. What current topics in health can be integrated into health education curricula? +2. How do news articles address the concepts of preventive medicine and wellness? +3. Are there examples of health articles that contradict each other, and if so, why? +4. What insights can be gleaned about public health priorities based on news coverage? +5. How can educators use the dataset to highlight the importance of health literacy? +Table 1: Examples of potential users, tasks, and questions generated by the LLM based on short +descriptions of the target datasets. Questions target global understanding rather than specific details. +3 Evaluation +3.1 Datasets +We selected two datasets in the one million token range, each equivalent to about 10 novels of text +and representative of the kind of corpora that users may encounter in their real world activities: +•Podcast transcripts . Compiled transcripts of podcast conversations between Kevin Scott, +Microsoft CTO, and other technology leaders (Behind the Tech, Scott, 2024). Size: 1669 +×600-token text chunks, with 100-token overlaps between chunks ( ∼1 million tokens). +•News articles . Benchmark dataset comprising news articles published from September +2013 to December 2023 in a range of categories, including entertainment, business, sports, +technology, health, and science (MultiHop-RAG; Tang and Yang, 2024). Size: 3197 × +600-token text chunks, with 100-token overlaps between chunks ( ∼1.7 million tokens). +3.2 Queries +Many benchmark datasets for open-domain question answering exist, including HotPotQA (Yang +et al., 2018), MultiHop-RAG (Tang and Yang, 2024), and MT-Bench (Zheng et al., 2024). However, +the associated question sets target explicit fact retrieval rather than summarization for the purpose +of data sensemaking, i.e., the process though which people inspect, engage with, and contextualize +data within the broader scope of real-world activities (Koesten et al., 2021). Similarly, methods for +extracting latent summarization queries from source texts also exist (Xu and Lapata, 2021), but such +extracted questions can target details that betray prior knowledge of the texts. +To evaluate the effectiveness of RAG systems for more global sensemaking tasks, we need questions +that convey only a high-level understanding of dataset contents, and not the details of specific texts. +We used an activity-centered approach to automate the generation of such questions: given a short +description of a dataset, we asked the LLM to identify Npotential users and Ntasks per user, +then for each (user, task) combination, we asked the LLM to generate Nquestions that require +understanding of the entire corpus. For our evaluation, a value of N= 5 resulted in 125 test questions +per dataset. Table 1 shows example questions for each of the two evaluation datasets. +63.3 Conditions +We compare six different conditions in our analysis, including Graph RAG using four levels of graph +communities ( C0,C1,C2,C3), a text summarization method applying our map-reduce approach +directly to source texts ( TS), and a na ¨ıve “semantic search” RAG approach ( SS): +•CO. Uses root-level community summaries (fewest in number) to answer user queries. +•C1. Uses high-level community summaries to answer queries. These are sub-communities +of C0, if present, otherwise C0 communities projected down. +•C2. Uses intermediate-level community summaries to answer queries. These are sub- +communities of C1, if present, otherwise C1 communities projected down. +•C3. Uses low-level community summaries (greatest in number) to answer queries. These +are sub-communities of C2, if present, otherwise C2 communities projected down. +•TS. The same method as in subsection 2.6, except source texts (rather than community +summaries) are shuffled and chunked for the map-reduce summarization stages. +•SS. An implementation of na ¨ıve RAG in which text chunks are retrieved and added to the +available context window until the specified token limit is reached. +The size of the context window and the prompts used for answer generation are the same across +all six conditions (except for minor modifications to reference styles to match the types of context +information used). Conditions only differ in how the contents of the context window are created. +The graph index supporting conditions C0-C3was created using our generic prompts for entity and +relationship extraction only, with entity types and few-shot examples tailored to the domain of the +data. The graph indexing process used a context window size of 600 tokens with 1 gleaning for the +Podcast dataset and 0 gleanings for the News dataset. +3.4 Metrics +LLMs have been shown to be good evaluators of natural language generation, achieving state-of- +the-art or competitive results compared against human judgements (Wang et al., 2023a; Zheng et al., +2024). While this approach can generate reference-based metrics when gold standard answers are +known, it is also capable of measuring the qualities of generated texts (e.g., fluency) in a reference- +free style (Wang et al., 2023a) as well as in head-to-head comparison of competing outputs (LLM- +as-a-judge, Zheng et al., 2024). LLMs have also shown promise at evaluating the performance of +conventional RAG systems, automatically evaluating qualities like context relevance, faithfulness, +and answer relevance (RAGAS, Es et al., 2023). +Given the multi-stage nature of our Graph RAG mechanism, the multiple conditions we wanted to +compare, and the lack of gold standard answers to our activity-based sensemaking questions, we +decided to adopt a head-to-head comparison approach using an LLM evaluator. We selected three +target metrics capturing qualities that are desirable for sensemaking activities, as well as a control +metric (directness) used as a indicator of validity. Since directness is effectively in opposition to +comprehensiveness and diversity, we would not expect any method to win across all four metrics. +Our head-to-head measures computed using an LLM evaluator are as follows: +•Comprehensiveness . How much detail does the answer provide to cover all aspects and +details of the question? +•Diversity . How varied and rich is the answer in providing different perspectives and insights +on the question? +•Empowerment . How well does the answer help the reader understand and make informed +judgements about the topic? +•Directness . How specifically and clearly does the answer address the question? +For our evaluation, the LLM is provided with the question, target metric, and a pair of answers, and +asked to assess which answer is better according to the metric, as well as why. It returns the winner +if one exists, otherwise a tie if they are fundamentally similar and the differences are negligible. +To account for the stochasticity of LLMs, we run each comparison five times and use mean scores. +Table 2 shows an example of LLM-generated assessment. +7Question Which public figures are repeatedly mentioned across various entertainment articles? +Graph +RAGOverview of Prominent Public Figures in Entertainment +The entertainment industry is vast and diverse, encompassing film, television, music, sports, and +digital media. Certain public figures stand out due to their significant contributions and influence +across these sectors. The following summary highlights key individuals who are repeatedly +mentioned in various entertainment articles, reflecting their impact and presence within the industry. +Actors and Directors [...]Public Figures in Controversy [...]Musicians and Executives [...] +Athletes and Coaches [...]Influencers and Entrepreneurs [...] +The repeated mention of these figures in entertainment articles signifies their ongoing relevance and +the public’s interest in their work. Their influence spans across various aspects of entertainment, from +shaping cultural narratives in film and television to driving trends in music and digital media. These +individuals not only contribute to their respective fields but also influence the broader cultural +landscape, often becoming central figures in social discussions and public discourse. +Na¨ıve +RAGPublic figures who are repeatedly mentioned across various entertainment articles include Taylor +Swift, Travis Kelce, Britney Spears, and Justin Timberlake. These individuals have been highlighted +for various reasons, ranging from their professional achievements to their personal lives. +Taylor Swift [...]Travis Kelce [...]Britney Spears [...]Justin Timberlake [...] +These figures are frequently covered due to their high-profile status and the public’s interest in their +careers and personal lives. Their activities, whether in music, sports, or personal relationships, have +significant cultural and economic impacts, as evidenced by the media coverage and public reactions. +LLM +DecisionComprehensiveness: Winner=1 (Graph RAG) +Answer 1 is better because it provides a more comprehensive and detailed list of public figures from a +wider range of entertainment sectors, including film, television, music, sports, gaming, and digital +media. It also includes specific examples of their contributions and the impact they have on their +respective fields, as well as mentions of controversies and their implications. Answer 2, while +detailed in its coverage of a few individuals, is limited to a smaller number of public figures and +focuses primarily on their personal lives and relationships rather than a broad spectrum of their +professional influence across the entertainment industry. +Diversity: Winner=1 (Graph RAG) +Answer 1 is better because it provides a more varied and rich response by covering a wide range of +public figures from different sectors of the entertainment industry, including film, television, music, +sports, gaming, and digital media. It offers insights into the contributions and influence of these +figures, as well as controversies and their impact on public discourse. The answer also cites specific +data sources for each mentioned figure, indicating a diverse range of evidence to support the claims. +In contrast, Answer 2 focuses on a smaller group of public figures, primarily from the music industry +and sports, and relies heavily on a single source for data, which makes it less diverse in perspectives +and insights. +Empowerment: Winner=1 (Graph RAG) +Answer 1 is better because it provides a comprehensive and structured overview of public figures +across various sectors of the entertainment industry, including film, television, music, sports, and +digital media. It lists multiple individuals, providing specific examples of their contributions and the +context in which they are mentioned in entertainment articles, along with references to data reports +for each claim. This approach helps the reader understand the breadth of the topic and make informed +judgments without being misled. In contrast, Answer 2 focuses on a smaller group of public figures +and primarily discusses their personal lives and relationships, which may not provide as broad an +understanding of the topic. While Answer 2 also cites sources, it does not match the depth and variety +of Answer 1. +Directness: Winner=2 (Na ¨ıve RAG) +Answer 2 is better because it directly lists specific public figures who are repeatedly mentioned +across various entertainment articles, such as Taylor Swift, Travis Kelce, Britney Spears, and Justin +Timberlake, and provides concise explanations for their frequent mentions. Answer 1, while +comprehensive, includes a lot of detailed information about various figures in different sectors of +entertainment, which, while informative, does not directly answer the question with the same level of +conciseness and specificity as Answer 2. +Table 2: Example question for the News article dataset, with generated answers from Graph RAG +(C2) and Na ¨ıve RAG, as well as LLM-generated assessments. +8Podcast transcripts +501728252221 +835050484344 +725050535049 +755247505250 +785750485052 +795651504850SS +TS +C0 +C1 +C2 +C3SSTSC0C1C2C3 +Comprehensiveness501823251919 +825050504346 +775050504644 +755050504445 +815754565048 +815456555250SS +TS +C0 +C1 +C2 +C3SSTSC0C1C2C3 +Diversity504257524951 +585059555251 +434150494748 +484551504950 +514853515051 +494952504950SS +TS +C0 +C1 +C2 +C3SSTSC0C1C2C3 +Empowerment505665606060 +445055525152 +354550474848 +404853505050 +404952505050 +404852505050SS +TS +C0 +C1 +C2 +C3SSTSC0C1C2C3 +Directness +News articles +502028252121 +805044413836 +725650525452 +755948505855 +796246425059 +796448454150SS +TS +C0 +C1 +C2 +C3SSTSC0C1C2C3 +Comprehensiveness503338352931 +675053454440 +624750404141 +655560505050 +715659505051 +696059504950SS +TS +C0 +C1 +C2 +C3SSTSC0C1C2C3 +Diversity504757495050 +535058505048 +434250424544 +515058505251 +505055485050 +505256495050SS +TS +C0 +C1 +C2 +C3SSTSC0C1C2C3 +Empowerment505459555554 +465055535252 +414550484847 +454752504949 +454852515049 +464853515150SS +TS +C0 +C1 +C2 +C3SSTSC0C1C2C3 +Directness +Figure 4: Head-to-head win rate percentages of (row condition) over (column condition) across two +datasets, four metrics, and 125 questions per comparison (each repeated five times and averaged). +The overall winner per dataset and metric is shown in bold. Self-win rates were not computed but +are shown as the expected 50% for reference. All Graph RAG conditions outperformed na ¨ıve RAG +on comprehensiveness and diversity. Conditions C1-C3 also showed slight improvements in answer +comprehensiveness and diversity over TS (global text summarization without a graph index). +3.5 Configuration +The effect of context window size on any particular task is unclear, especially for models like +gpt-4-turbo with a large context size of 128k tokens. Given the potential for information to +be “lost in the middle” of longer contexts (Kuratov et al., 2024; Liu et al., 2023), we wanted to ex- +plore the effects of varying the context window size for our combinations of datasets, questions, and +metrics. In particular, our goal was to determine the optimum context size for our baseline condition +(SS) and then use this uniformly for all query-time LLM use. To that end, we tested four context +window sizes: 8k, 16k, 32k and 64k. Surprisingly, the smallest context window size tested (8k) +was universally better for all comparisons on comprehensiveness (average win rate of 58.1%), while +performing comparably with larger context sizes on diversity (average win rate = 52.4%), and em- +powerment (average win rate = 51.3%). Given our preference for more comprehensive and diverse +answers, we therefore used a fixed context window size of 8k tokens for the final evaluation. +3.6 Results +The indexing process resulted in a graph consisting of 8564 nodes and 20691 edges for the Podcast +dataset, and a larger graph of 15754 nodes and 19520 edges for the News dataset. Table 3 shows the +number of community summaries at different levels of each graph community hierarchy. +Global approaches vs. na ¨ıve RAG . As shown in Figure 4, global approaches consistently out- +performed the na ¨ıve RAG ( SS) approach in both comprehensiveness and diversity metrics across +datasets. Specifically, global approaches achieved comprehensiveness win rates between 72-83% +for Podcast transcripts and 72-80% for News articles, while diversity win rates ranged from 75-82% +and 62-71% respectively. Our use of directness as a validity test also achieved the expected results, +i.e., that na ¨ıve RAG produces the most direct responses across all comparisons. +9Podcast Transcripts News Articles +C0 C1 C2 C3 TS C0 C1 C2 C3 TS +Units 34 367 969 1310 1669 55 555 1797 2142 3197 +Tokens 26657 225756 565720 746100 1014611 39770 352641 980898 1140266 1707694 +% Max 2.6 22.2 55.8 73.5 100 2.3 20.7 57.4 66.8 100 +Table 3: Number of context units (community summaries for C0-C3 and text chunks for TS), corre- +sponding token counts, and percentage of the maximum token count. Map-reduce summarization of +source texts is the most resource-intensive approach requiring the highest number of context tokens. +Root-level community summaries ( C0) require dramatically fewer tokens per query (9x-43x). +Community summaries vs. source texts. When comparing community summaries to source texts +using Graph RAG, community summaries generally provided a small but consistent improvement +in answer comprehensiveness and diversity, except for root-level summaries. Intermediate-level +summaries in the Podcast dataset and low-level community summaries in the News dataset achieved +comprehensiveness win rates of 57% and 64%, respectively. Diversity win rates were 57% for +Podcast intermediate-level summaries and 60% for News low-level community summaries. Table 3 +also illustrates the scalability advantages of Graph RAG compared to source text summarization: for +low-level community summaries ( C3), Graph RAG required 26-33% fewer context tokens, while +for root-level community summaries ( C0), it required over 97% fewer tokens. For a modest drop in +performance compared with other global methods, root-level Graph RAG offers a highly efficient +method for the iterative question answering that characterizes sensemaking activity, while retaining +advantages in comprehensiveness (72% win rate) and diversity (62% win rate) over na ¨ıve RAG. +Empowerment . Empowerment comparisons showed mixed results for both global approaches versus +na¨ıve RAG ( SS) and Graph RAG approaches versus source text summarization ( TS). Ad-hoc LLM +use to analyze LLM reasoning for this measure indicated that the ability to provide specific exam- +ples, quotes, and citations was judged to be key to helping users reach an informed understanding. +Tuning element extraction prompts may help to retain more of these details in the Graph RAG index. +4 Related Work +4.1 RAG Approaches and Systems +When using LLMs, RAG involves first retrieving relevant information from external data sources, +then adding this information to the context window of the LLM along with the original query (Ram +et al., 2023). Na ¨ıve RAG approaches (Gao et al., 2023) do this by converting documents to text, +splitting text into chunks, and embedding these chunks into a vector space in which similar positions +represent similar semantics. Queries are then embedded into the same vector space, with the text +chunks of the nearest kvectors used as context. More advanced variations exist, but all solve the +problem of what to do when an external dataset of interest exceeds the LLM’s context window. +Advanced RAG systems include pre-retrieval, retrieval, post-retrieval strategies designed to over- +come the drawbacks of Na ¨ıve RAG, while Modular RAG systems include patterns for iterative and +dynamic cycles of interleaved retrieval and generation (Gao et al., 2023). Our implementation of +Graph RAG incorporates multiple concepts related to other systems. For example, our community +summaries are a kind of self-memory (Selfmem, Cheng et al., 2024) for generation-augmented re- +trieval (GAR, Mao et al., 2020) that facilitates future generation cycles, while our parallel generation +of community answers from these summaries is a kind of iterative (Iter-RetGen, Shao et al., 2023) +or federated (FeB4RAG, Wang et al., 2024) retrieval-generation strategy. Other systems have also +combined these concepts for multi-document summarization (CAiRE-COVID, Su et al., 2020) and +multi-hop question answering (ITRG, Feng et al., 2023; IR-CoT, Trivedi et al., 2022; DSP, Khattab +et al., 2022). Our use of a hierarchical index and summarization also bears resemblance to further +approaches, such as generating a hierarchical index of text chunks by clustering the vectors of text +embeddings (RAPTOR, Sarthi et al., 2024) or generating a “tree of clarifications” to answer mul- +tiple interpretations of ambiguous questions (Kim et al., 2023). However, none of these iterative or +hierarchical approaches use the kind of self-generated graph index that enables Graph RAG. +104.2 Graphs and LLMs +Use of graphs in connection with LLMs and RAG is a developing research area, with multiple +directions already established. These include using LLMs for knowledge graph creation (Tra- +janoska et al., 2023) and completion (Yao et al., 2023), as well as for the extraction of causal +graphs (Ban et al., 2023; Zhang et al., 2024) from source texts. They also include forms of ad- +vanced RAG (Gao et al., 2023) where the index is a knowledge graph (KAPING, Baek et al., 2023), +where subsets of the graph structure (G-Retriever, He et al., 2024) or derived graph metrics (Graph- +ToolFormer, Zhang, 2023) are the objects of enquiry, where narrative outputs are strongly grounded +in the facts of retrieved subgraphs (SURGE, Kang et al., 2023), where retrieved event-plot sub- +graphs are serialized using narrative templates (FABULA, Ranade and Joshi, 2023), and where the +system supports both creation and traversal of text-relationship graphs for multi-hop question an- +swering (Wang et al., 2023b). In terms of open-source software, a variety a graph databases are +supported by both the LangChain (LangChain, 2024) and LlamaIndex (LlamaIndex, 2024) libraries, +while a more general class of graph-based RAG applications is also emerging, including systems that +can create and reason over knowledge graphs in both Neo4J (NaLLM, Neo4J, 2024) and Nebula- +Graph (GraphRAG, NebulaGraph, 2024) formats. Unlike our Graph RAG approach, however, none +of these systems use the natural modularity of graphs to partition data for global summarization. +5 Discussion +Limitations of evaluation approach . Our evaluation to date has only examined a certain class of +sensemaking questions for two corpora in the region of 1 million tokens. More work is needed +to understand how performance varies across different ranges of question types, data types, and +dataset sizes, as well as to validate our sensemaking questions and target metrics with end users. +Comparison of fabrication rates, e.g., using approaches like SelfCheckGPT (Manakul et al., 2023), +would also improve on the current analysis. +Trade-offs of building a graph index . We consistently observed Graph RAG achieve the best head- +to-head results against other methods, but in many cases the graph-free approach to global summa- +rization of source texts performed competitively. The real-world decision about whether to invest in +building a graph index depends on multiple factors, including the compute budget, expected number +of lifetime queries per dataset, and value obtained from other aspects of the graph index (including +the generic community summaries and the use of other graph-related RAG approaches). +Future work . The graph index, rich text annotations, and hierarchical community structure support- +ing the current Graph RAG approach offer many possibilities for refinement and adaptation. This +includes RAG approaches that operate in a more local manner, via embedding-based matching of +user queries and graph annotations, as well as the possibility of hybrid RAG schemes that combine +embedding-based matching against community reports before employing our map-reduce summa- +rization mechanisms. This “roll-up” operation could also be extended across more levels of the +community hierarchy, as well as implemented as a more exploratory “drill down” mechanism that +follows the information scent contained in higher-level community summaries. +6 Conclusion +We have presented a global approach to Graph RAG, combining knowledge graph generation, +retrieval-augmented generation (RAG), and query-focused summarization (QFS) to support human +sensemaking over entire text corpora. Initial evaluations show substantial improvements over a +na¨ıve RAG baseline for both the comprehensiveness and diversity of answers, as well as favorable +comparisons to a global but graph-free approach using map-reduce source text summarization. For +situations requiring many global queries over the same dataset, summaries of root-level communi- +ties in the entity-based graph index provide a data index that is both superior to na ¨ıve RAG and +achieves competitive performance to other global methods at a fraction of the token cost. +An open-source, Python-based implementation of both global and local Graph RAG approaches is +forthcoming at https://aka .ms/graphrag . +11Acknowledgements +We would also like to thank the following people who contributed to the work: Alonso Guevara +Fern ´andez, Amber Hoak, Andr ´es Morales Esquivel, Ben Cutler, Billie Rinaldi, Chris Sanchez, +Chris Trevino, Christine Caggiano, David Tittsworth, Dayenne de Souza, Douglas Orbaker, Ed +Clark, Gabriel Nieves-Ponce, Gaudy Blanco Meneses, Kate Lytvynets, Katy Smith, M ´onica Carva- +jal, Nathan Evans, Richard Ortega, Rodrigo Racanicci, Sarah Smith, and Shane Solomon. +References +Achiam, J., Adler, S., Agarwal, S., Ahmad, L., Akkaya, I., Aleman, F. L., Almeida, D., Al- +tenschmidt, J., Altman, S., Anadkat, S., et al. (2023). Gpt-4 technical report. arXiv preprint +arXiv:2303.08774 . +Anil, R., Borgeaud, S., Wu, Y ., Alayrac, J.-B., Yu, J., Soricut, R., Schalkwyk, J., Dai, A. M., +Hauth, A., et al. (2023). Gemini: a family of highly capable multimodal models. arXiv preprint +arXiv:2312.11805 . +Baek, J., Aji, A. F., and Saffari, A. (2023). Knowledge-augmented language model prompting for +zero-shot knowledge graph question answering. arXiv preprint arXiv:2306.04136 . +Ban, T., Chen, L., Wang, X., and Chen, H. (2023). From query tools to causal architects: Harnessing +large language models for advanced causal discovery from data. +Baumel, T., Eyal, M., and Elhadad, M. (2018). Query focused abstractive summarization: Incorpo- +rating query relevance, multi-document coverage, and summary length constraints into seq2seq +models. arXiv preprint arXiv:1801.07704 . +Blondel, V . D., Guillaume, J.-L., Lambiotte, R., and Lefebvre, E. (2008). Fast unfolding of +communities in large networks. Journal of statistical mechanics: theory and experiment , +2008(10):P10008. +Brown, T., Mann, B., Ryder, N., Subbiah, M., Kaplan, J. D., Dhariwal, P., Neelakantan, A., Shyam, +P., Sastry, G., Askell, A., et al. (2020). Language models are few-shot learners. Advances in +neural information processing systems , 33:1877–1901. +Cheng, X., Luo, D., Chen, X., Liu, L., Zhao, D., and Yan, R. (2024). Lift yourself up: Retrieval- +augmented text generation with self-memory. Advances in Neural Information Processing Sys- +tems, 36. +Dang, H. T. (2006). Duc 2005: Evaluation of question-focused summarization systems. In Proceed- +ings of the Workshop on Task-Focused Summarization and Question Answering , pages 48–55. +Es, S., James, J., Espinosa-Anke, L., and Schockaert, S. (2023). Ragas: Automated evaluation of +retrieval augmented generation. arXiv preprint arXiv:2309.15217 . +Feng, Z., Feng, X., Zhao, D., Yang, M., and Qin, B. (2023). Retrieval-generation synergy augmented +large language models. arXiv preprint arXiv:2310.05149 . +Fortunato, S. (2010). Community detection in graphs. Physics reports , 486(3-5):75–174. +Gao, Y ., Xiong, Y ., Gao, X., Jia, K., Pan, J., Bi, Y ., Dai, Y ., Sun, J., and Wang, H. (2023). Retrieval- +augmented generation for large language models: A survey. arXiv preprint arXiv:2312.10997 . +Goodwin, T. R., Savery, M. E., and Demner-Fushman, D. (2020). Flight of the pegasus? comparing +transformers on few-shot and zero-shot multi-document abstractive summarization. In Proceed- +ings of COLING. International Conference on Computational Linguistics , volume 2020, page +5640. NIH Public Access. +He, X., Tian, Y ., Sun, Y ., Chawla, N. V ., Laurent, T., LeCun, Y ., Bresson, X., and Hooi, B. (2024). +G-retriever: Retrieval-augmented generation for textual graph understanding and question an- +swering. arXiv preprint arXiv:2402.07630 . +12Jacomy, M., Venturini, T., Heymann, S., and Bastian, M. (2014). Forceatlas2, a continuous graph +layout algorithm for handy network visualization designed for the gephi software. PLoS ONE +9(6): e98679. https://doi.org/10.1371/journal.pone.0098679 . +Jin, D., Yu, Z., Jiao, P., Pan, S., He, D., Wu, J., Philip, S. Y ., and Zhang, W. (2021). A survey of +community detection approaches: From statistical modeling to deep learning. IEEE Transactions +on Knowledge and Data Engineering , 35(2):1149–1170. +Kang, M., Kwak, J. M., Baek, J., and Hwang, S. J. (2023). Knowledge graph-augmented language +models for knowledge-grounded dialogue generation. arXiv preprint arXiv:2305.18846 . +Khattab, O., Santhanam, K., Li, X. L., Hall, D., Liang, P., Potts, C., and Zaharia, M. (2022). +Demonstrate-search-predict: Composing retrieval and language models for knowledge-intensive +nlp. arXiv preprint arXiv:2212.14024 . +Kim, G., Kim, S., Jeon, B., Park, J., and Kang, J. (2023). Tree of clarifications: Answering ambigu- +ous questions with retrieval-augmented large language models. arXiv preprint arXiv:2310.14696 . +Klein, G., Moon, B., and Hoffman, R. R. (2006a). Making sense of sensemaking 1: Alternative +perspectives. IEEE intelligent systems , 21(4):70–73. +Klein, G., Moon, B., and Hoffman, R. R. (2006b). Making sense of sensemaking 2: A macrocogni- +tive model. IEEE Intelligent systems , 21(5):88–92. +Koesten, L., Gregory, K., Groth, P., and Simperl, E. (2021). Talking datasets–understanding data +sensemaking behaviours. International journal of human-computer studies , 146:102562. +Kuratov, Y ., Bulatov, A., Anokhin, P., Sorokin, D., Sorokin, A., and Burtsev, M. (2024). In search +of needles in a 11m haystack: Recurrent memory finds what llms miss. +LangChain (2024). Langchain graphs. https://python .langchain .com/docs/use cases/graph/. +Laskar, M. T. R., Hoque, E., and Huang, J. (2020). Query focused abstractive summarization via +incorporating query relevance and transfer learning with transformer models. In Advances in +Artificial Intelligence: 33rd Canadian Conference on Artificial Intelligence, Canadian AI 2020, +Ottawa, ON, Canada, May 13–15, 2020, Proceedings 33 , pages 342–348. Springer. +Laskar, M. T. R., Hoque, E., and Huang, J. X. (2022). Domain adaptation with pre-trained transform- +ers for query-focused abstractive text summarization. Computational Linguistics , 48(2):279–320. +Lewis, P., Perez, E., Piktus, A., Petroni, F., Karpukhin, V ., Goyal, N., K ¨uttler, H., Lewis, M., Yih, +W.-t., Rockt ¨aschel, T., et al. (2020). Retrieval-augmented generation for knowledge-intensive nlp +tasks. Advances in Neural Information Processing Systems , 33:9459–9474. +Liu, N. F., Lin, K., Hewitt, J., Paranjape, A., Bevilacqua, M., Petroni, F., and Liang, P. (2023). Lost +in the middle: How language models use long contexts. arXiv:2307.03172. +Liu, Y . and Lapata, M. (2019). Hierarchical transformers for multi-document summarization. arXiv +preprint arXiv:1905.13164 . +LlamaIndex (2024). LlamaIndex Knowledge Graph Index. https://docs .llamaindex .ai/en/stable/ +examples/index structs/knowledge graph/KnowledgeGraphDemo .html. +Manakul, P., Liusie, A., and Gales, M. J. (2023). Selfcheckgpt: Zero-resource black-box hallucina- +tion detection for generative large language models. arXiv preprint arXiv:2303.08896 . +Mao, Y ., He, P., Liu, X., Shen, Y ., Gao, J., Han, J., and Chen, W. (2020). Generation-augmented +retrieval for open-domain question answering. arXiv preprint arXiv:2009.08553 . +Martin, S., Brown, W. M., Klavans, R., and Boyack, K. (2011). Openord: An open-source toolbox +for large graph layout. SPIE Conference on Visualization and Data Analysis (VDA) . +Microsoft (2023). The impact of large language models on scientific discovery: a preliminary study +using gpt-4. +13NebulaGraph (2024). Nebulagraph launches industry-first graph rag: Retrieval-augmented genera- +tion with llm based on knowledge graphs. https://www .nebula-graph .io/posts/graph-RAG. +Neo4J (2024). Project NaLLM. https://github .com/neo4j/NaLLM. +Newman, M. E. (2006). Modularity and community structure in networks. Proceedings of the +national academy of sciences , 103(23):8577–8582. +Ram, O., Levine, Y ., Dalmedigos, I., Muhlgay, D., Shashua, A., Leyton-Brown, K., and Shoham, +Y . (2023). In-context retrieval-augmented language models. Transactions of the Association for +Computational Linguistics , 11:1316–1331. +Ranade, P. and Joshi, A. (2023). Fabula: Intelligence report generation using retrieval-augmented +narrative construction. arXiv preprint arXiv:2310.13848 . +Sarthi, P., Abdullah, S., Tuli, A., Khanna, S., Goldie, A., and Manning, C. D. (2024). Raptor: +Recursive abstractive processing for tree-organized retrieval. arXiv preprint arXiv:2401.18059 . +Scott, K. (2024). Behind the Tech. https://www .microsoft .com/en-us/behind-the-tech. +Shao, Z., Gong, Y ., Shen, Y ., Huang, M., Duan, N., and Chen, W. (2023). Enhancing retrieval- +augmented large language models with iterative retrieval-generation synergy. arXiv preprint +arXiv:2305.15294 . +Su, D., Xu, Y ., Yu, T., Siddique, F. B., Barezi, E. J., and Fung, P. (2020). Caire-covid: A ques- +tion answering and query-focused multi-document summarization system for covid-19 scholarly +information management. arXiv preprint arXiv:2005.03975 . +Tang, Y . and Yang, Y . (2024). MultiHop-RAG: Benchmarking retrieval-augmented generation for +multi-hop queries. arXiv preprint arXiv:2401.15391 . +Touvron, H., Martin, L., Stone, K., Albert, P., Almahairi, A., Babaei, Y ., Bashlykov, N., Batra, S., +Bhargava, P., Bhosale, S., et al. (2023). Llama 2: Open foundation and fine-tuned chat models. +arXiv preprint arXiv:2307.09288 . +Traag, V . A., Waltman, L., and Van Eck, N. J. (2019). From Louvain to Leiden: guaranteeing +well-connected communities. Scientific Reports , 9(1). +Trajanoska, M., Stojanov, R., and Trajanov, D. (2023). Enhancing knowledge graph construction +using large language models. ArXiv , abs/2305.04676. +Trivedi, H., Balasubramanian, N., Khot, T., and Sabharwal, A. (2022). Interleaving retrieval +with chain-of-thought reasoning for knowledge-intensive multi-step questions. arXiv preprint +arXiv:2212.10509 . +Wang, J., Liang, Y ., Meng, F., Sun, Z., Shi, H., Li, Z., Xu, J., Qu, J., and Zhou, J. (2023a). Is chatgpt +a good nlg evaluator? a preliminary study. arXiv preprint arXiv:2303.04048 . +Wang, S., Khramtsova, E., Zhuang, S., and Zuccon, G. (2024). Feb4rag: Evaluating federated search +in the context of retrieval augmented generation. arXiv preprint arXiv:2402.11891 . +Wang, Y ., Lipka, N., Rossi, R. A., Siu, A., Zhang, R., and Derr, T. (2023b). Knowledge graph +prompting for multi-document question answering. +Xu, Y . and Lapata, M. (2021). Text summarization with latent queries. arXiv preprint +arXiv:2106.00104 . +Yang, Z., Qi, P., Zhang, S., Bengio, Y ., Cohen, W. W., Salakhutdinov, R., and Manning, C. D. (2018). +HotpotQA: A dataset for diverse, explainable multi-hop question answering. In Conference on +Empirical Methods in Natural Language Processing (EMNLP) . +Yao, J.-g., Wan, X., and Xiao, J. (2017). Recent advances in document summarization. Knowledge +and Information Systems , 53:297–336. +14Yao, L., Peng, J., Mao, C., and Luo, Y . (2023). Exploring large language models for knowledge +graph completion. +Zhang, J. (2023). Graph-toolformer: To empower llms with graph reasoning ability via prompt +augmented by chatgpt. arXiv preprint arXiv:2304.11116 . +Zhang, Y ., Zhang, Y ., Gan, Y ., Yao, L., and Wang, C. (2024). Causal graph discovery with retrieval- +augmented generation based large language models. arXiv preprint arXiv:2402.15301 . +Zheng, L., Chiang, W.-L., Sheng, Y ., Zhuang, S., Wu, Z., Zhuang, Y ., Lin, Z., Li, Z., Li, D., Xing, +E., et al. (2024). Judging llm-as-a-judge with mt-bench and chatbot arena. Advances in Neural +Information Processing Systems , 36. +15 \ No newline at end of file diff --git a/graphfleet/input/json/graphrag_scrape.json b/graphfleet/input/json/graphrag_scrape.json new file mode 100644 index 000000000..a65989e7f --- /dev/null +++ b/graphfleet/input/json/graphrag_scrape.json @@ -0,0 +1,685 @@ +[ + { + "content": "Get Started\n===========\n\nRequirements\n------------\n\n[Python 3.10-3.12](https://www.python.org/downloads/)\n\nTo get started with the GraphRAG system, you have a few options:\n\n👉 [Use the GraphRAG Accelerator solution](https://github.com/Azure-Samples/graphrag-accelerator)\n \n👉 [Install from pypi](https://pypi.org/project/graphrag/)\n. \n👉 [Use it from source](/graphrag/posts/developing)\n \n\nQuickstart\n----------\n\nTo get started with the GraphRAG system we recommend trying the [Solution Accelerator](https://github.com/Azure-Samples/graphrag-accelerator)\n package. This provides a user-friendly end-to-end experience with Azure resources.\n\nTop-Level Modules\n=================\n\n[Indexing Pipeline Overview](/graphrag/posts/index/overview)\n \n[Query Engine Overview](/graphrag/posts/query/overview)\n\nOverview\n========\n\nThe following is a simple end-to-end example for using the GraphRAG system. It shows how to use the system to index some text, and then use the indexed data to answer questions about the documents.\n\nInstall GraphRAG\n================\n\n pip install graphrag\n\nRunning the Indexer\n===================\n\nNow we need to set up a data project and some initial configuration. Let's set that up. We're using the [default configuration mode](/graphrag/posts/config/overview/)\n, which you can customize as needed using a [config file](/graphrag/posts/config/json_yaml/)\n, which we recommend, or [environment variables](/graphrag/posts/config/env_vars/)\n.\n\nFirst let's get a sample dataset ready:\n\n mkdir -p ./ragtest/input\n\nNow let's get a copy of A Christmas Carol by Charles Dickens from a trusted source\n\n curl https://www.gutenberg.org/cache/epub/24022/pg24022.txt > ./ragtest/input/book.txt\n\nNext we'll inject some required config variables:\n\nSet Up Your Workspace Variables\n-------------------------------\n\nFirst let's make sure to setup the required environment variables. For details on these environment variables, and what environment variables are available, see the [variables documentation](/graphrag/posts/config/overview/)\n.\n\nTo initialize your workspace, let's first run the `graphrag.index --init` command. Since we have already configured a directory named .ragtest\\` in the previous step, we can run the following command:\n\n python -m graphrag.index --init --root ./ragtest\n\nThis will create two files: `.env` and `settings.yaml` in the `./ragtest` directory.\n\n* `.env` contains the environment variables required to run the GraphRAG pipeline. If you inspect the file, you'll see a single environment variable defined, `GRAPHRAG_API_KEY=`. This is the API key for the OpenAI API or Azure OpenAI endpoint. You can replace this with your own API key.\n* `settings.yaml` contains the settings for the pipeline. You can modify this file to change the settings for the pipeline. \n \n\n#### OpenAI and Azure OpenAI\n\nTo run in OpenAI mode, just make sure to update the value of `GRAPHRAG_API_KEY` in the `.env` file with your OpenAI API key.\n\n#### Azure OpenAI\n\nIn addition, Azure OpenAI users should set the following variables in the settings.yaml file. To find the appropriate sections, just search for the `llm:` configuration, you should see two sections, one for the chat endpoint and one for the embeddings endpoint. Here is an example of how to configure the chat endpoint:\n\n type: azure_openai_chat # Or azure_openai_embedding for embeddings\n api_base: https://.openai.azure.com\n api_version: 2024-02-15-preview # You can customize this for other versions\n deployment_name: \n\n* For more details about configuring GraphRAG, see the [configuration documentation](/graphrag/posts/config/overview/)\n .\n* To learn more about Initialization, refer to the [Initialization documentation](/graphrag/posts/config/init/)\n .\n* For more details about using the CLI, refer to the [CLI documentation](/graphrag/posts/query/3-cli/)\n .\n\nRunning the Indexing pipeline\n-----------------------------\n\nFinally we'll run the pipeline!\n\n python -m graphrag.index --root ./ragtest\n\n![pipeline executing from the CLI](https://microsoft.github.io/graphrag/img/pipeline-running.png)\n\nThis process will take some time to run. This depends on the size of your input data, what model you're using, and the text chunk size being used (these can be configured in your `.env` file). Once the pipeline is complete, you should see a new folder called `./ragtest/output//artifacts` with a series of parquet files.\n\nUsing the Query Engine\n======================\n\nRunning the Query Engine\n------------------------\n\nNow let's ask some questions using this dataset.\n\nHere is an example using Global search to ask a high-level question:\n\n python -m graphrag.query \\\n --root ./ragtest \\\n --method global \\\n \"What are the top themes in this story?\"\n\nHere is an example using Local search to ask a more specific question about a particular character:\n\n python -m graphrag.query \\\n --root ./ragtest \\\n --method local \\\n \"Who is Scrooge, and what are his main relationships?\"\n\nPlease refer to [Query Engine](/graphrag/posts/query/overview)\n docs for detailed information about how to leverage our Local and Global search mechanisms for extracting meaningful insights from data after the Indexer has wrapped up execution.", + "markdown": "Get Started\n===========\n\nRequirements\n------------\n\n[Python 3.10-3.12](https://www.python.org/downloads/)\n\nTo get started with the GraphRAG system, you have a few options:\n\n👉 [Use the GraphRAG Accelerator solution](https://github.com/Azure-Samples/graphrag-accelerator)\n \n👉 [Install from pypi](https://pypi.org/project/graphrag/)\n. \n👉 [Use it from source](/graphrag/posts/developing)\n \n\nQuickstart\n----------\n\nTo get started with the GraphRAG system we recommend trying the [Solution Accelerator](https://github.com/Azure-Samples/graphrag-accelerator)\n package. This provides a user-friendly end-to-end experience with Azure resources.\n\nTop-Level Modules\n=================\n\n[Indexing Pipeline Overview](/graphrag/posts/index/overview)\n \n[Query Engine Overview](/graphrag/posts/query/overview)\n\nOverview\n========\n\nThe following is a simple end-to-end example for using the GraphRAG system. It shows how to use the system to index some text, and then use the indexed data to answer questions about the documents.\n\nInstall GraphRAG\n================\n\n pip install graphrag\n\nRunning the Indexer\n===================\n\nNow we need to set up a data project and some initial configuration. Let's set that up. We're using the [default configuration mode](/graphrag/posts/config/overview/)\n, which you can customize as needed using a [config file](/graphrag/posts/config/json_yaml/)\n, which we recommend, or [environment variables](/graphrag/posts/config/env_vars/)\n.\n\nFirst let's get a sample dataset ready:\n\n mkdir -p ./ragtest/input\n\nNow let's get a copy of A Christmas Carol by Charles Dickens from a trusted source\n\n curl https://www.gutenberg.org/cache/epub/24022/pg24022.txt > ./ragtest/input/book.txt\n\nNext we'll inject some required config variables:\n\nSet Up Your Workspace Variables\n-------------------------------\n\nFirst let's make sure to setup the required environment variables. For details on these environment variables, and what environment variables are available, see the [variables documentation](/graphrag/posts/config/overview/)\n.\n\nTo initialize your workspace, let's first run the `graphrag.index --init` command. Since we have already configured a directory named .ragtest\\` in the previous step, we can run the following command:\n\n python -m graphrag.index --init --root ./ragtest\n\nThis will create two files: `.env` and `settings.yaml` in the `./ragtest` directory.\n\n* `.env` contains the environment variables required to run the GraphRAG pipeline. If you inspect the file, you'll see a single environment variable defined, `GRAPHRAG_API_KEY=`. This is the API key for the OpenAI API or Azure OpenAI endpoint. You can replace this with your own API key.\n* `settings.yaml` contains the settings for the pipeline. You can modify this file to change the settings for the pipeline. \n \n\n#### OpenAI and Azure OpenAI\n\nTo run in OpenAI mode, just make sure to update the value of `GRAPHRAG_API_KEY` in the `.env` file with your OpenAI API key.\n\n#### Azure OpenAI\n\nIn addition, Azure OpenAI users should set the following variables in the settings.yaml file. To find the appropriate sections, just search for the `llm:` configuration, you should see two sections, one for the chat endpoint and one for the embeddings endpoint. Here is an example of how to configure the chat endpoint:\n\n type: azure_openai_chat # Or azure_openai_embedding for embeddings\n api_base: https://.openai.azure.com\n api_version: 2024-02-15-preview # You can customize this for other versions\n deployment_name: \n\n* For more details about configuring GraphRAG, see the [configuration documentation](/graphrag/posts/config/overview/)\n .\n* To learn more about Initialization, refer to the [Initialization documentation](/graphrag/posts/config/init/)\n .\n* For more details about using the CLI, refer to the [CLI documentation](/graphrag/posts/query/3-cli/)\n .\n\nRunning the Indexing pipeline\n-----------------------------\n\nFinally we'll run the pipeline!\n\n python -m graphrag.index --root ./ragtest\n\n![pipeline executing from the CLI](https://microsoft.github.io/graphrag/img/pipeline-running.png)\n\nThis process will take some time to run. This depends on the size of your input data, what model you're using, and the text chunk size being used (these can be configured in your `.env` file). Once the pipeline is complete, you should see a new folder called `./ragtest/output//artifacts` with a series of parquet files.\n\nUsing the Query Engine\n======================\n\nRunning the Query Engine\n------------------------\n\nNow let's ask some questions using this dataset.\n\nHere is an example using Global search to ask a high-level question:\n\n python -m graphrag.query \\\n --root ./ragtest \\\n --method global \\\n \"What are the top themes in this story?\"\n\nHere is an example using Local search to ask a more specific question about a particular character:\n\n python -m graphrag.query \\\n --root ./ragtest \\\n --method local \\\n \"Who is Scrooge, and what are his main relationships?\"\n\nPlease refer to [Query Engine](/graphrag/posts/query/overview)\n docs for detailed information about how to leverage our Local and Global search mechanisms for extracting meaningful insights from data after the Indexer has wrapped up execution.", + "metadata": { + "title": "Get Started", + "sourceURL": "https://microsoft.github.io/graphrag/posts/get_started/", + "pageStatusCode": 200, + "ogLocaleAlternate": [] + }, + "linksOnPage": [ + "https://microsoft.github.io/graphrag/", + "https://microsoft.github.io/graphrag/posts/get_started/", + "https://microsoft.github.io/graphrag/posts/developing/", + "https://microsoft.github.io/graphrag/posts/index/overview/", + "https://microsoft.github.io/graphrag/posts/index/0-architecture/", + "https://microsoft.github.io/graphrag/posts/index/1-default_dataflow/", + "https://microsoft.github.io/graphrag/posts/index/2-cli/", + "https://microsoft.github.io/graphrag/posts/config/overview/", + "https://microsoft.github.io/graphrag/posts/config/init", + "https://microsoft.github.io/graphrag/posts/config/env_vars", + "https://microsoft.github.io/graphrag/posts/config/json_yaml", + "https://microsoft.github.io/graphrag/posts/config/custom", + "https://microsoft.github.io/graphrag/posts/config/template", + "https://microsoft.github.io/graphrag/posts/prompt_tuning/overview/", + "https://microsoft.github.io/graphrag/posts/prompt_tuning/auto_prompt_tuning/", + "https://microsoft.github.io/graphrag/posts/prompt_tuning/manual_prompt_tuning/", + "https://microsoft.github.io/graphrag/posts/query/overview/", + "https://microsoft.github.io/graphrag/posts/query/1-local_search/", + "https://microsoft.github.io/graphrag/posts/query/2-question_generation/", + "https://microsoft.github.io/graphrag/posts/query/0-global_search/", + "https://microsoft.github.io/graphrag/posts/query/3-cli/", + "https://microsoft.github.io/graphrag/posts/query/notebooks/overview/", + "https://microsoft.github.io/graphrag/posts/query/notebooks/global_search_nb", + "https://microsoft.github.io/graphrag/posts/query/notebooks/local_search_nb", + "https://www.python.org/downloads/", + "https://github.com/Azure-Samples/graphrag-accelerator", + "https://pypi.org/project/graphrag/", + "https://microsoft.github.io/graphrag/posts/developing", + "https://microsoft.github.io/graphrag/posts/index/overview", + "https://microsoft.github.io/graphrag/posts/query/overview", + "https://microsoft.github.io/graphrag/posts/config/json_yaml/", + "https://microsoft.github.io/graphrag/posts/config/env_vars/", + "https://microsoft.github.io/graphrag/posts/config/init/", + "https://go.microsoft.com/fwlink/?LinkId=521839", + "https://go.microsoft.com/fwlink/?LinkId=2259814", + "https://go.microsoft.com/fwlink/?LinkID=206977", + "https://www.microsoft.com/trademarks", + "https://www.microsoft.com", + "https://github.com/microsoft/graphrag" + ] + }, + { + "content": "Developing GraphRAG\n===================\n\nRequirements\n============\n\n| Name | Installation | Purpose |\n| --- | --- | --- |\n| Python 3.10-3.12 | [Download](https://www.python.org/downloads/) | The library is Python-based. |\n| Poetry | [Instructions](https://python-poetry.org/docs/#installation) | Poetry is used for package management and virtualenv management in Python codebases |\n\nGetting Started\n===============\n\nInstall Dependencies\n--------------------\n\n # Install Python dependencies.\n poetry install\n\nExecute the Indexing Engine\n---------------------------\n\n poetry run poe index <...args>\n\nExecuting Queries\n-----------------\n\n poetry run poe query <...args>\n\nAzurite\n=======\n\nSome unit and smoke tests use Azurite to emulate Azure resources. This can be started by running:\n\n ./scripts/start-azurite.sh\n\nor by simply running `azurite` in the terminal if already installed globally. See the [Azurite documentation](https://learn.microsoft.com/en-us/azure/storage/common/storage-use-azurite)\n for more information about how to install and use Azurite.\n\nLifecycle Scripts\n=================\n\nOur Python package utilizes Poetry to manage dependencies and [poethepoet](https://pypi.org/project/poethepoet/)\n to manage build scripts.\n\nAvailable scripts are:\n\n* `poetry run poe index` - Run the Indexing CLI\n* `poetry run poe query` - Run the Query CLI\n* `poetry build` - This invokes `poetry build`, which will build a wheel file and other distributable artifacts.\n* `poetry run poe test` - This will execute all tests.\n* `poetry run poe test_unit` - This will execute unit tests.\n* `poetry run poe test_integration` - This will execute integration tests.\n* `poetry run poe test_smoke` - This will execute smoke tests.\n* `poetry run poe check` - This will perform a suite of static checks across the package, including:\n * formatting\n * documentation formatting\n * linting\n * security patterns\n * type-checking\n* `poetry run poe fix` - This will apply any available auto-fixes to the package. Usually this is just formatting fixes.\n* `poetry run poe fix_unsafe` - This will apply any available auto-fixes to the package, including those that may be unsafe.\n* `poetry run poe format` - Explicitly run the formatter across the package.\n\nTroubleshooting\n---------------\n\n### \"RuntimeError: llvm-config failed executing, please point LLVM\\_CONFIG to the path for llvm-config\" when running poetry install\n\nMake sure llvm-9 and llvm-9-dev are installed:\n\n`sudo apt-get install llvm-9 llvm-9-dev`\n\nand then in your bashrc, add\n\n`export LLVM_CONFIG=/usr/bin/llvm-config-9`\n\n### \"numba/\\_pymodule.h:6:10: fatal error: Python.h: No such file or directory\" when running poetry install\n\nMake sure you have python3.10-dev installed or more generally `python-dev`\n\n`sudo apt-get install python3.10-dev`\n\n### LLM call constantly exceeds TPM, RPM or time limits\n\n`GRAPHRAG_LLM_THREAD_COUNT` and `GRAPHRAG_EMBEDDING_THREAD_COUNT` are both set to 50 by default. You can modify this values to reduce concurrency. Please refer to the [Configuration Documents](../config/overview)", + "markdown": "Developing GraphRAG\n===================\n\nRequirements\n============\n\n| Name | Installation | Purpose |\n| --- | --- | --- |\n| Python 3.10-3.12 | [Download](https://www.python.org/downloads/) | The library is Python-based. |\n| Poetry | [Instructions](https://python-poetry.org/docs/#installation) | Poetry is used for package management and virtualenv management in Python codebases |\n\nGetting Started\n===============\n\nInstall Dependencies\n--------------------\n\n # Install Python dependencies.\n poetry install\n\nExecute the Indexing Engine\n---------------------------\n\n poetry run poe index <...args>\n\nExecuting Queries\n-----------------\n\n poetry run poe query <...args>\n\nAzurite\n=======\n\nSome unit and smoke tests use Azurite to emulate Azure resources. This can be started by running:\n\n ./scripts/start-azurite.sh\n\nor by simply running `azurite` in the terminal if already installed globally. See the [Azurite documentation](https://learn.microsoft.com/en-us/azure/storage/common/storage-use-azurite)\n for more information about how to install and use Azurite.\n\nLifecycle Scripts\n=================\n\nOur Python package utilizes Poetry to manage dependencies and [poethepoet](https://pypi.org/project/poethepoet/)\n to manage build scripts.\n\nAvailable scripts are:\n\n* `poetry run poe index` - Run the Indexing CLI\n* `poetry run poe query` - Run the Query CLI\n* `poetry build` - This invokes `poetry build`, which will build a wheel file and other distributable artifacts.\n* `poetry run poe test` - This will execute all tests.\n* `poetry run poe test_unit` - This will execute unit tests.\n* `poetry run poe test_integration` - This will execute integration tests.\n* `poetry run poe test_smoke` - This will execute smoke tests.\n* `poetry run poe check` - This will perform a suite of static checks across the package, including:\n * formatting\n * documentation formatting\n * linting\n * security patterns\n * type-checking\n* `poetry run poe fix` - This will apply any available auto-fixes to the package. Usually this is just formatting fixes.\n* `poetry run poe fix_unsafe` - This will apply any available auto-fixes to the package, including those that may be unsafe.\n* `poetry run poe format` - Explicitly run the formatter across the package.\n\nTroubleshooting\n---------------\n\n### \"RuntimeError: llvm-config failed executing, please point LLVM\\_CONFIG to the path for llvm-config\" when running poetry install\n\nMake sure llvm-9 and llvm-9-dev are installed:\n\n`sudo apt-get install llvm-9 llvm-9-dev`\n\nand then in your bashrc, add\n\n`export LLVM_CONFIG=/usr/bin/llvm-config-9`\n\n### \"numba/\\_pymodule.h:6:10: fatal error: Python.h: No such file or directory\" when running poetry install\n\nMake sure you have python3.10-dev installed or more generally `python-dev`\n\n`sudo apt-get install python3.10-dev`\n\n### LLM call constantly exceeds TPM, RPM or time limits\n\n`GRAPHRAG_LLM_THREAD_COUNT` and `GRAPHRAG_EMBEDDING_THREAD_COUNT` are both set to 50 by default. You can modify this values to reduce concurrency. Please refer to the [Configuration Documents](../config/overview)", + "metadata": { + "title": "Developing GraphRAG", + "sourceURL": "https://microsoft.github.io/graphrag/posts/developing/", + "pageStatusCode": 200, + "ogLocaleAlternate": [] + }, + "linksOnPage": [ + "https://microsoft.github.io/graphrag/", + "https://microsoft.github.io/graphrag/posts/get_started/", + "https://microsoft.github.io/graphrag/posts/developing/", + "https://microsoft.github.io/graphrag/posts/index/overview/", + "https://microsoft.github.io/graphrag/posts/index/0-architecture/", + "https://microsoft.github.io/graphrag/posts/index/1-default_dataflow/", + "https://microsoft.github.io/graphrag/posts/index/2-cli/", + "https://microsoft.github.io/graphrag/posts/config/overview/", + "https://microsoft.github.io/graphrag/posts/config/init", + "https://microsoft.github.io/graphrag/posts/config/env_vars", + "https://microsoft.github.io/graphrag/posts/config/json_yaml", + "https://microsoft.github.io/graphrag/posts/config/custom", + "https://microsoft.github.io/graphrag/posts/config/template", + "https://microsoft.github.io/graphrag/posts/prompt_tuning/overview/", + "https://microsoft.github.io/graphrag/posts/prompt_tuning/auto_prompt_tuning/", + "https://microsoft.github.io/graphrag/posts/prompt_tuning/manual_prompt_tuning/", + "https://microsoft.github.io/graphrag/posts/query/overview/", + "https://microsoft.github.io/graphrag/posts/query/1-local_search/", + "https://microsoft.github.io/graphrag/posts/query/2-question_generation/", + "https://microsoft.github.io/graphrag/posts/query/0-global_search/", + "https://microsoft.github.io/graphrag/posts/query/3-cli/", + "https://microsoft.github.io/graphrag/posts/query/notebooks/overview/", + "https://microsoft.github.io/graphrag/posts/query/notebooks/global_search_nb", + "https://microsoft.github.io/graphrag/posts/query/notebooks/local_search_nb", + "https://www.python.org/downloads/", + "https://python-poetry.org/docs/#installation", + "https://learn.microsoft.com/en-us/azure/storage/common/storage-use-azurite", + "https://pypi.org/project/poethepoet/", + "https://microsoft.github.io/graphrag/posts/developing//../config/overview", + "https://go.microsoft.com/fwlink/?LinkId=521839", + "https://go.microsoft.com/fwlink/?LinkId=2259814", + "https://go.microsoft.com/fwlink/?LinkID=206977", + "https://www.microsoft.com/trademarks", + "https://www.microsoft.com", + "https://github.com/microsoft/graphrag", + "https://github.com/Azure-Samples/graphrag-accelerator" + ] + }, + { + "content": "GraphRAG Indexing 🤖\n====================\n\nThe GraphRAG indexing package is a data pipeline and transformation suite that is designed to extract meaningful, structured data from unstructured text using LLMs.\n\nIndexing Pipelines are configurable. They are composed of workflows, standard and custom steps, prompt templates, and input/output adapters. Our standard pipeline is designed to:\n\n* extract entities, relationships and claims from raw text\n* perform community detection in entities\n* generate community summaries and reports at multiple levels of granularity\n* embed entities into a graph vector space\n* embed text chunks into a textual vector space\n\nThe outputs of the pipeline can be stored in a variety of formats, including JSON and Parquet - or they can be handled manually via the Python API.\n\nGetting Started\n---------------\n\n### Requirements\n\nSee the [requirements](/graphrag/posts/developing#requirements)\n section in [Get Started](/graphrag/posts/get_started)\n for details on setting up a development environment.\n\nThe Indexing Engine can be used in either a default configuration mode or with a custom pipeline. To configure GraphRAG, see the [configuration](/graphrag/posts/config/overview)\n documentation. After you have a config file you can run the pipeline using the CLI or the Python API.\n\nUsage\n-----\n\n### CLI\n\n # Via Poetry\n poetry run poe cli --root # default config mode\n poetry run poe cli --config your_pipeline.yml # custom config mode\n \n # Via Node\n yarn run:index --root # default config mode\n yarn run:index --config your_pipeline.yml # custom config mode\n \n\n### Python API\n\n from graphrag.index import run_pipeline\n from graphrag.index.config import PipelineWorkflowReference\n \n workflows: list[PipelineWorkflowReference] = [\\\n PipelineWorkflowReference(\\\n steps=[\\\n {\\\n # built-in verb\\\n \"verb\": \"derive\", # https://github.com/microsoft/datashaper/blob/main/python/datashaper/datashaper/engine/verbs/derive.py\\\n \"args\": {\\\n \"column1\": \"col1\", # from above\\\n \"column2\": \"col2\", # from above\\\n \"to\": \"col_multiplied\", # new column name\\\n \"operator\": \"*\", # multiply the two columns\\\n },\\\n # Since we're trying to act on the default input, we don't need explicitly to specify an input\\\n }\\\n ]\\\n ),\\\n ]\n \n dataset = pd.DataFrame([{\"col1\": 2, \"col2\": 4}, {\"col1\": 5, \"col2\": 10}])\n outputs = []\n async for output in await run_pipeline(dataset=dataset, workflows=workflows):\n outputs.append(output)\n pipeline_result = outputs[-1]\n print(pipeline_result)\n\nFurther Reading\n---------------\n\n* To start developing within the _GraphRAG_ project, see [getting started](/graphrag/posts/developing/)\n \n* To understand the underlying concepts and execution model of the indexing library, see [the architecture documentation](/graphrag/posts/index/0-architecture/)\n \n* To get running with a series of examples, see [the examples documentation](https://github.com/microsoft/graphrag/blob/main/examples/README.md)\n \n* To read more about configuring the indexing engine, see [the configuration documentation](/graphrag/posts/config/overview)", + "markdown": "GraphRAG Indexing 🤖\n====================\n\nThe GraphRAG indexing package is a data pipeline and transformation suite that is designed to extract meaningful, structured data from unstructured text using LLMs.\n\nIndexing Pipelines are configurable. They are composed of workflows, standard and custom steps, prompt templates, and input/output adapters. Our standard pipeline is designed to:\n\n* extract entities, relationships and claims from raw text\n* perform community detection in entities\n* generate community summaries and reports at multiple levels of granularity\n* embed entities into a graph vector space\n* embed text chunks into a textual vector space\n\nThe outputs of the pipeline can be stored in a variety of formats, including JSON and Parquet - or they can be handled manually via the Python API.\n\nGetting Started\n---------------\n\n### Requirements\n\nSee the [requirements](/graphrag/posts/developing#requirements)\n section in [Get Started](/graphrag/posts/get_started)\n for details on setting up a development environment.\n\nThe Indexing Engine can be used in either a default configuration mode or with a custom pipeline. To configure GraphRAG, see the [configuration](/graphrag/posts/config/overview)\n documentation. After you have a config file you can run the pipeline using the CLI or the Python API.\n\nUsage\n-----\n\n### CLI\n\n # Via Poetry\n poetry run poe cli --root # default config mode\n poetry run poe cli --config your_pipeline.yml # custom config mode\n \n # Via Node\n yarn run:index --root # default config mode\n yarn run:index --config your_pipeline.yml # custom config mode\n \n\n### Python API\n\n from graphrag.index import run_pipeline\n from graphrag.index.config import PipelineWorkflowReference\n \n workflows: list[PipelineWorkflowReference] = [\\\n PipelineWorkflowReference(\\\n steps=[\\\n {\\\n # built-in verb\\\n \"verb\": \"derive\", # https://github.com/microsoft/datashaper/blob/main/python/datashaper/datashaper/engine/verbs/derive.py\\\n \"args\": {\\\n \"column1\": \"col1\", # from above\\\n \"column2\": \"col2\", # from above\\\n \"to\": \"col_multiplied\", # new column name\\\n \"operator\": \"*\", # multiply the two columns\\\n },\\\n # Since we're trying to act on the default input, we don't need explicitly to specify an input\\\n }\\\n ]\\\n ),\\\n ]\n \n dataset = pd.DataFrame([{\"col1\": 2, \"col2\": 4}, {\"col1\": 5, \"col2\": 10}])\n outputs = []\n async for output in await run_pipeline(dataset=dataset, workflows=workflows):\n outputs.append(output)\n pipeline_result = outputs[-1]\n print(pipeline_result)\n\nFurther Reading\n---------------\n\n* To start developing within the _GraphRAG_ project, see [getting started](/graphrag/posts/developing/)\n \n* To understand the underlying concepts and execution model of the indexing library, see [the architecture documentation](/graphrag/posts/index/0-architecture/)\n \n* To get running with a series of examples, see [the examples documentation](https://github.com/microsoft/graphrag/blob/main/examples/README.md)\n \n* To read more about configuring the indexing engine, see [the configuration documentation](/graphrag/posts/config/overview)", + "metadata": { + "title": "GraphRAG Indexing 🤖", + "sourceURL": "https://microsoft.github.io/graphrag/posts/index/overview/", + "pageStatusCode": 200, + "ogLocaleAlternate": [] + }, + "linksOnPage": [ + "https://microsoft.github.io/graphrag/", + "https://microsoft.github.io/graphrag/posts/get_started/", + "https://microsoft.github.io/graphrag/posts/developing/", + "https://microsoft.github.io/graphrag/posts/index/overview/", + "https://microsoft.github.io/graphrag/posts/index/0-architecture/", + "https://microsoft.github.io/graphrag/posts/index/1-default_dataflow/", + "https://microsoft.github.io/graphrag/posts/index/2-cli/", + "https://microsoft.github.io/graphrag/posts/config/overview/", + "https://microsoft.github.io/graphrag/posts/config/init", + "https://microsoft.github.io/graphrag/posts/config/env_vars", + "https://microsoft.github.io/graphrag/posts/config/json_yaml", + "https://microsoft.github.io/graphrag/posts/config/custom", + "https://microsoft.github.io/graphrag/posts/config/template", + "https://microsoft.github.io/graphrag/posts/prompt_tuning/overview/", + "https://microsoft.github.io/graphrag/posts/prompt_tuning/auto_prompt_tuning/", + "https://microsoft.github.io/graphrag/posts/prompt_tuning/manual_prompt_tuning/", + "https://microsoft.github.io/graphrag/posts/query/overview/", + "https://microsoft.github.io/graphrag/posts/query/1-local_search/", + "https://microsoft.github.io/graphrag/posts/query/2-question_generation/", + "https://microsoft.github.io/graphrag/posts/query/0-global_search/", + "https://microsoft.github.io/graphrag/posts/query/3-cli/", + "https://microsoft.github.io/graphrag/posts/query/notebooks/overview/", + "https://microsoft.github.io/graphrag/posts/query/notebooks/global_search_nb", + "https://microsoft.github.io/graphrag/posts/query/notebooks/local_search_nb", + "https://microsoft.github.io/graphrag/posts/developing#requirements", + "https://microsoft.github.io/graphrag/posts/get_started", + "https://microsoft.github.io/graphrag/posts/config/overview", + "https://github.com/microsoft/graphrag/blob/main/examples/README.md", + "https://go.microsoft.com/fwlink/?LinkId=521839", + "https://go.microsoft.com/fwlink/?LinkId=2259814", + "https://go.microsoft.com/fwlink/?LinkID=206977", + "https://www.microsoft.com/trademarks", + "https://www.microsoft.com", + "https://github.com/microsoft/graphrag", + "https://github.com/Azure-Samples/graphrag-accelerator" + ] + }, + { + "content": "Indexing Architecture\n=====================\n\nKey Concepts\n------------\n\n### Knowledge Model\n\nIn order to support the GraphRAG system, the outputs of the indexing engine (in the Default Configuration Mode) are aligned to a knowledge model we call the _GraphRAG Knowledge Model_. This model is designed to be an abstraction over the underlying data storage technology, and to provide a common interface for the GraphRAG system to interact with. In normal use-cases the outputs of the GraphRAG Indexer would be loaded into a database system, and the GraphRAG's Query Engine would interact with the database using the knowledge model data-store types.\n\n### DataShaper Workflows\n\nGraphRAG's Indexing Pipeline is built on top of our open-source library, [DataShaper](https://github.com/microsoft/datashaper)\n. DataShaper is a data processing library that allows users to declaratively express data pipelines, schemas, and related assets using well-defined schemas. DataShaper has implementations in JavaScript and Python, and is designed to be extensible to other languages.\n\nOne of the core resource types within DataShaper is a [Workflow](https://github.com/microsoft/datashaper/blob/main/javascript/schema/src/workflow/WorkflowSchema.ts)\n. Workflows are expressed as sequences of steps, which we call [verbs](https://github.com/microsoft/datashaper/blob/main/javascript/schema/src/workflow/verbs.ts)\n. Each step has a verb name and a configuration object. In DataShaper, these verbs model relational concepts such as SELECT, DROP, JOIN, etc.. Each verb transforms an input data table, and that table is passed down the pipeline.\n\n### LLM-based Workflow Steps\n\nGraphRAG's Indexing Pipeline implements a handful of custom verbs on top of the standard, relational verbs that our DataShaper library provides. These verbs give us the ability to augment text documents with rich, structured data using the power of LLMs such as GPT-4. We utilize these verbs in our standard workflow to extract entities, relationships, claims, community structures, and community reports and summaries. This behavior is customizable and can be extended to support many kinds of AI-based data enrichment and extraction tasks.\n\n### Workflow Graphs\n\nBecause of the complexity of our data indexing tasks, we needed to be able to express our data pipeline as series of multiple, interdependent workflows. In the GraphRAG Indexing Pipeline, each workflow may define dependencies on other workflows, effectively forming a directed acyclic graph (DAG) of workflows, which is then used to schedule processing.\n\n\\---\ntitle: Sample Workflow DAG\n---\nstateDiagram-v2\n \\[\\*\\] --> Prepare\n Prepare --> Chunk\n Chunk --> ExtractGraph\n Chunk --> EmbedDocuments\n ExtractGraph --> GenerateReports\n ExtractGraph --> EmbedGraph\n EntityResolution --> EmbedGraph\n EntityResolution --> GenerateReports\n ExtractGraph --> EntityResolution\n\n### Dataframe Message Format\n\nThe primary unit of communication between workflows, and between workflow steps is an instance of `pandas.DataFrame`. Although side-effects are possible, our goal is to be _data-centric_ and _table-centric_ in our approach to data processing. This allows us to easily reason about our data, and to leverage the power of dataframe-based ecosystems. Our underlying dataframe technology may change over time, but our primary goal is to support the DataShaper workflow schema while retaining single-machine ease of use and developer ergonomics.\n\n### LLM Caching\n\nThe GraphRAG library was designed with LLM interactions in mind, and a common setback when working with LLM APIs is various errors errors due to network latency, throttling, etc.. Because of these potential error cases, we've added a cache layer around LLM interactions. When completion requests are made using the same input set (prompt and tuning parameters), we return a cached result if one exists. This allows our indexer to be more resilient to network issues, to act idempotently, and to provide a more efficient end-user experience.", + "markdown": "Indexing Architecture\n=====================\n\nKey Concepts\n------------\n\n### Knowledge Model\n\nIn order to support the GraphRAG system, the outputs of the indexing engine (in the Default Configuration Mode) are aligned to a knowledge model we call the _GraphRAG Knowledge Model_. This model is designed to be an abstraction over the underlying data storage technology, and to provide a common interface for the GraphRAG system to interact with. In normal use-cases the outputs of the GraphRAG Indexer would be loaded into a database system, and the GraphRAG's Query Engine would interact with the database using the knowledge model data-store types.\n\n### DataShaper Workflows\n\nGraphRAG's Indexing Pipeline is built on top of our open-source library, [DataShaper](https://github.com/microsoft/datashaper)\n. DataShaper is a data processing library that allows users to declaratively express data pipelines, schemas, and related assets using well-defined schemas. DataShaper has implementations in JavaScript and Python, and is designed to be extensible to other languages.\n\nOne of the core resource types within DataShaper is a [Workflow](https://github.com/microsoft/datashaper/blob/main/javascript/schema/src/workflow/WorkflowSchema.ts)\n. Workflows are expressed as sequences of steps, which we call [verbs](https://github.com/microsoft/datashaper/blob/main/javascript/schema/src/workflow/verbs.ts)\n. Each step has a verb name and a configuration object. In DataShaper, these verbs model relational concepts such as SELECT, DROP, JOIN, etc.. Each verb transforms an input data table, and that table is passed down the pipeline.\n\n### LLM-based Workflow Steps\n\nGraphRAG's Indexing Pipeline implements a handful of custom verbs on top of the standard, relational verbs that our DataShaper library provides. These verbs give us the ability to augment text documents with rich, structured data using the power of LLMs such as GPT-4. We utilize these verbs in our standard workflow to extract entities, relationships, claims, community structures, and community reports and summaries. This behavior is customizable and can be extended to support many kinds of AI-based data enrichment and extraction tasks.\n\n### Workflow Graphs\n\nBecause of the complexity of our data indexing tasks, we needed to be able to express our data pipeline as series of multiple, interdependent workflows. In the GraphRAG Indexing Pipeline, each workflow may define dependencies on other workflows, effectively forming a directed acyclic graph (DAG) of workflows, which is then used to schedule processing.\n\n\\---\ntitle: Sample Workflow DAG\n---\nstateDiagram-v2\n \\[\\*\\] --> Prepare\n Prepare --> Chunk\n Chunk --> ExtractGraph\n Chunk --> EmbedDocuments\n ExtractGraph --> GenerateReports\n ExtractGraph --> EmbedGraph\n EntityResolution --> EmbedGraph\n EntityResolution --> GenerateReports\n ExtractGraph --> EntityResolution\n\n### Dataframe Message Format\n\nThe primary unit of communication between workflows, and between workflow steps is an instance of `pandas.DataFrame`. Although side-effects are possible, our goal is to be _data-centric_ and _table-centric_ in our approach to data processing. This allows us to easily reason about our data, and to leverage the power of dataframe-based ecosystems. Our underlying dataframe technology may change over time, but our primary goal is to support the DataShaper workflow schema while retaining single-machine ease of use and developer ergonomics.\n\n### LLM Caching\n\nThe GraphRAG library was designed with LLM interactions in mind, and a common setback when working with LLM APIs is various errors errors due to network latency, throttling, etc.. Because of these potential error cases, we've added a cache layer around LLM interactions. When completion requests are made using the same input set (prompt and tuning parameters), we return a cached result if one exists. This allows our indexer to be more resilient to network issues, to act idempotently, and to provide a more efficient end-user experience.", + "metadata": { + "title": "Indexing Architecture", + "sourceURL": "https://microsoft.github.io/graphrag/posts/index/0-architecture/", + "pageStatusCode": 200, + "ogLocaleAlternate": [] + }, + "linksOnPage": [ + "https://microsoft.github.io/graphrag/", + "https://microsoft.github.io/graphrag/posts/get_started/", + "https://microsoft.github.io/graphrag/posts/developing/", + "https://microsoft.github.io/graphrag/posts/index/overview/", + "https://microsoft.github.io/graphrag/posts/index/0-architecture/", + "https://microsoft.github.io/graphrag/posts/index/1-default_dataflow/", + "https://microsoft.github.io/graphrag/posts/index/2-cli/", + "https://microsoft.github.io/graphrag/posts/config/overview/", + "https://microsoft.github.io/graphrag/posts/config/init", + "https://microsoft.github.io/graphrag/posts/config/env_vars", + "https://microsoft.github.io/graphrag/posts/config/json_yaml", + "https://microsoft.github.io/graphrag/posts/config/custom", + "https://microsoft.github.io/graphrag/posts/config/template", + "https://microsoft.github.io/graphrag/posts/prompt_tuning/overview/", + "https://microsoft.github.io/graphrag/posts/prompt_tuning/auto_prompt_tuning/", + "https://microsoft.github.io/graphrag/posts/prompt_tuning/manual_prompt_tuning/", + "https://microsoft.github.io/graphrag/posts/query/overview/", + "https://microsoft.github.io/graphrag/posts/query/1-local_search/", + "https://microsoft.github.io/graphrag/posts/query/2-question_generation/", + "https://microsoft.github.io/graphrag/posts/query/0-global_search/", + "https://microsoft.github.io/graphrag/posts/query/3-cli/", + "https://microsoft.github.io/graphrag/posts/query/notebooks/overview/", + "https://microsoft.github.io/graphrag/posts/query/notebooks/global_search_nb", + "https://microsoft.github.io/graphrag/posts/query/notebooks/local_search_nb", + "https://github.com/microsoft/datashaper", + "https://github.com/microsoft/datashaper/blob/main/javascript/schema/src/workflow/WorkflowSchema.ts", + "https://github.com/microsoft/datashaper/blob/main/javascript/schema/src/workflow/verbs.ts", + "https://go.microsoft.com/fwlink/?LinkId=521839", + "https://go.microsoft.com/fwlink/?LinkId=2259814", + "https://go.microsoft.com/fwlink/?LinkID=206977", + "https://www.microsoft.com/trademarks", + "https://www.microsoft.com", + "https://github.com/microsoft/graphrag", + "https://github.com/Azure-Samples/graphrag-accelerator" + ] + }, + { + "content": "Indexing Dataflow\n=================\n\nThe GraphRAG Knowledge Model\n----------------------------\n\nThe knowledge model is a specification for data outputs that conform to our data-model definition. You can find these definitions in the python/graphrag/graphrag/model folder within the GraphRAG repository. The following entity types are provided. The fields here represent the fields that are text-embedded by default.\n\n* `Document` - An input document into the system. These either represent individual rows in a CSV or individual .txt file.\n* `TextUnit` - A chunk of text to analyze. The size of these chunks, their overlap, and whether they adhere to any data boundaries may be configured below. A common use case is to set `CHUNK_BY_COLUMNS` to `id` so that there is a 1-to-many relationship between documents and TextUnits instead of a many-to-many.\n* `Entity` - An entity extracted from a TextUnit. These represent people, places, events, or some other entity-model that you provide.\n* `Relationship` - A relationship between two entities. These are generated from the covariates.\n* `Covariate` - Extracted claim information, which contains statements about entities which may be time-bound.\n* `Community Report` - Once entities are generated, we perform hierarchical community detection on them and generate reports for each community in this hierarchy.\n* `Node` - This table contains layout information for rendered graph-views of the Entities and Documents which have been embedded and clustered.\n\nThe Default Configuration Workflow\n----------------------------------\n\nLet's take a look at how the default-configuration workflow transforms text documents into the _GraphRAG Knowledge Model_. This page gives a general overview of the major steps in this process. To fully configure this workflow, check out the [configuration](/graphrag/posts/config/overview/)\n documentation.\n\nPhase 1: Compose TextUnits\n--------------------------\n\nThe first phase of the default-configuration workflow is to transform input documents into _TextUnits_. A _TextUnit_ is a chunk of text that is used for our graph extraction techniques. They are also used as source-references by extracted knowledge items in order to empower breadcrumbs and provenance by concepts back to their original source tex.\n\nThe chunk size (counted in tokens), is user-configurable. By default this is set to 300 tokens, although we've had positive experience with 1200-token chunks using a single \"glean\" step. (A \"glean\" step is a follow-on extraction). Larger chunks result in lower-fidelity output and less meaningful reference texts; however, using larger chunks can result in much faster processing time.\n\nThe group-by configuration is also user-configurable. By default, we align our chunks to document boundaries, meaning that there is a strict 1-to-many relationship between Documents and TextUnits. In rare cases, this can be turned into a many-to-many relationship. This is useful when the documents are very short and we need several of them to compose a meaningful analysis unit (e.g. Tweets or a chat log)\n\nEach of these text-units are text-embedded and passed into the next phase of the pipeline.\n\n\\---\ntitle: Documents into Text Chunks\n---\nflowchart LR\n doc1\\[Document 1\\] --> tu1\\[TextUnit 1\\]\n doc1 --> tu2\\[TextUnit 2\\]\n doc2\\[Document 2\\] --> tu3\\[TextUnit 3\\]\n doc2 --> tu4\\[TextUnit 4\\]\n\nPhase 2: Graph Extraction\n-------------------------\n\nIn this phase, we analyze each text unit and extract our graph primitives: _Entities_, _Relationships_, and _Claims_. Entities and Relationships are extracted at once in our _entity\\_extract_ verb, and claims are extracted in our _claim\\_extract_ verb. Results are then combined and passed into following phases of the pipeline.\n\n\\---\ntitle: Graph Extraction\n---\nflowchart LR\n tu\\[TextUnit\\] --> ge\\[Graph Extraction\\] --> gs\\[Graph Summarization\\] --> er\\[Entity Resolution\\]\n tu --> ce\\[Claim Extraction\\]\n\n### Entity & Relationship Extraction\n\nIn this first step of graph extraction, we process each text-unit in order to extract entities and relationships out of the raw text using the LLM. The output of this step is a subgraph-per-TextUnit containing a list of **entities** with a _name_, _type_, and _description_, and a list of **relationships** with a _source_, _target_, and _description_.\n\nThese subgraphs are merged together - any entities with the same _name_ and _type_ are merged by creating an array of their descriptions. Similarly, any relationships with the same _source_ and _target_ are merged by creating an array of their descriptions.\n\n### Entity & Relationship Summarization\n\nNow that we have a graph of entities and relationships, each with a list of descriptions, we can summarize these lists into a single description per entity and relationship. This is done by asking the LLM for a short summary that captures all of the distinct information from each description. This allows all of our entities and relationships to have a single concise description.\n\n### Entity Resolution (Not Enabled by Default)\n\nThe final step of graph extraction is to resolve any entities that represent the same real-world entity but but have different names. Since this is done via LLM, and we don't want to lose information, we want to take a conservative, non-destructive approach to this.\n\nOur current implementation of Entity Resolution, however, is destructive. It will provide the LLM with a series of entities and ask it to determine which ones should be merged. Those entities are then merged together into a single entity and their relationships are updated.\n\nWe are currently exploring other entity resolution techniques. In the near future, entity resolution will be executed by creating an edge between entity variants indicating that the entities have been resolved by the indexing engine. This will allow for end-users to undo indexing-side resolutions, and add their own non-destructive resolutions using a similar process.\n\n### Claim Extraction & Emission\n\nFinally, as an independent workflow, we extract claims from the source TextUnits. These claims represent positive factual statements with an evaluated status and time-bounds. These are emitted as a primary artifact called **Covariates**.\n\nPhase 3: Graph Augmentation\n---------------------------\n\nNow that we have a usable graph of entities and relationships, we want to understand their community structure and augment the graph with additional information. This is done in two steps: _Community Detection_ and _Graph Embedding_. These give us explicit (communities) and implicit (embeddings) ways of understanding the topological structure of our graph.\n\n\\---\ntitle: Graph Augmentation\n---\nflowchart LR\n cd\\[Leiden Hierarchical Community Detection\\] --> ge\\[Node2Vec Graph Embedding\\] --> ag\\[Graph Table Emission\\]\n\n### Community Detection\n\nIn this step, we generate a hierarchy of entity communities using the Hierarchical Leiden Algorithm. This method will apply a recursive community-clustering to our graph until we reach a community-size threshold. This will allow us to understand the community structure of our graph and provide a way to navigate and summarize the graph at different levels of granularity.\n\n### Graph Embedding\n\nIn this step, we generate a vector representation of our graph using the Node2Vec algorithm. This will allow us to understand the implicit structure of our graph and provide an additional vector-space in which to search for related concepts during our query phase.\n\n### Graph Tables Emission\n\nOnce our graph augmentation steps are complete, the final **Entities** and **Relationships** tables are emitted after their text fields are text-embedded.\n\nPhase 4: Community Summarization\n--------------------------------\n\n\\---\ntitle: Community Summarization\n---\nflowchart LR\n sc\\[Generate Community Reports\\] --> ss\\[Summarize Community Reports\\] --> ce\\[Community Embedding\\] --> co\\[Community Tables Emission\\]\n\nAt this point, we have a functional graph of entities and relationships, a hierarchy of communities for the entities, as well as node2vec embeddings.\n\nNow we want to build on the communities data and generate reports for each community. This gives us a high-level understanding of the graph at several points of graph granularity. For example, if community A is the top-level community, we'll get a report about the entire graph. If the community is lower-level, we'll get a report about a local cluster.\n\n### Generate Community Reports\n\nIn this step, we generate a summary of each community using the LLM. This will allow us to understand the distinct information contained within each community and provide a scoped understanding of the graph, from either a high-level or a low-level perspective. These reports contain an executive overview and reference the key entities, relationships, and claims within the community sub-structure.\n\n### Summarize Community Reports\n\nIn this step, each _community report_ is then summarized via the LLM for shorthand use.\n\n### Community Embedding\n\nIn this step, we generate a vector representation of our communities by generating text embeddings of the community report, the community report summary, and the title of the community report.\n\n### Community Tables Emission\n\nAt this point, some bookkeeping work is performed and we emit the **Communities** and **CommunityReports** tables.\n\nPhase 5: Document Processing\n----------------------------\n\nIn this phase of the workflow, we create the _Documents_ table for the knowledge model.\n\n\\---\ntitle: Document Processing\n---\nflowchart LR\n aug\\[Augment\\] --> dp\\[Link to TextUnits\\] --> de\\[Avg. Embedding\\] --> dg\\[Document Table Emission\\]\n\n### Augment with Columns (CSV Only)\n\nIf the workflow is operating on CSV data, you may configure your workflow to add additional fields to Documents output. These fields should exist on the incoming CSV tables. Details about configuring this can be found in the [configuration documentation](/graphrag/posts/config/overview/)\n.\n\n### Link to TextUnits\n\nIn this step, we link each document to the text-units that were created in the first phase. This allows us to understand which documents are related to which text-units and vice-versa.\n\n### Document Embedding\n\nIn this step, we generate a vector representation of our documents using an average embedding of document slices. We re-chunk documents without overlapping chunks, and then generate an embedding for each chunk. We create an average of these chunks weighted by token-count and use this as the document embedding. This will allow us to understand the implicit relationship between documents, and will help us generate a network representation of our documents.\n\n### Documents Table Emission\n\nAt this point, we can emit the **Documents** table into the knowledge Model.\n\nPhase 6: Network Visualization\n------------------------------\n\nIn this phase of the workflow, we perform some steps to support network visualization of our high-dimensional vector spaces within our existing graphs. At this point there are two logical graphs at play: the _Entity-Relationship_ graph and the _Document_ graph.\n\n\\---\ntitle: Network Visualization Workflows\n---\nflowchart LR\n nv\\[Umap Documents\\] --> ne\\[Umap Entities\\] --> ng\\[Nodes Table Emission\\]\n\nFor each of the logical graphs, we perform a UMAP dimensionality reduction to generate a 2D representation of the graph. This will allow us to visualize the graph in a 2D space and understand the relationships between the nodes in the graph. The UMAP embeddings are then emitted as a table of _Nodes_. The rows of this table include a discriminator indicating whether the node is a document or an entity, and the UMAP coordinates.", + "markdown": "Indexing Dataflow\n=================\n\nThe GraphRAG Knowledge Model\n----------------------------\n\nThe knowledge model is a specification for data outputs that conform to our data-model definition. You can find these definitions in the python/graphrag/graphrag/model folder within the GraphRAG repository. The following entity types are provided. The fields here represent the fields that are text-embedded by default.\n\n* `Document` - An input document into the system. These either represent individual rows in a CSV or individual .txt file.\n* `TextUnit` - A chunk of text to analyze. The size of these chunks, their overlap, and whether they adhere to any data boundaries may be configured below. A common use case is to set `CHUNK_BY_COLUMNS` to `id` so that there is a 1-to-many relationship between documents and TextUnits instead of a many-to-many.\n* `Entity` - An entity extracted from a TextUnit. These represent people, places, events, or some other entity-model that you provide.\n* `Relationship` - A relationship between two entities. These are generated from the covariates.\n* `Covariate` - Extracted claim information, which contains statements about entities which may be time-bound.\n* `Community Report` - Once entities are generated, we perform hierarchical community detection on them and generate reports for each community in this hierarchy.\n* `Node` - This table contains layout information for rendered graph-views of the Entities and Documents which have been embedded and clustered.\n\nThe Default Configuration Workflow\n----------------------------------\n\nLet's take a look at how the default-configuration workflow transforms text documents into the _GraphRAG Knowledge Model_. This page gives a general overview of the major steps in this process. To fully configure this workflow, check out the [configuration](/graphrag/posts/config/overview/)\n documentation.\n\nPhase 1: Compose TextUnits\n--------------------------\n\nThe first phase of the default-configuration workflow is to transform input documents into _TextUnits_. A _TextUnit_ is a chunk of text that is used for our graph extraction techniques. They are also used as source-references by extracted knowledge items in order to empower breadcrumbs and provenance by concepts back to their original source tex.\n\nThe chunk size (counted in tokens), is user-configurable. By default this is set to 300 tokens, although we've had positive experience with 1200-token chunks using a single \"glean\" step. (A \"glean\" step is a follow-on extraction). Larger chunks result in lower-fidelity output and less meaningful reference texts; however, using larger chunks can result in much faster processing time.\n\nThe group-by configuration is also user-configurable. By default, we align our chunks to document boundaries, meaning that there is a strict 1-to-many relationship between Documents and TextUnits. In rare cases, this can be turned into a many-to-many relationship. This is useful when the documents are very short and we need several of them to compose a meaningful analysis unit (e.g. Tweets or a chat log)\n\nEach of these text-units are text-embedded and passed into the next phase of the pipeline.\n\n\\---\ntitle: Documents into Text Chunks\n---\nflowchart LR\n doc1\\[Document 1\\] --> tu1\\[TextUnit 1\\]\n doc1 --> tu2\\[TextUnit 2\\]\n doc2\\[Document 2\\] --> tu3\\[TextUnit 3\\]\n doc2 --> tu4\\[TextUnit 4\\]\n\nPhase 2: Graph Extraction\n-------------------------\n\nIn this phase, we analyze each text unit and extract our graph primitives: _Entities_, _Relationships_, and _Claims_. Entities and Relationships are extracted at once in our _entity\\_extract_ verb, and claims are extracted in our _claim\\_extract_ verb. Results are then combined and passed into following phases of the pipeline.\n\n\\---\ntitle: Graph Extraction\n---\nflowchart LR\n tu\\[TextUnit\\] --> ge\\[Graph Extraction\\] --> gs\\[Graph Summarization\\] --> er\\[Entity Resolution\\]\n tu --> ce\\[Claim Extraction\\]\n\n### Entity & Relationship Extraction\n\nIn this first step of graph extraction, we process each text-unit in order to extract entities and relationships out of the raw text using the LLM. The output of this step is a subgraph-per-TextUnit containing a list of **entities** with a _name_, _type_, and _description_, and a list of **relationships** with a _source_, _target_, and _description_.\n\nThese subgraphs are merged together - any entities with the same _name_ and _type_ are merged by creating an array of their descriptions. Similarly, any relationships with the same _source_ and _target_ are merged by creating an array of their descriptions.\n\n### Entity & Relationship Summarization\n\nNow that we have a graph of entities and relationships, each with a list of descriptions, we can summarize these lists into a single description per entity and relationship. This is done by asking the LLM for a short summary that captures all of the distinct information from each description. This allows all of our entities and relationships to have a single concise description.\n\n### Entity Resolution (Not Enabled by Default)\n\nThe final step of graph extraction is to resolve any entities that represent the same real-world entity but but have different names. Since this is done via LLM, and we don't want to lose information, we want to take a conservative, non-destructive approach to this.\n\nOur current implementation of Entity Resolution, however, is destructive. It will provide the LLM with a series of entities and ask it to determine which ones should be merged. Those entities are then merged together into a single entity and their relationships are updated.\n\nWe are currently exploring other entity resolution techniques. In the near future, entity resolution will be executed by creating an edge between entity variants indicating that the entities have been resolved by the indexing engine. This will allow for end-users to undo indexing-side resolutions, and add their own non-destructive resolutions using a similar process.\n\n### Claim Extraction & Emission\n\nFinally, as an independent workflow, we extract claims from the source TextUnits. These claims represent positive factual statements with an evaluated status and time-bounds. These are emitted as a primary artifact called **Covariates**.\n\nPhase 3: Graph Augmentation\n---------------------------\n\nNow that we have a usable graph of entities and relationships, we want to understand their community structure and augment the graph with additional information. This is done in two steps: _Community Detection_ and _Graph Embedding_. These give us explicit (communities) and implicit (embeddings) ways of understanding the topological structure of our graph.\n\n\\---\ntitle: Graph Augmentation\n---\nflowchart LR\n cd\\[Leiden Hierarchical Community Detection\\] --> ge\\[Node2Vec Graph Embedding\\] --> ag\\[Graph Table Emission\\]\n\n### Community Detection\n\nIn this step, we generate a hierarchy of entity communities using the Hierarchical Leiden Algorithm. This method will apply a recursive community-clustering to our graph until we reach a community-size threshold. This will allow us to understand the community structure of our graph and provide a way to navigate and summarize the graph at different levels of granularity.\n\n### Graph Embedding\n\nIn this step, we generate a vector representation of our graph using the Node2Vec algorithm. This will allow us to understand the implicit structure of our graph and provide an additional vector-space in which to search for related concepts during our query phase.\n\n### Graph Tables Emission\n\nOnce our graph augmentation steps are complete, the final **Entities** and **Relationships** tables are emitted after their text fields are text-embedded.\n\nPhase 4: Community Summarization\n--------------------------------\n\n\\---\ntitle: Community Summarization\n---\nflowchart LR\n sc\\[Generate Community Reports\\] --> ss\\[Summarize Community Reports\\] --> ce\\[Community Embedding\\] --> co\\[Community Tables Emission\\]\n\nAt this point, we have a functional graph of entities and relationships, a hierarchy of communities for the entities, as well as node2vec embeddings.\n\nNow we want to build on the communities data and generate reports for each community. This gives us a high-level understanding of the graph at several points of graph granularity. For example, if community A is the top-level community, we'll get a report about the entire graph. If the community is lower-level, we'll get a report about a local cluster.\n\n### Generate Community Reports\n\nIn this step, we generate a summary of each community using the LLM. This will allow us to understand the distinct information contained within each community and provide a scoped understanding of the graph, from either a high-level or a low-level perspective. These reports contain an executive overview and reference the key entities, relationships, and claims within the community sub-structure.\n\n### Summarize Community Reports\n\nIn this step, each _community report_ is then summarized via the LLM for shorthand use.\n\n### Community Embedding\n\nIn this step, we generate a vector representation of our communities by generating text embeddings of the community report, the community report summary, and the title of the community report.\n\n### Community Tables Emission\n\nAt this point, some bookkeeping work is performed and we emit the **Communities** and **CommunityReports** tables.\n\nPhase 5: Document Processing\n----------------------------\n\nIn this phase of the workflow, we create the _Documents_ table for the knowledge model.\n\n\\---\ntitle: Document Processing\n---\nflowchart LR\n aug\\[Augment\\] --> dp\\[Link to TextUnits\\] --> de\\[Avg. Embedding\\] --> dg\\[Document Table Emission\\]\n\n### Augment with Columns (CSV Only)\n\nIf the workflow is operating on CSV data, you may configure your workflow to add additional fields to Documents output. These fields should exist on the incoming CSV tables. Details about configuring this can be found in the [configuration documentation](/graphrag/posts/config/overview/)\n.\n\n### Link to TextUnits\n\nIn this step, we link each document to the text-units that were created in the first phase. This allows us to understand which documents are related to which text-units and vice-versa.\n\n### Document Embedding\n\nIn this step, we generate a vector representation of our documents using an average embedding of document slices. We re-chunk documents without overlapping chunks, and then generate an embedding for each chunk. We create an average of these chunks weighted by token-count and use this as the document embedding. This will allow us to understand the implicit relationship between documents, and will help us generate a network representation of our documents.\n\n### Documents Table Emission\n\nAt this point, we can emit the **Documents** table into the knowledge Model.\n\nPhase 6: Network Visualization\n------------------------------\n\nIn this phase of the workflow, we perform some steps to support network visualization of our high-dimensional vector spaces within our existing graphs. At this point there are two logical graphs at play: the _Entity-Relationship_ graph and the _Document_ graph.\n\n\\---\ntitle: Network Visualization Workflows\n---\nflowchart LR\n nv\\[Umap Documents\\] --> ne\\[Umap Entities\\] --> ng\\[Nodes Table Emission\\]\n\nFor each of the logical graphs, we perform a UMAP dimensionality reduction to generate a 2D representation of the graph. This will allow us to visualize the graph in a 2D space and understand the relationships between the nodes in the graph. The UMAP embeddings are then emitted as a table of _Nodes_. The rows of this table include a discriminator indicating whether the node is a document or an entity, and the UMAP coordinates.", + "metadata": { + "title": "Indexing Dataflow", + "sourceURL": "https://microsoft.github.io/graphrag/posts/index/1-default_dataflow/", + "pageStatusCode": 200, + "ogLocaleAlternate": [] + }, + "linksOnPage": [ + "https://microsoft.github.io/graphrag/", + "https://microsoft.github.io/graphrag/posts/get_started/", + "https://microsoft.github.io/graphrag/posts/developing/", + "https://microsoft.github.io/graphrag/posts/index/overview/", + "https://microsoft.github.io/graphrag/posts/index/0-architecture/", + "https://microsoft.github.io/graphrag/posts/index/1-default_dataflow/", + "https://microsoft.github.io/graphrag/posts/index/2-cli/", + "https://microsoft.github.io/graphrag/posts/config/overview/", + "https://microsoft.github.io/graphrag/posts/config/init", + "https://microsoft.github.io/graphrag/posts/config/env_vars", + "https://microsoft.github.io/graphrag/posts/config/json_yaml", + "https://microsoft.github.io/graphrag/posts/config/custom", + "https://microsoft.github.io/graphrag/posts/config/template", + "https://microsoft.github.io/graphrag/posts/prompt_tuning/overview/", + "https://microsoft.github.io/graphrag/posts/prompt_tuning/auto_prompt_tuning/", + "https://microsoft.github.io/graphrag/posts/prompt_tuning/manual_prompt_tuning/", + "https://microsoft.github.io/graphrag/posts/query/overview/", + "https://microsoft.github.io/graphrag/posts/query/1-local_search/", + "https://microsoft.github.io/graphrag/posts/query/2-question_generation/", + "https://microsoft.github.io/graphrag/posts/query/0-global_search/", + "https://microsoft.github.io/graphrag/posts/query/3-cli/", + "https://microsoft.github.io/graphrag/posts/query/notebooks/overview/", + "https://microsoft.github.io/graphrag/posts/query/notebooks/global_search_nb", + "https://microsoft.github.io/graphrag/posts/query/notebooks/local_search_nb", + "https://go.microsoft.com/fwlink/?LinkId=521839", + "https://go.microsoft.com/fwlink/?LinkId=2259814", + "https://go.microsoft.com/fwlink/?LinkID=206977", + "https://www.microsoft.com/trademarks", + "https://www.microsoft.com", + "https://github.com/microsoft/graphrag", + "https://github.com/Azure-Samples/graphrag-accelerator" + ] + }, + { + "content": "Indexer CLI\n===========\n\nThe GraphRAG indexer CLI allows for no-code usage of the GraphRAG Indexer.\n\n python -m graphrag.index --verbose --root --config \n --resume --reporter --emit json,csv,parquet\n --nocache\n\nCLI Arguments\n-------------\n\n* `--verbose` - Adds extra logging information during the run.\n* `--root ` - the data root directory. This should contain an `input` directory with the input data, and an `.env` file with environment variables. These are described below.\n* `--init` - This will initialize the data project directory at the specified `root` with bootstrap configuration and prompt-overrides.\n* `--resume ` - if specified, the pipeline will attempt to resume a prior run. The parquet files from the prior run will be loaded into the system as inputs, and the workflows that generated those files will be skipped. The input value should be the timestamped output folder, e.g. \"20240105-143721\".\n* `--config ` - This will opt-out of the Default Configuration mode and execute a custom configuration. If this is used, then none of the environment-variables below will apply.\n* `--reporter ` - This will specify the progress reporter to use. The default is `rich`. Valid values are `rich`, `print`, and `none`.\n* `--emit ` - This specifies the table output formats the pipeline should emit. The default is `parquet`. Valid values are `parquet`, `csv`, and `json`, comma-separated.\n* `--nocache` - This will disable the caching mechanism. This is useful for debugging and development, but should not be used in production.", + "markdown": "Indexer CLI\n===========\n\nThe GraphRAG indexer CLI allows for no-code usage of the GraphRAG Indexer.\n\n python -m graphrag.index --verbose --root --config \n --resume --reporter --emit json,csv,parquet\n --nocache\n\nCLI Arguments\n-------------\n\n* `--verbose` - Adds extra logging information during the run.\n* `--root ` - the data root directory. This should contain an `input` directory with the input data, and an `.env` file with environment variables. These are described below.\n* `--init` - This will initialize the data project directory at the specified `root` with bootstrap configuration and prompt-overrides.\n* `--resume ` - if specified, the pipeline will attempt to resume a prior run. The parquet files from the prior run will be loaded into the system as inputs, and the workflows that generated those files will be skipped. The input value should be the timestamped output folder, e.g. \"20240105-143721\".\n* `--config ` - This will opt-out of the Default Configuration mode and execute a custom configuration. If this is used, then none of the environment-variables below will apply.\n* `--reporter ` - This will specify the progress reporter to use. The default is `rich`. Valid values are `rich`, `print`, and `none`.\n* `--emit ` - This specifies the table output formats the pipeline should emit. The default is `parquet`. Valid values are `parquet`, `csv`, and `json`, comma-separated.\n* `--nocache` - This will disable the caching mechanism. This is useful for debugging and development, but should not be used in production.", + "metadata": { + "title": "Indexer CLI", + "sourceURL": "https://microsoft.github.io/graphrag/posts/index/2-cli/", + "pageStatusCode": 200, + "ogLocaleAlternate": [] + }, + "linksOnPage": [ + "https://microsoft.github.io/graphrag/", + "https://microsoft.github.io/graphrag/posts/get_started/", + "https://microsoft.github.io/graphrag/posts/developing/", + "https://microsoft.github.io/graphrag/posts/index/overview/", + "https://microsoft.github.io/graphrag/posts/index/0-architecture/", + "https://microsoft.github.io/graphrag/posts/index/1-default_dataflow/", + "https://microsoft.github.io/graphrag/posts/index/2-cli/", + "https://microsoft.github.io/graphrag/posts/config/overview/", + "https://microsoft.github.io/graphrag/posts/config/init", + "https://microsoft.github.io/graphrag/posts/config/env_vars", + "https://microsoft.github.io/graphrag/posts/config/json_yaml", + "https://microsoft.github.io/graphrag/posts/config/custom", + "https://microsoft.github.io/graphrag/posts/config/template", + "https://microsoft.github.io/graphrag/posts/prompt_tuning/overview/", + "https://microsoft.github.io/graphrag/posts/prompt_tuning/auto_prompt_tuning/", + "https://microsoft.github.io/graphrag/posts/prompt_tuning/manual_prompt_tuning/", + "https://microsoft.github.io/graphrag/posts/query/overview/", + "https://microsoft.github.io/graphrag/posts/query/1-local_search/", + "https://microsoft.github.io/graphrag/posts/query/2-question_generation/", + "https://microsoft.github.io/graphrag/posts/query/0-global_search/", + "https://microsoft.github.io/graphrag/posts/query/3-cli/", + "https://microsoft.github.io/graphrag/posts/query/notebooks/overview/", + "https://microsoft.github.io/graphrag/posts/query/notebooks/global_search_nb", + "https://microsoft.github.io/graphrag/posts/query/notebooks/local_search_nb", + "https://go.microsoft.com/fwlink/?LinkId=521839", + "https://go.microsoft.com/fwlink/?LinkId=2259814", + "https://go.microsoft.com/fwlink/?LinkID=206977", + "https://www.microsoft.com/trademarks", + "https://www.microsoft.com", + "https://github.com/microsoft/graphrag", + "https://github.com/Azure-Samples/graphrag-accelerator" + ] + }, + { + "content": "Configuring GraphRAG Indexing\n=============================\n\nThe GraphRAG system is highly configurable. This page provides an overview of the configuration options available for the GraphRAG indexing engine.\n\nDefault Configuration Mode\n--------------------------\n\nThe default configuration mode is the simplest way to get started with the GraphRAG system. It is designed to work out-of-the-box with minimal configuration. The primary configuration sections for the Indexing Engine pipelines are described below. The main ways to set up GraphRAG in Default Configuration mode are via:\n\n* [Init command](/graphrag/posts/config/init)\n (recommended)\n* [Purely using environment variables](/graphrag/posts/config/env_vars)\n \n* [Using JSON or YAML for deeper control](/graphrag/posts/config/json_yaml)\n \n\nCustom Configuration Mode\n-------------------------\n\nCustom configuration mode is an advanced use-case. Most users will want to use the Default Configuration instead. The primary configuration sections for Indexing Engine pipelines are described below. Details about how to use custom configuration are available in the [Custom Configuration Mode](/graphrag/posts/config/custom)\n documentation.", + "markdown": "Configuring GraphRAG Indexing\n=============================\n\nThe GraphRAG system is highly configurable. This page provides an overview of the configuration options available for the GraphRAG indexing engine.\n\nDefault Configuration Mode\n--------------------------\n\nThe default configuration mode is the simplest way to get started with the GraphRAG system. It is designed to work out-of-the-box with minimal configuration. The primary configuration sections for the Indexing Engine pipelines are described below. The main ways to set up GraphRAG in Default Configuration mode are via:\n\n* [Init command](/graphrag/posts/config/init)\n (recommended)\n* [Purely using environment variables](/graphrag/posts/config/env_vars)\n \n* [Using JSON or YAML for deeper control](/graphrag/posts/config/json_yaml)\n \n\nCustom Configuration Mode\n-------------------------\n\nCustom configuration mode is an advanced use-case. Most users will want to use the Default Configuration instead. The primary configuration sections for Indexing Engine pipelines are described below. Details about how to use custom configuration are available in the [Custom Configuration Mode](/graphrag/posts/config/custom)\n documentation.", + "metadata": { + "title": "Configuring GraphRAG Indexing", + "sourceURL": "https://microsoft.github.io/graphrag/posts/config/overview/", + "pageStatusCode": 200, + "ogLocaleAlternate": [] + }, + "linksOnPage": [ + "https://microsoft.github.io/graphrag/", + "https://microsoft.github.io/graphrag/posts/get_started/", + "https://microsoft.github.io/graphrag/posts/developing/", + "https://microsoft.github.io/graphrag/posts/index/overview/", + "https://microsoft.github.io/graphrag/posts/index/0-architecture/", + "https://microsoft.github.io/graphrag/posts/index/1-default_dataflow/", + "https://microsoft.github.io/graphrag/posts/index/2-cli/", + "https://microsoft.github.io/graphrag/posts/config/overview/", + "https://microsoft.github.io/graphrag/posts/config/init", + "https://microsoft.github.io/graphrag/posts/config/env_vars", + "https://microsoft.github.io/graphrag/posts/config/json_yaml", + "https://microsoft.github.io/graphrag/posts/config/custom", + "https://microsoft.github.io/graphrag/posts/config/template", + "https://microsoft.github.io/graphrag/posts/prompt_tuning/overview/", + "https://microsoft.github.io/graphrag/posts/prompt_tuning/auto_prompt_tuning/", + "https://microsoft.github.io/graphrag/posts/prompt_tuning/manual_prompt_tuning/", + "https://microsoft.github.io/graphrag/posts/query/overview/", + "https://microsoft.github.io/graphrag/posts/query/1-local_search/", + "https://microsoft.github.io/graphrag/posts/query/2-question_generation/", + "https://microsoft.github.io/graphrag/posts/query/0-global_search/", + "https://microsoft.github.io/graphrag/posts/query/3-cli/", + "https://microsoft.github.io/graphrag/posts/query/notebooks/overview/", + "https://microsoft.github.io/graphrag/posts/query/notebooks/global_search_nb", + "https://microsoft.github.io/graphrag/posts/query/notebooks/local_search_nb", + "https://go.microsoft.com/fwlink/?LinkId=521839", + "https://go.microsoft.com/fwlink/?LinkId=2259814", + "https://go.microsoft.com/fwlink/?LinkID=206977", + "https://www.microsoft.com/trademarks", + "https://www.microsoft.com", + "https://github.com/microsoft/graphrag", + "https://github.com/Azure-Samples/graphrag-accelerator" + ] + }, + { + "content": "Configuring GraphRAG Indexing\n=============================\n\nTo start using GraphRAG, you need to configure the system. The `init` command is the easiest way to get started. It will create a `.env` and `settings.yaml` files in the specified directory with the necessary configuration settings. It will also output the default LLM prompts used by GraphRAG.\n\nUsage\n-----\n\n python -m graphrag.index [--init] [--root PATH]\n\nOptions\n-------\n\n* `--init` - Initialize the directory with the necessary configuration files.\n* `--root PATH` - The root directory to initialize. Default is the current directory.\n\nExample\n-------\n\n python -m graphrag.index --init --root ./ragtest\n\nOutput\n------\n\nThe `init` command will create the following files in the specified directory:\n\n* `settings.yaml` - The configuration settings file. This file contains the configuration settings for GraphRAG.\n* `.env` - The environment variables file. These are referenced in the `settings.yaml` file.\n* `prompts/` - The LLM prompts folder. This contains the default prompts used by GraphRAG, you can modify them or run the [Auto Prompt Tuning](/graphrag/posts/prompt_tuning/auto_prompt_tuning)\n command to generate new prompts adapted to your data.\n\nNext Steps\n----------\n\nAfter initializing your workspace, you can either run the [Prompt Tuning](/graphrag/posts/prompt_tuning/auto_prompt_tuning)\n command to adapt the prompts to your data or even start running the [Indexing Pipeline](/graphrag/posts/index/overview)\n to index your data. For more information on configuring GraphRAG, see the [Configuration](/graphrag/posts/config/overview)\n documentation.", + "markdown": "Configuring GraphRAG Indexing\n=============================\n\nTo start using GraphRAG, you need to configure the system. The `init` command is the easiest way to get started. It will create a `.env` and `settings.yaml` files in the specified directory with the necessary configuration settings. It will also output the default LLM prompts used by GraphRAG.\n\nUsage\n-----\n\n python -m graphrag.index [--init] [--root PATH]\n\nOptions\n-------\n\n* `--init` - Initialize the directory with the necessary configuration files.\n* `--root PATH` - The root directory to initialize. Default is the current directory.\n\nExample\n-------\n\n python -m graphrag.index --init --root ./ragtest\n\nOutput\n------\n\nThe `init` command will create the following files in the specified directory:\n\n* `settings.yaml` - The configuration settings file. This file contains the configuration settings for GraphRAG.\n* `.env` - The environment variables file. These are referenced in the `settings.yaml` file.\n* `prompts/` - The LLM prompts folder. This contains the default prompts used by GraphRAG, you can modify them or run the [Auto Prompt Tuning](/graphrag/posts/prompt_tuning/auto_prompt_tuning)\n command to generate new prompts adapted to your data.\n\nNext Steps\n----------\n\nAfter initializing your workspace, you can either run the [Prompt Tuning](/graphrag/posts/prompt_tuning/auto_prompt_tuning)\n command to adapt the prompts to your data or even start running the [Indexing Pipeline](/graphrag/posts/index/overview)\n to index your data. For more information on configuring GraphRAG, see the [Configuration](/graphrag/posts/config/overview)\n documentation.", + "metadata": { + "title": "Configuring GraphRAG Indexing", + "sourceURL": "https://microsoft.github.io/graphrag/posts/config/init", + "pageStatusCode": 200, + "ogLocaleAlternate": [] + }, + "linksOnPage": [ + "https://microsoft.github.io/graphrag/", + "https://microsoft.github.io/graphrag/posts/get_started/", + "https://microsoft.github.io/graphrag/posts/developing/", + "https://microsoft.github.io/graphrag/posts/index/overview/", + "https://microsoft.github.io/graphrag/posts/index/0-architecture/", + "https://microsoft.github.io/graphrag/posts/index/1-default_dataflow/", + "https://microsoft.github.io/graphrag/posts/index/2-cli/", + "https://microsoft.github.io/graphrag/posts/config/overview/", + "https://microsoft.github.io/graphrag/posts/config/init", + "https://microsoft.github.io/graphrag/posts/config/env_vars", + "https://microsoft.github.io/graphrag/posts/config/json_yaml", + "https://microsoft.github.io/graphrag/posts/config/custom", + "https://microsoft.github.io/graphrag/posts/config/template", + "https://microsoft.github.io/graphrag/posts/prompt_tuning/overview/", + "https://microsoft.github.io/graphrag/posts/prompt_tuning/auto_prompt_tuning/", + "https://microsoft.github.io/graphrag/posts/prompt_tuning/manual_prompt_tuning/", + "https://microsoft.github.io/graphrag/posts/query/overview/", + "https://microsoft.github.io/graphrag/posts/query/1-local_search/", + "https://microsoft.github.io/graphrag/posts/query/2-question_generation/", + "https://microsoft.github.io/graphrag/posts/query/0-global_search/", + "https://microsoft.github.io/graphrag/posts/query/3-cli/", + "https://microsoft.github.io/graphrag/posts/query/notebooks/overview/", + "https://microsoft.github.io/graphrag/posts/query/notebooks/global_search_nb", + "https://microsoft.github.io/graphrag/posts/query/notebooks/local_search_nb", + "https://microsoft.github.io/graphrag/posts/prompt_tuning/auto_prompt_tuning", + "https://microsoft.github.io/graphrag/posts/index/overview", + "https://microsoft.github.io/graphrag/posts/config/overview", + "https://go.microsoft.com/fwlink/?LinkId=521839", + "https://go.microsoft.com/fwlink/?LinkId=2259814", + "https://go.microsoft.com/fwlink/?LinkID=206977", + "https://www.microsoft.com/trademarks", + "https://www.microsoft.com", + "https://github.com/microsoft/graphrag", + "https://github.com/Azure-Samples/graphrag-accelerator" + ] + }, + { + "content": "Default Configuration Mode (using Env Vars)\n===========================================\n\nText-Embeddings Customization\n-----------------------------\n\nBy default, the GraphRAG indexer will only emit embeddings required for our query methods. However, the model has embeddings defined for all plaintext fields, and these can be generated by setting the `GRAPHRAG_EMBEDDING_TARGET` environment variable to `all`.\n\nIf the embedding target is `all`, and you want to only embed a subset of these fields, you may specify which embeddings to skip using the `GRAPHRAG_EMBEDDING_SKIP` argument described below.\n\n### Embedded Fields\n\n* `text_unit.text`\n* `document.raw_content`\n* `entity.name`\n* `entity.description`\n* `relationship.description`\n* `community.title`\n* `community.summary`\n* `community.full_content`\n\nInput Data\n----------\n\nOur pipeline can ingest .csv or .txt data from an input folder. These files can be nested within subfolders. To configure how input data is handled, what fields are mapped over, and how timestamps are parsed, look for configuration values starting with `GRAPHRAG_INPUT_` below. In general, CSV-based data provides the most customizeability. Each CSV should at least contain a `text` field (which can be mapped with environment variables), but it's helpful if they also have `title`, `timestamp`, and `source` fields. Additional fields can be included as well, which will land as extra fields on the `Document` table.\n\nBase LLM Settings\n-----------------\n\nThese are the primary settings for configuring LLM connectivity.\n\n| Parameter | Required? | Description | Type | Default Value |\n| --- | --- | --- | --- | --- |\n| `GRAPHRAG_API_KEY` | **Yes for OpenAI. Optional for AOAI** | The API key. (Note: \\`OPENAI\\_API\\_KEY is also used as a fallback). If not defined when using AOAI, managed identity will be used. | `str` | `None` |\n| `GRAPHRAG_API_BASE` | **For AOAI** | The API Base URL | `str` | `None` |\n| `GRAPHRAG_API_VERSION` | **For AOAI** | The AOAI API version. | `str` | `None` |\n| `GRAPHRAG_API_ORGANIZATION` | | The AOAI organization. | `str` | `None` |\n| `GRAPHRAG_API_PROXY` | | The AOAI proxy. | `str` | `None` |\n\nText Generation Settings\n------------------------\n\nThese settings control the text generation model used by the pipeline. Any settings with a fallback will use the base LLM settings, if available.\n\n| Parameter | Required? | Description | Type | Default Value |\n| --- | --- | --- | --- | --- |\n| `GRAPHRAG_LLM_TYPE` | **For AOAI** | The LLM operation type. Either `openai_chat` or `azure_openai_chat` | `str` | `openai_chat` |\n| `GRAPHRAG_LLM_DEPLOYMENT_NAME` | **For AOAI** | The AOAI model deployment name. | `str` | `None` |\n| `GRAPHRAG_LLM_API_KEY` | Yes (uses fallback) | The API key. If not defined when using AOAI, managed identity will be used. | `str` | `None` |\n| `GRAPHRAG_LLM_API_BASE` | For AOAI (uses fallback) | The API Base URL | `str` | `None` |\n| `GRAPHRAG_LLM_API_VERSION` | For AOAI (uses fallback) | The AOAI API version. | `str` | `None` |\n| `GRAPHRAG_LLM_API_ORGANIZATION` | For AOAI (uses fallback) | The AOAI organization. | `str` | `None` |\n| `GRAPHRAG_LLM_API_PROXY` | | The AOAI proxy. | `str` | `None` |\n| `GRAPHRAG_LLM_MODEL` | | The LLM model. | `str` | `gpt-4-turbo-preview` |\n| `GRAPHRAG_LLM_MAX_TOKENS` | | The maximum number of tokens. | `int` | `4000` |\n| `GRAPHRAG_LLM_REQUEST_TIMEOUT` | | The maximum number of seconds to wait for a response from the chat client. | `int` | `180` |\n| `GRAPHRAG_LLM_MODEL_SUPPORTS_JSON` | | Indicates whether the given model supports JSON output mode. `True` to enable. | `str` | `None` |\n| `GRAPHRAG_LLM_THREAD_COUNT` | | The number of threads to use for LLM parallelization. | `int` | 50 |\n| `GRAPHRAG_LLM_THREAD_STAGGER` | | The time to wait (in seconds) between starting each thread. | `float` | 0.3 |\n| `GRAPHRAG_LLM_CONCURRENT_REQUESTS` | | The number of concurrent requests to allow for the embedding client. | `int` | 25 |\n| `GRAPHRAG_LLM_TOKENS_PER_MINUTE` | | The number of tokens per minute to allow for the LLM client. 0 = Bypass | `int` | 0 |\n| `GRAPHRAG_LLM_REQUESTS_PER_MINUTE` | | The number of requests per minute to allow for the LLM client. 0 = Bypass | `int` | 0 |\n| `GRAPHRAG_LLM_MAX_RETRIES` | | The maximum number of retries to attempt when a request fails. | `int` | 10 |\n| `GRAPHRAG_LLM_MAX_RETRY_WAIT` | | The maximum number of seconds to wait between retries. | `int` | 10 |\n| `GRAPHRAG_LLM_SLEEP_ON_RATE_LIMIT_RECOMMENDATION` | | Whether to sleep on rate limit recommendation. (Azure Only) | `bool` | `True` |\n| `GRAPHRAG_LLM_TEMPERATURE` | | The temperature to use generation. | `float` | 0 |\n| `GRAPHRAG_LLM_TOP_P` | | The top\\_p to use for sampling. | `float` | 1 |\n| `GRAPHRAG_LLM_N` | | The number of responses to generate. | `int` | 1 |\n\nText Embedding Settings\n-----------------------\n\nThese settings control the text embedding model used by the pipeline. Any settings with a fallback will use the base LLM settings, if available.\n\n| Parameter | Required ? | Description | Type | Default |\n| --- | --- | --- | --- | --- |\n| `GRAPHRAG_EMBEDDING_TYPE` | **For AOAI** | The embedding client to use. Either `openai_embedding` or `azure_openai_embedding` | `str` | `openai_embedding` |\n| `GRAPHRAG_EMBEDDING_DEPLOYMENT_NAME` | **For AOAI** | The AOAI deployment name. | `str` | `None` |\n| `GRAPHRAG_EMBEDDING_API_KEY` | Yes (uses fallback) | The API key to use for the embedding client. If not defined when using AOAI, managed identity will be used. | `str` | `None` |\n| `GRAPHRAG_EMBEDDING_API_BASE` | For AOAI (uses fallback) | The API base URL. | `str` | `None` |\n| `GRAPHRAG_EMBEDDING_API_VERSION` | For AOAI (uses fallback) | The AOAI API version to use for the embedding client. | `str` | `None` |\n| `GRAPHRAG_EMBEDDING_API_ORGANIZATION` | For AOAI (uses fallback) | The AOAI organization to use for the embedding client. | `str` | `None` |\n| `GRAPHRAG_EMBEDDING_API_PROXY` | | The AOAI proxy to use for the embedding client. | `str` | `None` |\n| `GRAPHRAG_EMBEDDING_MODEL` | | The model to use for the embedding client. | `str` | `text-embedding-3-small` |\n| `GRAPHRAG_EMBEDDING_BATCH_SIZE` | | The number of texts to embed at once. [(Azure limit is 16)](https://learn.microsoft.com/en-us/azure/ai-ce) | `int` | 16 |\n| `GRAPHRAG_EMBEDDING_BATCH_MAX_TOKENS` | | The maximum tokens per batch [(Azure limit is 8191)](https://learn.microsoft.com/en-us/azure/ai-services/openai/reference) | `int` | 8191 |\n| `GRAPHRAG_EMBEDDING_TARGET` | | The target fields to embed. Either `required` or `all`. | `str` | `required` |\n| `GRAPHRAG_EMBEDDING_SKIP` | | A comma-separated list of fields to skip embeddings for . (e.g. 'relationship.description') | `str` | `None` |\n| `GRAPHRAG_EMBEDDING_THREAD_COUNT` | | The number of threads to use for parallelization for embeddings. | `int` | |\n| `GRAPHRAG_EMBEDDING_THREAD_STAGGER` | | The time to wait (in seconds) between starting each thread for embeddings. | `float` | 50 |\n| `GRAPHRAG_EMBEDDING_CONCURRENT_REQUESTS` | | The number of concurrent requests to allow for the embedding client. | `int` | 25 |\n| `GRAPHRAG_EMBEDDING_TOKENS_PER_MINUTE` | | The number of tokens per minute to allow for the embedding client. 0 = Bypass | `int` | 0 |\n| `GRAPHRAG_EMBEDDING_REQUESTS_PER_MINUTE` | | The number of requests per minute to allow for the embedding client. 0 = Bypass | `int` | 0 |\n| `GRAPHRAG_EMBEDDING_MAX_RETRIES` | | The maximum number of retries to attempt when a request fails. | `int` | 10 |\n| `GRAPHRAG_EMBEDDING_MAX_RETRY_WAIT` | | The maximum number of seconds to wait between retries. | `int` | 10 |\n| `GRAPHRAG_EMBEDDING_TARGET` | | The target fields to embed. Either `required` or `all`. | `str` | `required` |\n| `GRAPHRAG_EMBEDDING_SLEEP_ON_RATE_LIMIT_RECOMMENDATION` | | Whether to sleep on rate limit recommendation. (Azure Only) | `bool` | `True` |\n\nInput Settings\n--------------\n\nThese settings control the data input used by the pipeline. Any settings with a fallback will use the base LLM settings, if available.\n\n### Plaintext Input Data (`GRAPHRAG_INPUT_FILE_TYPE`\\=text)\n\n| Parameter | Description | Type | Required or Optional | Default |\n| --- | --- | --- | --- | --- |\n| `GRAPHRAG_INPUT_FILE_PATTERN` | The file pattern regexp to use when reading input files from the input directory. | `str` | optional | `.*\\.txt$` |\n\n### CSV Input Data (`GRAPHRAG_INPUT_FILE_TYPE`\\=csv)\n\n| Parameter | Description | Type | Required or Optional | Default |\n| --- | --- | --- | --- | --- |\n| `GRAPHRAG_INPUT_TYPE` | The input storage type to use when reading files. (`file` or `blob`) | `str` | optional | `file` |\n| `GRAPHRAG_INPUT_FILE_PATTERN` | The file pattern regexp to use when reading input files from the input directory. | `str` | optional | `.*\\.txt$` |\n| `GRAPHRAG_INPUT_SOURCE_COLUMN` | The 'source' column to use when reading CSV input files. | `str` | optional | `source` |\n| `GRAPHRAG_INPUT_TIMESTAMP_COLUMN` | The 'timestamp' column to use when reading CSV input files. | `str` | optional | `None` |\n| `GRAPHRAG_INPUT_TIMESTAMP_FORMAT` | The timestamp format to use when parsing timestamps in the timestamp column. | `str` | optional | `None` |\n| `GRAPHRAG_INPUT_TEXT_COLUMN` | The 'text' column to use when reading CSV input files. | `str` | optional | `text` |\n| `GRAPHRAG_INPUT_DOCUMENT_ATTRIBUTE_COLUMNS` | A list of CSV columns, comma-separated, to incorporate as document fields. | `str` | optional | `id` |\n| `GRAPHRAG_INPUT_TITLE_COLUMN` | The 'title' column to use when reading CSV input files. | `str` | optional | `title` |\n| `GRAPHRAG_INPUT_STORAGE_ACCOUNT_BLOB_URL` | The Azure Storage blob endpoint to use when in `blob` mode and using managed identity. Will have the format `https://.blob.core.windows.net` | `str` | optional | `None` |\n| `GRAPHRAG_INPUT_CONNECTION_STRING` | The connection string to use when reading CSV input files from Azure Blob Storage. | `str` | optional | `None` |\n| `GRAPHRAG_INPUT_CONTAINER_NAME` | The container name to use when reading CSV input files from Azure Blob Storage. | `str` | optional | `None` |\n| `GRAPHRAG_INPUT_BASE_DIR` | The base directory to read input files from. | `str` | optional | `None` |\n\nData Mapping Settings\n---------------------\n\n| Parameter | Description | Type | Required or Optional | Default |\n| --- | --- | --- | --- | --- |\n| `GRAPHRAG_INPUT_FILE_TYPE` | The type of input data, `csv` or `text` | `str` | optional | `text` |\n| `GRAPHRAG_INPUT_ENCODING` | The encoding to apply when reading CSV/text input files. | `str` | optional | `utf-8` |\n\nData Chunking\n-------------\n\n| Parameter | Description | Type | Required or Optional | Default |\n| --- | --- | --- | --- | --- |\n| `GRAPHRAG_CHUNK_SIZE` | The chunk size in tokens for text-chunk analysis windows. | `str` | optional | 1200 |\n| `GRAPHRAG_CHUNK_OVERLAP` | The chunk overlap in tokens for text-chunk analysis windows. | `str` | optional | 100 |\n| `GRAPHRAG_CHUNK_BY_COLUMNS` | A comma-separated list of document attributes to groupby when performing TextUnit chunking. | `str` | optional | `id` |\n| `GRAPHRAG_CHUNK_ENCODING_MODEL` | The encoding model to use for chunking. | `str` | optional | The top-level encoding model. |\n\nPrompting Overrides\n-------------------\n\n| Parameter | Description | Type | Required or Optional | Default |\n| --- | --- | --- | --- | --- |\n| `GRAPHRAG_ENTITY_EXTRACTION_PROMPT_FILE` | The path (relative to the root) of an entity extraction prompt template text file. | `str` | optional | `None` |\n| `GRAPHRAG_ENTITY_EXTRACTION_MAX_GLEANINGS` | The maximum number of redrives (gleanings) to invoke when extracting entities in a loop. | `int` | optional | 1 |\n| `GRAPHRAG_ENTITY_EXTRACTION_ENTITY_TYPES` | A comma-separated list of entity types to extract. | `str` | optional | `organization,person,event,geo` |\n| `GRAPHRAG_ENTITY_EXTRACTION_ENCODING_MODEL` | The encoding model to use for entity extraction. | `str` | optional | The top-level encoding model. |\n| `GRAPHRAG_SUMMARIZE_DESCRIPTIONS_PROMPT_FILE` | The path (relative to the root) of an description summarization prompt template text file. | `str` | optional | `None` |\n| `GRAPHRAG_SUMMARIZE_DESCRIPTIONS_MAX_LENGTH` | The maximum number of tokens to generate per description summarization. | `int` | optional | 500 |\n| `GRAPHRAG_CLAIM_EXTRACTION_ENABLED` | Whether claim extraction is enabled for this pipeline. | `bool` | optional | `False` |\n| `GRAPHRAG_CLAIM_EXTRACTION_DESCRIPTION` | The claim\\_description prompting argument to utilize. | `string` | optional | \"Any claims or facts that could be relevant to threat analysis.\" |\n| `GRAPHRAG_CLAIM_EXTRACTION_PROMPT_FILE` | The claim extraction prompt to utilize. | `string` | optional | `None` |\n| `GRAPHRAG_CLAIM_EXTRACTION_MAX_GLEANINGS` | The maximum number of redrives (gleanings) to invoke when extracting claims in a loop. | `int` | optional | 1 |\n| `GRAPHRAG_CLAIM_EXTRACTION_ENCODING_MODEL` | The encoding model to use for claim extraction. | `str` | optional | The top-level encoding model |\n| `GRAPHRAG_COMMUNITY_REPORTS_PROMPT_FILE` | The community reports extraction prompt to utilize. | `string` | optional | `None` |\n| `GRAPHRAG_COMMUNITY_REPORTS_MAX_LENGTH` | The maximum number of tokens to generate per community reports. | `int` | optional | 1500 |\n\nStorage\n-------\n\nThis section controls the storage mechanism used by the pipeline used for emitting output tables.\n\n| Parameter | Description | Type | Required or Optional | Default |\n| --- | --- | --- | --- | --- |\n| `GRAPHRAG_STORAGE_TYPE` | The type of reporter to use. Options are `file`, `memory`, or `blob` | `str` | optional | `file` |\n| `GRAPHRAG_STORAGE_STORAGE_ACCOUNT_BLOB_URL` | The Azure Storage blob endpoint to use when in `blob` mode and using managed identity. Will have the format `https://.blob.core.windows.net` | `str` | optional | None |\n| `GRAPHRAG_STORAGE_CONNECTION_STRING` | The Azure Storage connection string to use when in `blob` mode. | `str` | optional | None |\n| `GRAPHRAG_STORAGE_CONTAINER_NAME` | The Azure Storage container name to use when in `blob` mode. | `str` | optional | None |\n| `GRAPHRAG_STORAGE_BASE_DIR` | The base path to data outputs outputs. | `str` | optional | None |\n\nCache\n-----\n\nThis section controls the cache mechanism used by the pipeline. This is used to cache LLM invocation results.\n\n| Parameter | Description | Type | Required or Optional | Default |\n| --- | --- | --- | --- | --- |\n| `GRAPHRAG_CACHE_TYPE` | The type of cache to use. Options are `file`, `memory`, `none` or `blob` | `str` | optional | `file` |\n| `GRAPHRAG_CACHE_STORAGE_ACCOUNT_BLOB_URL` | The Azure Storage blob endpoint to use when in `blob` mode and using managed identity. Will have the format `https://.blob.core.windows.net` | `str` | optional | None |\n| `GRAPHRAG_CACHE_CONNECTION_STRING` | The Azure Storage connection string to use when in `blob` mode. | `str` | optional | None |\n| `GRAPHRAG_CACHE_CONTAINER_NAME` | The Azure Storage container name to use when in `blob` mode. | `str` | optional | None |\n| `GRAPHRAG_CACHE_BASE_DIR` | The base path to the reporting outputs. | `str` | optional | None |\n\nReporting\n---------\n\nThis section controls the reporting mechanism used by the pipeline, for common events and error messages. The default is to write reports to a file in the output directory. However, you can also choose to write reports to the console or to an Azure Blob Storage container.\n\n| Parameter | Description | Type | Required or Optional | Default |\n| --- | --- | --- | --- | --- |\n| `GRAPHRAG_REPORTING_TYPE` | The type of reporter to use. Options are `file`, `console`, or `blob` | `str` | optional | `file` |\n| `GRAPHRAG_REPORTING_STORAGE_ACCOUNT_BLOB_URL` | The Azure Storage blob endpoint to use when in `blob` mode and using managed identity. Will have the format `https://.blob.core.windows.net` | `str` | optional | None |\n| `GRAPHRAG_REPORTING_CONNECTION_STRING` | The Azure Storage connection string to use when in `blob` mode. | `str` | optional | None |\n| `GRAPHRAG_REPORTING_CONTAINER_NAME` | The Azure Storage container name to use when in `blob` mode. | `str` | optional | None |\n| `GRAPHRAG_REPORTING_BASE_DIR` | The base path to the reporting outputs. | `str` | optional | None |\n\nNode2Vec Parameters\n-------------------\n\n| Parameter | Description | Type | Required or Optional | Default |\n| --- | --- | --- | --- | --- |\n| `GRAPHRAG_NODE2VEC_ENABLED` | Whether to enable Node2Vec | `bool` | optional | False |\n| `GRAPHRAG_NODE2VEC_NUM_WALKS` | The Node2Vec number of walks to perform | `int` | optional | 10 |\n| `GRAPHRAG_NODE2VEC_WALK_LENGTH` | The Node2Vec walk length | `int` | optional | 40 |\n| `GRAPHRAG_NODE2VEC_WINDOW_SIZE` | The Node2Vec window size | `int` | optional | 2 |\n| `GRAPHRAG_NODE2VEC_ITERATIONS` | The number of iterations to run node2vec | `int` | optional | 3 |\n| `GRAPHRAG_NODE2VEC_RANDOM_SEED` | The random seed to use for node2vec | `int` | optional | 597832 |\n\nData Snapshotting\n-----------------\n\n| Parameter | Description | Type | Required or Optional | Default |\n| --- | --- | --- | --- | --- |\n| `GRAPHRAG_SNAPSHOT_GRAPHML` | Whether to enable GraphML snapshots. | `bool` | optional | False |\n| `GRAPHRAG_SNAPSHOT_RAW_ENTITIES` | Whether to enable raw entity snapshots. | `bool` | optional | False |\n| `GRAPHRAG_SNAPSHOT_TOP_LEVEL_NODES` | Whether to enable top-level node snapshots. | `bool` | optional | False |\n\nMiscellaneous Settings\n======================\n\n| Parameter | Description | Type | Required or Optional | Default |\n| --- | --- | --- | --- | --- |\n| `GRAPHRAG_ASYNC_MODE` | Which async mode to use. Either `asyncio` or `threaded`. | `str` | optional | `asyncio` |\n| `GRAPHRAG_ENCODING_MODEL` | The text encoding model, used in tiktoken, to encode text. | `str` | optional | `cl100k_base` |\n| `GRAPHRAG_MAX_CLUSTER_SIZE` | The maximum number of entities to include in a single Leiden cluster. | `int` | optional | 10 |\n| `GRAPHRAG_SKIP_WORKFLOWS` | A comma-separated list of workflow names to skip. | `str` | optional | `None` |\n| `GRAPHRAG_UMAP_ENABLED` | Whether to enable UMAP layouts | `bool` | optional | False |", + "markdown": "Default Configuration Mode (using Env Vars)\n===========================================\n\nText-Embeddings Customization\n-----------------------------\n\nBy default, the GraphRAG indexer will only emit embeddings required for our query methods. However, the model has embeddings defined for all plaintext fields, and these can be generated by setting the `GRAPHRAG_EMBEDDING_TARGET` environment variable to `all`.\n\nIf the embedding target is `all`, and you want to only embed a subset of these fields, you may specify which embeddings to skip using the `GRAPHRAG_EMBEDDING_SKIP` argument described below.\n\n### Embedded Fields\n\n* `text_unit.text`\n* `document.raw_content`\n* `entity.name`\n* `entity.description`\n* `relationship.description`\n* `community.title`\n* `community.summary`\n* `community.full_content`\n\nInput Data\n----------\n\nOur pipeline can ingest .csv or .txt data from an input folder. These files can be nested within subfolders. To configure how input data is handled, what fields are mapped over, and how timestamps are parsed, look for configuration values starting with `GRAPHRAG_INPUT_` below. In general, CSV-based data provides the most customizeability. Each CSV should at least contain a `text` field (which can be mapped with environment variables), but it's helpful if they also have `title`, `timestamp`, and `source` fields. Additional fields can be included as well, which will land as extra fields on the `Document` table.\n\nBase LLM Settings\n-----------------\n\nThese are the primary settings for configuring LLM connectivity.\n\n| Parameter | Required? | Description | Type | Default Value |\n| --- | --- | --- | --- | --- |\n| `GRAPHRAG_API_KEY` | **Yes for OpenAI. Optional for AOAI** | The API key. (Note: \\`OPENAI\\_API\\_KEY is also used as a fallback). If not defined when using AOAI, managed identity will be used. | `str` | `None` |\n| `GRAPHRAG_API_BASE` | **For AOAI** | The API Base URL | `str` | `None` |\n| `GRAPHRAG_API_VERSION` | **For AOAI** | The AOAI API version. | `str` | `None` |\n| `GRAPHRAG_API_ORGANIZATION` | | The AOAI organization. | `str` | `None` |\n| `GRAPHRAG_API_PROXY` | | The AOAI proxy. | `str` | `None` |\n\nText Generation Settings\n------------------------\n\nThese settings control the text generation model used by the pipeline. Any settings with a fallback will use the base LLM settings, if available.\n\n| Parameter | Required? | Description | Type | Default Value |\n| --- | --- | --- | --- | --- |\n| `GRAPHRAG_LLM_TYPE` | **For AOAI** | The LLM operation type. Either `openai_chat` or `azure_openai_chat` | `str` | `openai_chat` |\n| `GRAPHRAG_LLM_DEPLOYMENT_NAME` | **For AOAI** | The AOAI model deployment name. | `str` | `None` |\n| `GRAPHRAG_LLM_API_KEY` | Yes (uses fallback) | The API key. If not defined when using AOAI, managed identity will be used. | `str` | `None` |\n| `GRAPHRAG_LLM_API_BASE` | For AOAI (uses fallback) | The API Base URL | `str` | `None` |\n| `GRAPHRAG_LLM_API_VERSION` | For AOAI (uses fallback) | The AOAI API version. | `str` | `None` |\n| `GRAPHRAG_LLM_API_ORGANIZATION` | For AOAI (uses fallback) | The AOAI organization. | `str` | `None` |\n| `GRAPHRAG_LLM_API_PROXY` | | The AOAI proxy. | `str` | `None` |\n| `GRAPHRAG_LLM_MODEL` | | The LLM model. | `str` | `gpt-4-turbo-preview` |\n| `GRAPHRAG_LLM_MAX_TOKENS` | | The maximum number of tokens. | `int` | `4000` |\n| `GRAPHRAG_LLM_REQUEST_TIMEOUT` | | The maximum number of seconds to wait for a response from the chat client. | `int` | `180` |\n| `GRAPHRAG_LLM_MODEL_SUPPORTS_JSON` | | Indicates whether the given model supports JSON output mode. `True` to enable. | `str` | `None` |\n| `GRAPHRAG_LLM_THREAD_COUNT` | | The number of threads to use for LLM parallelization. | `int` | 50 |\n| `GRAPHRAG_LLM_THREAD_STAGGER` | | The time to wait (in seconds) between starting each thread. | `float` | 0.3 |\n| `GRAPHRAG_LLM_CONCURRENT_REQUESTS` | | The number of concurrent requests to allow for the embedding client. | `int` | 25 |\n| `GRAPHRAG_LLM_TOKENS_PER_MINUTE` | | The number of tokens per minute to allow for the LLM client. 0 = Bypass | `int` | 0 |\n| `GRAPHRAG_LLM_REQUESTS_PER_MINUTE` | | The number of requests per minute to allow for the LLM client. 0 = Bypass | `int` | 0 |\n| `GRAPHRAG_LLM_MAX_RETRIES` | | The maximum number of retries to attempt when a request fails. | `int` | 10 |\n| `GRAPHRAG_LLM_MAX_RETRY_WAIT` | | The maximum number of seconds to wait between retries. | `int` | 10 |\n| `GRAPHRAG_LLM_SLEEP_ON_RATE_LIMIT_RECOMMENDATION` | | Whether to sleep on rate limit recommendation. (Azure Only) | `bool` | `True` |\n| `GRAPHRAG_LLM_TEMPERATURE` | | The temperature to use generation. | `float` | 0 |\n| `GRAPHRAG_LLM_TOP_P` | | The top\\_p to use for sampling. | `float` | 1 |\n| `GRAPHRAG_LLM_N` | | The number of responses to generate. | `int` | 1 |\n\nText Embedding Settings\n-----------------------\n\nThese settings control the text embedding model used by the pipeline. Any settings with a fallback will use the base LLM settings, if available.\n\n| Parameter | Required ? | Description | Type | Default |\n| --- | --- | --- | --- | --- |\n| `GRAPHRAG_EMBEDDING_TYPE` | **For AOAI** | The embedding client to use. Either `openai_embedding` or `azure_openai_embedding` | `str` | `openai_embedding` |\n| `GRAPHRAG_EMBEDDING_DEPLOYMENT_NAME` | **For AOAI** | The AOAI deployment name. | `str` | `None` |\n| `GRAPHRAG_EMBEDDING_API_KEY` | Yes (uses fallback) | The API key to use for the embedding client. If not defined when using AOAI, managed identity will be used. | `str` | `None` |\n| `GRAPHRAG_EMBEDDING_API_BASE` | For AOAI (uses fallback) | The API base URL. | `str` | `None` |\n| `GRAPHRAG_EMBEDDING_API_VERSION` | For AOAI (uses fallback) | The AOAI API version to use for the embedding client. | `str` | `None` |\n| `GRAPHRAG_EMBEDDING_API_ORGANIZATION` | For AOAI (uses fallback) | The AOAI organization to use for the embedding client. | `str` | `None` |\n| `GRAPHRAG_EMBEDDING_API_PROXY` | | The AOAI proxy to use for the embedding client. | `str` | `None` |\n| `GRAPHRAG_EMBEDDING_MODEL` | | The model to use for the embedding client. | `str` | `text-embedding-3-small` |\n| `GRAPHRAG_EMBEDDING_BATCH_SIZE` | | The number of texts to embed at once. [(Azure limit is 16)](https://learn.microsoft.com/en-us/azure/ai-ce) | `int` | 16 |\n| `GRAPHRAG_EMBEDDING_BATCH_MAX_TOKENS` | | The maximum tokens per batch [(Azure limit is 8191)](https://learn.microsoft.com/en-us/azure/ai-services/openai/reference) | `int` | 8191 |\n| `GRAPHRAG_EMBEDDING_TARGET` | | The target fields to embed. Either `required` or `all`. | `str` | `required` |\n| `GRAPHRAG_EMBEDDING_SKIP` | | A comma-separated list of fields to skip embeddings for . (e.g. 'relationship.description') | `str` | `None` |\n| `GRAPHRAG_EMBEDDING_THREAD_COUNT` | | The number of threads to use for parallelization for embeddings. | `int` | |\n| `GRAPHRAG_EMBEDDING_THREAD_STAGGER` | | The time to wait (in seconds) between starting each thread for embeddings. | `float` | 50 |\n| `GRAPHRAG_EMBEDDING_CONCURRENT_REQUESTS` | | The number of concurrent requests to allow for the embedding client. | `int` | 25 |\n| `GRAPHRAG_EMBEDDING_TOKENS_PER_MINUTE` | | The number of tokens per minute to allow for the embedding client. 0 = Bypass | `int` | 0 |\n| `GRAPHRAG_EMBEDDING_REQUESTS_PER_MINUTE` | | The number of requests per minute to allow for the embedding client. 0 = Bypass | `int` | 0 |\n| `GRAPHRAG_EMBEDDING_MAX_RETRIES` | | The maximum number of retries to attempt when a request fails. | `int` | 10 |\n| `GRAPHRAG_EMBEDDING_MAX_RETRY_WAIT` | | The maximum number of seconds to wait between retries. | `int` | 10 |\n| `GRAPHRAG_EMBEDDING_TARGET` | | The target fields to embed. Either `required` or `all`. | `str` | `required` |\n| `GRAPHRAG_EMBEDDING_SLEEP_ON_RATE_LIMIT_RECOMMENDATION` | | Whether to sleep on rate limit recommendation. (Azure Only) | `bool` | `True` |\n\nInput Settings\n--------------\n\nThese settings control the data input used by the pipeline. Any settings with a fallback will use the base LLM settings, if available.\n\n### Plaintext Input Data (`GRAPHRAG_INPUT_FILE_TYPE`\\=text)\n\n| Parameter | Description | Type | Required or Optional | Default |\n| --- | --- | --- | --- | --- |\n| `GRAPHRAG_INPUT_FILE_PATTERN` | The file pattern regexp to use when reading input files from the input directory. | `str` | optional | `.*\\.txt$` |\n\n### CSV Input Data (`GRAPHRAG_INPUT_FILE_TYPE`\\=csv)\n\n| Parameter | Description | Type | Required or Optional | Default |\n| --- | --- | --- | --- | --- |\n| `GRAPHRAG_INPUT_TYPE` | The input storage type to use when reading files. (`file` or `blob`) | `str` | optional | `file` |\n| `GRAPHRAG_INPUT_FILE_PATTERN` | The file pattern regexp to use when reading input files from the input directory. | `str` | optional | `.*\\.txt$` |\n| `GRAPHRAG_INPUT_SOURCE_COLUMN` | The 'source' column to use when reading CSV input files. | `str` | optional | `source` |\n| `GRAPHRAG_INPUT_TIMESTAMP_COLUMN` | The 'timestamp' column to use when reading CSV input files. | `str` | optional | `None` |\n| `GRAPHRAG_INPUT_TIMESTAMP_FORMAT` | The timestamp format to use when parsing timestamps in the timestamp column. | `str` | optional | `None` |\n| `GRAPHRAG_INPUT_TEXT_COLUMN` | The 'text' column to use when reading CSV input files. | `str` | optional | `text` |\n| `GRAPHRAG_INPUT_DOCUMENT_ATTRIBUTE_COLUMNS` | A list of CSV columns, comma-separated, to incorporate as document fields. | `str` | optional | `id` |\n| `GRAPHRAG_INPUT_TITLE_COLUMN` | The 'title' column to use when reading CSV input files. | `str` | optional | `title` |\n| `GRAPHRAG_INPUT_STORAGE_ACCOUNT_BLOB_URL` | The Azure Storage blob endpoint to use when in `blob` mode and using managed identity. Will have the format `https://.blob.core.windows.net` | `str` | optional | `None` |\n| `GRAPHRAG_INPUT_CONNECTION_STRING` | The connection string to use when reading CSV input files from Azure Blob Storage. | `str` | optional | `None` |\n| `GRAPHRAG_INPUT_CONTAINER_NAME` | The container name to use when reading CSV input files from Azure Blob Storage. | `str` | optional | `None` |\n| `GRAPHRAG_INPUT_BASE_DIR` | The base directory to read input files from. | `str` | optional | `None` |\n\nData Mapping Settings\n---------------------\n\n| Parameter | Description | Type | Required or Optional | Default |\n| --- | --- | --- | --- | --- |\n| `GRAPHRAG_INPUT_FILE_TYPE` | The type of input data, `csv` or `text` | `str` | optional | `text` |\n| `GRAPHRAG_INPUT_ENCODING` | The encoding to apply when reading CSV/text input files. | `str` | optional | `utf-8` |\n\nData Chunking\n-------------\n\n| Parameter | Description | Type | Required or Optional | Default |\n| --- | --- | --- | --- | --- |\n| `GRAPHRAG_CHUNK_SIZE` | The chunk size in tokens for text-chunk analysis windows. | `str` | optional | 1200 |\n| `GRAPHRAG_CHUNK_OVERLAP` | The chunk overlap in tokens for text-chunk analysis windows. | `str` | optional | 100 |\n| `GRAPHRAG_CHUNK_BY_COLUMNS` | A comma-separated list of document attributes to groupby when performing TextUnit chunking. | `str` | optional | `id` |\n| `GRAPHRAG_CHUNK_ENCODING_MODEL` | The encoding model to use for chunking. | `str` | optional | The top-level encoding model. |\n\nPrompting Overrides\n-------------------\n\n| Parameter | Description | Type | Required or Optional | Default |\n| --- | --- | --- | --- | --- |\n| `GRAPHRAG_ENTITY_EXTRACTION_PROMPT_FILE` | The path (relative to the root) of an entity extraction prompt template text file. | `str` | optional | `None` |\n| `GRAPHRAG_ENTITY_EXTRACTION_MAX_GLEANINGS` | The maximum number of redrives (gleanings) to invoke when extracting entities in a loop. | `int` | optional | 1 |\n| `GRAPHRAG_ENTITY_EXTRACTION_ENTITY_TYPES` | A comma-separated list of entity types to extract. | `str` | optional | `organization,person,event,geo` |\n| `GRAPHRAG_ENTITY_EXTRACTION_ENCODING_MODEL` | The encoding model to use for entity extraction. | `str` | optional | The top-level encoding model. |\n| `GRAPHRAG_SUMMARIZE_DESCRIPTIONS_PROMPT_FILE` | The path (relative to the root) of an description summarization prompt template text file. | `str` | optional | `None` |\n| `GRAPHRAG_SUMMARIZE_DESCRIPTIONS_MAX_LENGTH` | The maximum number of tokens to generate per description summarization. | `int` | optional | 500 |\n| `GRAPHRAG_CLAIM_EXTRACTION_ENABLED` | Whether claim extraction is enabled for this pipeline. | `bool` | optional | `False` |\n| `GRAPHRAG_CLAIM_EXTRACTION_DESCRIPTION` | The claim\\_description prompting argument to utilize. | `string` | optional | \"Any claims or facts that could be relevant to threat analysis.\" |\n| `GRAPHRAG_CLAIM_EXTRACTION_PROMPT_FILE` | The claim extraction prompt to utilize. | `string` | optional | `None` |\n| `GRAPHRAG_CLAIM_EXTRACTION_MAX_GLEANINGS` | The maximum number of redrives (gleanings) to invoke when extracting claims in a loop. | `int` | optional | 1 |\n| `GRAPHRAG_CLAIM_EXTRACTION_ENCODING_MODEL` | The encoding model to use for claim extraction. | `str` | optional | The top-level encoding model |\n| `GRAPHRAG_COMMUNITY_REPORTS_PROMPT_FILE` | The community reports extraction prompt to utilize. | `string` | optional | `None` |\n| `GRAPHRAG_COMMUNITY_REPORTS_MAX_LENGTH` | The maximum number of tokens to generate per community reports. | `int` | optional | 1500 |\n\nStorage\n-------\n\nThis section controls the storage mechanism used by the pipeline used for emitting output tables.\n\n| Parameter | Description | Type | Required or Optional | Default |\n| --- | --- | --- | --- | --- |\n| `GRAPHRAG_STORAGE_TYPE` | The type of reporter to use. Options are `file`, `memory`, or `blob` | `str` | optional | `file` |\n| `GRAPHRAG_STORAGE_STORAGE_ACCOUNT_BLOB_URL` | The Azure Storage blob endpoint to use when in `blob` mode and using managed identity. Will have the format `https://.blob.core.windows.net` | `str` | optional | None |\n| `GRAPHRAG_STORAGE_CONNECTION_STRING` | The Azure Storage connection string to use when in `blob` mode. | `str` | optional | None |\n| `GRAPHRAG_STORAGE_CONTAINER_NAME` | The Azure Storage container name to use when in `blob` mode. | `str` | optional | None |\n| `GRAPHRAG_STORAGE_BASE_DIR` | The base path to data outputs outputs. | `str` | optional | None |\n\nCache\n-----\n\nThis section controls the cache mechanism used by the pipeline. This is used to cache LLM invocation results.\n\n| Parameter | Description | Type | Required or Optional | Default |\n| --- | --- | --- | --- | --- |\n| `GRAPHRAG_CACHE_TYPE` | The type of cache to use. Options are `file`, `memory`, `none` or `blob` | `str` | optional | `file` |\n| `GRAPHRAG_CACHE_STORAGE_ACCOUNT_BLOB_URL` | The Azure Storage blob endpoint to use when in `blob` mode and using managed identity. Will have the format `https://.blob.core.windows.net` | `str` | optional | None |\n| `GRAPHRAG_CACHE_CONNECTION_STRING` | The Azure Storage connection string to use when in `blob` mode. | `str` | optional | None |\n| `GRAPHRAG_CACHE_CONTAINER_NAME` | The Azure Storage container name to use when in `blob` mode. | `str` | optional | None |\n| `GRAPHRAG_CACHE_BASE_DIR` | The base path to the reporting outputs. | `str` | optional | None |\n\nReporting\n---------\n\nThis section controls the reporting mechanism used by the pipeline, for common events and error messages. The default is to write reports to a file in the output directory. However, you can also choose to write reports to the console or to an Azure Blob Storage container.\n\n| Parameter | Description | Type | Required or Optional | Default |\n| --- | --- | --- | --- | --- |\n| `GRAPHRAG_REPORTING_TYPE` | The type of reporter to use. Options are `file`, `console`, or `blob` | `str` | optional | `file` |\n| `GRAPHRAG_REPORTING_STORAGE_ACCOUNT_BLOB_URL` | The Azure Storage blob endpoint to use when in `blob` mode and using managed identity. Will have the format `https://.blob.core.windows.net` | `str` | optional | None |\n| `GRAPHRAG_REPORTING_CONNECTION_STRING` | The Azure Storage connection string to use when in `blob` mode. | `str` | optional | None |\n| `GRAPHRAG_REPORTING_CONTAINER_NAME` | The Azure Storage container name to use when in `blob` mode. | `str` | optional | None |\n| `GRAPHRAG_REPORTING_BASE_DIR` | The base path to the reporting outputs. | `str` | optional | None |\n\nNode2Vec Parameters\n-------------------\n\n| Parameter | Description | Type | Required or Optional | Default |\n| --- | --- | --- | --- | --- |\n| `GRAPHRAG_NODE2VEC_ENABLED` | Whether to enable Node2Vec | `bool` | optional | False |\n| `GRAPHRAG_NODE2VEC_NUM_WALKS` | The Node2Vec number of walks to perform | `int` | optional | 10 |\n| `GRAPHRAG_NODE2VEC_WALK_LENGTH` | The Node2Vec walk length | `int` | optional | 40 |\n| `GRAPHRAG_NODE2VEC_WINDOW_SIZE` | The Node2Vec window size | `int` | optional | 2 |\n| `GRAPHRAG_NODE2VEC_ITERATIONS` | The number of iterations to run node2vec | `int` | optional | 3 |\n| `GRAPHRAG_NODE2VEC_RANDOM_SEED` | The random seed to use for node2vec | `int` | optional | 597832 |\n\nData Snapshotting\n-----------------\n\n| Parameter | Description | Type | Required or Optional | Default |\n| --- | --- | --- | --- | --- |\n| `GRAPHRAG_SNAPSHOT_GRAPHML` | Whether to enable GraphML snapshots. | `bool` | optional | False |\n| `GRAPHRAG_SNAPSHOT_RAW_ENTITIES` | Whether to enable raw entity snapshots. | `bool` | optional | False |\n| `GRAPHRAG_SNAPSHOT_TOP_LEVEL_NODES` | Whether to enable top-level node snapshots. | `bool` | optional | False |\n\nMiscellaneous Settings\n======================\n\n| Parameter | Description | Type | Required or Optional | Default |\n| --- | --- | --- | --- | --- |\n| `GRAPHRAG_ASYNC_MODE` | Which async mode to use. Either `asyncio` or `threaded`. | `str` | optional | `asyncio` |\n| `GRAPHRAG_ENCODING_MODEL` | The text encoding model, used in tiktoken, to encode text. | `str` | optional | `cl100k_base` |\n| `GRAPHRAG_MAX_CLUSTER_SIZE` | The maximum number of entities to include in a single Leiden cluster. | `int` | optional | 10 |\n| `GRAPHRAG_SKIP_WORKFLOWS` | A comma-separated list of workflow names to skip. | `str` | optional | `None` |\n| `GRAPHRAG_UMAP_ENABLED` | Whether to enable UMAP layouts | `bool` | optional | False |", + "metadata": { + "title": "Default Configuration Mode (using Env Vars)", + "sourceURL": "https://microsoft.github.io/graphrag/posts/config/env_vars", + "pageStatusCode": 200, + "ogLocaleAlternate": [] + }, + "linksOnPage": [ + "https://microsoft.github.io/graphrag/", + "https://microsoft.github.io/graphrag/posts/get_started/", + "https://microsoft.github.io/graphrag/posts/developing/", + "https://microsoft.github.io/graphrag/posts/index/overview/", + "https://microsoft.github.io/graphrag/posts/index/0-architecture/", + "https://microsoft.github.io/graphrag/posts/index/1-default_dataflow/", + "https://microsoft.github.io/graphrag/posts/index/2-cli/", + "https://microsoft.github.io/graphrag/posts/config/overview/", + "https://microsoft.github.io/graphrag/posts/config/init", + "https://microsoft.github.io/graphrag/posts/config/env_vars", + "https://microsoft.github.io/graphrag/posts/config/json_yaml", + "https://microsoft.github.io/graphrag/posts/config/custom", + "https://microsoft.github.io/graphrag/posts/config/template", + "https://microsoft.github.io/graphrag/posts/prompt_tuning/overview/", + "https://microsoft.github.io/graphrag/posts/prompt_tuning/auto_prompt_tuning/", + "https://microsoft.github.io/graphrag/posts/prompt_tuning/manual_prompt_tuning/", + "https://microsoft.github.io/graphrag/posts/query/overview/", + "https://microsoft.github.io/graphrag/posts/query/1-local_search/", + "https://microsoft.github.io/graphrag/posts/query/2-question_generation/", + "https://microsoft.github.io/graphrag/posts/query/0-global_search/", + "https://microsoft.github.io/graphrag/posts/query/3-cli/", + "https://microsoft.github.io/graphrag/posts/query/notebooks/overview/", + "https://microsoft.github.io/graphrag/posts/query/notebooks/global_search_nb", + "https://microsoft.github.io/graphrag/posts/query/notebooks/local_search_nb", + "https://learn.microsoft.com/en-us/azure/ai-ce", + "https://learn.microsoft.com/en-us/azure/ai-services/openai/reference", + "https://go.microsoft.com/fwlink/?LinkId=521839", + "https://go.microsoft.com/fwlink/?LinkId=2259814", + "https://go.microsoft.com/fwlink/?LinkID=206977", + "https://www.microsoft.com/trademarks", + "https://www.microsoft.com", + "https://github.com/microsoft/graphrag", + "https://github.com/Azure-Samples/graphrag-accelerator" + ] + }, + { + "content": "Default Configuration Mode (using JSON/YAML)\n============================================\n\nThe default configuration mode may be configured by using a `config.json` or `config.yml` file in the data project root. If a `.env` file is present along with this config file, then it will be loaded, and the environment variables defined therein will be available for token replacements in your configuration document using `${ENV_VAR}` syntax.\n\nFor example:\n\n # .env\n API_KEY=some_api_key\n \n # config.json\n {\n \"llm\": {\n \"api_key\": \"${API_KEY}\"\n }\n }\n \n\nConfig Sections\n===============\n\ninput\n-----\n\n### Fields\n\n* `type` **file|blob** - The input type to use. Default=`file`\n* `file_type` **text|csv** - The type of input data to load. Either `text` or `csv`. Default is `text`\n* `file_encoding` **str** - The encoding of the input file. Default is `utf-8`\n* `file_pattern` **str** - A regex to match input files. Default is `.*\\.csv$` if in csv mode and `.*\\.txt$` if in text mode.\n* `source_column` **str** - (CSV Mode Only) The source column name.\n* `timestamp_column` **str** - (CSV Mode Only) The timestamp column name.\n* `timestamp_format` **str** - (CSV Mode Only) The source format.\n* `text_column` **str** - (CSV Mode Only) The text column name.\n* `title_column` **str** - (CSV Mode Only) The title column name.\n* `document_attribute_columns` **list\\[str\\]** - (CSV Mode Only) The additional document attributes to include.\n* `connection_string` **str** - (blob only) The Azure Storage connection string.\n* `container_name` **str** - (blob only) The Azure Storage container name.\n* `base_dir` **str** - The base directory to read input from, relative to the root.\n* `storage_account_blob_url` **str** - The storage account blob URL to use.\n\nllm\n---\n\nThis is the base LLM configuration section. Other steps may override this configuration with their own LLM configuration.\n\n### Fields\n\n* `api_key` **str** - The OpenAI API key to use.\n* `type` **openai\\_chat|azure\\_openai\\_chat|openai\\_embedding|azure\\_openai\\_embedding** - The type of LLM to use.\n* `model` **str** - The model name.\n* `max_tokens` **int** - The maximum number of output tokens.\n* `request_timeout` **float** - The per-request timeout.\n* `api_base` **str** - The API base url to use.\n* `api_version` **str** - The API version\n* `organization` **str** - The client organization.\n* `proxy` **str** - The proxy URL to use.\n* `cognitive_services_endpoint` **str** - The url endpoint for cognitive services.\n* `deployment_name` **str** - The deployment name to use (Azure).\n* `model_supports_json` **bool** - Whether the model supports JSON-mode output.\n* `tokens_per_minute` **int** - Set a leaky-bucket throttle on tokens-per-minute.\n* `requests_per_minute` **int** - Set a leaky-bucket throttle on requests-per-minute.\n* `max_retries` **int** - The maximum number of retries to use.\n* `max_retry_wait` **float** - The maximum backoff time.\n* `sleep_on_rate_limit_recommendation` **bool** - Whether to adhere to sleep recommendations (Azure).\n* `concurrent_requests` **int** The number of open requests to allow at once.\n* `temperature` **float** - The temperature to use.\n* `top_p` **float** - The top-p value to use.\n* `n` **int** - The number of completions to generate.\n\nparallelization\n---------------\n\n### Fields\n\n* `stagger` **float** - The threading stagger value.\n* `num_threads` **int** - The maximum number of work threads.\n\nasync\\_mode\n-----------\n\n**asyncio|threaded** The async mode to use. Either `asyncio` or \\`threaded.\n\nembeddings\n----------\n\n### Fields\n\n* `llm` (see LLM top-level config)\n* `parallelization` (see Parallelization top-level config)\n* `async_mode` (see Async Mode top-level config)\n* `batch_size` **int** - The maximum batch size to use.\n* `batch_max_tokens` **int** - The maximum batch #-tokens.\n* `target` **required|all** - Determines which set of embeddings to emit.\n* `skip` **list\\[str\\]** - Which embeddings to skip.\n* `strategy` **dict** - Fully override the text-embedding strategy.\n\nchunks\n------\n\n### Fields\n\n* `size` **int** - The max chunk size in tokens.\n* `overlap` **int** - The chunk overlap in tokens.\n* `group_by_columns` **list\\[str\\]** - group documents by fields before chunking.\n* `encoding_model` **str** - The text encoding model to use. Default is to use the top-level encoding model.\n* `strategy` **dict** - Fully override the chunking strategy.\n\ncache\n-----\n\n### Fields\n\n* `type` **file|memory|none|blob** - The cache type to use. Default=`file`\n* `connection_string` **str** - (blob only) The Azure Storage connection string.\n* `container_name` **str** - (blob only) The Azure Storage container name.\n* `base_dir` **str** - The base directory to write cache to, relative to the root.\n* `storage_account_blob_url` **str** - The storage account blob URL to use.\n\nstorage\n-------\n\n### Fields\n\n* `type` **file|memory|blob** - The storage type to use. Default=`file`\n* `connection_string` **str** - (blob only) The Azure Storage connection string.\n* `container_name` **str** - (blob only) The Azure Storage container name.\n* `base_dir` **str** - The base directory to write reports to, relative to the root.\n* `storage_account_blob_url` **str** - The storage account blob URL to use.\n\nreporting\n---------\n\n### Fields\n\n* `type` **file|console|blob** - The reporting type to use. Default=`file`\n* `connection_string` **str** - (blob only) The Azure Storage connection string.\n* `container_name` **str** - (blob only) The Azure Storage container name.\n* `base_dir` **str** - The base directory to write reports to, relative to the root.\n* `storage_account_blob_url` **str** - The storage account blob URL to use.\n\nentity\\_extraction\n------------------\n\n### Fields\n\n* `llm` (see LLM top-level config)\n* `parallelization` (see Parallelization top-level config)\n* `async_mode` (see Async Mode top-level config)\n* `prompt` **str** - The prompt file to use.\n* `entity_types` **list\\[str\\]** - The entity types to identify.\n* `max_gleanings` **int** - The maximum number of gleaning cycles to use.\n* `encoding_model` **str** - The text encoding model to use. By default, this will use the top-level encoding model.\n* `strategy` **dict** - Fully override the entity extraction strategy.\n\nsummarize\\_descriptions\n-----------------------\n\n### Fields\n\n* `llm` (see LLM top-level config)\n* `parallelization` (see Parallelization top-level config)\n* `async_mode` (see Async Mode top-level config)\n* `prompt` **str** - The prompt file to use.\n* `max_length` **int** - The maximum number of output tokens per summarization.\n* `strategy` **dict** - Fully override the summarize description strategy.\n\nclaim\\_extraction\n-----------------\n\n### Fields\n\n* `enabled` **bool** - Whether to enable claim extraction. default=False\n* `llm` (see LLM top-level config)\n* `parallelization` (see Parallelization top-level config)\n* `async_mode` (see Async Mode top-level config)\n* `prompt` **str** - The prompt file to use.\n* `description` **str** - Describes the types of claims we want to extract.\n* `max_gleanings` **int** - The maximum number of gleaning cycles to use.\n* `encoding_model` **str** - The text encoding model to use. By default, this will use the top-level encoding model.\n* `strategy` **dict** - Fully override the claim extraction strategy.\n\ncommunity\\_reports\n------------------\n\n### Fields\n\n* `llm` (see LLM top-level config)\n* `parallelization` (see Parallelization top-level config)\n* `async_mode` (see Async Mode top-level config)\n* `prompt` **str** - The prompt file to use.\n* `max_length` **int** - The maximum number of output tokens per report.\n* `max_input_length` **int** - The maximum number of input tokens to use when generating reports.\n* `strategy` **dict** - Fully override the community reports strategy.\n\ncluster\\_graph\n--------------\n\n### Fields\n\n* `max_cluster_size` **int** - The maximum cluster size to emit.\n* `strategy` **dict** - Fully override the cluster\\_graph strategy.\n\nembed\\_graph\n------------\n\n### Fields\n\n* `enabled` **bool** - Whether to enable graph embeddings.\n* `num_walks` **int** - The node2vec number of walks.\n* `walk_length` **int** - The node2vec walk length.\n* `window_size` **int** - The node2vec window size.\n* `iterations` **int** - The node2vec number of iterations.\n* `random_seed` **int** - The node2vec random seed.\n* `strategy` **dict** - Fully override the embed graph strategy.\n\numap\n----\n\n### Fields\n\n* `enabled` **bool** - Whether to enable UMAP layouts.\n\nsnapshots\n---------\n\n### Fields\n\n* `graphml` **bool** - Emit graphml snapshots.\n* `raw_entities` **bool** - Emit raw entity snapshots.\n* `top_level_nodes` **bool** - Emit top-level-node snapshots.\n\nencoding\\_model\n---------------\n\n**str** - The text encoding model to use. Default is `cl100k_base`.\n\nskip\\_workflows\n---------------\n\n**list\\[str\\]** - Which workflow names to skip.", + "markdown": "Default Configuration Mode (using JSON/YAML)\n============================================\n\nThe default configuration mode may be configured by using a `config.json` or `config.yml` file in the data project root. If a `.env` file is present along with this config file, then it will be loaded, and the environment variables defined therein will be available for token replacements in your configuration document using `${ENV_VAR}` syntax.\n\nFor example:\n\n # .env\n API_KEY=some_api_key\n \n # config.json\n {\n \"llm\": {\n \"api_key\": \"${API_KEY}\"\n }\n }\n \n\nConfig Sections\n===============\n\ninput\n-----\n\n### Fields\n\n* `type` **file|blob** - The input type to use. Default=`file`\n* `file_type` **text|csv** - The type of input data to load. Either `text` or `csv`. Default is `text`\n* `file_encoding` **str** - The encoding of the input file. Default is `utf-8`\n* `file_pattern` **str** - A regex to match input files. Default is `.*\\.csv$` if in csv mode and `.*\\.txt$` if in text mode.\n* `source_column` **str** - (CSV Mode Only) The source column name.\n* `timestamp_column` **str** - (CSV Mode Only) The timestamp column name.\n* `timestamp_format` **str** - (CSV Mode Only) The source format.\n* `text_column` **str** - (CSV Mode Only) The text column name.\n* `title_column` **str** - (CSV Mode Only) The title column name.\n* `document_attribute_columns` **list\\[str\\]** - (CSV Mode Only) The additional document attributes to include.\n* `connection_string` **str** - (blob only) The Azure Storage connection string.\n* `container_name` **str** - (blob only) The Azure Storage container name.\n* `base_dir` **str** - The base directory to read input from, relative to the root.\n* `storage_account_blob_url` **str** - The storage account blob URL to use.\n\nllm\n---\n\nThis is the base LLM configuration section. Other steps may override this configuration with their own LLM configuration.\n\n### Fields\n\n* `api_key` **str** - The OpenAI API key to use.\n* `type` **openai\\_chat|azure\\_openai\\_chat|openai\\_embedding|azure\\_openai\\_embedding** - The type of LLM to use.\n* `model` **str** - The model name.\n* `max_tokens` **int** - The maximum number of output tokens.\n* `request_timeout` **float** - The per-request timeout.\n* `api_base` **str** - The API base url to use.\n* `api_version` **str** - The API version\n* `organization` **str** - The client organization.\n* `proxy` **str** - The proxy URL to use.\n* `cognitive_services_endpoint` **str** - The url endpoint for cognitive services.\n* `deployment_name` **str** - The deployment name to use (Azure).\n* `model_supports_json` **bool** - Whether the model supports JSON-mode output.\n* `tokens_per_minute` **int** - Set a leaky-bucket throttle on tokens-per-minute.\n* `requests_per_minute` **int** - Set a leaky-bucket throttle on requests-per-minute.\n* `max_retries` **int** - The maximum number of retries to use.\n* `max_retry_wait` **float** - The maximum backoff time.\n* `sleep_on_rate_limit_recommendation` **bool** - Whether to adhere to sleep recommendations (Azure).\n* `concurrent_requests` **int** The number of open requests to allow at once.\n* `temperature` **float** - The temperature to use.\n* `top_p` **float** - The top-p value to use.\n* `n` **int** - The number of completions to generate.\n\nparallelization\n---------------\n\n### Fields\n\n* `stagger` **float** - The threading stagger value.\n* `num_threads` **int** - The maximum number of work threads.\n\nasync\\_mode\n-----------\n\n**asyncio|threaded** The async mode to use. Either `asyncio` or \\`threaded.\n\nembeddings\n----------\n\n### Fields\n\n* `llm` (see LLM top-level config)\n* `parallelization` (see Parallelization top-level config)\n* `async_mode` (see Async Mode top-level config)\n* `batch_size` **int** - The maximum batch size to use.\n* `batch_max_tokens` **int** - The maximum batch #-tokens.\n* `target` **required|all** - Determines which set of embeddings to emit.\n* `skip` **list\\[str\\]** - Which embeddings to skip.\n* `strategy` **dict** - Fully override the text-embedding strategy.\n\nchunks\n------\n\n### Fields\n\n* `size` **int** - The max chunk size in tokens.\n* `overlap` **int** - The chunk overlap in tokens.\n* `group_by_columns` **list\\[str\\]** - group documents by fields before chunking.\n* `encoding_model` **str** - The text encoding model to use. Default is to use the top-level encoding model.\n* `strategy` **dict** - Fully override the chunking strategy.\n\ncache\n-----\n\n### Fields\n\n* `type` **file|memory|none|blob** - The cache type to use. Default=`file`\n* `connection_string` **str** - (blob only) The Azure Storage connection string.\n* `container_name` **str** - (blob only) The Azure Storage container name.\n* `base_dir` **str** - The base directory to write cache to, relative to the root.\n* `storage_account_blob_url` **str** - The storage account blob URL to use.\n\nstorage\n-------\n\n### Fields\n\n* `type` **file|memory|blob** - The storage type to use. Default=`file`\n* `connection_string` **str** - (blob only) The Azure Storage connection string.\n* `container_name` **str** - (blob only) The Azure Storage container name.\n* `base_dir` **str** - The base directory to write reports to, relative to the root.\n* `storage_account_blob_url` **str** - The storage account blob URL to use.\n\nreporting\n---------\n\n### Fields\n\n* `type` **file|console|blob** - The reporting type to use. Default=`file`\n* `connection_string` **str** - (blob only) The Azure Storage connection string.\n* `container_name` **str** - (blob only) The Azure Storage container name.\n* `base_dir` **str** - The base directory to write reports to, relative to the root.\n* `storage_account_blob_url` **str** - The storage account blob URL to use.\n\nentity\\_extraction\n------------------\n\n### Fields\n\n* `llm` (see LLM top-level config)\n* `parallelization` (see Parallelization top-level config)\n* `async_mode` (see Async Mode top-level config)\n* `prompt` **str** - The prompt file to use.\n* `entity_types` **list\\[str\\]** - The entity types to identify.\n* `max_gleanings` **int** - The maximum number of gleaning cycles to use.\n* `encoding_model` **str** - The text encoding model to use. By default, this will use the top-level encoding model.\n* `strategy` **dict** - Fully override the entity extraction strategy.\n\nsummarize\\_descriptions\n-----------------------\n\n### Fields\n\n* `llm` (see LLM top-level config)\n* `parallelization` (see Parallelization top-level config)\n* `async_mode` (see Async Mode top-level config)\n* `prompt` **str** - The prompt file to use.\n* `max_length` **int** - The maximum number of output tokens per summarization.\n* `strategy` **dict** - Fully override the summarize description strategy.\n\nclaim\\_extraction\n-----------------\n\n### Fields\n\n* `enabled` **bool** - Whether to enable claim extraction. default=False\n* `llm` (see LLM top-level config)\n* `parallelization` (see Parallelization top-level config)\n* `async_mode` (see Async Mode top-level config)\n* `prompt` **str** - The prompt file to use.\n* `description` **str** - Describes the types of claims we want to extract.\n* `max_gleanings` **int** - The maximum number of gleaning cycles to use.\n* `encoding_model` **str** - The text encoding model to use. By default, this will use the top-level encoding model.\n* `strategy` **dict** - Fully override the claim extraction strategy.\n\ncommunity\\_reports\n------------------\n\n### Fields\n\n* `llm` (see LLM top-level config)\n* `parallelization` (see Parallelization top-level config)\n* `async_mode` (see Async Mode top-level config)\n* `prompt` **str** - The prompt file to use.\n* `max_length` **int** - The maximum number of output tokens per report.\n* `max_input_length` **int** - The maximum number of input tokens to use when generating reports.\n* `strategy` **dict** - Fully override the community reports strategy.\n\ncluster\\_graph\n--------------\n\n### Fields\n\n* `max_cluster_size` **int** - The maximum cluster size to emit.\n* `strategy` **dict** - Fully override the cluster\\_graph strategy.\n\nembed\\_graph\n------------\n\n### Fields\n\n* `enabled` **bool** - Whether to enable graph embeddings.\n* `num_walks` **int** - The node2vec number of walks.\n* `walk_length` **int** - The node2vec walk length.\n* `window_size` **int** - The node2vec window size.\n* `iterations` **int** - The node2vec number of iterations.\n* `random_seed` **int** - The node2vec random seed.\n* `strategy` **dict** - Fully override the embed graph strategy.\n\numap\n----\n\n### Fields\n\n* `enabled` **bool** - Whether to enable UMAP layouts.\n\nsnapshots\n---------\n\n### Fields\n\n* `graphml` **bool** - Emit graphml snapshots.\n* `raw_entities` **bool** - Emit raw entity snapshots.\n* `top_level_nodes` **bool** - Emit top-level-node snapshots.\n\nencoding\\_model\n---------------\n\n**str** - The text encoding model to use. Default is `cl100k_base`.\n\nskip\\_workflows\n---------------\n\n**list\\[str\\]** - Which workflow names to skip.", + "metadata": { + "title": "Default Configuration Mode (using JSON/YAML)", + "sourceURL": "https://microsoft.github.io/graphrag/posts/config/json_yaml", + "pageStatusCode": 200, + "ogLocaleAlternate": [] + }, + "linksOnPage": [ + "https://microsoft.github.io/graphrag/", + "https://microsoft.github.io/graphrag/posts/get_started/", + "https://microsoft.github.io/graphrag/posts/developing/", + "https://microsoft.github.io/graphrag/posts/index/overview/", + "https://microsoft.github.io/graphrag/posts/index/0-architecture/", + "https://microsoft.github.io/graphrag/posts/index/1-default_dataflow/", + "https://microsoft.github.io/graphrag/posts/index/2-cli/", + "https://microsoft.github.io/graphrag/posts/config/overview/", + "https://microsoft.github.io/graphrag/posts/config/init", + "https://microsoft.github.io/graphrag/posts/config/env_vars", + "https://microsoft.github.io/graphrag/posts/config/json_yaml", + "https://microsoft.github.io/graphrag/posts/config/custom", + "https://microsoft.github.io/graphrag/posts/config/template", + "https://microsoft.github.io/graphrag/posts/prompt_tuning/overview/", + "https://microsoft.github.io/graphrag/posts/prompt_tuning/auto_prompt_tuning/", + "https://microsoft.github.io/graphrag/posts/prompt_tuning/manual_prompt_tuning/", + "https://microsoft.github.io/graphrag/posts/query/overview/", + "https://microsoft.github.io/graphrag/posts/query/1-local_search/", + "https://microsoft.github.io/graphrag/posts/query/2-question_generation/", + "https://microsoft.github.io/graphrag/posts/query/0-global_search/", + "https://microsoft.github.io/graphrag/posts/query/3-cli/", + "https://microsoft.github.io/graphrag/posts/query/notebooks/overview/", + "https://microsoft.github.io/graphrag/posts/query/notebooks/global_search_nb", + "https://microsoft.github.io/graphrag/posts/query/notebooks/local_search_nb", + "https://go.microsoft.com/fwlink/?LinkId=521839", + "https://go.microsoft.com/fwlink/?LinkId=2259814", + "https://go.microsoft.com/fwlink/?LinkID=206977", + "https://www.microsoft.com/trademarks", + "https://www.microsoft.com", + "https://github.com/microsoft/graphrag", + "https://github.com/Azure-Samples/graphrag-accelerator" + ] + }, + { + "content": "Custom Configuration Mode\n=========================\n\nThe primary configuration sections for Indexing Engine pipelines are described below. Each configuration section can be expressed in Python (for use in Python API mode) as well as YAML, but YAML is show here for brevity.\n\nUsing custom configuration is an advanced use-case. Most users will want to use the [Default Configuration](/graphrag/posts/config/overview)\n instead.\n\nIndexing Engine Examples\n------------------------\n\nThe [examples](https://github.com/microsoft/graphrag/blob/main/examples/)\n directory contains several examples of how to use the indexing engine with _custom configuration_.\n\nMost examples include two different forms of running the pipeline, both are contained in the examples `run.py`\n\n1. Using mostly the Python API\n2. Using mostly the a pipeline configuration file\n\nTo run an example:\n\n* Run `poetry shell` to activate a virtual environment with the required dependencies.\n* Run `PYTHONPATH=\"$(pwd)\" python examples/path_to_example/run.py` from the `root` directory.\n\nFor example to run the single\\_verb example, you would run the following commands:\n\n poetry shell\n\n PYTHONPATH=\"$(pwd)\" python examples/single_verb/run.py\n\nConfiguration Sections\n======================\n\n\\> extends\n==========\n\nThis configuration allows you to extend a base configuration file or files.\n\n # single base\n extends: ../base_config.yml\n\n # multiple bases\n extends:\n - ../base_config.yml\n - ../base_config2.yml\n\n\\> root\\_dir\n============\n\nThis configuration allows you to set the root directory for the pipeline. All data inputs and outputs are assumed to be relative to this path.\n\n root_dir: /workspace/data_project\n\n\\> storage\n==========\n\nThis configuration allows you define the output strategy for the pipeline.\n\n* `type`: The type of storage to use. Options are `file`, `memory`, and `blob`\n* `base_dir` (`type: file` only): The base directory to store the data in. This is relative to the config root.\n* `connection_string` (`type: blob` only): The connection string to use for blob storage.\n* `container_name` (`type: blob` only): The container to use for blob storage.\n\n\\> cache\n========\n\nThis configuration allows you define the cache strategy for the pipeline.\n\n* `type`: The type of cache to use. Options are `file` and `memory`, and `blob`.\n* `base_dir` (`type: file` only): The base directory to store the cache in. This is relative to the config root.\n* `connection_string` (`type: blob` only): The connection string to use for blob storage.\n* `container_name` (`type: blob` only): The container to use for blob storage.\n\n\\> reporting\n============\n\nThis configuration allows you define the reporting strategy for the pipeline. Report files are generated artifacts that summarize the performance metrics of the pipeline and emit any error messages.\n\n* `type`: The type of reporting to use. Options are `file`, `memory`, and `blob`\n* `base_dir` (`type: file` only): The base directory to store the reports in. This is relative to the config root.\n* `connection_string` (`type: blob` only): The connection string to use for blob storage.\n* `container_name` (`type: blob` only): The container to use for blob storage.\n\n\\> workflows\n============\n\nThis configuration section defines the workflow DAG for the pipeline. Here we define an array of workflows and express their inter-dependencies in steps:\n\n* `name`: The name of the workflow. This is used to reference the workflow in other parts of the config.\n* `steps`: The DataShaper steps that this workflow comprises. If a step defines an input in the form of `workflow:`, then it is assumed to have a dependency on the output of that workflow.\n\n workflows:\n - name: workflow1\n steps:\n - verb: derive\n args:\n column1: \"col1\"\n column2: \"col2\"\n - name: workflow2\n steps:\n - verb: derive\n args:\n column1: \"col1\"\n column2: \"col2\"\n input:\n # dependency established here\n source: workflow:workflow1\n\n\\> input\n========\n\n* `type`: The type of input to use. Options are `file` or `blob`.\n* `file_type`: The file type field discriminates between the different input types. Options are `csv` and `text`.\n* `base_dir`: The base directory to read the input files from. This is relative to the config file.\n* `file_pattern`: A regex to match the input files. The regex must have named groups for each of the fields in the file\\_filter.\n* `post_process`: A DataShaper workflow definition to apply to the input before executing the primary workflow.\n* `source_column` (`type: csv` only): The column containing the source/author of the data\n* `text_column` (`type: csv` only): The column containing the text of the data\n* `timestamp_column` (`type: csv` only): The column containing the timestamp of the data\n* `timestamp_format` (`type: csv` only): The format of the timestamp\n\n input:\n type: file\n file_type: csv\n base_dir: ../data/csv # the directory containing the CSV files, this is relative to the config file\n file_pattern: '.*[\\/](?P[^\\/]+)[\\/](?P\\d{4})-(?P\\d{2})-(?P\\d{2})_(?P[^_]+)_\\d+\\.csv$' # a regex to match the CSV files\n # An additional file filter which uses the named groups from the file_pattern to further filter the files\n # file_filter:\n # # source: (source_filter)\n # year: (2023)\n # month: (06)\n # # day: (22)\n source_column: \"author\" # the column containing the source/author of the data\n text_column: \"message\" # the column containing the text of the data\n timestamp_column: \"date(yyyyMMddHHmmss)\" # optional, the column containing the timestamp of the data\n timestamp_format: \"%Y%m%d%H%M%S\" # optional, the format of the timestamp\n post_process: # Optional, set of steps to process the data before going into the workflow\n - verb: filter\n args:\n column: \"title\",\n value: \"My document\"\n\n input:\n type: file\n file_type: csv\n base_dir: ../data/csv # the directory containing the CSV files, this is relative to the config file\n file_pattern: '.*[\\/](?P[^\\/]+)[\\/](?P\\d{4})-(?P\\d{2})-(?P\\d{2})_(?P[^_]+)_\\d+\\.csv$' # a regex to match the CSV files\n # An additional file filter which uses the named groups from the file_pattern to further filter the files\n # file_filter:\n # # source: (source_filter)\n # year: (2023)\n # month: (06)\n # # day: (22)\n post_process: # Optional, set of steps to process the data before going into the workflow\n - verb: filter\n args:\n column: \"title\",\n value: \"My document\"", + "markdown": "Custom Configuration Mode\n=========================\n\nThe primary configuration sections for Indexing Engine pipelines are described below. Each configuration section can be expressed in Python (for use in Python API mode) as well as YAML, but YAML is show here for brevity.\n\nUsing custom configuration is an advanced use-case. Most users will want to use the [Default Configuration](/graphrag/posts/config/overview)\n instead.\n\nIndexing Engine Examples\n------------------------\n\nThe [examples](https://github.com/microsoft/graphrag/blob/main/examples/)\n directory contains several examples of how to use the indexing engine with _custom configuration_.\n\nMost examples include two different forms of running the pipeline, both are contained in the examples `run.py`\n\n1. Using mostly the Python API\n2. Using mostly the a pipeline configuration file\n\nTo run an example:\n\n* Run `poetry shell` to activate a virtual environment with the required dependencies.\n* Run `PYTHONPATH=\"$(pwd)\" python examples/path_to_example/run.py` from the `root` directory.\n\nFor example to run the single\\_verb example, you would run the following commands:\n\n poetry shell\n\n PYTHONPATH=\"$(pwd)\" python examples/single_verb/run.py\n\nConfiguration Sections\n======================\n\n\\> extends\n==========\n\nThis configuration allows you to extend a base configuration file or files.\n\n # single base\n extends: ../base_config.yml\n\n # multiple bases\n extends:\n - ../base_config.yml\n - ../base_config2.yml\n\n\\> root\\_dir\n============\n\nThis configuration allows you to set the root directory for the pipeline. All data inputs and outputs are assumed to be relative to this path.\n\n root_dir: /workspace/data_project\n\n\\> storage\n==========\n\nThis configuration allows you define the output strategy for the pipeline.\n\n* `type`: The type of storage to use. Options are `file`, `memory`, and `blob`\n* `base_dir` (`type: file` only): The base directory to store the data in. This is relative to the config root.\n* `connection_string` (`type: blob` only): The connection string to use for blob storage.\n* `container_name` (`type: blob` only): The container to use for blob storage.\n\n\\> cache\n========\n\nThis configuration allows you define the cache strategy for the pipeline.\n\n* `type`: The type of cache to use. Options are `file` and `memory`, and `blob`.\n* `base_dir` (`type: file` only): The base directory to store the cache in. This is relative to the config root.\n* `connection_string` (`type: blob` only): The connection string to use for blob storage.\n* `container_name` (`type: blob` only): The container to use for blob storage.\n\n\\> reporting\n============\n\nThis configuration allows you define the reporting strategy for the pipeline. Report files are generated artifacts that summarize the performance metrics of the pipeline and emit any error messages.\n\n* `type`: The type of reporting to use. Options are `file`, `memory`, and `blob`\n* `base_dir` (`type: file` only): The base directory to store the reports in. This is relative to the config root.\n* `connection_string` (`type: blob` only): The connection string to use for blob storage.\n* `container_name` (`type: blob` only): The container to use for blob storage.\n\n\\> workflows\n============\n\nThis configuration section defines the workflow DAG for the pipeline. Here we define an array of workflows and express their inter-dependencies in steps:\n\n* `name`: The name of the workflow. This is used to reference the workflow in other parts of the config.\n* `steps`: The DataShaper steps that this workflow comprises. If a step defines an input in the form of `workflow:`, then it is assumed to have a dependency on the output of that workflow.\n\n workflows:\n - name: workflow1\n steps:\n - verb: derive\n args:\n column1: \"col1\"\n column2: \"col2\"\n - name: workflow2\n steps:\n - verb: derive\n args:\n column1: \"col1\"\n column2: \"col2\"\n input:\n # dependency established here\n source: workflow:workflow1\n\n\\> input\n========\n\n* `type`: The type of input to use. Options are `file` or `blob`.\n* `file_type`: The file type field discriminates between the different input types. Options are `csv` and `text`.\n* `base_dir`: The base directory to read the input files from. This is relative to the config file.\n* `file_pattern`: A regex to match the input files. The regex must have named groups for each of the fields in the file\\_filter.\n* `post_process`: A DataShaper workflow definition to apply to the input before executing the primary workflow.\n* `source_column` (`type: csv` only): The column containing the source/author of the data\n* `text_column` (`type: csv` only): The column containing the text of the data\n* `timestamp_column` (`type: csv` only): The column containing the timestamp of the data\n* `timestamp_format` (`type: csv` only): The format of the timestamp\n\n input:\n type: file\n file_type: csv\n base_dir: ../data/csv # the directory containing the CSV files, this is relative to the config file\n file_pattern: '.*[\\/](?P[^\\/]+)[\\/](?P\\d{4})-(?P\\d{2})-(?P\\d{2})_(?P[^_]+)_\\d+\\.csv$' # a regex to match the CSV files\n # An additional file filter which uses the named groups from the file_pattern to further filter the files\n # file_filter:\n # # source: (source_filter)\n # year: (2023)\n # month: (06)\n # # day: (22)\n source_column: \"author\" # the column containing the source/author of the data\n text_column: \"message\" # the column containing the text of the data\n timestamp_column: \"date(yyyyMMddHHmmss)\" # optional, the column containing the timestamp of the data\n timestamp_format: \"%Y%m%d%H%M%S\" # optional, the format of the timestamp\n post_process: # Optional, set of steps to process the data before going into the workflow\n - verb: filter\n args:\n column: \"title\",\n value: \"My document\"\n\n input:\n type: file\n file_type: csv\n base_dir: ../data/csv # the directory containing the CSV files, this is relative to the config file\n file_pattern: '.*[\\/](?P[^\\/]+)[\\/](?P\\d{4})-(?P\\d{2})-(?P\\d{2})_(?P[^_]+)_\\d+\\.csv$' # a regex to match the CSV files\n # An additional file filter which uses the named groups from the file_pattern to further filter the files\n # file_filter:\n # # source: (source_filter)\n # year: (2023)\n # month: (06)\n # # day: (22)\n post_process: # Optional, set of steps to process the data before going into the workflow\n - verb: filter\n args:\n column: \"title\",\n value: \"My document\"", + "metadata": { + "title": "Custom Configuration Mode", + "sourceURL": "https://microsoft.github.io/graphrag/posts/config/custom", + "pageStatusCode": 200, + "ogLocaleAlternate": [] + }, + "linksOnPage": [ + "https://microsoft.github.io/graphrag/", + "https://microsoft.github.io/graphrag/posts/get_started/", + "https://microsoft.github.io/graphrag/posts/developing/", + "https://microsoft.github.io/graphrag/posts/index/overview/", + "https://microsoft.github.io/graphrag/posts/index/0-architecture/", + "https://microsoft.github.io/graphrag/posts/index/1-default_dataflow/", + "https://microsoft.github.io/graphrag/posts/index/2-cli/", + "https://microsoft.github.io/graphrag/posts/config/overview/", + "https://microsoft.github.io/graphrag/posts/config/init", + "https://microsoft.github.io/graphrag/posts/config/env_vars", + "https://microsoft.github.io/graphrag/posts/config/json_yaml", + "https://microsoft.github.io/graphrag/posts/config/custom", + "https://microsoft.github.io/graphrag/posts/config/template", + "https://microsoft.github.io/graphrag/posts/prompt_tuning/overview/", + "https://microsoft.github.io/graphrag/posts/prompt_tuning/auto_prompt_tuning/", + "https://microsoft.github.io/graphrag/posts/prompt_tuning/manual_prompt_tuning/", + "https://microsoft.github.io/graphrag/posts/query/overview/", + "https://microsoft.github.io/graphrag/posts/query/1-local_search/", + "https://microsoft.github.io/graphrag/posts/query/2-question_generation/", + "https://microsoft.github.io/graphrag/posts/query/0-global_search/", + "https://microsoft.github.io/graphrag/posts/query/3-cli/", + "https://microsoft.github.io/graphrag/posts/query/notebooks/overview/", + "https://microsoft.github.io/graphrag/posts/query/notebooks/global_search_nb", + "https://microsoft.github.io/graphrag/posts/query/notebooks/local_search_nb", + "https://microsoft.github.io/graphrag/posts/config/overview", + "https://github.com/microsoft/graphrag/blob/main/examples/", + "https://go.microsoft.com/fwlink/?LinkId=521839", + "https://go.microsoft.com/fwlink/?LinkId=2259814", + "https://go.microsoft.com/fwlink/?LinkID=206977", + "https://www.microsoft.com/trademarks", + "https://www.microsoft.com", + "https://github.com/microsoft/graphrag", + "https://github.com/Azure-Samples/graphrag-accelerator" + ] + }, + { + "content": "Configuration Template\n======================\n\nThe following template can be used and stored as a `.env` in the the directory where you're are pointing the `--root` parameter on your Indexing Pipeline execution.\n\nFor details about how to run the Indexing Pipeline, refer to the [Index CLI](../../index/2-cli)\n documentation.\n\n.env File Template\n------------------\n\nRequired variables are uncommented. All the optional configuration can be turned on or off as needed.\n\n### Minimal Configuration\n\n # Base LLM Settings\n GRAPHRAG_API_KEY=\"your_api_key\"\n GRAPHRAG_API_BASE=\"http://.openai.azure.com\" # For Azure OpenAI Users\n GRAPHRAG_API_VERSION=\"api_version\" # For Azure OpenAI Users\n \n # Text Generation Settings\n GRAPHRAG_LLM_TYPE=\"azure_openai_chat\" # or openai_chat\n GRAPHRAG_LLM_DEPLOYMENT_NAME=\"gpt-4-turbo-preview\"\n GRAPHRAG_LLM_MODEL_SUPPORTS_JSON=True\n \n # Text Embedding Settings\n GRAPHRAG_EMBEDDING_TYPE=\"azure_openai_embedding\" # or openai_embedding\n GRAPHRAG_LLM_DEPLOYMENT_NAME=\"text-embedding-3-small\"\n \n # Data Mapping Settings\n GRAPHRAG_INPUT_TYPE=\"text\"\n \n\n### Full Configuration\n\n \n # Required LLM Config\n \n # Input Data Configuration\n GRAPHRAG_INPUT_TYPE=\"file\"\n \n # Plaintext Input Data Configuration\n # GRAPHRAG_INPUT_FILE_PATTERN=.*\\.txt\n \n # Text Input Data Configuration\n GRAPHRAG_INPUT_FILE_TYPE=\"text\"\n GRAPHRAG_INPUT_FILE_PATTERN=\".*\\.txt$\"\n GRAPHRAG_INPUT_SOURCE_COLUMN=source\n # GRAPHRAG_INPUT_TIMESTAMP_COLUMN=None\n # GRAPHRAG_INPUT_TIMESTAMP_FORMAT=None\n # GRAPHRAG_INPUT_TEXT_COLUMN=\"text\"\n # GRAPHRAG_INPUT_ATTRIBUTE_COLUMNS=id\n # GRAPHRAG_INPUT_TITLE_COLUMN=\"title\"\n # GRAPHRAG_INPUT_TYPE=\"file\"\n # GRAPHRAG_INPUT_CONNECTION_STRING=None\n # GRAPHRAG_INPUT_CONTAINER_NAME=None\n # GRAPHRAG_INPUT_BASE_DIR=None\n \n # Base LLM Settings\n GRAPHRAG_API_KEY=\"your_api_key\"\n GRAPHRAG_API_BASE=\"http://.openai.azure.com\" # For Azure OpenAI Users\n GRAPHRAG_API_VERSION=\"api_version\" # For Azure OpenAI Users\n # GRAPHRAG_API_ORGANIZATION=None\n # GRAPHRAG_API_PROXY=None\n \n # Text Generation Settings\n # GRAPHRAG_LLM_TYPE=openai_chat\n GRAPHRAG_LLM_API_KEY=\"your_api_key\" # If GRAPHRAG_API_KEY is not set\n GRAPHRAG_LLM_API_BASE=\"http://.openai.azure.com\" # For Azure OpenAI Users and if GRAPHRAG_API_BASE is not set\n GRAPHRAG_LLM_API_VERSION=\"api_version\" # For Azure OpenAI Users and if GRAPHRAG_API_VERSION is not set\n GRAPHRAG_LLM_MODEL_SUPPORTS_JSON=True # Suggested by default\n # GRAPHRAG_LLM_API_ORGANIZATION=None\n # GRAPHRAG_LLM_API_PROXY=None\n # GRAPHRAG_LLM_DEPLOYMENT_NAME=None\n # GRAPHRAG_LLM_MODEL=gpt-4-turbo-preview\n # GRAPHRAG_LLM_MAX_TOKENS=4000\n # GRAPHRAG_LLM_REQUEST_TIMEOUT=180\n # GRAPHRAG_LLM_THREAD_COUNT=50\n # GRAPHRAG_LLM_THREAD_STAGGER=0.3\n # GRAPHRAG_LLM_CONCURRENT_REQUESTS=25\n # GRAPHRAG_LLM_TPM=0\n # GRAPHRAG_LLM_RPM=0\n # GRAPHRAG_LLM_MAX_RETRIES=10\n # GRAPHRAG_LLM_MAX_RETRY_WAIT=10\n # GRAPHRAG_LLM_SLEEP_ON_RATE_LIMIT_RECOMMENDATION=True\n \n # Text Embedding Settings\n # GRAPHRAG_EMBEDDING_TYPE=openai_embedding\n GRAPHRAG_EMBEDDING_API_KEY=\"your_api_key\" # If GRAPHRAG_API_KEY is not set\n GRAPHRAG_EMBEDDING_API_BASE=\"http://.openai.azure.com\" # For Azure OpenAI Users and if GRAPHRAG_API_BASE is not set\n GRAPHRAG_EMBEDDING_API_VERSION=\"api_version\" # For Azure OpenAI Users and if GRAPHRAG_API_VERSION is not set\n # GRAPHRAG_EMBEDDING_API_ORGANIZATION=None\n # GRAPHRAG_EMBEDDING_API_PROXY=None\n # GRAPHRAG_EMBEDDING_DEPLOYMENT_NAME=None\n # GRAPHRAG_EMBEDDING_MODEL=text-embedding-3-small\n # GRAPHRAG_EMBEDDING_BATCH_SIZE=16\n # GRAPHRAG_EMBEDDING_BATCH_MAX_TOKENS=8191\n # GRAPHRAG_EMBEDDING_TARGET=required\n # GRAPHRAG_EMBEDDING_SKIP=None\n # GRAPHRAG_EMBEDDING_THREAD_COUNT=None\n # GRAPHRAG_EMBEDDING_THREAD_STAGGER=50\n # GRAPHRAG_EMBEDDING_CONCURRENT_REQUESTS=25\n # GRAPHRAG_EMBEDDING_TPM=0\n # GRAPHRAG_EMBEDDING_RPM=0\n # GRAPHRAG_EMBEDDING_MAX_RETRIES=10\n # GRAPHRAG_EMBEDDING_MAX_RETRY_WAIT=10\n # GRAPHRAG_EMBEDDING_SLEEP_ON_RATE_LIMIT_RECOMMENDATION=True\n \n # Data Mapping Settings\n # GRAPHRAG_INPUT_ENCODING=utf-8\n \n # Data Chunking\n # GRAPHRAG_CHUNK_SIZE=1200\n # GRAPHRAG_CHUNK_OVERLAP=100\n # GRAPHRAG_CHUNK_BY_COLUMNS=id\n \n # Prompting Overrides\n # GRAPHRAG_ENTITY_EXTRACTION_PROMPT_FILE=None\n # GRAPHRAG_ENTITY_EXTRACTION_MAX_GLEANINGS=1\n # GRAPHRAG_ENTITY_EXTRACTION_ENTITY_TYPES=organization,person,event,geo\n # GRAPHRAG_SUMMARIZE_DESCRIPTIONS_PROMPT_FILE=None\n # GRAPHRAG_SUMMARIZE_DESCRIPTIONS_MAX_LENGTH=500\n # GRAPHRAG_CLAIM_EXTRACTION_DESCRIPTION=\"Any claims or facts that could be relevant to threat analysis.\"\n # GRAPHRAG_CLAIM_EXTRACTION_PROMPT_FILE=None\n # GRAPHRAG_CLAIM_EXTRACTION_MAX_GLEANINGS=1\n # GRAPHRAG_COMMUNITY_REPORT_PROMPT_FILE=None\n # GRAPHRAG_COMMUNITY_REPORT_MAX_LENGTH=1500\n \n # Storage\n # GRAPHRAG_STORAGE_TYPE=file\n # GRAPHRAG_STORAGE_CONNECTION_STRING=None\n # GRAPHRAG_STORAGE_CONTAINER_NAME=None\n # GRAPHRAG_STORAGE_BASE_DIR=None\n \n # Cache\n # GRAPHRAG_CACHE_TYPE=file\n # GRAPHRAG_CACHE_CONNECTION_STRING=None\n # GRAPHRAG_CACHE_CONTAINER_NAME=None\n # GRAPHRAG_CACHE_BASE_DIR=None\n \n # Reporting\n # GRAPHRAG_REPORTING_TYPE=file\n # GRAPHRAG_REPORTING_CONNECTION_STRING=None\n # GRAPHRAG_REPORTING_CONTAINER_NAME=None\n # GRAPHRAG_REPORTING_BASE_DIR=None\n \n # Node2Vec Parameters\n # GRAPHRAG_NODE2VEC_ENABLED=False\n # GRAPHRAG_NODE2VEC_NUM_WALKS=10\n # GRAPHRAG_NODE2VEC_WALK_LENGTH=40\n # GRAPHRAG_NODE2VEC_WINDOW_SIZE=2\n # GRAPHRAG_NODE2VEC_ITERATIONS=3\n # GRAPHRAG_NODE2VEC_RANDOM_SEED=597832\n \n # Data Snapshotting\n # GRAPHRAG_SNAPSHOT_GRAPHML=False\n # GRAPHRAG_SNAPSHOT_RAW_ENTITIES=False\n # GRAPHRAG_SNAPSHOT_TOP_LEVEL_NODES=False\n \n # Miscellaneous Settings\n # GRAPHRAG_ASYNC_MODE=asyncio\n # GRAPHRAG_ENCODING_MODEL=cl100k_base\n # GRAPHRAG_MAX_CLUSTER_SIZE=10\n # GRAPHRAG_ENTITY_RESOLUTION_ENABLED=False\n # GRAPHRAG_SKIP_WORKFLOWS=None\n # GRAPHRAG_UMAP_ENABLED=False", + "markdown": "Configuration Template\n======================\n\nThe following template can be used and stored as a `.env` in the the directory where you're are pointing the `--root` parameter on your Indexing Pipeline execution.\n\nFor details about how to run the Indexing Pipeline, refer to the [Index CLI](../../index/2-cli)\n documentation.\n\n.env File Template\n------------------\n\nRequired variables are uncommented. All the optional configuration can be turned on or off as needed.\n\n### Minimal Configuration\n\n # Base LLM Settings\n GRAPHRAG_API_KEY=\"your_api_key\"\n GRAPHRAG_API_BASE=\"http://.openai.azure.com\" # For Azure OpenAI Users\n GRAPHRAG_API_VERSION=\"api_version\" # For Azure OpenAI Users\n \n # Text Generation Settings\n GRAPHRAG_LLM_TYPE=\"azure_openai_chat\" # or openai_chat\n GRAPHRAG_LLM_DEPLOYMENT_NAME=\"gpt-4-turbo-preview\"\n GRAPHRAG_LLM_MODEL_SUPPORTS_JSON=True\n \n # Text Embedding Settings\n GRAPHRAG_EMBEDDING_TYPE=\"azure_openai_embedding\" # or openai_embedding\n GRAPHRAG_LLM_DEPLOYMENT_NAME=\"text-embedding-3-small\"\n \n # Data Mapping Settings\n GRAPHRAG_INPUT_TYPE=\"text\"\n \n\n### Full Configuration\n\n \n # Required LLM Config\n \n # Input Data Configuration\n GRAPHRAG_INPUT_TYPE=\"file\"\n \n # Plaintext Input Data Configuration\n # GRAPHRAG_INPUT_FILE_PATTERN=.*\\.txt\n \n # Text Input Data Configuration\n GRAPHRAG_INPUT_FILE_TYPE=\"text\"\n GRAPHRAG_INPUT_FILE_PATTERN=\".*\\.txt$\"\n GRAPHRAG_INPUT_SOURCE_COLUMN=source\n # GRAPHRAG_INPUT_TIMESTAMP_COLUMN=None\n # GRAPHRAG_INPUT_TIMESTAMP_FORMAT=None\n # GRAPHRAG_INPUT_TEXT_COLUMN=\"text\"\n # GRAPHRAG_INPUT_ATTRIBUTE_COLUMNS=id\n # GRAPHRAG_INPUT_TITLE_COLUMN=\"title\"\n # GRAPHRAG_INPUT_TYPE=\"file\"\n # GRAPHRAG_INPUT_CONNECTION_STRING=None\n # GRAPHRAG_INPUT_CONTAINER_NAME=None\n # GRAPHRAG_INPUT_BASE_DIR=None\n \n # Base LLM Settings\n GRAPHRAG_API_KEY=\"your_api_key\"\n GRAPHRAG_API_BASE=\"http://.openai.azure.com\" # For Azure OpenAI Users\n GRAPHRAG_API_VERSION=\"api_version\" # For Azure OpenAI Users\n # GRAPHRAG_API_ORGANIZATION=None\n # GRAPHRAG_API_PROXY=None\n \n # Text Generation Settings\n # GRAPHRAG_LLM_TYPE=openai_chat\n GRAPHRAG_LLM_API_KEY=\"your_api_key\" # If GRAPHRAG_API_KEY is not set\n GRAPHRAG_LLM_API_BASE=\"http://.openai.azure.com\" # For Azure OpenAI Users and if GRAPHRAG_API_BASE is not set\n GRAPHRAG_LLM_API_VERSION=\"api_version\" # For Azure OpenAI Users and if GRAPHRAG_API_VERSION is not set\n GRAPHRAG_LLM_MODEL_SUPPORTS_JSON=True # Suggested by default\n # GRAPHRAG_LLM_API_ORGANIZATION=None\n # GRAPHRAG_LLM_API_PROXY=None\n # GRAPHRAG_LLM_DEPLOYMENT_NAME=None\n # GRAPHRAG_LLM_MODEL=gpt-4-turbo-preview\n # GRAPHRAG_LLM_MAX_TOKENS=4000\n # GRAPHRAG_LLM_REQUEST_TIMEOUT=180\n # GRAPHRAG_LLM_THREAD_COUNT=50\n # GRAPHRAG_LLM_THREAD_STAGGER=0.3\n # GRAPHRAG_LLM_CONCURRENT_REQUESTS=25\n # GRAPHRAG_LLM_TPM=0\n # GRAPHRAG_LLM_RPM=0\n # GRAPHRAG_LLM_MAX_RETRIES=10\n # GRAPHRAG_LLM_MAX_RETRY_WAIT=10\n # GRAPHRAG_LLM_SLEEP_ON_RATE_LIMIT_RECOMMENDATION=True\n \n # Text Embedding Settings\n # GRAPHRAG_EMBEDDING_TYPE=openai_embedding\n GRAPHRAG_EMBEDDING_API_KEY=\"your_api_key\" # If GRAPHRAG_API_KEY is not set\n GRAPHRAG_EMBEDDING_API_BASE=\"http://.openai.azure.com\" # For Azure OpenAI Users and if GRAPHRAG_API_BASE is not set\n GRAPHRAG_EMBEDDING_API_VERSION=\"api_version\" # For Azure OpenAI Users and if GRAPHRAG_API_VERSION is not set\n # GRAPHRAG_EMBEDDING_API_ORGANIZATION=None\n # GRAPHRAG_EMBEDDING_API_PROXY=None\n # GRAPHRAG_EMBEDDING_DEPLOYMENT_NAME=None\n # GRAPHRAG_EMBEDDING_MODEL=text-embedding-3-small\n # GRAPHRAG_EMBEDDING_BATCH_SIZE=16\n # GRAPHRAG_EMBEDDING_BATCH_MAX_TOKENS=8191\n # GRAPHRAG_EMBEDDING_TARGET=required\n # GRAPHRAG_EMBEDDING_SKIP=None\n # GRAPHRAG_EMBEDDING_THREAD_COUNT=None\n # GRAPHRAG_EMBEDDING_THREAD_STAGGER=50\n # GRAPHRAG_EMBEDDING_CONCURRENT_REQUESTS=25\n # GRAPHRAG_EMBEDDING_TPM=0\n # GRAPHRAG_EMBEDDING_RPM=0\n # GRAPHRAG_EMBEDDING_MAX_RETRIES=10\n # GRAPHRAG_EMBEDDING_MAX_RETRY_WAIT=10\n # GRAPHRAG_EMBEDDING_SLEEP_ON_RATE_LIMIT_RECOMMENDATION=True\n \n # Data Mapping Settings\n # GRAPHRAG_INPUT_ENCODING=utf-8\n \n # Data Chunking\n # GRAPHRAG_CHUNK_SIZE=1200\n # GRAPHRAG_CHUNK_OVERLAP=100\n # GRAPHRAG_CHUNK_BY_COLUMNS=id\n \n # Prompting Overrides\n # GRAPHRAG_ENTITY_EXTRACTION_PROMPT_FILE=None\n # GRAPHRAG_ENTITY_EXTRACTION_MAX_GLEANINGS=1\n # GRAPHRAG_ENTITY_EXTRACTION_ENTITY_TYPES=organization,person,event,geo\n # GRAPHRAG_SUMMARIZE_DESCRIPTIONS_PROMPT_FILE=None\n # GRAPHRAG_SUMMARIZE_DESCRIPTIONS_MAX_LENGTH=500\n # GRAPHRAG_CLAIM_EXTRACTION_DESCRIPTION=\"Any claims or facts that could be relevant to threat analysis.\"\n # GRAPHRAG_CLAIM_EXTRACTION_PROMPT_FILE=None\n # GRAPHRAG_CLAIM_EXTRACTION_MAX_GLEANINGS=1\n # GRAPHRAG_COMMUNITY_REPORT_PROMPT_FILE=None\n # GRAPHRAG_COMMUNITY_REPORT_MAX_LENGTH=1500\n \n # Storage\n # GRAPHRAG_STORAGE_TYPE=file\n # GRAPHRAG_STORAGE_CONNECTION_STRING=None\n # GRAPHRAG_STORAGE_CONTAINER_NAME=None\n # GRAPHRAG_STORAGE_BASE_DIR=None\n \n # Cache\n # GRAPHRAG_CACHE_TYPE=file\n # GRAPHRAG_CACHE_CONNECTION_STRING=None\n # GRAPHRAG_CACHE_CONTAINER_NAME=None\n # GRAPHRAG_CACHE_BASE_DIR=None\n \n # Reporting\n # GRAPHRAG_REPORTING_TYPE=file\n # GRAPHRAG_REPORTING_CONNECTION_STRING=None\n # GRAPHRAG_REPORTING_CONTAINER_NAME=None\n # GRAPHRAG_REPORTING_BASE_DIR=None\n \n # Node2Vec Parameters\n # GRAPHRAG_NODE2VEC_ENABLED=False\n # GRAPHRAG_NODE2VEC_NUM_WALKS=10\n # GRAPHRAG_NODE2VEC_WALK_LENGTH=40\n # GRAPHRAG_NODE2VEC_WINDOW_SIZE=2\n # GRAPHRAG_NODE2VEC_ITERATIONS=3\n # GRAPHRAG_NODE2VEC_RANDOM_SEED=597832\n \n # Data Snapshotting\n # GRAPHRAG_SNAPSHOT_GRAPHML=False\n # GRAPHRAG_SNAPSHOT_RAW_ENTITIES=False\n # GRAPHRAG_SNAPSHOT_TOP_LEVEL_NODES=False\n \n # Miscellaneous Settings\n # GRAPHRAG_ASYNC_MODE=asyncio\n # GRAPHRAG_ENCODING_MODEL=cl100k_base\n # GRAPHRAG_MAX_CLUSTER_SIZE=10\n # GRAPHRAG_ENTITY_RESOLUTION_ENABLED=False\n # GRAPHRAG_SKIP_WORKFLOWS=None\n # GRAPHRAG_UMAP_ENABLED=False", + "metadata": { + "title": "Configuration Template", + "sourceURL": "https://microsoft.github.io/graphrag/posts/config/template", + "pageStatusCode": 200, + "ogLocaleAlternate": [] + }, + "linksOnPage": [ + "https://microsoft.github.io/graphrag/", + "https://microsoft.github.io/graphrag/posts/get_started/", + "https://microsoft.github.io/graphrag/posts/developing/", + "https://microsoft.github.io/graphrag/posts/index/overview/", + "https://microsoft.github.io/graphrag/posts/index/0-architecture/", + "https://microsoft.github.io/graphrag/posts/index/1-default_dataflow/", + "https://microsoft.github.io/graphrag/posts/index/2-cli/", + "https://microsoft.github.io/graphrag/posts/config/overview/", + "https://microsoft.github.io/graphrag/posts/config/init", + "https://microsoft.github.io/graphrag/posts/config/env_vars", + "https://microsoft.github.io/graphrag/posts/config/json_yaml", + "https://microsoft.github.io/graphrag/posts/config/custom", + "https://microsoft.github.io/graphrag/posts/config/template", + "https://microsoft.github.io/graphrag/posts/prompt_tuning/overview/", + "https://microsoft.github.io/graphrag/posts/prompt_tuning/auto_prompt_tuning/", + "https://microsoft.github.io/graphrag/posts/prompt_tuning/manual_prompt_tuning/", + "https://microsoft.github.io/graphrag/posts/query/overview/", + "https://microsoft.github.io/graphrag/posts/query/1-local_search/", + "https://microsoft.github.io/graphrag/posts/query/2-question_generation/", + "https://microsoft.github.io/graphrag/posts/query/0-global_search/", + "https://microsoft.github.io/graphrag/posts/query/3-cli/", + "https://microsoft.github.io/graphrag/posts/query/notebooks/overview/", + "https://microsoft.github.io/graphrag/posts/query/notebooks/global_search_nb", + "https://microsoft.github.io/graphrag/posts/query/notebooks/local_search_nb", + "https://microsoft.github.io/graphrag/posts/config/template/../../index/2-cli", + "https://go.microsoft.com/fwlink/?LinkId=521839", + "https://go.microsoft.com/fwlink/?LinkId=2259814", + "https://go.microsoft.com/fwlink/?LinkID=206977", + "https://www.microsoft.com/trademarks", + "https://www.microsoft.com", + "https://github.com/microsoft/graphrag", + "https://github.com/Azure-Samples/graphrag-accelerator" + ] + }, + { + "content": "Prompt Tuning ⚙️\n================\n\nThis page provides an overview of the prompt tuning options available for the GraphRAG indexing engine.\n\nDefault Prompts\n---------------\n\nThe default prompts are the simplest way to get started with the GraphRAG system. It is designed to work out-of-the-box with minimal configuration. You can find more detail about these prompts in the following links:\n\n* [Entity/Relationship Extraction](http://github.com/microsoft/graphrag/blob/main/graphrag/index/graph/extractors/graph/prompts.py)\n \n* [Entity/Relationship Description Summarization](http://github.com/microsoft/graphrag/blob/main/graphrag/index/graph/extractors/summarize/prompts.py)\n \n* [Claim Extraction](http://github.com/microsoft/graphrag/blob/main/graphrag/index/graph/extractors/claims/prompts.py)\n \n* [Community Reports](http://github.com/microsoft/graphrag/blob/main/graphrag/index/graph/extractors/community_reports/prompts.py)\n \n\nAuto Templating\n---------------\n\nAuto Templating leverages your input data and LLM interactions to create domain adaptive templates for the generation of the knowledge graph. It is highly encouraged to run it as it will yield better results when executing an Index Run. For more details about how to use it, please refer to the [Auto Templating](/graphrag/posts/prompt_tuning/auto_prompt_tuning)\n documentation.\n\nManual Configuration\n--------------------\n\nManual configuration is an advanced use-case. Most users will want to use the Auto Templating feature instead. Details about how to use manual configuration are available in the [Manual Prompt Configuration](/graphrag/posts/prompt_tuning/manual_prompt_tuning)\n documentation.", + "markdown": "Prompt Tuning ⚙️\n================\n\nThis page provides an overview of the prompt tuning options available for the GraphRAG indexing engine.\n\nDefault Prompts\n---------------\n\nThe default prompts are the simplest way to get started with the GraphRAG system. It is designed to work out-of-the-box with minimal configuration. You can find more detail about these prompts in the following links:\n\n* [Entity/Relationship Extraction](http://github.com/microsoft/graphrag/blob/main/graphrag/index/graph/extractors/graph/prompts.py)\n \n* [Entity/Relationship Description Summarization](http://github.com/microsoft/graphrag/blob/main/graphrag/index/graph/extractors/summarize/prompts.py)\n \n* [Claim Extraction](http://github.com/microsoft/graphrag/blob/main/graphrag/index/graph/extractors/claims/prompts.py)\n \n* [Community Reports](http://github.com/microsoft/graphrag/blob/main/graphrag/index/graph/extractors/community_reports/prompts.py)\n \n\nAuto Templating\n---------------\n\nAuto Templating leverages your input data and LLM interactions to create domain adaptive templates for the generation of the knowledge graph. It is highly encouraged to run it as it will yield better results when executing an Index Run. For more details about how to use it, please refer to the [Auto Templating](/graphrag/posts/prompt_tuning/auto_prompt_tuning)\n documentation.\n\nManual Configuration\n--------------------\n\nManual configuration is an advanced use-case. Most users will want to use the Auto Templating feature instead. Details about how to use manual configuration are available in the [Manual Prompt Configuration](/graphrag/posts/prompt_tuning/manual_prompt_tuning)\n documentation.", + "metadata": { + "title": "Prompt Tuning ⚙️", + "sourceURL": "https://microsoft.github.io/graphrag/posts/prompt_tuning/overview/", + "pageStatusCode": 200, + "ogLocaleAlternate": [] + }, + "linksOnPage": [ + "https://microsoft.github.io/graphrag/", + "https://microsoft.github.io/graphrag/posts/get_started/", + "https://microsoft.github.io/graphrag/posts/developing/", + "https://microsoft.github.io/graphrag/posts/index/overview/", + "https://microsoft.github.io/graphrag/posts/index/0-architecture/", + "https://microsoft.github.io/graphrag/posts/index/1-default_dataflow/", + "https://microsoft.github.io/graphrag/posts/index/2-cli/", + "https://microsoft.github.io/graphrag/posts/config/overview/", + "https://microsoft.github.io/graphrag/posts/config/init", + "https://microsoft.github.io/graphrag/posts/config/env_vars", + "https://microsoft.github.io/graphrag/posts/config/json_yaml", + "https://microsoft.github.io/graphrag/posts/config/custom", + "https://microsoft.github.io/graphrag/posts/config/template", + "https://microsoft.github.io/graphrag/posts/prompt_tuning/overview/", + "https://microsoft.github.io/graphrag/posts/prompt_tuning/auto_prompt_tuning/", + "https://microsoft.github.io/graphrag/posts/prompt_tuning/manual_prompt_tuning/", + "https://microsoft.github.io/graphrag/posts/query/overview/", + "https://microsoft.github.io/graphrag/posts/query/1-local_search/", + "https://microsoft.github.io/graphrag/posts/query/2-question_generation/", + "https://microsoft.github.io/graphrag/posts/query/0-global_search/", + "https://microsoft.github.io/graphrag/posts/query/3-cli/", + "https://microsoft.github.io/graphrag/posts/query/notebooks/overview/", + "https://microsoft.github.io/graphrag/posts/query/notebooks/global_search_nb", + "https://microsoft.github.io/graphrag/posts/query/notebooks/local_search_nb", + "http://github.com/microsoft/graphrag/blob/main/graphrag/index/graph/extractors/graph/prompts.py", + "http://github.com/microsoft/graphrag/blob/main/graphrag/index/graph/extractors/summarize/prompts.py", + "http://github.com/microsoft/graphrag/blob/main/graphrag/index/graph/extractors/claims/prompts.py", + "http://github.com/microsoft/graphrag/blob/main/graphrag/index/graph/extractors/community_reports/prompts.py", + "https://microsoft.github.io/graphrag/posts/prompt_tuning/auto_prompt_tuning", + "https://microsoft.github.io/graphrag/posts/prompt_tuning/manual_prompt_tuning", + "https://go.microsoft.com/fwlink/?LinkId=521839", + "https://go.microsoft.com/fwlink/?LinkId=2259814", + "https://go.microsoft.com/fwlink/?LinkID=206977", + "https://www.microsoft.com/trademarks", + "https://www.microsoft.com", + "https://github.com/microsoft/graphrag", + "https://github.com/Azure-Samples/graphrag-accelerator" + ] + }, + { + "content": "Prompt Tuning ⚙️\n================\n\nGraphRAG provides the ability to create domain adaptive templates for the generation of the knowledge graph. This step is optional, though it is highly encouraged to run it as it will yield better results when executing an Index Run.\n\nThe templates are generated by loading the inputs, splitting them into chunks (text units) and then running a series of LLM invocations and template substitutions to generate the final prompts. We suggest using the default values provided by the script, but in this page you'll find the detail of each in case you want to further explore and tweak the template generation algorithm.\n\nPrerequisites\n-------------\n\nBefore running the automatic template generation make sure you have already initialized your workspace with the `graphrag.index --init` command. This will create the necessary configuration files and the default prompts. Refer to the [Init Documentation](/graphrag/posts/config/init)\n for more information about the initialization process.\n\nUsage\n-----\n\nYou can run the main script from the command line with various options:\n\n python -m graphrag.prompt_tune [--root ROOT] [--domain DOMAIN] [--method METHOD] [--limit LIMIT] [--language LANGUAGE] [--max-tokens MAX_TOKENS] [--chunk-size CHUNK_SIZE] [--no-entity-types] [--output OUTPUT]\n\nCommand-Line Options\n--------------------\n\n* `--root` (optional): The data project root directory, including the config files (YML, JSON, or .env). Defaults to the current directory.\n \n* `--domain` (optional): The domain related to your input data, such as 'space science', 'microbiology', or 'environmental news'. If left empty, the domain will be inferred from the input data.\n \n* `--method` (optional): The method to select documents. Options are all, random, or top. Default is random.\n \n* `--limit` (optional): The limit of text units to load when using random or top selection. Default is 15.\n \n* `--language` (optional): The language to use for input processing. If it is different from the inputs' language, the LLM will translate. Default is \"\" meaning it will be automatically detected from the inputs.\n \n* `--max-tokens` (optional): Maximum token count for prompt generation. Default is 2000.\n \n* `--chunk-size` (optional): The size in tokens to use for generating text units from input documents. Default is 200.\n \n* `--no-entity-types` (optional): Use untyped entity extraction generation. We recommend using this when your data covers a lot of topics or it is highly randomized.\n \n* `--output` (optional): The folder to save the generated prompts. Default is \"prompts\".\n \n\nExample Usage\n-------------\n\n python -m graphrag.prompt_tune --root /path/to/project --domain \"environmental news\" --method random --limit 10 --language English --max-tokens 2048 --chunk-size 256 --no-entity-types --output /path/to/output\n\nor, with minimal configuration (suggested):\n\n python -m graphrag.prompt_tune --root /path/to/project --no-entity-types\n\nDocument Selection Methods\n--------------------------\n\nThe auto template feature ingests the input data and then divides it into text units the size of the chunk size parameter. After that, it uses one of the following selection methods to pick a sample to work with for template generation:\n\n* `random`: Select text units randomly. This is the default and recommended option.\n* `top`: Select the head n text units.\n* `all`: Use all text units for the generation. Use only with small datasets; this option is not usually recommended.\n\nModify Env Vars\n---------------\n\nAfter running auto-templating, you should modify the following environment variables (or config variables) to pick up the new prompts on your index run. Note: Please make sure to update the correct path to the generated prompts, in this example we are using the default \"prompts\" path.\n\n* `GRAPHRAG_ENTITY_EXTRACTION_PROMPT_FILE` = \"prompts/entity\\_extraction.txt\"\n \n* `GRAPHRAG_COMMUNITY_REPORT_PROMPT_FILE` = \"prompts/community\\_report.txt\"\n \n* `GRAPHRAG_SUMMARIZE_DESCRIPTIONS_PROMPT_FILE` = \"prompts/summarize\\_descriptions.txt\"", + "markdown": "Prompt Tuning ⚙️\n================\n\nGraphRAG provides the ability to create domain adaptive templates for the generation of the knowledge graph. This step is optional, though it is highly encouraged to run it as it will yield better results when executing an Index Run.\n\nThe templates are generated by loading the inputs, splitting them into chunks (text units) and then running a series of LLM invocations and template substitutions to generate the final prompts. We suggest using the default values provided by the script, but in this page you'll find the detail of each in case you want to further explore and tweak the template generation algorithm.\n\nPrerequisites\n-------------\n\nBefore running the automatic template generation make sure you have already initialized your workspace with the `graphrag.index --init` command. This will create the necessary configuration files and the default prompts. Refer to the [Init Documentation](/graphrag/posts/config/init)\n for more information about the initialization process.\n\nUsage\n-----\n\nYou can run the main script from the command line with various options:\n\n python -m graphrag.prompt_tune [--root ROOT] [--domain DOMAIN] [--method METHOD] [--limit LIMIT] [--language LANGUAGE] [--max-tokens MAX_TOKENS] [--chunk-size CHUNK_SIZE] [--no-entity-types] [--output OUTPUT]\n\nCommand-Line Options\n--------------------\n\n* `--root` (optional): The data project root directory, including the config files (YML, JSON, or .env). Defaults to the current directory.\n \n* `--domain` (optional): The domain related to your input data, such as 'space science', 'microbiology', or 'environmental news'. If left empty, the domain will be inferred from the input data.\n \n* `--method` (optional): The method to select documents. Options are all, random, or top. Default is random.\n \n* `--limit` (optional): The limit of text units to load when using random or top selection. Default is 15.\n \n* `--language` (optional): The language to use for input processing. If it is different from the inputs' language, the LLM will translate. Default is \"\" meaning it will be automatically detected from the inputs.\n \n* `--max-tokens` (optional): Maximum token count for prompt generation. Default is 2000.\n \n* `--chunk-size` (optional): The size in tokens to use for generating text units from input documents. Default is 200.\n \n* `--no-entity-types` (optional): Use untyped entity extraction generation. We recommend using this when your data covers a lot of topics or it is highly randomized.\n \n* `--output` (optional): The folder to save the generated prompts. Default is \"prompts\".\n \n\nExample Usage\n-------------\n\n python -m graphrag.prompt_tune --root /path/to/project --domain \"environmental news\" --method random --limit 10 --language English --max-tokens 2048 --chunk-size 256 --no-entity-types --output /path/to/output\n\nor, with minimal configuration (suggested):\n\n python -m graphrag.prompt_tune --root /path/to/project --no-entity-types\n\nDocument Selection Methods\n--------------------------\n\nThe auto template feature ingests the input data and then divides it into text units the size of the chunk size parameter. After that, it uses one of the following selection methods to pick a sample to work with for template generation:\n\n* `random`: Select text units randomly. This is the default and recommended option.\n* `top`: Select the head n text units.\n* `all`: Use all text units for the generation. Use only with small datasets; this option is not usually recommended.\n\nModify Env Vars\n---------------\n\nAfter running auto-templating, you should modify the following environment variables (or config variables) to pick up the new prompts on your index run. Note: Please make sure to update the correct path to the generated prompts, in this example we are using the default \"prompts\" path.\n\n* `GRAPHRAG_ENTITY_EXTRACTION_PROMPT_FILE` = \"prompts/entity\\_extraction.txt\"\n \n* `GRAPHRAG_COMMUNITY_REPORT_PROMPT_FILE` = \"prompts/community\\_report.txt\"\n \n* `GRAPHRAG_SUMMARIZE_DESCRIPTIONS_PROMPT_FILE` = \"prompts/summarize\\_descriptions.txt\"", + "metadata": { + "title": "Prompt Tuning ⚙️", + "sourceURL": "https://microsoft.github.io/graphrag/posts/prompt_tuning/auto_prompt_tuning/", + "pageStatusCode": 200, + "ogLocaleAlternate": [] + }, + "linksOnPage": [ + "https://microsoft.github.io/graphrag/", + "https://microsoft.github.io/graphrag/posts/get_started/", + "https://microsoft.github.io/graphrag/posts/developing/", + "https://microsoft.github.io/graphrag/posts/index/overview/", + "https://microsoft.github.io/graphrag/posts/index/0-architecture/", + "https://microsoft.github.io/graphrag/posts/index/1-default_dataflow/", + "https://microsoft.github.io/graphrag/posts/index/2-cli/", + "https://microsoft.github.io/graphrag/posts/config/overview/", + "https://microsoft.github.io/graphrag/posts/config/init", + "https://microsoft.github.io/graphrag/posts/config/env_vars", + "https://microsoft.github.io/graphrag/posts/config/json_yaml", + "https://microsoft.github.io/graphrag/posts/config/custom", + "https://microsoft.github.io/graphrag/posts/config/template", + "https://microsoft.github.io/graphrag/posts/prompt_tuning/overview/", + "https://microsoft.github.io/graphrag/posts/prompt_tuning/auto_prompt_tuning/", + "https://microsoft.github.io/graphrag/posts/prompt_tuning/manual_prompt_tuning/", + "https://microsoft.github.io/graphrag/posts/query/overview/", + "https://microsoft.github.io/graphrag/posts/query/1-local_search/", + "https://microsoft.github.io/graphrag/posts/query/2-question_generation/", + "https://microsoft.github.io/graphrag/posts/query/0-global_search/", + "https://microsoft.github.io/graphrag/posts/query/3-cli/", + "https://microsoft.github.io/graphrag/posts/query/notebooks/overview/", + "https://microsoft.github.io/graphrag/posts/query/notebooks/global_search_nb", + "https://microsoft.github.io/graphrag/posts/query/notebooks/local_search_nb", + "https://go.microsoft.com/fwlink/?LinkId=521839", + "https://go.microsoft.com/fwlink/?LinkId=2259814", + "https://go.microsoft.com/fwlink/?LinkID=206977", + "https://www.microsoft.com/trademarks", + "https://www.microsoft.com", + "https://github.com/microsoft/graphrag", + "https://github.com/Azure-Samples/graphrag-accelerator" + ] + }, + { + "content": "Prompt Tuning⚙️\n===============\n\nThe GraphRAG indexer, by default, will run with a handful of prompts that are designed to work well in the broad context of knowledge discovery. However, it is quite common to want to tune the prompts to better suit your specific use case. We provide a means for you to do this by allowing you to specify a custom prompt file, which will each use a series of token-replacements internally.\n\nEach of these prompts may be overridden by writing a custom prompt file in plaintext. We use token-replacements in the form of `{token_name}`, and the descriptions for the available tokens can be found below.\n\nEntity/Relationship Extraction\n------------------------------\n\n[Prompt Source](http://github.com/microsoft/graphrag/blob/main/graphrag/index/graph/extractors/graph/prompts.py)\n\n### Tokens (values provided by extractor)\n\n* **{input\\_text}** - The input text to be processed.\n* **{entity\\_types}** - A list of entity types\n* **{tuple\\_delimiter}** - A delimiter for separating values within a tuple. A single tuple is used to represent an individual entity or relationship.\n* **{record\\_delimiter}** - A delimiter for separating tuple instances.\n* **{completion\\_delimiter}** - An indicator for when generation is complete.\n\nSummarize Entity/Relationship Descriptions\n------------------------------------------\n\n[Prompt Source](http://github.com/microsoft/graphrag/blob/main/graphrag/index/graph/extractors/summarize/prompts.py)\n\n### Tokens (values provided by extractor)\n\n* **{entity\\_name}** - The name of the entity or the source/target pair of the relationship.\n* **{description\\_list}** - A list of descriptions for the entity or relationship.\n\nClaim Extraction\n----------------\n\n[Prompt Source](http://github.com/microsoft/graphrag/blob/main/graphrag/index/graph/extractors/claims/prompts.py)\n\n### Tokens (values provided by extractor)\n\n* **{input\\_text}** - The input text to be processed.\n* **{tuple\\_delimiter}** - A delimiter for separating values within a tuple. A single tuple is used to represent an individual entity or relationship.\n* **{record\\_delimiter}** - A delimiter for separating tuple instances.\n* **{completion\\_delimiter}** - An indicator for when generation is complete.\n\nNote: there is additional paramater for the `Claim Description` that is used in claim extraction. The default value is\n\n`\"Any claims or facts that could be relevant to information discovery.\"`\n\nSee the [configuration documentation](/graphrag/posts/config/overview/)\n for details on how to change this.\n\nGenerate Community Reports\n--------------------------\n\n[Prompt Source](http://github.com/microsoft/graphrag/blob/main/graphrag/index/graph/extractors/community_reports/prompts.py)\n\n### Tokens (values provided by extractor)\n\n* **{input\\_text}** - The input text to generate the report with. This will contain tables of entities and relationships.", + "markdown": "Prompt Tuning⚙️\n===============\n\nThe GraphRAG indexer, by default, will run with a handful of prompts that are designed to work well in the broad context of knowledge discovery. However, it is quite common to want to tune the prompts to better suit your specific use case. We provide a means for you to do this by allowing you to specify a custom prompt file, which will each use a series of token-replacements internally.\n\nEach of these prompts may be overridden by writing a custom prompt file in plaintext. We use token-replacements in the form of `{token_name}`, and the descriptions for the available tokens can be found below.\n\nEntity/Relationship Extraction\n------------------------------\n\n[Prompt Source](http://github.com/microsoft/graphrag/blob/main/graphrag/index/graph/extractors/graph/prompts.py)\n\n### Tokens (values provided by extractor)\n\n* **{input\\_text}** - The input text to be processed.\n* **{entity\\_types}** - A list of entity types\n* **{tuple\\_delimiter}** - A delimiter for separating values within a tuple. A single tuple is used to represent an individual entity or relationship.\n* **{record\\_delimiter}** - A delimiter for separating tuple instances.\n* **{completion\\_delimiter}** - An indicator for when generation is complete.\n\nSummarize Entity/Relationship Descriptions\n------------------------------------------\n\n[Prompt Source](http://github.com/microsoft/graphrag/blob/main/graphrag/index/graph/extractors/summarize/prompts.py)\n\n### Tokens (values provided by extractor)\n\n* **{entity\\_name}** - The name of the entity or the source/target pair of the relationship.\n* **{description\\_list}** - A list of descriptions for the entity or relationship.\n\nClaim Extraction\n----------------\n\n[Prompt Source](http://github.com/microsoft/graphrag/blob/main/graphrag/index/graph/extractors/claims/prompts.py)\n\n### Tokens (values provided by extractor)\n\n* **{input\\_text}** - The input text to be processed.\n* **{tuple\\_delimiter}** - A delimiter for separating values within a tuple. A single tuple is used to represent an individual entity or relationship.\n* **{record\\_delimiter}** - A delimiter for separating tuple instances.\n* **{completion\\_delimiter}** - An indicator for when generation is complete.\n\nNote: there is additional paramater for the `Claim Description` that is used in claim extraction. The default value is\n\n`\"Any claims or facts that could be relevant to information discovery.\"`\n\nSee the [configuration documentation](/graphrag/posts/config/overview/)\n for details on how to change this.\n\nGenerate Community Reports\n--------------------------\n\n[Prompt Source](http://github.com/microsoft/graphrag/blob/main/graphrag/index/graph/extractors/community_reports/prompts.py)\n\n### Tokens (values provided by extractor)\n\n* **{input\\_text}** - The input text to generate the report with. This will contain tables of entities and relationships.", + "metadata": { + "title": "Prompt Tuning⚙️", + "sourceURL": "https://microsoft.github.io/graphrag/posts/prompt_tuning/manual_prompt_tuning/", + "pageStatusCode": 200, + "ogLocaleAlternate": [] + }, + "linksOnPage": [ + "https://microsoft.github.io/graphrag/", + "https://microsoft.github.io/graphrag/posts/get_started/", + "https://microsoft.github.io/graphrag/posts/developing/", + "https://microsoft.github.io/graphrag/posts/index/overview/", + "https://microsoft.github.io/graphrag/posts/index/0-architecture/", + "https://microsoft.github.io/graphrag/posts/index/1-default_dataflow/", + "https://microsoft.github.io/graphrag/posts/index/2-cli/", + "https://microsoft.github.io/graphrag/posts/config/overview/", + "https://microsoft.github.io/graphrag/posts/config/init", + "https://microsoft.github.io/graphrag/posts/config/env_vars", + "https://microsoft.github.io/graphrag/posts/config/json_yaml", + "https://microsoft.github.io/graphrag/posts/config/custom", + "https://microsoft.github.io/graphrag/posts/config/template", + "https://microsoft.github.io/graphrag/posts/prompt_tuning/overview/", + "https://microsoft.github.io/graphrag/posts/prompt_tuning/auto_prompt_tuning/", + "https://microsoft.github.io/graphrag/posts/prompt_tuning/manual_prompt_tuning/", + "https://microsoft.github.io/graphrag/posts/query/overview/", + "https://microsoft.github.io/graphrag/posts/query/1-local_search/", + "https://microsoft.github.io/graphrag/posts/query/2-question_generation/", + "https://microsoft.github.io/graphrag/posts/query/0-global_search/", + "https://microsoft.github.io/graphrag/posts/query/3-cli/", + "https://microsoft.github.io/graphrag/posts/query/notebooks/overview/", + "https://microsoft.github.io/graphrag/posts/query/notebooks/global_search_nb", + "https://microsoft.github.io/graphrag/posts/query/notebooks/local_search_nb", + "http://github.com/microsoft/graphrag/blob/main/graphrag/index/graph/extractors/graph/prompts.py", + "http://github.com/microsoft/graphrag/blob/main/graphrag/index/graph/extractors/summarize/prompts.py", + "http://github.com/microsoft/graphrag/blob/main/graphrag/index/graph/extractors/claims/prompts.py", + "http://github.com/microsoft/graphrag/blob/main/graphrag/index/graph/extractors/community_reports/prompts.py", + "https://go.microsoft.com/fwlink/?LinkId=521839", + "https://go.microsoft.com/fwlink/?LinkId=2259814", + "https://go.microsoft.com/fwlink/?LinkID=206977", + "https://www.microsoft.com/trademarks", + "https://www.microsoft.com", + "https://github.com/microsoft/graphrag", + "https://github.com/Azure-Samples/graphrag-accelerator" + ] + } +] \ No newline at end of file diff --git a/graphfleet/input/pdf/SELFCHECKGPT.pdf b/graphfleet/input/pdf/SELFCHECKGPT.pdf new file mode 100644 index 0000000000000000000000000000000000000000..8cef32e0e8d537ae4df97ab80958dbc7972be108 GIT binary patch literal 903117 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≧=3ZW)m84gy(>1TFArz!4q~+1BDoHX55;Ep#vYK4R=o4t{y_i^&8e zPefaT-F#wf38Jh`Y*&!e>(3e4Kea&4M82()8=b9365n7_oB!DuQ!5Qczl zZ~DK>st)Q}QU*wdE_!gq{(<~3<1TmL9!A`KEAi(v000AGYe5dlE$)c!l)mDV|JJME zu$T*XAizqmgq_v8cor&#xW&r>JJ?25Tb_me1N1UV*T)gy9MvVee*VWfipPl5rPpO4 z2v4*i7kveIzOUoUU=%6#hF|djL3!auu6w+e1ex?CNzLH*5l|Zs`Ya|2_GHz}Skxs? zP468Mw#=E|5J4=dZO)7#C!p~4Fr>K<5Pch1uWgwbrT_jrxc3_n~1qeMG6!%m=^1?WALo*eM$+ zlEFWj{)X6JkyIDJ<5&tT-v_bbil8`94wnvu4-KQ*lV!KLw{SpJM4CtG)VUhai9L$h zOX&ck#oU!3DXV?2W-l!w?L0p^lly2rFBV^^UrMmZYYA&ezbwrp6ix!fl2`Mshb17L zyoTfXSj-C&%Qb^hTYZ|4wSwx@)n|hWT7*&*Gj3v%vcCv#9Gy4=)nPvXnvD8(F+DY_ zr9CZ*8NviK^wBPb~O+xns5#Eqhs5HzR48E zOzgP%Gz9yQwRb*@Crn(pa&3Hg9ecg|vi4PIwuzg-t6@^u0#Eb2InT)8$*_Muss<6L z#tJp@%bgrBY)0sP)>BpBmLo1fJ^F|qFB<}OyHdC=E6kAKArRiH*?s-H@^V`~Y z`>0+To*dhrUmln9u+POpz3{NHb$%JmAc7z%Y))mmibWpt-2#>{S>A1;B7msnFWH;_ zgQf>+@uR&~U~u*K{kKHne*&qK4Gb{c(PCOa;=>`3N-9j6fRDKPUQXD#1Nl*vS9RDL zBu;t%`~Sg#Qn?aA@_;*8BUpnw0!N`r{ZvB!-G-R>AU%yHi8fRj9=&<)A>dJcuoHpv zdX-g5rqPefFtUF5R-b`wSF_vc*GUvsN}bS0EDOpa68 z!4HGCS1f##6^)_NJ&K}kc|0Ct>Ix+^gJ-gTNy*&5 zGP2h-zP8oKN1C z_9Gl~W42>YGm5}b%Q96q1c(oC&_;}zA#V~)`V-aJ4ieXJ_2K{9DpPpu~O zgHz#C95N1fKvHi{av3T}TTXr5)V6=UPn@y|9Ctw_j~IDK=|B@wt2HVf&x_$V0ZGfdw4uK(C9I zp@^v+pv1%A@kj~ns7A{o-gCc6+QvVY%^_%T;0}L`^_$@wP$k@WTYu15VOUBDm|V%z zF@$RyCjj((hu;A6qO73Y3Htgow4Q~O>y!JLR7jrMs%#-%rU)tP>Op%OhlQ=#-XK@nN@j}u0YMTBnNFmghlABd&Cd;s?%X;Qm=vFSzcbV?rr?C zx?zAwTsUzy&Ib^Tf-tUxQkY9&eNvfCg|mTOx}%^NMluELA3{3gK>qKZY5>hBrm3>V zPT37^z5wA`KohHt4uXBJ=HkPPmA`z6A4Ajn$H5&~@|{ zVb6cr+-D%a$^~Qo3%V&lOPGIaON;!^VZ;#~sr1D9j}J|;Y8kA zNT)mI86|$2^#4Cxy>(nv`xi9~DBS|mB}z(*l$4af&>$k+2-4jh(lDfScL>tm4Ba6O zL-zo}kk8@X`+MH!^Zqvu=XmCvZ|uF-UTdAHMhPXBhWvw%w-q3Td61^~!Cj3qBK;K_ zOlfL1`%F>o_2zz(9?17TYJd?5vbNB^gaEB^s$p>6!@O#IECX^pbUF$5ksr@OjL*W+ ztjtyxJpw|aZyLNg^gm&vlE!5Ro?^eCN3HYQcLGI7lI7shqn;zoD4B@zI0@YsEqzhL zHi4D(y=~|}#)(sHV*9;b<@O6OiVKr&z@-$!vqVJ9#RM>#8cww@8Lkgfg8XGRn-xws zhTLxiEFf5a!GKDOdIOPno?NV06aV$@`nfVWDoZSgjkS^@2Ab^ni5rEl8)rmYYA5Zmjg!=NewD&q~1oh_oXRp=l3|MWQqu zSrMmSKPcY2>~xt~H)c?*c#elO53oh#^Pu@Mh!s&Pu@Jsi^u!D7p1Bk|0}0=|5>D)1 z|14`<6Csue_Xy+Y>8N>Yn0~#8yn}$tPZSAp$$!1#ED352HLx%8%Z`mKzdZ19mQSIm z6cgx`gq%e7)xYfSzPF{5>gyv>aChai5lSUiz$?6kyZPpyR7M>SLJPJ{0f56ZALM<; zbrs?JTjp-0T$7YP0ceCE(&+hcseg{Ozc;1k|8BMO5Z7Q^3@A4a$ZK#ZW5taPK~$L} z8`QgE$=X^PbG;+$58biNS0N-|ZUYz{2S2A?c5`JYCzDyw-&78MI|K+lHCDit?*SPMkpi-Q?0AuYl7 zrvNFVXX4(EuJfO+CPEetfGYy$^X83mRn=iC2->9WQTdT?7M& z%?F19obOWl&BfdyFLdVg@gq%7i~;==vb3~_wER?|g6pB}3>M^--ybK0^Q9vaawcSd7#Jb{daIByZ)7@mZlR zYGoAYmHuEQnD}wqZLVeqIiSVB<>9-? zM!}B2mVXP{qg{7fYjvd$p(k{(q!`bevY0%Bc9k1hyt2jU%RqafDY2fSOtSty(}ECg zjtPLa?)YO+Zq-ZFH^xqmm!0bn83TYT#@FIw79aT6IcX45y1z$GPapg<`6pGZ%J-t7 zmkOs6?u4UXldTBbiC-Dm>v%o8&8-8b*UC(H?RK_<;$xQk`m6|kp7cAF znu5yxR)wP5H&C^Az6}5cO2RIb#_%4=ShCR5!ZJ7`^v+kK(@2!ixZ!)2aWqK5bn-8C zJZanfu$jFZk(0KLvU&g`4%0+_62o2!S+{|q5#qytQK5bNhnV5Lv$1N97T??_ zI**&iFY{kIl$BG%vH*5`bH&+n@^e&KfHR~Y$-pD9!R_Y#OoQ0i&$sI3dy`!fa#~6v zRx2wy@uA%JdFl~*n=0lRWm%kNpPQJ#9?#tn{$B4PY)6(2KmQY;=NZ$HysMg`-En*q z8u8*Qrd`qnQR)6ZZ4^M%%+ThF1jrRrK8#tye%8LW-go1SHmY*mu{`FR`bX=VAY4@X z!3O@nHQ3Eu{3$c_Lfgj1Ml#7Q&am8k3}a8(?Z==;`!4;&c0VAQkmg3I%02thD4zj&%yPxzVx8H@75S$(!zg=uO(wMmu`mExpc9xWLB7r)8%1_1JMFq(O^UNbv+frmTwM@^hdGmv55LMdwwyyzA8> z{L8Tb{&+jK?w8H=1cKf1ffR-{l4SrOQ5Y<);~!<`C1ECPpg#x=;Psf0liKQufgb_s zNXG|ZFy`U&YH50niCHIX0Ti?y7R_4}G{i^DtGU9AF&dnr7o?2a3zMN{_FR`%7M6(A zKy~>?;8^Tfl&_6VXuHjD%BK$hO3*8udsXP(96?yr(U(-@XA=PX8ih_g9bOJKX#jO3FHzL87M9!0h>#S))|qNTv;KV=0=A zs$unYFh)NT!+K)y3=EX|=JOwH)ru)y0iEuOgiUMa%phZg!ho20yR%*Y5pOJkdGMf!POcfbAy!1`x;J4aUS7VcDCeW!Y|jm5w@g&Jt2);3Ha9=jZ(M9|OB5qs zzoU^5>%XSFW=7@_f2)Y;*(+oVLTF=G`nKusu5}+O>ZHrt1;7N7{N|+O{BTTbM#t&? zndwd`K1xCy3x*nD)!|&$4yfTiz>p{;BcLp*$d+%Xcqgn9x!CBPA1&qT=yT^A_+3tw z>T>UZ4LN3R*7$f!Fr%5v&4GnimXd^-no>l@>CCZ4^ezjJUDGXLu{6LI&{Dyf!2|z19{uY4d=~xI6VwdEd{+{$ z1K5EZB0a-_Q1K70>A%TSN!$QG1=VM)1A^N9jc3o8G7X^`5D{L4v> zATs>d4A0M8QV?w3en@@M4JC2h{h6|>_4B-NJSc@iz}?Jt%^lb7Jmo{K@H0Z`ijQrR zNYp=BrpYp!jGp)|tgmRu^x`|}Pl1ZSi%$GuWlpuw0wDeXHFx8>jJN={y?qTa1WK9! zxy2bkNQGw<(d!W8D*j|(u zLp>YzO#QX>84Y?uoN5#Zm&hDfhqys*r*0c2L|2_-%f{K<#esppTOc5Q@>b;iU_?;KGTpr^CLZod~Dp+1q7(H6J2AmDc$+$Uv#-*$mF&K3vJT09SzjoXz9 zJ-r)yq(qDnasNPHm_qb)~7_SN8Oe*Uvm&M-6OB+;mFB6uQ#y{B2;7@5pEJ zQg_^0-$#yQ7!@JcX;?KoIYvM$jHPT%LkQ^)-`FjDX6O3lYb>Y&FihzjYY0zEq=;Y| zM3Ghd?X(v+mY$pza5RGma8&2?70*DU8p2@Q<^5;K$ghzVm#Bjk)vU{!GK7~sR{-To z$VfQ0YP1xD%@fG_1CNxENpNCJ0!Y%cJ0MLu!Y6Q)#vzvC<%U%`TkGgLmgu@ZtO)Gd z%Zs1Q4xQ@^_PJ4?m_m(Va#{q5(pG?E!gqEjBf>W=ce0zKC#zu1!x&atS%}37${qm| znej@6Y1II+lgS$LYC`FxNYikE3#hImQ|iKI_hhRQ{Y!#v@^HO%?sb^JV`Yw;lNArv ze8}Q0K=}H@|sBLgwZ(u^)&@g*Q&n6+%RG8#B6@S->sK|ie~6CZo=SA zZ}BNQj%}ov%>}i|X?nW1?_8lR?l~6lk-LrUc$eQI`)JWn22MDf{D=$2TttRbURf{Q z2j66)e_8T~O%EiYAv6QBItWQrxm_4`n$Q2e{g`w=0k>iJ+UG0WGB;3 zl3$!=zEt@YyuBq7xwc}zkmE2{ju+BwYC3|}E@KanBYS0zuj6tJvB zy^NFi@p1toLkUqn&=r44N|Ty0r(plMjJvdpuMcA>UG^3`uEt=NGVKG1pT4cF9Q+GC z-IKFOj6pdZ?|F;e%}!W{q2pVZ1}@qg%P-?am4L0O@2py}mLY^qh^pGb1tEhLpA>n9 zfCzFCpOXlBhN((Z-DKg}`>US(F=W9mIK=nvq;L)cWNXONP2FX;P(SCU;Q?V?1u z^8WQJ7TKfpbzVZH^e;CPF7~BTEaP$bffxY0h}Y%!7Pp(MdP#8rk4wV+r0de|s`#gu zBT_^2XgfL87sK)%m5$yeM;MN##iQfXp@+qQgQi^4mbVjqy|ZB0S+y@I?oWz7nyyvJ zE*ea^<2OHoe(npBsn%WaR!@rB)Xt+A<45rgo zAMm}}B_&bI00A5NSjL#KY5y)c8IYj&u#%*ZuxD6ryl3$F;QYA$Nh1CPUk3hol_~zz zi-fm<+S=Mi^|m1ZJO^jkg9fa(dcK9JIvpO+ier*x~*99dH=Cq{O)xt zfdAgK>b6BEf6QoD`PIUC7o<1e(!hgL@sjknZDsUf3}mkJTpqe9ap53Iv7>E8Ov3XP z7Hnhq=NU?!AS<@0997c{LxFnMvGX58v}oE#@sF8TtfN}Ex5daqNuK@Zi#|Cn3`7;g zv5P-^;)H#;T+X!TYA#cR`WV>XzV5_|b z6L{Dg08K?3^Q}>YCv5boYz94uJ1s>(+Ua2T<{+GrQbm#dJ;u^JQ*#5dBuY1U@AIe7 zBSHy&HbDARWY=)>cLHBLB_lwyUnu3S&=U9QA3nn1R8$U=!HZ_brxX7DJJ2ouuTKsF z4u@w0@eJr4C*L7;ozzbJ0IyIi3kbM4p6%}HwR!$fpwv;njoZBKJXr0DJo#fh1p+0e)*Sn97F-~YK2LJTrxq%)xI(Rh= zvfAQyK9k&HW*9=Xd!Z;Qwq>>Gb6nk)K*vRb%jsd$-UlM=r#YhW@nM=3`>?29Byp?q3WNz zeYzq+A9Q1y+fI-=_T@i~FrNx+(T66tFy>ObCvE_I7No%QI-uD?1)>-r z+Oc*UjXd&+Bi@(rz4vJ&a7T9ahCfDjMqjO^tB*9cf>%)yhaPWEoYnh9j@wtpnvCY{ zZ>e^wu$R578;`)lq4C9^=-WN6R(u{#25K$mfP55lFfXf0O|JioitNIlzHfGCzeNLY zuc(u?1WsqhL@ss=VNH8Kf%f=+v;$7~4tJycfb+>~UcbA$-oHzlY)Bu<{p%EU<|}T^ zwn=>je2%+~d5UVSl2eOUTDs|G^jZD`20pTkxHAAhLZ4F+>`yMV9{JfmUWVa7^1NS#0&UOSl&Oa6& z&MR?A8?Hhf)aq;$**PgpWRsU5@OgZhH-e~1HD+U*XK9&wfSb!RFyN>2hreM1-}>7g zT69Eiw6p1FZ#x-eKScuWMZmEkH-~^cwc*jFLZ^9sZI|s$uA$Wdpo6%OYukDOo>UUv zBv1w3F*Yll{Xu`%c(P`pvBO?tAgZd2?ca#3a?u4 zE-ElB>bAi;jc+8j{`x#}?l4+z#U%VxiDt7E&CuwN-M>+_j=E`$blC^~+APG^Ezb^C zmHqmh8{vl4hCmIe8!5~Wf#Y@~@@T#BNR_xz<}m%GQP<8137BnvlFnKaB^*n z=Loh`SpdHrNrZ66djE?RJz^v5jXoiyUVKzx#BW&ADKF^Rnab1jzMSHsC8&93G21F=NFY> z8wdHwS%#Fg+)PfwDz6f|Lvzc^!>MwNRaCfL!dhxCKdOA)0xT*1w~Qb*Jy06;Pu9z* zf=9&c_2jp!)NHzIv&v2VcGq7g9uQ0X`W?576j+mxCjFYL{J1CUFdnL^F63ro3LMVE zmYxd_xb3}=p4PCotGVggRR|_>oYcz08L{6)dk|2<;^nZIU)pdb7ymJThbvYtz9gFa zP2b}PUE?ze*V_yqn;;xnmk49+!S5QU92FHSi290S!|00@p=Pk_KtkB{)n9CX5&TRF zln{wG)MMAZx^_N~_aaNMrMp*`=;+~5p<$~`-heAlK<@3;AnSkI73je$`9p4)Aav^R zkjt$0<5Jd{h7F%Fath|5g&}3v8x!KbUO!`XAC7aBun<%4iHAT5_T?pAj~iN>Sbpt| z86E!#0VzJ!)1oDvmtlrg9hs3X5r1^~#@t3T7c;(Ytlf1v9qXD0o_@DhE;M^()^~0m z(40G&c!X+6v6w6RBAoQ+!zh59CdVbmJKtQ8GJV?`9nDZQf&KXL4R#F(3iipr;$TJL zAr}h>cmPK}0BT02()}n!(ETAOVbs|e6lAiuEw3^;x(DdAdKx~1s`LDgh%|(4 zjJD}yi6wMzy;N{kv40|u13CY3_DVmC%9_ZPaaYG+i*w1(KG44=I0sv{hS~=H*|kBx z{ln4=&j&0-{(VMpv6Pm)6hY5wxY%mT{XkQ*S73OI(sgG)Pw?iKs+;8yZRolt+ehb- z+wo!WBJLc2CUGU7Cs9VTFj=R(CFbsRPUynPoK3wJiU_RbcK6ru})_0AsKSmILvAxv(F`Cvb_ z%!)!R)x!`r9-ZuIWtINn0gn6zL-wogikKQ8n(;BCx3N5!p_y5+`CiR^em?j8FUWQZ)+PRI>7yDO z>QTc>9(VjG$i-ESPNVzfAD@R9LI||nDt(Yy;9>#=&<)=~z=hDWljFU)>GuUT&prSi zspRb|EXM$?f}8t%nt_Ay6|;b{F^G^b>{xL7Zz)G3kd|uvrrt91upyQ+^VpzjSxEg1 z#^GWJ5$1fT9^40dM2?`(GDnB0S5w=7wTU_NlT;J>J!ID=mlHT#)m>WHJ~X zSECQJ%Rqh4r^=-$$Zb{Pc_&$Y`IVlJ)y|#xaw%?Izw4sovo$6#odWh)-E&4v_+j+n zQqz#vU`RUyJlDy3C4=G>ctBlz^>~l)y*;OnkuXfV?N!6VP?wu^w}YPpx1v4$JL8Dc z)%I0#XqG5d1@}7>kg%}u<>P}xG6%nef^P1wV&t*6RO_{umtLrOfZYC+=IR0mppCG` zK~7eEY(+m>8yizZi)6SMsisc+g6N&F78V#NDSeT}o#DZTVaf*PMn)Kz)asqxn=VZ0WOj%hR}j(Nn)bDtbKeS>%MDunJ|g zyV~q=w)V&i3QD%Fa>d#-t1Ml3+Yr1qq3*NNXgE7O#~zZ?YACkX{=<`~iiKCF+olH! z%kCMPTQpWLA_u@o^EeS47*r{RZ-Mv*;INH&swh$F*fK}ssaQq+Lr@yZ;w zj+Sy9H5|5`+gzPES^_07VPr9@Rz8wUlC1u~UfOPzy%ry(7P`BCU8nEaJ9nm_z z<%3_IM5@eY*f*2K@#)))?=3C3{DuBn%K1cdQ|_^}vfKgqFLa!2i&?h=8-Bxc{B_JL zT!{_EOo!iC)6y0QHXA-F)9s6)GG?$nu9-ZSDLcQMYURn{`w9=+P7phnJW43O15eTYK65 z_+Zk`5~u>Zz=4h{f4&^Y@BPz6zoGZpTScosupwzIL*!Nd??(8YnHdc5J8GEfiOU0w z&)VW@(*UUEa|KTLSRuc@HwRWl0jR>rqD!xi|K8PcRV>9PIV}~7eRsGpdj*J7kY2s0 zU4WQyiv9^h${)ewzx6220avgfznQ3@Yc5eg4LQOKnqhVBZ|xBgZ++3YaHu$-HO>GU z_2_ZfI}x&L=0M4hfCRN~GQ~j_0E#yKd3i#DAR~1f!!jxiHMY`Fk*zfEWh{|oY=c*0 zeo=D_x2ERKxIp{nv#$(E)P+D>3|JwV%gHoifQj35Mp`QO-1M0umbc9;%vnrK9{dMz z!D$5ekKSiuK&u)K5J_2aWse`T- z6?&Y;OqI~K#H=e&V?ODZ=&ApwU+NT^)|wmcnV*$akPP5*1NY}g52F_U6huH7_Eg(I*db8B3&_jx z8Q>j-R3$bfYHlGjY2P&Q=cp*YC9Ex<|D6DDA{YNJQ%Kp^g(BLZNU>t;Qi_HH z9m~CAlB8iRY=8eljn03i4=4q|h+vl7@Is5l6jO8=_`Lr$0G{P!ydn@}LFSP+aD22k z`TH;XHyL>9z+52#pXB}jc;ChH|06a7b>P!MKyiuIJv z9tP}WxRlC{c9-5TXmRp1lK(3tr0$^md}Foiz0~9dl|Rvug4X8WO^gk7wB{r>fz+*+ zA+IVV6u6ClS6&wsFo?XxrSd;B-FaCQU9T9^LkmxyH{PF`60AD$#X5zRa>Mh7G{A9F z?Vd=QTK%u#*FR2F%w^=QHb+NScE;+1gZn!sQKS-! zgeRQr9uWuK;D>IAkF~W<@dg?$t23o@KPt+WXvHuw3n|lu{9MhkfK2H+Xa}$*O;C3_ zS#BPqdesNjV;s0XTD(e1tWZ$Q4CwL`cYVSX{~gr!rX!5&^0K?vc644cOj{AdADrZ$ zk(D=bg;A!YVT2tQ<%R?&;-{mxJ6us6w-(gJ_K{MiLLcn-YF~2&P5*u? zXDMyq)6=i1m?=zv^KphSNe!<)y!2}RnvjB_^q`w=bDp3l`3`eyy_;dpwyMati$LuE z8}iB_Xxl^fwC=|A9ygc0MQZ98;CR>SJ5n+u%_me5O>1%-fzy^VeXp2Bo0Rxvk@k@nG37WBTt@`yCzSq$QU1F%j zfW;3c&X2CG2>I`Lk4KC3J&%+5ETPVuedQflXvmVR#>K_O@(rL2p~W5@w4(C#@MJ>} zNERIbxzYQc{&Me#vZr;`=QQRfYXgT;`E6wpz!gCbpTJYV$N7k}Mfgra_Z=-~WWo0F zIxh#Gf3>>$T)US?f)Ma*+VKX^{q!2En;PLrn!&)JZ9Fy`{I~W1@W_VSP0|GWOHxDU z;sc@qMTlTSEV`~^kACmysO}3|f%oX5D>KU)T61|7-}J2xKzBAPEncD@akQH}|9XlW zvF!dXZUoFl41fMyR9BmBaJzo^r6<5pzbj<*zMd}ri#s7=XSqE0ZQo$tl=LEe{XK2zG)_uwFuZF^$!n!*r;4-#FXeK0vsZ^s$qEh zo5cR)3lCau(~V$0sQ^zragR&UK@QdSEk*AeqO92? zpO>yLo|$$?0#iQy`ptQVu|R8UE?}rA85R%7@eS60#Y1WxBlfnU1l*OnNr2Yh=c(7B z9S&L^yi4^qm0j4(^kR(ISftl-Ovv9g;^Lk)O5pWa+D5Hwl3MfAyJL#p8j2SoZ(Ftc7_%#d2-B2N5hD;6;VPP z^!E;)7#BABBVs9L++0hLI4@v*23YWRCje#41$WdGH? z07PfW$*;2LqvY&ty$+cw^f^qTAMkqU%I}T~Ta)R?_FaGefnBfhW`E|O|74a5C_pU(s#d@P z1LnHY61_eHr;GK{dGQ=Svp~Z9{Nm#2I<0`AM|)K@S?X67W=oDGQN+ouUqI72V+C>P z?Xpkb@RBe?eN3>s8!BS&-qQ8-#aoOj0GOcgzqP%LjkP1BladOJVAzkUJTbrAE8yg!qI@F#ks5VyS` z@o3^v{-o7o3}5W)3#9CNCGnHM6_1loC+hAetye2zVv@-Cu{i!Y8LQ1FEku3XW|_}9 zUd;*~)Cj{tivT9YcAgITnZlc-!z3Z*zqglge?PaXgNv)U(t0bJoQ8(~N+R^`5QJl> zZ|qi?mDif9rK3t6grG4+5(Wly+nq6)cThmr*2bq;L{$KjZlmY%dw3`jPCm`+nnGz1y> zg_0np&vNx+hY8!V9*VFu%BS5ffW~hCJ7Ch=xyi&`d=%ei5kUgey=4F?1U}u9HzGZ1 z7IN6L;qV{wU4FVNejUHI6aTuJ;6D0tbZjrT-iwSe=pYrSq)pJB* z-FzPLUTf*x-|ml>tR->sJ7T|hF;%3=xusU)fDveBU$nTJ{9KsGcyF#!(bROO*pi=$ zlJe16uH;uSkqd>A6D@obccuEh8(eZ4gcBV_lR_x3o0uPbF>6KU=+=6agB~3%%MO0EhwY1t=kir$ z|5DeQBO$Rjv?mMN-TkRA_dRB7DZ1($7!c^k!Q*2p=ND#d}fS=JKu&TxKg-uAP4_19oqj5#us`YxIN~VvpSN^!$V4(=Q+WmE7oE=f)l>i zHz6EbYOxF4guxcgDy!pIOw#@ISw%KuqaV8sp+r0rceU(hFcCL$)tA}#Eceg4Ugv9C zQ+cb=<6=gu&rN5h>Pc7z;9^CI8qjpNwt96KX;ole@cBY*(jbo?^s-RgpLdL%th7>- zr@nhv=O4GWmv6eQtEV5OqN%LV8q{oYv2;)+rJ(SyEyz zW^HeZ$8kE6gCA|p++Nny^z+I+DvRe|Xvh30+sb(1Cz+9tv?C)&vdn)(x9hE^K!6)O zuSi#SBsaf)Qb?hQHdh)Z#u{`ZsLyyu&U&z4^Jo-m%S`QR_dIsPM_^(9xz&=SO zwpXW{B*|B}SnRAq0|Ud&tbGGR?DV+k_+3yvqM-?M{>+bSKIAb3|DN=;QexB6Tb~i~ z*8fg2DEYD|Q2X04h9MBm09MJWbb5JN-q_gRv7WVtZ~_RVFbwR0o$hIXfISZwE3|*_ z?&%}&Eih3z_@A~yJo@04F~E0O0U{PyOfP|NR;`A`tS= zlLM~v|6cNcUjw)M-x>!gJSE&SSGlXYNe{^{rCe6Ayshrrn^pCS*jI488@+EW+hYxV z0C##b?p5XX&VUg00hjffi`!YM*-E=_t6$ptSk50thBYQ#3a37a97eaUl6%z;P1U5w z)-QG!Rt787p+xiEM(bWsegHCxgB7*3)`Ytv;9v(a7NW)*n#fPF-UuLGa z3JQ5S7)*zVJkXRq-I4(ekP0rEvV<+x;DI$F5)-fp?}@qG?7U!Wp2(TE1RS>G+>b@x z=UG4t4VG{eg{pM~*ean~hWDp33#T0F+ZDa%weqMt(c*&7drC@*5Ar0pY>A0GJG^|_ z9 zPI+yyhFdf7PyONC(@*&J$8t30dB`xuRZ>2n#N=oVI>urAlI+XjM zl%>JWje0GWnlUnX*PA>OqbdLEr6ir(rEURCa@7W=dTTjx>+h81XYj#xyJHz~NiWz? z?h3mx?5^ZFnW{Hj{npISMO&)sT|h43 z04^o=Sp53@^)yWpi$QWrRehFSHjallcUQjgmpOneW#!emj~s*n?*rsOiQ=rj$$?n? zf8OQ`Z0(rX6Uk%qib%JK(qYnJ3Z4V}pvTKp2?K=-Y%Vt~58|bsmb(q$#Rp*U6tF$Y zeEWR3oX7sXOKrx{$dI5C4gLq@?dteiUSoK$&BcjpjgAM~tHHDFG(CM;@WpUU)oyO? z=F}7~5ZK2JG!U~p7%Y(Ua4D99uxV;u9}7*`A$jZp=>&_DkC>aHO# ztp)O*;L=e@zH8Y!Vt7?_H{I)%4uyL$gS_trv2E2O8 zNr|X@DZVle`^}lc{NNZg&`Yp4t=}E|TYCc`n6{9nvdllF#VSu!B7U3bkgH8a@IH^0 zW|Cl_rHKyg;*?r09-i<;3+0@)q=*eYr{MEJv9glRcv$B;?-2CLgY4D4=Sro5mk>R5 zYAG7Vm9JKCi)@KSCqC7jzP%fd)0lZ?sv#_)tste&V%*$EZ$+I~o#tdz`_aV!mebZ% zkncWzH~PUyP|g)=Ll$`5>7yg)_;|grphDUtAhd{2(&X>hDAc!~?E5Igh};coaBoja ze}5&sOR(8J+m-#j-YfQt&(`6bS;K2662wGC2w(g>ybWYBjc{<**b-ZA`oiTuvj4Nu z&=+zwro~|pWt>pshRO`gdn^KSa4PVQdSB_cU)*wr^X`9u=L318`%FzYDMIe{)D4ry zQpRaxgbTjI%;9FJFc0pgstD&Xwb#%?4KC~IOGQirDXWk4L1a&D8;nU4H~t(5cQP8u z8F}!g9xPO7cS6|w_m8iEFzww4y} zyE-I`An^{n$}9;Ei5SSvHu1=CW8CE1sBB4V-Swcdjl+%da?9aD;-3X?m-V)>(T0b; zV6YL^qwX#vh6!4|WeXb)Lg=sur_NQd*kd|`xxy~7>pKNC47D`iT!MGQ=c5)*)2c%3F zr%pu{p!}D`B|_r;qPU;Pm+l?5)~LLcj&?iqIk$+^)Eov+bft*Z=uwfb(4BJof*GzS zjK6q>d=T6Z`c6>&5!rz}xzcxN@8{cXBiMCJ2lN#0u(qZu$G!1oVtFrrGDIt^n*Yy@ zib{3V?0c=LRz`UZxX?45(GUh=z#TK~*lFtzgo98mepD@UzmJVE+_!bS?GFdeb*K%p z>cPj)oiZlsz)t|IzFOek0ojrKEtEe|Zfdz_u45K>H&0;^_f3BNEST3btBh1gl=Vw-qZu*IY% z2ER{}`$Vr;0d-xuVPOL^C+YnttHVvF=Cr;LJN+TM&wWlX3+bL9fW~;k z7VQPVFcu9;XmGAndg$O9#hIE^(#k1lfti&)Y}k@PXEcyrB-?sWZis z{cdL{E2|6_H*YpK^oX+Tg#Fz*1r=+3uf%O>$u~yElHg$1c43nCpAd&Bx{FK4ZD|%? zh}Vb1%6=#Sy8$^SM);sF^>ZUc2Ev2|cZ!zZ#1>rv-g+Z} z0f~^eqQT>P|ES9unT@7v8xbjw5q!!C-``h7&#=7*#Yb9zk=3Se@Mp0(`?n`E zUk`Sgk-jlHCHAhEXoktwOi>LDBQ8~$C~1a}7IB2Thcmq-I67PrF&Qb;-}|}kb*Y9R zqt9*t4X?If7GItp-tG{dBM{A#(>UM^DNFH|6-L8i$Jq?>IU5lje5=(J6w=fos}gz4 zw=m^+zx-cu1;J%G_O2E&S}`oIr?`2p8yW@;GJn=3HoW70%|ufwpbSJHDc!w~^onJl z{GSQEYGsic%5pHMdT!O#(b*k=YUn98!YcjTzAvJ!lq@4Mdt#_C$ zqU8IhbrJ_(bm}r5F}{u$a)8#b&4`A2UN^mbZ{r)o0Mzo_%Fu=6EEcgf5-xnK(7qZ+ zX3iv`{IY<4-{L0*jQN{gwpg2W%y7@Z?nipPC38eVX)v!7;B-9-42WRivkw*A)705t z=#9#)WL*BPeH2=f$N2=oSe`!#?tn`>DS3$gz@|*GUiqsOk$6lIztYo%W`XsEQs8ZR z0DSt@R^n=qXUvi8;wQw0nc9WVe_zTpuCF23Oo^^Aq@c-#U!^xXIW~L(AtIf{OjJQ>+)QWDR~J z=9}hpWS5JlYco3+@7K7_$@iSkr59|`4ej~xe5c;@&@uAF(-)$-^4DFRF=ojM$T7X* zEoo>U?^y|BD-6B<3kG>F1m!*ql`l@>qWv4P(Se^K?!&dC7)i;ku86D+L9^qt$~7b__v##oqdhMbZt z+9-j_z9vbjxn)1m`JvgNXS#8M8tjilY2OenH7W8|&=nX+l)L5BZJo&(N`qI@8Y1*} z!=&ip=bVkLt+nm#mY!irBbbJM)$;MiUL?|M#|!OM28?tO zI{d+GLGcd{v;&%&>ZqZAAid#N^Izt@u201{^6M4x=2nOr$;rOPsc=0^WK;+z#27*b zN(NXgK5h*Uk8TzLnCY&b@eUzlvAH;LZbchpq#L&@JI8mj*yqht`VK63exd>CIk)#O z@V|8qXo-APn~(D|@+&=RJ>&#;7k)ocmP@#skEP>QBULl~Nd{*=`G(vVm09-2Yq=7*lb#E4<0uLJ$A;2X%_ zQ*=r4vvR_ge()Q}?(cVTz`L4d%EC_ymH1H$Wq)7%UY8ipKE<@N+Jj`z{>VC#of~i6 zFHk!SA`1uu>c@k@y4pzTJqN4646NZQ?GMPS>x&x6-Z%Lc)IzKCT4qj37Wg zA2)4UNR@!{;lY8Aa_`QaJBudcY3I>bNU)8x%C6 z&lfwOG2b1k$te@?DMy>dHgz;O+?<@5PhyIx90vk)b*CM*cxvO;X%Q((KIrk7IMz{Q z2*_0c4i9{;i0!oZ<7!L^5cV3K?4PukX&PMBVmEn576w zj?1>Al@Ve(&Vh&qJOLBps1~+5Z91WV@;zN9riIB12}0K^YHe8MlbFBZ+gsHv?x$<&+itV51#YlGYN{AeXz$7jk3UXJT<}Pa2pEf zD^1Z>P+l0F2`+g@`qFzlz4Z`qaj?Dl?f;4I_U1sC8N9Qztgb#KYK@9Yu81q`+JP4m z66|W%_?fY!?Y)CV3t6LH*=1L_wr(QUaV1>7$H1lC}P~}jGc-yyH{`zgNq%zxO$`BrYMO(iShtXy{p6Z)uXY5Gf zwn?BOKl0t~@L-PNn9AF51Eg4qAo8f>>tLx>xV$Wsw)PN^(A8C4Ualdk$!sA2z&92a zWYavCbU8r#X&#^(J~#RY*Z|>x*u=n*L($N0x`C0UN36;}>#`rFKlh7>dX*!0)=7t^ zVx$7DVMC(0h2Jumdnu@F=cMDTE+NY7qW)jMAto+kBWv!kA|>l z@Gk07U55SOE})*~&5EoC4>|>5SP6IBdE++dt-_PKfQAt4zeZ19yBeSV!Er@=D zT#gc9aSiSAYJ6JXh@N+RuK%0q4U3!koDN%P5)hndf2|A%JygAnyBtgOii1e@n7gWD zRFdd16FB3ngoj>EjBj9TYRxALyUse+3h_INzSJP^SSLQrDJcGtqAd~s*RxWKgue0w z()p`kmOgk}D$^L2Ph9@?4be9gmWv8SZ7GfmSsLnh{REccHaKfNJ-Gs%WnCMdezvC{ zRGAgMUAd5L=QR^?tyu`p!-kF7848CT0>T)5^aL?kz5{NF>ub5b91~@IEXfo&8X6|5 zV{eAk-pa_Yl_~-yK$b0)K0^VjpocADyF6=Tr`Ft0TDD#ZiU%3`kU_o0V~LgWP2t`4 zp8V$+-Oy7m1qvKm_S4rCBym(I#~wOvwteeI!fErfi}<<#2yj=8DQ%r)CnKYYoQM$v z4=H>cz_v&5711OOV0&Raulp0zZ%j(i^>OYwoc;2h(iA3_o2ZJ?MJtI?JsP`f|F>!k zr<$2*i*PXG|SK9+eD*@WGeFnHzhQ1BI?xROA(+^{=>DqR9qk-%D)H zt0AJz8I$WXZWzH@?hGdcxk5su2QbrdP*nNp|N3v4fBhdL_j89F^f&;e!UTh%Fs4(ath5+fIsK?#r4biH{tNknJ%%K zq=k2n$pKjK>tYYeO}jUTyHW)2qh}JI+32uMG&maT!2}<$ zfNZl2fZhtFf??_&Qr>}y8SnY{`qE%c(5+fi-4oM#Ose;m&Cx#No^cTPw(DdH?AMQn zx#Z0s*c>V)Zp1;WWJ;Xqq(GJR&x+~a19!XmxJL3MZpNfHdb@ad=sVRl)ipGLlIw|I zn+w)MQI8l$RMlsF@xFa)w52{dT6n-rp`g*65~U_&!)R!F>|K4UBd9v^>pcP3xWwF2 z{Ow#n`W2tBCc619`8QJ|6jOTvxxFYtf;n7Q+7iRxSX=1SO(|2HB}Xx;G2|U0o{Cw4 z<6H2L9`>Y(uN)VWVX~h(G0kj9hYPvj3w!T8XPX2uP;TWC)Te1*GY-(v3cLDvkc4sa z>VyD>a@Rw@;^X6IcCp+T%-C91vT1c0LwXxgFfmmxG;3U{bd$^5V<09bL=R)_y~KSb zMGhY-N1*6GzPXl>pl3bzb&;2U)*${d_gyU(VsvrXXSy?7wA>-aqYUyU1jsWgy;O+$ zv?GEcd=z%W(~kT}!CDMx8f2>USGaBdr53(pd!?hUqlkTRiOb2o1KUE$Vxu38Hz}rV zrRyZb&kr#2Oyljb`fkz9YetZzBcmD4PSC-Ea0?H5+_!etZflL=h6$jC8FBC5fN2Vu72Ho0*kNfB4%A9X?O-)CZfXkR%XeTfI>S zD(tgt{J9A(u2J51gDkHH30i;(2mobgSF}HTMwb{QZ$20k?;c9IdgXSY|JV!t1Oy=q zttl%?*Mlk{&y_B~AM%#9_;a##!VwABZiW>f#Tiofnr710A5Q$Qr^7NP;Cv2%ei2B68=B?w5PAVke!xGQTZz=M@ zqNe}D)LVyD6>Z_(gtVk|ij;_SH-dyTNOyO4cc-xFmTsiGB{tpNY`VMQTb^_7{qBGI z_&jV}d#*Xh9PjUahrk?d(-^tZ@e~MN=z@mPy?%6V*2ZjnhIK}cm($>ZK^o1QGYfh| z2=k`GT%-I0FeswcjxYJcXOgbv#eUqqjiW8$A}|F?E@(#q9RcABh(ep_q!=s%Yc|hC z7S!3}Qqa`->ujC5FgF5o-rzCl&K}=q7UkySdl26B$~LNZ72D=#-~b(gd{uU?Y@}EZ zHTLp7kASl_k?sG8x)QK%D>NfP6@h731n`q zJjivPqO1`O*7i}prWLUrI<}eN4$wp+mMgTC?{ax zMD?fbZc?|>Djqf;#nnP#KGMne5BHB~@fZ*iaO1pf6+N5ae<8k5Gq%g8ArvmsfT5r! z%cKugYimdQ^MM#eTFUtH)FX?zYj}r&cx$l!Rf~FlV$$Kp8Q)hevc4l!oZ=)eIC~fp z2%>6xNYq~Ra@4+wzK&}xjWfl0z89stoNK%gL!8V|v2waNNqydwrMV^y$Zfyx`K|Fz zHRL-T-4I>bdBL8@5JG$OMCZA)y=?e>(^f=@zkNZ(EM4thz?7d>o7 zRv2=>M=x~JGeN?%^5o7Bd_H8!nm>^3t{M=&i~CL>vT!ST3KcK2r)VksoTl%Q!lypd zvfg~5VAYDqLvA^nl~zXTg(PcpWet~9<|5(1d0)+S7HevXAV_4550Wu+=hI5GMCO@{ zRfOos-sxD&Ra%<78;N>9=npEv-Ogc#tL|aqrt~wqKVo)gd#{iJwr(S?lR{YoE-dNeK=jLnZ{#Dzc@2NP<66>!w)yEllSjVc+b!VZ~S%54TNZ zJ->b*C9(JTm3@@V>TdYqY)4XR-2KrBwM*Z_WNfHEoT@5@TC`)q3kcW6`;gw$+UV@2k;c}zq?HfGrnltzLN+XccJ>qhpRX?%4l$f-huH20^SiWT022P?_s}d5rRT%*@rH|&JRBbhv zdC13C+Jrmu{HCg-QRl~SQseM&lGmf9{%?8G&7C!w`nz*A{;)$A_OyE-8rW<5c7p_c zIAPYZ5bEQdxb;)KfJ?JbQ);{Dku-M@EF>~)lEKKq4AnSMNfJH+cU{hz&n8Yme#~qT z1E}&JknjHjb(R&$-ER!3N`jz`>Y*NFQnwB6tQ}{tTZWfQ0j?r-Ap$HImg_g>&4c)j z616YK{3EdCt|Sb;EvCLZ>jjIMr>&SWKkUPjM%TSx-L@=AoSm&UE;$FbIb@)D-4LT9 z;<bZ8~K@ua$x#H;Y{-8{#GchF+Dx3Wo;5dG|CxGqzB6PJ_2pIHPSqJHOIBwFq#+)Cku2bShID>Zvf%%kE2XRQEtrNeH`AKg%^g#Q=*1 zYVS4tn;G-F?oCNQX-_;$;&@HsUdyI8jV~Bbv|q+lb$*D-{QN1BPC~r-yP_!2TD3G? zF?uxmRASJNMLpuinjqj7a#LVV%`#@RTdtkJacpmai!oLe=-1KK|C)7uk&^#1X1Uws{fqk%d z4`?BlHTYclb zQxQo-okfYVur%>cQpPsAJP!E0rVy!oukfxogs>m!K84uhhnBb$rhk15@UCXdn)Lefbf%vTxOm1orF2%>!d}=iRwQ->r$z(|mLn#Fw%&Y%Yc)N>rO11|> zaHYxl!{I+z$T{nt6(ka9R>~{3J1ooPvVQs`lNUjmCg+2BJQr7e7pVs!rbW|JPTY8S zyu^x%BW26YsUCbxq-1#c#rdVbO9~1qNC-B|%8Ej*RW;HaMn+^NOl6V^X4cYtZyq5( zTw#4$sTQZ>9Vs07Vq;>m`85$tnwW0y?{9+3ykO1GM{Az37T4Ck1)g($65p*k7nVf#Ci&#%1N)M+Eb|H0`4Ek3T@Q9~`1YbLWGo{F)%r%KJ+|l< z-s=zVMxO9w5$u_h#g4ou3cSkJPx&y}hE}+jOa28#y0O4pEyNkphNZKKanNPLsbhR$ zktvw&7Xv%Nb;JJMcSQS1KTFdx_g1W`U1skQ#9*Y)P>j$@kv{&!py|4Ea(jMI_M2#B z00aOuodDXO$tc~@(C`Y&^6>iV|Mbw&)nCW~yxnedM4G--I9P3+j38fBDrukKS1oCV;`PScjv%n0s(*XM$_X2nM{qmbjU#*a zf&M3hy0Dev^r1J)HWol4m;3S$*YOdfj*W^L2Gb*=M(Q&q);UGN!-r%G`s$zUGl+ub zIhlO#&o6MKJ6axRdWLiq)8N`7M!Q;CpPpfR09F*xvYiMD?t_%r67R>a>hCJ7GV%{1 zV#cxnl(OZqu`gNTHoK#Vfsee0v zJB+-NqC*HMavrdUDi*VO%>ay5^lvUMwo8=Qe+bflrb#l_`!L4k-uYU2SIAceU2 zc!WPR0)T9&c)tRgD`mpExlI&xTMUy6-vys0x(QVbJim?o{bS4zrUs5NJv}UcA$UubS}DDEIK@~b+MuR; zY>2Yr8~|Xma8%DtF-wjQ_E9_l5~m`YyA&NljKBLgecJybDFC(g-=_*JL7?1Z;%J~z zRhgyz`b9(<&HwFD#z6n#HCQ?;SvSALcwu%ml#Pk2XQ&?ulies_JU%1dyw@3CT*XCz zMdlj|E3YpcNEi4e5`negE-F)(@%Idi0XP>Ymp$` zQx=={rl&rz>;8|(g%P%{f4jPm&eSLWX4B_AC;G+fVE(Zn%LPJBLVE-X% z511)@OrK#`o6}l!+(l6h91u5{A9|*MUoU1OH=zx-w zm1AqLx3Rkqf!+joTd0kninTe^oScm#^v7N=A{|oy#Q^~<5x7SJto3*4*Je+6q}|%a zM#hoHO@R6l7aJhwgp3X|swhl9be9zu6u|PJDFNEp@8Z6`CtQ_Vp^aRF_rP_vm=C+7 z<`R)fM_3W9CsV7fW4_@Vz`@Xq`vFvs9N`VuHtC@Bv|qc*=8UG?;h!OeR`253k6euG}a`0*HYech(l!jqQT8wt8l> zzrT6B`5_{L!j=qlpEELUZ%`ZRU0<}6po(kjZ;;a)bjZmByxeXq_97NeP9hDf{hC&gO+Z3v1$RUykX`w2Jen zG2TC5QKR2o^!s|g_((~HRuF9-wR0@lx10W}e(LI0B)kt~n480cp$X)2DG3 z-C3cr#M9lKwcl6$AL0=w3;c7c$L#$ady1D~ZBhPLeV^)6l+@?z>*y+9M5%AErTcT% zX#xXYR#u8Bu#+r^z`L<0R6{MJN=%k5tbh`E=ZhD&i=To3C%&dPjHnF-;2t`bTP8av zi>aYSok9640F3F5IH59#LL8ip0M<;7YXK#h zo)I5DY3bkqpS!RW0vw(I#(CimNM*^;eE*nRA0280L_Exb**Vi3bY8EKUJCC*Q%eB& zN58$En3{N%lE&(VH9+>$KrnV z0w4Q1JJ=O8NLN*ON^l|~^AZ0tSb8k}r_P}{ROV4}$+(oN>ZDSF>T23)dq1mP6C3gF z$&FXr5fRfvtt!bYxs8+@A#k<3^UTAFmsVF7rJ_>)3#si*oIseIoouHUqmgFd11 z0(1ZQ`GP4kw~)kl$SQDC`A=3AvZ>|pr*?$?D{T^q2`%1m{L7WC%vvOE&W*2CtAk8bP=tPSE zgd}5IOGpSVqVMxP5?Xkq+$R01i%s0r!~$~l%;S5c==ef9sIbhe4*xNq<;WMFg&g(g3} zy$#T+9a32 zamwl_#~mJ8aIz{}8XA%#C6`nQy4%o3+_jC3ga!R&;~8FC^Ek{_SX7@35rfCrff(`f z-QQtw=ARwW#D{?{CornYM~Yk0-p4?TD{9QG zbrZhCzL_=SpmoxVh1U2}(C~`=0&fpv!TbzRFFj=A7OlcxZ*C+@J=akcSPrW__o;EL zha>)E;FMMl!@z4GTS4grSb%zWbj+iolpfhLY;u`t)|VBAh1 zy6U?G0GynF*apM`)$32{3|Uxw72WZZZyfDi1Dd?dAj9?m@ZOs2ei{*;(|RwtjMR<% zRUo5h7iwpcjaC!hgp>p76|o?G512YOBv4T}p}sC9;!BKw<%dv_nO*=H+~i2*(LlMh zvzBTps7R%hnd|zS)AYrkkiAxG8*gjKh}OcacKc_bi!6e?o4#lpsP$ya0#?gMDT6Vn zt3FWkn|k6{LTEA2ipu~SE9BMg$fu&urNy%dw;}TZOk?e|xq6bKUJfrB?f(G*H=O|% ziW0)h%cG@lYDy)O9BAl&1qgnSQX^#&61OE(>(MJ72S&rohdy{ZBFDjro}uyzitHgs z}jPrxgN=DBiDF91Tv#gr?%0rqI16y|WH_;DAM_xZ3 z4s3)JX{m7&OQN05VMpq{hL}GS6maLS7%F;qQiZZMZ=|Q;Cum>kZ zL26c?9n`yv<3XA^|Ipw7l~cevWk4uY*^X*sk8( zlGco8_l^aY-0R+63ZQrN83QYC=U|A=qGSHj=AStAP%7PVokPpEf}-=bAwNEHTs&GK zaGw>}*u;kE{p_Fmn}299;`o^1Pkn7r?DKTJ>^JJW8`lTz?@QCmC6(mUYm;KKIs~i_ zJ&Lg3xw#gd?r;l@gJ73wDB-q~L}f&#|Bm1j#=M?J(WPWi6%j)=*R)csP4(f{R_@KP zhgIg`w|c@o=}tAZepdm1kVyT)IU6L;@ZvSX#Ny@92aqVmW`)7l9i{<<& zZZ5a?fX&@lv>rn)c4kn15PHzdRv)m>K^tsp4Z2X#vlA1VQ5o0ge2j(U%NLe^>N*)4 zjxF4sV3U$yrl9cBOn1!8YzD4~yM;&cN>)}-89bDKYdbimS9+ABGyKCzSmuo^4-OA@ zcKVkb=zq6MNxttELQ_W8W8zo;fQLuYyFcS(tq-6g%f-Z?*^Fwjo@JFpVS6C||*QPm45L!py| zu&-f0dRgX?p@mik#Z{AY!9PjDrE01C5Y^V@eAJ1mCaHS!4e3XRR2-Z)Ew!q_rXqy2 z_V(@K4&)RA{7BR1{dl%IQ?b6MZV-IuXXJY=Ws%;&5qXiwOl=G}a;Rm$Q?UB)(bYv2 zEk^=wI6v!z`c8x|NP+M}axswP! ze+kkEu40C{?A=yymTAZgRF=||waO68kBYg0qb4I}2#>mj2fPE-;d1W*V!4$R$WluS z3h6tCgJFk~*Sm%rdv|JWegfsEq+~*rzJ$o~@c0PdglRQD!v>XHT5<#(dUuEZO~Om~ zkOaxZ?YotfRA@mW?4MJ>A35}{ElUTw>u`cyC{#qij)y-+U0**nGmvP;%R+-gQtRh3 zV)cT{PEEiCw4<>yNp@xB<-9WBQFnGXr374rhaE9k6M*$j0#42#SFi9fGv~{A8D9OO^7#)L!y4GS1SHX12`4EQ0O< zNY~nitSo9Dc;u@z6Uftz`%78r_8evB216aDc-4UXFbtU-BN+|X!E6H^6vP(@Z{YqR z!7};h7Dw8r{$!|jG6o>%J~~3+_F-=OftVXM93ur3`Q&6Dc2HpJZw3_6=*+i8?VpKg zrzfM(cFEXOTd+6RH?S~nhBijD;;!Y#oM3t4517m@Fst1I0h7;;N7f< zSs#`_41>_<^RP)}C6>7g-hi2R-vtiNL$3-1q8}q0LkYhKl6NW?SK$q=*48g6HDvsV z@Qa8Hgks*>10Z-9$L*TLu1{zr-Q-43>0wHeGKZ#%l^f!4qu0-rpmp4W3bgu9RUbjy zp;x25_6p1`*<~n~Lo7HYz7v$8p<4YAjMokI54&<}P)p6I+=*cFcPrl8qWCt-Gqcb$ zg2`aKH96r?!{A>Tb5>BD2OtHdc1bH2GchhMfb)>M2ilLww(ebYLMKi*=<{;@TM^q& zoGtQ7E>av-8D$lKV|IfkHU!RE)vtv_>y2XuDfUK1UPbg20I8crCxvzgQO-wxDR(); zkRiL;da^mhlosR)5cCOCNlfnmr)y=5ur!)dXUFo5I`GwOw($yR`L|7Y_mh~qCFbbu z7=yFDOrbk}C);~5g|txw?zF}IicHBEQw(@TV<2@BMYSG*OU-yR4mqP~>$#1Y3j=Sq zYRh9c`f>$WsXoK3?6Z^;)oDZH%Suajeu8EaHCM+W6%yM9TON&9={X22C+6iD3e;i% z4UsMmKo!cLpXJ@J*KK1x%SVm)a?91@y@ShKwF|nj5DF8~awn z0}vAJyDolK)kx4PT~x31*xVc%+Ra}Dbd@x63!iG}#;@%!ec5$110nBnD)uNc{KNog z*{x$u()a3Vwj}8jsnW+hJUxfF<+{8lGF4r#Mjl$1&^S^OV5LTeP2DzzD$Jw<;o-iM zk2I^9!ENKOpvunq_Zhawr=Ow3N6gLw+wL~!&qs(txK5c&-E zwwmQnM@Nbec5P_~dAG;Eeh(WNuzOnDatYGV@Cioo5pc0$#q5{ zVlKFD3YhHLB#6+2c!_!t*IobCBiggWiBCy(DA?@mC3nFLMfj>%a@C#$2=bx5p$%?w zN;;klCYOE?y>FhE^_jA6AyTCu><9CJeEkl-!va~$Oto^4o0iTR|2rT4HLKp2gxikT zqw$$~lk?patGcZ`Exsl|5>gc>r;e39f652A$LK2u!*8`Lc~McQ?#UlEWHU!m8Rst* zS<`MxN((V@ccW9EYg|=S<;J_aL(*W|4gi*`VZf8XamnGe!LUR+DF=+i!Yy=g`pSfc zgnZ%Wnr$KXx@Ek+B24njT}FGU^OgP;qW%Qfpedos(8>4(cs(0i8`1G*XIE+XKQ)0`wf5 z2!QU{$3q(}7Fn;iZb^N80u39?7SjJ0Tg^H0*U$QAvF+plB`cpV`~ZrrBN8M6!=Dra z)Z*acvbdjnZbLN*l=&%K2TaJseKuyLU)|2nxU+`6+ibtq47YQD#_Ndx0Tu%_y5Q zJ=8S-B)ZY(bvt0W{OWF;&&GqIOUTq*md?-6-;2OU+OM+TGkzgmzL7|VYU9fQnpT$t z)I}ELA&G;%SouCP0s{wrld)k|;OMIm!-*&Ni3z5KLcHePp{sTm6m#b zh9xSj%~Lc0kT3u!`iD7SWr}Oc|4O;bKb6Vf!|HBLGOiV!MngC)CY1&SB!ay5=49S| zD=zO_E49$M3hGZSk@gYoE>=`shx`LaDe|^;!@=Kj0-;_ISsfVw*y78#v`V|pvzAJKm5RF`xe_loV@BnAZIXbXL-%zD>G{=dY4i9Oeg8F&*HGy6A^J47{!-`PX zW(qh_X@;+jxP;r!#`^B6g4B*36sx#k(iT3y&*(B6NCeP=MB?mtCMaMC@>d*9)<{qy za~*wLMEs+wfy4E{UH2(s3=e-6-xAS|D7z7mMsaB8dVL0cIAx@Vp0I~=@+8j3m711a zg1{B}Gc?!(g@t?SWYqt5&I_R1H{M3~yaS{=s^@xPOOI1FyID$eef|PX*8ehKU6jfL zcL-e$um*Mv?+J}52=%ND>{I6Un~B{u8QF3gMJ^*rp=ZFrP*R>w1k-0 zFIC(8g7mB0@~mp&CPV*@XMuVp`sWt9b7Z^sTxnMHY;(~rR2whW^STi_T>+kL41P?~ zXtv0+eD57hhQ0ttW*2oVU*2WzL#g*gFE$xyd-8q$58B@bTkrouE+f7q&6xmQ;Q^X$ zxh&_;U&_|Lf`H(z1-r}#m{!k6e+O3=m+liXC~f$H)vJdrAh`m{40s~Y?3)*bHodCa zKN&wsikqQIpKc!bqEdI}>M0!@A4bRg*!bB!t29x$-kR_d3zbJnxpR3Ld9Mg$!(leUHk~glXkB-= z{S1{`EO|M7dxn?6iy?y&>(hC$+k5h| zle|v*AN`(o9JAC#r5qW?zU@{`eacKPv9%fLZlD7Q-xhcxSA@z@2;i5p!PJ>Cd=R$! z593wsdarB?xIQ%cb^v!0dTe|^T5UA_CCADz6qHbsR9mpC!*oXm_}i@Vq6vKenQD=n z+}L44d%;aI)5E@%JAl`5T)Ew}klC04F8yexhvW1MUd559kZZsn_)DG3Owl+#4Bz_D z?VUT`y4*L3^($Gsvcr9->bG{KVS`LyoqVAv!oWWDZ+|GL#!?&saDk#KH#gYt(RnPF zp8)+d)mR5dp;6JoZ2Xvru7&3i*in&Vd5GaY$Lv}Dr0<6w2E5O~`VO3&o>rP;o_&Q! z47D@>Ve+o<-S!qc!^}>diLRO4+FV?$2v-O(aCY5$bb9r9wpt!eU1)@ zLCLC=-bkS2BxUFiHdbvp@M$TFK)TS!#+b?<5@y&j8ah7r&C(qWuNikW^5v2l+HI)O z6~CSU$G&KHCAnES(O9rZNa%oDtsAxJz2e;5McSb0_?*3jfg+C+^Z6E&+A;A87yPc- zg~+RpoGY2uefFLv^ID6HhZ8SZXH zPVv(GPcIi9)R|F5`49)dfdPeMahL|$o~`2ew?->}lSUAx0nJJZ-WR+ONW%^kUEy4z zY<3iy?OiID8aI5)W=UQOSXDN(t%rYUkFIKg)vO~A7m@hU9{FoxbU4F`cwjorOY2Rw zteXZGPX>|xDOLWM1$%IqO;TEn4-+;5gcf^z|)+raN!qu8BX!qa}vs|FgGz~5zuY+o?4$trTQ|K z;;H893~YzV@3EO7i8&d7Qvqq6iaQA_ElXXwn^m;ek&o!GCWx3OREK*!jep4YHagEYl2}b6>;zUqmUsVrH-!axt8;OUw{0jgNsON(M7AL{ zU#TkFaniPtvbFeQNKGy?SD{6Xafm8K-}EN)2I%Jv9sJ+`-?1{gc9*$O*vUy|enJ#L zhQ0dh^Zgo2_$jJs3ZtOa>jKx++cl_|Z72Yc!{v$!>J%R0@Ny4r93WkVKS$xI+<1q- z>npCVuVnzG8Cwlx4J84mK*Y$=OJM*YI^FHHwJ3Y_n>@XJ9X{TQz_#71goKE^H;gI? zbB9U)>+@#-;ApCBa;Y4QYAbHauyFqu855_Q0{*7kcFf+$7JT*wRG-@3?P)F7DDyN3 z&m0`=FeZL-5v1asH9Uze0`BJSSbsj9w_(eS^$ufRVgqdD<;MBY7L1N`0mwtbl73hBO&_hGeAz*a zjP<~F52H;<{SI&l_(zUpT7L&zR|YwH5)Q^ddIkw<1zX0bK|q0s~0=hli;~Hw=~#B=6#;a3|hy>#tHCs z0`rRg&IJ(BQ-WYwL%+LAPP%)>^{&4AI6(0R`=KvMi`6aP8TDFdTM>rQ&|zXA-MTQT zf4?;!2uS$#2L3ESjV_G@Pp$jRbn}B++;9nyQ1)f~8$}d;D2x1*lG5a5>A~~(3veN3 z-R)cig)l)9lEXdeHYO$xyWoeFBph0Lm2kFN*CF-gQx%s)-SKT-9@($*059wDLTa>Y%0PR4aj&H|=Rqne%~&nsA7$Cvp9*^B*G#0Itdr6;#6QW^PVwFmK;3&`X2 zsU@WOHXlW^NUIQlzXqe8LC9_P>PW$pwtr|LK;MS2sNITeJaL*FXgHDMc-Xl?p2eIB zs?0qb&^;AGF)Q${sXXN?&s+clheKZro$5Z0v*yge({PDvy9kqol`V!X(s$*3{mmT= zK}#~Zk5>gWs8u?5C}I^SPPz3eL6f6_q!!AE1i>jQ6a6dvJ(?3Pq7uQJ!7W&kzmT=H zxiB<~bT77`QtzytbQ)r5oX^H)i%87yI6A!fbUO}1V>#9ZvbrEuE|0+9Ua*#NN}({a zvO1cXki!C6vd3=TbwP$%9|+;LhtC&loxh1-f94bH?es>m^Z9K)#0~+X&&bID0UNLp zJrkK}TZiQ3RpjtLpcky`Z9iqJcD{6+1W5b*=6|@Gil2E$7_FS0+%coAo0e7lvFaaz znQLR0exGjOplK_v?YK?UNz3V0z*#KMsir%#f+1C{5j&qxML*q0lb=;?9)5~E1c>fP7 z1Ke8v2Wj=CJhQw&4}d%4fq(f=q}%`DxBd&E{l_8kpXjX1ZPx#$Xg$CMEm??A#ArC0 z&Hc6yr6wixFgyJ{8CpmN1;qrV=l2gK`bRJQ7s~n1A0KQ@E(c=gv-sR!j~63vZjy$N3EiLb6%U(`S0y8s3CRSJT+S?7wpPs71eZomev)VlG{QqAv30Sr3c*Fk- zFZ;KI{}b=^KduV+z<>V%eFuZq%RJ_X*xFO%Y{mJBdmweIXTKh=8-wNTh}L;0sJ6R1 zeG1RkSEWE@P=?-6*jqzDs&ny@Lf0pH-CI5VtU%WjHG{~Dj&a7eA!TIj0O}w2JpuUj zQO?|Wd^wo!T)cLjoF0vw4&B@?&CH(l?5wJMjf!0NmH*uazXOxSLEKrLrOz-xq!OQo zLgJ-a{RyxtdZ!Pf!z9JvF;$Qkr0QzqB7^OV#LZ|^2T`Rew{q3OUuH>J zpGdy~R@?ono`&_(dD)sRdQ!kRlWqtVtf(20WDjJ1^IZHxeY5$IVJ3j{ia8EP?j{Yd zbyPGofI2!*@?tzZR4k8l?`~far3IQ6GZhnA+E&H?Z#bH75^xoLdvXOo_K%dMt}L$M z#w*;oSz|Ci09OSaSy`<35g_~TENqx-d4W_Af73FCpO|>%O+l za?7(w$wJy}b)q;_jXJz0ocXB*PtK~MrKaR(f-bjjy?>VnoK59wwad?#`S`OBU<<=L zUJ8OCgghE+-3&k<(V7Czt}^av7O#JaN0UGu-y4-WIU%7yrvpthnX$Wd_D52NgS*(2 zv9!;d+s963>tpvLW8&9)tM59>^q=VOLDFlNIhaH8>h^4mDAfGa8(gPq=@_;z35_q^jcgJI9@@RGnkxyJt09dnm!_oV`e59!&LIekcXPx zo+J>psAHO3RImy#Ekd^85{{^&t~@-zH>w(y_;SPPGfjc}024FM~Ylq}Gh1%BquW6Fc$d7{ZZ5U@tjAR~KOJTdwuCQ*834 z^Oljwj;XsU@K>XyZ3ZP)1I68zD3OukRGf3)xtp1T-ih7joq>bfM>6yV1JsM_`YV&_IA6NJ&YcEw%A)0F%1} z|9=t7XBvacJI(F4?Do5j(ogDu_iMU+o!?OS9pzpIC5j}Ly!xV&QHvbH3SLPBXKE3=7J~4sq+8Shj#VEt1$OPLbgpxnc@A`2 zJ&l@1K+f40Yy_rqD3NSP_&!l`>>M`fJw4WgMzm8SKyvn{LxK>|H>>U_--+?HN>cqI<_>PnZ8(C+n6`jyMFM61}y(y7#Pw&n`(F@ z#f78RjHVRqZ5^^Q*~zAQ6c;Zn)97VYmSlCfJB=&>$>8AptgLB)j&A@nr9Yf|y4K40 ziTt*|u;K1ZFlTK7d;sZ;0cJl>Bqhb|Z|*R!cd=1^-58qXDWI&tRHnjkupSm0aOlsnV$uPn8me{SLV}{d5+rbLA9`*VIb> z`Y`;VCL^Fnsrsm3v-<^hC)@e5tX+A~@xds#@I_^}DbNM}Kr^zOhw+H(P5IOo0a{eh)9p7U_&d6DrK8vsF}PyLGUq?8zrL3XZgx zdI|6rwJ`Y>AB7%?EW6nHt?|OzFi^R;t;i|P!K2ov^Q4iLv9&m3F zLxII3EtLgb;E~PP4u|P(>;OX}2r(M&uV*j8nQdm{XfF>YpkgK0KJx29n>#jH2!wm5 z^#rdeXLpyQVJyqWfQiqdH=;s4d}kFQsgHiNLQ*8kb}+Y21l$8orYVdUPL0J?td)-RQC$X=#>ZBFNEZKvrRgay;kk3ivhn6Bem=r(JX{OugYOZz?L8-xk#Q1lb#14l_jJUT(yF$mJMmlTV_o(Ry98L~A4~#ny zg-NN=ujO>5EV0g{?~zb~3^JDdpE$rQNNOy z^sCjEXsg2d#Ael83=6sYjn8sU^b@;{^E-n_grW0g>=w2^)!eqO9xy)N8j31E2>Ud- zak4z!dn6_l+O80XYWvQC(}x{RMrKZUU5u=c9n2iXBzsP}A7g)nUj2CpPC|a5d)|n$ z*m$wqm91`Jqyo?UJseHU0ya>~O89&vX{d~Au9xZer!P@Q5;IBSxr#0Tk(CUmaGQ4c?&rc9^CpXi>bcK%M1KO$ zftg)i9Mom)+a(d7Y?LHv#1#}Qlk|Hc ze?n?yt^V_+d?|VgrWcneU31NAk|(^xM*TzML~rYFCR0&Fk5GR&b6Un%9&suod#EVO zcvC)05A+Ht_2|-&z98xo8MAh!2#MIfHGn8Ra%{kq!q*PwT-z6VU+NUhR< zF>_ys8m^vxE%P<%YdP;(qZto3pVs;emiwjVm6z~yTSlS5f9x&k5AFmW z)p@glO_FS9hrx#S=)COY@uOj1j=>*Ge+ogpjS92Qt@DhUjW9*4v-47vnLd-j#!Ak; zS$`n`C%Z1UCN8&`=t`!f1G$G1EnH9ZC@U%T1cm%kQe*?cxpPG{U&FO|3>!$Dw37_2 z%&qr!(-g8gp7w1lO-)_jg1xKcif7-!iIvCBOfh2xWd6*qctjaqK*ENm`WmTAUS_?y zkyG9<+!H&Swa-?X+32hghjAIP!VlNln4Z4q*6jY}ZE(xzEJ`dM6dweq%r1%Y-NHP^ zVkx{Tl#@eRqjqTIuSM)#v9o>E#MiUkWSVSf3g#zS zW#6mJ>1uM`T;d54{u6pS^J!ON$0k+3cQ-MKqrqU&G%h*1o&VKvrNz*BB+Zyhn^b`G z)4@#hmb&9^)ep5vmrsIwLRhZ|3$9G&S~Q$YwL)^Hu3&~(p><$-`bvH4Rxqe>t@O=; zrty!1QoqorI_D@ugZURP!SXT{TPCKO0Bmpy+-XPTiwL`8Pc?@bShp=B&lu{Y$3geaFTIrvSI@Z6#HAMq&$Hf#I9=)vf%R9- z3BrZrtJbZ$-rh_frK+{mD;|ff-h`SZTAYiF$FyFy^2`l?sDE+i)ubL6F&&!=Y>}dI zwR7-bnqp9-Pz_OETmbt60eTgmO|RAQlE|-6Uc8JHhhpx>dECcNM;DUA!*@y(H;Gil zyHhvE?-)7A&GV~JJ5zW+Z10TUoyrg?-INP{$wK{$Zm)7_!W~|~Vmsa>TbVZH^;x_8 zmJO%0ROyfAC>VI?@6l)UZ=5XS)Pj?i7kPwcicTR_OG|Zi@9XMO+lf~}Du2J~Yy{@> zTh0Od#_#p}YEqA>>x+WV1GnVqP7YzNc5Z$n#M#*Vu36+OZeL{4$dgN?R2jO@UeAX) z*l9S~>eZTW$F2OOUhv@W!;BFh8lv2)SA1)+WY^Yo*}_X0)FD;;`&yDIW1mcQDQE4Cw!6131lAS_} z+rgw2N_HAsd_|nrA{G&&z^i@yl!(psx+%5{U@BepvP$URVBpukaxE$RAw)aPK{IH6 z1*+4Rp;0~9st~J2&g=j3CDvHKZ+35ZCxu(u^XIL}0Yu&`ZpOY!{aI88O@#uftSGB& zY-EgrH%|SUw|`8GKt)QHWX|bQUE}Jg%8Sn*czZ`JBK4ocW%DlcH(R#bRv)iJu_Wp( zN`Ht)J6+aizwV!38r%`nzchu}Ra;mZ0}+#7P3QYjfr=^a(ZiBe)0Znd(zS3CheVwp{1$n z87!P=S}2shSiFYXK2d(^^xT^DNlWxl3V-U;1T-cx02W^&CKuM!s1O{GVc=r52!Exq zUEhIhQGv#;GevzAmTBa~_D0yTFJJ@rNHX}U<=u+8T$K6xLS$uW-rxqn*2ly{bgZ`P z)(T^%Yjsp;EtOH`7K`hShlscwG!->}Y80sHFYiz_aVaysmT&7>z>|yatB;?XJx+xS z&L5u8moJX86G4<9j0bg^bx_*I_KtIHr%L%6X?ZBkfGGWkaW~;+g`Q7U!N38*Je)+U zyP}Yqj5Ofsbi1v!11F1;|4_`$?Zey`srC2T*@|kto+TXg_L>7s7P0uTu~qpPpxPKK zccC37Nz?gLd)r{Ujn1V)dX*F>bcT+q0L0szmo6o=V9<V;>=1 zaisFnO=81`L&Nz0(e~C+QFd+n@NEKuAR-_VO30{`fCxh>Au2F{bW3;5(5ccOpK%<=dG4cUv%zw5g@l|F zlu{8ekJE&G;!j0vf zZc*IJ&xDEo9#jHRr14Zj{OtF|Uui|3CdPPk13?p@p+sxumS%`qLo954dWl^nsVyrj zq=uICxw)QU_U~2FX_l-f@y9R5JYo!1mXlc}@0Q#GVp>iLV&XP9@Q3Nd6Ll6V9o2W`Y%E_!*aWJFubv+yZvQ;=_`JN z-*8uKN@)CvF<#+-pq4^wwYueupoCv&*0oi|?e{&o!xiSCTxpn$tgWAM5#cJnc??C_ z*^*QN#Mcf9^>B99_wOYwzWrGhCD}}{fBJN<5JGcM@0Z1Jv-4< zWjAF{KO0XN4j8hnvi^kI{C)@K3ekA@T9Sig2?H`L!!K1LZE6fEL6u6Lce85c=-Xma zQ}YEeRK>f4>+1PSn3dk=(i3P%)}DB}ymKC1yr~xH?c@~wRg;Ara6pHE`T%o_x{nQ3 z%2KJVEa9-+HNg2Oi#i?iQ*qMAf3qmpvO*`UHesoW@nPG+Kl?uGdxV$*T;}oR0RV5D zMlZ4Bt|3Z@rkBZT5;b`Y3K1RsC_xM7Z_@nsd8+mTp0RG)?;?#1&4cca+hq@N)HxNK z9UBXFo!~wjZ)Gy@Ia?_Z#|xH07c`)_iK_hvlT@xnP0MIx4JZz7OPXK&TGES_*PTh! z*YAX?*0>+#-M!vYbf*WHWl&O_iUcQ(J%*_GNs8lL=Rm@QHQJ{Scd7MCs*~?Evrk!m zsdgXA8lbK{^xM^dLNhWHPlmihu2+&MKW8VAq(gt-`E0S_^D)L1!Iq1XZ|&*5@mgRO z9DwuBsof{P?aqd|_*Gi}Q-kC07+@ zwosy7jcPf5+{iC@jDe{op`YYT+dn6@4k<5p(>HtVVi22dO)7l2gnscg=T~(ii}J2P zCCHj$Hxk@yow(&_siEQFR?(|8%pQG(o5#mnz+Ey3R`#lUJ|lz)>!+=s1j%@|pc9|- z{@K?eE|SVcjJ6cTWAnM?g_@_VFFMfNPq-TKw*hou zn89}x{rI8GkeOrTYLSCOshwSXBf5(xT1P}X{qx9=Cxhd^Uv0~*wmlcLhmeGZ+HKk> z7!hkyEejhh>0mJJgSiEEcJJsoMEiF6Wgt@?PbKmKMIJp$9QQVo?LoH)1-Bt?Q`6;% zOs!6u4saKgBXlPeY_S6Au}a%FggcbP%Ez^Z0+7~3q4l1`#y5bJ0)+d&V}8xU zA9JNN<-TgxXu|I>*Y%2s*TxxYLb}?f7*z5nm7ut!URo|@2g`#yC{6ELsnnyOFKZ|o zOPbXdd+et@wl`~q_3Yf z{q-jvppS0}74uXNI{a7DKuh;9KRB6!kLj|ph19!1?3|z10{gUEvf~xJ;!^vUbGDyv zIdPKK95udqON@$#o%RXfyu$YmZnAV~Wkl$$-e1I{rnDBvS*GPV!O3QpwynsxvxQuF z+rQ6@c``38#W7iG2<0KghCseQw;VjvTz!mz$SPUoTboeOR!K7(8d;v^ASJ!8`T1Ra ztWUFsin_|K?9oC-FW^ilPFvS>-;aS~|3@^2#VgWhqOIU5Yjq7AyAn@Ro7)>VTcc;c zdC=3bqCYvlbUS-v9rcx4r4B3C+>biOoL;%^VgwPcA)-ohF^*lvW2t)&hmfd|8tCah zREd+Ne6)b1{`$4$VNO_P)t+TzNtIylhq=}PDN7WM;X5a3|5#-HMD@EgW~LU=to)D; zb(K!Y5HHu**P^#ZUOy;5%NSNX>%CQ`E3xl$JLbnz8~VzB$YPeWr6AL(*xV2L`7G8b zPALxKBZ@7+3eRPWWZctkAFo`p>mcQUh&W5~6pG~YyD!7?Qmo^Uv2=gfn9`Ys&Z)ev6#(-T$*g%JW!Bp!XnB-eHh=pECTi zV~-xXL~=F1p3?LfSb-^(qz1?oq$jFVy28Pm%8In(ZatndHqo zs3{?o9NXy;km!dhy^_e6Cp6n`uFFN@aRmGR{eHsmHQ-Bee}AIgg~L7 zT`o*^>KWYd?$x8i4qrA6m5#w)5zoT6OdY&WgH=g;MdTdj%qDyrO_%~Q=VM{o+A#zK z;xUY&0#=h|H`Hf2CR;vzxVf-&Z=-$e#x@6kQG4&GGCwZHPX>TOvlW7=^h1#u34$H3 z-;_HhZM~DlHJ4<4JQ-}$Ohrzu<_*P~7s%>5{(%J^#358}Sy-<2Nb(IS9qN_;8I3U; zP}s{P;P4fo$4HW780kzc=6}?Bv6&Me|Lqx40M|aK3^9jDN=Y94eC;lVE>+Y(2;7H+ zQYM}%3x^{qmC^}3g?SW}M-u+b15IovFhyG$`a49@`?Mp(Z`iZm@RpT^hq^^Q%V5r4 z?VP|T>3TA5_TD0I9nw~D&i-4rbj zz9Q@D>Se}H%UyJ&h*l8QJ{|s<(LJaUY$K2VMEpl}op=X&26Xw6`~WBc!J{~YE#FO0 z+v=!-W{;4wVZFbVo?!3WB6%-XgTC%-YmMC+oChLVVk`OGLY3Do`BEDjbC?QdU4FjD zqCvqCJ2-P)OH6@=lo-#KrsANHq>@KMFl$zZuWn_5KM=xW`m6A?mAP`)49>Tsi%s3}9Do)Hj#krKSCI ztc4~y8VxZ@Pm&VOLq?~sDhlaSSG~eb9$ZvoDI0JTsYpXw58t*l(ewDhf3g}`Br~SBC9%SN%G)x-Jplo_E?n!cKlVra9! zE(DbhJ|h5!mw0>bCDO)2T~ERFR!V8jtoc4h+ccfK(O}(CDPA)1vQ}=a_VnXW{?zodw=-ow;K`T^e&-W1QCOkq znIOJZPP%n+uKo}GAs5`~=45ROjGcY9gGl+g!=|O_=xeyz^ph_Zt2Fmw;S$wp$RJyL zMl!jH|R&lSSq?zeGU95vAA1O$RLojuCbx)f3fuC-xyNcTmUg z8?-5{9S6ofj3LrzF+q%*sLKzd{ysa z#~iOjYisB?L{lxsRY0qt!~C?;QZdO$v1t{y&=;X3&cCH|My0SIN_u+Vb8g5++#joh z-TKuP6}79&Vx!+V!1dFIo43?z1o`mGAqidYxSUerYzoM$K#cXAI7@BEWShSIa_RS+ z*g&L+Q%_X2d2UTH<2uLAFVuvl%XQ*V0mp~g%zeXc^Jk|iLi(k7j;+aiRl)V>ZS~p? zH!J{4mlk8%pkuQV<82%h-fThOI-o@9v0rRg0zx zuGMDaWn6q3*Dh0s&8|z0)3s#v7ffIJ8F)8F-mfk4^|)cn9INv8l!dCtb3Pw0haSqz zWup{Gx~yo(HjM6Es{35LuxvbJ6ug4@<6FhUvk(|kEm!?fhTFvBK3S#fp;?6!dZs)x z-M6hVCE9Fe9CeQ~LP&nGPR)6@FNgwiV>thSDa@#RE9Y8ORC1mm{U7a+g@sTZi|oca zg}P4)ID-Z8sjY}8r+K9^H_0icnVq0KeaE;KndS1KaqiJ1w@m!sGTSdDsH_q#M8D2* zdNff!l@){zW^VmhQt{3Ucet}F5w}w#++$ZmJaow7knV7gNA_Cfld@;E)I5=!hw#vO zy!13Dl_!b+)Hr>=%DZ%DTXu^q-mBbM@?PESHj2_(S<6#SWZhNemJNM(fovV$q*HF% z_RIFN!;th*?gZCjcu#-RSgG~+-B&8l1Ry%C4UsG=yE|-YvzVu0-36~LsBc#?SePP$VouANq|n#k`D(-GeP+Fc1gq5`{9eIN)u*ws9x)b)W}C z8{~pxa#1#)IZk%Z7$9fzpRnF;*|MpgWRSCY`Wn^=YqjaJ!xzUp$D1d0w`!FbW90hl zCbVz^uv3|O42*pqc_s!U-sO2#>MIsFfDJTr?2-V`zty@&!ODO+8JLXw&D!#+pt;k- z$Gb0H_JBkh(L=jT*u4?a=41^&tYb! zb63Yy#^jF*VK`wli9X3s_MMw>8!QoVz%6So2nf@lsN*W{%sNNISOFZS%jxtJ>{NDf zaLN`-4w|hv#u>D-q)2N>99e7#zpfo4K(c)JdO&Bm*A`a-l!`xKM_u zbEY$N4x`fs&ZMQEDYV@Z5=yU!g{snVKXpo|TlGFid+p=nZ;7_be!!|wi_Fdr(TJ=Z*tWR}}yJzrWDf z=}jG-r#GjDA56XeIsX#;q3`@1NS$sp$&WRTW%lpqFGqnPfR_VKK~|CC8jk(2iwMJ81%2|3IumqMro1)C;kEk4 zzIJdjg|XPt>*GTJw_oVw{^UVIG9`Nb?m=IAmmJIv97D;tQm(WD8rc@)8+t}M191yAh)m|Pg%bmx>bD6 zuX{&ZV;>oVswqs}#WqIPa8wz-LuWSR)oPErG!xTV5yVh;)gB$p9g@k0=nkOAuB77F zZ(300o!>?PO2I|bijmRLDuER&H-kIQ_7f{W65;F3mZTdFN04z>%||)RU;rSjr`}$* zzftldID}T%>7zaoXQ6u@5b-8?F8Dl3)!60{VmL_vaL<#d19GibVYm* zo;7_XekWlcgRfKt2VLK6nD~kxhD?Gv)0o!GRND8jaSKcwT`#eS8jU*y`E5r z;RICj*hkFoENKvRSNa-RmQj;Vot5H^2wrw06d;5z7w5*ue@ba+WFDY=V)VOrn~;RR zyHrG1mf?nG6}L7MTY%P$k6n2k{Nq}SWvt!Z<2UBc*WbArq3;_+TTfIzjHlWE^I5GD zDc~$;1;4Q!WG^^7O0%7oGmrV znx|SwsEr<41IdfAX@_;CHbj})*DQ?tv30g;$0Jz|sJl38*_3Jhy2G8dpYZk$7Xuck zy(-hob|8fDevj9}>NC@hEt|KF6H=+$*d<^UYbE32ZR?%JC@r)tU048Ae39ZufiJx7wUIq0*27F3yki z-w(mNsb^NJkUW$uAtDw{MHQ%%z(x~Nf|NaiEfKrp=_N|7wvJq_c%U0ngxUV`X!;)g zuuw|gNx5S(FZ_8Y1ae{Eyrn%M)|Td!Fpssvn^4Dx&#koVR`1PVfcWdcGA#t$loj4w zwYW#To_yHFxpoyKAMWs`MzV5V)YcK41b;tds=yggaj|oD_Pf)b1f*(8O2(Ee_2xSh zD4Ic`zrZ=5j;Vlh%OfsRBNmyrgt-*%>D-I}1QCPM?8%-1Ac(FTMFIU%rEi+QpP$rJ z9t|sEU&kNS+1smgm*RsGX}+}?RAmSsD)I9P_QeF?RqG6wM(4N}eoM;G2m&<502tYS zSJ?>KON=2;lgfpU>vjn|(hduP`YU4XLDB4gtYk)G`Sk}SA^Dl6PoI_6di-H7rKPJi zG|=1LoM~l(O#(ZXVm#{UaH}2Ij=|pN{PtOt?Ik6_f1>_OFVZhmVpiMtw{Fhz9InH( zRl|S#{{lqEEq!_0`wcbwpc5 zs13_MU=D+$pj?_wB@r+A#UA5xYleSz1o9n?$TlYzZmKFTanNlzL zdCTvwxzS3+(ZGgZIFp!Cn3dt57ErZ=kR*8IE)y+ePfFk7Vc|==hej6L$G*b%8A@$!i5 zwHF_kf#5XW%|-wup&*vnRmn2^VjMPAbU^;s-NIn4KkTuEW1FKuA~pWC7v03`^-40a z*5gEdJMN__HSP=E(?YZt9tn@g^JntVeC;}l{8vnUzt97pM#m!^#UQ9PEt<9XDi&h; zObeY#R7ry<$wrw9Ead2O`c%}d+HVV{y4j7*nQ;*~OwI%l=A@Sq|>e`4gr>08ji zM!d&T?=dB~c+iNlzv_?68(?^xZM0!sYzIJb(RVE;6p3)deaMFX4#-x0=x$D#hYb;@Yj%$z!p zh>&dRu-^{Ohj4PktX3ShT38q&6%yI-npIMBBtEC6AWMP}{quJP%C5oJ+a_ac2q|zT z9o*vGyd~p9VT|qL@;}6;8ZWmAS=YX?`Q6)zm&;JA_sz~$yr49pFr+phDn#CG)VJ7L z$=y3;V5xZi_XeMPSclg|6hg*jiK_lK-3=o0^VlgLpV8eidNgZN8w%~=^)lew&Z^o~ z{!{*jtzq}X+ND`$nQHA;Un`H;*jh7pKFp+fALI@2V(sB_x908jK8jAQbGHsGqqH%k zWi22s;ymbLo{M~XW~y+-#-?)B@P zv;q!pfmPio>rx2!0!!zM3pH$qHMhO-?_PxM?k^Zb#T?UE$8|k9!&wvT5;JNF8o|#8 zrtltFl(1JD(M_$RbVu(}MK!gRX-vRGl6+=rJwvwn^2UVg)5v6sBfnR#a%XQ!fk^Hm z1Oy|Ps&UQF_xvXb5LYe^-@d)hAtsrMHOK~nLGrXXq>=3WTUhGF+5xnP_@yL z%^&a&m~Bqc6e#A;=ajtGy z%*gr#9_hPx*mnxsg<;{guerxSs#R(^CVBpWqL66v){*FqHL|BuKN$oW4#m43lh(D0 zH2!RTD>c^IHzr~>XBJbpxGB%HM6K@27F6lxytu)KYY3OjkT#st5hhu<&}-<8A1_gj z00tbn(g9p%$;TaA)NyYr3uocVXK4#fP4{>2`X*~!A;>(fs!O=WLRaS_fQjiffP_Ch zqTJTpq4RV()&-D&t+&W)UOhhJlb?XVqEr<9*n;nPe)wv_QIGE0K?Q4+&}9;iyYJ7@ z-QBmbnc%gAl_G4!77RNo8^M=);^?WlrS@ z2K_PM-Fch<7WZ3->}0Ju(1(J!Eh~%PiIS;0UuTy))^j=xC}!?5GUZ}SeC|{@SEkui zkB+{&KlQ+A>Ewvy8H%P8R3us$KKK#qwRh`%`M6Wvv~^(>V^b=)hku$k!HN!bM137c z`&m!;GSqw9YJ#ABCXtjyk6!M6v+ryN8*Q$oRuKYAkCBr(C;&Zzmd?$6#;fK83xlW6 zOC*de7~aXB`g(tN=4W2a6?EFP`BH-q;RUIaPF-eN=_U7DIkST1bVd0(1pzTy^ONKC zVokuYlsXV52vS8>A?)_Van8C5`#h1s)(D=S0R(!F;h zU?E~+*{Y;e5W(%u@OK7cEtf8b3KK@n;S#_5-ojE9?{wD*xH>$wmpsgY9wMbxV|`&B zoA04k&6ATKi;7;&V0f)3AG78F@z@=zS4O6FzNKRV_I==k0l|60QBc1j*aaP0g0;Jt?!eoqxy| z8}uh6g$vw=fe=2KH;aJacg+np%9 zUUZAuyN_-AJJN(yX&3q2aTOnKaZw?se#GFqBZar5@%XMBaLvqUKOehW| z;3&_WqhvXRUAzj2r{VB~+9oii1%giNqE6yJY;Hdch%0@0xrG*~$d8+68{56fHaEZ4 zqL^4i(G>+cYv`*9i`}?1*vG5F4}AyJSoF$G;p<%-5jXfX+F!J;VO&Yig?9r%0a|{Y zA?h8}aq8hRr<|89-_Nh&;NrAz76n>=XHfIw0}P+!9zuoLny4N?_A3iLyXwSv_;TGLxKudj3a_>kA5^R=iu+xS0^QPdNl z8#{tt5kodsSDOqw+F4jw%v}IJ-v3PKq&r12D?~}EJ)p9(v+(Go&W~hBtNdGKez>K{ z;ym7fVBUg&Bb}T!Pdp;R*NT>js>ppW$BgT_g=VqAU4dgNqmcTU-)687ndvd>$?68> z&F#HCg=DT_xA)Urinw21EqEl#xUDk9oCIe6Jlym?j)k#{Z>>+bay3lmXlCSx zHP|j7841`=3>0_!tj#w{Z54`QkquN>5}JFpsi)ibXl~O_1u?KXF2h1lqtNoyb!p0M z%QaN&7lPD&5NxWebFP16LD6JY7-=O-e~L9(xyyJZ3aH0NhAW@&YTl~_X2dL$IE1c; z(>(Q)3kQ+njWuy_>n5F#y8^aK?1TL)Z2xd{%|5iAGBjPw`AmSXey>pQ)jIn_9vNms z!-b@v?<2AR29TY+>y6A0nlgBA@Niqu{g5cGe}MO-WX0fgUg+#UG=Naof?0;&zVv6Ln|!PeSNE z+Q4@R#jo!$%JH3}DXl;s^H5Sr0Y8Gu%v=fXuVu~;_3+mX0Pq@!Y7c#*!o;`<{ThQc z2IAcqU_0?yS$SkHtMzP`VZ>U1h^dW-a04Fw!Oh?tNUTCGz#X^+43yK75%k{oU3Gxu zQ2LY46O`r}R5Jdm_}gnTT?gCwSCFd`d==Q>5b(`k63q_4t}$tXlM}s$(ve=ret~Zd zdO@!GCvd+X<%Vtk(D00>tR)Nn;%L4@!~bI{;~Q_>bqaq{PrR7#z8jNuT_e#Xu98HD zw7`r)DsB44(IhmF$Y35gto;mTcbE3z!`*b)&3Jwud@q1Su0PpuD%%)kP z+gw}6r%!KZFz{2Nox2|FEB|m)Zslv&ypl{Q+;W0-%5(m?c9xvc*{N-J|G^j;6nC^= z*RbH{YbEUREYK_ziqn|EgdxJI$X`$b5hXr7X2=d3JL(JKSv^XwE1%5=Y20TN&0yNf z%08A=RkDHfRY1e3imF7K!#5_cMEtX*@aj580R9bPmG%l#1eaaUaKG}^8Tc#a=kQP) z!5lN#SE?bj`1P3Q)!H=(rLB*81daS_zx=4JUi@kSe@XDC&o*cLTR&*uemflP z`cF$Tk)Fv(F;Anju;(cQhDNIz)Kz)#LGIJl)>vxn{b`Z4@l#g(fe##7xu$AH?7_#B z1}-KC28gu@AA56U_$6XNzKlZ*1x9)C87nQ+=g_0_Qk-0@YF?HZsu2ym6Zj{``kaG3 z56n+i)^pp__I3?%+H(Qs@j!C&JzG*dynO$cyQQUc@|=w+Ux2HUFvKv~tmfr!%!H^{#1E@(p(i+l#gV)?y`3y6P_eV48V?+ zph9;`270(p1kR1tQ|J?yV9h37(aV5&e8#%yB57Pk1fs1B2MyQs_-ZX>Z6V3_7s6K1 z3Z!I9j=kMp#2ZTXtj++ZCOs{8B=$I7NZ^t2C_cwPUzyX{siT_4&K-yJHCmM~kdYu8 z_(7et%tVYZV$Y3}f$cFnyBH4pt@~-gKET$e+R&2CldcL=-GY(L58`Q_l>D3+YA`R% z$x13L!H&GMV=-H~C!)~+M7%aQgLe*{9wl#Hig+XcMCD|f%Dh3hxALi~I7;*3hUJ`% zjplVt*rchm$)Hg2oz`&vgSE*T$@e|U5HKdjMjC!a#OC|RXF%UDOxifq|D(ZPcNED7 zWhZ++Rh*8WJl5Zzx`Y|lva&LL)l7fqQ5xzIiiX_EVzsU9iLhHa1??qUG@Y>9=ikE| z&nd5r`ir>yAoWvIRSmX??NfepYR7n*wo2e1 zM#DD5S7GhI{EsH;94z+e{isCZ3-2GiCALeQmP`<23jKaogoPo5yI8 z#{xj>12MDPSpvXt|D?}3#U?I2r{%vfS))SiOIWZbj?=005NL9#b>6lbKe-XyvioKG zRkPvhqe=6q%)Q_B!=B1@vZ=y+ziknLi03lw?B^4`h?!c^@_(e}wnloHfctmn2nTZ7 zbc_0V7jMC>Q1)aO5ctwZ5yKKX^CmUEyqmU;g`L`9NZ$&`$vta&vIZL?Y&o(_WB-&= z4B1g)e(5{M7z|bk@j`Lpw7jbbw7REvl*&&KEM^dU&$-swj;<`nl`^Hy-g;kewv7gL z9n4mv*U2SK3*JIob27i3djMwzL|jQOA;tUA8PXoC4D;Lf?VCywAKoua5BBu%^sLu* zqBS%^osX`zGIPGsm+MRwaW0~iWYV7WR}K&R`b>66QKRK9JcNQl$mYvEVb?tx_eTI~ z7jh2*ax{4^hZ8S;+%r!RoH(rW%=IFV00*PUUR9i3uQ^iqO{74M_zZcxCdKkp&`qkZ ztsvS{(TGl%MxJ{Hl9IAm+KQ^r0-`lgtCH!w1Yl&4xo!@)%1bH56(ys$7dV(>qPE?s z8`8;k{jff43Jaa6D!v$zL7^b(TLY)IC>kEx{S!ezn}9qWyRnWD-&`F*ymqqCbd&8` zS|@|3Z!+2Qgwy8tNZa)>$7>||h;+!I zGV}k1LAi*m{$j?W=Lsek3UxeEynw9U{~ET`49sz}yAR{PT+Hz|81c)eWp)wwYrQ1} zow>52@QzRza?jTM$FDPr=fUyj6=h>Q&r5`9oS#LW3!}Rd>-glC8~hj_E&G|X8FvxG zw)CaXjIOY=KRydA(}DQ_5{{Uh9E{;&Ps{$nfHZklV9CbMpS%!!3y|_?Po9D-{0>zw zchSwyIpaddzgcNuDB+axJrD?zx5v;ZC0ry5n*~%Scc!r5%{D#E{MLxS1aPb?h`4#poMfCqD{IV^;Us*tT z_lP(C={7Hl29J;bP;m*9k#sB^l2UAJZGA?9!Mr~hT+6gL;3c`K!VPk}@;5pQ7!$$d zxoKqEK51SwNUFwwTn7FR zjfcmwVt((!+85e>>(f(Zo<0+b|yjbvfw1Df|rue$1l))z zc7r}uC@z3m~DuXP#Wq78aKX4``L-3eW1UQBRjyX|B&YF^{?3&FKKbr z{pJ(N=t5Dy(zxz+@+q83h?w)&byx_|qZ@N6IyMU-%T;@ek*nzObUS!F5>Vf)-jd>7 zJzOv5OIDuOKcy@`YNO)w2m)=ltkG=%PU7HWs{e&1bB@&*m0-HDgWW3wh{gSdwr-`8 z+W>(|X7r-F^!XkYSc&5ICD+1QI&4mwW$GlPz^<3?itI7(2P#9RRjGK{_*WXPynt}l z!&grhe3mm=wg3LjA{ag?s!;ceL#yq;UezLQ~J)@E-AQIvX@EHwtsBTjEcba6vfS=f4>IOMJ z`od2$8fCiX*+a}fU3HZis6X5nO`ILF{`5_|A~}nkiR!YZvi40vpE_Nts`Zuoa&c+I zK3=WAel!s|a1-LSR?At*TAzi4us2#uO@c&<;f8l+a(sj2TZ!vVwC_j>PRQ`E26lIN zemQ&HO7fMIV(~_%P-B7PZ3N;**Wiw^k+{g9L(hYiaq`8Cj7a!XDpykr3({V8NEyD( z6LCp>159{Q_%1+Yx=Uix^%*)}fFKH#*u&(9dtc8qgAFK-R{dZEs*ilW1DVxN(WVb| zSa4T9AmRXFSNf66(99@(9y41MxE+Hkz7HBmP-p+t5l+Yxe74BR&O1uYPYIHhWIWFG zxv+2d7uLxBDcj#v|4bJMSJYg>#6Fy=bjPzKV7rkC@GS-ij4$fSr>H<=3Ju_JR(`%Y zdb+o8S2I7n5DI;qX!!}8-g(sa1x4^$4 z2;IHJ=UiQ28|ZNrkQ`(&Tgs5bi0jCqg^cAaJ08oh$x#;uVb+!P8v-yKaL9qT8#6e@smVVCF-(6BFx_ht8~puYB56Kf+mnWF zJS^;405T=h|Fyot7%0B{yn-7ny3stxNs08YZ%Z-;qldXdBQF` z<>lbKnx5Ox#S>kNN_$Y+8RK*19r@`o&Dg9?VQjRcjn*+UE68SQ0I%)uy}nGX-WD)& zzuBnC+dJ<=68@iibhX#sC?Md_E*c89z;`l~XU~kU--Cjl4Xi3k0|a#vzEQG$5(U$1 zWDl}_aJh5m$Y_sYn7G~^LjTd7x)zdI&mpWg;i z%bR$bZyk-K2`_Bi;B|H&=-c^-Whj!&?E(Fk#k&^-(R4tuk^9dtn<(Z4i5@D(p@c-v-re# zyV)M7?M+*I(LIk3o<4`0>&^|2x~w+n+@FztE&WL(#ZB>nh3WUZ(#khC^8MX;jf6LC z{P+C|alP<8I8YBPVcweu>Vyrdjn19RJK@6V)GIoxboR{+@Tx zqx7PDt+K7xg=VE+JYT3bsKx*~?83om#UD>pIZkz>x%Ujj0x>YK6CS4<;B)QI2hJ># z=*x1MnR>b%wE;;?x1bX$GMJEtoEWQX@frcDC=bR!VxWLH8Z0GNBQ~I`XN@Y1R?6o6 zriv>PU&6#ahoq$cVJT;0Mjb3NeB($zD<(;(xax+_Q` zFHW~Z8Rg9$4GU2M9_6Y@?$=eJ3MB9Ik~Tbg3CSyw5ekM(k8WTCI^^*^A#ai_}bb$&r47R@aAFJ3rKg3B4o`4?~V^SOWu%IA_T zcsLFnx=#bi+dkaWE0mu@i0=JF_VfTqeUbV27A%B13Q$cK#6@EK(f<8KYV{`&dN+!a zg{${N1V8y@&wca}bmQZ4hQ{jL`$9~xka#Q;z~|P%pQ0DbF{RM?H0JHGG1UcU%$S~O zLXoYg@G<_25P@6=x=sda<(n@Y81Mnzeki*IpI%JED#;k4ALZs$t4sTc3dC>^$!$w1 znY|~2de%-)>&`_$E`(0!;EALoJgk^Q$D?KYDEWDwfY1ms2FQsQ^1JcRdfE$lSyW`F z7=TSI%(R?I;y8L_eELz$j3oO%a@GYEmCy?0FpjV7Gc?hOJ5bY zH(89Gzpv&Y_Y8HsJAD7{h4|!uF>e>s0XY{({dE%r@tP(;ffaUt6x~!K{U3JguW02Q zdH|xQ3s&>O26kaET?sjE4eN_9D0Pkb|79M!-4UeE|KuZx83R^+Epo z7f_!Dd+fQlO7(YC@Yyy+=KmXp%w0 z`~m{O9Pw9teIva7;6Gmo(gy_dlwxyFFM**=4WWI)+IjPAW^epWKUOhhrZ^?hR!2hy z`g3L5`D`}Agx5_fzG|=wuS5Bpk(_j%v!wJ>UdzjSrmFpS!plO-;~G&9g-0IGhlL7= z{^yR``?f)P;kxspovDdZ5)h0|T4|~NJqjKP%o^i5v#oJJm4zn#!uhbyrEwdWSdRDd zeQ?uxGkBh&o#?6I@^Xl5LvorwmiWsPc1t$~dX-M5{~3|kT&#MY(flXML?>9QV=^f7 z09Urh$S_&6qz20}VQ9ch0Y8d+jB;aOi$=6Z8nHX=21I+iiNwajq#KfJ@ts-FaZ;n@ zqcqqz-sdttupqJAHzQ@g&%u9dwpH|Ywak&zp9#vy2=x_Y*v1@tgqKAs+Cl||^TH5e zf0qVj51fa4C<1||7Of>?V}sNw$y-{c>(sjKat!ILDZf*&<)KawJ2Rh_cC^0<)&;${ z8zn@=tRgLjWlnQxA#sk4{_JjUZhEbfyt{j})nxTihdJM_fP}LrIu6#?3^kwAnFfH< z|AbN@>cZAW}5&m4Zypll(|@V-qM1%8^`Eams>+GP&SYd5!u`AqzrG|?tc80>6@O}rFSix zmRBr}k8vw!pTaKgzqEWiPlubP2m~W=S>Xg7Vlp0QH9m$sGe228Pnx~m!eeBa7M?kX zLe7*2h3v`Gga0m@HuY0-4_K?n&G=)8KyugQhhvez^DX6V1XLEuDJf?|P}S4F9I`0) zxhbHAoU1VCBM_nZ_-=T0EQEv{>Q!g zL8C=bED6n@>Uibb^$}XC2GRsU9fxm{Hbm;d<~BCr|@%q|9cVLm51j~f$RSF zBL8z;(SI-Uzpwl6MgDu;<8EbSBx+&3;x!x1qeq9!mr3qFj+|q~lDv5%Q{}SD&p~ye z)&yhXCcQPEmq&NCu8IB^J*gh9Id~?Y-NtcL8$y{6x?$mib8IsOdhK_lU0siy2hy%I zG?alP1WTg%_QHGM$M`Cfk=Gc3n6AQQf6~42?me|C*8|!oPjGjg_Y<Oq+WsOjFm z$;zPI$ndHUO?i0zBoz~xEq^C})Nw&h-qu7F)4Lg2?(lbJ!%RWr3=l}z?BIv`3r~!x z*lZSj3|CT9BcBD4H!hKiACTi9K@Fu9Sg(27ZTPWkqwY+&0?C0TQLED>%pZN0lvf*Y zaZ7J;ouH1Lh5`V~e=ds2u5vJTIlB59BBJUf-U!^pm266O&Dd7-RIR%Pz<%|ktjt$9 zwR!$p-gBTQQ^45)R_poVE2#a=q6}n5X+p=w8-M3jC#!d$!$<1dNOcoJ2%->sbK75f z{#r*MP4Wy!0!1xgSLh z1^w%Y@lnT8sOq%RU){rpp(3XcWfF37Q0@K(B4VGV(kS9_d^K;f4*@=TVE(T%_ zVL9xv0OI_OGFG%ZSUjH#P)JkdHx>0Azz-mO)&@I&wn<7Hbh`$?{-^)=HhO?e0bDYE z5o&0;lALaR2^y+Jes+4Y(TfJ6fDiqqD|Z2i*~W?B$L%bD{N8%1Ha9D)!O&fx+4Jm3 z=X~!13;C=p7VygW)Rg!TPprWX7_}20)}L~=}p;_F`N7&rbP2Ry5ct|89%_y;J_(ZvU^H^6z&0aqmAn<-glP zS?vGVZvVY*(m>dKAHZ}@mD}$Bj%jZRC3*1vQntUre>P*7=f|V{#Geg48U2?T!W;i* zd!PLXBfL^)XL>MF9PN3$C32PZy;7qmg3b8v8-Xi9gPg4iAF$Vqv6=pNQs$-{ZWI39 z_Fy_*TaA~qylRECJ$Tg~9{hI#Fp0&nV`cXf_-tVacFu-;vIHSlsQmVe+g$NbM9kmC zjqOsq=@So{0-o}MzkK;x`yXqB_+5TCN;f|h}!B_pcT!t$8*EWHr z@PD;U!!FLZ|NWf*e+(hGz5m~31FY$P4eWod>3^;CnfMAI3fZpweKds9ouh)CKmR^J zfbu`TfS;$L+oSz}ykpM!8Bx&$LBmE4FaJ;R1MNK(*3WT@OkGRB|WZTbKdKG8G-E z`$DG{KlDH2+Ofq>nEoO9oW3qCqNsRzU`K=I(|JForsgKl>ne7JuZ5GVpuMAX{Vc53T+)6+AS zXaSjyRo2}2Ec4~LQh=pgzsfey$GcC0zp`@w#qXHfVj$Bsq;+vUI=K?vrZm8QPh&b! zNy+{%noZ675Y*~by%r7C2P)r?gv|Z=pOuHqq|WCOhU4Ec9`QGs*a$=EXx*Pkv9M+D z>=6LDX$UYh%L6Q_$g};rvnF4}526A}R-&oO;FQ;swNh4bp3`z~%|;z5;qtQan;$ls1ltX~qZb;Gr_ zHD9Z}Y1!F{_LDj@_9bQrzf;Ym2b`PQJ?W~_JW@hXgbpm{Ra>BbEzvi=KC64A=ji)t z5CD8-rS|XDG+GWors-d2w{&By59febeUb42-N`jZvN)MIB=B3#KYr-de!M0~v!yE05q>TMvlElc&RG?d zzr*#OjAnOfQW&6hp!*%D5dQZwb!R8}{-FU{Wq@tvcUDu2^q-20Bov`+C%GTe zS~0uG@lCJp?DU8Up;AB@FS{lAQNVG%bFkNQYj)1j5euY?wjZ!Ro5(XWa+3b{mmwk0 zx|AC6^3fwEH5XHzvwy~^MaQ~_KZODKsF}4!q0|6kW6zG zOylpG3O&cRLM!XUe>mR-!vRBKczo7;%f(`2k$ut=I6HblwIvLwdxP&b2kR;l`NpG) zr+%Ro*4;sEC=dYmq5(Vf0NapZ`#}%%@Nfju6aWn9YuJ7On-!8MTg&EbJlmYB%BSkY zWTDn?_f;AO0i7i-9tSTM@&G#aX2dszoiJ4SI_Qw`n`Z989#}aLI2uyD)e4B=V?2|r!)&l1M0)Dkv0USNrY+fZhdtQBe8^H!%7=|mpK`qJ>>qNk7~@s+ z^Jk^X>smymgplZs=f`Jb0wnp5iW;ZR2>&1U-ZCnVwrLklAdmznKyW9xyE`PfySux4 za0@!PySuwfaM$1r!EGS8oX+z;-`U?j`|Q8_*JiP1dUa3ty1TpXx~s0bs>*KjWuxns z$83tn&MYG{b7dr&3tIdg0;$AXrhpW*d=d#5Xp)lMl)11HeKN`jIO>Q9GKbhTa7Nlm z*j1N%=4x7qZNN0^-E+qIrSf{4ic2}pp3;(5b3UO!Vg{ZZit7zczwO2ikJsDblQ0kk zIr(<@n<*rzq$(t&E+N1zWQf}kNGXXrF# za(WC6EuIM}J6ll@^3Muds=ME<=l1`Zv1VO1ZVOhHDOFBNOti9hv>uFxfeAjR2g)|c zP=uC`W#X~(FSM9&PLwdAC640g*h9=}FU?z>Mc!n|c$(z!WM&v(g&1IQdn{#WQyy&i zyeD>`g3jg(MYj)yW8Z*<#UZwfi%SV@NY@9u zP{cm}+6)kg#{qI3AFqfgOW@06Sh0}+a1UmX1styjQc~0v_BWnOuvyHGv9Tl=l*@il z++OlsJp8fZ<)>}Zs{Lu(nxbd2{2{R24algRF^ycgA|W9(w|CTL(2P`3h^Dcb8(HG9 z9SRip@d=#&&c`p18{iH0J`a$Cql@wQd|SLAa7Om;ofOFdb!T*6tjl3`DbldgQ-p+q z-6QGE-T$OGDCutrYYdV%%q^^=!STs%qS*3|&1-UUae9Nv;BqTWKRXr5+PTOg0kOMs zfsGHvi!3RgXHR0KNXmG_4h~o5>+Z{taSbPX!4ppBmaac*gJ1kQito32^Ql5uqNJsx zic`^d0?ObHJ|*T z?+4AN($d2gihgmdEuoQVbJc3+__>i({^X;wB1m0Po#Jnwz+YkMBiWQ81_xlxoJPe6Skl_vEl!vrXDwTiV{?>UVY8v$!{vP2uzBPxJP+ zTid1f;-XXc9mMLF#}%MRJhOKP1_!5V>s}z`b}yR({4Xb04C8dBB9n!c_0kiVbWO*7 z2Ko7fdffy?itd*?CPtt`X#RWj{k|y8otlb{4&fJv9PQDRT2C6a%E`&e-lFMgT!@Tf z2of&6?YSY3*IHBz|I54N8n^QoTL(zK?w|mItPRUYIm<@?j!(#)MuBIY) zjiciYp6hNWM6VD~*B3>CjZ$Du{rmjE{SJ-{)ud^`+V2*eS4JWurSR}M3JMF|mck_^ zB@LSP8Qyj5JLq?agdlOSG>1h+l~+_qe*4x?lfmM={Gqf|#}&e6wG@-hD52}fLGsDQ z)on8^EiL+HR{^RxBu`CQS(0%0HZX)2aO*to7+2?BSFVqyIG_HMD$ z`(Cp42?!IOa4!5@UUtVB?`UW^+0RDqT@Vqj?(POr09Geb8G0>NYLkaUbVFM5`ZQbp z#FWjocBb3wB2TW5b2Cl|AyD1*Hq(3e3GZHML?YYpuiOBxHa`jlGJN}zW_MsfU)Dxaxc+NOF!ZtE6B4bnt(badZ`>M0%V^|tkq_r3z|hjn|9_`5q% zZ87_AC2cXgEA{HifI2DZxQJxv-uS&uRjI0?;&**XVK#Xu5ok|zGf8i|&f{uwbI`yi z3$sq&)^-RMdf8*Nr+VLnk;i!EFwxJmKr?~G?hO)7Asbh=xP({XI;P z>F+)Q7G~zCAJPN@9ua#fDQ4=vFT5ig8{6&vf#OjFPCH<#``+8rM+-h+Kd`;4(0? zbz-bz_~Chy|U7OVQ7CFyaY{C z<85pf*Z+g|?lj&am9oR3R(P)<)a~Wq*KLEAwyfsCeaG4<#5*H*ggPIamnIdD*`q=wlXT2I^A`2HrVc4QP5MzcJIbE2>3_6P+ZGt$ zgit@Mn-c#eq-;_U6T7XV+Yx5(eoIfUk#ge#dNcCO+jj280JNIWWJ8Uk1SBLR?2D0N z`DysK{!+MHjMOg4Je-Es8@qayLmg(595gGN?|Twh0|Gw~jo-dlp%MDXX!ILd zapDRS>g9P*Efk4R$f{T-`y(w5>vFcaTLZ+>Zezebm3LoHvo+~)Un{o zpFYhf(r$jN`t-FY?io38NUS_sA@mzVMttowqQiR zv<!-R= zSdzZUc6rpp8)HCdj~ZMZ?c;82;82)(_5)mD)3k%)9S(M%IJQ*F5k>#vr zwTf^jW#)dUb>?o+n6+Mc6>UJkZ*?G*?xza?<;$9yCS6bat5`H}5vUii8&lQ2Ue3HJ zozgQo8I8*yuE}S0?g%7&uT1E*Jr&K#MeyaK;|;OjHD%kceI1Lr5d|!?!UVY7;a{p< zPU`_3;?@{vm6IdC@Y|s%hE+@2)hDEFYL7FIuLh|rei?`-bsQ5U=ANl{9jV#!lgK!) z>hWqc^|4wt2JiIMCS_ga^@)!uSWuoMfTV=!VQZ~3veCeLf7ea%;)agUpr_}|j@rva zVFeV-1UQzL3W;i>8 z&r5dodP@kMdU$Y9N)|~;3?EOlY;JXAkKEdp=`mEpbSFy6nj1jm8mP#BYkbYXi$MTZ zvn1r&A)~%rkO?M9uQXbcnJ~0DKYn9Yog-j43pXbw+pC2~i=3#axJx^=8NL2@t z=#rtarmpPRaW)5oS{jm!3U$2scX|1Uv2T-byvI$yjDmKZ?v-ET;$zqG*7GcPcBT7en#%{Jw7t<`5{Sm+7*#0b`ZRXGoehEO4{yIUAKTHB|%O0U{I_x>G8o`_{9=q&(EQjeQ?$ zYK)<$2ng3&xjNqSWJyRc6ntJ>SZHr)LnL6f2A43oe@Yeb+nzS)FLWTMmi7H(iQ*d6 z*^Qfm?um~mPAW4ygrzg!p! zWL|}$onOEE=Y%Jl5$~EVw1Wk0YL|SPw?xEmQl_2=TA_kb(z7YL(O~c~3&8Y%SuX8R3zh zQyFFv2IVb@-uBLq#$eg3eDhdj{N!$k#9t%TNR1UJna2mL+J%+PdGgmuPAKp*K7f4^ zc~Su~0yGo^lR*>x0g_m*7=GGuFD_0#8+#6D`~n&K8NkvL{m{XhT93f+} zT&*dg#=plk3>#oy8k%ZP!$7|nG|KE4g-qajYiiO@x$lAg^IxL~ND1)*_5=KUZq6st zbyi&*OL%S)yJJ3TC1v2b3CeA5$;Etxey^c5m6#0P$JEE{u73ffS4WnE`@XU~(X@Y# z{#DVIi<(ZLxK@Y4&$HWvY~(a&bdsB^t`8{FPp-9E@Y9?TKh4v5iN_DAdy%=AJKA3V zxZUjK7esnsK&p()-2dDb(cv;N7wGj_Cc2# zF*P_$rRdVgpZ7>b}(Z;Jn-ZEd!RN`d^bGkPB?gO7sZb|&8( zevGUC>yJ;xizi@g?9@P5%4NaunL(^-&WD1?{g55deue+KvI!bD0G#S<{ zwI6O8?`;Ua4vs`_F1qQ&doff{moGGXSh_-_ibqWmC4w!w!^)%Js$FZR20dmNYuVIh z@(xN+Tplwu1puvsF=BacB?4sOaB9NRsR3xK0oG*jve3?sVy%&jOJy6}au6I7(};=5 z!ub1?2sjfF5v6Qvdo z>3;d$?&r=tid$l4n3H#Q`w*OL|yN5?aHW~bLJPkReYXi!nHne)KN z=0^Dysd%)wl|kQJ(G)r;sTs&_UR!o-S}@D@^S5l#WpRSPzl{PC;k1_kt0dOX=lOD% zLV6Y4fGx)q|F-}}g+@Dpn*4Ac24dw=7>G0%lX_9ZL?ls!UfFqcB<}mJNn}xzbZpqVS}IM}hT14ib^T=1j2r`% zZ?mT6EUTUH5FCqGJ7zhvK&#{d7@_|l8gvYCgAMnm0RWJBl^${??_k#lVk-|l2S}2v z1;=LectDsX-{q}NX@vsE9NReFSsC+}pN|yu{KOO#YPPHP`jkHJ-P9=S*rqs2=v!h7 zFuO;)r|Wln14W9@pq=s6f^e5Rn~`i#l zp>Acldq=Zpv|)c;fCmj=WSQCnW5;2p#9xDbuP|Syw@LNIEJd%im!hfHUCZuI&K*^*3N>fK^n@$<@sgHVydb|8cz!T_`X$={?6( z0)*iJi|fC9`+OJ*%s_SYh=7(BWp~a1mc+_K&{bintyzL z;JQV-rB!)iZcg@6_fCU8)P%H)8#4Z2cZgc>pt5=m& zc)w(T`T>#!KrOH}?d>a+ozwz4;)MhS1wFUSxI7??0oM6O>Y}VKDXn*3frZbt@P**^ zNuAAX0yZq#kEM$Blx)2oZEiZ4*W#$V& zqq5wpcB4mZxHL57qR&NY)vjj{rc_%4-ibA@sh6c{JuA-WAWnVnzN5sn&pTss zAdBQ{JRzh0eRe48K#ACg5CtQ0-EIf?F*FLfP%~LJ_D)AOta3)~4>pE|iu3*EK)wg4 z_(^_wdHI6@QoBccLBmNg^w*-P8uVd{ddDOZuj$xY;8oGT(?;rWH;LFDHyW0Ud_b|I zISxjRLnaUvGZNy3Dd7Qbn8^8g?LHDPUK%pH2Mlj`c~$l24)vajCu%-)<6km=!GLsI z4|3PS)5GOO7lnjwHr6%<`bI*IEWe!KBa@aeJb*4!h}<9*w1WiM*+Yl8;-YJEo^fmQ z^Q@*P;C+eih;=uQ`!>6k-1=;0dN>Yhj`MX)*@eZ$C_Fw?%)V^Df9_ew2~t<*SiSD` zH6~M8QIYz3VQp5`Spy)!3mt9c<^3L%TB4=hHy|cvk|;wK2u%Yl%+hjN^oOGb6b0Yw zWvV-_&qqhcp$NDDp_D~|05h3U)edf6bKOBXW9?OYt9^kMMim57s^N87%$O^F7Hbub z3j{LZEFBc&Z4X67LXRWQ41rhcnT*B;oSl8wK2%Esi0{p*09g`%v|i5V)MrEHifdb- zXJ7f>@S?!L=r#{B#_(um*t8f#DZr1s)y!A`L}Ej^tL z4_KZH-?Hcf!VjRg>OGBk+}_$JVLxzKnAq8cw3WYoODO>!a?pCPSN@*)(8lxo+!YH8 z?1$Z`zW#GyB@g@gULZx&fS3))o{_np`iFsoBK!?A!@FO6={+(5@d$&`-VnS`aPVJv zM*Z#rm>7GgiQ9R-y&M@C%{^*1)~5-hIDbbd#Sq)K9Sj=gjSLiSwoMNKjb?UKRA^JD zviI-o6k4HJCopJtXm^p0YiQ3`HrLT<(sSJhe;-@sxY$Vq>goZrDFkWBZfPW4x3g~- zVb%WR&Vu9iwC#!N-$6OAjqL4??EU=H*wXS&QB7X`TJ~#t+Q0yih6=-=w9!evvb=0= zX$xJfqNb4v0$M2MX?p_gFlyXSJt;oax9yg2a?R^hBqggM5Ioo-j9+6Xxhuw6{s#XJ z_qBEbT0=0YInL+h8M0P1fc^VUD5ka~z(UFm^nRmLhPw`hhCv-~FiD>M z-u@G@2fQXE(anTGY!INuWlG5nlJysZLYBX z9FFAbBHQJzfKi_X05V<>Bdbs~5 z_>g7tkJkPMSPE+$Pb;eM`s;v#I>zS^3G}nWzI!%}nUb3`RaaM^3{2aR7xwv8QPDdR z84E>A> zYMOE|H18_RFyVhf3vI8xg+)bE%=Ospefr>o@DTBO&svc8#O_vi_SGF>cguC)masin zT6J?%Q*MX0hN|j%elL}MUf1kjc2~hyf9%C24xrnds`7lt6a(8ybl{eJC0#NAP`VP%}_b}wepefuMl~L4GpRB zJ;NgvZ~2fve}AC>lN?p4rQ^`%{d+v%;X(ZLDWE^xy&15g|D_@+PYWY+d5! rH75 zYZcFWPIy`X@$EnSQ52FH5eAp0$5D!N-v2j`?dN&tyu@S`K-30``qju1pgL@NP5JUX zCjQ(er646CykI~FMpfClI+D!yF|&gd+uh`RDcR=${5(5ilr@Mg$3n3%_y%3S5;mz{W&duRr|p4V%sioIX|DOGA|8Adm@ zd2#L8-mb08E06>!7*l+n3C4GWXYOj>iQMbHZr@9+YM^i+m2VO7M1BAe9?xU_!7A`KQZNsm}tu)E>zt)OC0^V3wrnO|G zq;iG4{M&`R3YNM zht@Y9S=UH}KOAnBJhGwVJ|6e>`@)I!`e*wAV4aV543Eu5;k}#2Y@{=l28Ij=&Y_L+wt z5yPdct>e85f?bxoV!YCZ`hGIOEr-A@qFi;ca-#kM#bK}BhU#PYKCi;*FPg4hJ3Jo^ zm4Ko=M1?`PQ%;X>2R1D5S}aaliS*_bP3En`wl>_YG3P=J;K4}N#H1XQC{d+GfD%A% z8rDHZdDkX6%-J#Tp4Q6l_k*~nuXBN`wP8AcOTsv#D_2n?{|wt7kUV3GQ6V=7R+3`cMyD8bQo*yZy zA1e=~J!ya7n{M1aG<)1a$@3o^@y~mxCN&>9peT3bl@grct7Qqi`sUnTc~x(+!uP)p z-=CJS(;gJReanMSpxX;+qadz7%b1A9`)6E+zU@7L(eBX> zgt8xVTMGk)6>`E@K zGYL^JG^ zfr!6%i7Y)7awxCYz-Fm+S$EcBoessVR1D}w2LnGrNsEf>9y7T^>^|VppEIpPgr8TS z(k*k%;)>n8=36@cJY{yXzQy@udq7C|=d-m&OvEz_3J!LrIhGVl-U+)Tt@CV@Y7bVWSro9Z4*49A)EZpcUHvKFW4`T5;NY+tMfZ^q(rdIfi_xe_d zVrD#bPqr*{ST=<7G9)5=SiXOdxmu1DQJ<`=)Vw@MBU|o%^*D)W7~4*cA;d7d#h|zq za4VfaCDkNoClQ}nUS6G2Vu^r_LV$ytn|uNbkEsM{uacc$!sm&m8>vkbF!76ed!dqW z7Y@D)H=LK5%G6PGZ~+RJJ%I(-03mLLrT7{S^lR8VDI~GCbCL=bbB%^@pJ{oot@(H! zB;!|TVYy36%DTANI9=fas6NKtykj1`Y_#@>?_~uoGB=&6C|3%ej(YXe7-8LW4&`yS ze|uL87+)iW%FU6M!OQuN-+gOTw*zZ;)hf%j?NY{5wVAdQuBE{XXM$^nc7J-}s`v2K zY4e48iblh8(_v=2!V%7jh{y@6+l^#DOT%k41x`qPWZ23FKR+JqNbesqc3k%wuWu%M z0d6eF$`z8#P@hLQELH2ae9*aXE-fAJZR-@~DGCN<-TfmY*RlKi$xRy(!ZTWvLbQJ$ z_xV0ARNW_By;oIvwe|TY?l!W=bb+pXr;EmCH@Ml_(vDi&XOMg=C|lO+rbb=isti?Y z%8dMJ3A?$9i>r?LAuX>6YG!pg(T1R%xE}z-GAymj8e35|Cr0mFCq)vIwsPMD<8WVj zT{b2swW4@gSA1&^V*=MW^97b_VhyfWf$}q)691;g*cHRmpzA%<&mC_Ch#e0)rW+|} z#^~JNZ()ZP$`%%?@Li6{=2D{Yfsd%eHXN0AL!~^|M+${#p{q}x?Oxftz8Wc?9@lJ_V};C|T#NQfjJ zhkMiUU*ws+seCdM`7Bq@)xn`u{_N;T6Il5^Vi+36x9?T57EKlA39n2~7bwYYghF0q z>0N$^`0UfEN9YT^MBQlGJ9=z#$|ABPYtCNwvaFwhcaC?>wCKXZymJ)kO^FV3v1Pf# z-1n5MCQ$MhPfye$uq_IhP8AD2e)>oZhR)5)E4p1PrD2$l{Qm-RT$vqinNQF8k93Dn zsHnG5GUGuH!aUpiv)AOSc;bL5SSOx7@!c`|4>Aye7d_6&5SIOLKV4E)bxP+jJG~@B zVFuW1ke7XMeCqklM)R`mAfT$YvNHnG0c})LZFfTF&{x_%tskvp!08$+yHWf%^W}p@ zxms&$^V-MaGvPo044Z-ZH&d#>3m}3ly;O5$G+0&cX@>><7oGgj?^;sLV~KkN=4q1X zukrVfTXijfgR5t8<+k?dX4u~*X4fhy|BV=cn*PJE|3)Zg#o*<7x-iL}P5M9MVKYd6 z0{b(sL3o&jXP#qYiL3Ma8M3!p|Cqukng?{nETEU(wBg?8sSyW-qbk7q7D^}oF?Z`WExvFv|-%6|3mFa$(g zZl99m{xQ!R9R2|V{?C5Q9zXfbYZcg<*cv-IJDM2SzyVu!hL&(ljGRP_M1Qw9$a&dAJ@$t@^G)#Y=KuZszfa)*&=YvV zQ9@>C|6k_|3)_F2FaN(n{;y!OF*CFMPvX3wy$;%CkM_&%?n_SosbYiQEh-6W3ze`1 zSzD4Pj$JR<+OWHnH!awhSeF~E%%%FYbU(j=N)Xd%^1LB$Y-FHI+j;*Xpa+>~-tdMI zt=>-egRig0Q7yBxf^Qt%Y!{8`f6iJukw ztzjt{S<`p?!`7@CfYwd2DJjbW6FOPS-wGtNjwV8W@-<;#ytoP^lTamx8nxbMl<9jg zl1^)ap~ASWnl_hN( z3a5{)brP+mYS;A}>l|LjJAHGEb*MP%#;GAT;T2uIs8;S@J#@7SNXATMKbOWu|9<|pS?*K6tY+i1#!x;*`dQFo zX}UgbjQ0Li{?u(R#8P!Hw}VFO_qX*~GYBpMpbZ3HCkO*rt>TC_Q0*#>^$H<)kNM+=^W-H{!k9e2e zOB33u;Ba5OMGOp2C}l!^c^xNYIp~G!tK3x;FO*0Xl#0ACw*}2~xZZX+Z=axbh;;l& z-I~I7G>s~Ty|dQ2d1w3=i5=~`u%?i*)gya}4C^9A&}9?B(Rx2(*4t(2lQhhcPaocH zFZWjqlL6Umxktl3jhrX`f2N^>Ce72I_8pJ~WUCouN}QG>GAO{r^4H8#v?{5xO%r91 zPe$tE2yBI4tT=~5*;LNehd#?WZ9Qad-tH$m3Vt6|%w&37?io%INY>q(yRl2yty{8^ zWTQ2uQc^f-QtxMd^X0a+xZe294W)*g9O0$W3OD|g0uVGwP|dRNNXjgd#pFlw~k&OPMg zfxO`|A{L1Pw-bn$o${j`5pE7UL%3T~`n>;758DmGnbq&wJydW|JB854H!3UaJlz_1 zPH9(u8p*j#RZ9Kr-cQ`Mw}~#6mGO?!icxd*<0HzNVpd*d?7HKKO}BCkXcNBmdD-W# z1JyE(o+Txgo>A4uMp{l*-Km@}!*)d@_HmxpaT}s#;Br$p2YA3h8yPd+D~7=nMPaSJ z%GEx{x-%XzGd9uwjGg-Z+Yi}Fr^}RTq1~JTO=1uSh9#Dss7&ZoJi#lANvB|av23aP z$&@_qKDCEdphHK4AoRhgA&sY z>!SpDNLIYj$JtVve`ZNbYQp;2YLqv2GfTznv7PN5LGaU63pqR?7^EyvQM%)>2^17( z^QWkA*Ie?w&0T&2eKY?yZJqQLbr_Oh=ER+T^j+cCuH(dq41?b;Md45>E#$eVk8Qs2N=TW#840EBAZFR5k6bXi1aWqrTqvq}xe|mxFpv z_iMhmlUQfv;J$_FgS${)ps;HFYJFm*5n~W{Z=#Xge?{G$;8HXF)?t&)>eE9oE$x=1 z`w=S(4DoHV7VhXG3D%^&d^#`F$=Ih~IW129J-Z%#y!TI8i z5%Be>%zx=V8uMaoSkbq&cMlLJ~5D$khiZ zG921^iM7p`A5c8te!qavNViQc&Riq2rurudu>pRtPJdFxhIZ=?wTq__^2&kI69;R^hzf~$IS zu~)^-yDd?AcY6u8R2*y)HtDQR9@iIO`23xvZXa=#R-%37eR~Dn5zy06kFsl zo|n;PY-2quv(=sE%X#!QvnH%w4GZSlFCJ-s1U@2CmQq(~*fNu92NsvKQeBRTh$HvR zi#n117YdYiJA&F)y(`28SQ#X-Xi;Zw*_5{!uvrlkP7Jy;@HwJ191VX8WScA0&u=G^ zkTvEOJDHXZcryo3QTK__G6_ zny%|3h3-6hL~t8Z8Qtk&K~J0#X|xf_0X<^tSU=xZb#NEPdz8Ur-d0i+zvJMXxDsks zX|zIG_$a8Gxpas={JQM%773jsvYqaZHcQLXI;(yWai1_#&Q7lC>|KQ%k(3wo6Q_;x z+e2&&m$p{^sL3hMCuXjwTBzr17z>FD+aK6|84<7yIb@R=nU%7jK`> z7%i{DLn4bHWkI9;d2IY$eFUyn+l|k^~gPl5OU^t37(<@V-P47reV#+qmIyvPx1*CA|VgSZiMu;Z+j{bUN~6f z9IY|n2q^lTAo}LXlKNt-YuB?;P&CCmy3U*pC+(?sAlDb{V(1Kt@+&&z~gE z6z089Zb=uCxV`r1W|S5@aZ!IQJr$Q+i$Iy)`P zPUaPEm1lQbQZum^l>h_n^@)cdNC3DZu~EVo@|r~{!rIOBKk-aI$> ziD8eBVyC_d0!~5vtu+~_(YUbsob|V^v zhsa%eM+at4b`tcsoKfzsHyXQ`6FE+GXpbb-I-()$L6PpVdYl^FFZkjG9{q}Mj&Pic z+}TQ2bKF@N?IwrPFvEi@`#p2m-mlZ1RxnaU=5y0g4SPegER$TA8Ato+^rAo(hV-tz z)U)s3tmJC0v2{Dl-=h9-Y}Hoc%s5XRve z`V@gSc}?r1M5zBVVQNn^px|GcUMh7f!Ftp6@JIcO364xY47iNhq@z^rw(M%mw}M(3Df?I4YNrvi&2kYg z-g<8hKpDT^%zAf#+zu^9OE7GN0gs{(CH@KBx2C08=;3jOOi$=%yBojo(Tut|IazWC z-hvNKI9UaS@b%s=RGDah(`N)gPpOEOJwbuv`P~kr50M-Y-JM50_pD@oSSiPF>+3~_ zz$W}q`7!z8W{e@&Jx4zNFhB>MnIg;9!l(hQ3>(Hu1LD~`H}ry2Teo0U;pK& zE?*R4YO&%0R_M25dQCd{*Wky_lRL2DJXmqOp!MWlLDRUDWpJEZ@JQ&CZ@Uw$QY@37 z7+jifi`HR3wHy4nf7wUEVBA4jy=i>$Yj3(f6s}tDfsT91_hjHoyGY)?;L5$~GLgRL za8cxAS4V_&*t{t@K`OlpEHMmSj~gtxX8Bt!r%wtDNV#;wXeR||)o;xVi}d_TM(m+< zbH8CuP0@Em<$v@(yg?BD@m8RBC`cL>O&T^m_nMQqxCb3eX9k(CR6+J#k!j8^mv5w* zZz^$!O-%D;Uznw8R{DgGS=`=y3oU8u+=kz96aKP##fnj+ zga_?o6&>6;Qb{X(<2q*Z%94ALNL_1AcQ=dujBUT9_2sQT*7R=@vOPnm{=)@5+tI!D z!Q_p=K$d&94g8zg3<3HDZhiFeN9N42ZyNXIe0vESz1~j-y?mV>%a4)M$l$MrhzF4_ zBAyEMo+>BYis9VTkFhX6k~c*5z;nF_G{uu1b9}?XnJ1XKKV3PB)3;9rbsDMmOg5_0 zN!OvQ9Lr&syw|}{q?_Dimwq`sB~6eK8ZHw}aDbAilpRI_O+a$^Q&+C2)hJ{{ETMEw zsvTGMq`nSe^AAw!Xoy1LyUB)uHk4FGTPW9%KK@SvF4h$<%~aPE>AFh3wjPdZ-#b!_ z9_aN3j{J}}puFj?IA9YU)9P1#sKusJlQm}zW$?7H%(r4VRx|twv-0=bV;FnXsk&t> zbBf03!IaW1Q=w_qf+bz|+euF1wM9~YuDBr4j^Ny`vAFI5XC?WRcu4bwvWExz9ilh` zeLy!?^@qrs8DJq!x9J&1wmLR*aIV+yir)?@r0zNxMnHMt7P&O_x@C3zNbAfA2sq7P{xeGYCUuBQKH^13-^kYP#^j``Q?yQ+=R5x zgmOdGhu~D##>={bQTi<4*#!y=X7Pzl2Ni3^Yfv5-d^iu2x|QsS!9lZgFa5yf8csz*OI;}n^F`a#q`=pwOXAm@} zpdUD*@|lq=^p;ti71ab35gN`+?}D9vWd1#PyTHereV7jeipIDuFQTgt^T}iJ3xlqO zpnsopw!h1!Jz^I)pZW=h9FFk#Dnj*RxQMx}><5&2fodW0tJE_lUr5yrweC6 zzWd2n!F0|LPZCs_{Z_ZPd0ikXHSrQ<6R|aTL71Xd zED_(9-i`Du!M)xaOYSmm-+sSQgFbW74sSKgcu#@#@;Ec`^KA~W z2N|RwQprTayW0GHN4do$1nOG^!-_q>wWHG|>vtBLM-AI89b7!PDa|S`%oT091(DPJ zO+x}tF?^X#!18@=8tM0nNxZszgaU@M9LSOosB*lNoxBY8_Z}63o76I7hNV zJ)qN*#MRdX+QowM9c(gT1v&5dvmJ9S9difoh2Mj@vcZ%jCT?_{d&LfpZwSFUWy50* zjz4*n2&FB zY9Bjau=@l^(AGI$U8%IoBV(2)_ag>=iXRZfj*E`(JiJ`H3@xNHTXbYaJjhO(zhU9o z&(n>(@R2^RhgPx=%IADOkB4_9l2kB=>3+?Yd0J{$5S)_P=))GIgJPBPJBd_G@FAIi z92S0iu~nQOX8P{CK%_+ZWEMe%-KR{SIp{;NPve}1$$d0H0+tW@>`+rQhQ{!t8=0wZ zbMD^OGiCe6uYbyv;D3QEng1JL`5%BE!1tA$ZT>eHy|{&=6M*cqa1#9&M9;#;!bQX& zOT@&;_&))f6Ixbwzr;U3SLrbkqR~oEJ}SI>i{}M$pJ@=AA#IKhZ~Ym$Y=9y4Vj#9|T; z8KIIFiB6-&w*UhzKq}<6FR$2DnmTmJUjmnmC1ZpLiY14<1XpR)pMakd0oumu%hg@{ zR{nPe?5T?{z2UT72GD3kRWquT-U9&$lkD!~taG{&A!^)PV^GsD7jJ9g#DBb_w4hI6 z9mfiQMv0?B`mAD%Q-K5fX(+c|nKS)ORm$Ze^LYvk4Z;?kI#w_x%=GTK=G&%s^+*|# zBi3)21Owgelg1?wN2q?YavTg~I3#J*91{`5y84fy5_#EPtg$fo<5qZzWpZA@jt8*n zf2RaPA2JrFAouLE!Vgg7y#MIn?<`OJBg3e7y3?#z=tHdIh3F5KUapoaD9nJL!sgok z483gl2Vi15TPUI#wD)Wmv7EQMQ60soA@jW4AB2pB6exM$HVd00znLF8x_jFep?ra{ zU0`Ivm`RF9MBS0ooK*FLaNDXSK=6AOJ*zGyYb;*fcc_n4A0rBA@co2jaK6eMgz3f3 z_wlslo$>Pb=LWHmcJwAjR6?V^kAFilYB&!=Rpp4)@cot=1;?J8(Q*FWn)wJ9+Ym;Z zqEQ>kA_i5is_FF!_Sk0qlZuOW?Ne+f<#?GJtsj?-?8?=?JKtzbb+u$tH{Ilzg0K8U zy5j~d<8H||rJovonF${~W8280E)uf8Qo7rIv{h!?1+DePZWX}A` zLUz!+>Z9|fPjZ(EISz!Lcbm&tTLvkz$XE`^FE)j6&53g%ITs zTDEBkG$8u!TPX3x)UTI0OW$KmO{!>ka`F2}4%*k!GKNTvbFQhUO1q!m*DlWVvrE3D z2@o(wZ~6^x>K%@x6EdBP-#_{+&W}NgUL>USgau}-?{mYOuTj=@(IewGYPSQSHA56`h; zkRE$yh}lRZrm@%X)vBYBHqq6rVlOWrkHwU92_~kf#XoE$?$3!S>D5y_f{sMOsV<%P zsH_anM#?so9>y0IDmuul20nVf&@AtAGP+;;bVU=FRW%XuN^#gC^V@0+n;r9r5FUd13-RAe}vCgXJb`LvL_x+$O=N!S%Zt~X6 zTvi9h4V!eq7zMopF5y7h4>-e(V6RWPJ=3@EejFg2bx}OL!Qo4DcdpB|N^h&pWm}(i zepvMCej$^788Y9j3|x0Qz`tDfTUyGQz@B{-Kabda>IgkAYQ|-;^x0pEmw8w*8nYhP zeK?ES+)7uJp3U`*Er2{9haOblY5LjK_QY(QWX5N5-D_INQfUjUU?pwv*!?2F{T+Pu z3#R3>&Zj-OK@*S2e0MIINlapoZ)Cgy z$4@yeo;tEq3^*y$AYzb080#zm6i=Cb2__8M68mAgl9fmg&rI}dMPxbCqI|^Kk)R$L zq#>$#!|LL}m6`Z$5pA+rswf(l|zdw2&M zM=y~AOi=R1z_SDQYgoAMOhe=fvcQDi{@457@GuV6ufvEual$4zqr?GIc#3iQrs*Kj^FOdY^t_K8qCSAWGCH0`z)IO%zUr1UfKgdZ)naPs02D(_)$A*(X@u z!xB*N_u(coo)S~urR|M)e!gOM^g)!Pp5d{kS{tokn#C}+rR83n`^VFNg%4lG4yR9! z7miqtM18dtGpm>iuDZb?W9zw@Xa|Kbx=TB@##`t(7%>PQ3ZG=yk7Aes8M~5K(>YEm z8*c2CK@6)rD2S>Pq*)P-jS8EE<_Sh>I`TFegvPW}jw;p`^73=|?q~-LmZxQ#xlWoR zzd9)~rW=3qUR-@%cHa==&_bwgMd~H=YGELS3e`Ov!hKwXSBEW<&p7;sIOoy4O_M}z zoz$hXLu<8Q>T-VtlOi1VC~&cx1aXeNbMg=?7`wNoU^Fl>~Q64 zZ_SisiS%hjn>fwel0kj18>}6ew5P0MLJ^U*NSo!d`o$I}jXZfkUe_$OrBMi8H{SUI z!DU8spfdKbHBa~>OH!^NnW5HoYw+)KzW+p7vV7kf&Y%-y=x4hex{WKl%51hvZ4P-) zS9z)F(lJ=voVGC5EroHHqRc9sQkzV#O159lv%gIS*y$oGg4^een4}2VC5Oqg=@*}) zpl4Keij9)fFep3O`|&F~MMcZ1`4%6bqVKJ)dtKb3vhVGZ+Xy_r(uY(9AbsojJbX&C z+_;qk!FFe)ftY~Tw6iCe9P&L9z8mUkq9v0^7>&(=+M=dML>!pCSHmb zNiK6E$kLFwc5^RO^HDnX1CH|PJ0a$%UHgd8xO%Z*xO>jhkk9a)2cTyfEr1LVD#-+; zOV>8nDMkc^YRV?PG@$K(y)ioKyqN07*=o|jkmD`WV%ngUugc9pLZB4CX|B}6u13ic zhjooCf<9$7RuLPL-jO#$w^D`7tldvO)n{G%xA1rhxJX%s_74nBWQwI1+ysb;fm!{~ zhTIYX6r4xkE#=nmN;=;)s|7T1)VmwIp&awN<2Y#a%)rzlMF=`e1*_spR32#wkM6e7 zB1sB`(aSFAhF#Yc__6$RQ!b+IomIgE4B8dG{mVKvMNqEc7(FeC%eL5a0&jGsze&4V zX0%|8x6T5U0ROft4aNrhfwO%gnpd>EUi++w zFCE2bMe*;#Mch8KD&$LNhP6tgF{;qdxk8TVT^x$&_9*O;!~FI`?CL&P3uCpoUgVXH zCtvN1jm}OI(dF0J)imG3@G?RqgS!R$ zt-+G)@YI8*0o@gj*kX`YGa9LNNFDMbnAS~<{kif-YdU>~)5B&57`aK}7zW3fW=OeV z4XgFYJkaIngp~bOiEdpviO8AcBrRi`nt2bC zkH0GglWbtNCh$5-xuKc4Onco>b-@Or!p>qj8XiF6w4Es8t6OF=TvRMK`?{@eQY0N| zn(3I2XuJ9tj}|-xOIl0qB0It?YWWr1?V?gRUBQh)M0`rb=ScK#D)@hHs!8zkqEYcH z&(x?Q*6C|k_)yinR$H40?)Bk`}M1Qtez#Kq=o2;>SP)zCKq6DFyt3^tF<`advayY@c?w z?6&J@@92q2_giF$T`+_i0r|2K^tB<_+>P$AZ2FD)a~t+Fq|9}Z$(qiwWRy)b144?R zQ&HAsN*jacN*jX)F;tEtXq_;NR!j?P-)te<`L%c8;-u_4%7FYLK=gvkl(dTHKhO}Q zT^f_Q-3@8M57dc}8On&nu?=6#FgG`ajotPzy;55Z$=-niO@mI$t0plr*`lk~+6SPr1kfRtewIW@eG~aJzF_23&dP8 z<|MCm=SJ~7FdSWMjv@1es`3Dh)WGY#LbBd8L~@UoBBl^^2d;?og}o>RywW8TnS;<* zZzEJ!r59Y#P++%cJ88o~O%mIL-`)}lhk;$QzVjv`STjrP@sjOWZ9!x!3_Obl-7ITF z39Zz+ZT$sqDB)B2FX_n4`M<^E|LJz&&={M>qt;nR}i&{l6g<_`qN(dT=JjE&_b(VlUz z9KBj;A^Gxu{Mpb9FkhO{O3DzQ{5KD6LC2^S)iD}7E0?5OXDNZ{RkU*T?fv4?-oP32 zVKY}Ym7VVI=B`<%5h31E_43Tp|8e~NI$!CNRI_p8j={Ls2jh~}!xmORBRAYSBW}!` zFayi*%|`-vM9dFO!OCZ80d)G=4Rk!~-nMDrl*P}Mqx-j#U$5iYWY3P1es&2s_*sV3 zLgGS?`Fh;TN`v-EMZCRsYqb7%{kOh8{ms|P%h=zW+o2kd=Zh0YkLQEon*QEbMgQId zni_Zcwv7%1(N=<0L&c;Rm6?;=(;<@+atjUa?(CLgEZn=Ijfjo@_m}H5y5`qgjIAB? z7H#|p&hxu6d^?*WmpYJU!!@71I844l=QC6J`cj!s-$Ng$#akn1Z5&r8*f+_dXfC^E ztt^*G(;CcxF`BkXgV;F9j9N|t-VUBIwscBWrHp5b?uyxciYpWbD5q?%kub@%=bxf_ z&Z7Nc^x>0_oc7%r{;I$m6|oDIquNCNn*oe@@uG+=h#}Z5h&T(QVkCv_a2)f_f z>Y8w8yP*gxAO7n7Sd>n8JZ9s1Qi%+Yp)WU`fRa`ae&BlU={6`hoL9$KM{Z^|3ZC}9 zSlsNUK`{rlEXToI+#El7K?>87%Y#77w<{j>QK|sp2a{>IQU$GU-0O{w+X6pd_tbg1 z)7be|BBfEgCjXa5#!&&dSk`at>T^6-cZZ?05H4G@6(w&2vb8;%d&89Vg4oU>!h3dAp zeOG~|Sn(^F4Q5UR^@_prNj<@pwB_W)D%LB((xqjmj`jghBqlCE8GQVp6WddJXK!t# z{+b90R7VAA#q%ud54>5SB!}5=E+9LTaX^`*HXScAdvtkF}XU*a@>fN(I2I{{7*^+1&yF9{B)36FP`;bRK1jK$N8F1 zuiOAY2o*4GRM4*CtY?zs6XD%XScL}U7i%1 zTH}de*nuF@3!`=qJrIIXY#*ek_>Ap52=hNNe|6+NTTazx_t)pX9?LoQ#Cv-Tp;Bbj zaKDwiF*((!=Xds4J$@Y_)pNep;<>|OknD0?XU5gROcb5%5o~&616e`(U%9otIbK)Q zo}N(TPlvMdx|+R%$6qBxbj7u5nlW--i}sQxe8*l4WQU@#RvAZ%1>9E9ipJmRvDnR4 z?|jsNZ+}}zhm!5H;p<=`6k<9I)?XXcbkV)OB>C0kyVl}o9g%8#5-cUDkt>Hs3e|edv00xFQ0=y zFLMc%@$8V83#)^5J)obk%xwWonG!78$v0Ye9q$#Z55WeoU+?6=IQe&>XoHS2N<%9j zvsA5jM*QFOeB0SF^%{#UVNh&aK$|1!p|N;75y9T=ckkA5{Vmpcauj`Qm_$5wEs|BU;Q$Al>( z6Na2o0atkA#0e1#CjJ>#TzeeBngsF5Q2tWPuxo*JK85DPbLN9ET&nx6F28*r4-k8k z4K#_!bUDR7?nU?v`xy)iF%*jHj|)531l!Xcirxw3K-~r(lZ=~cwUF45L9Z;^H@(R~ z#`&N@aB*n0P1@JxpEUQSNt$g>lmT%;e=ajA&s2%m!w5?HGZbAoS?+VUF<|x#p2Ea1 zos9E!vQRKsS!6BUqu%BEc=NeA#c*$*U1WNf61z=U69uTu+_nhP?2#V?U4&i!sV(dA z;h`mVKKzeEDj}D-&=}!4Y6esgg!~C9yX{v>*(#Yq2xJxrg7%UUTg>w4rrW5*=vD|L zr9v{UO2Q_+yl*d84Luf)Ojjg!8W-g|Qz5a~@lY%m>x6}?Urx;|@K)#~(6&7|F>4ds z3nBCH{y%f-6qVnnU^cM#k`leU3ZbuD%a$!zF!fDxBpy92kf*s1*mgqbwtgBT%4qN6JZ&h<>S&IH@;gbmH@>y`{z5Ivb=MgT;;_v+L~TI3lgXW z79d?$mKDb|8680@JlOQOcFiu^emzlE_zp*xqXQLBHp#snLaChg-y&J$cgA8bdgG!v z$^yD115PsG`hvJmWF@U5bZLu#cn0}I34JATm&DbUG)#Xi+Iqu=F z*hhc3)T~utQkI_cWim3$#>QafRGsUtEvLdYOUIHwvdOrb%1e~Kf*B*#%^(_hggwqH zAlrBMxz|J2@zGI}SMj2B5`r=g#d$I^<9-%AJTLHRV?9S)Q5n$DZ6m zl^Xs^53aPGKvZQ5bUpd9{jM$MC96RX6iYyC9w3uBbEelpFt$F{nVkds=cRVpa^NGo zOv>}7_s@8_0lla`;`9$#fuECR!97?iuma@pHxmVNT@2)_e&w_F{6eH&MhHA&RxR>g zLQtV8(TifvwZH!)2v!=6W0q?l(oYLoJm(z9O#=M52Jml2V&&h3NTDSLgVdk@hEN%- zD5$L@5_B~^Sei`UzO$dX#|;u!=%8vS&V7S8VWAOmu00;AXlB-B{{ZHAJ<=(i;!%II z4)sex{CH}(CZ3tFoV)73uXn>IHIPz_A!$-IDx9599M!}dO^B8YtqzuvoOeO@Pj9ND zuS{c79>YOOYjZ(Nl37+8nJxSkjL(LS9nNKHG3bW9Gz@Ni=h~Oj=BElx8uB)+ffc1} zqXqUM4^iZ&(?d4e(&_|>QqUo;(kn_MYzrfAQJJSBYlbq2<1(2zDJyRjA%UMFVKhS0 z85o$ZESA3DWkKT`ivSz_>-u7?yf^-a{;JH~gL5QzH+C$yJ!2klU<%Ra*i|TaeF9gi zXM>q^`XBG%R$p4I zToHbkT+3t92|7U8p-bhK&TvjPt(&4yQfP}*_x5gm)aG5d=}d!Q^^t(22~pPV=$_S&kcPNm>NV#u6%!AFpEuC zDlQC9={09!Z|z>4A{<-&Y`^ZV(3cIEEL3g8USg4`TRsG>dwP`*Ea_G2JdIY1>(%RA zX~i8^)Dpk0Hp#HOJF#Pnu$pta86(jSEf8OmIP6>BTy&Z)aQ%z_*3vGZ^H8 zlE8?aZI20o1<)jsxu=_2wzVX`s2G2RLfof`JGX^8BK2FU6LTm--_wWR2 z#~~Ga@+rFwO$5c~I_1Fj7r9H9oL34$dfAF?yQ=^-;lFw1w=rH?m21Tf#vv1~V?S zY1(S9C?SZ(#`KW|`ryJ&h`I!dI|9F!?%#S$nQIIzLWuB$sKL}3{88i?R*eu=z^38J z+5oZEzx*W$YfnwHQ}LK^IB08}5_>aW!gXbd{llyLq8rz9kJMvwH>@TI*6^vl#kMDw zrEM2D?=gl-bw|WV<+bfu@FFM2++3WTY6?|9Ks#ZBuQdk_XA-97lidzK9VM3BR1P|I z0Slh`PKc|-Ajnuq2ToTbQZ9AI8%WYA75tvev;EK8bMl_jT;pH~)~ExaNu6q511Q@+ zSXd3=dFWK{yRyOEyuGk7qwcuiwL?bXbUT>ZH++BCPE93=0 zhqhD_Q@(rU=jD-AXEOWz7zEiEI^#Pte#MxT;Bbmg)VsHYAr_)+^C;ND#w%Z?P~6qM;&w=0^~5E?}wV} zv$1z5Cd+&Fb1idTi~syu6|6H#GyAf?=o$zqMsb)ivSHVS z6!nsUbLoyA-eYDoI5i!6`$WY6;@}U@J72Ub5u;1uOlJhsALZkM(Aarv)4d}M10R;f zqo_OtfhseG{Rgt0E-pqv33u=bdx7H_CFl+$=Blgd3{hplGIK`Nn8p-947uocfo4p` zk@n{e>~?xH7GPQYCulBW(+@&;>qc70Q9A5GlPhq6->|rJX|F)R*FD(qxI|?)JJF47)adpF>%!BPBW$mHu2=di}pX>Ma zhzW8{Y0A?qoa&mh5pm|$)j~fPmIHo>b3EPH4@1b|U~b6GY5Oxd!2hOpi+jhttI~RBMK2 z+J24XVM6jSfvACeHkON=JA~i3A|Va*Tz|Q-EDI-H!&@AGFVx};9Mk@SYRor567ITx zpd(W@ai-5h>#T*48c3yH7T9m)Ndrn+IUuv@i` z3v$aQAY6BT9Dp21QdI1~e4xm*2-H%hu8jdZ`;;})$oFw&IQj4%{EDw3fwqPSm=NFj z!!1ts8GSZu)!U{j^1?!H#;7WCWkUbtBk&hgZW#23?S?ir(_g``sHx(Jtp{w(ve$xA zP;i)0$>{(K;wPD8ue90eZ69~a_9a_BzZH0+x-`DFF=NDI+VlX8NgrwNd;i(vl>DF1 zsJtlTU~-YL`rBBNeNm?R$_-OeS;b<{-k~rf_gRt=+I{9ADwu%o(yv#SGp7q58P{Nz zc?$jFhRXq8u-?eeY}mpBFgNbQkrOYC2AbU`hBuCM__lu@tSsax-$Ut$S_n9w`|G#a^ENB?Dk@%f4j=b`fD|zg zAz$|s@WQ^AS5l2+cKo~?7#cNw0-U{WW!}UmeR585pR7zybvvO_Vj>RM)p?h0b2@XZ z6XSio6xcJ8t4d@8yuAdKTidnkvTg7Ml(fh1UVpufgqJJYtyd}9ogwwENsc{s$U}jI z8x`$+j8l7GV=56y@1W~@*Q4D$q9bqo{1!BmbAsVXxg{BadnoGt)$^I4DG*~ErGC=4 z$)zo+$*dz|1(Zp8L=6@qk6>%_7gm~RZu!4>HVZTB|1v}UpFEqHh3!9h_N=ab!ex8Y zkH3G|B1t5sM_nYEv@|6ZgTfMpd{W029#MxCjGC>j$I5!L?Ibrh^uyjQYi<#pwYiVt z5~4>?7*vZ*Czt$TDY0WYJx(`W`zcUP-gfox zfzcaf9pCqNOU}QZ-fG~+JDsW(b?)oz;X>|Gn48}&J&lcU9HhClD++q(f@ zTJ`;ZpDx!z+L7l`Mx97l&1qy*yQNU^j}csL=E-#%JB*t8V~%$*XznyIaOy3ye|>`E zBh7D3F%$?jIoYG&B>3HO8NR2;W!+ixO zt&gd%y-%=Ts(RTfT|UAg=F#{$lPuxy+u=N0GqKl|@6<+wSE#{mUxlJVOzSe$%95&pTe|njk`jZ-S+%aKo*f zLB(1i`wjQTnAk=+f2_|h+T1LLY>Gb9EJWhDjUI~DnPbWOhE1;c%lgew2MArKvb5RY zlX9oOFQuclec}Bf*;(<#@nm==SuXYPSw@_}si*wnqRB$LG!F+JKaW=?CP{TPuCH1e zD48y!Wa{wvMS?yjqT2QyS=M$H{T8mxN7XH1n1JdF)kjrLcWLu>zRD=WED6R8{W(1C zTu^fA&9D9mL>Gb|56wmC=lI0kJz|g~OD8a@WB}aIrJD?!v&HB=Qy0wb-Aq@$G!CIo zfh|1hxzZkm+g|iAU=}4q%&Ax;#pSf_t!H`BOAwoClIgQ*BZ8CmcuBh{a87yM3sm1& z!kKv&`4UnWKD&ux&AR<7L{O%diE=Ca_iy3%!=F|+RG2o#@U|Z|(Tp$}wvx8`(=(R* z4`EtG4D39?UjO@B%%FZX3sUoxFjeSvLBm=P#-E=A&!$0H77B=m$1%T)9))dc?=MBM@X#(KbU{@NI-|oSw0=i^fp{Mcb_V< zDWh0&Od(S8)+y#hKckkIGq+9t%I7!2cs@cY_f^uU$MUeBzwr5chx3Oo1Zzu}rf76Y zAsKgnX(G4w$s{(dPf!aRydFmZw)7Y~ic_naf1mPrWzAFqfCbRm?esB@$KY0&?oL(N z;pk{=-qLgMrrZq=p5xl538B`~nQ#Jk38KvdO$bzrjQ{cJhvSRbFPHTT}qvc=`eFEX_bV5FLy{9A9qS`G|w|{nHWo3(z#WMm}kUnV)BWVbz zwQY2dmG%oh$4T%`v+3>=tzTFTfTFA2RP$NHJH5`T#u>BKbu-u+<2V;5u)FLR>S?fM zkOO%<*guWR|2zR_(ba&A!ii3dux2PA`(`=w;y+L_CY9_BGz0I_zqS~LtG-Zjr;0~{ zrXjCsnl{#ToN779KS6Q;dOLI3N>}7h2>wJy)*QvL6#PjiB#_&@e@qTI_>_;Jkq*_8 zW-k?*pQYCmY#f+k&0Byiu&^cTNaIc@54kK$P?-E6RC9%APtVD5#qS(Vipwvk;L?L1 z=1`W6G0xZLIN0IkyMqI`d8EXm71=5~;o*~&A zl-T3RD+;!=|7K`i*iP=k~1MNEl6OXjo<5`iKU{;7=GS~wQPBu+HI>54|{{UV6L#gDNs z%Esfcgx5XkbrHo`w?$9g91ova$jQ#}YS`ceoId35?k3csb5>mx)~Dqml>vmny3hEz z;~B8In%Prt6=qU7;`Ni#^@MRg=rvy;g1gZ4I;>ZF@nb2K;Za4^%uwUaTCzl%CL8|+ zJf^8RB-)z61=Aud!u-xUyXd)I+nQ6q6uDgycP#?D?EeTv2`V@`EOolgG>b~`+R6uPUT-lmWHn+R>|h0 zB6>=IDaWW4Bzio0x|6ZK#}(`dX+-bb*6;c@9JHA}Jq9$C;7m`T`vtnvlw1FJ;+Gcg zu&C5R9L2!s^d1sQB4N^MDN}OXnv(n-zah^=$i6x?43{6-^dmiWt(vu@?|-T(8#;IV zUOrbkPeO3}<2|c(C+f8JrS$U(SJ!ay0?$mx{-I0F%As;^{^%TDZ`dL_9~o=?M(j88 z)zWoA0|MZHl;~FmP#PJYsSDk<*AO@q-f8jbbP^lz;!Zq;7hpT9YBm#i_2`j*1$WXr zu5x<_r}Q6ytvIZUs6BV-47NZ^!MUh!(U%;atUFObFV*?+)!rBwlv!HLoL^)IW0uG>P`MgZMml&o@O7O%9OHd~3p>nx z9kirS)1-hK$ElIBbyJ^s)*6fGHDI9w%l!%)Frhe5a1+QM7%arHdV@x*uz}8bYQiHW zj>@Wx8oFYD*AyCc_uHOw%SF`e$$ciF$5R#EhtWc`-=o&Mf8IZ$j`QP{7k;sXq^?9s-c`fKVYs67Ix9^F2RihM)=;I}Qw1q2QEyZZa$aJt`p`{Yy!f;+ zbl^iRs^$V*x7&$Is3!DECWG}bAlEVgy;bk3eQ&z3bNz)o8(oa6ML~ZRZR5t+dI6nU zp?dB4%Twr&tMt!F)=TVq=l86V2AntpWY=aHklvJDH{+KUlUhAH za5ZTk1b^U-#(%X@-kA4`B_?*d9%bVq+9F;Zk+1)V-aAsgB<$zK#n_|1Fofk|Nd)nOZ%IK>LP+MEjZZ0Yb?o)S&Q5`)tdmr%jjAN`Qcfjr7p#$}l`T&E zU3K`X<*$vkl8lhMCc7lS1FdYFcgE58bMm2cF#?TgzPR0HE9}t{!-+PkQNh>gyw_Cq zlq>|%x-Bv`6&HG&;>47o6AQFdUWf(+^C##=xpwZ<0HVrQL=q%{oj)t5Yd(G_a@ML- zA~sX+0!)D0G?s;#d!{{gec?|{i!Si(gbg!iE8F&y?)IeK%|iW25NBg3OPks`o=`(E;W;R)jDZ!){1>T zn3<>pDWzK{e%QhWg|{|i?+FJ-)Tq*4f{zPGlFTvsr1Ba!Ba8CBShTQS@@c($G2WpR zxHhBRS2WpcOkjv(xi1O$%ih$VD1yc1F})Yj9o9Ew>CU;Ak`@l|XPOA%7i|Pxl`1%D z)4p5gMUDlXXVX&!mCA@DowAt;vPm0PYi;y~VUV5r0*!O)DpaO;A$>9qThHsf`a}23 zxv>NVl4q!uy$?6)!4)&f31P$3BpEwKKcJ?ZJ^dVcnw>IVVKA2zTi28bT%=7h{ho;_ z&#?G%-U_7RwQJZKAe*sINtcv>g_!^>JEH`QyH3gbL`8aAv?OD0Mn7{lR4H(C^96q@ zq}G-H`;FV|cpKe5G2?DWl+oSrdirC<(o}glWxu+B3AJ(EYwa$X@zk|X3P3)_6UcCe z-5@2}hqU+Mtwy^xSZu8rwMH+vBqMpNcmasjQB4JMuSw?% z{^HCM0J4?C7&ukTrq}9U(T3mVolMFyl9X*i69Wb#JPtzIPxZ3`Me47CX*&SVGv@LN z-D|A&Gv~pELL9|tT>QPpdNr{UUW z_&jHh+8UD!zo0%Bp6EK=&((NAw4YNHAYy&BJ6TzrjFbiwm22TRMcPgMxc_7%70$_c z|Da_Wox%;5ugtg$RJ7uKkXO%QC4B&L2G|zJfDLaR1+!k#C7yW|SN}v5HSvps4c7v@ zi#+HoNy?uE9}YSrr86A^6-H}70irsvdk6(O04?FNcB$4fyQltFJWSf2;wTaz&kC`<~e4|Mb((hUq z$l9cZ&54*X;Frdfom8aKbSak0sO;@NM3gz|$j(0XY9lhDrAf&Pe?bCG}GWCXTe2D%4&Mi;w_w|S>e9%f&v=pwmK_mkWV zpaGF1P%7!6p9`;32T>#qt#fKegHTBx|2KbiYO2;Y&P$ht06ea;<8rKjSfVF`IC021 zI$T6o)&>Th%7d$nr=Rp*Phyt8$ECHDqYPyB>)%x1eC~usK8h3~nt3NWbk8k#Dkx(G zGl%-6B{!}ymVV5n=e-@*&2jTH?_?Mfl@=IJJ*38nZe0{AAAqB~q2v0-qiQ6P^U?vh;Y zeO|iJ>VELdyO~xS@yU+JSt@5{%fq5%T+#1uqB}F# zWa7;jeK@HC6`IWP14&&mBKzzW$-IwG z;uzTyjWBUSGZJ#svggcSU|gfnr~jsjZ2w=H$i~F|pVfwCI{GP>63Bl2{X@SdMs<=- zWL2s?p`bZ~WJHKyi(otx?XT-2>9M8fcE4Y9^KX*K8{A$&+SD%>tpt3!6bo*Yo4xhO z|JCr5YxYzBP}aDrSFWRbA1AZTsdQ}O?|pyj=bkEP?-{8)HHdIlyeY_+oUQMr=vLL)* zN!e2_i@&fiylt#KN$RNDUK)`(6rQCNX#a#68afhnLtYm7D|aZj?F*!{T<5jSrJMnO zim*fEY|nbLTF~*W#38Cr;Gn>Jo=+2Yz3KJ$p{b_YbY;QV-1;eDgu)r=E#|t~M=$K4 zpx-|NAwYkNq`IcQ6oIC?)YL1|5;8K~gAjk>RYTgOq1zamI^li6T@Ne2M^5uRjVLw# zk?b_?Z1zU!#ZRe;AM;OZ`<}Y|#)^Hw_`Lo~LG_MO%G{TTr6#_?>YT*AB*q-b+yRNK zR$pW0_IX-7EUmk#1#g!dNmWwZQR5^WW$;>b*RsTJ0q<1@Z@d06`?5IYRiSS!M}$qC zoECNeg@@Iu%kL{1hSsg3+8mnzSqq5td~%kRmoTuPVci)FHiCYwv8hm1@XVu5%=Dvs+c>=Jvd>0JBa$d zWh;5ujFstdI;P;TCPfs&bZYgVOrJI9`pDgEY3~JCzrj*%-k*uIdW$BlEDdb?8v@3Z zqtOb$CAaJi-FoyEHGa5L3G4~WUewYA6KK~oX*(Dca#2tzP}#(vY}rD=+*HH_>mElE z;xFpGE5W=X(rey~l)2j6SfBI|hT#<3{=A{zb^Al-jHOXSu?}8tEI|N$8*h)a(cqwO zskuy7JUDXQUW9)Sfh5O~mR3iqy5_;}*O5nz*fw}mwRi9Qz7%y^ag=s1IE)Qq8h4UF zT-;c}LHFXx3gpj1a4+HyY?WtJG_ZT)=hSx##9f#DSNztnv=txiP9J;0=Gev+s0op? zxemni1!E)3vTnMAtn*$G;RZv#>3-Bl1Kf8#JrkaCw)Lw&hxF<8MlxB5DfJLc->zA1 z9dg75uO&g&DabEV{AG~z7lr5^5nXZXlMufK~ zG=UHR#k}%;LBRc3dFFZnAqEW$Cj$gfS1cW*?Bt+*8ybqnIg__JN!RMdtYxw9XWw7HbWwtFpH-!VW{RFRi+s`vjn)Ii4#$jg5ZJe@pqeBD zD}n`PCYEDQq8KxE!O>Fb(I^}G^P*`%q$=TNi%8|GHVxn`XUx`nFP zw0Gpz`HN~lJ5Eql(!gU=utn)8px0k=GcgM~z#|1crMX>?l2*c6Z_F3|0d@6GJ9E~B zFW+7hvS0uWCrsaG+Z%=+9@}hiCz~dbePQ>le7KVfA#Dao)f$&Jw|sig0455f&yb8) zI8WH*5NzM%#3)kX>7A1XdD>|7Wi>^68R+pv)&Xkxa%QQC(%_{85q7flSnA9 zlZ)LZ4I2`Mh{S9f^3391tt`>4WSVjG0$=%S!+>?xHTa%s)K`4s@It zi_{K1;!xv{h1|8UhPx6C7sUyKM&!;l!^`7< z2OJ&{ntDrv;0UL*5r}gFC>iIamt!sr>W@=0s}z5fJeg&p*xpPqzu~hwdt(2))Rkp} z2bfHLgxuI?*JT8fvu4Seyp(MqH{ZWrb<82>q=I?5`emsp#fFUb@h#W}xrX^g46j-+ zwjlz(KLpI;-LKw8;zwfT|Kf`LJ&tWuaX$EUSd^~IDj()8WHxXxGxfFl??hmt+j zE-@cJ_?AYmA-cF_q`eka@NIjBd|XkZSz>xI^M+|P zplk+?J-UskHtj2wEG1|8(7HUP_VIfDf}Y=?;7E&MA)~bSTT|h12jk6MV-!sx%Xzb> zW#q-)q&2pvAk8&D`Muk51eAHj3Dg>^Se>rMM?ia`ZjSM-@Gs90+g$W&E}75SLo3`;rFt6wFMBX%gt5yNb2 zE#x@6d_=(A68ovLmfQ%&jozI_8%Xe!WDfa<>&R2-xE|~s^IbdPEw0<+nT2K<^8>$$ zq(H}bnysX%Y%;ue78u^8{FUS}vPtl=;-03u>;&ZNAcy4&&)%rnilK4!+=}1I-^@xyVUFg)Y?~HS{=ms{m#_`!mSup`F2b(4(6Ip#Cu_SQQ6!jSES?_*x-< zi{UYnkeMn}DtglmZqj17(7mpl%2ri7bx?y?$EXUcmADL+t3g#f!(C|F7Rt;gP!@#R zbsV>co7UG9o;^-5Lf2h-PLBjZnoi{3L*yo_5uv3RWl;spqb%Pj`uyj1a*3<58J25`&i+T_lYPNcu`bNZwSeK1Xqo&kg&wzwRvkF>XDFd2K@l6k^`B;nz_!w$~Ek z3cz6jl^UvNd~k!jhow16)o*T)a>XshQ$+2fvB45&DMzDE8l&P&c_Z6S@7Sk0E^N3b zLjOwAjBU|oAHSI{47|9R1)Wun0Hf;c2#!u~GSnwY<2MW7pOWc{vza4b0^?Wm!Pf zonh^YS<#{09Mk(6*qU^V&xo-?2+F^Zw0QKqvvoRxGNM!@4ch&Kw`P!=^t7dp@YefCWagFo{&)@Qr{$lG1Ew z>nFo&B%^aVw9x8Zl|{InQeA@vCCUC6=xEMDl zvEejUT6Xyo;p_VQVDD9$0scLn`IoKe?sz#OzJx=KMFqzy$}rLbA0p6A+7l}B`-;AQ zjvvF4kQlF6W?cdUXLJag@TI4)6Ivq?DY%IrdKnA!dDVr6!9LHD#NC{jJ5FZp@Q5OU zAqtFGPzKIO&LWE%fZkd2yZB$tw0Z8hY2=>AG~XJB!Kk$EnyX|Fw;^8Lo&MnnmN~5& zKAt~%w{_Z+>R7v2u#W4e?H%2M6y1-Cem0)>anY6K(NmYUttsBdw_=1UxHMoOoa?QT~)7;;E=$?-oU4>-AwtvP_%q%(sWV-e1AYx@S|;W0`hk(P<}Y_bi@V*F$iq;f-d zJa3wRu@)Kl3bv@`T65;c7jN^YAt-qis7OX(UzQF0aY5bTeEqyAYgVlXXSAgD$lQQk z$=*5_#fn;#b_EZdHtL4t5i#tq`0E_xx@4L_)m~`A&QVDF@@B@qEhyoZxi+|T&{$rY zH|DgG$zQz}Qh=IxtuaI6U)WhtI}cy1N$_^i?nky)6TdCuFz<)|f9@r){;$09|8F`B z(vB`)v`ymTj$WjCUqB{SQZ_ywX4WrdFTSr5+kce|;Q#O93;*f--wd<;Pi7}x)-MGI zWpycS<}WOixgx;coRpTC#lqT>1>oS|=mv1Jc64Aia{+i-J2E?&St&4M@j21 zg$Q=8{|rKv^uOCs{t}5$bhkJ8l70BncThEVb#!+zHFqWbkFtc6mz#{*mqGLYb|%B| z)%8m~?LS>*IKRsONi$ac58jGJ+VM+Q;y*p4xxVWEv%&J!Mw}o)76sQ$}ZXRZaO?Pplx zy&lYWWHX#$0ix?gDQz=%p9PILIyf>mesaL7Uz>{)qZ6wfbAQ=B=@L$VUu5E{NU$%q z+TWJSod$`*SV-?v*j~~}-rxLwei3_5BdYqABV*fGTR_FETzooSO&^k8YT-P7a_so< zJr|2Fxl@Sy(d8Tl^8A;?XV}j&CRV*m|3F$)w>z^`>b?UZ2=?JPfD5$8;d16ewsKq(H-}t3_9(d`Uch6 zgRztliw7!xhcAVcx-vMO8iWfL>-u0b_`UpK#$d@q-7(cz0wewut#r4m4$J%2$Ex-L zT+5!P2RT=`k zEzm{9kX=g{TT$hol8?ReX#tf)R(j15QbK>=1m&`kBb)?R?L?MY)nVqQekNn)JNXzE zS(WT@QYbp`3pQ};kj?if7t&n!NuHQ{TRbB`C0fJvFy3}Dx*q(gai+=k{-@49m47>b zB-yjR=Vg`LSatXlKBj6#LuPgHswB71tahrnpxE7>gG#h1YR|Rrk&2TgLh`w@&fYGG z3DU+g_tDV(V3DZ4(HH$i_#)oYJwp=}C5zP7YQx%Umb{b#l^{`*?#NT)* zB`~Kko_vZ^6~_%R(&e-p{dB2c z8~V5xEiug>{#*~<+xkU1C^AB3tly%7M6%sv3K>Kl$J#BK)-7yi4RR7x1U`1zwwp{H zLsfqqKfZP2-pTx*D-;*^*A4hTlw$tBu#+4d{~J$SjzQA6%>XN^)Z+_0)4bG`fMPH1 zT+ug{mwZK$-o&Bu{It+B#Q;_cKQ!a7K@ShL2Gt{*Yf zle<;!4USePC8m8&c`6&|UTKH1ouzsSJHdr(D+y@loHchNHcO;mV)f|nUpQvF|C z^1q7r{C~QHjs1UH1HWA25b__Fe897;O93Yt%7F>GbFz#t%GM%3S0rr8amRTPKDsTa ze-!D0AA4Qg>km=>=y0rt6ZC#eJ|Vs8(>@2}P8og^=^xdmR;!7H$LVjy_Z?2Mx=7>e zU0DN|XbgJapjEnFA@ukz%%ffC+#GOunJT?qR34LiS{?=%LlU$ZyH9cw2KL zg0#=p9R340PVM6mH9h!EDUqsJB{^*M9^TJUsh1v2YqC;8p9`Y$bJ25;ANi!?v23bP zH$r`ZVU$Q!le8E`);lsquF$ebP==mLMJ@#`v6j*(fYgR{y4dwPeHZ%`&b+WdP+*KA zfwEcgu}LnGifV+`TP%sZ*aEX*Wscf^k-LX7KljvWNug8G@K;y7#BlbIb*(Emc8y3# z_Qr{Bo)H65{(m%+{&)2xcJBW?#Qy)>6Ks53Y^?v|xywe%!O6z=zwu?{oOQu@r7SLj z`Ca%guWn^d2q#Z`r{)OyPMQEIPMY)$9h*YnFJxpGRRe6pAIE|ytBo@IYTce-g=z(+ zWGPrHhU$f->KPmRW({TMba}m~sHErVuFDCt!Ux;DOYe`v!0yjy3zuo3$A7o~9+@pW z#=%g*W>6!*8V|M9YrHQH2f$=S4qAA4ChRg@Urz$T)pMYXKQ9`Z6_%oxPwNg;PZ395?BNS-=ms$1NIcbyq3T+R2kCjbWwyOjQuSh(y(lq1p)^`x1O0r zZ(v0ww#N2tS$;jN9vy;JjekQt8H=MD7qPJk_;xIi7;q*(;iQgdl3^HgoRn(IW8`Dd zb1V%8f}YUpvDj>&ipM_d1YZxC?(J??U^ZZx<~ZwbAT1fdVb)n^11%K3ue47m94x%J zXLFa1ZzD6-n(m+ScvSVY9=@Y|E0lGt0RsmwGlmq9J?32b89Qn6!n@Gtnhyqrl;kAz zb1zXC8g3r^O6gC^;xiJ7pJ661D?*8tlg)DZI9D#mUSq}~E$_;f?t*h}^+leI=swhA zmx1okj#iDp%XPUysg_m#)L;>rRtV{aXp1R>`msYfJOlDk{gnW39>02ImRVv${D{@9 zQM>U$3hM&}qCjyv^g$B6Ir*_1xSVOcSd4;FUE((!@htDT$b>6x;4eGkI{m+nxb*qN z)P0;8-x`gDbC9a*Ao-1vs=}kURaZuBBr6hgZ0J=dCsde1u$;*37Ru)wKeI0zYGcu z6>_xNyAQi3^p4(VUJLRd$3o_>Ud3qfm}7vetzKyIN`^Sr=bu%!PaEBz$BnD;ZE)E2 z+BS-LAG)jSR|)zEwj7r}^gZ7LATLq^kRJW+@yhYA4@*<^lqrs$Z+fhUGX=So_A|i)+3r3pVZRcbm|Oq9SsFJD56fY(w4p<-e@+6gFP>5nWfqy3~byYAytCsvXXme!X;h z34iFr3SWU5eW=Q%JhfgAw9QP7P?C8QHymbfBbD%_F44T1&5gU%o09o{i9-;r(aB=_ zVeUJ1xQiAxnqe44#i*5+THwEMs*`?fozb&T&S)_7n*FO-;c25TCpy7~kEDzB!1B-x zx+OApivD9G)X$IR>QI1J3TA9wRd{Wj57AOLr5Nec z1Na+kPWTFNr62;Ghb!|DdgqJ#&+@vr;_kI7XAqN#;?5GhSKkHxYVQ1 z@F-;KCk)jtaT|Jfv?|T-@9)qKfAO-ylV-uTsJh)q)*^jX#4kc|5+Cf^@E?M*z2-@J zx#~2$;PTd@2-RZ*d0_PX5cnAU(N1CpcA9zDEdfeP$y06$FH3jl$1vM6by`nIHq;nT z^~2-agLg*7BE_HJ6jza#eFjb$8xCHC)$6M>ktv^{?>%}}7;-*RFPJT)!Hw7C@|WMe z63f_!#p9 zyn-yR@YxiG=TVB{e=9N!XLdpl@3xxtusZpSiwdc^@X8MqU@I*3O@o%5A|yvyj`&9z zHRR=vZ|=se)MN(4?at$`M?FVN?`+--DFi7Le<(>CG+=d4N)rS?Iiib{lQzn65GgLt zlE4$pD$xyF%Iu!i^j~*l*an7BjyTwqz=XaI$_%pX^#@T{Gfc@627rA+^^jtpS!dXh zZ;{s~v>s#n5Wj!(S9q#|Gvto;igh&tsuG(g2j%_~XN18Cq=ge%t~@E373zWeeQ;^=sQz$q^1plr`a@{4uh1 z_+7$X*`301o1JENaqvrj`ePom!21vw;s&eJu;{d?(aVoJFTW8rG1!7u9-LxxIGYcJ z+1gjMn`ec;F{Xz!=4Rx42r>tP4Ow=i={vH9G8fb$JNBP+-sm#N@p~9{jiJ!q*)nr% zZtTBew_L4ZHbqjYhNy-(|IiiTjdpmL z@COsL8HWaeygvk$I%VGqo^qdZo3wolePp=DZ1+$11D+knw9O0IWil(9=vwJIQqvbb z_NGcf&MV1|N~36i=owl;Wa_HA)Prv49+#K{?nHWY~f zsu*;P{@bf8rwrPit}Dw~S;0Nr_j*>C_HD}@$#N+2exWNh07N@HacL~r5X(Y#V!UOd zj4}%&Y3d#a84~!fP)F6k^f~qKm(*t18k6pw$I;$pk%qB!l8SzRX+&wEJhc&agcSLd--V1L zj06+Z13lG7-@4=>XgG1TgBR`QZuvs1NK?sS8-6B&7n0L{PY)S1*_$%`CqtNJrgW-- z@BL1lYusCSc*-=gP-}LIgY{1?d-BflRO{Xck-95@;;J5iTumlZP{DZhf=6FoICi>h zcMz!8^GzmL!}{P}&#RxaC;+02*A7|(Q$6T+`^&ip0!e9SJSS(SQP0;`9l6tVh*bd) zwRr^%WBP7YJ^8&aj;A~z+1+8g-Ejm0C01py1H@3Y7;22T99n$IxH0L`5t`Bcxow6@ z^ykWG%tpf=sa>GQ!KG{I)?k4mfW4ly-~~Dv4{w|@`-#$92zjJF^Ft+!T1Rhn4$=;) z^8;K!!MJk9dCmpXq7te~Q;vJrXTSt%u}b@y6gpUOBr@_tC7gOykYC%((^*{Un?hYq z{?{0*xCw3w8THI#oOY@!V%-toqc=WV0+8p`C2fIJ> z19)n;YL}<)u&3#!Dz`4`LMZflAijHOiXf{n5-)^0UzrkSL0(wY1<~!@hl4Zrx$JC@ zD)Scf?n@e~BSOJTGqVcBFhA(hG9XCA#ootzTP0n?t-pW=0x_hcwS)Ilj-PY-_pg5r zn{xh%!S(Jv;q>*Qk%@~r>1ThcNBm(jXmy~SO4a$H4W!bZlBFF}@p=omdX1HiN23r~ z5yTepWm4B1BBP;x8Rq94U8~U28G{Q?uY(*fU-+6uEVw}98N0hoHu&I8OC%Qr4v#Y@ ze{+$idZZuh!V8s*yFdzgo#6eLP^&m{WpzlYP;7s>U+G>p7P28F-ie=V>%t`F?CqsCBzD_50W{}U8wf{N`7J@{@985y*>n8 zl7+DpV*;1Pp)-AmIarVT*MwWI9_cr3TQq{nS@X;SC$fuORiM5^a*Pta4yTJCji4#x zmtU!IfBlX~PbFhnJ9ie4Hs6l!7<(d}$`e8RPiw*dw6@V!=ZeJOZt&O6SeROwBq0RpXk|S-;ys5N5gUg-v2mQv>XukwqvaI)q7Hu-WIlGKplM~TGEG-I; z^guZdK_Muh!O8()rxUo)oJ?7%vmX!CVsNbd^KYbBI-{nbW>TuZ`00#F zlbP#tE2t5Yx-u!HBPr&y#dHyhimT{3kR?~kMSFB~p*_@{QTNae@Sf?Hmw(!gLW9*{rLj!B1FDqCTJlyRONU#_HBd~mvK7Lp_6BpPXCC6qo#Q_Kqjio}qY*a_lQk%I zt&3@56KQ@$6k0=Uic@tZ-tCE0RZ_EfBdFz94XiCiR8ju;!=l5yN4ng|qgV6tSLF*X zIf)u{11S&8Uy_!V)1^fj*hrr57zq%C!@|T_jg-k0!%czU5_oxg+DPM#Ui68wsi|z( zDka-FCImD$cNu8=IFIvIZe7?zu;C~N+bhi0L`FdaB$0J+-Q^;13T%ldIqQX`19hA; z5Tj9&woxsON$;!Z%i@}InM|WX|A?g&FLnhUYf|v1-&Z+3#dgQ8>2^LGqXh15N}gv+ z+M{**V-3zT>+N+}DT~wN$5YMg)caDf$wWDDkzhM9GhLkHGN^PX=-9#n*)31@-=m`R zM_pyTY~*e8Y6dh-DQ`%G7xILsa(8C8O*1V@hG@b{Xb|O4taIBHdZDA8*P4t~w9=hr z@fxx|`tdSh`G~QbB>UA=>rkmU!UErq-*>gGkcyIc&D3ze-Q?w_${~{>nq6tWv0f0W z2xDOxXe}>TdD&?BE+>7s9nM*4M|+$X_Z0P<>29s$n&*7nb!UT@m-DplXjfD2%B0BX z$Z0L#IG~z5Wtrt?I~7@s{irTqja;&_u_nilY;iL-`ZFBD*O2cIZ-PnfDKm=X+L62$ z_8hJIQ22=24G>d6p>mUd-CMdqXS7|7F5w?_r5iWTWJI%ovm)o^6jI;63+j^lsc1-l zgP3c$r1bN!d{q#9{G~j%^q3{;7Kh3?v8&2xK_N-U2JKc|s8+3%IITdlUec866^se_ zO8k93HWG?S&h&?ipNqH)d37l-Ib$V^>jT+2BzPBwoDiIw>91Qa50T@u+yun4eXhxI zWe;+y@zaTYz&M_cq12Ob*DeB#Z=I8h!lh*I3!h}v=-B`#6F0e0SeuE7Uw}v9;P;NK z0}7Z1@!htcY_+@-#NQLGPCAc@(Uv;YUGExTEu_@|3rn&KNb|wf1_ppPX=n8`uGXUj zti&7ArG=~${j6dn$V3|GWDCEPTMfsAZ8x_deouH5?pvf zjoDN3R~c7rrxRAYE=9)QVlQxWs${*q8Gc8x7XV^DSt4bL(KskOZ+zgIKUPV`$K zvm+iXh8k!saw73SX~i$F>=K)Uf~DpPS6>MhnLNeJ-x15v-ND7MLb2*EiuezK>v{v{ zWfCL$glD3>Q~*L@lFia1^b($fqxZ~^u`jfa!R@t<@jSLHUD@=M(Hxrj7}wyF0g3;T zG@2gFt)43C(Mc3J3IM}YEfKdezI5*i5gWAiBIzavb9**r8D|iF;bQFid{nmv9y=?` zkTio!qCm)t*;I_kcxn=0s^<$X)BkV(2!7e4ptsff%%`{Ez+=G{z$C~uQR*WHrp61) zp@66xTo#~tpM_I|Sq4LKK$LgAH&BsZn%0tYgJ&f#dM z)CTjmWPM+<35Szc@`%Q_2Tu9f;F#5!yu3bQBr}@tfrzfUjnH7vT>{b$8OgP9IHiO? zZl~b3d*hA_>)ey%Xf2I&5kpbY(Z%r=0QyT5IAJfLfG%gpqnYG>C*I&7_yJ$^(1I@U za^)2cvXnEN!Y*X3V*5E*vKacd-~rZtcU%vEm%K3!-4sR?tC55kQkWuQ2diKx2o)L+ zjEn*4Yp(+U6Gl-bNsAdQ1WMp8SHA)^3ZDi4xay_Box_E+D}~uQ30lRS8gL>ABf>RP z9Cld(v_TK3;l|x26>T54cfqe;9JfcxbX6{^-|V3awYSC6_)a@4?q<5)w*kTwxeaLu z45}^TbE<}m_kGSHG&~wstjae;Mw!~`lO61ye1Je=Fak2v;9tQAs<>sOmM%%bzgsB{ z+jr^2Ajy@3dR<_P9}$X%O=@$@imYGYcu6Hc<>Qa3?zC$c4ckrUGVhpHLP2zh;Qk0b zj&nR9d>>#eU%wBcz<>TEX_yl0$Q^6|%I+i53-rp-sd7*O@qjn3hp`v@01YnY3%_{m zM<|~+A$un=L~)>4*{q0Z>qpFtw2{Oa*9$)Pd2w#m+E^E%oVrv0 z&}C?aMiuk=>k-JRdX?h=++nw@8)0H4O0zq;`(!YhH;{s*;HnS3FoFT77iwhf{3$U? zV$g^js3d{VCa@kr&%f5}0mB9vW~2e9=MikEJr@>#aU+bnq1d2zY?-BFf}U;`zp9Pg zh)odxTC#{Diix~~a+BtiC(jUMy}sg!!N1+$;^wG$<TS_}04IB>ZiUnqv^!<0uHJSx`hv=Mes5YzmWs4V76GZFkJ-}m(ZV?>T z`vFWOY;Dys(h)_N)a-MRY`RIhBNDR1ru% zxr8S^xm!{>sj$5v!qM2bAK-XJa3`E;6gv3hXhm{wrFn6qk&wr~X8zc*tq~uG;2{X9n{&-34u7SW2ds6@dSIveI&f zwxDtr51ZU7S=-&mOoT3qsVN%lzrrZVn`kRvN#jw8z(cA`*|AsV>Ubd*;jF%3gSAL$d z)*l=B*Hy8l>d)0#bBL-{*afIn5aaZ0Mg_N@S1FWVuL>rY*Nb!+O%q0D?&_3~?!oF9 z5{+}TfV;Ljz7qgJDSRIl{?pcLaa zKONx|NCXo?s+wM{doDyw!;7BG)DA=^Sxq5I+6YI|BWi5H#|CO5+Z#)j1tAp>fzppw*U+$kLKI-Yqy9k+ z_~zh5e)kih00%^O6$Ilf@`Q@=lLU}3AP!5)7;OCFdRKynC_&Z_`!bd%!3IQ=Mhk$Z zLKVXeF#$RQ^Tg>S(U3#Xfdgc5buj~wDJ4qce25af!2^lPUkeyItV|y)@Hg5AMz|wo zKYf{~Hq!4o8e_z8Qvhc_ewjEga>e}TPhI5U0bC#kZ&gS=?DS83AO?W2->2-yCs7hB zF^DqbrxW`ESx)ek;|!Q3sU0v9wp85zh4*_1W&bfN90)NZ=IT3gwlREvWBxbL_l&F$ zNDF6Pf)cVEhT!Gl)&Z$L@Cr8v z!WGR3@fNM64;*;t;zi8(JrMGICdLUaC)SCs9|eHdM6QnHx%o<#BGq(=6EvjW)*W zj|On{E1-5mr1wL?vV=6lvVySYjb;O{>Ix>IE8c-buH`xYwHd+7zvwUNR z4h}_U+(5OH+zV41F|$+~60?LCgnrzWbQ}3QwOd~*tYdH`>!AhEv7gC_t6vX<4{Ytj z2CkzK2RRP3qW(i(CVxZLPZvhq+Q0Ix!vYc2A%Px2(2QLeAV3>}gQORaTk+OUlHMP% zmqFQRA2{J6Ks~gJpX;a>z;oD3sVDvom@R29k&U>kZ%@emBz>Oqfk7}J-(!)1cn~rW zrSB0MAI(=Vg`x?k&ybu4CM6-!Fu)ul6~((LGz&SL-H|(={H=7tV6j_=z)(P zcs~~Db3lIVg@Anp$-qALhrm8MKS2rtujIUV-({Zg1cR>*35B8J$v03$#GVkm5J4=U zQrNsOgJZ32up-nC_&@W3KP`FRxb8^bknT#1!Ym6=K(1H3{f7XaejH0g5ZT7t&6+X)-^AT$v~Ca2XI3@Uk}=b}Mv?+z$o0I1u5| z_37IiGAR7&^)C7f?dwNOk>mTuVL#z(i;R9MZO6mLyFT$eVf6P5RKk9VXOIc@fkZ$o z$A=)w&bTWzF9?t&Y+lGTh_zqM2@-^JMcvQBCy3-&niu+wH;NVMlJrgF*T-kK;^+FO z%dd~wz^ZwXCmjCwuQ#>3$Inp3z)M^H_svhyQj*EzyI2Xgm-SEa(w<58mvy80V@Ky- zADX#}fzhXTt!;{d3`(Uv&s@I(fTwp9`lTe#MrHFx@1L@zJ#T^h@1JfjpZvc*dN!3l zw<_m9Q}aIldnM25-PYTeeT*C`(sidj$TB(mA5D~9O~^4#7lN3*wh3^5f5|qgbv`OO ziVLhRc_5y|#}Z>5QJwvXZvFSUQ#MHAbv@n1zVs*mKndPuY^*19fB$5IQ%=4II)`8qKHgPR%s*RREyUY00xoTrc8Xx} zygI_qFuZF)AE^e){4_K+G%1drK&W!7YVMPV5Y|8wV`yIQW8aXA%Fnxym!=p@{FA_@ zuBA^{6D=9Fy-|n|d+4K?Zgm)T{wreZy;MbV!jM8=ob;OTKB#+Ap( zM4K18ovl>J&+eySF=#*%n%>Z;?hzZ@{B46_UUh5rti7B+{FF7GZDulkZ~ByKsQ6p& zbMOQgNy0?bV>A5FvBA>)017#Ow9j?7c+CpB+}%@th;}d6Sc8Grw#FgImJ1b~5iUF* zI<}Mk3KJvq?CmRfw`B~zW@#+iU06miTA)I?2IPA0VY(vnX48ev@`^8TA}1!^M|>NG`Y z_L*_Y7FxAvYv`y>YJa*K=$mLX{&BQKB zPm`gQCrK#j3fxH8zLAv_4G@MQOJ(rL2+|T`hn|z8y~4?59b`N*girQ+aIiHtS*Rh? z-{BXl6^wb>)xM#%-$<@QlR&@S7J@zduhpB5Si66i-plai5u5I$h&r!v&yAa!crGlh z+1j>R!ys#;5Ux-kvo$!XjdAwSX>fX~L@CNq9WvS+W7r2*oJlA_%;m)nC^4+I6`c17 zfMDG!U3ysgtqp%yh)TMVOae`OD^5X093C&rvm?9{vC&O4lT1uQ|XgM9p{@i-d_1e5H^wv9#krT9y zccLVwIFfNRu`$2$CwT$&JZuVI)U9rMn-lZ6i<9D5Y`3%v%geuN2BumHlFB6ZSDDJ+ z#TRqAk|ae3y|F5MmafF)7A(Vx#)zGzyu4(+-p4(yPVNY;w@e{+Nd)|bTionlgsfRk z+HjxQE;~fF5!G-smNRbO5{f)xIhrnbCM7r|oe|09HuBw?~kxQ}DPkUKcnI(k< z_-R%s%v|n?k6b68S?cq0rX3{Jk#6IrwWxhFKcFSSV^*{?L-nqXM?%D*Vem!RT+xx2 zM`#Q&$RIlFpD-rKM%V>Vh>7jXDKx5>#^d>4n}4Ak>g*5L2>)d2u8&U0+W67pHRcEJ zk8uSJL|VU@R-KAU3G6qRh2SDVzKa9?_f8@eCuc2Y$k)zR~p%r1r_Y#xosG`@S_dfghA(3hF&9SIo z=ui+4LP2Sw>1A~HkL7B$-F%z0&Wm*Vd?zw-CQyS&>0sd^LuJf6W z6nZ@Z_F<=X6oAMfpj~gqfdG9MtsXK8UlD}=gZ(r|&XkC~fO~DS>^uI$`DXX`R*`X! zSB0*1td#>CzTVukty&`frmc&s1!{DkTGAP&TZB=vP?YG2g5H9Wg1-e(g}E{8F)o|o zg@eEiek;CMLVBHn3U&@06K#F+gSuH2`(06X1koyLWoOLTs@*E?xGVYG{K;*wSZ*37 zJSqlD&MHGD)TML`tTN&@3GGtP5+=vEyMbxZ8~l9kMLCEHuli@7TSq6_Nsb8)yM8A& z3%b@8*uw}MJ?3VI#xiR9^5(SqrPU@mE9In<@8f2b*NQ&rPT?-$F9}zsQXb0Li~RD1 zigJY&t0s6<-kr@ww*6P2&rX~^!f*?6*_3jXGFIBA>-z+jay;`*DJnl<4g>%(X zV5btvNwbou#Y4fM$gJj}6qiovy6^Yr+a#HF+}))`Yi}bFAE*hG6%Q;=2v&R{c$b6j zeM@8ML``QX>G@hGj;$1S)73gLEn^n#xjc8h*s25)BfUA6%eV#Iaf)Vaec*Xbd9&t{ z)7>>%hCm^=D{{;SxSf?mq%9P;5jMsjNc0X}346TZpZ@NA(WtGKc1V#czdg{Y9t7mz z_$*V_dBSpJioRHpJdv7YU%Q`PTT7>(gRb_=%Xe;#V$kCK`s|*Cj*i1JJVoi!<@>VT zzc1dszT`h}3Vi<_h>M`VSh0L2JzXX89$*B`ml(5lo{Uprfjk?Cz(DWgLeIYwY=cV2 zMO#6ekMvG%DG@42KyP+S;)vbfz-W$@{1-CHmQgPK{^PDxP6Vf|r7jZq!}a@l$$g1p zvYG0wP-@I&@JRyKYVePbX+dnZ-Fm;Qdu?HYJMEi0<3gk#^t(821nnR5_RQ&AcSvxq z$Wl{`fBqR){-N-lc(CD$0b4m1w!yaGOT>6t*jvyg?0@elU8)$BC#tT}i1PQtYFiJt zDvoQ|DC_3tl(NOD#E|%=khfy+)2bj2oBYJ&$a1p=5r;}Pci}X~411&Y4q>NdyA4^7HEYOqkzeAp!p6p zppkY+ei*j7kFFnazp8&oSz>fy?peIDq3!Anz=N&*dqT{#N+n6kM29k0O1@Dx#Why3 zilUwoeVV*@B1+MGg;k*wmY0V|*-p?}pk$rwYZQNeV z8Yk5*%7Dc!)1k?2)nT?JO`o7+(?Bf>}5`_Zw^zX=W z2F>&yiGr^Ws)!^Dc4dIE8sYjfVu_eO8a zwJ;yfIM2U5KunfO{}yK2$WL^V%G!HOH(AnZeE`w-C3>wn932%W!2k^6o~Oc)Z0^8b zk3v7Nu|X?{&O0^gMWtY-j%~43aT?y;Vcq#smqyEZ6n5TFRv@`RX-nTGyvo$ev<`w& zBL}U;q525ZkPsUYzwmY~J;MJG|?ao8|wke|yv}3wRd{0i^#`aPB-(=`X4_w~N`Z^0Z^iB1{~% zr74V0;DDr+px{)mt%)|sqR!$ZVQHksjPyW9FIsR2 zAP^#_ukYUfd6{?bLiZYA0DLi+%Auy`Y-Mis8V6GjoW5sMIjNm`B z$Y!cq{gq|mi91oTOtpHJg-6RRhu)brX~9}XKgjJ(be318{7xKilx;@pN)|)GjiZm7 zM4H&%F#r&cm|j+LI0=x&f$woVuyzYqeDyEwYQz`7|0mTrq@Vwi!vPecv_qgIm|2^g z@Qe+UrbSw>S_^`JJwZ0B_xstMgyc{4nqRxH%j%=z<1RuUW^Vo*fLXVtZ;``tYAjaE zM@My?sM){y5Nn^n;p>f%Tr_y5OvP;u{If7I1@Bs*jQvH>@l!xq0}43?zG5cQM1T?a z=CmDUMDm5Y;y|Ac@5v)Vit~Cr4noMo_3Bo?=7q^keel=$e82QpC+~D#6S=w;aX7&U zh-zs#KX4juV!5z<%$e=Tib^ssIp64Dm&5j-G?k`w^tKw+Betlra3J}T=-Z3llOr{A z#w2$$q{h0^r+PP61YZ=ip0L(S;nedeW$mcq`ph;z&$U=&HAJPseVM24HC=rQXQT6Ex6929s7siKQVm{QSVr zl9yPqaw)uJL1+*&hF+L-31y{HG&5VZONtZ?%6KVfiHwE}5p~|TJ1_lL)MuBG&gp^g zTr5c}1G8#|9K!0z-4&}k=CX3p%5nNa^<(3a!;-M4^(hR|n5%1o{?+*$Q_HMj4rvymtaih_~<0idAFm$AT90 zIU3k4NV9{GxZx@u#gW^Zl?neESD3waaNIb&lX+@;a7iaNy6 zV0G^z=i9kzg9M)&@FH8=s{cq)J^9b&xATqoLi8wAk>M}~9`6$(S3&vnp%WW^R>i*0=F1}{JvY^oFzHIHi+0Bxv z{C?Z^p>9mb#-sT>(mR@AVWLdk49O+bp)&d5AS$VJFN7Uw^qxKS7v4UZ00+uQrjIoD zxF+`-dphUpIDfdf-CRMZa!UhW!m~$-ppU+T`5?9yfg1~BV(&dx`cRAM>MxV-3wg?a z-r?R&GP806dn(;*!cSMwo5R)nA50ir%nEkvMBI=MKNDm#CYM0({SiX8PBjX#;#9*> z$;-QN{LcUkMOP1_hFtsaOFKRzeM{182cga+)nS3d>ggwzN*HvWYa7hz^XHL6P#&@pl)QF(|yX~f#CZ7$~( zsgHvQwFbQRv(=3)6E3<;A4wV4{b-g=4p$Cs<#g?P6N%}>pC+exyCbIq!E1GySo7=C znf^mm6TaEW0Y+co*0WLtx68?7;oN4#p|ieZvgnnDh%~9Qh&}rrs>* zmH~Z!O1@$phcI_A{hMhpO)zg3i#r@OC6&O%IjMvDG{y0dgJGnO*!b*8huiyu)^cMe z;pvtskJuk|Xqe+>ewbUUcEc9-;lG?9<3h-89XHL_asQSmu^&8#w^V@?*0SuWG*ia| zoxz@v=OP7l-fiO$<-bRw>LR%LoLZ^#rRzTL&sCQ6t}pX%t#pByT=%eX}YCS)F9WUgF4w zotDp@fa8<3&yaKbh#YV{gaHTL2=i@ZOm|)7ZTA#Mzqu)?O3#cE3^_$R{74G!NH1gx z7!n;UH(H}jU(o*q_MIn&ZYx7aDPhd((kmUIvoglh=_(p+pztLgM zEzk3EcuROnV$)ytIicLRdd^wtarMKP?bRWRarkk88{Z4HJ)i~!bDzze9ja(|eaLL+ z*hVxWTU#KANU-Z(6V1zHCNMZ-GmQVU(NRARu|ZF+k*UNw{7kZu=KTCYu>)70T?LLR z^J;}?0(zxg3NSXu%+c52>y5YdVj>7=WzVg%^b9;-H86a|SY0}IXmRu~YoAEmXAhq; z@5m;ilJ}UFn&s7S5x-R%6Wgy#(v%$XZ^RO#+aaI8YE~_Z=022lV8jwRlr>Vh&*=;i zXgS+gIGF!R2V4*1?=Dzke2O>kpf3 zb#9{%>wYF}7vB`uB;OTjLGaY;2U?*a~n}SeuYqsT-5{14rpSp`Oy< z^K6jZryk*zY?aDpz~wC`LAGs#F?Eb8mzk&4Y1=@9Cl zB+fQyv1=`^i4UNGvLo-3OJb{=XEkH15KJB1%WmEB*qpXh@(o2*{NpS-+~Z~CW`&tV zaeLadBRaBLHeyqP4pXut;#|*`J&`StB5y)b-Xn@M&x-Jt^m~LJf8A0lYg+!y6P!FX zto5-(IaMlh+aXdS1Z9^gHbKvoAvTa8*K4Ggwd2L>ELr8p&RGTJ;|&JK_;5hC`EXb) zWdDBXbX})Mf2fFRLGq?o45^T>6G)B7t|yHA+un{dwW;;7+(m-uC!Q1d3{juNvc>aY zXW(&rynLj8+jc-u>zBdldvQrYMvlsX$9*-_d#LNR+?~4TyR4-1OuE}U3gH@xk_Zu< zAA@{IxZ=PrH|3%>;hk1KOGg0jAG%-C)+nfJi+?IO&$+l-)s&%`rHJ==+z=O&maZ71 z$S73l_Wv;U4ZxLr+q;uwl1wzQor!H@V%z44ZBA_4wrx*r+qO@vm*2hj)vZ_W|EgY9 zpYQ9v_u8vg@2);oy?epqdD0$WX>@-5a$8zd8aucHLj)64t&k*~1ZP8cMeSV)d>_`$ z&rVq7v0hn_ZGQ~{he5FxY^0CaMQezMN9Ak;mKBhK`?DGv+D%(JwwD3Vv61Mo(F%Ri#GPfIbDxahXw8=Gvh8|~522Bo%`x-&un{gp0o-5=NHS8G z7`Q(*ckE_%X>NsjOPUY$NS?fk0a6H8f2M)NIvpP3!TYXVtRDs%yuJiV>e7&!^muLB zu(~vJ9chTnA9Vh$v+dz;OSvJQsmzQ`$R?$_fR;$7;*|+Fqw?<~)`yJJjSQd6hR0+z zqRbME#2kFjy8Gu!^hKj21d^ z9a0;N5G}qj`Q#RZ{&PNK6sYp=UUu4AWBD*~)LM(znrwP#c?+uw|)~ zaZ4;IN^CdeW>QjJ-@Dr3hU!&BXWeq^q``+3w%_mLhW9TVnSYcew{)t@R*OoV+WO1W zXsXNyzcHvKemh2z4bmZpbzDPDcq!12+%O)^E)z1Y5`$|-W;c`pzZkst0;38a3Njyj zP?moAfW7hGdcVA*x~!XQ(bjq!m;_@=&TkWJMd$5vV}|($j^=pJ3xkU|3vmZ?8oW|cD*qOr-^#K32KACiTSd{+8;P`~ z|E&uVl(+t1Vz}Y%jw7ClRCnMcI3HW4u5Si8)UdUWKx^8~d?gVh_TrD^uTCf`B53r6sG)dl;hV=Z<^Y~u3a02b>6JAmOK<4-&pl0*xyz3?=g7rSTv%;?=^!*FkU=aDTps(eoF3Iejg$sB(6;6 zENmd&jln3*;S#SPy`*j}8&tabR)-%|@4aX;ZTMn2ZAdwOm*RN1Zw#wc#7$_?hahfp zwPzH8IgS*J#bi9O{8jFWlt|WV!uj4$KD%SQL3?e8j>NcQ-NlaQko4+yLCu$V7#v7g zsq3NXTD{$3TlX6+6_0{dy^L;dICGWo3ejejDoD9_;lw#7S<ghEth(U4dp>&RfFO z&0AceOb?0L^j>q(15b}GELGX+ZVM;Uz!#V$nYQ=9Iawkmwt_8m$yiP5?O$etbnV(Y zi#wpsSc9rj;{s0f<3lhwVKXLKq_V2%2P#g19TLjrjWk-?kf$mO8wTR#oEQrbq^>zOrsI|sG8pzdfY=DBF8bD5iLr<@4^F77RpC4ENx6S z@Uy9!`4$tCao=>KA=%q0EDt7@_Mo@S#w|CQ`bJzVF#b+33N9De6Mv;l@}AW|D#r_i zffiQ$8tqMrRXmw*VKWh=+PO(kiUgAltYm!kHlB3M+E&n@&3= zOiRVM?BU7eL+m68NjM@V$TmSh-I+%`=}cepk%94C2#1me+%4kqk^_M^)aG?hWcLe` zo$k$ybTDMp#l?!Vm+aM|6;Fdt!lwI8PkOQL+p%Urh?GM&IY~jyAD=mZbi+4PQ#ZH+uuwp zm3~|p38^2@8q#|AaQfuBc!JONu&9;~i8zc%6DiD1*j$kYDfP-J^%!jySEnZDA~vL6 zlxIT+RSenNmH;CKgFW;#ws=2E4VIR`Ol9%Z&hvum6-2P*XuO{*;tKohh=K)KHB5S{O&q0l#Q0e*k?Ktex(xaLS>Sqj1jAMSvBtcTIK})%1n=bRC%q7t0B&f!skW z4?Rz7s++c^_rk%|YL07Sum0$|FUQerHm7)MB<~d#m+R?sE}MMU1JWjueD8tRJ>ig9 zpM7^z?}+!OD&JmU?ISbEGrsEUpdd&S%hzgT5KW>_p|ge8^;Tgi`4{$B*ZAZhA!l3D zV+C2MhHBu@5`Z@>XW`m=I3t~_&(wXMZA53#d{UcDF~Kn=8#F~HGwhQwViVYBEpd!7 zT=cM6`QR+9etp2_12xDWr$xU>L@=GQuD{h>vceYE)Pqm6Um+MS`lD}Yok0bu%(aH0 z_%uRoeqZ@0t)=We*@{din`K*7FBY-YuK)6cpDa^uv*r2%Fn&LqyMozZ56bT+x=ePf zGu)XV;%(Y3-7%o2mL-15I z@0ztO-)W13gu$cvEYxFgebbpLDY{kVR`8)MP%0-DxiWC7)vvXyHLG>21vIv;)~vRy zHmrVq%Rs-PYOFmAB%}^`E2?w3P)WO0D=BXDDhojWBk4ELK3Y&jD>nQI#Et1TU)WCY_ zV*_0dKIprJSL4^oyNg>~;0UYkaPy?gGFgyk^K;3S$*>6R2j3Nv(QmR}OUpJ;%=SN) zRD^!Lp=)-^xUlf?%v3y>3y9FtYAK4r_|po{)5%{;$Gg;H|GFZD!JrH4jV+4FevZ~#=;Y_Rq zs^i5lG(c7%3wEjIc(Q}F_8N^i)r3O8Y3k!y!-!7$6CSp3wL z3#vWLmBQ_x6yqs8PxSc~Cns$zI$ZIguNR-^Rc-AzH2Dqekfq0E>yF(~$)WzPyK(J$ zvPi1ehqv-SO~YA?HX2R`=FROywi}9DHahp?%8`(#&dVdeo(9jt9HKT$3MA=H+p~EwfZdbl2g)w+Anbakp+M=7Sw`ysG^j zdpv8SZtC!Q?YQ?5Bq2_(?;$G&#GoxKf`5&Lx_{HJG#HSRCfU$Wr{bTWBZA=eXG%z{RO2WZ1+I7-)1Yj8IP71&#VH&f$zcX$YCFQUU{Bh-YYrioc);yAV@nm{7Pt>Pj>ora(BXMTy>$WyjuSvyL*42*X)DVUKfq~ z8?0T?L`^UPEqueA*>=w=0TV_^Sw+Q2t20HEFQiFyNNL4ldQ|8_W)NQKE?c?TQTo|w z>7Mt)mES;Zrjx576!&okz=jN%=%HcD{+JxM=c{L0%FE>V`w?tZC(0*zQ{Shqr8Z~l z+rB#3cIv=hjtpKPL}QyS?zeJ;=hEimhIHZA`||KFZ(MhtQJUh}{4IPJO61#sP;hm_y`GK%b5Gts!<-8uK+6 zav$|p42k!l(*D_)$VR9hvaW717rfTQlkkLjt@^T+rFx>07H8PuH#Md9u1F1)Ch$&< zK{T&pjUUI?(W{XeJ4qba^GtNs*R%p=8CO~EEv(yIr2_AX-t3PbD`}-uM%}iT>zZW1 zjX5^2i*ttbm|Z9);)g??<}rW#OsM zs`Xl|264jXF{PFaelvq`NtHysSJ`*oqJ%X=hXhRq_*+<#lQ#>rbsL16xtoA@@3I#6 zBnSig40!2uE&EWD@_VHkNa5T(0mRnXooRl@8EGy@+Z$Cec?6vAy(7^J-Z=tX&XjpX z>>+Y?wk6xs6T$_-;uZdaT}?4$Hn+Fe+*hrZKsK>oc4VayK?3;jvklh^+|-;N*TdqI z?$}-jLMtndvfC6~PUa<(HW`|aI*r%JUMO^B6WrCJ=Nve$V2rnJF{C11Ta#Lk!k)|)72M+GSQWzA za#a2K{OQ+*#L|?blBSpQCe)gNnTgga#l6zZq7sY}+z z+>RA27To*2wjoYTXJeKn6?U|^e+jT>P0yzi66rL{{vt&`2#2-s@WPdWJa$vS{QX;l z_&|$Mg(xck^|)8x9G+TxvcBNp2@9{QIq(D~-TP$WW?g%Ydv^(@MKgqY4OVc-Eb>3( zBl{6n4_PK^oVOS2Zo zeH!VV>)ybzc-%$DQAI4R(KyEt^zruVIj zKV86h*NCL(tORCj{;s(+;*#Xos#St)JbgRX2NC9VMa;I3cRt5+Z`rRFE!Gu&E$ z2|3hoe%xdUSw={#a@`VD9{6%L#4G`2u6bKb(X3-zL{*MkLyX1=MJ^o9J9#wpT1|Wmjj}{V}>H*>3pE4`sZ!YR?6g#szwTKiPZ- z9`m;I>_bn@S=DA;CyIL%bGw3{@61mkZ8(5=Oe+`ym*|pm7*nLtz2b+x=iSfREq6yx zf$~r7?j3kw&!=+)vLQ{*jJ&(NEcW3sFZNZao40^VZp76>cPzJQcV>T78g-tE@a2wI zjmIyipv(=VN{4e`dY)6Dh#a7yif9rh&k5|@R`g87Oc7jL*a2Zgm7q$LXt6p6lR1c# zh-zGD3KTdY=;=|4!j=DREB6w1DDa+Ks@5~D#zbc@?GE4Xtm0(WW7 zTj9`Uo2FmQpS}#eX*@{ArdqxuB;PH@ERG%Z;wzFkuNYLLe|c|)73OvVLza8uJL+8< z7Q3MRV6T5(MsSkZajJOuG^a`wJ-XpzgcFEJi^`#&F?VPMz2xLTI3qmwlEm3BLpRy+ z9G@_`yKGm=LXg>?3}d9%?hKbo5x*RzipTOhj`qx&fG=(sHbFpTBb~qK4*ObFPstBj zr0;}pypT+70!<<+yFd;R;CT4tJe8<=$mWTC7tdM!k2=+nq`>Vo!plfN?yEby|UOYFeMw%rp%CK8M|kC{3ORPb|GRfc5ycrvedQy>`X>{No@>-ib=) zLRwLyY~7(_x3&-v$hOQ;bveH&<$HfW4Wgc>?EMseYY4p;64I z8MItuBQ7J7kqN+h@i^`MO^}jKCD6|dZ2^rfI(!t@0ix=1-P=W)j{f~JU*pNy{JqAr zg^x**`g-(dWYG>`i=&qI{)*(>tU$p5x#i+N9c*PUn?aoQ|P8Z5D~AkBI}Il;Hjqtk#PjVe=|b!`}& zLs<#W>Dd2X?^+TLSGMvrMegq|BF8T`3UOHZa}{eUT(6Ub=}vdlF=f2?htsiWKmsw@ zK%NRjFu062-k;Swv&DfX@*36qyR^`FO^u4;d*xpsjSWh#9Sby(G>Tln!Z}Z!^lAW= z?$lB)jZnJDeuffjz+aVH4o)y5xJCW8*lHmpX;epHAW@fNEW;b%D<*?6k>hOB4V@;+r=c)TEC zKFS!^VQIgA3bUX6q|8?6{6Hvb_A{_eiZY?i_;a;GwRv>eyK&|AK=sb$R^1NuGHSb4 zI;}hHou}0%tqoWY}YkWP1g05HF%!yz;|0|Yn2bmFm*B!_@Ycbwy4)+Qx3Ou_9YvCZ>r6rTu_pbX@B*(+4jNbZ^vn{jXH;RGP@IN~GR#-!AekpGr~}XX}9wo#O4O zATKa#G_NG-Ln`%KHMDs9!B5R)>hFy&`R?o6@GgPg^K|pwz1ke8%^7E=P@b=v=EXEX zGWX=Jyy_E-`dUIuR*wj9b#$(NnhrYrvGk{RPa1EDR=HM5H+~v<(X!-nn=*VXYt{;8 zX_i254fHOuH>D?x~RYu(gmB`YK;e_w<(V+wV_X)>Q2)pp|4~7?O&&O-{XWb|CH|&8NpfUv2UE)we z&TQ_v{73GpQa7g@Zb6hXSvjXl(X?%qzMsCoe*BJbAEIHZT~O`FQ|bxn9OE7KkVEt* zi`34_j$R9Ht%V4&Hl!?fm`mft^?gaNjqeHvLe<}EJfINk=@MJ^dB2W%y6s=Y1S-X`;V*Z{j=({)Q?#Y5J`SK%fUAL zGEPuuB7zW#6d+9Sdbp%|s-DsZ5*TMlbT9gvNV4+Cfd%r4{xLSjYo!650+JD0hkjN7L=>C5rR+qgs6y-0`f0*p<6nPtL4yP1lUPp?rSmjj}5cFDN&E;5No+ zO<+us&y4$);VKena$Q;^Q+tx+Q$N^MQv)N7MSq}8N1npA0k^sf>vDl6oEU$UA{D&@ z-{$!r4TZA{qF1htA&sZu3EL@#MHFKJ)`A^$WU=>HHB(7?d_@HQTKenKnkk5MMTLWi zr%sLmUB&)ERv{&^!v&Ck9p*(BWPu7i@LaI%5v;>5K@PQsyuu0R{q?SG-?=uzv=lja;}TYh`>Z8Q*d{GAu^5ptCY1knuja=rBa5c$(2 z>k8pCdo(^#r%w1F*t}!jN7*ORht_u`qleE|T{6TMu87*iS3XKv)Qj?DU=`T=5dHd_TU43lVy zCe+{+AOyHTz8!#pB zyc;nyvl%u=6*;MYr!Ne8XqOSUtVRhH9SrA@ng_A6HX8={EaeqgNA3yU8RfDeDW+J> zs$8a8I<|nnqjlpDC}}W$7|&O%I1s(06c`~=%QUGKkp-c6<-`~!qpX6;C=Rh8REs8Q zvr*Ta9EP`XxY;J{*PeXIUfx*TDBAo&=lFQs09>@#H==ghrTo?F~h?AhCgG~ zpkUzXX|wTHwzGIMpQ)<(5~CMa-2!YtLd1}oWW};rC|OI;u%J2FjfZp3<17kwy{P1p zeZ(~ES96~oBQcSMX&CTT-BDot&RB4Vir6gqx(TAbTQqGk^&dc~ZUUK5UGtdBn=c)EaYJWZ zPk&)vc$wOMevk=r)CED!7f-DeWnmU_bUHmEuE!3@=17ek4;SczL1e%JFnK~*ku0V? zPP@n_zV69eJi^GdKW(;=6mX{G@82vHp{gI+szd-2f8*@Z9Pb1);9@3C%P+fZv3HXE za=ryvOnb(4p$bI_q=Un(i4I?R&X(p&t=>$ca&cxk#v<4Ps9z!(u+76*q@wPSS*1DT z5@YUXc;qd=!n37>;}|+aXiLjDF|F}x|7OjL+03Lu2ML`FZ?=VhcOi~aFbgpP!scSK zuzamkm94RRfy;0z^knGl-IofYFC!9Uj>HDX9s0Yqbnx(oOt2pe0?Qkp{y?3fS~t9M9ldnm5zIv(`&YFQqv?;aTg|zTjW&z>msl3rprOF5&&$2QPor+b=d0jX&&S1` z>zV85zj5G};NB_CyCO;@05p2I+1A&E}#s} z+76|2HPetA(k-&9Ur=#?lhN=pn+m|(T=%FeC1JdiPU3aYQP-4<)f+Zr4L9Y>`HhZ+ zx#q7?@`f?v%S+sb3MYGO^^8%&npRcb-`+z13)b#z^e&Hy%yP8OSDhzFJ^4zid{;~P z01Qt2Wuz=5YtM&29Zi*n(Yzj?yyx@AK9KmqckkD}fuv?hW6$@V zB&rC372dBXU`&qJlG#j}u&`_ftCOeOOoP}B>|mvM3*`{X%F?yghG#dID0Yr3DTaWd zv67C8j&oDN$7z1>`IuBQwloO{lSDL%k89uH&9pJs-aiY?WfD{F_r|qB=!U2guxHnY z7IQD@d!4m~QItc+36Ohuk-8U8^qadiWSoo_yhHYoK>)kO4?OX7=&ul+zjE2Pz}Jso3jwdxaW)r=17Y^W^Q3(# zzj9DQ>aJMhGUu8+M<;8WTCfK};~8P#&^f?P3}r+oQ$T2{r>^^pr`COiO+~{WF-7qi zEI(+wUbqZhAeDpjG;}rMHI`H= z&Cz%ZfEq{=;OLd1HZux?k(FXVAjdYeFir7Zs6CF)An(hABS}C71AD4y**Rd%eV_XFIg(JOqMZL zU%3=~Dr>6F5&rem6Uf{nH)-%AQ>IPZpkw%nxV4e(n6hscJQUpshXUAQCgD3Mo}P}* z5K`Y2z73P*D~0UJt6*c@Ua>@Mtms*GDcAyH3kPc5^Qxs{8OKJ4GSCni{HZeD2_2Ft{ulHx;%TF`ds{j)^&yiJdl!T4~*`8)Lk;>-( z_Ynm;s3!k8PBC)6XT-|tCUM(gM8Z*M zDkIDss}=a2vAdn$vg-G~S@&@L#x;!}JU<5eD#9{dvjzc@OYR#iYj;;W*^hbzXEV$J zchhk z>;Z8ZVv?p-w^XmZe7BWSO~Z9cKGny6yQdI?_VVXM3|v5*L+q z$Luuk&7}F%k4JXJ4HIhy{}qxWVr!|ER-aHE`q+H%czkVoT!)N=oPb1zC-pLs z!ii)5N~JdRTxIU!b)KO%M=x4hK3_@ANG+kJ-@>u8m;e`bUsV}pqMhX0Dq%L@$Gc~X zHiSM9nv}ph5J$QkzSqQn$`)okp&v~MS5e>_9j2mR*~B11+14>aN~)nwdN33!p>??I zik6*bJnC3fu&A8Dy@fsK2pQ!JS@QNY6ZEduxF-q*B4;Nw8T^{sOSewN!__jc7lHE< za3BX6*d3D1>pTf3Nn71X9m)arwMmQd;n&)x`<8%DnL&S370HF)>ZLSG zMt4J@8-2rXxoIsCq{6AF(^{~&TRmGSwDwouI5-ri<#OTFdU)#pUN=C-SZ7x}kb%%w z)PF1%LgZK}Vk~RRurZ*uTO0jk)$vQtO3G1#M)*LCvvIif-SYW?!rA&tuM7=6`}k;* zV*d2h(GGq6se+_wIWf+2LWP&io*3dVIr14QxK|dgg`nV^j4e+!<0tunPi`R8lh7VR zt(cIGyndayJ83ETNbvVv2R=q%Z{QO3bu^Zp%*dKeFg$nOi-nC2E8!VnZQ72-`}u?e z01QnhoJ0&HwIl(1aPe+$)MA>)dQuRao;F)HWVfVug^dg%2~uIkUCui#iwLQjiY7GvpX;RmC%5Kfy1uOtx5etPQA8uS;eeM zirth6BM^q^yy%JD&{7JvPj38*Xd+#?BNao&LLxC)M0KlTSNT$f&Bh+z?yk@Juxaqg z&~EM+KdcWI0tX7gED|6ZBd8FU|3EmhD|Xs6GKUU7WaQ6`ne4Q@LGu?jX^&BbdT%_1 z*xnAQV=b7h^nM3SeJ?1=`YSOJecxy&9DL;cHLvU>jzT*%%0tPAXj4R5=ec`q_K=|{ zZ$RpxzHHUvjy?6SPRon~YN2)KE0xSiZj!k+3`-t+D&ICR^ubvL>n!a1Ix6xDm z!NxLJ5ZK_#CLd$r?Hscab-5@axI)`$+LkUGALnTFI@qo#! zS-R;5gPVBLTyK(D3SXH_{dleRVaqtnP-Pti4wEY#g|iT?cmP)%-4IBUNGCc-J26ys)yi?Hyq4M&;}kq_!AZdc39-`B(VR_x>zS{))C>J`l#X`QO< zFYWN`u!hYX!othK8tkPlrb^|IsWat}ad@p689NlOa1`)Yv|EanqeeFtXsq@8oVr_7 z(1cx7!TMC}!`cC6b;H+U_ax4`;_~86nYv4u@$p#>T^_5|v@O=A5eI|V>Sd=_(6SvA zFug3z z!~U@G;}KFG*Lw2Gv^Y%;lLy#zdK6hV2S?h8V+xB}%onqfk9UhT?G}gEwJ?wMllXiQ z9s5)T^fwIT(2LN|3%2A%@m)-3yF&-=YH!z=rX*DKK?cCR-J!M~_AszPNvRyycd`zD zvTqkixJHnqabU*7zTRNBKQT0nzpcDp;@rlr6?J6_!k4 z4=(p|ydn}0g5?D3d4NacbfRJ(ROP3rZl|s=IE?5`0qmr3#;9 znX<|~SY;481a`2QFdYbNW8SlBocL;zEIoETg3MX8)9q%UksvY!Fuq?E+Jzc>bf?+% zaO*Y+%Zj0TMv&-=LVF}l<37Myrs;f=B{Bq@dPK^W_=-!JG1=j4nzQE|LzzlI*yCxz zbwm__{>)!~vgY%A$la;XZzR%?IxO|nS<&`-uW(xcVtz8euSYNzn(ytL(nF*1XL~ZhHVb62eqerhNc0-m5K(WXCCkzjz9oz<(Wub>}^vrwDkQoc`O=TAu_)TMR*1yLIh+xZeJ=NfgH^Y~= zHDe>UB^C|JHiNYt-xGaIVGhnK9Sy=ZXXDH74!TUrAY^e5Uz)iH(md_{4(2YhTMy*g zc4$Cc=1=$0JQ3e!-R51Dkp*#?p6kg(ncpftBDu_C)gue^p_Ajf7G4GQgnGj3l$rw7 z%{}tz9wIs5dGYV(n^k$&c28^q(apc;Su!jB_}NK#Bkhj&M79dPE}hxK0|dRMahKnc zw3(Ca=>*n&uyzVof7?n7LG-zr!}obTR^EmLVqFVvYXT8Ff4(twg1o_WmR{v{OT48x zgSDH&U)uoDuCIViUFp2BE!hvCe1$GPpE-{{ki>sPuFkyk{2Sn(IJ|PY#dW8Hdjx@q zHR&I)Z)ES_t|=eT+yeMu-QT-2oEnd<;IB^SQeYV87MP7ZkW{Z2Sj`4f0PQF61 z-+yO=co+EhWFI?h+r5BdKy*oP;(~r;%uOZDMUQ6uQ91@e}PYOGc#ij!@slAV89q{n z7lzci==Y4d&+f64?6-`$FNI%I!qn1AEYWmz{LWA1vsAJKs&2_;8?l+VC8>53$jq3a z$*`xxXT$Phinv#-!>Hytf8)xC3s(K!QRzfZ)EBPfx!U|&$dw>1h9YdbiP9#uBC+TVO#$jR_NYR_1bMqW zEHiuygs`Z*oCl6qG_oq5Djv)VcN28^EjbPU&ZuBQPd_{lS0d!9)hru)6B#j@IV$S` zZ<+88iqfDQ8FcV!JApI0UCmO!ErdAwVuR)$jMcU-RKDupm_&>^)ZzX5AfhMLCbG7G z7u{f_bA`(nIexo>S!)OM#lJ912#Us(4tC`32?IG^zl;6D3bTsFdwglm=U0&}10@-B zIF`o}i8G?{3I*(T`tQgSB`7ELdYkA`@G(vFOLVOXjkzW4B$K|A{DjOCWuPjO%N=Uh zo+-GqF>CJs@oEjV5(n)l>u`q~RPJ{z~xjMZZMz zUWvw@611DOveC-pR#fiiQK$I=>O5s~3psTCL=->4=1~ci?!T21VY@+wmTNl_L5uUw zk{vbUxc0;ntS%mwp8C%+0FYfz5Jz(f2amdT+f8Q@RT;qVb}s23%z+41T#5U`v%jZF zl8lPuev1AWG9vd95YN&Jgq$LZ;pu;}@Qk)a+8WzJ9i#cMK^E7Io@L7i$|9Dz-15Xq z_imvzloMroLjx4qqj2WgwbrxTuFMh6SrbV020C6x zIU_88*pg3@kdEm>gWu+($~rg1WuR5EYXzdNya|7RT6^Ms@S36>!*n1wbHQ(cpF&*h zPq0IAzhN3x?&N6Z0Rdft0qovUeBtRS!Og+Dfl$3M;xQA1`2@1Tx@(%-u?w<$l3A(xK1e$5` zXnE8EtY&^f$i!&`GsGlc@I91Nj9EOCl;cGJg>dFasE8P|K%TtB7a$@<#+W7`{oVZP zk_gohn-|DKLuyp`2VzPBg(?%ifQHz-FaQDy4hf5xnIe~8!2hcuEnylnO^_=d3Mz*3 zJMSA3xWYdWL+&HwoA3o7#Lxu+=tw$Zu7o>@|E9nIRf(_GKeSAs?;ik%#7gmR5?d|^ zkgl5g$29OzS}{ldJV}W!fI-rZIga}W{DjbT=ZnruUBQVw2X~4|M!yoSdkfa7HC4Q%T#Dm3|jiqj2$3^fW$BMz3|^eh?wwC>mRC&F%1-= zBGxGU2MA}NLsckdD8XC^!(yJUAP>Af%$_1ECL`*T=m75|+5*AE+ETB?oxZEY@2HjW zK=(HB*|QR*S>gR;low(v(&*Gc?m{S3+5(?iaz(kr+zNiguJ$*Fc9_y^9C@QQbzXr7G=O#@OXJ02S>I?N^w}odQMhPK8YPef0IYAjSPr z#Bbxay%oWctQhZ_V*iVfm=BF_Km-ZwQO<;PISF}a`CGXi$^ai1;~p`!zuha01-ij9P-JK>H#$O6qgcVAi2rkG2wz7Htv+W%fkEefye#inLchXoV@#~-<#|R zWxZp5lMm6g+^9^|&8%fF?4VsDI#DE|VveBS!a|;4-@>A<8;>HwOhqJ+O)%yBC~N4; z>C;rt9BsgmZ9c-AA`I~c86x85y>>1kXs_p5CZ0H5iG3tbq2kVkF5ez{o<=L==g+>W z80%WNqj#)5H{pSIhj70fKBLcnc3$=>$06Ep9a-yTGYics%mS5l*!(jEI`y1Ynst*E zWZ4kRo$TuTgQ+xY;YNDO-8|Qp**F&WHY0t5P`ctl>uiRbBP(|k_ir~dab7dCP4M+M zR1p#UZ=Z+8E+H7*B@O;7jaqYvbCh!fMX^OYq}ip_rO_09`^;S9tPULBZOZ;I3VKldiaGbW4m@)Y_kNF$6`dM8hmm?p5f zS$mgyEA~hs;ksg}k4tjXLVx)Sg0kR}dU@6`%ONu_=x8ksF5}*t!rf|eVn|n<>9v_^ zWRZSw3uEUWG#6Wu3@RjT>FCN@FD)Eg+7JDBojx6{|80l@M#gukSdQ8IYC$>=&SpFh z2_q~#RZ&kz6)>J0Voon7ayevghT{e z8D;I(wSVrYkg=`h%vQx()TO+2?TI^zrG|avEFJFK*XwHaZ}f~|Srhe7Wq{=gHjnYogEcbyA8G0 zJPaz@E9wb}Pyi=`ircVyN7ax^dj^$2jB0d&>ZE&+rbTXQxNt%2OK<|6iwubd^!j4DFhszPPmre4hblzr?O_M!t zuE!g!ECs*3^o`qXh%=uO<$INosWDZN$1~_#WdbDR(%m0eGzoa?)})mkC~xqy(gD4X zN-`R@i?VksyfEmrS_FFfdLZ)B^ezI@w%6=x28{Y8gQM;ZaOY-`ZJd z1lrJa|6^6_e`fznGsFLOVJ2W;q-TJplT#8_qy3r!kkPjS5RlW-8Jn5VnVLB`+L+ku zTj}asTiZD5JDS;8)7lytQ~XC>+}hYi$n48JMpmXTOB4wHtwv7Y1R&#NWdN`z_|mKZ z_=?T5Hv~8kaB~yT3A;LqDt>7K{Hw*!@GtuJwf=XAPLTgg9i5>*0mDDVx9Rv9|DR%C z*YO{*e@TkiSUdhpR)pcpDCU0|#moC;m%gJTz~1_wp?}HA+1nT@0vx}VkWNlWgn&*7 z;QF=5;#Oal3;c%#|HI<{i@3Lps;gNRwQ-l=?k>UIU4py226uONcL)TB;O_1$G`PDv z!S&-k=iW1R_Rbw6-=BMbtua`OIjgF>tDmabHH%Q^!~Et3#$RpB{^$Sy_qhD`^*%27 z&sG0di)**6@pL&QT=q``7f+~M8DGq2pQ-{8^@o%n^qi6f-E$BC*8QlCqB56s_qu_XMV!((;Luk4?kp$LXalcNv%Yr1I$ILkPpA60;OnX{Wnidl?|9=N7&z z%9Z?l$8@e!CIQla{L;DmDWmt8+OtU8>$2QFxznH)7<4$VI6*6#8akM|SS)BU4-4m$ z9}U{IU50YYCu(jvJ|e66_AeU@OMbw{!KDS-i4y~rKe*_^n~FPQF$GkaL-0weQVesM zqV`mnU<^xb)2zCy88BU_8E5lq6-u~pz_0F%cfx>;l@x=Kzo;1NsG!Ls+sc{XGWw0N zQv+*}Bu5MFK|LDSkk-tyOS9<%X+-UM!$qTMsA=^+B{Saz!Kjbo>|=k3q(ZH2G1IcB zGFY_6dkQHESNPAZfNGJ4nZ+?aey(Dj+P|XoOB{}{EI1-E+L_LU)x@GKv^+HKI-~^x zj6*fgj+qTrn>1B^j(J|#YLc0a7zo2`G&)l)ol-g3o_G-5Wcx!*|8Sa0)Wt7JIJ!vs zo_9Tk=)XmxDm9hi8{K`&9!bdck z^t%z^lEe^9QV6~YwsKhlc{-(Pmk-#x`TIB9bVDjX1qc`GehTI?(_ik;he3W;1;E1X z`un5XV;qz(e9oP~?$+&W$Pltl*VF%AiPOClogt_3Ejfr|!CRn{okvchJ1+Yo#~EQ% zyD|vM`nWirKKV7#zDVGi8y#}eq)d%}Vz_hVqiG_yjt^f;%d6Mb?Y`dg{ZWIrr?W#F zM@M^2j&93Bnd*M$+~ggF&+EwtK`g)KxaiLw`g?4@(zP@!v<15NGIC102zNu1Eqpux zJxQE>K5tNRp`$sLzTnI^76~2KqUPBl9OwKLD)v?I8yO`2r=m-+b?RJW1~#H7MXtop zbvuLzd!xZTWs@zNe*7&E7!0WP6N4}MyQPY>lj);ksW~yc6)8>nm ztDkxP`-^A;n6%FQcx*>DQ*lrYu}2$UDr+eB^$_u*`DK{F&rfVdBs|olN@;6UgmSjE zeGWe9+d6w5Tw|GKD*zmcQUpF0s7$A{#k+TgnxphP^2nvotj{O-f^Q19NX!#-oI z@*ai%veGyH7D`gTgI-%?rzEW?TjC05QOJ(ReMmO`$}-|Xhkb)+e~Z?b37Vil8Xqc> z3P?8F)AQnkv&A+1gNU4eDIyay>u=7PRYB4Qh!Lvo0PRhnu$tl`{l{_c>w80p0zD|` z;v(rqj~FRmf805xn%C$t3*eGlV|QTk%hqm37)$|mFU(iSNe5MCxNMwskW}U?4O6~! zbZ&HcnSOhhU6w$>u&>(UfFp((o@kc(8HnA~tGACsGx0)v2xE>^7A}Emy)fzHCKLOqmV~2;XcT0gpZDTzB`%-TI zIE7H=KC|tSz?m8rJ6p6UOQo&#P0r{3^zDf;9`S#Bf1Th6qVxS%8cmjg$^UZ zxv#0L@Yc)z*A=n+y{zl`m)NKHLXb6-PBtc*u<7bNmRa0m`C|t@vMa8B^)LkM77$sml~;8wy_ zvH-DSV1fTZroXK+V`u+OCf4Ylf7TV~yL1l}N3i@|=?}i2uU(%-yiS>+PCaVv3Zzl) zki7igvTlBI$kz``W0^14buN;&1g4TCQDpoqGrTMuKvNdhpcZGuNC<1p0UDP6_Ra!#{KaM3a$oJ^duIAe{ zx7DPn>8560YWQB#!4#U|d7jtOn3#?R#lUfpDOb~>0w)F}o6L`#GTOp5IyZy`@@%a; zB>wiP@A$KrZTNQaZ;qS!3ZV7AHFWR+{<6I6qrnnRQbqP&9(AUr zuLJJWt(B-Sm1F$ev0mQBR;%XKLcFbGulfx(ENEj#lZK_yY~gfQB)`avc_gILn9Ipdd3INu+@hI z)_igwGY7R7TDf5H-il30RR7d1U6%j=&Y%fD0y9B-s_I0+U?SYGC>t*i64N5tCoYCI z2dWu!kCjP)-K_OXTiE0Qy_)yp%;Gq9^o zv9hqJFfcL6Gq5lzNHFd)v9LfgJGSTtaO$Uo1IHOak@jFaH0x_Rc5@Nd%2#k|V`+Z{ zvd=>{`-3cOe<=$S3+Hdb@XB+?h!DY@e6*RqB)ulF!xt<2YKa^SKu$$PvfnR8@i^{0DK&F>?%6HnnGt8#?XTFq;-d0`D&2mZD<#NMTOWD8Kb+ z5)7B=G#D*%%ce1k3$c5OuoM$+n>(E$cqMRgsX+~}({Q=jmNpIO$ zHhIVif9xTvej<<)t@VBN!!PjuTxC2cGyfEYmk?k&^Kr)42~q zDZ!9&vX{BAz22N}JM?}%3)S$=Tf9ty)uj7WLW4F6SQ*HINCpS-Xe9;mIU2ni3g;*H zOyCx_QH8KZxHr)C;6m0C{UFBzKq99}$`x@jW~3-xXlrJMxcUdvwZN5F$|5PAr$b?- z6D3jYBK>@FGEbB#(w|iaZIrM+&f7%IdO3kpm$FC6(qpilyXcuGdG5CZuf8RF@iv8-){)wg7lDJ--IJ3b} zBs#*%k+%bEUixBybG{Fy*XrWid~Pi>Gc{4ba%+giiGWL8=P$d)9De4*JnKJ<>EE&= z`|owrbqtOFtWXvPB?cCDMFw^@MFvLJe^w|6w0~NQHbW0C0|2vx7LqnnU(lGj+loX< zsRaKMY~IkPO5~n^VN<(8U?7D~Ec8D}^w+5PZ|hV>K{5jL!^s|?JqZx$Cbky~rwbpv zFN`7tbAmxvB_yV#sly^N1`*KmKEx9_vcKZ^4f1- z<|1A4=2{|a)O1{N(&nc-c0v*aH-jEp@BzrWeeYR+{c|o*?A0CBscTh7VJ~#QmA3!L$F^ z#{Y>Qpm_N@a{qu=g*g7Ao%Np<9_ErOdc~jh9rRS}j0! ze@8GQk1KJXHu`oCYxGRQ^9L#amiU-ieh*tjKfH+uBh*TllAXWAR%+a@`XB#rj8>-f z-1sK6zLgt5smOS=x`m8{bRkL3n^?HK=!M0Bl(^_Y5*pkkId;fWsyzBMz63RA`D&-; zMyzNFP4o7Ax^O&CVSIF$bNEwkHdqXKy5ia0e-k;WF%>jl?P;1Kd z6lntyuQGrpz@XZaF7V8RY4-go6kYqm``&Pf&JVr(ptA=7sH7OB9()*U`J9c)97v@# zQnEMy+QY^r&njQ#=n)r)8G*r}JB&;VuXB1GD8*anP&7K?l}128L*Qk2&ZTFaaYVun zeIFvG!;WVl-A;;Q5JVuNV;j@sl5BCGUac}L;}Y7r)tJ7$H+y;iKqwK)wE_r1*SN2u zEWae>?1(4e&P>!nENV8AgNrCZ^CxG(_RsJ5nmgL;HQUxCH7#lz=LB0>^xAhP7*eM} z{eKvpzhz(6-{%lB8?*9LUQL zQzk05dt0MLE5+^^b;7_llz`dgfbheB&_=Q~@QVsCGozOyHXBytT`*@q)q)-KBt`F* zfv?FgcKXIY0pXKd36rE2z3ftZ4-F6wSab|}5kBs6$jUOwm zKC*G=wYHAD6%4JGFZj@$su+CLkODwAeQPrnfL>MNTrT6~CxGF)`-853%V|uEzfT)p z`IcxfMmT^@Ft&QP$62WvdZbj*`;Elo9q}}}s3J9MdIA-_a}t?`(mIz{NgNgnYdpQ1WHvCV@OdrgL{Ekl{sdv2#{u7x^GsPOOHXd|3l?`*BFhn*S zZHSJ&|4j-5thTs(%(v5ggSpOQu;|+&#a|bQN!h36+aV{wAVS!te-Q1j`G@)UI7LQ& z#QJ0Op4(tp8M+T~+wdVHd1_yMg-4+iQq85dbFY)MQbtYgNjPmsTK9xQWs|>N+f0pD z)x71yfw;WOD}SmWtNAjf{nMs~MUsB0k0UzOvLWW6)H6sU-|cc|afZtOh?l9yw624b zp^SF|Ax^e=uj_?1q6KIJGe|sy1{i4V*d+Z! z1yv>0__VU5i5kFlB_8Hcd2nQm1G0z0@R}1x4nZ#zwQ8IXfzLjvkm}UI8P!y@+VL8I zu?~2k?cXvOg(ryTs7RdvgQGnBeDpoHxp46Y)*oQd`Gb0Yi%X2GzvB{XECBvPJ>iRt z09df8$yy${i0`3J@0Mi6;BaXSBNR*Mf$>qo()y=qMq6acaus}}Bu%Z7oS#bN*}>$@ zrQw*f3ZyoZk2+0wn%p=mX2HM34XpeeR#bnVAs)Gbz_+OgMNPv9KWmgzfuJ(43G(8 zAp$A!;X)Ba7!pAJV|xM6`+gc9dA>Xj$V&21nm`(OpsjlNv_IVXZ)t<$_gjlb*Zh;` z1M@7>2ZLi|kVh>fd~O2PVj6#!q_M^t;e2aj42M>qt~HM zey$RqL~8mB1Ezq&tDa7eMm#%tbI4U<_a(<)4XOzhr#(;-DA3{o62Fj{Q2sz*u+5N3 z5j22w(ebN2RJa3qxNkvw_69{oLGBH&Mmk_4QL1nXPe%3-cwlru^1F`YL_@Pu$YOr-B_*U0i zD9HtQ6+2i<4C?>}CBxjUYVg^8Lz95>y&cx7-mo);M4djn^OSK{sA=;z9Q4smBeVoR z@!}d}_^%w@Vcprf90R()P&g5~!;HRV(83v+lNWo$gm+J6*A*HJ4&iIw{z6nf@(TUK zK>Rf({Z0=5wF>?EP=!B|>3I8~ihsEB-$Dr^^S^Dmu~Gp>$}WJ= zVC9BWr^ou_Wn}hUSCim==#etyGsO^zl6F<1xr=nBswP%5uwli*-ra&-`;h?tzQSVI zp~uFWs=Z;nSbTLfl3bB)rh)!L?39V~YEvzrl&{^fZb4Zz^Ph**!4+}VIL;#ObKO7J zLWFgsr$oTusfMHb2wr^`kM_R9R8}XPKEsu?iwc*I_jB=ImVo2*q;*jsxM8MbL^)i> z5nUDZCre1<9B6gA*?5?$`Tn*T#oon5eWazSVf2#^=PYTEmg&et{l@9n{7@h)%SGPH z!5kbii%E3CAY{cdXGmVUf~s4Sa3cIT;}Fp=gzP>n=r2z^s9mvSD0oT38wl{ZzIyoi zQCV#3Ap3dz)@YCj+jV`qE&gavH9BgTH8>20fNIUkztkj`$KqwR$+P#fW9rv|uv(=~SnRH(hX~ zT)UqP1w(qyfW!=eKb?uL-jSD`@IXvG)gaDB6`L73h9y{nDELQa!33Bfa#W>QG@AqJ zb0K}KQ;14*3FE2bXKTGl84k;-Q}y!e-6VV+dpZgX`f}WxTQ*P(g|Fq;0utS?Hi);5 zwTT;UQU??0GdrH+BiFsk`U9B@HUeyO+Z*j+JI_&72M3QYpnCdRVgF%6W`@6}seelh z%EU<`2!F&&_gTFdB|*&H2RvOrTFo!IDuf}O{am>`CdIj1Qw?Xfknky6Xsy zwx>DXN1FNi83ot!KC7p?3@wczJN7a$f;5VaEb-)ZBMxapAseR>baoRG>%=~){?bUi znQY=-i*2np)#J_U4nKt&s0LQ^du<)^m+F1go!L#LCNn|_z4kvQR%GMO{nVg*>hL3? zZY`6>4(;Y;TKN17yn%#g;}2^8EoFV2+WOZhk-33I@gwcQ_VF0fR1BtweE)wQLzbVQFMgsjCBFk(=(z6QzaV(itf^eg_s19W2tv{=xs>bdns0eDMd7{uYcF|1D3( z8{6~2wNSzrk1+271&dUaBvNg#9w0_h!BbN>KQj74^fPw`ev&C$KA;W= zkg*S^>mw8v{KONF_b}wZ)W)yJiP^3>d_rnVF!i1q6lx_i_wy`Q`npY>_2ljioNZu^GP0b5d#Hy|}C$@Ce@FO852$t^Ss|m>7SzG^+w9!bd!Q zdjD}CfHaEUO)ige{H<#|YFZV)M?0iGi75SAF|mYbPl?YXoi3|&bz#hcg zV>^9CLU*`nSYXfBv}WK89$?{x=@JED4E(9tLM6)TRWQDYCL6>xqXz%fMxujoLPJU{ zTEX#BQ51CRNs0p2u8+ucJ@ssDSgCL@1=Ak_Sd{~J;c($HnOBZ{+6j$mwu}{k35_C3 z%<~viG>3Ac$?}s4d3F$~+ybT7h@tyTR!wP@_GXPG@6uKyN;aMqNx-n%E6}!je<#!2*F0-u+NFw95cCDcVQSaLtOLu(SU&Z9p8hn%58+2#X zveJEd2A>JgIzo>MIagUlC)e#1w@gS1u!ufL%E3e8;-Y#g@r>0{IFZh>WYkkN2~(L? zeHXQ<=bO7ry+EsWhbWPqlg#teN6g_f7|JqViq}=pNHD9yH9d>#3ojp^3PT)ScTx4& z7nHF1GH-4SQAPKRefnZd;GvcXFKr)*jnfsmewoGD)rSp}Ikm{n^~#qW^rF^uSU!W+ zRk~OGmq9$Ly6{tti73p=^=K3Ce%-;^=IV8i>sM?2^EN2sseQ>8q_B{?H!!KPgqh?a=FFp`vKyzztg_-F; zGp+*CbSC*gq=3mErR_{x(C{w;uud6+{Yao)JoIjx#uMCn6~~#var&=$+M^{T7Ur}w z`d7#)vp(Hf*hpW`WZql{25M3V(JbF$o=h;ca=SNc{*Pgaa$7m2{bflY6 zCo!xm@T;|>j_$%qYgO5~Utk|NUi`=!gQENW`KxHN!I}1+9ee}@;*s;OM^Z#A?V@@6 zU%PqLZQKiieRhV>%s8NjNj8i_k&f!p)r4^yZjoBtoY2#wEkn;RpRwNF-x;3 zh*$Nap`X1FLQ1n%zIqYq+p^nv-`7B_ke!+7)&LSp5qqL}!b)SWPZ*b}3fd0Ay4tYz zu#EP^7l6qFGVs{ihj;9>10E_$Qqk}&-Uv!YGcIn-W_bm}z@%|0D?4BR`*8m*?cMhf z=d;9lm5&h4y|1^IFiq4Tp0gyd+JS-I1XWNyp!$)?w!~2}?Wu2Fp5%(DHVmP}>z!KV zWg>BU@~1l$z*Su+m0EHQc56BpLNJO z%yRj>TO0~wxh*hJWdAk0h0DP(?KyQFvg2*P4_CeGso7i;Rp^Tyr5f(FruEArupV=1 zo;ZCPCBhcq31?J};CiRbJ>zR(A_ywPXo)}MXmDRfein2py4z@qS8rHtI`Z3Bt*T`Q zN4ufSpC?3U8U~asCew4>9hXpM3{^YuMPN!nI}DB6RDwQk_vi@{L?|@rTab9+JaJ;0 z$2KtWgVxB5p#Ze%OVlGk?|ZMDv>+#`gDeA^ef#@MbvHHINTr$MA?XYRJ@z$4Rftd zRvbpmTDT3!Xza~mOQ#l~k{B}1!Y|!>08#j(u&9`E#BW|%k)){Y5@Jj_QRYK61ks3a zC?brGsQw|w-+v@LyQh$qlW~>1{uoJE;hp<=e%o~iP-*BnrfYAzu0X<7bAEQ-cr@t@ z&rdAss?g*YvDvM|ky(;)-3oQyEYYSr!FPb8y_1=Zo>N+rfL#M}mu06@aI7Z`Hd7>D zNX}{gdZ#PSltp4l0ja-o_T#MfZA>WJ66wM!+iZe!2%-2pWsw~*F*oPYILiUAfa6#Z zs@+j~#`O`lI5kU*@%8a_#X)h!lXu(Mi9;on)9F1=G(`P#{=|whf;#Y=A>E4OP*P=PTIcp`$ZZu2!omQfxbx;h8 zESSE-FPdh+PiMzI7vC2j4?GDAu7xT1tszoe)a4)1=XRJ`kBLcMN?E6oL~F}|b1KW& zZ(FTiQK2hE@DB}%Z%%NB4@DRF%ll}APK_&uPOu=7Lb{TW0xpi|cBvoTv)k4wqMKw0 z#9pnJW}pb~QSMbbTAgKtJv3STh-ySSXg?lCzHXw$$cm<9X4+XC7}Y3G9j;^Pq1oyA z?B8mejL?8tGlE%r;GsaI)^$TqF3-^-@O#~ZD8Dme2$6ZZ#tRf5gRb485~#ahkrFlG zlxA_PqicqIZ!y0+nF{1VPCSs<@9StmuxVHqiqc`WXdGNW9mi)kR~N-ozi4Xf)E(cN z#+zLnN#kUq{fTAa2P3tCSI(~mZVJmcKDH`dcR>X+MwW%^w_qc28~i;4jkVjmZnT2d z^#}_y9Jf@;?wY%)iVCA?r}5^isR2pQ`G^bQrvZ^`bcmVDt_ifCemBKivTZ+LnDJv+ zGN4RaZ27s=T*k~ou62T**(L;It|zWkcf%+F15WhS>vK{fU@#2}Co^Y((8+MY5o5*5 z0mnF1zXCUsz%F18&1#oR{YJ<_E0LItX87zXRtuZ52~+jp*p;TiG#U90<_KABBA) z_9;+@S8v|kGdAE7z~!uEn^{{iqlciDq1ba%`?ACz!#Xt$%#{rvii^#$dl-g0v<1a! zL7gB9EV-eG4?4t2W^Ov;1dNUc@-l%HVK$;=T=dz!=*;4*_dHmyQ>492$9OR22*?M!Jl_4z=a9tvD1Y>+M@|(iVRG1`HKSeiWnZj{?L2Ub6E=jv^>h~L zr+DOZYu9bQH*Ni)fuebfbCM;?8D8*-kVkjUDCeL*BA2i;>5!yYi+Se6S1qF5w)O`I zF6X1Nc@pQDj>8i4l5a3^bGmM?#9NC`ufumV#&9chHJg1cJ0gL3O`{>#AhSuiSp#H* zZd=KRLv0@Z-|aBgPhH>GciGdWj?3GsZ+2PSVgl`p1fS&|*RJ@U=rRe;wAk-~)*MsC zbLDC4Gih^3l>Jzu)EI6I?$1tMrt=FJ@DdY%8}8A-W{*-d3n1I*$563STVhjJ0oa zR&&Rt_`)mcP(%cVYR%Z8FpSL6OzT~S4u96m{+ktY@JsrZacY`zjqXoD=f`|n7-poW z12huHqUfxIRlcDxRgc!b0lxz}zam78r$gG*<&|Bt3l;}KI{X&vVa6H9ZgeakmFnTR z@YZgP!)Z~z&kdu8?>@##)RSWTqB-0KGb5EOH=TCJC6-$hHp}Gg$bC#`G#5%jL`F=a zK+)m$x1WLvxSW6wbKCH!g*aygS@d>ncpexV2pjndFC%}{6)XAb1YcqV>X1{EsG!aS zI(k3WM;txl^cYLux}#~GaRDdl2)g!1MuKk|?BEopm1>9kX(h?;P;tnefm8wbUwjog zsHzGOUZz0v!hCRVwtkf~ob)WFlocx!28)>U62FuWYpPRPv{HS6lNG}I(%y{hkrhv< zoZUqzF>Q5f2M>%kZKrW-(%~ZNZI1n&E@BP)Jt%4R$!05&l@e(<7FK@M3^c1lb1*N{ z0rVSO%Or`Ib&p>%k(MvA(xvash-3R+xsNyz&V;82!u2US(ETgk?i$eqs<@h)#Nt`L z93)9->|xR8y_jHXp2s>}HAPhHPTVY0JU%f*nZ+Avv$b2z71IT8`!P(4baLb9FL(!; zY0!`4VzcJH2<^*E!HVwE-yYZ0_^=#}f1V_?nxK@x$p}cn`^NPGyUXkQyzqm*gJKxn zNc~5E#>D)unS#GB|6*gIWBRA$i;07i?&GY)|G(ldCRSD^j{igTmz{&2k+Xw~iJqCA z6SJO;t&ORHk&~W*m6e{OiH(zq%|}VsAB(~M$*BLoE(ZIk8DsuG){HUGar{@+*gv2D zUAaa7uXSV0O#cjo;y+*gU#=S)=#Z?l8L=mA^zGWFQ-Iap<)IBn$05&<9?V^?7jP5= z6=W#|DJ3@<@2a|ln&gRh*X^K|kV%}D*yNlXzkuWH-^K5G((`%ef4g$+dOz8CdD`KB z9Z%KceScc(@(w3>zu8msMdyFJv?bWu$=UUNeGSibV;?a) zjNLZjC+a;wx`!A~UP3-1xyMWr$pz$~?nbU!Vjj@jNW3NTKkO|y(;v3Yi!>fPI6uk-W=TD9Y(L}w7XvP zH=g#AuFYOsx>h@{0r|c~&#CNp<9g>zUwzN%WAEt!Ii33pf!-&nj+OkbAp?#fk8*4w zUW-_oKL~y?-y+R4K|GyY@a?YeV)$M?Z@jJ{^0yNl(45rOPr7`btZEl~{Dps;Zt{}n zc&24r>uWMnzLC-ibbu;Fn>1>hRm8Q@=(dwJ+4IDC1SpPaPi@&3Y;dUE@W z@Nx%VpuD@~bA0ykM<0u`UoY3NkKuYYwX41sdn3r5^9&G=WFe7zbtebW>V{XvVo!hz zKEwA}y|;lbpZoZ{^*q``-eIS z5Wt+u36C^La|U*Be+nZ@?5qPA-@6EtzS$>4`8X}8FV0BLrrJxEGvA~crP3pC+(w@7 zhLRb*TfwF}8a71@+v8iJ9Zq2soLdm45cifYpAqdzr@cff;Usyrwzfmd<`d_#bh{vD z;GR|iaPw?}P^W&)dY)IKSaTGI>HDEWAY+k3p73cgmvDGcUznhe?!=x#q*o^j{-WSX z^~ywbu~1?T0f(Xk9tQP=_uWqn?ba6>5Z&ieaX>MTUDFDHL)uK0Wdw)vNQ9EyZzX(Fi}V|UMkO=-#&mxXY3&q~=P z0z22xmE&VZ(H|Jqz1+8=A4ri~Gp<#*CLC1tJj&ZBSHtk3yc+>U{hYZ#c# zGzU%xlJXYdX;Z=83orK#2(V9J^^M>%DVFu@IAD*#_y?@E=R_k2E-ktaOodGE^+xTO zvw!F*G^?InitB=*u3B-(Eh6U7lsUcI9otHPaNo}RC^gA7vLO& zM0Jng_nb6($uE4J*2*6*XgmgwR7u$#py(|eu?4YqDD$eqvCeUbXsQi~t78RJ!Dj9D znECcNz?8F+WLne66cu#WN{+&H>Zhv-ukRAl@{{ZXZSw8m)x)MhXDJ=U+jY~Mc5lBd z8f?mI3<~d;>d-2I&afY2=9{eFg_vX}f788-bappK5|4;ts$suJ8QiNqu)_vS%o8`N znWe8EzzC-3b z_%a9B)3-KRZ7%;t{fi$-uFwDjEZY*1q|07oH^0grBt=uPeS{nHcJSFOWzYJ#=;2rX zaCvkD#ggzdPRic+tH5OuH^*kip4I^DU@0k1VqPsrO`LTcF+rT(OZQjeZXP;&%z01f zUm-(gGP!AUq;@n&IG^mW#$@FYL{Pp!)>)w2-zum0vEF!fPhkG8fKk#YFX+QEAC8<3F1&-99g%K?U6@uQt#7tTKSAw z&HW+`zHxT;nNYc=r+9d0d9Z8;5=zXOHNa2pNSX@nBH-1`{2;Sj0O&H?XjfL%a-du# z&8>ssYmVf1T?JsEhDR1|d~_Vm{l$maet>=U8o9y3bO+qMxS`ahzeHtBwy1`oUXHtl z2`;DLlJzv0sXpJxMq-$vAj=&y;}+$io#KX+-**miP_XP(8#OQ%7tCVYzFk7uXf(>N zsOSi^0Pz3z;DSr{-VhPpaTzz80E%z0UC6F`;s9cYB3Z%QA;*dD_KuLsTkOQWbah(0 zSi4q)>-VAp$-d+|@J+)lAvMH^$}loXDZkx5JwLx8IRXeriW z!G@I5qfhLmBbVDcAT1QJB6EeZ?#9&nvCJ3vXZA{;2Aj>LNE>=&z>-{T03~)S}HaQwh?gl z1Zo&NypB0M-Q!fXu2ld`>ZV^sH`NC!zOd8LDB#j`27_Q|el8Cp4K2^R9<&57;h+wg znxcOyM_Xcfyu(A-!N0=VHgtA*rLO&%_yD5Uqm@4HVxJbwF?Q-|!cJ{k>aJ}C>ppIv zqlcO>f?_ST9><|agcNQ_zbO$AOgT?O@N-KTVh@@Y-6pwffDQ~)`Me>CU3YV#{DdSA zLezdqCO=q=htHmA!F*>pFVj@5XFVm|A|;@2z~(~O2X1HhT`T4Y# z;VTeEndCim&w#+Rnop0CHW91E9%f38OsmYM*$ z(S?wO2@3H89Me^FUHwe_e93Y(T85y@s4)sWI*5Vv1(>5qQzNZ1pl@wneKHnxJ!jqVwmx=G-eRy~wIpBtvI+KqqY4p6aNj){I- zDOuq#Xe;*am&v`3?p<4&aM*E%G_tEt1Gc%JJ zQDR^s{&XIl=>x{FzmsT_GIaUmtOnh#aTQF4dYB? z(Z;g4UbmfEq0?1}^`kYztn}st9=f_tz`m?HzNn0Ni#8h_Y%V^BP`l$|uW)VBI(220 zgL~`M6DNv;U4$zbtrPcHme-CyaT&*<`#7IhoWUrUP%b;)Xd1_>|dCOFA2UNUV zXcga6a|w@$o&72}@>Kh35b|!5W8sz;F|#5p9?bC^0hheY>M78z5GB>1cFLYUnjRy4&3n|e@tUyKG~%L5oOLb;oTo!a@c*_4i|{?d1)5!-f|8n?5~ z0lK0#(m;TXS&dXIhKvjucP5vE6!tk}%=iLZE($?4%E!USz8+lE{$FKyG88b}>!yOj zS+j5!UeOvHb#mHwEUC$Kein# zCd@=fI?5UxH}SU2I2pnKL}pUOByR@U$Nq>Mb-_C#OW?HU0na%zFAtyu7NyIxm0_I@ z7DkeD$hr^mfop7W*kdZw#ozKLajdqNY1H>eH;u_h(iUgq zVNlRDI{lQlr}idm&MQ=QyUuPN3$0wQ!F8jN%9q>;58H_bybf0y{;KNE{tirNYl^OW zzUe>gJY#1l)SKWUF!bE;Z6p^oexCC*eS1`TF@($&$5#6e)ynQJ-@pXN50K7hWsu#R z1v6I;dWrzBh-)CEx2}gB8YD)kEWhfj#g0pg*k|^{T^d@=9Jg6x9jBQ+G1-W~po>K| zo~f_HAgDZ>V{_bRKuDQspS5B`M~H<1rL;h=V_l&{Xoh6`a%&Ku{X@oDjCPNFQWPP`-pC8aeeezqciQaZu(e@Dx#b9cUv5dfx>iqLyau=!5gMoMcedFHbBuRV@j6ho;XVVz@Ht$- z?Z;2?2tVaRJ7~v#>*EU_8jv`IvZs!L%GfWmfAvGT>fK{VVvf8=adkr4!zLo_Yy!0< zL1ec4WN9i=MYyk3gtdyV7Fm+!G{*I{3CsJT5Ra+-$Jq{xD4Z2ED@Zd9eE zPLHH2{FbsXdyBy&NSq&>Fp&O8a0EhhqN?AEaFU^O#sPvQiPO0Olqe2YwqBz|X5z|8 z80e!NR<*3^T2>R=YPvgL*E>6(de(%O@+!63D?>@cGK=qaer40o z3W-?6q0cc5i{vJ*lkzrsC3ILn;q%=DU#~K`^0O=e8PEl8NdrZ_SCm%ceF0J}+XbR4 zdfc_<&`wEwz?rTT*ECvI?nMsg-C%GLl;$1S>e0IF=&s8#b;IRYRdC-9cEx5`B>sUZ zd^L!}mujtXonT=9m7`UimbL3L;@4+m&-i#G@GczOLxJ@^AEgNdE6OF^%JQ=mTkUgu z^=OFE0Pec;G%>@?vMSFlC29KGX#b(tBbb1aqX48EeF*6kZ0f*M&+Z!NeOugSD{#93 zn5$;l+o*00soOzD&fO`jh=FWd%4 z)?|NzB%*UI+t5s$PQS0+f-(AXF0)1c28ANXod%Z*Pb2-hipI*};MIT=%ADLh$;K%eFfh66L!K%g31y}%8-p340R*`o&-<?G}u;5^$PG_FLexg5hkknxcswIZRZeu;RM#g$)tn6;!j1 zT5J_*2%i9fbQI)(Lv(m*iBk9pzF2?*yx}pe*W>geLjS|8z>)I9vkL}=vXTMTFrTpZ|t-n)p1cHo$daq}4-vs>PE2`e>A+gBITFMhaq;8^{2uVIaW*fd{)k!zZ-QYMEMUUzDg1eh6C4xI^+VB(7 zYL3H2Xsd6b)Uk>f&Di}8H086vs$r(#rF-he6D>>g`9Q6gMdiVdqiWEF)`H5;s6qP$ z&Rs8m&;|IM6*IBcL~<)gJnCPrcnCDDN!a130cYA*_#^n(*tI$|H!z+*)(P)KmMBj5O?I^HmHS^z0B7v${nrvHx*v1O>{DQxs_Th? zNdAg4jc(l!J2p2US-<2z7K`F=w7%@AL)Hfvd@#qOFn@{}|y@zcms((DM!nQg91 zh$2-7-PM8c?=6wvZ1w$y3D)rM#n~;Y)6RwtwA}qbQ)gs+0O;5j)tDdsVF1%F*`PTk z_ob%LqIER29W}({ogr$7xW#6acOfLQF(!Qjqnc2N>`CI9&c(?!8su14`3w~WASQ0! z14as-@?TBew0%_07rfAueqEIauc9SmUG*Z-z|Apbch}W?X5oy7JP7SWN|rC-U(#EI zb2GuH6fA5H5vb)B3E{uLx2ta7pswt~6Qw*buEpFyi}caukjAI`!ZFQ*T;uqiVJkSF zO$UE@9X26I+owbae~{7e{rDRKeGZqTsvER-c z){51Ke75_n4oTZ4N?cepOW$n1Bs!foAhP5(H!hn_5_XiuKGnV#S2VI0D?3%(0iR{Fkg=kB1vpqh&5oOu*wr4o0iLT$tG2 z;*@o@Z%{;#G}(Q)T^f z25|i-EzGI}VL-)VtIffF4#9PeEW>~wrWVZxy^9W~HJXL#CbC2Q975I|t1_Oewd#s?ink=j$2ej9p`7Kqf_vC0--d-5>;Q1^fCJPm3(>J(+ZG7ITxL1#10yOM z`}*Jk&Yf<7Q=U8(i_bl9LTzl3|H0MblNXCGi+}eStx85<*~zTZPAr|z1%+wm_tb6M z4*v!Nujo|t_bhN?9C{!i+)oe*2$>O9g3=o58DMy)XnwmcpoXNkZeGXlRn&Uvq2~sc z1A_*O|0u11xul`Nhh;8cv$8i&dlytz5tszOjP_6FwB?_FbpL!v%ZsD?E#yxn=*ACx znn_~tNBH>b-+cL#sJP0N?qTs_27Sepde*$e6 zbt++Tc9SI*aOt4s>S0t{igUhb!s6G;DI}H5bf&49o9`0wLyf9CEPVteNl%y@|sL0 zIkGLTm5m_g3r0QZ=$pt(vTXr_-Zg<}S2Y>P7>mt&DuZ z2$=;-Q7>+;V4)PNBz2frzl9X&P0a1aO%45m5zQ0V%6_b^SXo!oVDg3^7*%l#U+R(hNB(D{>Hp-%(Kd`K>R@V@l)+(@ga@=zt7)<}3 zf-%(|QtQwHjTF-b%dgCuNw^LxScpLehlHH zU}a>El!{;MjM$zqsFD5Rq+)2f6XP@;upGI3dkFFYL0BLp2SH^)T!Y2rl)WOG+=Cc5 zWAi~541bjbX>fw9-WM+d%;S8)@*?Eywv$a@22pXhMOM`t9%6f?MIL1c6}Oy1%Hx7T zJPelEaFkLEf*{toV66t|9Awizadnk_VqUP4PiRIwq)&ZQVgig8EWcRGMeT&Bg*Xx= zy7vM=Nt5Ra zaK#2;Z)8&;r!p`HZ_mSW-sQ5c4pyLzv0=f)7cAQ;4YV*v@vdz^=Js6Sc4xG0Jf1o38dy?}$|pE33fWPv&u zV-K#T02f3H08=&4Cs<&C{Yi zlE*l)?~XFw@DQ9VLrC*zq<1ED+H1RDh^@pK*VS@M&E!+$IM^32v_O9*k*v1~lFICw z7WDD3?0y{_UBaxpg9J-MSn35gIf-o&Ln}hhR>Yp=nBg;S6ybwLC69-AIkiA9mWz)m zSJ#yi0ppPgmx;|U=U6TniIO~mkuK#+Pc6xrS~D|pdBGFnA&ZVUEwqA~E7@0be!((5 zk`-n@~QX|{Hv;*HDf;0@8;STzEqXYa`BbOi1a>I7WZLVBs2(0LdLD z-!MvV7EwR&q+x+fcolDAm=31ejmuw-89AjPO{F%74uhCTf8*lEb*pT(LsjGcxE-<4 zLb-7nN1ogG5lG#b|E$-i5b_IG8g6WhTw1&3+=JZ$$%Y3$=PDFN@gd7NQADeCeK!vC zyEcx~w92^KIJwJ#Rc>4hghr6*vr@)&n)#m1j%PTV#JI{9ws`S9Be~-)fq)IxvD;`RWaU;>3c$Fn)FQLz! z@x>@@5zsx3($;FG5%9h=q11~A?F|>P^~e|yDeIwFK18LZiWT}CIGEI8uSeo5^{a{%Cfsttva1CnHaUJQY7ubByzvgPBy!df zW?SM)APWYvvrk<792Vd^KCRY96cblEaHaE+LcJ-hDi+m>Q5PQ+qPcZnx-!NPoRVcR zZWuN@GI5G0%^~PQ9x6U-8;-|OP|DbhXS{+mf!f%1!F?h-HsAPc*hCZ`yJ|RS z)hvnF9!JSgCBp=n5GI}j%HEjbIq<2RKl?7ovrsxnWx19W;c)nGGNtVO2)=5K@m#%7 zkHO)P>#CNa2OO7nki3yJV|l}Jl+yxgGNZ`(!EBIYmA~q6L}1{KE1q_KTdR$bw!U!O zed`u<@|0k_kj#EJyRX!!8 z#>Sw8goBj~)CjKhJwhI0zu83aI8F_UE!4Ra_)xc!|DJ9bnhlMNzltJnJ7ZKIOb+;Q z;}w;#7U1>lYDA=3tJNU^ueNuX))k`hH$HSCk2U^E z&qt*z#~E*Yg2_mt8p>J}f-0byRvVIeW)*vY8ijXIlGrAx+z*^oKYf^WQy~ChXB{p_ zIYzzkghIA%63f5~g>)kJAlTa%4q>gy1X4mxIg0`i7i~yJUU-5BQmOrdvYVBtm%T}* zqb(ZEhm&((*ub^53=+XydiyTBordm-sLka1|VONW>(}*)=3OvR|*F5ni zF1{H`sKup|fZv65QoM2bTykQxg)^zBzbgi7oEMJwnF1#t>a)9jtT6$55Le1uH7^te zGbD524I>uU-uUQ+Zh+&cV;tF*>djqO=`z`WjOq^amXd66!ltpg4qWA3$rpTB?Wp*W zt$Gi$U<9MM_DW!m3>V9ZoXZ=AQ)wR$dE9375Im|pQ~3&x)R#>HEkUJ#81hK+<>!ry zZ2^S~W2pCCL$CDO`V|~Z0{#8=1$!_>^yK z*SD=C>*d%ETt#n4fp(ns1Rlt;pFECwQ(4ND_~NvyzM7mf<&8J7Ty5`noObB6L7kz# z@d3}W5MSf~=%$8sI}Sz^5u!cB11mXkJ8+oG8<%Opmya|MrNL1B*h!4`c-1<$#e`o< ztV-o>fvN-t4s+J;GL`dJaD*@h;U!U;v?7yMkH=9J z*ezk3Qr{Ayc-jI3@y7AAq18o)UlOADCeY^VH(oWCWrrG4m)YV?_$UblRc{>1z_z=j zy4el59*m0e#wYTJizdHBJMkLC)FmC>;c#g3;Oo?=vO1#r9$2?`;9&f(AON-?if|_7 zb29eh@usSp_IXj3Pr?G`@*GAWyzp5I*91;(ON!`Ru7#v>2iH%w)d0FxDV6n5%NvH8 znw>q+OO0bqDLHx8Z#ulG0b+9m3BM&8S+$VIrl!a7U&o^6w?{S-%1g4dryJM&hE?qV z-?EX|%4Am68`qKsQws#XWh0eaLiv~zA6UZXKrGRA$A3lGAg8tHt zdQd18)W&Bjk7ndVk|mk<>u@k<#L%?)8jHHf#l}IS0CVacjxq<-!P&jT0=0Nef;rY1 zU3WMH1IMT)#{heHX-uMYsv0@g;~7Gyb5j1`Q5V2-$%)l&H3GR_TzYPfs)tMw$cf6U z!gqGy6H;hZ$CK&i$n_i6!hz1Yl_;6L!88?OCss9W(cX}PpftvrtV z4`tdqMUKI1dhv_C6K6a!S+L~fL#eCyRR5tR|;`FP8`yzO4 z5P6$wj~^lLzihXG)+f2id+Ok%9tJEtE710SxF$4xr7413Mpgtz_^)j ze8{QP?Li*}0DNu4k#5BRReVgQkLMKtva-gly6(Wm?O*a=z_;*W!hw)eym2&p$fmIm z#el6$sKp^6zF`z*#z8!ir-|E4qm~yALv3dA=;sc~=BUwzbi;71D_N_9eP ztMw&0^P&-@JdB(#bPIs@u|tDd`BrwM9ym^+VU;e>0qB{eGp#Euwjey-wJDt~L=^BX zu|2es$)*>5;PR&f4v^w)hx#y%m@776PaL6XBegl90bCE|rdyXFn;7I+f&!DYPY|1+ zXp(MRw`odxpj33p_H|IDNHO;~^w$DqM|$3&LHw@lPLvgJxVH9~)NOd=380jR=vTgR zN7e(UgRB?TQ=5UG#o>sP$S8(~9UIhITlud2#+Bo3_1a!<0Nmj;tWfvBArn{H)+g8$ z7#QkSA9=u2+oF_Po&du@4X#|cXXXLVVRP`dB;$cY)3zCfv>}gg$r=?-8|EtjCi#5{|$YJKs)6i_j(*miAGwy z7kq$qE5}y6@k0oruXq){$*N*@F!(@$GSA9jX969XE6rRE4?|-iCDV6QYCC0^1qTz| zUcSdOA{0EEpg_~it*f9J^pIXSvad#DR0$IrK^6RaS1v4gTD4+z@1bXyP($2fCvnVT}{Vx=~njR%ZL zRI4=uQT3|2!n#r3l zNL=XZub|hOSxh3sz#&8;|Sr&>(`r)svD(d0&=ioVc6#9anN>(^;Xd27|-!$%`wfk^|(w- z`2jnC5suO!($E+8K*)!uV&^D0tJA75Ko^zK%;NXBSg46~I&HYbKth8z$sOLqs23EY z%6<`%0jqkz@EsjWZ+vJqs2SMWN6O-<=fgN0M?y2TZ0(xGPy);%(1J`LqU{Q}hN7@+ z)foql;?!)-LbO{M^Gu+C^8EH_MU_#eEJa4X(@5pAXM(rr+B|q!d_lHao^!INV z+MLNMFr5B`TrDoSWoA8$V4@vZ=o*1^qzSyp31VtpUO58xm8`%^XF`S+w@V!kXbv(5 z0r4g|SZ2OpbRU>~=}FW=1y5%cIrz{Gn7i%=!e0S7@C$}edbeT^fmhWJ^53$x={$FE zLy3B|#2ZQn*$540Z(yR!!AfimR)B+m#X6|q^zNB*D!Ulp%lWk zo5_3)=|bH^R)UMIhN_A(RacdRu>+y@Ug5NzVm~WA+%%L>49z^Y&^@@Gkf-u5=?CS( z4~|K!7u9jox||VqVT*q~T@|R*{eUS@;cgk6pW_QfUh4Zf7;ah;cS7O59oj>a;DP;a z)KOM#mg0Ig2O+c)qE(yqx~o%AUp9wrb6XF>Ki>u+vLQQSqe#T^oWVOgAne})7@<6-BA-KeJdWFUP%tuKEUBF*Cb7{#fz z)l>kI!vTdK_2d6{4F(l8SPBgP5o!x6vGAvLJJ)h7axtBlf)-AhBG9S4&}82#>*^(@ zfI5Sbwm!lGi<4#P2d|F+vgNQ8?+JsTVN^7ycwjN=8%4-w^>ltZkE=9hGk?~@$p2Kf z{QVQ95FTv;#N1eCa>7V&FD(T2DaUL@>*0FAXo$g*uv6bahOTdU1EjX*`oTxXKn`3h zb@naLgZ5O)mtp}1*<|$})iI#j00s*)r5lxn$CipuqjGdu8LKy_gHaqWi__TLkA6T< z1-n`=IBH4$Rt0D#7Y2QUKCOu8g!7o8FI|BpH-ImficPZvu2XmWAC&9gjFy0(Y_+lN zw}<5cYFSq&vnVl0FI#h9p~?DJO~Ok?0NI!HT)kio_465bi*N*yTcRw6gK>cH+;u_% zC@`#Ho*=5#`Wlv@9-J=nigJI!@|0FY;yRCaRIY^CFBEbJ)pEapDI40W(nE87!KgW( zYv`po0B@<)K3=esM98bjhW=y<6glv)yc9N+MTW>iLOOPhRCjn_$Z@v9S-l&6cStv+ zW^ET8+`!R^X$``L-#Q3l>lZvAUTQ+gP$^*asB39K4mXUrU04DNyW=Pr0)ialff5}*DvVH!95Pf3fjwalc#4%miHDyQMkvbc z-&Y6Yh75S3v5tAc6{me*^WjG?p+NGb&Krh7oyS;ktLip`Ae|;D;|C0Ws;xZa&ef>` zm*;8tyirwpOAAcacnyqaWK`<~4{)KV6NGfPm5vQ$$U0kFIv9$6eHxMX=}kTmWo`3r zWsa-ISeggBGr2OMODPu&UUCJOk}wq{Kq3i)ngv93NVYL#B_ zK!xtotSCmN0ewz3z%VX2tKVi#O&=+XiSF<+iOLI>x7VoDu%#?8$OxI@5D$#LtNGEx zXv(!6sB9k&s<1ZJN7=2}1(wgf?)QNaufFb7AO@#&LS6WR z@f8a(w$7QF3NJIhU_{e-TV+)pf>0XPhx2HMkV7NPn!~AT>3Lk}Ks=o7v7eUkpp(kB z5y}g0noC!BcZ5e#NzUv2dU!yKf2nsQ)0Lb{ZaD=6D=R<`Z zQwQg@CAJ4YaWri1OA4g0Zy?Hr($+^ga5)MRw-zW!k40w`^EmA5H;(#|ILpFU5a?bZY}SCugcA!Qj23Nlx#dJjm=E(M|4E57tfA;$sMk; z`n@lalGQ*7Oh+;HIKIOnQxY5HQeB16h+*>51^=NS1Rva5&GM zr&nydff6W+DBzzr4qL9SR^x36Xe$?SNq0FIwa>j%0j6yIZ0Hln7q#`~aTGJN*RsHv zj>;

pC4E3_R{KuDyGJB{wpqLk@guXhiX+p}OGkaj3W9aCq>r;E0<}2rd`5yyS7g zFxj!8DZJ%5^l1vU11`KFu42jwPy2E(E>mh>fyMeWopj&7JZNJWV^AJAZoXBU+OEGi zt{;Uvi^mc1UP?2{J=`A;3J0cn=5fTdpTPM1ee28G`qs%ssJ;2lWkX=2GkGkm+5fSA(D>n+n0k4 zs9oG{e466_CEB5EL$Ry)k{u4Q;gok9^gudR&?4%ksN!&~)D5rpj5j`!VX~W#yGfUl7V9iG z9I+k}wM(A1KjA{~I4Ei1 zaFpOnTP_^7U96-onsV2oWJ2n!#|u~SIx*qb_`7I3f;D3Y!G+^? zjFpQVADiDK)$bToVL0%CS_+e#c)HKy`Z+D{f8b~=OeITnpI^ngDLM^V5oC4LBZpDokE+4mW_|<+MSChBn zv5wH4jqvD&;6`#Y8}Gu~EL-VgDS#x?`g_4e>l0p$?ct=&!7jiaSMfW_J~)Mrq?OH_ z^(Q`Bk8DXFcS_t7mpqJSWHJS9_^@;0;F*c*Jlc(eqtvLu;3Pe)FvpG<4@3JR&fV~S zDSCj?RA$)H9UIr0%+=Ig=IWwuP3l4|tV0pR>YpLy(ODcO*Mi+_8;3GC1A@Q$)7o9a%=17RN7=_qjFaQsr?3Fx#uwDFGoPkrN%fHIaE(yohCh;|y5 zSvg=RHV=~55Fute2*IOFu`%EHL#A<3Axd%*r|Fg!K@bw<*f#zn{ehSuJ-!PbPz14I zAVgyxF@APrHjIDZgOdZX|3z7JH+OvFtXpj<#W%fi8SQay-fIN;C*Nu8nsB&0TLe%7EW1Sp0 zQcq)SL5ig$kzBF+g%1duM&heWJ#JI{Z$78%X^%j3vEq2IB%#zbR4HFL-eXE^5{*hB zR;lB?w@Uu5!*TtT({T`AS$q6$Z|!UN5Kp@-<%#%E=487i+sfmpy6c0w3uBkHXI0cF zwq>38L_gj{ywXv@?_wQ|8%KbsP-w^LJ?MLgruli{L-s_Ild0IQ*Jn?Vmai`uG}O7^ zRdtTbdrLQro0lnXytt~N+scQ6Mp(LGx%X0OTGzB1D(E|trD|vWiKE7L4__7?FCsaW z+6_b6YxN69-8O6Bl|Pm0oHw4~%SK9bq*X+KMAcvj$it}COBO?c=0jQJJ>`Z6N?aT` zSgUsCplF)4by-^%*n04=HW8tzj5b=VfX}dk1MMu2qY-MQy@ndB)!V9o3Qg%PkE3>? zMrs(0)l2|*+%$TRBS#@;&%&)qfc9UK^R?cv$)3K1DKhwEOZ4Z&XU=^KR;*@_I!@>A z;&AQ26$%A3(r%H6y9|Yre;$XQCx1JMFWCo`)gKmVzwoiGO|(R?yry;pOY6uxaY#1s zD~4SK4`xzH)@A6xVJtA#lt{Qq_PiOy_^;q%%La-wj9u2Ar%@35g%{lg<5*e|yJsW9 z(%fV{3{SsO#S1gT$`!TlpwaC+;7#~}(gHJG`ms<4T`%0EFeoyh)16z$W9L5HV?q=PYf@6)CT(!}KO6}8_Qr4t+uOT6$Egr_^Bc4p}OA_v||r6R#xa^reA z6tTt|M-<5P9gqbqyCt36?+Ee6QK%5OrNO?Vxq)|#tV_Cae5pbG2&aUgjl)u)l7Pdb z(p%@cK2U`Wzbh+rD=ln1;bh5uDI2V~c7YClv7qLGL(nOkSTB?fcK=7jc0%Cw4o}MV zw}qARj%#C_$Uf*NEM5tPejp8>R>Sk!GI{6@mOsoiY2Ya(Hp4^AU$(CK#`{FNl(JT_LByx=C%pK1>|^z|n+anRZS&!FT9A@QUZ+;g68c>Vu3j6KGi7IJ_r@ zn!OSN#*z8kZsi2*|A+uB6@%Tx5eyQs)gv)wIk@BVo13tXeWm!BUT-feiTW zz!C1AtmsCI8SAv*Vc-2VX;j{-w6!I6w$^1H2k}W+%?ocz@8o5#@K4&6}W7Zw|0zXhZ#*i-@Q zqmAMu3PoYN2q1slxMoe*G!5)1Qj~+rrtUp@!43DFpJa;R<0=~H;s5dFrfa<`(5zgeaqtuv& z4Zb+7uDA62-O{L_jCIYC9bCx%fOaFtL7F#SQCmzJC_XluUwW3Ihds*>JWmUR93(>rE6cyzkAfDoUzU>rZa1sHCW!6jvxW}P!8Ae(-J2L`DTR1xvJ&p{0 zZd3`Vi<1C6BQR4g9P@OtONVZvizA6QVoJCk?$#y7XwlfCttBCFvG0xca^Q}s1DrMf zz#|Gd`i-M~Rk4H)aJD4`o?xSu8%GOgYjNW>4!X7jC^woBe6{WwW+vEzR$f3QOWWh% zmdNJ2NdJLi`gk{eS_55=ckQfWo|y`6P#O~yrKKqAalC|>jRl~>9kdMaGTSgM#{);T zS0jnIPm1t|2DEoNe@Vv8?&8ZK}kO?Z~ zSy+0&4K)pxiBTCCQZc(qKUGu4QdyU_-n+c@8E+WUmz0WEEh45wFejmy)rha6KfHD{ z6u2pd@{}uJG`YEhm6XwoQtVs+0sOt$s8$5;NXIq zAj$@T0>GL-eO#*R9k`OOt(}Sni&^uB6SFt!dU#wjDikF_5Sa?<=z}<|^V9)DtAt$% z5TX`mNQr;o2efEzug5{QENii)vBLe_}a2$s#SC9r7 z(!fTCM8Ax-$o+9U+hFI2nPF4PwVmjcXU;LEik_l7ZL~k{q_> z#>LN&vz)yD!DdH#Iix@81*_<5N;g|y7lh4Mk3MTN7Ie4OQ}CF@9*5pvHwkuB-moK) zPBTcn_Z!zLlN1&SpN(~JFJf9zP%X^e6z4cFJdU>W!TJxF4m_tfm^s-Lybl~QA<;5n zTK_io^qwUem%!ub7TA}j8X^K?&p%X%lpBUveYPYw%KBE#&OpIT&Scd)9EnBoz3lpj z`w#X86!XW8PY@(bhF#l3&`U;*hwLIVU-(ohH%kd<0V&mWP_{3d6JMvp(O0jTUZ`~h zF)ta#`=hrvKH#-m-$^TXHl+?v`aN*RF-1^-l^Q5NiqnKXQ8~|(XTa39CKB-2Sx%uO z5ixx(SbLsPCfDf#4D96H)L!9cQ{xV$AF`|4jW`(F&4qCu4vf~i2G^x4Nt{}+q*VjluWRH z5AL1uWPg&Qnk8@R2R%~sV|jS!?W=JGm(&_VVnvTiMzDjmd1yAtlCQGk9sCz9pOvWFJNNgb-RtZc>59ZrT7ARWx_udv`By1N>$ZC0}2m!6v!WN>g* z?Rca3VAJLPesJ+0*jvf4{=BO z!=U|SgIAXXcq3xC=wAB3Nqc=TV*k+K5i*31XeVLaHjjiZ%f%3^7CfC_I(SkRs2=S2 z4MR&6UG+58`lB@Vl@j;6@WWR>+2(aSL0*H^!G7qv#o3PA`w=4hhQGx@|NqWPM==A4 z+8x=5|4?o^>SfblSNey9u1RzYia8jpX2@?Y$~t{P@RVyY7tzDAaAg}P7iArmP%Wfc z9Wc5#w{?T`8!;V!y<0YgG|3WY-v%F-PD51tL*(T1jx&ho&J59w&!McA_YFd*9Kn`loI*?CzT_VzY&9{p5{_g^N3nvQDu%OM1bwcMRjsJluI0Cb={U6>M0kj?GFC zL2;+UtyITBB9()+ZE>lK5Knh|Vi%(#+6m7RW?X~N*+#$7)db7KMI)Ct2Oo9Sv6469 zV2HKPLe@0u74+1?4wuByOD|X!0$VvF^Ka$I=(-8P@Oi-vL4{-=4Sr_V0OD*Igl{M7z#_@{w z^{dDQ4J>7+`3j8IO~#%^l@n#OKt-H$eSe2*=gH3LlC^sm+h)p1+W6KSo)CSosz%`H z>D(xDx25#P(FlMOZ0iQ-IB}Z%=7B?HBrm>x+6t3k@rY@%6$Km)Wez^?RvJ*s9<9X# zMz4!f${J?HxI$5d?9y%=(T7qw)wbAxvevMG$Bj2-LZu}juxfhH!5KA_jrfX{fs7@l zTuwI*VbEwjEu2_@F}c#r<;GP#cygoJaslc(7RriWc!iMf$==t?K|`xASdLk0hNxn_ zg$KYNYnwgp@Tqiywn+J9wSYuTb5CUdIvgF6Qb>#PzjQyfr*>c5;scj$h&-`}Rj>Rp zSvDoT@t#T3eAw)IIcVQ6%RU14bbdiZSjxzi_C?fDsufZIOP~*CBZBm!U zqGYd9F^m(Zsni`fsw6CtBJHmS%qcb%RrySXv7b}8ue9S>CM=q zYf}r3t~@{H}Yz3u%Y70?nIOIl|9BP3Vr&Gqq9O= zPnx&#tl;Qgofjt?Dn3d$z;w-#9Pk7!IwOZ2VYu)AU1|#l!|_xPzMcK^(49 zbCrbp`1BIetO*IX9*3RLDZzqrr`1lVK-)j@MIN{u{npny>$YT8gzr#w;T>d>PP{}C zv#RC{NLrn{C=S;bN)jG8`huWe4RP15sDK%Kv%Zs-K}>RMk!vKc0i<$+})p#u8D~o~dGV)mD);3n|fifZc*(M|}`m#2QDJ<1=MCFVofRpSN zc(6>KYx#E`>|TH1GgPvo90541&`*yyVHo326A?-(?_;L}$PwbaS=k}9gZk=#6VP_6 zzTk-t*z4+5hnJCGyfL)%o1M()hqjyX3_R8j934~JD2ukcvJ@E!j#w(v9wz}uY;_{hI zNa?~G=mU%NI<1ocVga%Mtn3mY{zYY{zFian4(#Ns05&*9U0I1b|VAuh<$ zVR3t(PnRK3(n=wn^T7+kla(Db(blKfhJ)yt%^$Ag#wv^bcQDxdq*{j1C-8&qy*1vZbud(@^2=eC}{K=9Od{ zl%LTME?^DHcZ_cw=>_{ep~t ztHEm9k@BD!To7%FY@_}3W-m}Qh-7cIxiep=z{j_->mSl->Bf+1#4EchpfbOwOmgMe zn$svIFRWNa3#yM5Ar%UA(>4J6TM@gVBU#Wi&ubbmKO#6fvZWP?5h_~ zRf~;Tc#hoJ>c4>OL!4pJPFJ6G)D$O^m$_ij8_8;YSfnVe?yIN#0Z*Bbd66@B&mj$S zv%9-%x(%v94D5xe1-&e$M?99Z19xUs^RBbdf%eK8Pw@Si3Bg;8NVFLPuI;)n%v5Al zDse`awGWYeQSt`M)7%C#a*}7@7F0~6-0R$8cA`Q z7KNvf6|L_i6%FA@BiD>h(hy9#rL>PSXljRoS5}x32T7;*%CQ}e)LI*J5zAJKmSRHr zw&@}8#i&M6VHxUZxK_9LG`U1$NW$4*krdKy@&_b0J*{r>Op#^opj0gfS~uIusqL9r zNQ49n^MS;)+)W%VrL%9mYekDgDrFu!^GN>YR>h=jBB!d zY!-UFs&>2C*AE}ZpLHIU&q_)n+H258$7Y6BV+zNu8HCnh5Ckm5*{!r_Of|E&DVQgm zXI&fru$$;yws=9u*2y9|$DzT=g5}mPTsF;?7b^f=Iw-pXmW2{06(73xbVE-{r?b*@ z*TfW^Fyub18frBxMN=qLl`L=>9#R?dVb& zuxeeH;4?5Xk5dH2LB^~35#GyGI*Pq{tqmJ&jycr`B+o}Ku*r%-pCz^eW=CeFFsyfz zfYst-nf}HbXOxs7hc6o%8&}3{-E{q$d3TWP))uOR3ey@pHqLF`z~&d{yez&18)hK-RBdlUb$#ca ztD{iD_`nBJD6663(+(g}MqqT>8dr8OufM+S$QZloiSHb_54)F?Vg+W`ctrABgKv`%5DRxsdsz}kB$%>kv^6H7QfWppzQAI2D3_!6) z&Risr-CHeR5LT>~Ek>NUWdCc!Br(+dLL8I-@p>zxCyB^`%p4vzZ*936dc#i z)()=27xc}8*ba7-ZX- zHpLm7*%J=$e@%AR`v`wYe*rg*=I>h5`n0n`l~x$0wC&ni?Og^$P)a)h3ss{#t~=Gp zT9g$D?-OV*71we~29uk#BtELk=_24jL2h3QQs?sXVQ5ZtLB;c7Z{~{d9~b)%&#I{; zVavDtSjVRFoIRK<%%J>8N$QW(o?%RlAJ}Za#890SYi+N?`;MYS6+V6U_mRbCUW&d3At5*dgE&iyfquG)Gti#QFS&C;9}Lv%8(? zqIO;Bf$4Ue02+%RQS}09+0;9yi#(EIWX%!+eCV98dkI@x55Tfn_swbIq)i~auLcy3 z)dakt`^NvgO77awgji;#N+{V(u3uF64rB%S|NhAh$g(mEUoFL;txO)ghf#<`)ht(^ z-887zcLTBoPxu4u*YQ+bqeER<^>POcBf6~8>eXt@3a!F8;k!P2m0Tkb5a+8B8)fQ= zr5vv28kxn;!W{=^-CtO<{*+>86;9lR+Yc-TT`8+znoY|w2&8`61*2I>TVwC4YY<(; zw(aSHhcZOUDz9eMbyqpb#E18A7nAU+t_EXe%(+Xn7mO3Ogk96jGHT13vHi^h4?SXc z!!lM;qm5DEZt7w5=c;XuYm>W@ERZ+09(%1y5CgSwqu()&zK9|G)#5oqU8f2FtAn%G@Fw z#XRst619!Iy0!5voX`ZM8oh@TQq_fhyLKNq6cWfnVePJmr<@p8OO)%%rl1!RqO$dZ z5vR+Y1-Gkj+*D$!x%>`=OR`tkZX5?rB`P)33l^7fj8*Z?a~%`|1hC$)Y*1^E-8oL< znFFUiQD>Ttc!H;z!G74rEya%@d~jdS2)Zsl}!xzoCKa4cWA@AZOUN@K$q zSv9La;zl8a9xC6>ZhoiDN#r0%^Tzc=YJD}GWBa>k-Ct9@VC`$sR*8Ms*+G;si!(OL zjjM;yR?ofV)1a_dzSIjYAP!mCh3kL^97Srq+_;4j?ZA2}-8Jcz+E?H@Y7DDfo~`P1 zl$l3OH;!;wD7&DY&FZvifi@|H&mSvH5d%6Xq8h4l&wXeEIRWDK&`He3Xd)MSnb@ON9 zspfG+B6?*LwcWW+OKIiZ#2YpNoZVh-MMV>$v9zi@+?62F?wWp7RiY|>zH!+O(p;Q@ zRnwnvaMsAKg$E9eU5GamFBiXX zH_}rG{T*i7UG&)TPW7k7Od*B9;W$rAU0i`hM8GgO3CkN7BYJ(h-F8lgk;S+B&N&<< zPjhh&$RW@g&a!&_c^K-en~AWJ^B6@eY^&<_c+xTlGaZm5rvndM{Nnn;VI79ac6`Xl zvqUt1D${A+IArUyDS&3}0m0HyJmA_34jBEXxTT~W7te@EjT+zZgvqjoStSQqyI_+~ z=5ZucrYSslfu4P?j%PO~`@j*8k=4Cu7mL;b zCqSO|MFWA-FOt4D-2?6!nm6|s>Urc!SfNI^Y66H`hr7Uoq%V6Xw6Hf>+Ny0U`I15#h)M`YLIpZzYT({(dmVunNFr?C-TXS zENzct2V7p8>#(O$nZ#Dm9!FCT>J56v2*wF9?T&mKN5B@#hxjgp=^8PKcc(rrXN$8e z=E>4178sRfH;kyoYwdmZ_jT=_bM>$1O5T}gZp=LMyD@X4pa^oYfr26JYiP3eaT7&5ioo$DA!~Q8 zHJLS4*EA8i=QIFu97}z;LWIZy{a`7Yz#ai@J(3}17@18e16Lo4Yr2hF&6$9b`GjAG z^42c}Yx@`gXG_u{o{jlje8>45DRLLGM08<_458Ld`Gv64*1;7wTu-k6A>u>FA*b9~ zU-#NaqZ=Z_lxl);ERm1^JBKVizcf)$K5fkZFz4p=jyt$3RQ;li*p$9O59 z3H%a731NTwh*O@j%@qpX%UP&`6EZC|r<0(E_cT$b5F5xNywxVNsg_d{<&{%0;%D zI?oA<3wILtP&>R;TjzX>igiwMNd`>mE_#(^<2!yIU8c%RHz`5|w7w(^r0&}EO{-R( zh_M*_aN!-_ss5-+iA^O6IXi|NoFDWN#}3up_{S!J5cr1&6`L9;^a4*4j^avcx(=Pi zvdFU~x#WQioUpon0RG^)*p$5v8PX4+hVD^;I1fISHfH=T3N?o<*8SrLS^YO!TfRk`U8c9=yF z_;Rv__o(az5@~ebGPgfP)AkL^c~3p7Z6^R29=&^K0#RddhEGRx>~gKedIv&37*~0; zT}caqv#;C89DIFmXW!AYpFjn<3KP2NGWW%IEXf9*10qn(#Qna<7LH`J;aS-O#5b*{ zl9y~95K=zmlMun)2@%8X@N=%Y7|6p=629XdPn}H*#$(+bT|_!R>SK|um#g@E)HNN^ zBWTer7N+RP>ww4QdxC{FnQY%38^?IQ(R)7CXq&m6=?SI6!cAkgFH0*m^&{qxf(m1^ z)Ctj6x~+%(drh{L2Risz{M7&lvLUi`D;%;Z*b`5IEl$(ebN9u=Wj?K>M?OU0LWZ(H zs}f$RX-LL}mMg@~L(TIyt^)GS?>)w?wgFiNc9b5mB{@$FpJyDluH~Vt@V>rbpEA`1 zTUObyHaQ#~+r;M=wMgeiU=8vyQns9>Z<=yhF@ObvM61`Up_Z7|XZEt{Vck}39#$E- zhv*|p?Lw1rd~nrZNXw`BI90mb{aB$E_7*_)%mKGuHiO)BdRn`|DxMY``q{-VRvyp& z>?U$_y{mncE|hc;p*=oo#|E^mHB>JzKvygc1U`wZLr1lh7?GNxV$ z3S7Zw&wUXXUAg_TqerR3eO+-So)S0OAKqxtGQ4~x(?S57nn)R z%e?>@>YI4R_Nj{Haw*70qF7_6jU^TF#j~J_0Ks9VdF`|h;gz4vmTvS-C)j&!iE-jc0t;{XdNSfsDyer5q*A3t$HvT! z;Jut(TTt%dg0(M=IC zt&@PmXFc(4hNU2XJ7MTekgD%wcOE+kdou-DJeKPY88M6WlRIexv0EXRJ_*HXa|@`@tLj+F)~_1K#JdBZf4$uO(RjtQ&Xe z9r(=ax&y&~^ISbAdb{6$sgK1NoZm-bPf7qaWXB^Y0d05(*Y^3_M4Mm$u-eBE`lqzT z`LUhioMKYB-KLN(!}xvo8&(L|_@CnFCk!ByLqPpl!MlBo-T2zvp_}$gl5HT_?NpWe zntULJ#`9PTe0vxwjn&dMY6XGjZG1mCbl%y9HY)5C9?SfNV|rte;JUXJ(t{xC<`$nJ z^QiO;W|`)URYNnCi$*ZSyo!2t@8N2lu+L~raf6kdz~Qc~3!U0j$!=eKS(fnCn{5{h zBUg)q$sw>MyPbNMaeE#;(@7y1lg$!=!7I1-EwM}mXpZf1vveXy+C z$!uITC^*33)OpPfnHthoO=Bm5q}4mGDlL)sx8e7d_Er?PckHE=AVTN`s?((_(FKr)#K)9TSiRT}Mzz zXNiI+Z7M0NQKD`=Z5r`a7>pd%NC{o@+$2bYPN*}tZAhbCC?qeDmc<+hyK?b8mM0yi zk-OwA%jplsufOy~aGF4!v*n6CwGzgn(P)LPHct3rHZaTI!iD%v(HB)M-=l1`>3aH$ zJ7J+rD~eirzq-Ju9^9m*yz?U+P>qgf6&sIrGXuRsznKpraBBC{+<-Gg0_Z>IsVJGO zM1gO4*K$A>7_rhTxTHes3eUsdTr|>0jb{0U?!)&on>y5iBpDn~btIDPj0l4I)&CX>7@A*PuE+YPvF6xF)TL&z*e5 zGW|X&vEBf>&dtc8{WyowjG2^BK;Pz~!6q7pz$gdT_L!4ulo;hH5@ z7)`N25&^k$eMpXU59%NlR{XP4C!qs`bjgI;{OpJiTNda+g@OAEo} z8(kGHa_cyV*1DikN9N@_7Ij*j828(efb>GNcjpix4f6;dOMnj}ZUT{Eoo*ZT+M?r` zim>PVlkFZuS9J7q8P6!5_alpILg!-$o_EaqtFvdp#-_HmVp!oxk~Ie3-j!~(jz8Ni zIA5$jqBVs(r~bfl{h`Vt--M&8*23%gsBk>#qAJ6UkLn2eTkq?q0Dz0sQwIK)!}%TF zjM|J($idlWriZ`P;XMw#46FX4F)sVy;nGX-;p=&!$6fo|`Kb5L>%E0*A;b>Rgkh4R zIFIO!V{d-PVy~A9kCM*!sr8Zq#*SyXuAXf!^Y7{%Xre0M1=-w}?(a^K6atX-T%@mEj~Y@w*q{c`N9A8olWJ3B;gT`P@%)Gnno9;7eWhn6Ld3&GWLL{c;`b z{nV@dws3Kd_UUTr@ncJypEWlHva5V+wnP4)Kl`mQ4_ONCGYijKiucV=ytgf$*X+)h zbCA8%$MViM`=^1-jmMvzPivhoCpW|1?}^`DLq$NP>?{q=G4LK;MB(30ze&bG%<(*9 zL_bL&yBzz!{m5=7yI{fWYBCN3Zb?}{qPld+0)JVOL8@CAnsiBezn*-54EBC)t*Yp% zs?Fo+7!UKxl0jmjTfLd-e#3x&Jm4-Y#azUD-L-$)bH1Bg5gu!E6`F8QX@_w9sQPuInb90eiTK_8lF6ds=gz(7f^AMVceE(({LWQ=rhxZhB_M zU+U6w$v4M>(7}v0LM3%+%X4)!+v+@I<92az(9uaC0P#Io$+2PaSdxrJzbqOWi|r;o z=f}ddZ=-+dnD3wc8#7RY1`LWePrNr_2D8g_Zgtnc+&!h&vUP165Y4 z&(>*|(Vs8GR6}I+h<29q5VDyY-B$mbTBV-o$(nq7$HH|s#fZrK8fByO(wz8Op7E)e zhLe_zrKvW$BQgtEEF2z38~799J|#7Ktkr!wd2nI@0V|acUTCi3BwQ5&sh1J4%Se{= zMLuKOJ>TqIyE~tV6{!J5qpUDRRypH9MDBB>32Dj2yKmNAd&e7)fRtkMZ)EnTHP2ap zT_;lGfOUco13HyO&iP^Uom(z}aH%sA79qDL+kq@oCm71gRu!g>1H0mJP9eqf5En5{ z)_zS;m4ReApg{Y1l(siTb*Q0=MWxcN19cTU{5ORCalLOwmS0wf6hN7Mv@oqdQC_-$ zlFIvCWy1L2&)%y@aFEZsKM_f2Y@hcDqG~nBF7OBM^a^W1ru$y_&u2Vh)@<`E3l}8v zD1OC9qLU+bkYmAo5M^nDn)WL2Qz?B=y+LsPGX9m_siyOxyKX<0qKuz&cM*F@RDD5k z`iiS=-Cn?91mBmNg#cX8G)gP5p!2@h(UP&Xp1GE+)L*11;99H}Gi{dKXvm^?(2_!# z9*U(jBJ8K4usZxT^8~$5{7wM9x{OmfY2M2mS#k^-l5Gz)2M4Mi5;RtD9bO`L&5Os$ z_+z?hMPZCBA0cCZ;f8VB;DO6KP@;?m>3_?Q;ZJLQ|D#+w!*@m{TG{G4AjF`geW-om zr2iDX216PJu7&YoR5gW@6oOOvsDcU983C*Oo1y=A6)j;?3kO3xd>Ua3T?a!!Lw#!l zLwp)ZLn~tk6MW`h=M)1Ilght_E-DiKWoSbaQ#hkNA2rkg-jAXf8M;6P-D&nZZgx%d zO*25FD4)iDL&Tp}*k<{4`Y=Uy|Fr>tyi0aNum;NBmy~kPymnFvdYm#qoVtCtDUd|E zNAU1{%eb9km8~0+#4uT|?N}sk_D?2CAWNGm)4Mwmf?vZM&O(Rz4N-quAe)Yb_LoV` z6(fPzi~m;vc773{cb}WO*(1MI@2{h&4*tmcqcnml4yTF1g98bX4<`CD0aO}$4w%vk z7}4RaMw&UJy7aTwZE4M2in_5sPV=78+j4Kpje@I`80Z36QV}tAD4gx!@9w^_o~^{i zSg7buWnvc8(vHQxaD7s+pRx~$eIe4eGuNF;-A6;CD#NHSl$<`*Ew!M6IgaFW9=V%y ztGuB_xVQn?;Nv#<4aB1*fJyNGnGAqBXuq(`Bqw1dNC&ZUfUKcY!23vi zkZLw3sKA3{d+ zcTxV_2tXWoa8V+0s4dof*FV?e`v5fT#lB@#By?2JX=fINYZG%x~oQr+|i@f&Ldc0;Y}~D8av{j`tR4 zrucZ?!Q0Bvd8$QBY1cK9EjE(zO$bB*_Di|0kt|YMaG<~s9gdunE@NKlO-yPBa-00+ z0DF(j-gKz6rr<$~deQRCJxPLNT2e8KL$M*|2@|`WjMY-bbxHH~f$elV=hhMP<)ohW z;E`w69YwY>3iDWIgj6AOtZrf4)9T6mGLum?idB{fDNUrr-t_)+wYA~xu!|~j)6X__;el>jBJQN3HjZWZN`>*anh-9_#sPeebhB$xZu(Lo%sU?3S~9_hnWxH zsV<=erE-;zBr>#GWS7qEoRQgstugACiUoL0%$7T^s$%8k17%ipoNW|dtz*@idM$tgii@M48#$~=#SAr>{3tOZ%7myPGlMh!t!nW$~hJHn?-ccs4(SDh^VMo}EuO>s)@Z zDJ-4gRDNHQ*%l0*Yw(1yj{LWuGs?(oQAl0{5;<$OG2gQ{em>p2yn#o2_9FU?cK#Hr zF*E<790mqPMOxV@rVoflL8QOz5r1z_W0GS&l==z^#7V$0%=AqDv!5_>fNeesdjGXs z$(tj0{f3f1ML={+zmmcfEdkdHFcluS`!#Y9wFM^POOFZL-y3wu;t*u+$I$t~0$|!y z>BbT4Hpla=(!BibsasIRen=%KfjR|=`mx!-U4<%shTIQO{=pWk#OoXQP!_*#r=kUH z#bI-2Au{`Rk6{)cu+|rwBJTy|vi3a992yqnS{dl(bIznno)%CJc3J~FR)=V|0ardh za6cO0&x-3)iS!;1)=;zTPA7v`yvU&M{F#vN)*Z8pkN~-T?2lvZ-U(>)Bnwm*@n z2{ChVBG50Ad}60<{ph%8v>e(&uvJSWKQ5d!yMTB*LjgLX(6DjjhiF;$Z2z+y+VbZz zlC+civDh9`$U#zhm*Eade81{PF1cn2I?tG6i(InYw$IuA7Tjhbg2|taH$%I-KTpA( zHlG=9D-oDzu6?uAFBTRbob7~_l8S?P5`;8vU_3{C^PU9QKR@B62^0~2Bd|ZkkAKx` z<>rR6cd#?mwS;oXV3J{r18jApu7TXNO6V)Ro!`DSFfTrNx5TAN$6OK&&m!TZx}*{j zRT~Yis2kuLZ7N9iciz{*Bb7dE;u0o=L+b{`+RT^lSY<__y*njNs)AoIKZdDkeOm01 zoL50Lrd|QlH_hl{8@7tjM5>8&toWv&DngqJ6X4L$n}BbxSa3TWMZbT@8cUWHesRA- z>BQy*cLL2ENq}YQMrCxdQ3;YpE-UHPz(72O;41<{mrw<`DJZAXw=zX!ie zKpua>4L-!-w1_zti5(|{fk&4`KdMWJ?qkN0LlGA^DcjE;r~rE`!&7BZvd~h(sAGmG z@+=DXY!_6@vmxfMWN}=(_*?Swp~HpQ2_rm~BMDIKM$@2_h|QY@NK&k$tzz;K7zy;p zxJ6Ecp5>fF`Rs=VQWNDwsY|mmE2)pzHjUcL2GWUx4!C2F8Fdr>Y$z=cJE6?rQjyDt zrw>S`6g2X!IO>^Rj);kC=m+SC$;RFo8wT%B;BUd|gujvCpW<=`wqHRim%M~kKkwfl zHD~5BebQB4X|3(2wYh+N2}N5d-2koUNKEsdgeIbG;Bcc>KHUq|uuWTB^nBIC z`{eusR&p3=hF5QXa5Uz|ek4h?w(m z0HY{jyiT~DQmUPTRt-VxbcQFBD7 z#A$AtaPY-ToVSszJMkL2lX-JkQ6G0~vxCUv-IL9;!AhQ!*r`nDin}%#2hQmC|-{|yD4G%hoU-xyXXg)X)ItY*p*T8IEd|sDHWhMBP zcWsG9r&(y+VIK>*kG>?qF2Pt^(<|^BLd+<}I~m&YzZa3kTQk zEvoKcfF>*$#eT!kA6o$bSmpqaNEisfBXWT9%uApZ-}X%)Rp8)#VFWIa4HU8}Ed$yEpB+}J>`Hg{$=#&Y}%t-WV6Ch`>!?5Z)3nf@`;eKBd<{=&Ol>17@Hf#6iomd2@t~ZN4 zubxemlXU{8CGJ#Rv;(ZK9UaWc)^ge`*r2{pxTPitI+{!iNBTSLB0)f?Ad#jR)+*k)P;2bPnLo1HhmgT!rz# z5=pgCRKdmdS7oDl+qdkfhF1YsT9J7#Pbp?3%{rULiYbw=79hI5!x@vt6uVCAXFfpd z|0Lr44V8ZijsI!52mwAue_70(3O2r?Tgfpub)|nnwXf-tKgKs9bu3&)6^aZ-s+&oO zh!+xMJP8HLi(VM*hzW}x#UR0)5~ByrCCVdDV~dfqm#=neZiS1MP}J|vrwhmPx^&YJZMjGoC%_(km-VGIT(g5B;rlw}e2TCEk5lRQ#ZR}|oZA1) zkbds{IT%&r!t+6IklF{e{Gg*74ygDWQXSY3#_~Bcxe1U`OSo81{($Nz( z5Ca^oT~`RnSDcRNb)Y0q%|oHcu-7lVa%#LULqD9l*Xf2uZBX|=Mzz~;_NUrNunv6S z4Qt;a-ap`vhj6X{g3~hSttiVcPC7f{^t(3}vJ;M& z3uk2~h*O_o^V^=u!ByYUV5!-*B&umv**M4B%AnD>KS7f?4e0xgcK*~{VET0q0qVj7 z3>VrOMOu1hIa+4M4|+&}$O6 zH55Y-Cj&TkbWL z{)k)VmP5em-_l*Nr8CmvfOMg-^J5?b5wh4tTq>yr+HJ0`W3Izwv-MoyMof&q*fY~Xz_%%SBs0fkr0NIt+bNG7Ppy9}wO_>7= z3|Z)N%COR5&4)4$g}zktP_q+#!`-G?j*tCV6Pj!#2DbSTj*5;HHjC1~M5U-^+z zcEfp3V0;J06>fJCPj_~l4t#a2T@gf=J`KeZpyT*CWoo={&p)-l+Xit=)?-v+Uu**| zV|Nwo{N|SZLJ$3d8%Wl` zE-FBc^(pCgOAqxO9>IYaKUP?MV&=$eX&HVi7+fu1@cMG9q-&}sF$&q3*=ocK zxvIdnT*k$N2gQE>8(#kutuWC4y0V$%S}pr&VNRLA&}i|!NXB>YMPnPi(>az)L}%OZ zl(gszHK-kjDb#eY3k4j*iafH6ieBLEVs=t+mk3%E=9ApfQIkSl#c^uVC?9N~nLB{e z5bdF_9w08i_{en$=2%@lz_+L&@?s*tARnfcC8_FtfDI3eViDWPl2_JyGi$_S?m5m>Sr=mw)v_&x(-mFB_89KQ8O22Nw= zC|S5PS%}-U5BR}rUBUs}^^;xHAPr)z&idj{83yDXpv+MB#R@nhmwKmT%GQf7gNGwV zauzX(chg63Bda+`dbrjGxnI9G{A7Wz^?V1`#&G|Q#~R>={zH#7-LET{OSU-@6cCry z48&CJayu(AMh%xJdcPHYx+k1Q6_Tf5N{u6@aZDglQ&?yBNa}-g4cfCZU?!muqKU62 zd6%kT_q=>Vb}j9c>+f2u%d zp#k4+5FQ<-I~6IM5Jp_;<9nrDbhcJF7I*KJ0CH>`+&g%;VY?VSZS*(?H$F^2R z2^rHIc1xY2ZMnl3OwK3Vh6hp$yWr^}S7^ zh1L*}jmkXD*Zt9P3>tY?B!6=OpOAH0z8!P|{DB|S=r^SODSD!3_|+Jek{z}LXzyn$ z6ccUNA$BV+csS?xS8st4$hc$^iS69$gs({>h7Uw+*267(0>RRWrq@+U)i8?DEcLQRCY#qs9hA5SsO7s{?kvud`yO%8cN^8Vv(c7uO~A!S zHw{!B&vGOZgM_xk-0&Ado#4)q48rwf-18^8?;v+@e%h4162+OQr^ zco_5MU2&L$1B#I2GW0!P9}JGpS8NbFG`SA%g)x$s(m##JjlZ9k(uP^gH<(XZOojVv zh9p5fn3m|{JTfPil!0H?Ujh5XkV$3x(=PfEm^wJ`cM6)iSgx}Z$`ZYcYA zwECfOBH2n3C%|Axk26o+=T;X^p1?Z&w3@$R?@xgf-9O@?OwpsT0QLkf()^%7rzXF1 z%7on^KiFent^)u=T1Hy%IN>1P zq}WjYFak7DpuVv^KgfL_wU4}*d92`-q`_bOzrX@*)xoCxX6Qc!T66#+|M$!hieW

}=<8WlZ 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%0A}6 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

\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
identitydescriptionnumber of relationshipsin_context
0587\"OPTIMIZATION\"\"Optimization\" in the context of prompt engine...6True
1318\"PROMPT MINING\"\"Prompt Mining\" involves techniques to discove...1True
2267\"PROMPT TUNING\"\"Prompt Tuning\" is a technique for parameter-e...4True
3164\"PROMPT ENGINEERING\"\"Prompt Engineering\" is a subdomain of artific...86True
4243\"PROMPT\"A prompt is a set of instructions provided to ...4True
\n", - "
" - ], - "text/plain": [ - " id entity \\\n", - "0 587 \"OPTIMIZATION\" \n", - "1 318 \"PROMPT MINING\" \n", - "2 267 \"PROMPT TUNING\" \n", - "3 164 \"PROMPT ENGINEERING\" \n", - "4 243 \"PROMPT\" \n", - "\n", - " description number of relationships \\\n", - "0 \"Optimization\" in the context of prompt engine... 6 \n", - "1 \"Prompt Mining\" involves techniques to discove... 1 \n", - "2 \"Prompt Tuning\" is a technique for parameter-e... 4 \n", - "3 \"Prompt Engineering\" is a subdomain of artific... 86 \n", - "4 A prompt is a set of instructions provided to ... 4 \n", - "\n", - " in_context \n", - "0 True \n", - "1 True \n", - "2 True \n", - "3 True \n", - "4 True " - ] - }, - "execution_count": 19, - "metadata": {}, - "output_type": "execute_result" - } - ], ->>>>>>> origin/main - "source": [ - "result.context_data[\"entities\"].head()" - ] - }, - { - "cell_type": "code", -<<<<<<< HEAD - "execution_count": null, - "metadata": {}, - "outputs": [], -======= - "execution_count": 20, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
idsourcetargetdescriptionweightranklinksin_context
0296\"PROMPT ENGINEERING\"\"OPTIMIZATION\"\"Optimization is a key aspect of Prompt Engine...1.0922True
1291\"PROMPT ENGINEERING\"\"PROMPT\"\"Prompt Engineering\" involves the design and r...2.0901True
2294\"PROMPT ENGINEERING\"\"PROMPT TUNING\"\"Prompt Tuning is a specific technique within ...1.0902True
3174\"PROMPTING\"\"PROMPT ENGINEERING\"\"Prompt Engineering\" involves designing and re...2.01292True
4295\"PROMPT ENGINEERING\"\"FEW-SHOT PROMPTING\"\"Few-Shot Prompting is a specific technique us...1.0972True
\n", - "
" - ], - "text/plain": [ - " id source target \\\n", - "0 296 \"PROMPT ENGINEERING\" \"OPTIMIZATION\" \n", - "1 291 \"PROMPT ENGINEERING\" \"PROMPT\" \n", - "2 294 \"PROMPT ENGINEERING\" \"PROMPT TUNING\" \n", - "3 174 \"PROMPTING\" \"PROMPT ENGINEERING\" \n", - "4 295 \"PROMPT ENGINEERING\" \"FEW-SHOT PROMPTING\" \n", - "\n", - " description weight rank links \\\n", - "0 \"Optimization is a key aspect of Prompt Engine... 1.0 92 2 \n", - "1 \"Prompt Engineering\" involves the design and r... 2.0 90 1 \n", - "2 \"Prompt Tuning is a specific technique within ... 1.0 90 2 \n", - "3 \"Prompt Engineering\" involves designing and re... 2.0 129 2 \n", - "4 \"Few-Shot Prompting is a specific technique us... 1.0 97 2 \n", - "\n", - " in_context \n", - "0 True \n", - "1 True \n", - "2 True \n", - "3 True \n", - "4 True " - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], ->>>>>>> origin/main - "source": [ - "result.context_data[\"relationships\"].head()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Visualizing the result context as graph" - ] - }, - { - "cell_type": "code", -<<<<<<< HEAD - "execution_count": null, - "metadata": {}, - "outputs": [], -======= - "execution_count": 21, - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "b06e6fa39a1a4add91bdbe9fe1cdbb8f", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "GraphWidget(layout=Layout(height='700px', width='100%'))" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], ->>>>>>> origin/main - "source": [ - "\"\"\"\n", - "Helper function to visualize the result context with `yfiles-jupyter-graphs`.\n", - "\n", - "The dataframes are converted into supported nodes and relationships lists and then passed to yfiles-jupyter-graphs.\n", - "Additionally, some values are mapped to visualization properties.\n", - "\"\"\"\n", - "\n", - "\n", - "def show_graph(result):\n", - " \"\"\"Visualize the result context with yfiles-jupyter-graphs.\"\"\"\n", - " from yfiles_jupyter_graphs import GraphWidget\n", - "\n", - " if (\n", - " \"entities\" not in result.context_data\n", - " or \"relationships\" not in result.context_data\n", - " ):\n", - " msg = \"The passed results do not contain 'entities' or 'relationships'\"\n", - " raise ValueError(msg)\n", - "\n", - " # converts the entities dataframe to a list of dicts for yfiles-jupyter-graphs\n", - " def convert_entities_to_dicts(df):\n", - " \"\"\"Convert the entities dataframe to a list of dicts for yfiles-jupyter-graphs.\"\"\"\n", - " nodes_dict = {}\n", - " for _, row in df.iterrows():\n", - " # Create a dictionary for each row and collect unique nodes\n", - " node_id = row[\"entity\"]\n", - " if node_id not in nodes_dict:\n", - " nodes_dict[node_id] = {\n", - " \"id\": node_id,\n", - " \"properties\": row.to_dict(),\n", - " }\n", - " return list(nodes_dict.values())\n", - "\n", - " # converts the relationships dataframe to a list of dicts for yfiles-jupyter-graphs\n", - " def convert_relationships_to_dicts(df):\n", - " \"\"\"Convert the relationships dataframe to a list of dicts for yfiles-jupyter-graphs.\"\"\"\n", - " relationships = []\n", - " for _, row in df.iterrows():\n", - " # Create a dictionary for each row\n", - " relationships.append({\n", - " \"start\": row[\"source\"],\n", - " \"end\": row[\"target\"],\n", - " \"properties\": row.to_dict(),\n", - " })\n", - " return relationships\n", - "\n", - " w = GraphWidget()\n", - " # use the converted data to visualize the graph\n", - " w.nodes = convert_entities_to_dicts(result.context_data[\"entities\"])\n", - " w.edges = convert_relationships_to_dicts(result.context_data[\"relationships\"])\n", - " w.directed = True\n", - " # show title on the node\n", - " w.node_label_mapping = \"entity\"\n", - " # use weight for edge thickness\n", - " w.edge_thickness_factor_mapping = \"weight\"\n", - " display(w)\n", - "\n", - "\n", - "show_graph(result)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.9" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/poetry.lock b/poetry.lock index f6f62ff5e..9b53345f4 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1473,6 +1473,25 @@ files = [ [package.dependencies] packaging = "*" +[[package]] +name = "detect-secrets" +version = "1.5.0" +description = "Tool for detecting secrets in the codebase" +optional = false +python-versions = "*" +files = [ + {file = "detect_secrets-1.5.0-py3-none-any.whl", hash = "sha256:e24e7b9b5a35048c313e983f76c4bd09dad89f045ff059e354f9943bf45aa060"}, + {file = "detect_secrets-1.5.0.tar.gz", hash = "sha256:6bb46dcc553c10df51475641bb30fd69d25645cc12339e46c824c1e0c388898a"}, +] + +[package.dependencies] +pyyaml = "*" +requests = "*" + +[package.extras] +gibberish = ["gibberish-detector"] +word-list = ["pyahocorasick"] + [[package]] name = "devtools" version = "0.12.2" @@ -1692,6 +1711,7 @@ files = [ {file = "fastparquet-2024.5.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5626fc72204001b7e82fedb4b02174ecb4e2d4143b38b4ea8d2f9eb65f6b000e"}, {file = "fastparquet-2024.5.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:c8b2e86fe6488cce0e3d41263bb0296ef9bbb875a2fca09d67d7685640017a66"}, {file = "fastparquet-2024.5.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2a951106782d51e5ab110beaad29c4aa0537f045711bb0bf146f65aeaed14174"}, + {file = "fastparquet-2024.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:cd3473d3e299bfb04c0ac7726cca5d13ee450cc2387ee7fd70587ca150647315"}, {file = "fastparquet-2024.5.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:47695037fdc534ef4247f25ccf17dcbd8825be6ecb70c54ca54d588a794f4a6d"}, {file = "fastparquet-2024.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fc3d35ff8341cd65baecac71062e9d73393d7afda207b3421709c1d3f4baa194"}, {file = "fastparquet-2024.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:691348cc85890663dd3c0bb02544d38d4c07a0c3d68837324dc01007301150b5"}, @@ -1752,6 +1772,22 @@ files = [ {file = "fixedint-0.1.6.tar.gz", hash = "sha256:703005d090499d41ce7ce2ee7eae8f7a5589a81acdc6b79f1728a56495f2c799"}, ] +[[package]] +name = "flake8" +version = "7.1.1" +description = "the modular source code checker: pep8 pyflakes and co" +optional = false +python-versions = ">=3.8.1" +files = [ + {file = "flake8-7.1.1-py2.py3-none-any.whl", hash = "sha256:597477df7860daa5aa0fdd84bf5208a043ab96b8e96ab708770ae0364dd03213"}, + {file = "flake8-7.1.1.tar.gz", hash = "sha256:049d058491e228e03e67b390f311bbf88fce2dbaa8fa673e7aea87b7198b8d38"}, +] + +[package.dependencies] +mccabe = ">=0.7.0,<0.8.0" +pycodestyle = ">=2.12.0,<2.13.0" +pyflakes = ">=3.2.0,<3.3.0" + [[package]] name = "flask" version = "3.0.3" @@ -2016,6 +2052,52 @@ gitdb = ">=4.0.1,<5" doc = ["sphinx (==4.3.2)", "sphinx-autodoc-typehints", "sphinx-rtd-theme", "sphinxcontrib-applehelp (>=1.0.2,<=1.0.4)", "sphinxcontrib-devhelp (==1.0.2)", "sphinxcontrib-htmlhelp (>=2.0.0,<=2.0.1)", "sphinxcontrib-qthelp (==1.0.3)", "sphinxcontrib-serializinghtml (==1.1.5)"] test = ["coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre-commit", "pytest (>=7.3.1)", "pytest-cov", "pytest-instafail", "pytest-mock", "pytest-sugar", "typing-extensions"] +[[package]] +name = "google-api-core" +version = "2.19.1" +description = "Google API client core library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "google-api-core-2.19.1.tar.gz", hash = "sha256:f4695f1e3650b316a795108a76a1c416e6afb036199d1c1f1f110916df479ffd"}, + {file = "google_api_core-2.19.1-py3-none-any.whl", hash = "sha256:f12a9b8309b5e21d92483bbd47ce2c445861ec7d269ef6784ecc0ea8c1fa6125"}, +] + +[package.dependencies] +google-auth = ">=2.14.1,<3.0.dev0" +googleapis-common-protos = ">=1.56.2,<2.0.dev0" +proto-plus = ">=1.22.3,<2.0.0dev" +protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<6.0.0.dev0" +requests = ">=2.18.0,<3.0.0.dev0" + +[package.extras] +grpc = ["grpcio (>=1.33.2,<2.0dev)", "grpcio (>=1.49.1,<2.0dev)", "grpcio-status (>=1.33.2,<2.0.dev0)", "grpcio-status (>=1.49.1,<2.0.dev0)"] +grpcgcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] +grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] + +[[package]] +name = "google-auth" +version = "2.33.0" +description = "Google Authentication Library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "google_auth-2.33.0-py2.py3-none-any.whl", hash = "sha256:8eff47d0d4a34ab6265c50a106a3362de6a9975bb08998700e389f857e4d39df"}, + {file = "google_auth-2.33.0.tar.gz", hash = "sha256:d6a52342160d7290e334b4d47ba390767e4438ad0d45b7630774533e82655b95"}, +] + +[package.dependencies] +cachetools = ">=2.0.0,<6.0" +pyasn1-modules = ">=0.2.1" +rsa = ">=3.1.4,<5" + +[package.extras] +aiohttp = ["aiohttp (>=3.6.2,<4.0.0.dev0)", "requests (>=2.20.0,<3.0.0.dev0)"] +enterprise-cert = ["cryptography (==36.0.2)", "pyopenssl (==22.0.0)"] +pyopenssl = ["cryptography (>=38.0.3)", "pyopenssl (>=20.0.0)"] +reauth = ["pyu2f (>=0.1.5)"] +requests = ["requests (>=2.20.0,<3.0.0.dev0)"] + [[package]] name = "google-search-results" version = "2.4.1" @@ -2369,13 +2451,13 @@ test = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "p [[package]] name = "importlib-resources" -version = "6.4.1" +version = "6.4.2" description = "Read resources from Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_resources-6.4.1-py3-none-any.whl", hash = "sha256:8fbee7ba7376ca7c47ce8d31b96b93d8787349845f01ebdbee5ef90409035234"}, - {file = "importlib_resources-6.4.1.tar.gz", hash = "sha256:5ede8acf5d752abda46fb6922a4a6ab782b6d904dfd362bf2d8b857eee1759d9"}, + {file = "importlib_resources-6.4.2-py3-none-any.whl", hash = "sha256:8bba8c54a8a3afaa1419910845fa26ebd706dc716dd208d9b158b4b6966f5c5c"}, + {file = "importlib_resources-6.4.2.tar.gz", hash = "sha256:6cbfbefc449cc6e2095dd184691b7a12a04f40bc75dd4c55d31c34f174cdf57a"}, ] [package.extras] @@ -3348,6 +3430,32 @@ pygments = "*" pyyaml = "*" tabulate = "*" +[[package]] +name = "kubernetes" +version = "30.1.0" +description = "Kubernetes python client" +optional = false +python-versions = ">=3.6" +files = [ + {file = "kubernetes-30.1.0-py2.py3-none-any.whl", hash = "sha256:e212e8b7579031dd2e512168b617373bc1e03888d41ac4e04039240a292d478d"}, + {file = "kubernetes-30.1.0.tar.gz", hash = "sha256:41e4c77af9f28e7a6c314e3bd06a8c6229ddd787cad684e0ab9f69b498e98ebc"}, +] + +[package.dependencies] +certifi = ">=14.05.14" +google-auth = ">=1.0.1" +oauthlib = ">=3.2.2" +python-dateutil = ">=2.5.3" +pyyaml = ">=5.4.1" +requests = "*" +requests-oauthlib = "*" +six = ">=1.9.0" +urllib3 = ">=1.24.2" +websocket-client = ">=0.32.0,<0.40.0 || >0.40.0,<0.41.dev0 || >=0.43.dev0" + +[package.extras] +adal = ["adal (>=1.0.2)"] + [[package]] name = "lancedb" version = "0.11.0" @@ -3790,6 +3898,17 @@ files = [ [package.dependencies] traitlets = "*" +[[package]] +name = "mccabe" +version = "0.7.0" +description = "McCabe checker, plugin for flake8" +optional = false +python-versions = ">=3.6" +files = [ + {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, + {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, +] + [[package]] name = "mdit-py-plugins" version = "0.4.1" @@ -4234,6 +4353,51 @@ typing-extensions = ">=4.11,<5" [package.extras] datalib = ["numpy (>=1)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)"] +[[package]] +name = "opencensus" +version = "0.11.4" +description = "A stats collection and distributed tracing framework" +optional = false +python-versions = "*" +files = [ + {file = "opencensus-0.11.4-py2.py3-none-any.whl", hash = "sha256:a18487ce68bc19900336e0ff4655c5a116daf10c1b3685ece8d971bddad6a864"}, + {file = "opencensus-0.11.4.tar.gz", hash = "sha256:cbef87d8b8773064ab60e5c2a1ced58bbaa38a6d052c41aec224958ce544eff2"}, +] + +[package.dependencies] +google-api-core = {version = ">=1.0.0,<3.0.0", markers = "python_version >= \"3.6\""} +opencensus-context = ">=0.1.3" +six = ">=1.16,<2.0" + +[[package]] +name = "opencensus-context" +version = "0.1.3" +description = "OpenCensus Runtime Context" +optional = false +python-versions = "*" +files = [ + {file = "opencensus-context-0.1.3.tar.gz", hash = "sha256:a03108c3c10d8c80bb5ddf5c8a1f033161fa61972a9917f9b9b3a18517f0088c"}, + {file = "opencensus_context-0.1.3-py2.py3-none-any.whl", hash = "sha256:073bb0590007af276853009fac7e4bab1d523c3f03baf4cb4511ca38967c6039"}, +] + +[[package]] +name = "opencensus-ext-azure" +version = "1.1.13" +description = "OpenCensus Azure Monitor Exporter" +optional = false +python-versions = "*" +files = [ + {file = "opencensus-ext-azure-1.1.13.tar.gz", hash = "sha256:aec30472177005379ba56a702a097d618c5f57558e1bb6676ec75f948130692a"}, + {file = "opencensus_ext_azure-1.1.13-py2.py3-none-any.whl", hash = "sha256:06001fac6f8588ba00726a3a7c6c7f2fc88bc8ad12a65afdca657923085393dd"}, +] + +[package.dependencies] +azure-core = ">=1.12.0,<2.0.0" +azure-identity = ">=1.5.0,<2.0.0" +opencensus = ">=0.11.4,<1.0.0" +psutil = ">=5.6.3" +requests = ">=2.19.0" + [[package]] name = "opentelemetry-api" version = "1.26.0" @@ -4821,34 +4985,34 @@ wcwidth = "*" [[package]] name = "promptflow" -version = "1.14.0" +version = "1.15.0" description = "Prompt flow Python SDK - build high-quality LLM apps" optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "promptflow-1.14.0-py3-none-any.whl", hash = "sha256:8f564d376e5e3fbadadf44a15c01157d35bbb69d252a2dd689238532287ebb25"}, + {file = "promptflow-1.15.0-py3-none-any.whl", hash = "sha256:f953175295a9da7409127da9759f1e2e2093834b2a9207f455f82bb8048f99e9"}, ] [package.dependencies] -promptflow-core = "1.14.0" -promptflow-devkit = "1.14.0" -promptflow-tracing = "1.14.0" +promptflow-core = "1.15.0" +promptflow-devkit = "1.15.0" +promptflow-tracing = "1.15.0" [package.extras] -all = ["promptflow-azure (==1.14.0)", "promptflow-core[executor-service] (==1.14.0)", "promptflow-devkit[all] (==1.14.0)"] -azure = ["promptflow-azure (==1.14.0)"] -azureml-serving = ["promptflow-core[azureml-serving] (==1.14.0)"] -executable = ["promptflow-devkit[executable] (==1.14.0)"] -executor-service = ["promptflow-core[executor-service] (==1.14.0)"] +all = ["promptflow-azure (==1.15.0)", "promptflow-core[executor-service] (==1.15.0)", "promptflow-devkit[all] (==1.15.0)"] +azure = ["promptflow-azure (==1.15.0)"] +azureml-serving = ["promptflow-core[azureml-serving] (==1.15.0)"] +executable = ["promptflow-devkit[executable] (==1.15.0)"] +executor-service = ["promptflow-core[executor-service] (==1.15.0)"] [[package]] name = "promptflow-core" -version = "1.14.0" +version = "1.15.0" description = "Prompt flow core" optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "promptflow_core-1.14.0-py3-none-any.whl", hash = "sha256:83a29672fe09ce99165399c04298aaa0abd6242890f2c3d5c3c060b995c39875"}, + {file = "promptflow_core-1.15.0-py3-none-any.whl", hash = "sha256:46674e52eef0541509f6dc69b2203e63f711aacddd5aa06c7b55359f9fefbfeb"}, ] [package.dependencies] @@ -4857,7 +5021,7 @@ fastapi = ">=0.109.0,<1.0.0" filetype = ">=1.2.0" flask = ">=2.2.3,<4.0.0" jsonschema = ">=4.0.0,<5.0.0" -promptflow-tracing = "1.14.0" +promptflow-tracing = "1.15.0" psutil = "*" python-dateutil = ">=2.1.0,<3.0.0" "ruamel.yaml" = ">=0.17.10,<1.0.0" @@ -4867,12 +5031,12 @@ azureml-serving = ["azure-ai-ml (>=1.14.0,<2.0.0)", "azure-identity (>=1.12.0,<2 [[package]] name = "promptflow-devkit" -version = "1.14.0" +version = "1.15.0" description = "Prompt flow devkit" optional = false python-versions = "!=2.7.*,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,!=3.7.*,>=3.8" files = [ - {file = "promptflow_devkit-1.14.0-py3-none-any.whl", hash = "sha256:7c8de6d29b64bd9b288ea4a479c575fc5a91da95c0010cd10ef4394136376733"}, + {file = "promptflow_devkit-1.15.0-py3-none-any.whl", hash = "sha256:7c9f3286b8e745e70d8513c449c47ec8db7d0f5d3b2934b33533d7009fea1dfd"}, ] [package.dependencies] @@ -4890,7 +5054,7 @@ marshmallow = ">=3.5,<4.0.0" opentelemetry-exporter-otlp-proto-http = ">=1.22.0,<2.0.0" pandas = ">=1.5.3,<3.0.0" pillow = ">=10.1.0,<11.0.0" -promptflow-core = ">=1.14.0,<2.0.0" +promptflow-core = ">=1.15.0,<2.0.0" pydash = ">=6.0.0,<8.0.0" python-dotenv = ">=1.0.0,<2.0.0" pywin32 = {version = "*", markers = "sys_platform == \"win32\""} @@ -4923,12 +5087,12 @@ azure = ["azure-mgmt-cognitiveservices (==13.5.0)"] [[package]] name = "promptflow-tracing" -version = "1.14.0" +version = "1.15.0" description = "Prompt flow tracing" optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "promptflow_tracing-1.14.0-py3-none-any.whl", hash = "sha256:57bf2f2b96f84bd1a76de49e28ce82a2600cc512d7c05122d50d9f9ae0438637"}, + {file = "promptflow_tracing-1.15.0-py3-none-any.whl", hash = "sha256:776be489a2d8d70c3434d361c9576b4be1abd72b20912406fee02bca785d33ca"}, ] [package.dependencies] @@ -4936,6 +5100,23 @@ openai = "*" opentelemetry-sdk = ">=1.22.0,<2.0.0" tiktoken = ">=0.4.0" +[[package]] +name = "proto-plus" +version = "1.24.0" +description = "Beautiful, Pythonic protocol buffers." +optional = false +python-versions = ">=3.7" +files = [ + {file = "proto-plus-1.24.0.tar.gz", hash = "sha256:30b72a5ecafe4406b0d339db35b56c4059064e69227b8c3bda7462397f966445"}, + {file = "proto_plus-1.24.0-py3-none-any.whl", hash = "sha256:402576830425e5f6ce4c2a6702400ac79897dab0b4343821aa5188b0fab81a12"}, +] + +[package.dependencies] +protobuf = ">=3.19.0,<6.0.0dev" + +[package.extras] +testing = ["google-api-core (>=1.31.5)"] + [[package]] name = "protobuf" version = "4.25.4" @@ -5086,6 +5267,42 @@ files = [ [package.dependencies] numpy = ">=1.16.6,<2" +[[package]] +name = "pyasn1" +version = "0.6.0" +description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyasn1-0.6.0-py2.py3-none-any.whl", hash = "sha256:cca4bb0f2df5504f02f6f8a775b6e416ff9b0b3b16f7ee80b5a3153d9b804473"}, + {file = "pyasn1-0.6.0.tar.gz", hash = "sha256:3a35ab2c4b5ef98e17dfdec8ab074046fbda76e281c5a706ccd82328cfc8f64c"}, +] + +[[package]] +name = "pyasn1-modules" +version = "0.4.0" +description = "A collection of ASN.1-based protocols modules" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyasn1_modules-0.4.0-py3-none-any.whl", hash = "sha256:be04f15b66c206eed667e0bb5ab27e2b1855ea54a842e5037738099e8ca4ae0b"}, + {file = "pyasn1_modules-0.4.0.tar.gz", hash = "sha256:831dbcea1b177b28c9baddf4c6d1013c24c3accd14a1873fffaa6a2e905f17b6"}, +] + +[package.dependencies] +pyasn1 = ">=0.4.6,<0.7.0" + +[[package]] +name = "pycodestyle" +version = "2.12.1" +description = "Python style guide checker" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pycodestyle-2.12.1-py2.py3-none-any.whl", hash = "sha256:46f0fb92069a7c28ab7bb558f05bfc0110dac69a0cd23c61ea0040283a9d78b3"}, + {file = "pycodestyle-2.12.1.tar.gz", hash = "sha256:6838eae08bbce4f6accd5d5572075c63626a15ee3e6f842df996bf62f6d73521"}, +] + [[package]] name = "pycparser" version = "2.22" @@ -5275,6 +5492,17 @@ typing-extensions = ">=3.10,<4.6.0 || >4.6.0" [package.extras] dev = ["black", "build", "coverage", "docformatter", "flake8", "flake8-black", "flake8-bugbear", "flake8-isort", "furo", "invoke", "isort", "mypy", "pylint", "pytest", "pytest-cov", "pytest-mypy-testing", "sphinx", "sphinx-autodoc-typehints", "tox", "twine", "wheel"] +[[package]] +name = "pyflakes" +version = "3.2.0" +description = "passive checker of Python programs" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyflakes-3.2.0-py2.py3-none-any.whl", hash = "sha256:84b5be138a2dfbb40689ca07e2152deb896a65c3a3e24c251c5c62489568074a"}, + {file = "pyflakes-3.2.0.tar.gz", hash = "sha256:1c61603ff154621fb2a9172037d84dca3500def8c8b630657d1701f026f8af3f"}, +] + [[package]] name = "pygments" version = "2.18.0" @@ -6235,6 +6463,20 @@ files = [ {file = "rpds_py-0.20.0.tar.gz", hash = "sha256:d72a210824facfdaf8768cf2d7ca25a042c30320b3020de2fa04640920d4e121"}, ] +[[package]] +name = "rsa" +version = "4.9" +description = "Pure-Python RSA implementation" +optional = false +python-versions = ">=3.6,<4" +files = [ + {file = "rsa-4.9-py3-none-any.whl", hash = "sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7"}, + {file = "rsa-4.9.tar.gz", hash = "sha256:e38464a49c6c85d7f1351b0126661487a7e0a14a50f1675ec50eb34d4f20ef21"}, +] + +[package.dependencies] +pyasn1 = ">=0.1.3" + [[package]] name = "ruamel-yaml" version = "0.18.6" @@ -7651,4 +7893,4 @@ test = ["big-O", "importlib-resources", "jaraco.functools", "jaraco.itertools", [metadata] lock-version = "2.0" python-versions = ">=3.10,<3.13" -content-hash = "5457098514f15a516a7b764b011db00fe01512fb10389c24c5b7cee46c57849a" +content-hash = "7f7ec7606a489263681ab3e193b9343e8f2f9db0224d79aa16daccef389081c5" diff --git a/pyproject.toml b/pyproject.toml index 422349982..50a1f1eb5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -86,6 +86,18 @@ promptflow-tools = "^1.4.0" microsoft-bing-websearch = "^1.0.0" build = "^1.2.1" uvicorn = "^0.30.6" +requests = "^2.32.3" +pandas = "^2.2.2" +detect-secrets = "^1.5.0" +azure-core = "^1.30.2" +kubernetes = "^30.1.0" +httpx = "^0.27.0" +opencensus-ext-azure = "^1.1.13" +urllib3 = "^2.2.2" +opencensus-context = "^0.1.3" +opencensus = "^0.11.4" +flake8 = "^7.1.1" +ipython = "^8.26.0" [tool.poetry.group.dev.dependencies] From 7ba9dbf78b278ff34bad954936244868657c40d5 Mon Sep 17 00:00:00 2001 From: Zachary Date: Thu, 15 Aug 2024 20:20:26 +0000 Subject: [PATCH 2/2] 0.4.15 --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 50a1f1eb5..5bb87ad92 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "graphfleet" -version = "0.4.1" +version = "0.4.15" description = "Build upon GraphRAG, provide a quick solution setup and is part of the overall Qredence System like AgenticFleet and FleetUI" authors = ["Zachary "] license = "Apache-2.0"

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 z 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 literal 0 HcmV?d00001 diff --git a/notebook/get-started-graphfleet.ipynb b/notebook/get-started-graphfleet.ipynb index 925761d84..047e00b1c 100644 --- a/notebook/get-started-graphfleet.ipynb +++ b/notebook/get-started-graphfleet.ipynb @@ -30,42 +30,14 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "8f2a20fc4d1148199c8b57b8139ea3ee", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "FileUpload(value=(), accept='.pdf', description='Upload', multiple=True)" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "4562f75c62ff466db6f4c58822cf36bd", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Output()" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# Import libraries\n", "import os\n", - "from PyPDF2 import PdfReader\n", + "import json\n", + "import csv\n", "import ipywidgets as widgets\n", "from IPython.display import display, clear_output\n", "\n", @@ -74,54 +46,41 @@ "if not os.path.exists(txt_directory):\n", " os.makedirs(txt_directory)\n", "\n", + "json_file_path = '../graphfleet/input/json'\n", + "if not os.path.exists(json_file_path):\n", + " os.makedirs(json_file_path)\n", + "\n", + "\n", "# Create upload button\n", "uploader = widgets.FileUpload(\n", - " accept='.pdf', # Accept only PDF files\n", + " accept='.json', # Accept only PDF files\n", " multiple=True # Allow uploading multiple files\n", ")\n", "\n", "# Create output area\n", "output = widgets.Output()\n", "\n", - "# Conversion function\n", - "def convert_pdfs(change):\n", - " with output:\n", - " clear_output() # Clear previous output\n", "\n", - " uploaded_files = change['new']\n", - " if uploaded_files:\n", - " # Correctly handle uploaded_files as a tuple\n", - " for uploaded_info in uploaded_files:\n", - " uploaded_file_name = uploaded_info.name\n", - " content = uploaded_info.content\n", "\n", - " # Save the uploaded PDF temporarily \n", - " temp_pdf_path = uploaded_file_name\n", - " with open(temp_pdf_path, 'wb') as f:\n", - " f.write(content)\n", + "def json_to_txt(json_file_path, txt_directory):\n", + " # Load JSON data\n", + " with open(json_file_path, 'r') as json_file:\n", + " data = json.load(json_file)\n", "\n", - " # Define output .txt filename within txt_directory\n", - " txt_filename = os.path.join(txt_directory, uploaded_file_name.replace(\".pdf\", \".txt\"))\n", + " # Write data to TXT file\n", + " with open(txt_directory, 'w', newline='') as txt_file:\n", + " writer = csv.DictWriter(txt_file, fieldnames=data[0].keys(), delimiter='\\t')\n", + " writer.writeheader()\n", + " for row in data:\n", + " writer.writerow(row)\n", "\n", - " # Convert the PDF to text\n", - " convert_pdf_to_txt(temp_pdf_path, txt_filename)\n", - " print(f\"Converted {uploaded_file_name} to {txt_filename}\")\n", + "# Usage\n", + "json_to_txt('input.json', 'output.txt')\n", "\n", - " # (Optional) Remove the temporary PDF file\n", - " os.remove(temp_pdf_path) \n", "\n", - "# Function to convert PDF to text (no changes needed)\n", - "def convert_pdf_to_txt(pdf_path, txt_path):\n", - " with open(pdf_path, 'rb') as pdf_file:\n", - " reader = PdfReader(pdf_file)\n", - " text = ''\n", - " for page_num in range(len(reader.pages)):\n", - " text += reader.pages[page_num].extract_text()\n", - " with open(txt_path, 'w', encoding='utf-8') as txt_file:\n", - " txt_file.write(text)\n", "\n", "# Observe changes in the upload widget\n", - "uploader.observe(convert_pdfs, names='value')\n", + "uploader.observe(json_to_txt, names='value')\n", "\n", "# Display the upload button and output area\n", "display(uploader)\n", @@ -158,38 +117,9 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[2KInitializing project at ..\u001b[35m/\u001b[0m\u001b[95mgraphfleet\u001b[0m\n", - "\u001b[2KTraceback (most recent call last):\n", - " File \"/usr/local/python/3.10.13/lib/python3.10/runpy.py\", line 196, in \n", - "_run_module_as_main\n", - " return _run_code(code, main_globals, None,\n", - " File \"/usr/local/python/3.10.13/lib/python3.10/runpy.py\", line 86, in \n", - "_run_code\n", - " exec(code, run_globals)\n", - " File \n", - "\"/home/codespace/.cache/pypoetry/virtualenvs/graphfleet-cXxY0NPL-py3.10/lib/pyth\n", - "on3.10/site-packages/graphrag/index/__main__.py\", line 76, in \n", - " index_cli(\n", - " File \n", - "\"/home/codespace/.cache/pypoetry/virtualenvs/graphfleet-cXxY0NPL-py3.10/lib/pyth\n", - "on3.10/site-packages/graphrag/index/cli.py\", line 90, in index_cli\n", - " _initialize_project_at(root, progress_reporter)\n", - " File \n", - "\"/home/codespace/.cache/pypoetry/virtualenvs/graphfleet-cXxY0NPL-py3.10/lib/pyth\n", - "on3.10/site-packages/graphrag/index/cli.py\", line 184, in _initialize_project_at\n", - " raise ValueError(msg)\n", - "ValueError: Project already initialized at ../graphfleet\n", - "⠋ GraphRAG Indexer \u001b[0m" - ] - } - ], + "outputs": [], "source": [ "! python -m graphrag.index --init --root ../graphfleet" ] @@ -266,2408 +196,9 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "/Users/zocho/Library/Caches/pypoetry/virtualenvs/graphfleet-bVb82vZ5-py3.12/lib/python3.12/site-packages/paramiko/pkey.py:100: CryptographyDeprecationWarning: TripleDES has been moved to cryptography.hazmat.decrepit.ciphers.algorithms.TripleDES and will be removed from this module in 48.0.0.\n", - " \"cipher\": algorithms.TripleDES,\n", - "/Users/zocho/Library/Caches/pypoetry/virtualenvs/graphfleet-bVb82vZ5-py3.12/lib/python3.12/site-packages/paramiko/transport.py:259: CryptographyDeprecationWarning: TripleDES has been moved to cryptography.hazmat.decrepit.ciphers.algorithms.TripleDES and will be removed from this module in 48.0.0.\n", - " \"class\": algorithms.TripleDES,\n", - "\u001b[2K🚀 \u001b[32mReading settings from ..\u001b[0m\u001b[32m/graphfleet/\u001b[0m\u001b[32msettings.yaml\u001b[0m\n", - "\u001b[2K⠹ GraphRAG Indexer \n", - "\u001b[2K\u001b[1A\u001b[2K⠹ GraphRAG Indexer e.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠹ GraphRAG Indexer \n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠹ GraphRAG Indexer \n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠹ GraphRAG Indexer \n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠹ GraphRAG Indexer \n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "└── create_base_text_units\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠴ GraphRAG Indexer ━━━━━━━━━━━━━━━━━\u001b[0m \u001b[35m 0%\u001b[0m \u001b[36m-:--:--\u001b[0m \u001b[33m0:00:00\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "└── create_base_text_units\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠇ GraphRAG Indexer ━━━━━━━━━━━━━━━━━\u001b[0m \u001b[35m 0%\u001b[0m \u001b[36m-:--:--\u001b[0m \u001b[33m0:00:01\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "└── create_base_text_units\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠇ GraphRAG Indexer m\u001b[90m╺\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[35m 50%\u001b[0m \u001b[36m-:--:--\u001b[0m \u001b[33m0:00:02\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠇ GraphRAG Indexer \n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠇ GraphRAG Indexer \n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠇ GraphRAG Indexer \n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠇ GraphRAG Indexer \n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠇ GraphRAG Indexer \n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠇ GraphRAG Indexer \n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K/Users/zocho/Library/Caches/pypoetry/virtualenvs/graphfleet-bVb82vZ5-py3.12/lib/\n", - "python3.12/site-packages/numpy/core/fromnumeric.py:59: FutureWarning: \n", - "'DataFrame.swapaxes' is deprecated and will be removed in a future version. \n", - "Please use 'DataFrame.transpose' instead.\n", - " return bound(*args, **kwds)\n", - "⠇ GraphRAG Indexer \n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "└── create_base_text_units\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K🚀 \u001b[32mcreate_base_text_units\u001b[0m━━\u001b[0m \u001b[35m 0%\u001b[0m \u001b[36m-:--:--\u001b[0m \u001b[33m0:00:00\u001b[0m\n", - "⠏ GraphRAG Indexer \n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K id \u001b[33m...\u001b[0m n_tokens\n", - "\u001b[1;36m0\u001b[0m 76f53fb8722af58423d32a9f95018b18 \u001b[33m...\u001b[0m \u001b[1;36m3000\u001b[0m\n", - "\u001b[1;36m1\u001b[0m 4a924a483e795e5e40dbdb018113c06e \u001b[33m...\u001b[0m \u001b[1;36m3000\u001b[0m\n", - "\u001b[1;36m2\u001b[0m 77f9589bc5acd4c518314fae6c3769c8 \u001b[33m...\u001b[0m \u001b[1;36m3000\u001b[0m\n", - "\u001b[1;36m3\u001b[0m 27f5bd73115aa334eae2c121c53f8a45 \u001b[33m...\u001b[0m \u001b[1;36m3000\u001b[0m\n", - "\u001b[1;36m4\u001b[0m 39aecf1064d6b3e3cca60cd12e9ff74d \u001b[33m...\u001b[0m \u001b[1;36m1487\u001b[0m\n", - "\u001b[1;36m5\u001b[0m 6688ef1808123794d64ce57c92057d96 \u001b[33m...\u001b[0m \u001b[1;36m3000\u001b[0m\n", - "\u001b[1;36m6\u001b[0m b4d9319ccb61e2c33f05736c2b41a974 \u001b[33m...\u001b[0m \u001b[1;36m3000\u001b[0m\n", - "\u001b[1;36m7\u001b[0m 832704b966babf3a3ed33d02206b1690 \u001b[33m...\u001b[0m \u001b[1;36m3000\u001b[0m\n", - "\u001b[1;36m8\u001b[0m be6c9df9a2092450bcaf0e54a29a3801 \u001b[33m...\u001b[0m \u001b[1;36m3000\u001b[0m\n", - "\u001b[1;36m9\u001b[0m 7ea443af7a7644166032e720c77c67e0 \u001b[33m...\u001b[0m \u001b[1;36m833\u001b[0m\n", - "\n", - "\u001b[1m[\u001b[0m\u001b[1;36m10\u001b[0m rows x \u001b[1;36m5\u001b[0m columns\u001b[1m]\u001b[0m\n", - "⠏ GraphRAG Indexer \n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠋ GraphRAG Indexer \n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠋ GraphRAG Indexer \n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠧ GraphRAG Indexer \n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠋ GraphRAG Indexer ━━━━━━━━━\u001b[0m \u001b[35m 0%\u001b[0m \u001b[36m-:--:--\u001b[0m \u001b[33m0:00:00\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠹ GraphRAG Indexer ━━━━━━━━━\u001b[0m \u001b[35m 0%\u001b[0m \u001b[36m-:--:--\u001b[0m \u001b[33m0:00:01\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠴ GraphRAG Indexer ━━━━━━━━━\u001b[0m \u001b[35m 0%\u001b[0m \u001b[36m-:--:--\u001b[0m \u001b[33m0:00:02\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠇ GraphRAG Indexer ━━━━━━━━━\u001b[0m \u001b[35m 0%\u001b[0m \u001b[36m-:--:--\u001b[0m \u001b[33m0:00:03\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠋ GraphRAG Indexer ━━━━━━━━━\u001b[0m \u001b[35m 0%\u001b[0m \u001b[36m-:--:--\u001b[0m \u001b[33m0:00:04\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠸ GraphRAG Indexer ━━━━━━━━━\u001b[0m \u001b[35m 0%\u001b[0m \u001b[36m-:--:--\u001b[0m \u001b[33m0:00:05\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠦ GraphRAG Indexer ━━━━━━━━━\u001b[0m \u001b[35m 0%\u001b[0m \u001b[36m-:--:--\u001b[0m \u001b[33m0:00:06\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠹ GraphRAG Indexer ━━━━━━━━━\u001b[0m \u001b[35m 0%\u001b[0m \u001b[36m-:--:--\u001b[0m \u001b[33m0:00:07\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠇ GraphRAG Indexer ━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[35m 10%\u001b[0m \u001b[36m-:--:--\u001b[0m \u001b[33m0:00:08\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠙ GraphRAG Indexer ━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[35m 10%\u001b[0m \u001b[36m-:--:--\u001b[0m \u001b[33m0:00:08\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠸ GraphRAG Indexer ━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[35m 10%\u001b[0m \u001b[36m-:--:--\u001b[0m \u001b[33m0:00:09\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠦ GraphRAG Indexer ━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[35m 10%\u001b[0m \u001b[36m-:--:--\u001b[0m \u001b[33m0:00:10\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠏ GraphRAG Indexer ━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[35m 10%\u001b[0m \u001b[36m-:--:--\u001b[0m \u001b[33m0:00:11\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠋ GraphRAG Indexer ━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[35m 10%\u001b[0m \u001b[36m-:--:--\u001b[0m \u001b[33m0:00:12\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠹ GraphRAG Indexer 90m━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[35m 20%\u001b[0m \u001b[36m0:00:37\u001b[0m \u001b[33m0:00:12\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠙ GraphRAG Indexer m\u001b[90m━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[35m 30%\u001b[0m \u001b[36m0:00:17\u001b[0m \u001b[33m0:00:12\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠼ GraphRAG Indexer m\u001b[90m━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[35m 30%\u001b[0m \u001b[36m0:00:17\u001b[0m \u001b[33m0:00:13\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠦ GraphRAG Indexer m\u001b[90m━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[35m 30%\u001b[0m \u001b[36m0:00:17\u001b[0m \u001b[33m0:00:14\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠏ GraphRAG Indexer m\u001b[90m━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[35m 30%\u001b[0m \u001b[36m0:00:17\u001b[0m \u001b[33m0:00:15\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠹ GraphRAG Indexer m\u001b[90m━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[35m 30%\u001b[0m \u001b[36m0:00:17\u001b[0m \u001b[33m0:00:16\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠹ GraphRAG Indexer \u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[35m 40%\u001b[0m \u001b[36m0:00:18\u001b[0m \u001b[33m0:00:16\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠼ GraphRAG Indexer \u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[35m 40%\u001b[0m \u001b[36m0:00:18\u001b[0m \u001b[33m0:00:17\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠹ GraphRAG Indexer \u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[35m 40%\u001b[0m \u001b[36m0:00:18\u001b[0m \u001b[33m0:00:18\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠧ GraphRAG Indexer 1m╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━\u001b[0m \u001b[35m 50%\u001b[0m \u001b[36m0:00:15\u001b[0m \u001b[33m0:00:19\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠋ GraphRAG Indexer 1m╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━\u001b[0m \u001b[35m 50%\u001b[0m \u001b[36m0:00:15\u001b[0m \u001b[33m0:00:19\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠴ GraphRAG Indexer 1m╸\u001b[0m\u001b[90m━━━━━━━━━━━━━━━\u001b[0m \u001b[35m 50%\u001b[0m \u001b[36m0:00:15\u001b[0m \u001b[33m0:00:20\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠹ GraphRAG Indexer \u001b[91m╸\u001b[0m\u001b[90m━━━━━━━━━━━━\u001b[0m \u001b[35m 60%\u001b[0m \u001b[36m0:00:11\u001b[0m \u001b[33m0:00:21\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠴ GraphRAG Indexer \u001b[91m╸\u001b[0m\u001b[90m━━━━━━━━━━━━\u001b[0m \u001b[35m 60%\u001b[0m \u001b[36m0:00:11\u001b[0m \u001b[33m0:00:21\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠸ GraphRAG Indexer \u001b[91m╸\u001b[0m\u001b[90m━━━━━━━━━━━━\u001b[0m \u001b[35m 60%\u001b[0m \u001b[36m0:00:11\u001b[0m \u001b[33m0:00:22\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠇ GraphRAG Indexer [0m\u001b[91m╸\u001b[0m\u001b[90m━━━━━━━━━\u001b[0m \u001b[35m 70%\u001b[0m \u001b[36m0:00:08\u001b[0m \u001b[33m0:00:23\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠋ GraphRAG Indexer [0m\u001b[91m╸\u001b[0m\u001b[90m━━━━━━━━━\u001b[0m \u001b[35m 70%\u001b[0m \u001b[36m0:00:08\u001b[0m \u001b[33m0:00:23\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠼ GraphRAG Indexer [0m\u001b[91m╸\u001b[0m\u001b[90m━━━━━━━━━\u001b[0m \u001b[35m 70%\u001b[0m \u001b[36m0:00:08\u001b[0m \u001b[33m0:00:24\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠦ GraphRAG Indexer [0m\u001b[91m╸\u001b[0m\u001b[90m━━━━━━━━━\u001b[0m \u001b[35m 70%\u001b[0m \u001b[36m0:00:08\u001b[0m \u001b[33m0:00:25\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠏ GraphRAG Indexer [0m\u001b[91m╸\u001b[0m\u001b[90m━━━━━━━━━\u001b[0m \u001b[35m 70%\u001b[0m \u001b[36m0:00:08\u001b[0m \u001b[33m0:00:26\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠋ GraphRAG Indexer [0m\u001b[91m╸\u001b[0m\u001b[90m━━━━━━━━━\u001b[0m \u001b[35m 70%\u001b[0m \u001b[36m0:00:08\u001b[0m \u001b[33m0:00:27\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠸ GraphRAG Indexer ━━\u001b[0m\u001b[91m╸\u001b[0m\u001b[90m━━━━━━\u001b[0m \u001b[35m 80%\u001b[0m \u001b[36m0:00:06\u001b[0m \u001b[33m0:00:27\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠦ GraphRAG Indexer ━━\u001b[0m\u001b[91m╸\u001b[0m\u001b[90m━━━━━━\u001b[0m \u001b[35m 80%\u001b[0m \u001b[36m0:00:06\u001b[0m \u001b[33m0:00:29\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠇ GraphRAG Indexer ━━\u001b[0m\u001b[91m╸\u001b[0m\u001b[90m━━━━━━\u001b[0m \u001b[35m 80%\u001b[0m \u001b[36m0:00:06\u001b[0m \u001b[33m0:00:30\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠙ GraphRAG Indexer ━━\u001b[0m\u001b[91m╸\u001b[0m\u001b[90m━━━━━━\u001b[0m \u001b[35m 80%\u001b[0m \u001b[36m0:00:06\u001b[0m \u001b[33m0:00:31\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠼ GraphRAG Indexer ━━\u001b[0m\u001b[91m╸\u001b[0m\u001b[90m━━━━━━\u001b[0m \u001b[35m 80%\u001b[0m \u001b[36m0:00:06\u001b[0m \u001b[33m0:00:32\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠦ GraphRAG Indexer ━━\u001b[0m\u001b[91m╸\u001b[0m\u001b[90m━━━━━━\u001b[0m \u001b[35m 80%\u001b[0m \u001b[36m0:00:06\u001b[0m \u001b[33m0:00:33\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠏ GraphRAG Indexer ━━\u001b[0m\u001b[91m╸\u001b[0m\u001b[90m━━━━━━\u001b[0m \u001b[35m 80%\u001b[0m \u001b[36m0:00:06\u001b[0m \u001b[33m0:00:34\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠹ GraphRAG Indexer ━━\u001b[0m\u001b[91m╸\u001b[0m\u001b[90m━━━━━━\u001b[0m \u001b[35m 80%\u001b[0m \u001b[36m0:00:06\u001b[0m \u001b[33m0:00:35\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠼ GraphRAG Indexer ━━\u001b[0m\u001b[91m╸\u001b[0m\u001b[90m━━━━━━\u001b[0m \u001b[35m 80%\u001b[0m \u001b[36m0:00:06\u001b[0m \u001b[33m0:00:36\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠧ GraphRAG Indexer ━━\u001b[0m\u001b[91m╸\u001b[0m\u001b[90m━━━━━━\u001b[0m \u001b[35m 80%\u001b[0m \u001b[36m0:00:06\u001b[0m \u001b[33m0:00:37\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠏ GraphRAG Indexer ━━\u001b[0m\u001b[91m╸\u001b[0m\u001b[90m━━━━━━\u001b[0m \u001b[35m 80%\u001b[0m \u001b[36m0:00:06\u001b[0m \u001b[33m0:00:38\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠹ GraphRAG Indexer ━━\u001b[0m\u001b[91m╸\u001b[0m\u001b[90m━━━━━━\u001b[0m \u001b[35m 80%\u001b[0m \u001b[36m0:00:06\u001b[0m \u001b[33m0:00:39\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠴ GraphRAG Indexer ━━\u001b[0m\u001b[91m╸\u001b[0m\u001b[90m━━━━━━\u001b[0m \u001b[35m 80%\u001b[0m \u001b[36m0:00:06\u001b[0m \u001b[33m0:00:40\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠧ GraphRAG Indexer ━━\u001b[0m\u001b[91m╸\u001b[0m\u001b[90m━━━━━━\u001b[0m \u001b[35m 80%\u001b[0m \u001b[36m0:00:06\u001b[0m \u001b[33m0:00:41\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠋ GraphRAG Indexer ━━\u001b[0m\u001b[91m╸\u001b[0m\u001b[90m━━━━━━\u001b[0m \u001b[35m 80%\u001b[0m \u001b[36m0:00:06\u001b[0m \u001b[33m0:00:42\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠹ GraphRAG Indexer ━━\u001b[0m\u001b[91m╸\u001b[0m\u001b[90m━━━━━━\u001b[0m \u001b[35m 80%\u001b[0m \u001b[36m0:00:06\u001b[0m \u001b[33m0:00:43\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠴ GraphRAG Indexer ━━\u001b[0m\u001b[91m╸\u001b[0m\u001b[90m━━━━━━\u001b[0m \u001b[35m 80%\u001b[0m \u001b[36m0:00:06\u001b[0m \u001b[33m0:00:44\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠇ GraphRAG Indexer ━━\u001b[0m\u001b[91m╸\u001b[0m\u001b[90m━━━━━━\u001b[0m \u001b[35m 80%\u001b[0m \u001b[36m0:00:06\u001b[0m \u001b[33m0:00:45\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠋ GraphRAG Indexer ━━\u001b[0m\u001b[91m╸\u001b[0m\u001b[90m━━━━━━\u001b[0m \u001b[35m 80%\u001b[0m \u001b[36m0:00:06\u001b[0m \u001b[33m0:00:46\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠸ GraphRAG Indexer ━━\u001b[0m\u001b[91m╸\u001b[0m\u001b[90m━━━━━━\u001b[0m \u001b[35m 80%\u001b[0m \u001b[36m0:00:06\u001b[0m \u001b[33m0:00:47\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠴ GraphRAG Indexer ━━\u001b[0m\u001b[91m╸\u001b[0m\u001b[90m━━━━━━\u001b[0m \u001b[35m 80%\u001b[0m \u001b[36m0:00:06\u001b[0m \u001b[33m0:00:48\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠇ GraphRAG Indexer ━━\u001b[0m\u001b[91m╸\u001b[0m\u001b[90m━━━━━━\u001b[0m \u001b[35m 80%\u001b[0m \u001b[36m0:00:06\u001b[0m \u001b[33m0:00:49\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠙ GraphRAG Indexer ━━\u001b[0m\u001b[91m╸\u001b[0m\u001b[90m━━━━━━\u001b[0m \u001b[35m 80%\u001b[0m \u001b[36m0:00:06\u001b[0m \u001b[33m0:00:50\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠸ GraphRAG Indexer ━━\u001b[0m\u001b[91m╸\u001b[0m\u001b[90m━━━━━━\u001b[0m \u001b[35m 80%\u001b[0m \u001b[36m0:00:06\u001b[0m \u001b[33m0:00:51\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠦ GraphRAG Indexer ━━\u001b[0m\u001b[91m╸\u001b[0m\u001b[90m━━━━━━\u001b[0m \u001b[35m 80%\u001b[0m \u001b[36m0:00:06\u001b[0m \u001b[33m0:00:52\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠏ GraphRAG Indexer ━━\u001b[0m\u001b[91m╸\u001b[0m\u001b[90m━━━━━━\u001b[0m \u001b[35m 80%\u001b[0m \u001b[36m0:00:06\u001b[0m \u001b[33m0:00:53\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠙ GraphRAG Indexer ━━\u001b[0m\u001b[91m╸\u001b[0m\u001b[90m━━━━━━\u001b[0m \u001b[35m 80%\u001b[0m \u001b[36m0:00:06\u001b[0m \u001b[33m0:00:54\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠼ GraphRAG Indexer ━━\u001b[0m\u001b[91m╸\u001b[0m\u001b[90m━━━━━━\u001b[0m \u001b[35m 80%\u001b[0m \u001b[36m0:00:06\u001b[0m \u001b[33m0:00:55\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠧ GraphRAG Indexer ━━\u001b[0m\u001b[91m╸\u001b[0m\u001b[90m━━━━━━\u001b[0m \u001b[35m 80%\u001b[0m \u001b[36m0:00:06\u001b[0m \u001b[33m0:00:56\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠏ GraphRAG Indexer ━━\u001b[0m\u001b[91m╸\u001b[0m\u001b[90m━━━━━━\u001b[0m \u001b[35m 80%\u001b[0m \u001b[36m0:00:06\u001b[0m \u001b[33m0:00:57\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠹ GraphRAG Indexer ━━\u001b[0m\u001b[91m╸\u001b[0m\u001b[90m━━━━━━\u001b[0m \u001b[35m 80%\u001b[0m \u001b[36m0:00:06\u001b[0m \u001b[33m0:00:58\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠏ GraphRAG Indexer ━━\u001b[0m\u001b[91m╸\u001b[0m\u001b[90m━━━━━━\u001b[0m \u001b[35m 80%\u001b[0m \u001b[36m0:00:06\u001b[0m \u001b[33m0:00:59\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠼ GraphRAG Indexer ━━━━━\u001b[0m\u001b[91m╸\u001b[0m\u001b[90m━━━\u001b[0m \u001b[35m 90%\u001b[0m \u001b[36m-:--:--\u001b[0m \u001b[33m0:00:59\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠧ GraphRAG Indexer ━━━━━\u001b[0m\u001b[91m╸\u001b[0m\u001b[90m━━━\u001b[0m \u001b[35m 90%\u001b[0m \u001b[36m-:--:--\u001b[0m \u001b[33m0:01:00\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠋ GraphRAG Indexer ━━━━━\u001b[0m\u001b[91m╸\u001b[0m\u001b[90m━━━\u001b[0m \u001b[35m 90%\u001b[0m \u001b[36m-:--:--\u001b[0m \u001b[33m0:01:01\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠹ GraphRAG Indexer ━━━━━\u001b[0m\u001b[91m╸\u001b[0m\u001b[90m━━━\u001b[0m \u001b[35m 90%\u001b[0m \u001b[36m-:--:--\u001b[0m \u001b[33m0:01:02\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠴ GraphRAG Indexer ━━━━━\u001b[0m\u001b[91m╸\u001b[0m\u001b[90m━━━\u001b[0m \u001b[35m 90%\u001b[0m \u001b[36m-:--:--\u001b[0m \u001b[33m0:01:03\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠇ GraphRAG Indexer ━━━━━\u001b[0m\u001b[91m╸\u001b[0m\u001b[90m━━━\u001b[0m \u001b[35m 90%\u001b[0m \u001b[36m-:--:--\u001b[0m \u001b[33m0:01:04\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠋ GraphRAG Indexer ━━━━━\u001b[0m\u001b[91m╸\u001b[0m\u001b[90m━━━\u001b[0m \u001b[35m 90%\u001b[0m \u001b[36m-:--:--\u001b[0m \u001b[33m0:01:05\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠸ GraphRAG Indexer ━━━━━\u001b[0m\u001b[91m╸\u001b[0m\u001b[90m━━━\u001b[0m \u001b[35m 90%\u001b[0m \u001b[36m-:--:--\u001b[0m \u001b[33m0:01:06\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "└── create_base_extracted_entities\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠴ GraphRAG Indexer ━━━━━\u001b[0m\u001b[91m╸\u001b[0m\u001b[90m━━━\u001b[0m \u001b[35m 90%\u001b[0m \u001b[36m-:--:--\u001b[0m \u001b[33m0:01:07\u001b[0m\n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠴ GraphRAG Indexer \n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K⠦ GraphRAG Indexer \n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K🚀 \u001b[32mcreate_base_extracted_entities\u001b[0m\n", - "⠦ GraphRAG Indexer \n", - "├── Loading Input (InputFileType.text) - 2 files loaded (2 filtered) \u001b[90m━\u001b[0m \u001b[35m100%\u001b[0m \u001b[36m…\u001b[0m \u001b[33m0…\u001b[0m\n", - "├── create_base_text_units\n", - "\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K entity_graph\n", - "\u001b[1;36m0\u001b[0m >>>>>> origin/main - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "\n", - "import pandas as pd\n", - "import tiktoken\n", - "\n", - "from graphrag.query.context_builder.entity_extraction import EntityVectorStoreKey\n", - "from graphrag.query.indexer_adapters import (\n", - " read_indexer_covariates,\n", - " read_indexer_entities,\n", - " read_indexer_relationships,\n", - " read_indexer_reports,\n", - " read_indexer_text_units,\n", - ")\n", - "from graphrag.query.input.loaders.dfs import (\n", - " store_entity_semantic_embeddings,\n", - ")\n", - "from graphrag.query.llm.oai.chat_openai import ChatOpenAI\n", - "from graphrag.query.llm.oai.embedding import OpenAIEmbedding\n", - "from graphrag.query.llm.oai.typing import OpenaiApiType\n", - "from graphrag.query.structured_search.local_search.mixed_context import (\n", - " LocalSearchMixedContext,\n", - ")\n", - "from graphrag.query.structured_search.local_search.search import LocalSearch\n", - "from graphrag.vector_stores.lancedb import LanceDBVectorStore" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Local Search Example\n", - "\n", - "Local search method generates answers by combining relevant data from the AI-extracted knowledge-graph with text chunks of the raw documents. This method is suitable for questions that require an understanding of specific entities mentioned in the documents (e.g. What are the healing properties of chamomile?)." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Load text units and graph data tables as context for local search\n", - "\n", - "- In this test we first load indexing outputs from parquet files to dataframes, then convert these dataframes into collections of data objects aligning with the knowledge model." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Load tables to dataframes" - ] - }, - { - "cell_type": "code", -<<<<<<< HEAD - "execution_count": null, -======= - "execution_count": 2, ->>>>>>> origin/main - "metadata": {}, - "outputs": [], - "source": [ - "INPUT_DIR = \"../output/usage_ai/artifacts\"\n", - "LANCEDB_URI = f\"{INPUT_DIR}/lancedb\"\n", - "\n", - "COMMUNITY_REPORT_TABLE = \"create_final_community_reports\"\n", - "ENTITY_TABLE = \"create_final_nodes\"\n", - "ENTITY_EMBEDDING_TABLE = \"create_final_entities\"\n", - "RELATIONSHIP_TABLE = \"create_final_relationships\"\n", - "COVARIATE_TABLE = \"create_final_covariates\"\n", - "TEXT_UNIT_TABLE = \"create_final_text_units\"\n", - "COMMUNITY_LEVEL = 3" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Read entities" - ] - }, - { - "cell_type": "code", -<<<<<<< HEAD - "execution_count": null, -======= - "execution_count": 3, ->>>>>>> origin/main - "metadata": {}, - "outputs": [], - "source": [ - "# read nodes table to get community and degree data\n", - "entity_df = pd.read_parquet(f\"{INPUT_DIR}/{ENTITY_TABLE}.parquet\")\n", - "entity_embedding_df = pd.read_parquet(f\"{INPUT_DIR}/{ENTITY_EMBEDDING_TABLE}.parquet\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Read relationships" - ] - }, - { - "cell_type": "code", -<<<<<<< HEAD - "execution_count": null, -======= - "execution_count": 4, ->>>>>>> origin/main - "metadata": {}, - "outputs": [], - "source": [ - "relationship_df = pd.read_parquet(f\"{INPUT_DIR}/{RELATIONSHIP_TABLE}.parquet\")\n", - "relationships = read_indexer_relationships(relationship_df)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Visualizing nodes and relationships with `yfiles-jupyter-graphs`\n", - "\n", - "`yfiles-jupyter-graphs` is a graph visualization extension that provides interactive and customizable visualizations for structured node and relationship data.\n", - "\n", - "In this case, we use it to provide an interactive visualization for the knowledge graph of the [local_search.ipynb](../../local_search.ipynb) sample by passing node and relationship lists converted from the given parquet files. The requirements for the input data is an `id` attribute for the nodes and `start`/`end` properties for the relationships that correspond to the node ids. Additional attributes can be added in the `properties` of each node/relationship dict:" - ] - }, - { - "cell_type": "code", -<<<<<<< HEAD - "execution_count": null, - "metadata": {}, - "outputs": [], -======= - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m24.0\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m24.2\u001b[0m\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n", - "Note: you may need to restart the kernel to use updated packages.\n" - ] - } - ], ->>>>>>> origin/main - "source": [ - "%pip install yfiles_jupyter_graphs --quiet\n", - "from yfiles_jupyter_graphs import GraphWidget\n", - "import numpy as np\n", - "import json\n", - "\n", - "class NumpyEncoder(json.JSONEncoder):\n", - " def default(self, obj):\n", - " if isinstance(obj, np.ndarray):\n", - " return obj.tolist()\n", - " return json.JSONEncoder.default(self, obj)\n", - "\n", - "def handle_nan_inf(obj):\n", - " if isinstance(obj, float):\n", - " if np.isnan(obj):\n", - " return \"NaN\"\n", - " elif np.isinf(obj):\n", - " return \"Infinity\" if obj > 0 else \"-Infinity\"\n", - " elif isinstance(obj, dict):\n", - " return {k: handle_nan_inf(v) for k, v in obj.items()}\n", - " elif isinstance(obj, list):\n", - " return [handle_nan_inf(i) for i in obj]\n", - " elif isinstance(obj, np.ndarray):\n", - " return handle_nan_inf(obj.tolist())\n", - " else:\n", - " return obj\n", - "\n", - "# converts the entities dataframe to a list of dicts for yfiles-jupyter-graphs\n", - "def convert_entities_to_dicts(df):\n", - " \"\"\"Convert the entities dataframe to a list of dicts for yfiles-jupyter-graphs.\"\"\"\n", - " nodes_dict = {}\n", - " for _, row in df.iterrows():\n", - " # Create a dictionary for each row and collect unique nodes\n", - " node_id = row[\"title\"]\n", - " if node_id not in nodes_dict:\n", - " nodes_dict[node_id] = {\n", - " \"id\": node_id,\n", - " \"properties\": row.to_dict(),\n", - " }\n", - " return list(nodes_dict.values())\n", - "\n", - "# converts the relationships dataframe to a list of dicts for yfiles-jupyter-graphs\n", - "def convert_relationships_to_dicts(df):\n", - " \"\"\"Convert the relationships dataframe to a list of dicts for yfiles-jupyter-graphs.\"\"\"\n", - " relationships = []\n", - " for _, row in df.iterrows():\n", - " # Create a dictionary for each row\n", - " relationships.append({\n", - " \"start\": row[\"source\"],\n", - " \"end\": row[\"target\"],\n", - " \"properties\": row.to_dict(),\n", - " })\n", - " return relationships\n", - "\n", - "w = GraphWidget()\n", - "w.directed = True\n", - "\n", - "# Convert entities, handle NaN/Inf, and use NumpyEncoder\n", - "converted_nodes = json.loads(json.dumps(convert_entities_to_dicts(entity_df), cls=NumpyEncoder))\n", - "converted_nodes = handle_nan_inf(converted_nodes)\n", - "w.nodes = converted_nodes\n", - "\n", - "# Convert relationships, handle NaN/Inf, and use NumpyEncoder\n", - "converted_edges = json.loads(json.dumps(convert_relationships_to_dicts(relationship_df), cls=NumpyEncoder))\n", - "converted_edges = handle_nan_inf(converted_edges)\n", - "w.edges = converted_edges\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Configure data-driven visualization\n", - "\n", - "The additional properties can be used to configure the visualization for different use cases." - ] - }, - { - "cell_type": "code", -<<<<<<< HEAD - "execution_count": null, -======= - "execution_count": 6, ->>>>>>> origin/main - "metadata": {}, - "outputs": [], - "source": [ - "# show title on the node\n", - "w.node_label_mapping = \"title\"\n", - "\n", - "\n", - "# map community to a color\n", - "def community_to_color(community):\n", - " \"\"\"Map a community to a color.\"\"\"\n", - " colors = [\n", - " \"crimson\",\n", - " \"darkorange\",\n", - " \"indigo\",\n", - " \"cornflowerblue\",\n", - " \"cyan\",\n", - " \"teal\",\n", - " \"green\",\n", - " ]\n", - " return (\n", - " colors[int(community) % len(colors)] if community is not None else \"lightgray\"\n", - " )\n", - "\n", - "\n", - "def edge_to_source_community(edge):\n", - " \"\"\"Get the community of the source node of an edge.\"\"\"\n", - " source_node = next(\n", - " (entry for entry in w.nodes if entry[\"properties\"][\"title\"] == edge[\"start\"]),\n", - " None,\n", - " )\n", - " source_node_community = source_node[\"properties\"][\"community\"]\n", - " return source_node_community if source_node_community is not None else None\n", - "\n", - "\n", - "w.node_color_mapping = lambda node: community_to_color(node[\"properties\"][\"community\"])\n", - "w.edge_color_mapping = lambda edge: community_to_color(edge_to_source_community(edge))\n", - "# map size data to a reasonable factor\n", - "w.node_scale_factor_mapping = lambda node: 0.5 + (float(node[\"properties\"].get(\"size\", 0)) * 1.5 / 20 if node[\"properties\"].get(\"size\") not in ['NaN', None] else 0)\n", - "# use weight for edge thickness\n", - "w.edge_thickness_factor_mapping = \"weight\"" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Automatic layouts\n", - "\n", - "The widget provides different automatic layouts that serve different purposes: `Circular`, `Hierarchic`, `Organic (interactiv or static)`, `Orthogonal`, `Radial`, `Tree`, `Geo-spatial`.\n", - "\n", - "For the knowledge graph, this sample uses the `Circular` layout, though `Hierarchic` or `Organic` are also suitable choices." - ] - }, - { - "cell_type": "code", -<<<<<<< HEAD - "execution_count": null, -======= - "execution_count": 7, ->>>>>>> origin/main - "metadata": {}, - "outputs": [], - "source": [ - "# Use the circular layout for this visualization. For larger graphs, the default organic layout is often preferrable.\n", - "w.organic_layout()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Display the graph" - ] - }, - { - "cell_type": "code", -<<<<<<< HEAD - "execution_count": null, - "metadata": {}, - "outputs": [], -======= - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "a388bc237ea1430796c8513aa298832b", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "GraphWidget(layout=Layout(height='800px', width='100%'))" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], ->>>>>>> origin/main - "source": [ - "display(w)\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Visualizing the result context of `graphrag` queries\n", - "\n", - "The result context of `graphrag` queries allow to inspect the context graph of the request. This data can similarly be visualized as graph with `yfiles-jupyter-graphs`.\n", - "\n", - "## Making the request\n", - "\n", - "The following cell recreates the sample queries from [local_search.ipynb](../../local_search.ipynb)." - ] - }, - { - "cell_type": "code", -<<<<<<< HEAD - "execution_count": null, -======= - "execution_count": 16, ->>>>>>> origin/main - "metadata": {}, - "outputs": [], - "source": [ - "# setup (see also ../../local_search.ipynb)\n", - "entities = read_indexer_entities(entity_df, entity_embedding_df, COMMUNITY_LEVEL)\n", - "\n", - "description_embedding_store = LanceDBVectorStore(\n", - " collection_name=\"entity_description_embeddings\",\n", - ")\n", - "description_embedding_store.connect(db_uri=LANCEDB_URI)\n", - "entity_description_embeddings = store_entity_semantic_embeddings(\n", - " entities=entities, vectorstore=description_embedding_store\n", - ")\n", - "covariate_df = pd.read_parquet(f\"{INPUT_DIR}/{COVARIATE_TABLE}.parquet\")\n", - "claims = read_indexer_covariates(covariate_df)\n", - "covariates = {\"claims\": claims}\n", - "report_df = pd.read_parquet(f\"{INPUT_DIR}/{COMMUNITY_REPORT_TABLE}.parquet\")\n", - "reports = read_indexer_reports(report_df, entity_df, COMMUNITY_LEVEL)\n", - "text_unit_df = pd.read_parquet(f\"{INPUT_DIR}/{TEXT_UNIT_TABLE}.parquet\")\n", - "text_units = read_indexer_text_units(text_unit_df)\n", - "\n", - "import os\n", - "from dotenv import load_dotenv\n", - "\n", - "load_dotenv() # Load environment variables from .env file\n", - "\n", - "api_key = os.environ[\"GRAPHRAG_API_KEY\"]\n", - "llm_model = os.environ[\"GRAPHRAG_LLM_MODEL\"]\n", - "embedding_model = os.environ[\"GRAPHRAG_EMBEDDING_MODEL\"]\n", - "api_base = os.environ[\"GRAPHRAG_API_BASE\"]\n", - "api_version = os.environ[\"GRAPHRAG_API_VERSION\"] # Add this line\n", - "\n", - "llm = ChatOpenAI(\n", - " api_key=api_key,\n", - " model=llm_model,\n", - " api_type=OpenaiApiType.AzureOpenAI, # OpenaiApiType.OpenAI or OpenaiApiType.AzureOpenAI\n", - " api_base=api_base,\n", - " api_version=api_version, # Add this line\n", - " max_retries=20,\n", - ")\n", - "\n", - "token_encoder = tiktoken.get_encoding(\"cl100k_base\")\n", - "\n", - "text_embedder = OpenAIEmbedding(\n", - " api_key=api_key,\n", - " api_base=api_base,\n", - " api_version=api_version, # Add this line\n", - " api_type=OpenaiApiType.AzureOpenAI,\n", - " model=embedding_model,\n", - " deployment_name=embedding_model,\n", - " max_retries=20,\n", - ")\n", - "\n", - "context_builder = LocalSearchMixedContext(\n", - " community_reports=reports,\n", - " text_units=text_units,\n", - " entities=entities,\n", - " relationships=relationships,\n", - " covariates=covariates,\n", - " entity_text_embeddings=description_embedding_store,\n", - " embedding_vectorstore_key=EntityVectorStoreKey.ID, # if the vectorstore uses entity title as ids, set this to EntityVectorStoreKey.TITLE\n", - " text_embedder=text_embedder,\n", - " token_encoder=token_encoder,\n", - ")\n", - "\n", - "local_context_params = {\n", - " \"text_unit_prop\": 0.5,\n", - " \"community_prop\": 0.1,\n", - " \"conversation_history_max_turns\": 5,\n", - " \"conversation_history_user_turns_only\": True,\n", - " \"top_k_mapped_entities\": 10,\n", - " \"top_k_relationships\": 10,\n", - " \"include_entity_rank\": True,\n", - " \"include_relationship_weight\": True,\n", - " \"include_community_rank\": False,\n", - " \"return_candidate_context\": False,\n", - " \"embedding_vectorstore_key\": EntityVectorStoreKey.ID, # set this to EntityVectorStoreKey.TITLE if the vectorstore uses entity title as ids\n", - " \"max_tokens\": 12_000, # change this based on the token limit you have on your model (if you are using a model with 8k limit, a good setting could be 5000)\n", - "}\n", - "\n", - "llm_params = {\n", - " \"max_tokens\": 2_000, # change this based on the token limit you have on your model (if you are using a model with 8k limit, a good setting could be 1000=1500)\n", - " \"temperature\": 0.0,\n", - "}\n", - "\n", - "search_engine = LocalSearch(\n", - " llm=llm,\n", - " context_builder=context_builder,\n", - " token_encoder=token_encoder,\n", - " llm_params=llm_params,\n", - " context_builder_params=local_context_params,\n", - " response_type=\"multiple paragraphs\", # free form text describing the response type and format, can be anything, e.g. prioritized list, single paragraph, multiple paragraphs, multiple-page report\n", - ")\n", - "\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Run local search on sample queries" - ] - }, - { - "cell_type": "code", -<<<<<<< HEAD - "execution_count": null, - "metadata": {}, - "outputs": [], -======= - "execution_count": 17, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "# Prompts for Self-Reflecting\n", - "\n", - "Self-reflecting prompts are designed to encourage introspection and personal growth by guiding individuals to think deeply about their experiences, thoughts, and emotions. These prompts can be particularly useful in various contexts, such as personal development, therapy, and coaching. Below, we explore the concept of self-reflecting prompts, their significance, and some techniques used to create effective prompts.\n", - "\n", - "## Understanding Self-Reflecting Prompts\n", - "\n", - "A prompt, in the context of Generative AI and personal development, is a set of instructions or questions provided to guide the output of a model or the thoughts of an individual. Self-reflecting prompts are specifically crafted to elicit introspective responses, helping individuals to explore their inner world and gain insights into their behavior, motivations, and feelings [Data: Entities (243, 163)].\n", - "\n", - "## Techniques for Crafting Self-Reflecting Prompts\n", - "\n", - "### Prompt Engineering\n", - "\n", - "Prompt Engineering is a critical technique in designing effective self-reflecting prompts. It involves the careful construction and refinement of prompts to ensure they elicit meaningful and relevant responses. This process can include the use of specific language, context, and examples to guide the individual's reflection [Data: Entities (163, 275); Relationships (174, 216)].\n", - "\n", - "### Conversational Prompt Engineering\n", - "\n", - "Conversational Prompt Engineering is particularly useful for real-time interactions, such as therapy sessions or coaching conversations. This technique involves designing prompts that facilitate a natural and engaging dialogue, encouraging individuals to open up and reflect more deeply on their experiences [Data: Entities (264); Relationships (204)].\n", - "\n", - "### Prompt-Based Learning\n", - "\n", - "Prompt-Based Learning, also known as Prompt Learning, is a technique where the model or individual learns from the prompts provided, improving their ability to generate accurate and insightful responses over time. This iterative process is essential for refining self-reflecting prompts to better suit the needs of the individual [Data: Entities (266); Relationships (206, 293)].\n", - "\n", - "## Examples and Exemplars\n", - "\n", - "Examples, also known as exemplars or shots, are demonstrations used in prompts to guide the individual in completing a task. In the context of self-reflecting prompts, exemplars can be used to illustrate how to approach a reflective question, providing a model for the individual to follow. This technique is fundamental in helping individuals understand the depth and nature of the reflection expected [Data: Entities (245, 276); Relationships (184, 213)].\n", - "\n", - "## Importance of Context Window\n", - "\n", - "The 'Context Window' refers to the range of information processed by the individual or model in response to a prompt. In self-reflecting prompts, the context window is crucial for ensuring that the individual can effectively interpret and respond to the prompt, taking into account their personal experiences and current state of mind [Data: Entities (248); Relationships (187, 378)].\n", - "\n", - "## Conclusion\n", - "\n", - "Self-reflecting prompts are a powerful tool for personal growth and introspection. By leveraging techniques such as Prompt Engineering, Conversational Prompt Engineering, and Prompt-Based Learning, these prompts can be crafted to elicit deep and meaningful reflections. The use of examples and a well-defined context window further enhances the effectiveness of these prompts, guiding individuals on their journey of self-discovery and personal development.\n", - "\n", - "Understanding and utilizing these techniques can significantly improve the quality of self-reflection, leading to greater self-awareness and personal growth.\n" - ] - } - ], ->>>>>>> origin/main - "source": [ - "result = await search_engine.asearch(\"Tell me about Prompts for Self Reflecting\")\n", - "print(result.response)" - ] - }, - { - "cell_type": "code", -<<<<<<< HEAD - "execution_count": null, - "metadata": {}, - "outputs": [], -======= - "execution_count": 18, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "# Prompt Optimization\n", - "\n", - "Prompt optimization is a critical aspect of prompt engineering, focusing on refining prompts to enhance the performance of large language models (LLMs). This process involves improving prompts with respect to a scoring function, which is usually defined over a dataset. The goal is to maximize the effectiveness of the prompts in guiding the LLMs to produce desired outputs.\n", - "\n", - "## Key Techniques and Metrics\n", - "\n", - "Several techniques are employed in prompt optimization, including Meta Prompting and AutoPrompt. These methods involve automatically optimizing prompts to guide AI models effectively. The iterative nature of these techniques underscores the importance of continuous refinement to achieve the best possible performance from LLMs [Data: Prompt Engineering and Its Techniques (23); Entities (401, 591); Relationships (217, 218, 246)].\n", - "\n", - "Performance metrics such as F1 Score, Recall, and Precision are essential in evaluating the effectiveness of prompts. These metrics help in assessing how well the prompts elicit the desired responses from LLMs. For instance, the F1 Score is used to measure the balance between precision and recall, ensuring that the prompts are both accurate and comprehensive in their outputs [Data: Prompt Engineering and Its Techniques (23); Relationships (236, 237, 238)].\n", - "\n", - "## Applications and Impact\n", - "\n", - "Prompt optimization has significant applications across various fields, including healthcare, software engineering, and education. In healthcare, techniques like Automated Prompt Engineering are used to enhance medical services and improve the training of medical professionals. In software engineering, prompt optimization techniques such as Automated Program Repair and Software Testing with LLMs are employed to improve software development processes, making them more efficient and effective [Data: Prompt Engineering and Its Techniques (23); Entities (597, 600, 609, 607); Relationships (254, 257, 266, 264, 265)].\n", - "\n", - "In educational settings, prompt optimization is leveraged to enhance teaching and learning experiences. By using optimized prompts, educators can improve the effectiveness of their teaching methods, providing better learning experiences for students. This highlights the role of prompt optimization in developing more interactive and engaging learning environments [Data: Prompt Engineering and Its Techniques (23); Entities (610); Relationships (267)].\n", - "\n", - "## Challenges and Future Directions\n", - "\n", - "One of the challenges in prompt optimization is ensuring fairness and security in the application of LLMs. Techniques are reviewed to address issues related to the fairness of LLMs and to ensure the safe and secure application of prompt engineering methods. Organizations like Rebuff AI have developed security measures such as self-hardening prompt injection detectors to improve the security of AI systems [Data: Prompt Engineering and Its Techniques (23); Entities (611, 625); Relationships (268, 277, 282)].\n", - "\n", - "The field of prompt optimization is continuously evolving, with ongoing efforts to provide a comprehensive classification and terminology for various techniques. Standardizing terminology is crucial for facilitating communication and collaboration among researchers and practitioners in prompt engineering. This ensures consistency and clarity in the field, accommodating future techniques and advancements [Data: Prompt Engineering and Its Techniques (23); Entities (619, 620, 622); Relationships (275, 276, 278)].\n", - "\n", - "In summary, prompt optimization is a vital component of prompt engineering, aimed at refining prompts to enhance the performance of LLMs. Through various techniques and performance metrics, prompt optimization has significant applications across multiple fields, contributing to advancements in healthcare, software engineering, and education. The continuous evolution of this field highlights the importance of ongoing research and standardization efforts to address emerging challenges and improve the effectiveness of LLMs.\n" - ] - } - ], ->>>>>>> origin/main - "source": [ - "question = \"Tell me about Prompt Optimization\"\n", - "result = await search_engine.asearch(question)\n", - "print(result.response)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Inspecting the context data used to generate the response" - ] - }, - { - "cell_type": "code", -<<<<<<< HEAD - "execution_count": null, - "metadata": {}, - "outputs": [], -======= - "execution_count": 19, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "