From b2345ea8c892fd0bc2725c358b606c479276efc8 Mon Sep 17 00:00:00 2001 From: Tamir Bahar Date: Fri, 29 Nov 2024 15:55:07 +0200 Subject: [PATCH 01/25] Document adding a new language parser --- CHANGELOG.md | 1 + DEVELOPMENT.md | 26 ++++++++++++++++ bun.lockb | Bin 181354 -> 185742 bytes package.json | 2 ++ parsers/tree-sitter-cpp.wasm | Bin 0 -> 3434931 bytes scripts/generate-parsers.ts | 58 ++++++++++++++++++++++++++++++++--- 6 files changed, 82 insertions(+), 5 deletions(-) create mode 100644 DEVELOPMENT.md create mode 100644 parsers/tree-sitter-cpp.wasm diff --git a/CHANGELOG.md b/CHANGELOG.md index 5ff6f14..a768612 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how - Added JetBrains frontend for use in JetBrains IDE plugin - Demo: Added a link to the JetBrains plugin page - Demo learned to change font-size +- Docs: instructions for adding a new parser ## [0.0.8] - 2024-10-10 diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md new file mode 100644 index 0000000..edeed52 --- /dev/null +++ b/DEVELOPMENT.md @@ -0,0 +1,26 @@ +## Adding a New Language + +### Add the Relevant Parser + +We're using [tree-sitter] to parse code into ASTs. +Each language requires its own parser. +Find yours in [tree-sitter's list of parsers][tree-sitter parsers]. + +Once you find the parser, you need to install it: + +```shell +bun add --dev tree-sitter- +``` + +After installing it, add it to `./scripts/generate-parsers.ts` +and run `bun generate-parsers` to try and generate the `.wasm` parser file from it. + +If the package contains a pre-built `.wasm` file, this will work. +If it fails, Follow the [tree-sitter instructions for generating .wasm language files][build wasm] to set up emsrcipten, +and run `bun generate-parsers` again. + +Once the command completes successfully, your new parser should be inside `./parsers`. + +[tree-sitter parsers]: https://github.com/tree-sitter/tree-sitter/wiki/List-of-parsers +[tree-sitter]: https://tree-sitter.github.io/tree-sitter/ +[build-wasm]: https://github.com/tree-sitter/tree-sitter/blob/master/lib/binding_web/README.md#generate-wasm-language-files diff --git a/bun.lockb b/bun.lockb index 3085442f625bf85efe8f5c86a0006d7348700edb..f1010a8f4a02584d354dbc666c1baae6097ce4f7 100644 GIT binary patch delta 29745 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 X!9I~4+#>t3wOi!I1@CN?n^*ro#6aI& delta 27008 zcmeHw2Y6LQxAxwf9LT1ZKoXJ=LWhu$LO2NtIh4?QCn!Q70RkkHBs7U9fD|bTZea|9 zfMTPFhzN=r5iEfCfr=OqAtGYIf_@@Z?)&bUo#4Ibz2Cj}|NrNI9{1xq@2oXz+L|?M zb_wHyTPl6KxYCNq=F3`4t@_%|z~h^W+q}87Ft5#X33)$N&kF1OZTzkdg|9|OoZN3{ zygpeuG}Qb1QQcPFY zX@O^|$`OALBtLpu+L#QCJRN4FB{l<*Rd55y{H%;=<1%72ZEaO;h;6#eoCwyfU4VUA zU>US&>al4#xl>{GX&HGrnPX>ZlWNEjM4-2okv|K_shXqo(=(^p6?L|{8=(m?FdDTc zi_?DR@rQnDLV*W~Qf28=E7iC=o_x_aYRU)G-sqh_RE>#+3)p z(#1fGyP#Qsn&vxAEAsz`v+6DQpG@n&GOO$1pET3Nj9Iy9(=@GZeHy=)R&W6cX2gcc zks~)^ET;7Z@SLS;4W#v_0cojpg_+soGp1$c=9B}^@|VM`iawFu7dDc!KP4|~3g%QR zLiH?$>6np?c29$6wU--91D^wO999#lH*E|{X&mqp9pv_T==8h_um}IT=~g zGf>Ns`qFi_0$F+;kS_8tkki)^$X3sV%Ek2|5MEUvTFBOO^RlxuCTZGK43w8ATn=J0 zkmc3^G5ucp1^Nwzma@Bpfoz}`kWT&x6p2d}ejFh?)ICzu;5r3wfrtARjGH_qoejl7 z&Q-oob!c-Gh6;WeupV$KFbFurMz2a^b@ch z1!s|9Lq`?v15!R=hMc?!Gt$saO|#m`k<0?tMgAAovGV@r;bdu#z1F4j{$2rVR7RfT zM@to70OYjhjfu?495ZdQ)3P#8q3+A=r4bP8GjlUDa?+-ao02vyCu0W6arz58 z%0A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

lQ@E+KL5Goe`<|EL^)P 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 GBmV`v%>c{* literal 0 HcmV?d00001 diff --git a/scripts/generate-parsers.ts b/scripts/generate-parsers.ts index 0bc23b9..74628d5 100644 --- a/scripts/generate-parsers.ts +++ b/scripts/generate-parsers.ts @@ -1,10 +1,58 @@ +/** + * The `generate-parsers` script copies or builds the relevant tree-sitter + * parsers in to the `./parsers` directory. + * + * To add a new parsers, add it's package name to the `parsersToBuild` array. + */ import { $ } from "bun"; +import * as fs from "node:fs"; +import { fileURLToPath } from "node:url"; -const treeSitter = Bun.file("./node_modules/web-tree-sitter/tree-sitter.wasm"); -await Bun.write("./parsers/tree-sitter.wasm", treeSitter); +/** + * The parsers to include + */ +const parsersToBuild = [ + "tree-sitter-go", + "tree-sitter-c", + "tree-sitter-python", + "tree-sitter-cpp", +]; -const parsers = ["tree-sitter-go", "tree-sitter-c", "tree-sitter-python"]; +function locatePrebuiltWasm(packageName: string): string { + return fileURLToPath( + import.meta.resolve(`${packageName}/${packageName}.wasm`), + ); +} + +function hasPrebuiltWasm(packageName: string): boolean { + try { + locatePrebuiltWasm(packageName); + } catch { + return false; + } + return true; +} + +for (const name of parsersToBuild) { + const targetWasmPath = `./parsers/${name}.wasm`; + if (await Bun.file(targetWasmPath).exists()) { + console.log(`${name}: .wasm found, skipping copy.`); + } else if (hasPrebuiltWasm(name)) { + console.log(`${name}: copying .wasm`); + fs.copyFileSync(locatePrebuiltWasm(name), targetWasmPath); + } else { + console.log(`${name}: building .wasm`); + await $`bun x --bun tree-sitter build --wasm -o ${targetWasmPath} ./node_modules/${name}/`; + } + + await $`git add ${targetWasmPath}`; +} -for (const name of parsers) { - await $`bun x --bun tree-sitter build --wasm -o ./parsers/${name}.wasm ./node_modules/${name}/`; +const treeSitterPath = "./parsers/tree-sitter.wasm"; +if (!(await Bun.file(treeSitterPath).exists())) { + const treeSitter = Bun.file( + "./node_modules/web-tree-sitter/tree-sitter.wasm", + ); + await Bun.write(treeSitterPath, treeSitter); + await $`git add ${treeSitterPath}`; } From e0bfe38a1810623059bc2586038f5101e182fbe7 Mon Sep 17 00:00:00 2001 From: Tamir Bahar Date: Fri, 29 Nov 2024 16:44:26 +0200 Subject: [PATCH 02/25] Document GenericCFGBuilder --- src/control-flow/generic-cfg-builder.ts | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/control-flow/generic-cfg-builder.ts b/src/control-flow/generic-cfg-builder.ts index ea044f0..15e9518 100644 --- a/src/control-flow/generic-cfg-builder.ts +++ b/src/control-flow/generic-cfg-builder.ts @@ -27,12 +27,32 @@ export interface Context { link: Link; } +/** + * A function that converts an AST node to a CFG basic-block. + * + * @param {Parser.SyntaxNode} syntax - The AST node to be processed + * @param {Context} ctx - The context in which the statement is being handled + * @returns {BasicBlock} A basic block representation of the AST node + */ type StatementHandler = (syntax: Parser.SyntaxNode, ctx: Context) => BasicBlock; +/** + * Maps AST nodes to their matching `StatementHandler` functions. + */ export type StatementHandlers = { + /** + * Named entries map use the AST node names to map + */ named: { [key: string]: StatementHandler }; + /** + * The default entry handles all the other AST nodes + */ default: StatementHandler; }; + +/** + * This class is responsible for building a CFG from an AST. + */ export class GenericCFGBuilder { private builder: Builder = new Builder(); private readonly options: BuilderOptions; From 49bbe96ba907774c4888e7a80edf3052b1e03658 Mon Sep 17 00:00:00 2001 From: Tamir Bahar Date: Fri, 29 Nov 2024 16:48:08 +0200 Subject: [PATCH 03/25] Linking the new C++ parser into the comment tests --- DEVELOPMENT.md | 13 + src/components/utils.ts | 5 + src/control-flow/cfg-cpp.ts | 29 + src/control-flow/cfg.ts | 5 +- .../__snapshots__/commentTest.test.ts.snap | 814 ++++++++++++++++++ src/test/collect-cpp.ts | 40 + src/test/commentTestCollector.ts | 2 + src/test/commentTestSamples/sample.cpp | 185 ++++ 8 files changed, 1092 insertions(+), 1 deletion(-) create mode 100644 src/control-flow/cfg-cpp.ts create mode 100644 src/test/collect-cpp.ts create mode 100644 src/test/commentTestSamples/sample.cpp diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index edeed52..b8098c9 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -24,3 +24,16 @@ Once the command completes successfully, your new parser should be inside `./par [tree-sitter parsers]: https://github.com/tree-sitter/tree-sitter/wiki/List-of-parsers [tree-sitter]: https://tree-sitter.github.io/tree-sitter/ [build-wasm]: https://github.com/tree-sitter/tree-sitter/blob/master/lib/binding_web/README.md#generate-wasm-language-files + + +### Generating the CFG + +Each CFG-builder resides in its own file inside `./src/control-flow`. +Name yours `cfg-.ts`. + +Your builder is expected to expose a `createCFGBuilder(options: BuilderOptions): CFGBuilder` function. +A naive implementation to get started with would look something like this: + +```typescript + +``` \ No newline at end of file diff --git a/src/components/utils.ts b/src/components/utils.ts index 43fe855..c85d7f8 100644 --- a/src/components/utils.ts +++ b/src/components/utils.ts @@ -4,6 +4,7 @@ import treeSitterGo from "../../parsers/tree-sitter-go.wasm?url"; import treeSitterC from "../../parsers/tree-sitter-c.wasm?url"; import treeSitterPython from "../../parsers/tree-sitter-python.wasm?url"; import treeSitterCore from "../../parsers/tree-sitter.wasm?url"; +import treeSitterCpp from "../../parsers/tree-sitter-cpp.wasm?url"; import { newCFGBuilder, type Language } from "../control-flow/cfg"; import type { TestFuncRecord } from "../test/commentTestUtils"; import type { TestFunction } from "../test/commentTestTypes"; @@ -27,6 +28,8 @@ async function initializeParser(language: Language) { return Parser.Language.load(treeSitterGo); case "Python": return Parser.Language.load(treeSitterPython); + case "C++": + return Parser.Language.load(treeSitterCpp) } })(); parser.setLanguage(parserLanguage); @@ -37,12 +40,14 @@ export interface Parsers { Go: Parser; C: Parser; Python: Parser; + "C++":Parser; } export async function initializeParsers(): Promise { return { Go: await initializeParser("Go"), C: await initializeParser("C"), Python: await initializeParser("Python"), + "C++": await initializeParser("C++") }; } diff --git a/src/control-flow/cfg-cpp.ts b/src/control-flow/cfg-cpp.ts new file mode 100644 index 0000000..b978d83 --- /dev/null +++ b/src/control-flow/cfg-cpp.ts @@ -0,0 +1,29 @@ +import type Parser from "web-tree-sitter"; +import type { BasicBlock, BuilderOptions, CFGBuilder } from "./cfg-defs"; +import { + type Context, + GenericCFGBuilder, + type StatementHandlers, +} from "./generic-cfg-builder.ts"; + +export function createCFGBuilder(options: BuilderOptions): CFGBuilder { + return new GenericCFGBuilder(statementHandlers, options); +} + +const statementHandlers: StatementHandlers = { + named: {}, + default: defaultProcessStatement, +}; + +function defaultProcessStatement( + syntax: Parser.SyntaxNode, + ctx: Context, +): BasicBlock { + const newNode = ctx.builder.addNode( + "STATEMENT", + syntax.text, + syntax.startIndex, + ); + ctx.link.syntaxToNode(syntax, newNode); + return { entry: newNode, exit: newNode }; +} diff --git a/src/control-flow/cfg.ts b/src/control-flow/cfg.ts index 574132b..4d47341 100644 --- a/src/control-flow/cfg.ts +++ b/src/control-flow/cfg.ts @@ -2,8 +2,9 @@ import { createCFGBuilder as createCCFGBuilder } from "./cfg-c"; import type { BuilderOptions, CFGBuilder } from "./cfg-defs"; import { createCFGBuilder as createGoCFGBuilder } from "./cfg-go"; import { createCFGBuilder as createPythonCFGBuilder } from "./cfg-python"; +import { createCFGBuilder as createCppCFGBuilder } from "./cfg-cpp"; -const supportedLanguages = ["C", "Go", "Python"] as const; +const supportedLanguages = ["C", "Go", "Python", "C++"] as const; export type Language = (typeof supportedLanguages)[number]; export function isValidLanguage(language: string): language is Language { return (supportedLanguages as readonly string[]).includes(language); @@ -20,5 +21,7 @@ export function newCFGBuilder( return createGoCFGBuilder(options); case "Python": return createPythonCFGBuilder(options); + case "C++": + return createCppCFGBuilder(options); } } diff --git a/src/test/__snapshots__/commentTest.test.ts.snap b/src/test/__snapshots__/commentTest.test.ts.snap index 77611c5..d968319 100644 --- a/src/test/__snapshots__/commentTest.test.ts.snap +++ b/src/test/__snapshots__/commentTest.test.ts.snap @@ -12036,3 +12036,817 @@ exports[`Python: try_with_finally: Segmentation 1`] = ` }, ] `; + +exports[`C++: trivial: DOT Snapshot 1`] = ` +"digraph "" { + node [shape=box, color="#000000"]; + edge [headport=n tailport=s] + bgcolor="#ffffff" + node2 [style="filled"; +label=""; +id="node2"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +minHeight=0.5; +height=0.8999999999999999; +]; +}" +`; + +exports[`C++: simpleIf: DOT Snapshot 1`] = ` +"digraph "" { + node [shape=box, color="#000000"]; + edge [headport=n tailport=s] + bgcolor="#ffffff" + node2 [style="filled"; +label=""; +id="node2"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +minHeight=0.5; +height=0.8999999999999999; +]; +}" +`; + +exports[`C++: ifElse: DOT Snapshot 1`] = ` +"digraph "" { + node [shape=box, color="#000000"]; + edge [headport=n tailport=s] + bgcolor="#ffffff" + node2 [style="filled"; +label=""; +id="node2"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +minHeight=0.5; +height=0.8999999999999999; +]; +}" +`; + +exports[`C++: forever: DOT Snapshot 1`] = ` +"digraph "" { + node [shape=box, color="#000000"]; + edge [headport=n tailport=s] + bgcolor="#ffffff" + node2 [style="filled"; +label=""; +id="node2"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +minHeight=0.5; +height=0.8999999999999999; +]; +}" +`; + +exports[`C++: forever2: DOT Snapshot 1`] = ` +"digraph "" { + node [shape=box, color="#000000"]; + edge [headport=n tailport=s] + bgcolor="#ffffff" + node2 [style="filled"; +label=""; +id="node2"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +minHeight=0.5; +height=0.8999999999999999; +]; +}" +`; + +exports[`C++: forLoop: DOT Snapshot 1`] = ` +"digraph "" { + node [shape=box, color="#000000"]; + edge [headport=n tailport=s] + bgcolor="#ffffff" + node2 [style="filled"; +label=""; +id="node2"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +minHeight=0.5; +height=0.8999999999999999; +]; +}" +`; + +exports[`C++: whileLoop: DOT Snapshot 1`] = ` +"digraph "" { + node [shape=box, color="#000000"]; + edge [headport=n tailport=s] + bgcolor="#ffffff" + node2 [style="filled"; +label=""; +id="node2"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +minHeight=0.5; +height=0.8999999999999999; +]; +}" +`; + +exports[`C++: doWhile: DOT Snapshot 1`] = ` +"digraph "" { + node [shape=box, color="#000000"]; + edge [headport=n tailport=s] + bgcolor="#ffffff" + node2 [style="filled"; +label=""; +id="node2"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +minHeight=0.5; +height=0.8999999999999999; +]; +}" +`; + +exports[`C++: gotoA: DOT Snapshot 1`] = ` +"digraph "" { + node [shape=box, color="#000000"]; + edge [headport=n tailport=s] + bgcolor="#ffffff" + node2 [style="filled"; +label=""; +id="node2"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +minHeight=0.5; +height=0.8999999999999999; +]; +}" +`; + +exports[`C++: switch_1: DOT Snapshot 1`] = ` +"digraph "" { + node [shape=box, color="#000000"]; + edge [headport=n tailport=s] + bgcolor="#ffffff" + node2 [style="filled"; +label=""; +id="node2"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +minHeight=0.5; +height=0.8999999999999999; +]; +}" +`; + +exports[`C++: switch_2: DOT Snapshot 1`] = ` +"digraph "" { + node [shape=box, color="#000000"]; + edge [headport=n tailport=s] + bgcolor="#ffffff" + node2 [style="filled"; +label=""; +id="node2"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +minHeight=0.5; +height=0.8999999999999999; +]; +}" +`; + +exports[`C++: ManyIfs: DOT Snapshot 1`] = ` +"digraph "" { + node [shape=box, color="#000000"]; + edge [headport=n tailport=s] + bgcolor="#ffffff" + node5 [style="filled"; +label=""; +id="node5"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +minHeight=0.5; +height=1.7999999999999998; +]; +}" +`; + +exports[`C++: IfWithoutBraces: DOT Snapshot 1`] = ` +"digraph "" { + node [shape=box, color="#000000"]; + edge [headport=n tailport=s] + bgcolor="#ffffff" + node3 [style="filled"; +label=""; +id="node3"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +minHeight=0.5; +height=1.2; +]; +}" +`; + +exports[`C++: ForLoops: DOT Snapshot 1`] = ` +"digraph "" { + node [shape=box, color="#000000"]; + edge [headport=n tailport=s] + bgcolor="#ffffff" + node9 [style="filled"; +label=""; +id="node9"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +minHeight=0.5; +height=3; +]; +}" +`; + +exports[`C++: MoreSwitch: DOT Snapshot 1`] = ` +"digraph "" { + node [shape=box, color="#000000"]; + edge [headport=n tailport=s] + bgcolor="#ffffff" + node2 [style="filled"; +label=""; +id="node2"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +minHeight=0.5; +height=0.8999999999999999; +]; +}" +`; + +exports[`C++: trivial: Segmentation 1`] = ` +[ + { + "start": 0, + "value": "node2", + }, + { + "start": 15, + "value": "node2", + }, + { + "start": 32, + "value": "node2", + }, +] +`; + +exports[`C++: simpleIf: Segmentation 1`] = ` +[ + { + "start": 0, + "value": "node2", + }, + { + "start": 49, + "value": "node2", + }, + { + "start": 71, + "value": "node2", + }, + { + "start": 85, + "value": "node2", + }, + { + "start": 87, + "value": "node2", + }, + { + "start": 87, + "value": "node2", + }, +] +`; + +exports[`C++: ifElse: Segmentation 1`] = ` +[ + { + "start": 0, + "value": "node2", + }, + { + "start": 114, + "value": "node2", + }, + { + "start": 134, + "value": "node2", + }, + { + "start": 181, + "value": "node2", + }, + { + "start": 183, + "value": "node2", + }, + { + "start": 183, + "value": "node2", + }, +] +`; + +exports[`C++: forever: Segmentation 1`] = ` +[ + { + "start": 0, + "value": "node2", + }, + { + "start": 210, + "value": "node2", + }, + { + "start": 231, + "value": "node2", + }, + { + "start": 247, + "value": "node2", + }, + { + "start": 249, + "value": "node2", + }, + { + "start": 249, + "value": "node2", + }, +] +`; + +exports[`C++: forever2: Segmentation 1`] = ` +[ + { + "start": 0, + "value": "node2", + }, + { + "start": 276, + "value": "node2", + }, + { + "start": 298, + "value": "node2", + }, + { + "start": 327, + "value": "node2", + }, + { + "start": 329, + "value": "node2", + }, + { + "start": 329, + "value": "node2", + }, +] +`; + +exports[`C++: forLoop: Segmentation 1`] = ` +[ + { + "start": 0, + "value": "node2", + }, + { + "start": 388, + "value": "node2", + }, + { + "start": 409, + "value": "node2", + }, + { + "start": 481, + "value": "node2", + }, + { + "start": 483, + "value": "node2", + }, + { + "start": 483, + "value": "node2", + }, +] +`; + +exports[`C++: whileLoop: Segmentation 1`] = ` +[ + { + "start": 0, + "value": "node2", + }, + { + "start": 510, + "value": "node2", + }, + { + "start": 533, + "value": "node2", + }, + { + "start": 552, + "value": "node2", + }, + { + "start": 554, + "value": "node2", + }, + { + "start": 554, + "value": "node2", + }, +] +`; + +exports[`C++: doWhile: Segmentation 1`] = ` +[ + { + "start": 0, + "value": "node2", + }, + { + "start": 581, + "value": "node2", + }, + { + "start": 602, + "value": "node2", + }, + { + "start": 625, + "value": "node2", + }, + { + "start": 627, + "value": "node2", + }, + { + "start": 627, + "value": "node2", + }, +] +`; + +exports[`C++: gotoA: Segmentation 1`] = ` +[ + { + "start": 0, + "value": "node2", + }, + { + "start": 654, + "value": "node2", + }, + { + "start": 669, + "value": "node2", + }, + { + "start": 714, + "value": "node2", + }, + { + "start": 716, + "value": "node2", + }, + { + "start": 716, + "value": "node2", + }, +] +`; + +exports[`C++: switch_1: Segmentation 1`] = ` +[ + { + "start": 0, + "value": "node2", + }, + { + "start": 765, + "value": "node2", + }, + { + "start": 787, + "value": "node2", + }, + { + "start": 923, + "value": "node2", + }, + { + "start": 925, + "value": "node2", + }, + { + "start": 925, + "value": "node2", + }, +] +`; + +exports[`C++: switch_2: Segmentation 1`] = ` +[ + { + "start": 0, + "value": "node2", + }, + { + "start": 952, + "value": "node2", + }, + { + "start": 974, + "value": "node2", + }, + { + "start": 1043, + "value": "node2", + }, + { + "start": 1045, + "value": "node2", + }, + { + "start": 1045, + "value": "node2", + }, +] +`; + +exports[`C++: ManyIfs: Segmentation 1`] = ` +[ + { + "start": 0, + "value": "node5", + }, + { + "start": 1073, + "value": "node5", + }, + { + "start": 1094, + "value": "node5", + }, + { + "start": 1108, + "value": "node5", + }, + { + "start": 1114, + "value": "node5", + }, + { + "start": 1114, + "value": "node5", + }, + { + "start": 1141, + "value": "node5", + }, + { + "start": 1147, + "value": "node5", + }, + { + "start": 1147, + "value": "node5", + }, + { + "start": 1181, + "value": "node5", + }, + { + "start": 1187, + "value": "node5", + }, + { + "start": 1187, + "value": "node5", + }, + { + "start": 1235, + "value": "node5", + }, + { + "start": 1237, + "value": "node5", + }, + { + "start": 1237, + "value": "node5", + }, +] +`; + +exports[`C++: IfWithoutBraces: Segmentation 1`] = ` +[ + { + "start": 0, + "value": "node3", + }, + { + "start": 1254, + "value": "node3", + }, + { + "start": 1428, + "value": "node3", + }, + { + "start": 1478, + "value": "node3", + }, + { + "start": 1484, + "value": "node3", + }, + { + "start": 1484, + "value": "node3", + }, + { + "start": 1546, + "value": "node3", + }, + { + "start": 1548, + "value": "node3", + }, + { + "start": 1548, + "value": "node3", + }, +] +`; + +exports[`C++: ForLoops: Segmentation 1`] = ` +[ + { + "start": 0, + "value": "node9", + }, + { + "start": 1566, + "value": "node9", + }, + { + "start": 1612, + "value": "node9", + }, + { + "start": 1642, + "value": "node9", + }, + { + "start": 1647, + "value": "node9", + }, + { + "start": 1647, + "value": "node9", + }, + { + "start": 1677, + "value": "node9", + }, + { + "start": 1682, + "value": "node9", + }, + { + "start": 1682, + "value": "node9", + }, + { + "start": 1712, + "value": "node9", + }, + { + "start": 1717, + "value": "node9", + }, + { + "start": 1717, + "value": "node9", + }, + { + "start": 1747, + "value": "node9", + }, + { + "start": 1752, + "value": "node9", + }, + { + "start": 1752, + "value": "node9", + }, + { + "start": 1782, + "value": "node9", + }, + { + "start": 1787, + "value": "node9", + }, + { + "start": 1787, + "value": "node9", + }, + { + "start": 1817, + "value": "node9", + }, + { + "start": 1822, + "value": "node9", + }, + { + "start": 1822, + "value": "node9", + }, + { + "start": 1852, + "value": "node9", + }, + { + "start": 1857, + "value": "node9", + }, + { + "start": 1857, + "value": "node9", + }, + { + "start": 1887, + "value": "node9", + }, + { + "start": 1909, + "value": "Not found", + }, + { + "start": 1911, + "value": "node9", + }, + { + "start": 1911, + "value": "node9", + }, +] +`; + +exports[`C++: MoreSwitch: Segmentation 1`] = ` +[ + { + "start": 0, + "value": "node2", + }, + { + "start": 1928, + "value": "node2", + }, + { + "start": 2030, + "value": "node2", + }, + { + "start": 2160, + "value": "node2", + }, + { + "start": 2162, + "value": "node2", + }, + { + "start": 2162, + "value": "node2", + }, +] +`; diff --git a/src/test/collect-cpp.ts b/src/test/collect-cpp.ts new file mode 100644 index 0000000..1d5630e --- /dev/null +++ b/src/test/collect-cpp.ts @@ -0,0 +1,40 @@ +import type Parser from "web-tree-sitter"; +import treeSitterCpp from "../../parsers/tree-sitter-cpp.wasm?url"; +import { parseComment } from "./commentTestUtils"; +import type { TestFunction } from "./commentTestTypes"; +import { initializeParser } from "./parser-init"; + +const { parser, language } = await initializeParser(treeSitterCpp); + +export function getTestFuncs(code: string): Generator { + const tree = parser.parse(code); + return iterTestFunctions(tree); +} + +function* iterTestFunctions(tree: Parser.Tree): Generator { + const testFuncQuery = language.query(` + ( + (comment) @comment + (function_definition ( + (function_declarator (identifier) @name) + body: (compound_statement) @body + ) + ) @func +)+ + `); + const matches = testFuncQuery.matches(tree.rootNode, { maxStartDepth: 1 }); + for (const match of matches) { + for (let i = 0; i < match.captures.length; i += 4) { + const captures = match.captures.slice(i); + yield { + // @ts-expect-error: We know that the captures are OK + function: captures[1].node, + // @ts-expect-error: We know that the captures are OK + reqs: parseComment(captures[0].node.text.slice(2, -2)), + // @ts-expect-error: We know that the captures are OK + name: captures[2].node.text, + language: "C++", + }; + } + } +} diff --git a/src/test/commentTestCollector.ts b/src/test/commentTestCollector.ts index 6ee0fe6..efa35b4 100644 --- a/src/test/commentTestCollector.ts +++ b/src/test/commentTestCollector.ts @@ -2,6 +2,7 @@ import { Glob } from "bun"; import { getTestFuncs as getTestFuncsForC } from "./collect-c"; import { getTestFuncs as getTestFuncsForGo } from "./collect-go"; import { getTestFuncs as getTestsForPython } from "./collect-python"; +import {getTestFuncs as getTestsForCpp} from "./collect-cpp.ts"; import type { TestFunction } from "./commentTestTypes"; export const testsDir = import.meta.dir + "/commentTestSamples"; @@ -12,6 +13,7 @@ const languages: { { ext: "c", getTestFuncs: getTestFuncsForC }, { ext: "go", getTestFuncs: getTestFuncsForGo }, { ext: "py", getTestFuncs: getTestsForPython }, + { ext: "cpp", getTestFuncs:getTestsForCpp} ]; const sampleGlob = new Glob( diff --git a/src/test/commentTestSamples/sample.cpp b/src/test/commentTestSamples/sample.cpp new file mode 100644 index 0000000..b385f1f --- /dev/null +++ b/src/test/commentTestSamples/sample.cpp @@ -0,0 +1,185 @@ +/* +nodes: 1 +*/ +void trivial() {} + +/* +nodes: 3 +*/ +void simpleIf() { + if (x) { + } +} + +/* +nodes: 6, +exits: 1 +*/ +void ifElse() { + if (x) { + } else if (y) { + } else { + } +} + +/* +nodes: 2, +exits: 0 +*/ +void forever() { + for (;;) { + } +} + +/* +nodes: 2, +exits: 0 +*/ +void forever2() { + for (int a = 0;; ++a) { + } +} + +/* +nodes: 4, +exits: 1, +reaches: [["a","b"],["b","a"]] +*/ +void forLoop() { + for (int a = 0; a < 10; ++a) { + // CFG: a + // CFG: b + } +} + +/* +nodes: 4, +exits: 1 +*/ +void whileLoop() { + while (x()) { + } +} + +/* +nodes: 3, +exits: 1 +*/ +void doWhile() { + do { + } while (x()); +} + +/* +nodes: 4, +exits: 1 +*/ +void gotoA() { +label: + if (x) { + goto label; + } +} + +/* +nodes: 7, +exits: 1, +reaches: [["1","3"]] +*/ +void switch_1() { + switch (x) { + case 1: + // CFG: 1 + "include me!"; + case 2: + case 3: + // CFG: 3 + "Include me!"; + } +} + +/* +nodes: 7, +exits: 1 +*/ +void switch_2() { + switch (x) { + case 1: + break; + case 2: + case 3: + } +} + +/* +nodes: 15, +exits: 1 +*/ +void ManyIfs() { + if (x) { + } + + if (x) { + } else { + } + + if (x) { + } else if (x) { + } + + if (x) { + } else if (x) { + + } else { + } +} + +/* +nodes: 7 +*/ +void IfWithoutBraces() { + /* + It's important to make sure the braces in the if-query are optional. + So the following two loops should behave identically. + */ + for (;;) { + if (x) + break; + } + + for (;;) { + if (x) { + break; + } + } +} + +/* +exits: 1 + */ +void ForLoops() { + // clang-format off + for (a; b; c) { if (x) break;} + for (a; b; ) { if (x) break;} + for (a; ; c) { if (x) break;} + for (a; ; ) { if (x) break;} + for ( ; b; c) { if (x) break;} + for ( ; b; ) { if (x) break;} + for ( ; ; c) { if (x) break;} + for ( ; ; ) { if (x) break;} + //clang-format on +} + +/* +exits: 1 +*/ +void MoreSwitch() { + // This is mostly here to test code segmentation and mapping to CFG nodes + switch (x) { + case 1: break; + case 2: break; + case 3: f(); + case 4: break; + default: f(); + } +} \ No newline at end of file From 97a2c245cc17592be0a81b9fa16ad877a57cd4ff Mon Sep 17 00:00:00 2001 From: Tamir Bahar Date: Fri, 29 Nov 2024 17:13:51 +0200 Subject: [PATCH 04/25] Update typescript-eslint --- bun.lockb | Bin 185742 -> 186141 bytes package.json | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/bun.lockb b/bun.lockb index f1010a8f4a02584d354dbc666c1baae6097ce4f7..177d052f31e92575ff5ac00e72f1b8002bcb9d32 100644 GIT binary patch delta 12831 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 Xy~_J>>HVomOxaeWRrmKZPlx{j)>K}h diff --git a/package.json b/package.json index 0e94360..f0ee57a 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ "tree-sitter-go": "^0.23.1", "tree-sitter-python": "^0.23.2", "typedoc": "^0.27.1", - "typescript-eslint": "^8.8.0", + "typescript-eslint": "^8.16.0", "vite": "^5.4.8" }, "peerDependencies": { From f75b76dfdc42b20be8ec5b0ecaf018095374775b Mon Sep 17 00:00:00 2001 From: Tamir Bahar Date: Fri, 29 Nov 2024 19:20:27 +0200 Subject: [PATCH 05/25] Formatting and a bit more linking of things --- DEVELOPMENT.md | 3 +-- src/components/utils.ts | 16 +++++-------- src/control-flow/cfg-cpp.ts | 30 ++++++++++++------------- src/control-flow/generic-cfg-builder.ts | 1 - src/test/commentTestCollector.ts | 4 ++-- src/vscode/extension.ts | 1 + typedoc.jsonc | 4 ++++ 7 files changed, 29 insertions(+), 30 deletions(-) create mode 100644 typedoc.jsonc diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index b8098c9..330d9ee 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -25,7 +25,6 @@ Once the command completes successfully, your new parser should be inside `./par [tree-sitter]: https://tree-sitter.github.io/tree-sitter/ [build-wasm]: https://github.com/tree-sitter/tree-sitter/blob/master/lib/binding_web/README.md#generate-wasm-language-files - ### Generating the CFG Each CFG-builder resides in its own file inside `./src/control-flow`. @@ -36,4 +35,4 @@ A naive implementation to get started with would look something like this: ```typescript -``` \ No newline at end of file +``` diff --git a/src/components/utils.ts b/src/components/utils.ts index c85d7f8..6cb2c87 100644 --- a/src/components/utils.ts +++ b/src/components/utils.ts @@ -10,7 +10,7 @@ import type { TestFuncRecord } from "../test/commentTestUtils"; import type { TestFunction } from "../test/commentTestTypes"; import { requirementTests } from "../test/commentTestHandlers"; import { simplifyCFG, trimFor } from "../control-flow/graph-ops"; -import { mergeNodeAttrs } from "../control-flow/cfg-defs"; +import { type CFG, mergeNodeAttrs } from "../control-flow/cfg-defs"; import { graphToDot } from "../control-flow/render"; import { Graphviz, type Format } from "@hpcc-js/wasm-graphviz"; async function initializeParser(language: Language) { @@ -29,25 +29,21 @@ async function initializeParser(language: Language) { case "Python": return Parser.Language.load(treeSitterPython); case "C++": - return Parser.Language.load(treeSitterCpp) + return Parser.Language.load(treeSitterCpp); } })(); parser.setLanguage(parserLanguage); return parser; } -export interface Parsers { - Go: Parser; - C: Parser; - Python: Parser; - "C++":Parser; -} +export type Parsers = { [language in Language]: Parser }; + export async function initializeParsers(): Promise { return { Go: await initializeParser("Go"), C: await initializeParser("C"), Python: await initializeParser("Python"), - "C++": await initializeParser("C++") + "C++": await initializeParser("C++"), }; } @@ -135,7 +131,7 @@ export function processRecord( const ast = functionSyntax.toString(); - let cfg; + let cfg: CFG; try { cfg = builder.buildCFG(functionSyntax); diff --git a/src/control-flow/cfg-cpp.ts b/src/control-flow/cfg-cpp.ts index b978d83..2e77fec 100644 --- a/src/control-flow/cfg-cpp.ts +++ b/src/control-flow/cfg-cpp.ts @@ -1,29 +1,29 @@ import type Parser from "web-tree-sitter"; import type { BasicBlock, BuilderOptions, CFGBuilder } from "./cfg-defs"; import { - type Context, - GenericCFGBuilder, - type StatementHandlers, + type Context, + GenericCFGBuilder, + type StatementHandlers, } from "./generic-cfg-builder.ts"; export function createCFGBuilder(options: BuilderOptions): CFGBuilder { - return new GenericCFGBuilder(statementHandlers, options); + return new GenericCFGBuilder(statementHandlers, options); } const statementHandlers: StatementHandlers = { - named: {}, - default: defaultProcessStatement, + named: {}, + default: defaultProcessStatement, }; function defaultProcessStatement( - syntax: Parser.SyntaxNode, - ctx: Context, + syntax: Parser.SyntaxNode, + ctx: Context, ): BasicBlock { - const newNode = ctx.builder.addNode( - "STATEMENT", - syntax.text, - syntax.startIndex, - ); - ctx.link.syntaxToNode(syntax, newNode); - return { entry: newNode, exit: newNode }; + const newNode = ctx.builder.addNode( + "STATEMENT", + syntax.text, + syntax.startIndex, + ); + ctx.link.syntaxToNode(syntax, newNode); + return { entry: newNode, exit: newNode }; } diff --git a/src/control-flow/generic-cfg-builder.ts b/src/control-flow/generic-cfg-builder.ts index 15e9518..19dce17 100644 --- a/src/control-flow/generic-cfg-builder.ts +++ b/src/control-flow/generic-cfg-builder.ts @@ -49,7 +49,6 @@ export type StatementHandlers = { default: StatementHandler; }; - /** * This class is responsible for building a CFG from an AST. */ diff --git a/src/test/commentTestCollector.ts b/src/test/commentTestCollector.ts index efa35b4..e831fa3 100644 --- a/src/test/commentTestCollector.ts +++ b/src/test/commentTestCollector.ts @@ -2,7 +2,7 @@ import { Glob } from "bun"; import { getTestFuncs as getTestFuncsForC } from "./collect-c"; import { getTestFuncs as getTestFuncsForGo } from "./collect-go"; import { getTestFuncs as getTestsForPython } from "./collect-python"; -import {getTestFuncs as getTestsForCpp} from "./collect-cpp.ts"; +import { getTestFuncs as getTestsForCpp } from "./collect-cpp.ts"; import type { TestFunction } from "./commentTestTypes"; export const testsDir = import.meta.dir + "/commentTestSamples"; @@ -13,7 +13,7 @@ const languages: { { ext: "c", getTestFuncs: getTestFuncsForC }, { ext: "go", getTestFuncs: getTestFuncsForGo }, { ext: "py", getTestFuncs: getTestsForPython }, - { ext: "cpp", getTestFuncs:getTestsForCpp} + { ext: "cpp", getTestFuncs: getTestsForCpp }, ]; const sampleGlob = new Glob( diff --git a/src/vscode/extension.ts b/src/vscode/extension.ts index cf893dc..814ed4b 100644 --- a/src/vscode/extension.ts +++ b/src/vscode/extension.ts @@ -48,6 +48,7 @@ const supportedLanguages: SupportedLanguage[] = [ const functionNodeTypes: { [key in Language]: string[] } = { Go: ["function_declaration", "method_declaration", "func_literal"], C: ["function_definition"], + "C++": ["function_definition"], Python: ["function_definition"], }; diff --git a/typedoc.jsonc b/typedoc.jsonc new file mode 100644 index 0000000..89e5ca1 --- /dev/null +++ b/typedoc.jsonc @@ -0,0 +1,4 @@ +{ + "$schema": "https://typedoc.org/schema.json", + "out": "dist/docs", +} From edd8e6208fb5976e9e19dd0741a3f131e5a73585 Mon Sep 17 00:00:00 2001 From: Tamir Bahar Date: Fri, 29 Nov 2024 19:57:21 +0200 Subject: [PATCH 06/25] Remove repetition and make adding languages easier. --- src/components/CodeSegmentation.svelte | 2 +- src/components/Graph.svelte | 2 +- src/components/utils.ts | 68 ++++++++++++++------------ src/control-flow/cfg.ts | 2 +- src/test/commentTestCollector.ts | 2 +- 5 files changed, 40 insertions(+), 36 deletions(-) diff --git a/src/components/CodeSegmentation.svelte b/src/components/CodeSegmentation.svelte index 6c65e36..4f4c94e 100644 --- a/src/components/CodeSegmentation.svelte +++ b/src/components/CodeSegmentation.svelte @@ -82,7 +82,7 @@ ) { const { trim, simplify } = options; const tree = parsers[language].parse(code); - const functionSyntax = getFirstFunction(tree); + const functionSyntax = getFirstFunction(tree, language); const builder = newCFGBuilder(language, {}); let cfg = builder.buildCFG(functionSyntax); diff --git a/src/components/Graph.svelte b/src/components/Graph.svelte index 3eb7ebf..e256d16 100644 --- a/src/components/Graph.svelte +++ b/src/components/Graph.svelte @@ -63,7 +63,7 @@ ) { const { trim, simplify, verbose, flatSwitch, highlight } = options; tree = parsers[language].parse(code); - const functionSyntax = getFirstFunction(tree); + const functionSyntax = getFirstFunction(tree, language); if (!functionSyntax) { throw new Error("No function found!"); } diff --git a/src/components/utils.ts b/src/components/utils.ts index 6cb2c87..7c4dd24 100644 --- a/src/components/utils.ts +++ b/src/components/utils.ts @@ -5,7 +5,11 @@ import treeSitterC from "../../parsers/tree-sitter-c.wasm?url"; import treeSitterPython from "../../parsers/tree-sitter-python.wasm?url"; import treeSitterCore from "../../parsers/tree-sitter.wasm?url"; import treeSitterCpp from "../../parsers/tree-sitter-cpp.wasm?url"; -import { newCFGBuilder, type Language } from "../control-flow/cfg"; +import { + newCFGBuilder, + type Language, + supportedLanguages, +} from "../control-flow/cfg"; import type { TestFuncRecord } from "../test/commentTestUtils"; import type { TestFunction } from "../test/commentTestTypes"; import { requirementTests } from "../test/commentTestHandlers"; @@ -13,25 +17,29 @@ import { simplifyCFG, trimFor } from "../control-flow/graph-ops"; import { type CFG, mergeNodeAttrs } from "../control-flow/cfg-defs"; import { graphToDot } from "../control-flow/render"; import { Graphviz, type Format } from "@hpcc-js/wasm-graphviz"; + +const wasmMapping: { [language in Language]: string } = { + C: treeSitterC, + Go: treeSitterGo, + Python: treeSitterPython, + "C++": treeSitterCpp, +}; + +const functionNodeTypes: { [language in Language]: string[] } = { + Go: ["function_declaration", "method_declaration", "func_literal"], + C: ["function_definition"], + "C++": ["function_definition"], + Python: ["function_definition"], +}; + async function initializeParser(language: Language) { await Parser.init({ locateFile(_scriptName: string, _scriptDirectory: string) { return treeSitterCore; }, }); + const parserLanguage = await Parser.Language.load(wasmMapping[language]); const parser = new Parser(); - const parserLanguage = await (() => { - switch (language) { - case "C": - return Parser.Language.load(treeSitterC); - case "Go": - return Parser.Language.load(treeSitterGo); - case "Python": - return Parser.Language.load(treeSitterPython); - case "C++": - return Parser.Language.load(treeSitterCpp); - } - })(); parser.setLanguage(parserLanguage); return parser; } @@ -39,29 +47,22 @@ async function initializeParser(language: Language) { export type Parsers = { [language in Language]: Parser }; export async function initializeParsers(): Promise { - return { - Go: await initializeParser("Go"), - C: await initializeParser("C"), - Python: await initializeParser("Python"), - "C++": await initializeParser("C++"), - }; + const parsers = []; + for (const language of supportedLanguages) { + parsers.push([language, await initializeParser(language)]); + } + return Object.fromEntries(parsers); } -export function getFirstFunction(tree: Parser.Tree): Parser.SyntaxNode | null { +export function getFirstFunction( + tree: Parser.Tree, + language: Language, +): Parser.SyntaxNode | null { let functionNode: Parser.SyntaxNode | null = null; const cursor = tree.walk(); - const funcTypes = [ - // Go - "function_declaration", - "method_declaration", - "func_literal", - // C, Python - "function_definition", - ]; - const visitNode = () => { - if (funcTypes.includes(cursor.nodeType)) { + if (functionNodeTypes[language].includes(cursor.nodeType)) { functionNode = cursor.currentNode; return; } @@ -94,7 +95,7 @@ export interface TestResults { export function runTest(record: TestFuncRecord): TestResults[] { const tree = parsers[record.language].parse(record.code); const testFunc: TestFunction = { - function: getFirstFunction(tree) as Parser.SyntaxNode, + function: getFirstFunction(tree, record.language) as Parser.SyntaxNode, language: record.language, name: record.name, reqs: record.reqs, @@ -127,7 +128,10 @@ export function processRecord( const { trim, simplify, verbose, flatSwitch } = options; const tree = parsers[record.language].parse(record.code); const builder = newCFGBuilder(record.language, { flatSwitch }); - const functionSyntax = getFirstFunction(tree) as Parser.SyntaxNode; + const functionSyntax = getFirstFunction( + tree, + record.language, + ) as Parser.SyntaxNode; const ast = functionSyntax.toString(); diff --git a/src/control-flow/cfg.ts b/src/control-flow/cfg.ts index 4d47341..f5a65e5 100644 --- a/src/control-flow/cfg.ts +++ b/src/control-flow/cfg.ts @@ -4,7 +4,7 @@ import { createCFGBuilder as createGoCFGBuilder } from "./cfg-go"; import { createCFGBuilder as createPythonCFGBuilder } from "./cfg-python"; import { createCFGBuilder as createCppCFGBuilder } from "./cfg-cpp"; -const supportedLanguages = ["C", "Go", "Python", "C++"] as const; +export const supportedLanguages = ["C", "Go", "Python", "C++"] as const; export type Language = (typeof supportedLanguages)[number]; export function isValidLanguage(language: string): language is Language { return (supportedLanguages as readonly string[]).includes(language); diff --git a/src/test/commentTestCollector.ts b/src/test/commentTestCollector.ts index e831fa3..048375d 100644 --- a/src/test/commentTestCollector.ts +++ b/src/test/commentTestCollector.ts @@ -5,7 +5,7 @@ import { getTestFuncs as getTestsForPython } from "./collect-python"; import { getTestFuncs as getTestsForCpp } from "./collect-cpp.ts"; import type { TestFunction } from "./commentTestTypes"; -export const testsDir = import.meta.dir + "/commentTestSamples"; +export const testsDir = `${import.meta.dir}/commentTestSamples`; const languages: { ext: string; getTestFuncs: (code: string) => Generator; From 1c008ef35468423b3f57ba0814160edf844f3993 Mon Sep 17 00:00:00 2001 From: Tamir Bahar Date: Fri, 29 Nov 2024 20:16:18 +0200 Subject: [PATCH 07/25] Start working on the C++ cfg builder --- DEVELOPMENT.md | 37 + src/control-flow/cfg-cpp.ts | 543 +- .../__snapshots__/commentTest.test.ts.snap | 14410 +++++++++------- src/test/commentTestSamples/sample.cpp | 20 + 4 files changed, 9102 insertions(+), 5908 deletions(-) diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index 330d9ee..a5a3377 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -34,5 +34,42 @@ Your builder is expected to expose a `createCFGBuilder(options: BuilderOptions): A naive implementation to get started with would look something like this: ```typescript +import type Parser from "web-tree-sitter"; +import type { BasicBlock, BuilderOptions, CFGBuilder } from "./cfg-defs"; +import { + type Context, + GenericCFGBuilder, + type StatementHandlers, +} from "./generic-cfg-builder.ts"; +export function createCFGBuilder(options: BuilderOptions): CFGBuilder { + return new GenericCFGBuilder(statementHandlers, options); +} + +const statementHandlers: StatementHandlers = { + named: {}, + default: defaultProcessStatement, +}; + +function defaultProcessStatement( + syntax: Parser.SyntaxNode, + ctx: Context, +): BasicBlock { + const newNode = ctx.builder.addNode( + "STATEMENT", + syntax.text, + syntax.startIndex, + ); + ctx.link.syntaxToNode(syntax, newNode); + return { entry: newNode, exit: newNode }; +} ``` + + +# TODO: + +- Register the new parser in a ton of places +- Create a test collector +- write tests +- Run tests +- Add the new language to the demo, and all extensions \ No newline at end of file diff --git a/src/control-flow/cfg-cpp.ts b/src/control-flow/cfg-cpp.ts index 2e77fec..1dc48c0 100644 --- a/src/control-flow/cfg-cpp.ts +++ b/src/control-flow/cfg-cpp.ts @@ -1,20 +1,481 @@ -import type Parser from "web-tree-sitter"; -import type { BasicBlock, BuilderOptions, CFGBuilder } from "./cfg-defs"; +import Parser from "web-tree-sitter"; +import { + type BasicBlock, + type BuilderOptions, + type CFGBuilder, +} from "./cfg-defs"; +import { Match } from "./block-matcher.ts"; import { - type Context, GenericCFGBuilder, + type Context, type StatementHandlers, } from "./generic-cfg-builder.ts"; +import { pairwise, zip } from "./zip.ts"; +import { buildSwitch, collectCases } from "./switch-utils.ts"; -export function createCFGBuilder(options: BuilderOptions): CFGBuilder { - return new GenericCFGBuilder(statementHandlers, options); +function getChildFieldText(node: Parser.SyntaxNode, fieldName: string): string { + const child = node.childForFieldName(fieldName); + return child ? child.text : ""; } const statementHandlers: StatementHandlers = { - named: {}, + named: { + compound_statement: processCompoundStatement, + if_statement: processIfStatement, + for_statement: processForStatement, + while_statement: processWhileStatement, + do_statement: processDoStatement, + switch_statement: processSwitchlike, + return_statement: processReturnStatement, + break_statement: processBreakStatement, + continue_statement: processContinueStatement, + labeled_statement: processLabeledStatement, + goto_statement: processGotoStatement, + comment: processComment, + }, default: defaultProcessStatement, }; +export function createCFGBuilder(options: BuilderOptions): CFGBuilder { + return new GenericCFGBuilder(statementHandlers, options); +} + +function processForStatement( + forNode: Parser.SyntaxNode, + ctx: Context, +): BasicBlock { + const queryString = ` + (for_statement + "(" @open-parens + [ + initializer: (_ ";" @init-semi)? @init + ";" @init-semi + ] + condition: (_)? @cond + ";" @cond-semi + update: (_)? @update + ")" @close-parens + body: (_) @body) @for + `; + const match = ctx.matcher.match(forNode, queryString); + + const initSyntax = match.getSyntax("init"); + const condSyntax = match.getSyntax("cond"); + const updateSyntax = match.getSyntax("update"); + const bodySyntax = match.requireSyntax("body"); + + const initBlock = match.getBlock(initSyntax); + const condBlock = match.getBlock(condSyntax); + const updateBlock = match.getBlock(updateSyntax); + const bodyBlock = match.getBlock(bodySyntax); + + const entryNode = ctx.builder.addNode( + "EMPTY", + "loop head", + forNode.startIndex, + ); + const exitNode = ctx.builder.addNode( + "FOR_EXIT", + "loop exit", + forNode.endIndex, + ); + const headNode = ctx.builder.addNode( + "LOOP_HEAD", + "loop head", + forNode.startIndex, + ); + const headBlock = { entry: headNode, exit: headNode }; + + ctx.link.syntaxToNode(forNode, entryNode); + if (condBlock) { + ctx.link.syntaxToNode(match.requireSyntax("cond-semi"), condBlock.entry); + } + + const closeParens = match.requireSyntax("close-parens"); + + if (initSyntax) + ctx.link.offsetToSyntax(initSyntax, match.requireSyntax("init-semi"), { + reverse: true, + includeTo: true, + }); + if (condSyntax) + ctx.link.offsetToSyntax(condSyntax, match.requireSyntax("cond-semi"), { + reverse: true, + includeTo: true, + }); + if (!condSyntax && initSyntax) + ctx.link.offsetToSyntax(initSyntax, match.requireSyntax("cond-semi"), { + includeTo: true, + reverse: true, + }); + if (updateSyntax) + ctx.link.offsetToSyntax(updateSyntax, closeParens, { + reverse: true, + includeTo: true, + }); + if (condSyntax && !updateSyntax) + ctx.link.offsetToSyntax(condSyntax, closeParens, { + reverse: true, + includeTo: true, + }); + ctx.link.offsetToSyntax(closeParens, bodySyntax); + + const chainBlocks = (entry: string | null, blocks: (BasicBlock | null)[]) => { + let prevExit: string | null = entry; + for (const block of blocks) { + if (!block) continue; + if (prevExit && block.entry) ctx.builder.addEdge(prevExit, block.entry); + prevExit = block.exit; + } + return prevExit; + }; + + /* + entry -> init -> cond +-> body -> head -> update -> cond + --> exit + + top = chain(entry, init,) + + if cond: + chain(top, cond) + cond +-> body + cond --> exit + chain(body, head, update, cond) + else: + chain(top, body, head, update, body) + + chain(continue, head) + chain(break, exit) + */ + const topExit = chainBlocks(entryNode, [initBlock]); + if (condBlock) { + chainBlocks(topExit, [condBlock]); + if (condBlock.exit) { + ctx.builder.addEdge(condBlock.exit, bodyBlock.entry, "consequence"); + ctx.builder.addEdge(condBlock.exit, exitNode, "alternative"); + chainBlocks(bodyBlock.exit ?? null, [headBlock, updateBlock, condBlock]); + } + } else { + chainBlocks(topExit, [bodyBlock, headBlock, updateBlock, bodyBlock]); + } + + ctx.matcher.state.forEachContinue((continueNode) => { + ctx.builder.addEdge(continueNode, headNode); + }); + + ctx.matcher.state.forEachBreak((breakNode) => { + ctx.builder.addEdge(breakNode, exitNode); + }); + + return ctx.matcher.update({ entry: entryNode, exit: exitNode }); +} + +function processIfStatement( + ifSyntax: Parser.SyntaxNode, + ctx: Context, +): BasicBlock { + const queryString = ` + (if_statement + condition: (_ ")" @closing-paren) @cond + consequence: (_ "}"? @closing-brace) @then + alternative: ( + else_clause ([ + (if_statement) @else-if + (compound_statement) @else-body + ]) + )? @else + )@if + `; + + const getIfs = (currentSyntax: Parser.SyntaxNode): Match[] => { + const match = ctx.matcher.tryMatch(currentSyntax, queryString); + if (!match) return []; + const elseifSyntax = match.getSyntax("else-if"); + if (!elseifSyntax) return [match]; + return [match, ...getIfs(elseifSyntax)]; + }; + const allIfs = getIfs(ifSyntax); + const blocks = allIfs.map((ifMatch) => ({ + condBlock: ifMatch.getBlock(ifMatch.requireSyntax("cond")), + thenBlock: ifMatch.getBlock(ifMatch.requireSyntax("then")), + elseBlock: ifMatch.getBlock(ifMatch.getSyntax("else-body")), + })); + + for (const [ifMatch, { condBlock }] of zip(allIfs, blocks)) { + ctx.link.syntaxToNode(ifMatch.requireSyntax("if"), condBlock.entry); + ctx.link.offsetToSyntax( + ifMatch.requireSyntax("closing-paren"), + ifMatch.requireSyntax("then"), + ); + } + for (const [prevIf, thisIf] of pairwise(allIfs)) { + ctx.link.offsetToSyntax( + prevIf.requireSyntax("closing-brace"), + thisIf.requireSyntax("if"), + ); + } + + const headNode = ctx.builder.addNode( + "CONDITION", + "if-else head", + ifSyntax.startIndex, + ); + const mergeNode = ctx.builder.addNode( + "MERGE", + "if-else merge", + ifSyntax.endIndex, + ); + + // An ugly hack to make tsc not hate us. + const firstBlock = blocks[0]; + if (firstBlock?.condBlock.entry) + ctx.builder.addEdge(headNode, firstBlock.condBlock.entry); + + let previous: string | null | undefined = null; + for (const { condBlock, thenBlock } of blocks) { + if (previous && condBlock.entry) { + ctx.builder.addEdge(previous, condBlock.entry, "alternative"); + } + if (condBlock.exit && thenBlock.entry) { + ctx.builder.addEdge(condBlock.exit, thenBlock.entry, "consequence"); + } + if (thenBlock.exit) { + ctx.builder.addEdge(thenBlock.exit, mergeNode); + } + + previous = condBlock.exit; + } + + function last(items: T[]): T | undefined { + return items[items.length - 1]; + } + + const elseBlock = last(blocks)?.elseBlock; + if (elseBlock) { + const lastMatch = last(allIfs) as Match; + const elseSyntax = lastMatch.requireSyntax("else"); + ctx.link.syntaxToNode(elseSyntax, elseBlock.entry); + ctx.link.offsetToSyntax( + lastMatch.requireSyntax("closing-brace"), + elseSyntax, + ); + + if (previous && elseBlock.entry) { + ctx.builder.addEdge(previous, elseBlock.entry, "alternative"); + } + if (elseBlock.exit) ctx.builder.addEdge(elseBlock.exit, mergeNode); + } else if (previous) { + ctx.builder.addEdge(previous, mergeNode, "alternative"); + } + return ctx.state.update({ entry: headNode, exit: mergeNode }); +} + +function processWhileStatement( + whileSyntax: Parser.SyntaxNode, + ctx: Context, +): BasicBlock { + const queryString = ` + (while_statement + condition: (_) @cond + body: (_) @body + ) @while + `; + const match = ctx.matcher.match(whileSyntax, queryString); + + const condSyntax = match.requireSyntax("cond"); + const bodySyntax = match.requireSyntax("body"); + + const condBlock = match.getBlock(condSyntax); + const bodyBlock = match.getBlock(bodySyntax); + + const exitNode = ctx.builder.addNode( + "FOR_EXIT", + "loop exit", + whileSyntax.endIndex, + ); + + if (condBlock.exit) { + if (bodyBlock.entry) + ctx.builder.addEdge(condBlock.exit, bodyBlock.entry, "consequence"); + ctx.builder.addEdge(condBlock.exit, exitNode, "alternative"); + } + if (condBlock.entry && bodyBlock.exit) + ctx.builder.addEdge(bodyBlock.exit, condBlock.entry); + + ctx.matcher.state.forEachContinue((continueNode) => { + if (condBlock.entry) ctx.builder.addEdge(continueNode, condBlock.entry); + }); + + ctx.matcher.state.forEachBreak((breakNode) => { + ctx.builder.addEdge(breakNode, exitNode); + }); + + ctx.link.syntaxToNode(bodySyntax, bodyBlock.entry); + ctx.link.syntaxToNode(condSyntax, condBlock.entry); + ctx.link.syntaxToNode(whileSyntax, condBlock.entry); + + return ctx.matcher.update({ entry: condBlock.entry, exit: exitNode }); +} + +function processDoStatement( + doSyntax: Parser.SyntaxNode, + ctx: Context, +): BasicBlock { + const queryString = ` + (do_statement + body: (_) @body + condition: (_) @cond + ) @do + `; + + const match = ctx.matcher.match(doSyntax, queryString); + + const condSyntax = match.requireSyntax("cond"); + const bodySyntax = match.requireSyntax("body"); + + const condBlock = match.getBlock(condSyntax); + const bodyBlock = match.getBlock(bodySyntax); + + const exitNode = ctx.builder.addNode( + "FOR_EXIT", + "loop exit", + doSyntax.endIndex, + ); + + if (condBlock.exit) { + if (bodyBlock.entry) + ctx.builder.addEdge(condBlock.exit, bodyBlock.entry, "consequence"); + ctx.builder.addEdge(condBlock.exit, exitNode, "alternative"); + } + if (condBlock.entry && bodyBlock.exit) + ctx.builder.addEdge(bodyBlock.exit, condBlock.entry); + + ctx.matcher.state.forEachContinue((continueNode) => { + if (condBlock.entry) ctx.builder.addEdge(continueNode, condBlock.entry); + }); + + ctx.matcher.state.forEachBreak((breakNode) => { + ctx.builder.addEdge(breakNode, exitNode); + }); + + ctx.link.syntaxToNode(bodySyntax, bodyBlock.entry); + ctx.link.syntaxToNode(condSyntax, condBlock.entry); + ctx.link.syntaxToNode(doSyntax, bodyBlock.entry); + + return ctx.matcher.update({ entry: bodyBlock.entry, exit: exitNode }); +} + +function processGotoStatement( + gotoSyntax: Parser.SyntaxNode, + ctx: Context, +): BasicBlock { + const name = gotoSyntax.firstNamedChild?.text as string; + const gotoNode = ctx.builder.addNode("GOTO", name, gotoSyntax.startIndex); + ctx.link.syntaxToNode(gotoSyntax, gotoNode); + return { + entry: gotoNode, + exit: null, + gotos: [{ node: gotoNode, label: name }], + }; +} + +function processLabeledStatement( + labelSyntax: Parser.SyntaxNode, + ctx: Context, +): BasicBlock { + const name = getChildFieldText(labelSyntax, "label"); + const labelNode = ctx.builder.addNode("LABEL", name, labelSyntax.startIndex); + ctx.link.syntaxToNode(labelSyntax, labelNode); + const labelContentSyntax = labelSyntax.namedChildren[1]; + if (labelContentSyntax) { + const { entry: labeledEntry, exit: labeledExit } = ctx.state.update( + ctx.dispatch.single(labelContentSyntax), + ); + if (labeledEntry) ctx.builder.addEdge(labelNode, labeledEntry); + return ctx.state.update({ + entry: labelNode, + exit: labeledExit, + labels: new Map([[name, labelNode]]), + }); + } else { + // C allows for empty labels. + return ctx.state.update({ + entry: labelNode, + exit: labelNode, + labels: new Map([[name, labelNode]]), + }); + } +} + +function processContinueStatement( + continueSyntax: Parser.SyntaxNode, + ctx: Context, +): BasicBlock { + const continueNode = ctx.builder.addNode( + "CONTINUE", + "CONTINUE", + continueSyntax.startIndex, + ); + ctx.link.syntaxToNode(continueSyntax, continueNode); + return { entry: continueNode, exit: null, continues: [continueNode] }; +} + +function processBreakStatement( + breakSyntax: Parser.SyntaxNode, + ctx: Context, +): BasicBlock { + const breakNode = ctx.builder.addNode( + "BREAK", + "BREAK", + breakSyntax.startIndex, + ); + ctx.link.syntaxToNode(breakSyntax, breakNode); + return { entry: breakNode, exit: null, breaks: [breakNode] }; +} + +function processComment( + commentSyntax: Parser.SyntaxNode, + ctx: Context, +): BasicBlock { + // We only ever ger here when marker comments are enabled, + // and only for marker comments as the rest are filtered out. + const commentNode = ctx.builder.addNode( + "MARKER_COMMENT", + commentSyntax.text, + commentSyntax.startIndex, + ); + ctx.link.syntaxToNode(commentSyntax, commentNode); + + if (ctx.options.markerPattern) { + const marker = commentSyntax.text.match(ctx.options.markerPattern)?.[1]; + if (marker) ctx.builder.addMarker(commentNode, marker); + } + return { entry: commentNode, exit: commentNode }; +} + +function processCompoundStatement( + syntax: Parser.SyntaxNode, + ctx: Context, +): BasicBlock { + const blockBlock = ctx.dispatch.many(syntax.namedChildren); + ctx.builder.setDefault(blockBlock.entry, { startOffset: syntax.startIndex }); + ctx.link.syntaxToNode(syntax, blockBlock.entry); + return blockBlock; +} + +function processReturnStatement( + syntax: Parser.SyntaxNode, + ctx: Context, +): BasicBlock { + const returnNode = ctx.builder.addNode( + "RETURN", + syntax.text, + syntax.startIndex, + ); + ctx.link.syntaxToNode(syntax, returnNode); + return { entry: returnNode, exit: null }; +} + function defaultProcessStatement( syntax: Parser.SyntaxNode, ctx: Context, @@ -27,3 +488,73 @@ function defaultProcessStatement( ctx.link.syntaxToNode(syntax, newNode); return { entry: newNode, exit: newNode }; } + +const caseTypes = ["case_statement"]; + +function getCases(switchSyntax: Parser.SyntaxNode): Parser.SyntaxNode[] { + const switchBody = switchSyntax.namedChildren[1] as Parser.SyntaxNode; + return switchBody.namedChildren.filter((child) => + caseTypes.includes(child.type), + ); +} + +function parseCase(caseSyntax: Parser.SyntaxNode): { + isDefault: boolean; + consequence: Parser.SyntaxNode[]; + hasFallthrough: boolean; +} { + const isDefault = !caseSyntax.childForFieldName("value"); + const consequence = caseSyntax.namedChildren.slice(isDefault ? 0 : 1); + const hasFallthrough = true; + return { isDefault, consequence, hasFallthrough }; +} + +function processSwitchlike( + switchSyntax: Parser.SyntaxNode, + ctx: Context, +): BasicBlock { + const blockHandler = ctx.matcher.state; + + const cases = collectCases(switchSyntax, ctx, { getCases, parseCase }); + const headNode = ctx.builder.addNode( + "SWITCH_CONDITION", + getChildFieldText(switchSyntax, "value"), + switchSyntax.startIndex, + ); + ctx.link.syntaxToNode(switchSyntax, headNode); + const mergeNode: string = ctx.builder.addNode( + "SWITCH_MERGE", + "", + switchSyntax.endIndex, + ); + buildSwitch(cases, mergeNode, headNode, {}, ctx); + + blockHandler.forEachBreak((breakNode) => { + ctx.builder.addEdge(breakNode, mergeNode); + }); + + const braceMatch = ctx.matcher.match( + switchSyntax, + ` + (switch_statement + body: (compound_statement "{" @opening-brace "}" @closing-brace) + ) @switch + `, + ); + const openingBrace = braceMatch.requireSyntax("opening-brace"); + const closingBrace = braceMatch.requireSyntax("closing-brace"); + const caseSyntaxMany = getCases(switchSyntax); + const firstCase = caseSyntaxMany[0]; + if (firstCase) { + ctx.link.offsetToSyntax(openingBrace, firstCase); + } + const lastCase = caseSyntaxMany[caseSyntaxMany.length - 1]; + if (lastCase) { + ctx.link.offsetToSyntax(lastCase, closingBrace, { + reverse: true, + includeTo: true, + }); + } + + return blockHandler.update({ entry: headNode, exit: mergeNode }); +} diff --git a/src/test/__snapshots__/commentTest.test.ts.snap b/src/test/__snapshots__/commentTest.test.ts.snap index d968319..cd88b9c 100644 --- a/src/test/__snapshots__/commentTest.test.ts.snap +++ b/src/test/__snapshots__/commentTest.test.ts.snap @@ -1561,7 +1561,7 @@ class="alternative"; }" `; -exports[`Go: trivial: DOT Snapshot 1`] = ` +exports[`C++: trivial: DOT Snapshot 1`] = ` "digraph "" { node [shape=box, color="#000000"]; edge [headport=n tailport=s] @@ -1578,7 +1578,7 @@ height=0.8999999999999999; }" `; -exports[`Go: ifThen: DOT Snapshot 1`] = ` +exports[`C++: simpleIf: DOT Snapshot 1`] = ` "digraph "" { node [shape=box, color="#000000"]; edge [headport=n tailport=s] @@ -1589,40 +1589,40 @@ id="node1"; shape="invhouse"; class="entry"; fillcolor="#48AB30"; -height=0.6; +height=0.8999999999999999; ]; - node3 [style="filled"; + node2 [style="filled"; label=""; -id="node3"; +id="node2"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node4 [style="filled"; + node5 [style="filled"; label=""; -id="node4"; +id="node5"; shape="house"; class="exit"; fillcolor="#AB3030"; height=0.6; ]; - node1 -> node3 [penwidth=1; + node1 -> node2 [penwidth=1; color="#008000"; class="consequence"; ]; - node3 -> node4 [penwidth=1; + node2 -> node5 [penwidth=1; color="#0000ff"; class="regular"; ]; - node1 -> node4 [penwidth=1; + node1 -> node5 [penwidth=1; color="#ff0000"; class="alternative"; ]; }" `; -exports[`Go: ManyIfStatements: DOT Snapshot 1`] = ` +exports[`C++: ifElse: DOT Snapshot 1`] = ` "digraph "" { node [shape=box, color="#000000"]; edge [headport=n tailport=s] @@ -1633,7 +1633,15 @@ id="node1"; shape="invhouse"; class="entry"; fillcolor="#48AB30"; -height=0.6; +height=0.8999999999999999; +]; + node2 [style="filled"; +label=""; +id="node2"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; ]; node3 [style="filled"; label=""; @@ -1657,152 +1665,118 @@ id="node5"; shape="box"; class="default"; fillcolor="#d3d3d3"; -height=0.6; -]; - node7 [style="filled"; -label=""; -id="node7"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; height=0.3; ]; node8 [style="filled"; label=""; id="node8"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -height=0.3; -]; - node9 [style="filled"; -label=""; -id="node9"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -height=0.3; -]; - node10 [style="filled"; -label=""; -id="node10"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -height=0.6; -]; - node12 [style="filled"; -label=""; -id="node12"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -height=0.3; -]; - node13 [style="filled"; -label=""; -id="node13"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -height=0.3; -]; - node14 [style="filled"; -label=""; -id="node14"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -height=0.3; -]; - node15 [style="filled"; -label=""; -id="node15"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -height=0.3; -]; - node16 [style="filled"; -label=""; -id="node16"; shape="house"; class="exit"; fillcolor="#AB3030"; height=0.6; ]; - node1 -> node3 [penwidth=1; -color="#008000"; -class="consequence"; -]; - node1 -> node4 [penwidth=1; -color="#ff0000"; -class="alternative"; -]; - node5 -> node7 [penwidth=1; -color="#008000"; -class="consequence"; -]; - node8 -> node9 [penwidth=1; + node1 -> node2 [penwidth=1; color="#008000"; class="consequence"; ]; - node5 -> node8 [penwidth=1; + node1 -> node3 [penwidth=1; color="#ff0000"; class="alternative"; ]; - node10 -> node12 [penwidth=1; -color="#008000"; -class="consequence"; -]; - node13 -> node14 [penwidth=1; + node3 -> node4 [penwidth=1; color="#008000"; class="consequence"; ]; - node13 -> node15 [penwidth=1; -color="#ff0000"; -class="alternative"; -]; - node10 -> node13 [penwidth=1; + node3 -> node5 [penwidth=1; color="#ff0000"; class="alternative"; ]; - node3 -> node5 [penwidth=1; + node2 -> node8 [penwidth=1; color="#0000ff"; class="regular"; ]; - node4 -> node5 [penwidth=1; + node4 -> node8 [penwidth=1; color="#0000ff"; class="regular"; ]; - node7 -> node10 [penwidth=1; + node5 -> node8 [penwidth=1; color="#0000ff"; class="regular"; ]; - node9 -> node10 [penwidth=1; +}" +`; + +exports[`C++: forever: DOT Snapshot 1`] = ` +"digraph "" { + node [shape=box, color="#000000"]; + edge [headport=n tailport=s] + bgcolor="#ffffff" + node2 [style="filled"; +label=""; +id="node2"; +shape="invhouse"; +class="entry"; +fillcolor="#48AB30"; +height=0.6; +]; + node4 [style="filled"; +label=""; +id="node4"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.6; +]; + node2 -> node4 [penwidth=1; color="#0000ff"; class="regular"; ]; - node8 -> node10 [penwidth=1; -color="#ff0000"; -class="alternative"; -]; - node12 -> node16 [penwidth=1; + node4 -> node4 [penwidth=2; color="#0000ff"; class="regular"; +dir="back"; +headport="s"; +tailport="n"; ]; - node14 -> node16 [penwidth=1; +}" +`; + +exports[`C++: forever2: DOT Snapshot 1`] = ` +"digraph "" { + node [shape=box, color="#000000"]; + edge [headport=n tailport=s] + bgcolor="#ffffff" + node1 [style="filled"; +label=""; +id="node1"; +shape="invhouse"; +class="entry"; +fillcolor="#48AB30"; +height=0.8999999999999999; +]; + node2 [style="filled"; +label=""; +id="node2"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.8999999999999999; +]; + node1 -> node2 [penwidth=1; color="#0000ff"; class="regular"; ]; - node15 -> node16 [penwidth=1; + node2 -> node2 [penwidth=2; color="#0000ff"; class="regular"; +dir="back"; +headport="s"; +tailport="n"; ]; }" `; -exports[`Go: Switch: DOT Snapshot 1`] = ` +exports[`C++: forLoop: DOT Snapshot 1`] = ` "digraph "" { node [shape=box, color="#000000"]; edge [headport=n tailport=s] @@ -1822,6 +1796,14 @@ shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; +]; + node8 [style="filled"; +label=""; +id="node8"; +shape="house"; +class="exit"; +fillcolor="#AB3030"; +height=0.6; ]; node3 [style="filled"; label=""; @@ -1829,119 +1811,148 @@ id="node3"; shape="box"; class="default"; fillcolor="#d3d3d3"; -height=0.3; +height=0.8999999999999999; ]; - node4 [style="filled"; + node1 -> node2 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node2 -> node3 [penwidth=2; +color="#0000ff"; +class="regular"; +dir="back"; +headport="s"; +tailport="n"; +]; + node2 -> node8 [penwidth=1; +color="#ff0000"; +class="alternative"; +]; + node2 -> node3 [penwidth=1; +color="#008000"; +class="consequence"; +]; +}" +`; + +exports[`C++: whileLoop: DOT Snapshot 1`] = ` +"digraph "" { + node [shape=box, color="#000000"]; + edge [headport=n tailport=s] + bgcolor="#ffffff" + node0 [style="filled"; label=""; -id="node4"; +id="node0"; +shape="invhouse"; +class="entry"; +fillcolor="#48AB30"; +height=0.5; +]; + node1 [style="filled"; +label=""; +id="node1"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node5 [style="filled"; + node2 [style="filled"; label=""; -id="node5"; +id="node2"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node11 [style="filled"; + node4 [style="filled"; label=""; -id="node11"; +id="node4"; shape="house"; class="exit"; fillcolor="#AB3030"; height=0.6; -]; - node6 [style="filled"; -label=""; -id="node6"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -height=0.3; -]; - node7 [style="filled"; -label=""; -id="node7"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -height=0.3; -]; - node8 [style="filled"; -label=""; -id="node8"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -height=0.3; ]; node1 -> node2 [penwidth=1; color="#008000"; class="consequence"; ]; - node1 -> node3 [penwidth=1; -color="#ff0000"; -class="alternative"; + node1 -> node2 [penwidth=2; +color="#0000ff"; +class="regular"; +dir="back"; +headport="s"; +tailport="n"; ]; - node3 -> node4 [penwidth=1; -color="#008000"; -class="consequence"; + node0 -> node1 [penwidth=1; +color="#0000ff"; +class="regular"; ]; - node3 -> node5 [penwidth=1; + node1 -> node4 [penwidth=1; color="#ff0000"; class="alternative"; ]; - node5 -> node6 [penwidth=1; -color="#008000"; -class="consequence"; +}" +`; + +exports[`C++: doWhile: DOT Snapshot 1`] = ` +"digraph "" { + node [shape=box, color="#000000"]; + edge [headport=n tailport=s] + bgcolor="#ffffff" + node0 [style="filled"; +label=""; +id="node0"; +shape="invhouse"; +class="entry"; +fillcolor="#48AB30"; +height=0.5; ]; - node5 -> node7 [penwidth=1; -color="#ff0000"; -class="alternative"; + node1 [style="filled"; +label=""; +id="node1"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.6; ]; - node7 -> node8 [penwidth=1; + node4 [style="filled"; +label=""; +id="node4"; +shape="house"; +class="exit"; +fillcolor="#AB3030"; +height=0.6; +]; + node1 -> node1 [penwidth=2; color="#008000"; class="consequence"; +dir="back"; +headport="s"; +tailport="n"; ]; - node2 -> node11 [penwidth=1; -color="#0000ff"; -class="regular"; -]; - node4 -> node11 [penwidth=1; -color="#0000ff"; -class="regular"; -]; - node6 -> node11 [penwidth=1; -color="#0000ff"; -class="regular"; -]; - node8 -> node11 [penwidth=1; + node0 -> node1 [penwidth=1; color="#0000ff"; class="regular"; ]; - node7 -> node11 [penwidth=1; + node1 -> node4 [penwidth=1; color="#ff0000"; class="alternative"; ]; }" `; -exports[`Go: switchAndLabelsAndGoto: DOT Snapshot 1`] = ` +exports[`C++: gotoA: DOT Snapshot 1`] = ` "digraph "" { node [shape=box, color="#000000"]; edge [headport=n tailport=s] bgcolor="#ffffff" - node1 [style="filled"; + node0 [style="filled"; label=""; -id="node1"; +id="node0"; shape="invhouse"; class="entry"; fillcolor="#48AB30"; -height=0.8999999999999999; +height=0.5; ]; node2 [style="filled"; label=""; @@ -1949,7 +1960,7 @@ id="node2"; shape="box"; class="default"; fillcolor="#d3d3d3"; -height=0.3; +height=0.8999999999999999; ]; node3 [style="filled"; label=""; @@ -1959,73 +1970,92 @@ class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node5 [style="filled"; -label=""; -id="node5"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -height=0.3; -]; - node11 [style="filled"; + node6 [style="filled"; label=""; -id="node11"; +id="node6"; shape="house"; class="exit"; fillcolor="#AB3030"; height=0.6; ]; - node6 [style="filled"; + node2 -> node3 [penwidth=1; +color="#008000"; +class="consequence"; +]; + node2 -> node3 [penwidth=2; +color="#0000ff"; +class="regular"; +dir="back"; +headport="s"; +tailport="n"; +]; + node0 -> node2 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node2 -> node6 [penwidth=1; +color="#ff0000"; +class="alternative"; +]; +}" +`; + +exports[`C++: switch_1: DOT Snapshot 1`] = ` +"digraph "" { + node [shape=box, color="#000000"]; + edge [headport=n tailport=s] + bgcolor="#ffffff" + node1 [style="filled"; label=""; -id="node6"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -height=0.3; +id="node1"; +shape="invhouse"; +class="entry"; +fillcolor="#48AB30"; +height=0.8999999999999999; ]; - node7 [style="filled"; + node2 [style="filled"; label=""; -id="node7"; +id="node2"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node13 [style="filled"; + node3 [style="filled"; label=""; -id="node13"; +id="node3"; shape="box"; class="default"; fillcolor="#d3d3d3"; -height=0.8999999999999999; +height=0.3; ]; - node8 [style="filled"; + node4 [style="filled"; label=""; -id="node8"; +id="node4"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node15 [style="filled"; + node5 [style="filled"; label=""; -id="node15"; +id="node5"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node16 [style="filled"; + node6 [style="filled"; label=""; -id="node16"; +id="node6"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node17 [style="filled"; + node9 [style="filled"; label=""; -id="node17"; +id="node9"; shape="house"; class="exit"; fillcolor="#AB3030"; @@ -2035,83 +2065,42 @@ height=0.6; color="#008000"; class="consequence"; ]; - node1 -> node3 [penwidth=1; -color="#ff0000"; -class="alternative"; -]; - node3 -> node5 [penwidth=1; -color="#ff0000"; -class="alternative"; -]; - node5 -> node6 [penwidth=1; -color="#008000"; -class="consequence"; + node2 -> node4 [penwidth=1; +color="#0000ff"; +class="regular"; ]; - node5 -> node7 [penwidth=1; + node1 -> node3 [penwidth=1; color="#ff0000"; class="alternative"; ]; - node7 -> node8 [penwidth=1; -color="#008000"; -class="consequence"; -]; - node13 -> node15 [penwidth=1; + node3 -> node4 [penwidth=1; color="#008000"; class="consequence"; ]; - node13 -> node16 [penwidth=1; -color="#ff0000"; -class="alternative"; -]; - node2 -> node11 [penwidth=1; -color="#0000ff"; -class="regular"; -]; - node6 -> node11 [penwidth=1; -color="#0000ff"; -class="regular"; -]; - node8 -> node11 [penwidth=1; + node4 -> node6 [penwidth=1; color="#0000ff"; class="regular"; ]; - node7 -> node11 [penwidth=1; + node3 -> node5 [penwidth=1; color="#ff0000"; class="alternative"; ]; - node3 -> node13 [penwidth=1; + node5 -> node6 [penwidth=1; color="#008000"; class="consequence"; ]; - node15 -> node17 [penwidth=1; -color="#0000ff"; -class="regular"; + node5 -> node9 [penwidth=1; +color="#ff0000"; +class="alternative"; ]; - node16 -> node17 [penwidth=1; + node6 -> node9 [penwidth=1; color="#0000ff"; class="regular"; ]; }" `; -exports[`Go: trivialReachability: DOT Snapshot 1`] = ` -"digraph "" { - node [shape=box, color="#000000"]; - edge [headport=n tailport=s] - bgcolor="#ffffff" - node2 [style="filled"; -label=""; -id="node2"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -minHeight=0.5; -height=0.8999999999999999; -]; -}" -`; - -exports[`Go: hasFallthrough: DOT Snapshot 1`] = ` +exports[`C++: switch_2: DOT Snapshot 1`] = ` "digraph "" { node [shape=box, color="#000000"]; edge [headport=n tailport=s] @@ -2148,21 +2137,33 @@ class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node7 [style="filled"; + node5 [style="filled"; label=""; -id="node7"; -shape="house"; -class="exit"; +id="node5"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node9 [style="filled"; +label=""; +id="node9"; +shape="house"; +class="exit"; fillcolor="#AB3030"; height=0.6; +]; + node6 [style="filled"; +label=""; +id="node6"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; ]; node1 -> node2 [penwidth=1; color="#008000"; class="consequence"; -]; - node2 -> node4 [penwidth=1; -color="#0000ff"; -class="regular"; ]; node1 -> node3 [penwidth=1; color="#ff0000"; @@ -2172,269 +2173,153 @@ class="alternative"; color="#008000"; class="consequence"; ]; - node4 -> node7 [penwidth=1; + node4 -> node6 [penwidth=1; color="#0000ff"; class="regular"; ]; - node3 -> node7 [penwidth=1; + node3 -> node5 [penwidth=1; color="#ff0000"; class="alternative"; ]; -}" -`; - -exports[`Go: forever: DOT Snapshot 1`] = ` -"digraph "" { - node [shape=box, color="#000000"]; - edge [headport=n tailport=s] - bgcolor="#ffffff" - node0 [style="filled"; -label=""; -id="node0"; -shape="invhouse"; -class="entry"; -fillcolor="#48AB30"; -height=0.5; + node5 -> node6 [penwidth=1; +color="#008000"; +class="consequence"; ]; - node2 [style="filled"; -label=""; -id="node2"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -height=0.6; + node5 -> node9 [penwidth=1; +color="#ff0000"; +class="alternative"; ]; - node2 -> node2 [penwidth=2; + node6 -> node9 [penwidth=1; color="#0000ff"; class="regular"; -dir="back"; -headport="s"; -tailport="n"; ]; - node0 -> node2 [penwidth=1; + node2 -> node9 [penwidth=1; color="#0000ff"; class="regular"; ]; }" `; -exports[`Go: forCond: DOT Snapshot 1`] = ` +exports[`C++: ManyIfs: DOT Snapshot 1`] = ` "digraph "" { node [shape=box, color="#000000"]; edge [headport=n tailport=s] bgcolor="#ffffff" - node0 [style="filled"; + node1 [style="filled"; label=""; -id="node0"; +id="node1"; shape="invhouse"; class="entry"; fillcolor="#48AB30"; -height=0.5; +height=0.8999999999999999; ]; - node1 [style="filled"; + node2 [style="filled"; label=""; -id="node1"; +id="node2"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node2 [style="filled"; + node5 [style="filled"; label=""; -id="node2"; +id="node5"; shape="box"; class="default"; fillcolor="#d3d3d3"; -height=0.3; -]; - node4 [style="filled"; -label=""; -id="node4"; -shape="house"; -class="exit"; -fillcolor="#AB3030"; -height=0.6; -]; - node1 -> node2 [penwidth=1; -color="#008000"; -class="consequence"; -]; - node1 -> node2 [penwidth=2; -color="#0000ff"; -class="regular"; -dir="back"; -headport="s"; -tailport="n"; -]; - node0 -> node1 [penwidth=1; -color="#0000ff"; -class="regular"; -]; - node1 -> node4 [penwidth=1; -color="#ff0000"; -class="alternative"; -]; -}" -`; - -exports[`Go: forCStyle: DOT Snapshot 1`] = ` -"digraph "" { - node [shape=box, color="#000000"]; - edge [headport=n tailport=s] - bgcolor="#ffffff" - node0 [style="filled"; -label=""; -id="node0"; -shape="invhouse"; -class="entry"; -fillcolor="#48AB30"; -height=0.5; +height=0.8999999999999999; ]; - node1 [style="filled"; + node6 [style="filled"; label=""; -id="node1"; +id="node6"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node2 [style="filled"; + node7 [style="filled"; label=""; -id="node2"; +id="node7"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node4 [style="filled"; + node10 [style="filled"; label=""; -id="node4"; -shape="house"; -class="exit"; -fillcolor="#AB3030"; -height=0.6; -]; - node1 -> node2 [penwidth=1; -color="#008000"; -class="consequence"; -]; - node1 -> node2 [penwidth=2; -color="#0000ff"; -class="regular"; -dir="back"; -headport="s"; -tailport="n"; -]; - node0 -> node1 [penwidth=1; -color="#0000ff"; -class="regular"; -]; - node1 -> node4 [penwidth=1; -color="#ff0000"; -class="alternative"; +id="node10"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.8999999999999999; ]; -}" -`; - -exports[`Go: forRange: DOT Snapshot 1`] = ` -"digraph "" { - node [shape=box, color="#000000"]; - edge [headport=n tailport=s] - bgcolor="#ffffff" - node0 [style="filled"; + node11 [style="filled"; label=""; -id="node0"; -shape="invhouse"; -class="entry"; -fillcolor="#48AB30"; -height=0.5; +id="node11"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; ]; - node1 [style="filled"; + node12 [style="filled"; label=""; -id="node1"; +id="node12"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node2 [style="filled"; + node13 [style="filled"; label=""; -id="node2"; +id="node13"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node4 [style="filled"; + node16 [style="filled"; label=""; -id="node4"; -shape="house"; -class="exit"; -fillcolor="#AB3030"; -height=0.6; -]; - node1 -> node2 [penwidth=1; -color="#008000"; -class="consequence"; -]; - node1 -> node2 [penwidth=2; -color="#0000ff"; -class="regular"; -dir="back"; -headport="s"; -tailport="n"; -]; - node0 -> node1 [penwidth=1; -color="#0000ff"; -class="regular"; -]; - node1 -> node4 [penwidth=1; -color="#ff0000"; -class="alternative"; +id="node16"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.8999999999999999; ]; -}" -`; - -exports[`Go: typeSwitch: DOT Snapshot 1`] = ` -"digraph "" { - node [shape=box, color="#000000"]; - edge [headport=n tailport=s] - bgcolor="#ffffff" - node1 [style="filled"; + node17 [style="filled"; label=""; -id="node1"; -shape="invhouse"; -class="entry"; -fillcolor="#48AB30"; -height=0.8999999999999999; +id="node17"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; ]; - node2 [style="filled"; + node18 [style="filled"; label=""; -id="node2"; +id="node18"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node3 [style="filled"; + node19 [style="filled"; label=""; -id="node3"; +id="node19"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node4 [style="filled"; + node20 [style="filled"; label=""; -id="node4"; +id="node20"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node7 [style="filled"; + node23 [style="filled"; label=""; -id="node7"; +id="node23"; shape="house"; class="exit"; fillcolor="#AB3030"; @@ -2444,226 +2329,203 @@ height=0.6; color="#008000"; class="consequence"; ]; - node1 -> node3 [penwidth=1; + node5 -> node6 [penwidth=1; +color="#008000"; +class="consequence"; +]; + node5 -> node7 [penwidth=1; color="#ff0000"; class="alternative"; ]; - node3 -> node4 [penwidth=1; + node10 -> node11 [penwidth=1; color="#008000"; class="consequence"; ]; - node2 -> node7 [penwidth=1; -color="#0000ff"; -class="regular"; + node10 -> node12 [penwidth=1; +color="#ff0000"; +class="alternative"; ]; - node4 -> node7 [penwidth=1; + node12 -> node13 [penwidth=1; +color="#008000"; +class="consequence"; +]; + node16 -> node17 [penwidth=1; +color="#008000"; +class="consequence"; +]; + node16 -> node18 [penwidth=1; +color="#ff0000"; +class="alternative"; +]; + node18 -> node19 [penwidth=1; +color="#008000"; +class="consequence"; +]; + node18 -> node20 [penwidth=1; +color="#ff0000"; +class="alternative"; +]; + node2 -> node5 [penwidth=1; color="#0000ff"; class="regular"; ]; - node3 -> node7 [penwidth=1; + node1 -> node5 [penwidth=1; color="#ff0000"; class="alternative"; ]; -}" -`; - -exports[`Go: Select: DOT Snapshot 1`] = ` -"digraph "" { - node [shape=box, color="#000000"]; - edge [headport=n tailport=s] - bgcolor="#ffffff" - node2 [style="filled"; -label=""; -id="node2"; -shape="invhouse"; -class="entry"; -fillcolor="#48AB30"; -height=1.2; + node6 -> node10 [penwidth=1; +color="#0000ff"; +class="regular"; ]; - node9 [style="filled"; -label=""; -id="node9"; -shape="house"; -class="exit"; -fillcolor="#AB3030"; -height=0.8999999999999999; + node7 -> node10 [penwidth=1; +color="#0000ff"; +class="regular"; ]; - node6 [style="filled"; -label=""; -id="node6"; -shape="house"; -class="exit"; -fillcolor="#AB3030"; -height=0.8999999999999999; + node11 -> node16 [penwidth=1; +color="#0000ff"; +class="regular"; ]; - node2 -> node6 [penwidth=1; + node13 -> node16 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node12 -> node16 [penwidth=1; color="#ff0000"; class="alternative"; ]; - node2 -> node9 [penwidth=1; -color="#008000"; -class="consequence"; + node17 -> node23 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node19 -> node23 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node20 -> node23 [penwidth=1; +color="#0000ff"; +class="regular"; ]; }" `; -exports[`Go: Select2: DOT Snapshot 1`] = ` +exports[`C++: IfWithoutBraces: DOT Snapshot 1`] = ` "digraph "" { node [shape=box, color="#000000"]; edge [headport=n tailport=s] bgcolor="#ffffff" - node2 [style="filled"; + node5 [style="filled"; label=""; -id="node2"; +id="node5"; shape="invhouse"; class="entry"; fillcolor="#48AB30"; -height=1.2; +height=0.6; ]; - node3 [style="filled"; + node1 [style="filled"; label=""; -id="node3"; +id="node1"; shape="box"; class="default"; fillcolor="#d3d3d3"; -height=0.3; +height=0.6; ]; - node4 [style="filled"; + node7 [style="filled"; label=""; -id="node4"; +id="node7"; shape="box"; class="default"; fillcolor="#d3d3d3"; -height=0.3; -]; - node11 [style="filled"; -label=""; -id="node11"; -shape="house"; -class="exit"; -fillcolor="#AB3030"; -height=0.6; -]; - node6 [style="filled"; -label=""; -id="node6"; -shape="house"; -class="exit"; -fillcolor="#AB3030"; height=0.6; ]; - node8 [style="filled"; + node12 [style="filled"; label=""; -id="node8"; +id="node12"; shape="box"; class="default"; fillcolor="#d3d3d3"; -height=0.6; -]; - node2 -> node3 [penwidth=1; -color="#008000"; -class="consequence"; -]; - node2 -> node4 [penwidth=1; -color="#ff0000"; -class="alternative"; -]; - node4 -> node6 [penwidth=1; -color="#008000"; -class="consequence"; -]; - node4 -> node8 [penwidth=1; -color="#ff0000"; -class="alternative"; -]; - node3 -> node11 [penwidth=1; -color="#0000ff"; -class="regular"; -]; - node8 -> node11 [penwidth=1; -color="#0000ff"; -class="regular"; +height=0.8999999999999999; ]; -}" -`; - -exports[`Python: trivial: DOT Snapshot 1`] = ` -"digraph "" { - node [shape=box, color="#000000"]; - edge [headport=n tailport=s] - bgcolor="#ffffff" - node2 [style="filled"; + node8 [style="filled"; label=""; -id="node2"; +id="node8"; shape="box"; class="default"; fillcolor="#d3d3d3"; -minHeight=0.5; -height=0.8999999999999999; -]; -}" -`; - -exports[`Python: If: DOT Snapshot 1`] = ` -"digraph "" { - node [shape=box, color="#000000"]; - edge [headport=n tailport=s] - bgcolor="#ffffff" - node1 [style="filled"; -label=""; -id="node1"; -shape="invhouse"; -class="entry"; -fillcolor="#48AB30"; -height=0.8999999999999999; +height=0.6; ]; - node2 [style="filled"; + node14 [style="filled"; label=""; -id="node2"; +id="node14"; shape="box"; class="default"; fillcolor="#d3d3d3"; -height=0.3; +height=0.6; ]; - node6 [style="filled"; + node15 [style="filled"; label=""; -id="node6"; +id="node15"; shape="house"; class="exit"; fillcolor="#AB3030"; height=0.8999999999999999; ]; - node1 -> node2 [penwidth=1; + node5 -> node1 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node1 -> node7 [penwidth=2; +color="#0000ff"; +class="regular"; +dir="back"; +headport="s"; +tailport="n"; +]; + node1 -> node7 [penwidth=1; +color="#ff0000"; +class="alternative"; +]; + node1 -> node12 [penwidth=1; color="#008000"; class="consequence"; ]; - node2 -> node6 [penwidth=1; + node12 -> node8 [penwidth=1; color="#0000ff"; class="regular"; ]; - node1 -> node6 [penwidth=1; + node8 -> node14 [penwidth=2; +color="#0000ff"; +class="regular"; +dir="back"; +headport="s"; +tailport="n"; +]; + node8 -> node14 [penwidth=1; color="#ff0000"; class="alternative"; +]; + node8 -> node15 [penwidth=1; +color="#008000"; +class="consequence"; ]; }" `; -exports[`Python: IfElse: DOT Snapshot 1`] = ` +exports[`C++: ForLoops: DOT Snapshot 1`] = ` "digraph "" { node [shape=box, color="#000000"]; edge [headport=n tailport=s] bgcolor="#ffffff" - node1 [style="filled"; + node7 [style="filled"; label=""; -id="node1"; +id="node7"; shape="invhouse"; class="entry"; fillcolor="#48AB30"; -height=0.8999999999999999; +height=0.6; ]; - node2 [style="filled"; + node1 [style="filled"; label=""; -id="node2"; +id="node1"; shape="box"; class="default"; fillcolor="#d3d3d3"; @@ -2675,47 +2537,31 @@ id="node3"; shape="box"; class="default"; fillcolor="#d3d3d3"; -height=0.3; +height=0.6; ]; - node7 [style="filled"; + node15 [style="filled"; label=""; -id="node7"; -shape="house"; -class="exit"; -fillcolor="#AB3030"; -height=0.8999999999999999; -]; - node1 -> node2 [penwidth=1; -color="#008000"; -class="consequence"; -]; - node1 -> node3 [penwidth=1; -color="#ff0000"; -class="alternative"; -]; - node2 -> node7 [penwidth=1; -color="#0000ff"; -class="regular"; +id="node15"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.6; ]; - node3 -> node7 [penwidth=1; -color="#0000ff"; -class="regular"; + node4 [style="filled"; +label=""; +id="node4"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; ]; -}" -`; - -exports[`Python: IfElifElse: DOT Snapshot 1`] = ` -"digraph "" { - node [shape=box, color="#000000"]; - edge [headport=n tailport=s] - bgcolor="#ffffff" - node1 [style="filled"; + node10 [style="filled"; label=""; -id="node1"; -shape="invhouse"; -class="entry"; -fillcolor="#48AB30"; -height=0.8999999999999999; +id="node10"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; ]; node2 [style="filled"; label=""; @@ -2723,572 +2569,443 @@ id="node2"; shape="box"; class="default"; fillcolor="#d3d3d3"; -height=0.3; +height=0.8999999999999999; ]; - node3 [style="filled"; + node11 [style="filled"; label=""; -id="node3"; +id="node11"; shape="box"; class="default"; fillcolor="#d3d3d3"; -height=0.3; +height=0.6; ]; - node4 [style="filled"; + node23 [style="filled"; label=""; -id="node4"; +id="node23"; shape="box"; class="default"; fillcolor="#d3d3d3"; -height=0.3; +height=0.6; ]; - node5 [style="filled"; + node12 [style="filled"; label=""; -id="node5"; +id="node12"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node9 [style="filled"; + node17 [style="filled"; label=""; -id="node9"; -shape="house"; -class="exit"; -fillcolor="#AB3030"; -height=0.8999999999999999; -]; - node1 -> node2 [penwidth=1; -color="#008000"; -class="consequence"; -]; - node1 -> node3 [penwidth=1; -color="#ff0000"; -class="alternative"; -]; - node3 -> node4 [penwidth=1; -color="#008000"; -class="consequence"; +id="node17"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.6; ]; - node3 -> node5 [penwidth=1; -color="#ff0000"; -class="alternative"; + node19 [style="filled"; +label=""; +id="node19"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.6; ]; - node2 -> node9 [penwidth=1; -color="#0000ff"; -class="regular"; + node30 [style="filled"; +label=""; +id="node30"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.8999999999999999; ]; - node4 -> node9 [penwidth=1; -color="#0000ff"; -class="regular"; + node18 [style="filled"; +label=""; +id="node18"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.8999999999999999; ]; - node5 -> node9 [penwidth=1; -color="#0000ff"; -class="regular"; + node26 [style="filled"; +label=""; +id="node26"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.6; ]; -}" -`; - -exports[`Python: For: DOT Snapshot 1`] = ` -"digraph "" { - node [shape=box, color="#000000"]; - edge [headport=n tailport=s] - bgcolor="#ffffff" - node0 [style="filled"; + node32 [style="filled"; label=""; -id="node0"; -shape="invhouse"; -class="entry"; -fillcolor="#48AB30"; -height=0.5; +id="node32"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.6; ]; - node2 [style="filled"; + node39 [style="filled"; label=""; -id="node2"; +id="node39"; shape="box"; class="default"; fillcolor="#d3d3d3"; -height=0.3; +height=0.8999999999999999; ]; - node1 [style="filled"; + node33 [style="filled"; label=""; -id="node1"; +id="node33"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node4 [style="filled"; + node35 [style="filled"; label=""; -id="node4"; -shape="house"; -class="exit"; -fillcolor="#AB3030"; +id="node35"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; height=0.6; ]; - node2 -> node1 [penwidth=1; -color="#008000"; -class="consequence"; -]; - node2 -> node1 [penwidth=2; -color="#0000ff"; -class="regular"; -dir="back"; -headport="s"; -tailport="n"; -]; - node0 -> node2 [penwidth=1; -color="#0000ff"; -class="regular"; -]; - node2 -> node4 [penwidth=1; -color="#ff0000"; -class="alternative"; + node47 [style="filled"; +label=""; +id="node47"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.6; ]; -}" -`; - -exports[`Python: ForContinue: DOT Snapshot 1`] = ` -"digraph "" { - node [shape=box, color="#000000"]; - edge [headport=n tailport=s] - bgcolor="#ffffff" - node0 [style="filled"; + node36 [style="filled"; label=""; -id="node0"; -shape="invhouse"; -class="entry"; -fillcolor="#48AB30"; -height=0.5; +id="node36"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; ]; - node6 [style="filled"; + node42 [style="filled"; label=""; -id="node6"; +id="node42"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node1 [style="filled"; + node34 [style="filled"; label=""; -id="node1"; +id="node34"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.8999999999999999; +]; + node43 [style="filled"; +label=""; +id="node43"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.6; ]; - node8 [style="filled"; + node55 [style="filled"; label=""; -id="node8"; -shape="house"; -class="exit"; -fillcolor="#AB3030"; +id="node55"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; height=0.6; ]; - node2 [style="filled"; + node44 [style="filled"; label=""; -id="node2"; +id="node44"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node5 [style="filled"; + node49 [style="filled"; label=""; -id="node5"; +id="node49"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.6; ]; - node1 -> node2 [penwidth=1; -color="#008000"; -class="consequence"; -]; - node6 -> node5 [penwidth=2; -color="#0000ff"; -class="regular"; -dir="back"; -headport="s"; -tailport="n"; -]; - node6 -> node2 [penwidth=2; -color="#0000ff"; -class="regular"; -dir="back"; -headport="s"; -tailport="n"; -]; - node0 -> node6 [penwidth=1; -color="#0000ff"; -class="regular"; -]; - node6 -> node1 [penwidth=1; -color="#008000"; -class="consequence"; -]; - node6 -> node8 [penwidth=1; -color="#ff0000"; -class="alternative"; -]; - node1 -> node5 [penwidth=1; -color="#ff0000"; -class="alternative"; -]; -}" -`; - -exports[`Python: ForBreak: DOT Snapshot 1`] = ` -"digraph "" { - node [shape=box, color="#000000"]; - edge [headport=n tailport=s] - bgcolor="#ffffff" - node0 [style="filled"; -label=""; -id="node0"; -shape="invhouse"; -class="entry"; -fillcolor="#48AB30"; -height=0.5; -]; - node5 [style="filled"; + node51 [style="filled"; label=""; -id="node5"; +id="node51"; shape="box"; class="default"; fillcolor="#d3d3d3"; -height=0.3; +height=0.6; ]; - node1 [style="filled"; + node62 [style="filled"; label=""; -id="node1"; +id="node62"; shape="box"; class="default"; fillcolor="#d3d3d3"; -height=0.6; +height=0.8999999999999999; ]; - node7 [style="filled"; + node50 [style="filled"; label=""; -id="node7"; -shape="house"; -class="exit"; -fillcolor="#AB3030"; -height=0.6; +id="node50"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.8999999999999999; ]; - node2 [style="filled"; + node58 [style="filled"; label=""; -id="node2"; +id="node58"; shape="box"; class="default"; fillcolor="#d3d3d3"; -height=0.3; +height=0.6; ]; - node4 [style="filled"; + node64 [style="filled"; label=""; -id="node4"; +id="node64"; shape="box"; class="default"; fillcolor="#d3d3d3"; -height=0.3; +height=0.6; ]; - node1 -> node2 [penwidth=1; + node65 [style="filled"; +label=""; +id="node65"; +shape="house"; +class="exit"; +fillcolor="#AB3030"; +height=0.8999999999999999; +]; + node3 -> node4 [penwidth=1; color="#008000"; class="consequence"; ]; - node1 -> node4 [penwidth=1; -color="#ff0000"; -class="alternative"; + node7 -> node1 [penwidth=1; +color="#0000ff"; +class="regular"; ]; - node5 -> node4 [penwidth=2; + node1 -> node2 [penwidth=2; color="#0000ff"; class="regular"; dir="back"; headport="s"; tailport="n"; ]; - node0 -> node5 [penwidth=1; -color="#0000ff"; -class="regular"; -]; - node5 -> node1 [penwidth=1; + node11 -> node12 [penwidth=1; color="#008000"; class="consequence"; ]; - node5 -> node7 [penwidth=1; -color="#ff0000"; -class="alternative"; -]; - node2 -> node7 [penwidth=1; + node15 -> node10 [penwidth=1; color="#0000ff"; class="regular"; ]; -}" -`; - -exports[`Python: ForElse: DOT Snapshot 1`] = ` -"digraph "" { - node [shape=box, color="#000000"]; - edge [headport=n tailport=s] - bgcolor="#ffffff" - node0 [style="filled"; -label=""; -id="node0"; -shape="invhouse"; -class="entry"; -fillcolor="#48AB30"; -height=0.5; + node10 -> node17 [penwidth=2; +color="#0000ff"; +class="regular"; +dir="back"; +headport="s"; +tailport="n"; ]; - node3 [style="filled"; -label=""; -id="node3"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -height=0.3; + node35 -> node36 [penwidth=1; +color="#008000"; +class="consequence"; ]; - node1 [style="filled"; -label=""; -id="node1"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -height=0.3; + node39 -> node33 [penwidth=1; +color="#0000ff"; +class="regular"; ]; - node2 [style="filled"; -label=""; -id="node2"; -shape="house"; -class="exit"; -fillcolor="#AB3030"; -height=0.5; + node33 -> node34 [penwidth=2; +color="#0000ff"; +class="regular"; +dir="back"; +headport="s"; +tailport="n"; ]; - node3 -> node1 [penwidth=1; + node43 -> node44 [penwidth=1; color="#008000"; class="consequence"; ]; - node3 -> node1 [penwidth=2; + node47 -> node42 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node42 -> node49 [penwidth=2; color="#0000ff"; class="regular"; dir="back"; headport="s"; tailport="n"; ]; - node3 -> node2 [penwidth=1; + node1 -> node3 [penwidth=1; +color="#008000"; +class="consequence"; +]; + node1 -> node15 [penwidth=1; color="#ff0000"; class="alternative"; ]; - node0 -> node3 [penwidth=1; + node4 -> node15 [penwidth=1; color="#0000ff"; class="regular"; ]; -}" -`; - -exports[`Python: ForElseBreak: DOT Snapshot 1`] = ` -"digraph "" { - node [shape=box, color="#000000"]; - edge [headport=n tailport=s] - bgcolor="#ffffff" - node0 [style="filled"; -label=""; -id="node0"; -shape="invhouse"; -class="entry"; -fillcolor="#48AB30"; -height=0.5; -]; - node6 [style="filled"; -label=""; -id="node6"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -height=0.3; -]; - node5 [style="filled"; -label=""; -id="node5"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -height=0.3; -]; - node1 [style="filled"; -label=""; -id="node1"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -height=0.6; -]; - node2 [style="filled"; -label=""; -id="node2"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -height=0.3; -]; - node4 [style="filled"; -label=""; -id="node4"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -height=0.3; -]; - node8 [style="filled"; -label=""; -id="node8"; -shape="house"; -class="exit"; -fillcolor="#AB3030"; -height=0.6; + node3 -> node2 [penwidth=1; +color="#ff0000"; +class="alternative"; ]; - node1 -> node2 [penwidth=1; + node10 -> node11 [penwidth=1; color="#008000"; class="consequence"; ]; - node1 -> node4 [penwidth=1; + node10 -> node23 [penwidth=1; color="#ff0000"; class="alternative"; ]; - node6 -> node4 [penwidth=2; + node12 -> node23 [penwidth=1; color="#0000ff"; class="regular"; -dir="back"; -headport="s"; -tailport="n"; ]; - node6 -> node5 [penwidth=1; + node11 -> node17 [penwidth=1; color="#ff0000"; class="alternative"; ]; - node0 -> node6 [penwidth=1; + node23 -> node19 [penwidth=1; color="#0000ff"; class="regular"; ]; - node6 -> node1 [penwidth=1; + node19 -> node18 [penwidth=2; +color="#0000ff"; +class="regular"; +dir="back"; +headport="s"; +tailport="n"; +]; + node19 -> node18 [penwidth=1; +color="#ff0000"; +class="alternative"; +]; + node19 -> node30 [penwidth=1; color="#008000"; class="consequence"; ]; - node5 -> node8 [penwidth=1; + node30 -> node26 [penwidth=1; color="#0000ff"; class="regular"; ]; - node2 -> node8 [penwidth=1; + node26 -> node32 [penwidth=2; color="#0000ff"; class="regular"; +dir="back"; +headport="s"; +tailport="n"; ]; -}" -`; - -exports[`Python: ForElseBreakReturn: DOT Snapshot 1`] = ` -"digraph "" { - node [shape=box, color="#000000"]; - edge [headport=n tailport=s] - bgcolor="#ffffff" - node0 [style="filled"; -label=""; -id="node0"; -shape="invhouse"; -class="entry"; -fillcolor="#48AB30"; -height=0.5; + node26 -> node32 [penwidth=1; +color="#ff0000"; +class="alternative"; ]; - node6 [style="filled"; -label=""; -id="node6"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -height=0.3; + node26 -> node39 [penwidth=1; +color="#008000"; +class="consequence"; ]; - node5 [style="filled"; -label=""; -id="node5"; -shape="house"; -class="exit"; -fillcolor="#AB3030"; -height=0.5; + node33 -> node35 [penwidth=1; +color="#008000"; +class="consequence"; ]; - node1 [style="filled"; -label=""; -id="node1"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -height=0.6; + node33 -> node47 [penwidth=1; +color="#ff0000"; +class="alternative"; ]; - node4 [style="filled"; -label=""; -id="node4"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -height=0.3; + node36 -> node47 [penwidth=1; +color="#0000ff"; +class="regular"; ]; - node8 [style="filled"; -label=""; -id="node8"; -shape="house"; -class="exit"; -fillcolor="#AB3030"; -height=0.8999999999999999; + node35 -> node34 [penwidth=1; +color="#ff0000"; +class="alternative"; ]; - node1 -> node4 [penwidth=1; + node42 -> node43 [penwidth=1; +color="#008000"; +class="consequence"; +]; + node42 -> node55 [penwidth=1; color="#ff0000"; class="alternative"; ]; - node6 -> node4 [penwidth=2; + node44 -> node55 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node43 -> node49 [penwidth=1; +color="#ff0000"; +class="alternative"; +]; + node55 -> node51 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node51 -> node50 [penwidth=2; color="#0000ff"; class="regular"; dir="back"; headport="s"; tailport="n"; ]; - node6 -> node5 [penwidth=1; + node51 -> node50 [penwidth=1; color="#ff0000"; class="alternative"; ]; - node0 -> node6 [penwidth=1; + node51 -> node62 [penwidth=1; +color="#008000"; +class="consequence"; +]; + node62 -> node58 [penwidth=1; color="#0000ff"; class="regular"; ]; - node6 -> node1 [penwidth=1; -color="#008000"; -class="consequence"; + node58 -> node64 [penwidth=2; +color="#0000ff"; +class="regular"; +dir="back"; +headport="s"; +tailport="n"; ]; - node1 -> node8 [penwidth=1; + node58 -> node64 [penwidth=1; +color="#ff0000"; +class="alternative"; +]; + node58 -> node65 [penwidth=1; color="#008000"; class="consequence"; ]; }" `; -exports[`Python: While: DOT Snapshot 1`] = ` +exports[`C++: MoreSwitch: DOT Snapshot 1`] = ` "digraph "" { node [shape=box, color="#000000"]; edge [headport=n tailport=s] bgcolor="#ffffff" - node0 [style="filled"; + node1 [style="filled"; label=""; -id="node0"; +id="node1"; shape="invhouse"; class="entry"; fillcolor="#48AB30"; -height=0.5; +height=0.8999999999999999; ]; - node1 [style="filled"; + node2 [style="filled"; label=""; -id="node1"; +id="node2"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node2 [style="filled"; + node3 [style="filled"; label=""; -id="node2"; +id="node3"; shape="box"; class="default"; fillcolor="#d3d3d3"; @@ -3297,422 +3014,285 @@ height=0.3; node4 [style="filled"; label=""; id="node4"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node5 [style="filled"; +label=""; +id="node5"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node13 [style="filled"; +label=""; +id="node13"; shape="house"; class="exit"; fillcolor="#AB3030"; height=0.6; ]; - node1 -> node2 [penwidth=1; -color="#008000"; -class="consequence"; -]; - node1 -> node2 [penwidth=2; -color="#0000ff"; -class="regular"; -dir="back"; -headport="s"; -tailport="n"; -]; - node0 -> node1 [penwidth=1; -color="#0000ff"; -class="regular"; -]; - node1 -> node4 [penwidth=1; -color="#ff0000"; -class="alternative"; -]; -}" -`; - -exports[`Python: WhileContinue: DOT Snapshot 1`] = ` -"digraph "" { - node [shape=box, color="#000000"]; - edge [headport=n tailport=s] - bgcolor="#ffffff" - node0 [style="filled"; -label=""; -id="node0"; -shape="invhouse"; -class="entry"; -fillcolor="#48AB30"; -height=0.5; -]; - node1 [style="filled"; + node6 [style="filled"; label=""; -id="node1"; +id="node6"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node2 [style="filled"; + node7 [style="filled"; label=""; -id="node2"; +id="node7"; shape="box"; class="default"; fillcolor="#d3d3d3"; -height=0.6; +height=0.3; ]; node8 [style="filled"; label=""; id="node8"; -shape="house"; -class="exit"; -fillcolor="#AB3030"; -height=0.6; -]; - node3 [style="filled"; -label=""; -id="node3"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node6 [style="filled"; + node10 [style="filled"; label=""; -id="node6"; +id="node10"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.6; ]; - node2 -> node3 [penwidth=1; + node1 -> node2 [penwidth=1; color="#008000"; class="consequence"; ]; - node1 -> node6 [penwidth=2; -color="#0000ff"; -class="regular"; -dir="back"; -headport="s"; -tailport="n"; -]; - node1 -> node3 [penwidth=2; -color="#0000ff"; -class="regular"; -dir="back"; -headport="s"; -tailport="n"; -]; - node0 -> node1 [penwidth=1; -color="#0000ff"; -class="regular"; + node1 -> node3 [penwidth=1; +color="#ff0000"; +class="alternative"; ]; - node1 -> node2 [penwidth=1; + node3 -> node4 [penwidth=1; color="#008000"; class="consequence"; ]; - node1 -> node8 [penwidth=1; + node3 -> node5 [penwidth=1; color="#ff0000"; class="alternative"; ]; - node2 -> node6 [penwidth=1; + node5 -> node6 [penwidth=1; +color="#008000"; +class="consequence"; +]; + node6 -> node8 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node5 -> node7 [penwidth=1; color="#ff0000"; class="alternative"; ]; -}" -`; - -exports[`Python: WhileBreak: DOT Snapshot 1`] = ` -"digraph "" { - node [shape=box, color="#000000"]; - edge [headport=n tailport=s] - bgcolor="#ffffff" - node0 [style="filled"; -label=""; -id="node0"; -shape="invhouse"; -class="entry"; -fillcolor="#48AB30"; -height=0.5; -]; - node1 [style="filled"; -label=""; -id="node1"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -height=0.3; -]; - node2 [style="filled"; -label=""; -id="node2"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -height=0.6; -]; - node7 [style="filled"; -label=""; -id="node7"; -shape="house"; -class="exit"; -fillcolor="#AB3030"; -height=0.6; -]; - node3 [style="filled"; -label=""; -id="node3"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -height=0.3; -]; - node5 [style="filled"; -label=""; -id="node5"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -height=0.3; -]; - node2 -> node3 [penwidth=1; + node7 -> node8 [penwidth=1; color="#008000"; class="consequence"; ]; - node2 -> node5 [penwidth=1; -color="#ff0000"; -class="alternative"; + node10 -> node13 [penwidth=1; +color="#0000ff"; +class="regular"; ]; - node1 -> node5 [penwidth=2; + node2 -> node13 [penwidth=1; color="#0000ff"; class="regular"; -dir="back"; -headport="s"; -tailport="n"; ]; - node0 -> node1 [penwidth=1; + node4 -> node13 [penwidth=1; color="#0000ff"; class="regular"; ]; - node1 -> node2 [penwidth=1; -color="#008000"; -class="consequence"; + node8 -> node13 [penwidth=1; +color="#0000ff"; +class="regular"; ]; - node1 -> node7 [penwidth=1; + node7 -> node10 [penwidth=1; color="#ff0000"; class="alternative"; -]; - node3 -> node7 [penwidth=1; -color="#0000ff"; -class="regular"; ]; }" `; -exports[`Python: WhileElse: DOT Snapshot 1`] = ` +exports[`Go: trivial: DOT Snapshot 1`] = ` "digraph "" { node [shape=box, color="#000000"]; edge [headport=n tailport=s] bgcolor="#ffffff" - node0 [style="filled"; + node2 [style="filled"; label=""; -id="node0"; -shape="invhouse"; -class="entry"; -fillcolor="#48AB30"; -height=0.5; +id="node2"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +minHeight=0.5; +height=0.8999999999999999; ]; +}" +`; + +exports[`Go: ifThen: DOT Snapshot 1`] = ` +"digraph "" { + node [shape=box, color="#000000"]; + edge [headport=n tailport=s] + bgcolor="#ffffff" node1 [style="filled"; label=""; id="node1"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -height=0.3; +shape="invhouse"; +class="entry"; +fillcolor="#48AB30"; +height=0.6; ]; - node2 [style="filled"; + node3 [style="filled"; label=""; -id="node2"; +id="node3"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node5 [style="filled"; + node4 [style="filled"; label=""; -id="node5"; +id="node4"; shape="house"; class="exit"; fillcolor="#AB3030"; -height=0.8999999999999999; +height=0.6; ]; - node1 -> node2 [penwidth=1; + node1 -> node3 [penwidth=1; color="#008000"; class="consequence"; ]; - node1 -> node2 [penwidth=2; -color="#0000ff"; -class="regular"; -dir="back"; -headport="s"; -tailport="n"; -]; - node0 -> node1 [penwidth=1; + node3 -> node4 [penwidth=1; color="#0000ff"; class="regular"; ]; - node1 -> node5 [penwidth=1; + node1 -> node4 [penwidth=1; color="#ff0000"; class="alternative"; ]; }" `; -exports[`Python: WhileElseBreak: DOT Snapshot 1`] = ` +exports[`Go: ManyIfStatements: DOT Snapshot 1`] = ` "digraph "" { node [shape=box, color="#000000"]; edge [headport=n tailport=s] bgcolor="#ffffff" - node0 [style="filled"; + node1 [style="filled"; label=""; -id="node0"; +id="node1"; shape="invhouse"; class="entry"; fillcolor="#48AB30"; -height=0.5; +height=0.6; ]; - node1 [style="filled"; + node3 [style="filled"; label=""; -id="node1"; +id="node3"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node7 [style="filled"; + node4 [style="filled"; label=""; -id="node7"; +id="node4"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node2 [style="filled"; + node5 [style="filled"; label=""; -id="node2"; +id="node5"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.6; ]; - node3 [style="filled"; + node7 [style="filled"; label=""; -id="node3"; +id="node7"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node9 [style="filled"; + node8 [style="filled"; label=""; -id="node9"; -shape="house"; -class="exit"; -fillcolor="#AB3030"; -height=0.6; +id="node8"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; ]; - node6 [style="filled"; + node9 [style="filled"; label=""; -id="node6"; +id="node9"; shape="box"; class="default"; fillcolor="#d3d3d3"; -height=0.6; -]; - node2 -> node3 [penwidth=1; -color="#008000"; -class="consequence"; -]; - node1 -> node7 [penwidth=1; -color="#ff0000"; -class="alternative"; -]; - node1 -> node6 [penwidth=2; -color="#0000ff"; -class="regular"; -dir="back"; -headport="s"; -tailport="n"; -]; - node0 -> node1 [penwidth=1; -color="#0000ff"; -class="regular"; -]; - node1 -> node2 [penwidth=1; -color="#008000"; -class="consequence"; -]; - node7 -> node9 [penwidth=1; -color="#0000ff"; -class="regular"; -]; - node3 -> node9 [penwidth=1; -color="#0000ff"; -class="regular"; -]; - node2 -> node6 [penwidth=1; -color="#ff0000"; -class="alternative"; +height=0.3; ]; -}" -`; - -exports[`Python: Match: DOT Snapshot 1`] = ` -"digraph "" { - node [shape=box, color="#000000"]; - edge [headport=n tailport=s] - bgcolor="#ffffff" - node1 [style="filled"; + node10 [style="filled"; label=""; -id="node1"; -shape="invhouse"; -class="entry"; -fillcolor="#48AB30"; +id="node10"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; height=0.6; ]; - node4 [style="filled"; + node12 [style="filled"; label=""; -id="node4"; +id="node12"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node7 [style="filled"; -label=""; -id="node7"; -shape="house"; -class="exit"; -fillcolor="#AB3030"; -height=0.6; -]; - node3 [style="filled"; + node13 [style="filled"; label=""; -id="node3"; +id="node13"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node6 [style="filled"; + node14 [style="filled"; label=""; -id="node6"; +id="node14"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node5 [style="filled"; + node15 [style="filled"; label=""; -id="node5"; +id="node15"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node4 -> node3 [penwidth=1; + node16 [style="filled"; +label=""; +id="node16"; +shape="house"; +class="exit"; +fillcolor="#AB3030"; +height=0.6; +]; + node1 -> node3 [penwidth=1; color="#008000"; class="consequence"; ]; @@ -3720,34 +3300,70 @@ class="consequence"; color="#ff0000"; class="alternative"; ]; - node6 -> node5 [penwidth=1; + node5 -> node7 [penwidth=1; color="#008000"; class="consequence"; ]; - node4 -> node6 [penwidth=1; + node8 -> node9 [penwidth=1; +color="#008000"; +class="consequence"; +]; + node5 -> node8 [penwidth=1; color="#ff0000"; class="alternative"; ]; - node1 -> node7 [penwidth=1; + node10 -> node12 [penwidth=1; +color="#008000"; +class="consequence"; +]; + node13 -> node14 [penwidth=1; +color="#008000"; +class="consequence"; +]; + node13 -> node15 [penwidth=1; color="#ff0000"; class="alternative"; ]; - node3 -> node7 [penwidth=1; + node10 -> node13 [penwidth=1; +color="#ff0000"; +class="alternative"; +]; + node3 -> node5 [penwidth=1; color="#0000ff"; class="regular"; ]; - node5 -> node7 [penwidth=1; + node4 -> node5 [penwidth=1; color="#0000ff"; class="regular"; ]; - node6 -> node7 [penwidth=1; + node7 -> node10 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node9 -> node10 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node8 -> node10 [penwidth=1; color="#ff0000"; class="alternative"; +]; + node12 -> node16 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node14 -> node16 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node15 -> node16 [penwidth=1; +color="#0000ff"; +class="regular"; ]; }" `; -exports[`Python: MatchMultiPattern: DOT Snapshot 1`] = ` +exports[`Go: Switch: DOT Snapshot 1`] = ` "digraph "" { node [shape=box, color="#000000"]; edge [headport=n tailport=s] @@ -3758,7 +3374,23 @@ id="node1"; shape="invhouse"; class="entry"; fillcolor="#48AB30"; -height=0.6; +height=0.8999999999999999; +]; + node2 [style="filled"; +label=""; +id="node2"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node3 [style="filled"; +label=""; +id="node3"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; ]; node4 [style="filled"; label=""; @@ -3768,21 +3400,21 @@ class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node7 [style="filled"; + node5 [style="filled"; label=""; -id="node7"; -shape="house"; -class="exit"; -fillcolor="#AB3030"; -height=0.6; +id="node5"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; ]; - node3 [style="filled"; + node11 [style="filled"; label=""; -id="node3"; +id="node11"; shape="house"; class="exit"; fillcolor="#AB3030"; -height=0.5; +height=0.6; ]; node6 [style="filled"; label=""; @@ -3792,42 +3424,74 @@ class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node5 [style="filled"; + node7 [style="filled"; label=""; -id="node5"; -shape="house"; -class="exit"; -fillcolor="#AB3030"; -height=0.5; +id="node7"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; ]; - node4 -> node3 [penwidth=1; + node8 [style="filled"; +label=""; +id="node8"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node1 -> node2 [penwidth=1; color="#008000"; class="consequence"; ]; - node1 -> node4 [penwidth=1; + node1 -> node3 [penwidth=1; color="#ff0000"; class="alternative"; ]; - node6 -> node5 [penwidth=1; + node3 -> node4 [penwidth=1; color="#008000"; class="consequence"; ]; - node4 -> node6 [penwidth=1; + node3 -> node5 [penwidth=1; color="#ff0000"; class="alternative"; ]; - node1 -> node7 [penwidth=1; + node5 -> node6 [penwidth=1; +color="#008000"; +class="consequence"; +]; + node5 -> node7 [penwidth=1; color="#ff0000"; class="alternative"; ]; - node6 -> node7 [penwidth=1; + node7 -> node8 [penwidth=1; +color="#008000"; +class="consequence"; +]; + node2 -> node11 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node4 -> node11 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node6 -> node11 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node8 -> node11 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node7 -> node11 [penwidth=1; color="#ff0000"; class="alternative"; ]; }" `; -exports[`Python: Return: DOT Snapshot 1`] = ` +exports[`Go: switchAndLabelsAndGoto: DOT Snapshot 1`] = ` "digraph "" { node [shape=box, color="#000000"]; edge [headport=n tailport=s] @@ -3843,122 +3507,58 @@ height=0.8999999999999999; node2 [style="filled"; label=""; id="node2"; -shape="house"; -class="exit"; -fillcolor="#AB3030"; -height=0.5; -]; - node5 [style="filled"; -label=""; -id="node5"; -shape="house"; -class="exit"; -fillcolor="#AB3030"; -height=0.6; -]; - node1 -> node2 [penwidth=1; -color="#008000"; -class="consequence"; -]; - node1 -> node5 [penwidth=1; -color="#ff0000"; -class="alternative"; -]; -}" -`; - -exports[`Python: WithCluster: DOT Snapshot 1`] = ` -"digraph "" { - node [shape=box, color="#000000"]; - edge [headport=n tailport=s] - bgcolor="#ffffff" -subgraph cluster_0 { -penwidth=0; -color="#ffffff"; -bgcolor="#ffddff"; -class="with"; - node3 [style="filled"; -label=""; -id="node3"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -height=0.6; -]; - node4 [style="filled"; -label=""; -id="node4"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node7 [style="filled"; + node3 [style="filled"; label=""; -id="node7"; +id="node3"; shape="box"; class="default"; fillcolor="#d3d3d3"; -height=0.6; -]; - node3 -> node4 [penwidth=1; -color="#008000"; -class="consequence"; -]; - node4 -> node7 [penwidth=1; -color="#0000ff"; -class="regular"; -]; - node3 -> node7 [penwidth=1; -color="#ff0000"; -class="alternative"; +height=0.3; ]; - -}subgraph cluster_1 { -penwidth=0; -color="#ffffff"; -bgcolor="#ffddff"; -class="with"; - node9 [style="filled"; + node5 [style="filled"; label=""; -id="node9"; +id="node5"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - -} node2 [style="filled"; + node11 [style="filled"; label=""; -id="node2"; -shape="invhouse"; -class="entry"; -fillcolor="#48AB30"; -height=0.8999999999999999; +id="node11"; +shape="house"; +class="exit"; +fillcolor="#AB3030"; +height=0.6; ]; - node3 [style="filled"; + node6 [style="filled"; label=""; -id="node3"; +id="node6"; shape="box"; class="default"; fillcolor="#d3d3d3"; -height=0.6; +height=0.3; ]; - node4 [style="filled"; + node7 [style="filled"; label=""; -id="node4"; +id="node7"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node7 [style="filled"; + node13 [style="filled"; label=""; -id="node7"; +id="node13"; shape="box"; class="default"; fillcolor="#d3d3d3"; -height=0.6; +height=0.8999999999999999; ]; node8 [style="filled"; label=""; @@ -3968,58 +3568,130 @@ class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node9 [style="filled"; + node15 [style="filled"; label=""; -id="node9"; +id="node15"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node11 [style="filled"; + node16 [style="filled"; label=""; -id="node11"; +id="node16"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node17 [style="filled"; +label=""; +id="node17"; shape="house"; class="exit"; fillcolor="#AB3030"; height=0.6; ]; - node8 -> node9 [penwidth=1; + node1 -> node2 [penwidth=1; +color="#008000"; +class="consequence"; +]; + node1 -> node3 [penwidth=1; +color="#ff0000"; +class="alternative"; +]; + node3 -> node5 [penwidth=1; +color="#ff0000"; +class="alternative"; +]; + node5 -> node6 [penwidth=1; +color="#008000"; +class="consequence"; +]; + node5 -> node7 [penwidth=1; +color="#ff0000"; +class="alternative"; +]; + node7 -> node8 [penwidth=1; +color="#008000"; +class="consequence"; +]; + node13 -> node15 [penwidth=1; +color="#008000"; +class="consequence"; +]; + node13 -> node16 [penwidth=1; +color="#ff0000"; +class="alternative"; +]; + node2 -> node11 [penwidth=1; color="#0000ff"; class="regular"; ]; - node7 -> node8 [penwidth=1; + node6 -> node11 [penwidth=1; color="#0000ff"; class="regular"; ]; - node2 -> node3 [penwidth=1; + node8 -> node11 [penwidth=1; color="#0000ff"; class="regular"; ]; - node9 -> node11 [penwidth=1; + node7 -> node11 [penwidth=1; +color="#ff0000"; +class="alternative"; +]; + node3 -> node13 [penwidth=1; +color="#008000"; +class="consequence"; +]; + node15 -> node17 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node16 -> node17 [penwidth=1; color="#0000ff"; class="regular"; ]; }" `; -exports[`Python: WithNestedCluster: DOT Snapshot 1`] = ` +exports[`Go: trivialReachability: DOT Snapshot 1`] = ` "digraph "" { node [shape=box, color="#000000"]; edge [headport=n tailport=s] bgcolor="#ffffff" -subgraph cluster_0 { -penwidth=0; -color="#ffffff"; -bgcolor="#ffddff"; -class="with"; node2 [style="filled"; label=""; id="node2"; shape="box"; class="default"; fillcolor="#d3d3d3"; -height=0.6; +minHeight=0.5; +height=0.8999999999999999; +]; +}" +`; + +exports[`Go: hasFallthrough: DOT Snapshot 1`] = ` +"digraph "" { + node [shape=box, color="#000000"]; + edge [headport=n tailport=s] + bgcolor="#ffffff" + node1 [style="filled"; +label=""; +id="node1"; +shape="invhouse"; +class="entry"; +fillcolor="#48AB30"; +height=0.8999999999999999; +]; + node2 [style="filled"; +label=""; +id="node2"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; ]; node3 [style="filled"; label=""; @@ -4029,168 +3701,273 @@ class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node6 [style="filled"; + node4 [style="filled"; label=""; -id="node6"; +id="node4"; shape="box"; class="default"; fillcolor="#d3d3d3"; +height=0.3; +]; + node7 [style="filled"; +label=""; +id="node7"; +shape="house"; +class="exit"; +fillcolor="#AB3030"; height=0.6; ]; - node2 -> node3 [penwidth=1; + node1 -> node2 [penwidth=1; color="#008000"; class="consequence"; ]; - node3 -> node6 [penwidth=1; + node2 -> node4 [penwidth=1; color="#0000ff"; class="regular"; ]; - node2 -> node6 [penwidth=1; + node1 -> node3 [penwidth=1; +color="#ff0000"; +class="alternative"; +]; + node3 -> node4 [penwidth=1; +color="#008000"; +class="consequence"; +]; + node4 -> node7 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node3 -> node7 [penwidth=1; color="#ff0000"; class="alternative"; ]; +}" +`; -}subgraph cluster_1 { -penwidth=0; -color="#ffffff"; -bgcolor="#ffddff"; -class="with"; - node8 [style="filled"; +exports[`Go: forever: DOT Snapshot 1`] = ` +"digraph "" { + node [shape=box, color="#000000"]; + edge [headport=n tailport=s] + bgcolor="#ffffff" + node0 [style="filled"; label=""; -id="node8"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -height=0.6; +id="node0"; +shape="invhouse"; +class="entry"; +fillcolor="#48AB30"; +height=0.5; ]; - node9 [style="filled"; + node2 [style="filled"; label=""; -id="node9"; +id="node2"; shape="box"; class="default"; fillcolor="#d3d3d3"; -height=0.3; +height=0.6; ]; - node16 [style="filled"; + node2 -> node2 [penwidth=2; +color="#0000ff"; +class="regular"; +dir="back"; +headport="s"; +tailport="n"; +]; + node0 -> node2 [penwidth=1; +color="#0000ff"; +class="regular"; +]; +}" +`; + +exports[`Go: forCond: DOT Snapshot 1`] = ` +"digraph "" { + node [shape=box, color="#000000"]; + edge [headport=n tailport=s] + bgcolor="#ffffff" + node0 [style="filled"; label=""; -id="node16"; -shape="house"; -class="exit"; -fillcolor="#AB3030"; +id="node0"; +shape="invhouse"; +class="entry"; +fillcolor="#48AB30"; height=0.5; ]; - node18 [style="filled"; + node1 [style="filled"; label=""; -id="node18"; +id="node1"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - -subgraph cluster_2 { -penwidth=6; -color="#ffffff"; -bgcolor="#ffddff"; -class="with"; - node10 [style="filled"; + node2 [style="filled"; label=""; -id="node10"; +id="node2"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node11 [style="filled"; + node4 [style="filled"; label=""; -id="node11"; +id="node4"; +shape="house"; +class="exit"; +fillcolor="#AB3030"; +height=0.6; +]; + node1 -> node2 [penwidth=1; +color="#008000"; +class="consequence"; +]; + node1 -> node2 [penwidth=2; +color="#0000ff"; +class="regular"; +dir="back"; +headport="s"; +tailport="n"; +]; + node0 -> node1 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node1 -> node4 [penwidth=1; +color="#ff0000"; +class="alternative"; +]; +}" +`; + +exports[`Go: forCStyle: DOT Snapshot 1`] = ` +"digraph "" { + node [shape=box, color="#000000"]; + edge [headport=n tailport=s] + bgcolor="#ffffff" + node0 [style="filled"; +label=""; +id="node0"; +shape="invhouse"; +class="entry"; +fillcolor="#48AB30"; +height=0.5; +]; + node1 [style="filled"; +label=""; +id="node1"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node13 [style="filled"; + node2 [style="filled"; label=""; -id="node13"; +id="node2"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node12 [style="filled"; + node4 [style="filled"; label=""; -id="node12"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -height=0.3; +id="node4"; +shape="house"; +class="exit"; +fillcolor="#AB3030"; +height=0.6; ]; - node15 [style="filled"; + node1 -> node2 [penwidth=1; +color="#008000"; +class="consequence"; +]; + node1 -> node2 [penwidth=2; +color="#0000ff"; +class="regular"; +dir="back"; +headport="s"; +tailport="n"; +]; + node0 -> node1 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node1 -> node4 [penwidth=1; +color="#ff0000"; +class="alternative"; +]; +}" +`; + +exports[`Go: forRange: DOT Snapshot 1`] = ` +"digraph "" { + node [shape=box, color="#000000"]; + edge [headport=n tailport=s] + bgcolor="#ffffff" + node0 [style="filled"; label=""; -id="node15"; +id="node0"; +shape="invhouse"; +class="entry"; +fillcolor="#48AB30"; +height=0.5; +]; + node1 [style="filled"; +label=""; +id="node1"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node14 [style="filled"; + node2 [style="filled"; label=""; -id="node14"; +id="node2"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node10 -> node11 [penwidth=1; -color="#ff0000"; -class="alternative"; + node4 [style="filled"; +label=""; +id="node4"; +shape="house"; +class="exit"; +fillcolor="#AB3030"; +height=0.6; ]; - node13 -> node12 [penwidth=1; + node1 -> node2 [penwidth=1; color="#008000"; class="consequence"; ]; - node12 -> node11 [penwidth=1; + node1 -> node2 [penwidth=2; color="#0000ff"; class="regular"; +dir="back"; +headport="s"; +tailport="n"; ]; - node10 -> node13 [penwidth=1; -color="#ff0000"; -class="alternative"; -]; - node15 -> node14 [penwidth=1; -color="#008000"; -class="consequence"; -]; - node14 -> node11 [penwidth=1; + node0 -> node1 [penwidth=1; color="#0000ff"; class="regular"; ]; - node13 -> node15 [penwidth=1; -color="#ff0000"; -class="alternative"; -]; - node15 -> node11 [penwidth=1; -color="#ff0000"; -class="alternative"; -]; - -} - node8 -> node9 [penwidth=1; -color="#008000"; -class="consequence"; -]; - node8 -> node16 [penwidth=1; + node1 -> node4 [penwidth=1; color="#ff0000"; class="alternative"; ]; +}" +`; -} node1 [style="filled"; +exports[`Go: typeSwitch: DOT Snapshot 1`] = ` +"digraph "" { + node [shape=box, color="#000000"]; + edge [headport=n tailport=s] + bgcolor="#ffffff" + node1 [style="filled"; label=""; id="node1"; shape="invhouse"; class="entry"; fillcolor="#48AB30"; -height=0.6; +height=0.8999999999999999; ]; node2 [style="filled"; label=""; @@ -4198,7 +3975,7 @@ id="node2"; shape="box"; class="default"; fillcolor="#d3d3d3"; -height=0.6; +height=0.3; ]; node3 [style="filled"; label=""; @@ -4208,250 +3985,305 @@ class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node6 [style="filled"; + node4 [style="filled"; label=""; -id="node6"; +id="node4"; shape="box"; class="default"; fillcolor="#d3d3d3"; -height=0.6; +height=0.3; ]; node7 [style="filled"; label=""; id="node7"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -height=0.3; +shape="house"; +class="exit"; +fillcolor="#AB3030"; +height=0.6; ]; - node8 [style="filled"; + node1 -> node2 [penwidth=1; +color="#008000"; +class="consequence"; +]; + node1 -> node3 [penwidth=1; +color="#ff0000"; +class="alternative"; +]; + node3 -> node4 [penwidth=1; +color="#008000"; +class="consequence"; +]; + node2 -> node7 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node4 -> node7 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node3 -> node7 [penwidth=1; +color="#ff0000"; +class="alternative"; +]; +}" +`; + +exports[`Go: Select: DOT Snapshot 1`] = ` +"digraph "" { + node [shape=box, color="#000000"]; + edge [headport=n tailport=s] + bgcolor="#ffffff" + node2 [style="filled"; label=""; -id="node8"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -height=0.6; +id="node2"; +shape="invhouse"; +class="entry"; +fillcolor="#48AB30"; +height=1.2; ]; node9 [style="filled"; label=""; id="node9"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -height=0.3; +shape="house"; +class="exit"; +fillcolor="#AB3030"; +height=0.8999999999999999; ]; - node16 [style="filled"; + node6 [style="filled"; label=""; -id="node16"; +id="node6"; shape="house"; class="exit"; fillcolor="#AB3030"; -height=0.5; +height=0.8999999999999999; ]; - node10 [style="filled"; -label=""; -id="node10"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -height=0.3; + node2 -> node6 [penwidth=1; +color="#ff0000"; +class="alternative"; ]; - node11 [style="filled"; -label=""; -id="node11"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -height=0.3; + node2 -> node9 [penwidth=1; +color="#008000"; +class="consequence"; ]; - node13 [style="filled"; +}" +`; + +exports[`Go: Select2: DOT Snapshot 1`] = ` +"digraph "" { + node [shape=box, color="#000000"]; + edge [headport=n tailport=s] + bgcolor="#ffffff" + node2 [style="filled"; label=""; -id="node13"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -height=0.3; +id="node2"; +shape="invhouse"; +class="entry"; +fillcolor="#48AB30"; +height=1.2; ]; - node18 [style="filled"; + node3 [style="filled"; label=""; -id="node18"; +id="node3"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node12 [style="filled"; + node4 [style="filled"; label=""; -id="node12"; +id="node4"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node15 [style="filled"; + node11 [style="filled"; label=""; -id="node15"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -height=0.3; +id="node11"; +shape="house"; +class="exit"; +fillcolor="#AB3030"; +height=0.6; ]; - node19 [style="filled"; + node6 [style="filled"; label=""; -id="node19"; +id="node6"; shape="house"; class="exit"; fillcolor="#AB3030"; -height=0.5; +height=0.6; ]; - node14 [style="filled"; + node8 [style="filled"; label=""; -id="node14"; +id="node8"; shape="box"; class="default"; fillcolor="#d3d3d3"; -height=0.3; +height=0.6; ]; - node9 -> node10 [penwidth=1; -color="#0000ff"; -class="regular"; + node2 -> node3 [penwidth=1; +color="#008000"; +class="consequence"; ]; - node11 -> node18 [penwidth=1; -color="#0000ff"; -class="regular"; + node2 -> node4 [penwidth=1; +color="#ff0000"; +class="alternative"; ]; - node6 -> node7 [penwidth=1; -color="#0000ff"; -class="regular"; + node4 -> node6 [penwidth=1; +color="#008000"; +class="consequence"; ]; - node18 -> node19 [penwidth=1; -color="#0000ff"; -class="regular"; + node4 -> node8 [penwidth=1; +color="#ff0000"; +class="alternative"; ]; - node1 -> node2 [penwidth=1; + node3 -> node11 [penwidth=1; color="#0000ff"; class="regular"; ]; - node7 -> node8 [penwidth=1; + node8 -> node11 [penwidth=1; color="#0000ff"; class="regular"; ]; }" `; -exports[`Python: raise_exception: DOT Snapshot 1`] = ` +exports[`Python: trivial: DOT Snapshot 1`] = ` "digraph "" { node [shape=box, color="#000000"]; edge [headport=n tailport=s] bgcolor="#ffffff" - node0 [style="filled"; + node2 [style="filled"; label=""; -id="node0"; +id="node2"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +minHeight=0.5; +height=0.8999999999999999; +]; +}" +`; + +exports[`Python: If: DOT Snapshot 1`] = ` +"digraph "" { + node [shape=box, color="#000000"]; + edge [headport=n tailport=s] + bgcolor="#ffffff" + node1 [style="filled"; +label=""; +id="node1"; shape="invhouse"; class="entry"; fillcolor="#48AB30"; -height=0.5; +height=0.8999999999999999; ]; - node1 [style="filled"; + node2 [style="filled"; label=""; -id="node1"; -shape="triangle"; -class="throw"; -fillcolor="#ffdddd"; -height=0.5; +id="node2"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; ]; - node0 -> node1 [penwidth=1; + node6 [style="filled"; +label=""; +id="node6"; +shape="house"; +class="exit"; +fillcolor="#AB3030"; +height=0.8999999999999999; +]; + node1 -> node2 [penwidth=1; +color="#008000"; +class="consequence"; +]; + node2 -> node6 [penwidth=1; color="#0000ff"; class="regular"; +]; + node1 -> node6 [penwidth=1; +color="#ff0000"; +class="alternative"; ]; }" `; -exports[`Python: raise_again: DOT Snapshot 1`] = ` +exports[`Python: IfElse: DOT Snapshot 1`] = ` "digraph "" { node [shape=box, color="#000000"]; edge [headport=n tailport=s] bgcolor="#ffffff" -subgraph cluster_0 { -penwidth=0; -color="#ffffff"; -bgcolor="#ddddff"; -class="tryComplex"; - -subgraph cluster_1 { -penwidth=0; -color="#ffffff"; -bgcolor="#ddffdd"; -class="try"; - node2 [style="filled"; + node1 [style="filled"; label=""; -id="node2"; -shape="triangle"; -class="throw"; -fillcolor="#ffdddd"; -height=0.3; +id="node1"; +shape="invhouse"; +class="entry"; +fillcolor="#48AB30"; +height=0.8999999999999999; ]; - -} - -subgraph cluster_2 { -penwidth=0; -color="#ffffff"; -bgcolor="#ffdddd"; -class="except"; - node3 [style="filled"; + node2 [style="filled"; label=""; -id="node3"; +id="node2"; shape="box"; class="default"; fillcolor="#d3d3d3"; -height=0.6; +height=0.3; ]; - node4 [style="filled"; + node3 [style="filled"; label=""; -id="node4"; +id="node3"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node6 [style="filled"; + node7 [style="filled"; label=""; -id="node6"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -height=0.3; +id="node7"; +shape="house"; +class="exit"; +fillcolor="#AB3030"; +height=0.8999999999999999; ]; - node3 -> node4 [penwidth=1; + node1 -> node2 [penwidth=1; color="#008000"; class="consequence"; ]; - node4 -> node6 [penwidth=1; + node1 -> node3 [penwidth=1; +color="#ff0000"; +class="alternative"; +]; + node2 -> node7 [penwidth=1; color="#0000ff"; class="regular"; ]; - node3 -> node6 [penwidth=1; -color="#ff0000"; -class="alternative"; + node3 -> node7 [penwidth=1; +color="#0000ff"; +class="regular"; ]; +}" +`; -} - -} node0 [style="filled"; +exports[`Python: IfElifElse: DOT Snapshot 1`] = ` +"digraph "" { + node [shape=box, color="#000000"]; + edge [headport=n tailport=s] + bgcolor="#ffffff" + node1 [style="filled"; label=""; -id="node0"; +id="node1"; shape="invhouse"; class="entry"; fillcolor="#48AB30"; -height=0.5; +height=0.8999999999999999; ]; node2 [style="filled"; label=""; id="node2"; -shape="triangle"; -class="throw"; -fillcolor="#ffdddd"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; height=0.3; ]; node3 [style="filled"; @@ -4460,7 +4292,7 @@ id="node3"; shape="box"; class="default"; fillcolor="#d3d3d3"; -height=0.6; +height=0.3; ]; node4 [style="filled"; label=""; @@ -4470,40 +4302,54 @@ class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node6 [style="filled"; + node5 [style="filled"; label=""; -id="node6"; +id="node5"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node11 [style="filled"; + node9 [style="filled"; label=""; -id="node11"; +id="node9"; shape="house"; class="exit"; fillcolor="#AB3030"; -height=0.6; +height=0.8999999999999999; ]; - node0 -> node2 [penwidth=1; + node1 -> node2 [penwidth=1; +color="#008000"; +class="consequence"; +]; + node1 -> node3 [penwidth=1; +color="#ff0000"; +class="alternative"; +]; + node3 -> node4 [penwidth=1; +color="#008000"; +class="consequence"; +]; + node3 -> node5 [penwidth=1; +color="#ff0000"; +class="alternative"; +]; + node2 -> node9 [penwidth=1; color="#0000ff"; class="regular"; ]; - node2 -> node3 [penwidth=1; + node4 -> node9 [penwidth=1; color="#0000ff"; -style="invis"; -headport="e"; -tailport="w"; +class="regular"; ]; - node6 -> node11 [penwidth=1; + node5 -> node9 [penwidth=1; color="#0000ff"; class="regular"; ]; }" `; -exports[`Python: yield_value: DOT Snapshot 1`] = ` +exports[`Python: For: DOT Snapshot 1`] = ` "digraph "" { node [shape=box, color="#000000"]; edge [headport=n tailport=s] @@ -4527,10 +4373,9 @@ height=0.3; node1 [style="filled"; label=""; id="node1"; -shape="hexagon"; -class="yield"; -fillcolor="#00bfff"; -orientation=90; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; height=0.3; ]; node4 [style="filled"; @@ -4563,56 +4408,42 @@ class="alternative"; }" `; -exports[`Python: try_except: DOT Snapshot 1`] = ` +exports[`Python: ForContinue: DOT Snapshot 1`] = ` "digraph "" { node [shape=box, color="#000000"]; edge [headport=n tailport=s] bgcolor="#ffffff" -subgraph cluster_0 { -penwidth=0; -color="#ffffff"; -bgcolor="#ddddff"; -class="tryComplex"; - -subgraph cluster_1 { -penwidth=0; -color="#ffffff"; -bgcolor="#ddffdd"; -class="try"; - node2 [style="filled"; + node0 [style="filled"; label=""; -id="node2"; +id="node0"; +shape="invhouse"; +class="entry"; +fillcolor="#48AB30"; +height=0.5; +]; + node6 [style="filled"; +label=""; +id="node6"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - -} - -subgraph cluster_2 { -penwidth=0; -color="#ffffff"; -bgcolor="#ffdddd"; -class="except"; - node3 [style="filled"; + node1 [style="filled"; label=""; -id="node3"; +id="node1"; shape="box"; class="default"; fillcolor="#d3d3d3"; -height=0.3; +height=0.6; ]; - -} - -} node0 [style="filled"; + node8 [style="filled"; label=""; -id="node0"; -shape="invhouse"; -class="entry"; -fillcolor="#48AB30"; -height=0.5; +id="node8"; +shape="house"; +class="exit"; +fillcolor="#AB3030"; +height=0.6; ]; node2 [style="filled"; label=""; @@ -4622,91 +4453,96 @@ class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node3 [style="filled"; + node5 [style="filled"; label=""; -id="node3"; +id="node5"; shape="box"; class="default"; fillcolor="#d3d3d3"; -height=0.3; -]; - node4 [style="filled"; -label=""; -id="node4"; -shape="house"; -class="exit"; -fillcolor="#AB3030"; height=0.6; ]; - node2 -> node3 [penwidth=1; -color="#0000ff"; -style="invis"; -headport="e"; -tailport="w"; + node1 -> node2 [penwidth=1; +color="#008000"; +class="consequence"; ]; - node0 -> node2 [penwidth=1; + node6 -> node5 [penwidth=2; color="#0000ff"; class="regular"; +dir="back"; +headport="s"; +tailport="n"; ]; - node3 -> node4 [penwidth=1; + node6 -> node2 [penwidth=2; color="#0000ff"; class="regular"; +dir="back"; +headport="s"; +tailport="n"; ]; - node2 -> node4 [penwidth=1; + node0 -> node6 [penwidth=1; color="#0000ff"; class="regular"; +]; + node6 -> node1 [penwidth=1; +color="#008000"; +class="consequence"; +]; + node6 -> node8 [penwidth=1; +color="#ff0000"; +class="alternative"; +]; + node1 -> node5 [penwidth=1; +color="#ff0000"; +class="alternative"; ]; }" `; -exports[`Python: try_except_finally: DOT Snapshot 1`] = ` +exports[`Python: ForBreak: DOT Snapshot 1`] = ` "digraph "" { node [shape=box, color="#000000"]; edge [headport=n tailport=s] bgcolor="#ffffff" -subgraph cluster_0 { -penwidth=0; -color="#ffffff"; -bgcolor="#ddddff"; -class="tryComplex"; - -subgraph cluster_1 { -penwidth=0; -color="#ffffff"; -bgcolor="#ddffdd"; -class="try"; - node2 [style="filled"; + node0 [style="filled"; label=""; -id="node2"; +id="node0"; +shape="invhouse"; +class="entry"; +fillcolor="#48AB30"; +height=0.5; +]; + node5 [style="filled"; +label=""; +id="node5"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - -} - -subgraph cluster_2 { -penwidth=0; -color="#ffffff"; -bgcolor="#ffdddd"; -class="except"; - node3 [style="filled"; + node1 [style="filled"; label=""; -id="node3"; +id="node1"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.6; +]; + node7 [style="filled"; +label=""; +id="node7"; +shape="house"; +class="exit"; +fillcolor="#AB3030"; +height=0.6; +]; + node2 [style="filled"; +label=""; +id="node2"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - -} - -subgraph cluster_3 { -penwidth=0; -color="#ffffff"; -bgcolor="#ffffdd"; -class="finally"; node4 [style="filled"; label=""; id="node4"; @@ -4715,24 +4551,52 @@ class="default"; fillcolor="#d3d3d3"; height=0.3; ]; + node1 -> node2 [penwidth=1; +color="#008000"; +class="consequence"; +]; + node1 -> node4 [penwidth=1; +color="#ff0000"; +class="alternative"; +]; + node5 -> node4 [penwidth=2; +color="#0000ff"; +class="regular"; +dir="back"; +headport="s"; +tailport="n"; +]; + node0 -> node5 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node5 -> node1 [penwidth=1; +color="#008000"; +class="consequence"; +]; + node5 -> node7 [penwidth=1; +color="#ff0000"; +class="alternative"; +]; + node2 -> node7 [penwidth=1; +color="#0000ff"; +class="regular"; +]; +}" +`; -} - -} node0 [style="filled"; +exports[`Python: ForElse: DOT Snapshot 1`] = ` +"digraph "" { + node [shape=box, color="#000000"]; + edge [headport=n tailport=s] + bgcolor="#ffffff" + node0 [style="filled"; label=""; id="node0"; shape="invhouse"; class="entry"; fillcolor="#48AB30"; height=0.5; -]; - node2 [style="filled"; -label=""; -id="node2"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -height=0.3; ]; node3 [style="filled"; label=""; @@ -4742,155 +4606,149 @@ class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node4 [style="filled"; + node1 [style="filled"; label=""; -id="node4"; +id="node1"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node5 [style="filled"; + node2 [style="filled"; label=""; -id="node5"; +id="node2"; shape="house"; class="exit"; fillcolor="#AB3030"; -height=0.6; -]; - node2 -> node3 [penwidth=1; -color="#0000ff"; -style="invis"; -headport="e"; -tailport="w"; +height=0.5; ]; - node2 -> node4 [penwidth=1; -color="#0000ff"; -class="regular"; + node3 -> node1 [penwidth=1; +color="#008000"; +class="consequence"; ]; - node3 -> node4 [penwidth=1; + node3 -> node1 [penwidth=2; color="#0000ff"; class="regular"; +dir="back"; +headport="s"; +tailport="n"; ]; - node0 -> node2 [penwidth=1; -color="#0000ff"; -class="regular"; + node3 -> node2 [penwidth=1; +color="#ff0000"; +class="alternative"; ]; - node4 -> node5 [penwidth=1; + node0 -> node3 [penwidth=1; color="#0000ff"; class="regular"; ]; }" `; -exports[`Python: try_many_except_finally: DOT Snapshot 1`] = ` +exports[`Python: ForElseBreak: DOT Snapshot 1`] = ` "digraph "" { node [shape=box, color="#000000"]; edge [headport=n tailport=s] bgcolor="#ffffff" -subgraph cluster_0 { -penwidth=0; -color="#ffffff"; -bgcolor="#ddddff"; -class="tryComplex"; - node7 [style="filled"; + node0 [style="filled"; label=""; -id="node7"; -shape="house"; -class="exit"; -fillcolor="#AB3030"; +id="node0"; +shape="invhouse"; +class="entry"; +fillcolor="#48AB30"; height=0.5; ]; - -subgraph cluster_1 { -penwidth=0; -color="#ffffff"; -bgcolor="#ddffdd"; -class="try"; - node2 [style="filled"; + node6 [style="filled"; label=""; -id="node2"; +id="node6"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - -} - -subgraph cluster_2 { -penwidth=0; -color="#ffffff"; -bgcolor="#ffdddd"; -class="except"; - node3 [style="filled"; + node5 [style="filled"; label=""; -id="node3"; +id="node5"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - -} - -subgraph cluster_3 { -penwidth=0; -color="#ffffff"; -bgcolor="#ffdddd"; -class="except"; - node4 [style="filled"; + node1 [style="filled"; label=""; -id="node4"; +id="node1"; shape="box"; class="default"; fillcolor="#d3d3d3"; -height=0.3; +height=0.6; ]; - -} - -subgraph cluster_4 { -penwidth=0; -color="#ffffff"; -bgcolor="#ffdddd"; -class="except"; - node5 [style="filled"; + node2 [style="filled"; label=""; -id="node5"; +id="node2"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - -} - -subgraph cluster_5 { -penwidth=0; -color="#ffffff"; -bgcolor="#ffffdd"; -class="finally"; - node8 [style="filled"; + node4 [style="filled"; label=""; -id="node8"; +id="node4"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node6 [style="filled"; + node8 [style="filled"; label=""; -id="node6"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -height=0.3; +id="node8"; +shape="house"; +class="exit"; +fillcolor="#AB3030"; +height=0.6; ]; + node1 -> node2 [penwidth=1; +color="#008000"; +class="consequence"; +]; + node1 -> node4 [penwidth=1; +color="#ff0000"; +class="alternative"; +]; + node6 -> node4 [penwidth=2; +color="#0000ff"; +class="regular"; +dir="back"; +headport="s"; +tailport="n"; +]; + node6 -> node5 [penwidth=1; +color="#ff0000"; +class="alternative"; +]; + node0 -> node6 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node6 -> node1 [penwidth=1; +color="#008000"; +class="consequence"; +]; + node5 -> node8 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node2 -> node8 [penwidth=1; +color="#0000ff"; +class="regular"; +]; +}" +`; -} - -} node0 [style="filled"; +exports[`Python: ForElseBreakReturn: DOT Snapshot 1`] = ` +"digraph "" { + node [shape=box, color="#000000"]; + edge [headport=n tailport=s] + bgcolor="#ffffff" + node0 [style="filled"; label=""; id="node0"; shape="invhouse"; @@ -4898,33 +4756,33 @@ class="entry"; fillcolor="#48AB30"; height=0.5; ]; - node2 [style="filled"; + node6 [style="filled"; label=""; -id="node2"; +id="node6"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node3 [style="filled"; + node5 [style="filled"; label=""; -id="node3"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -height=0.3; +id="node5"; +shape="house"; +class="exit"; +fillcolor="#AB3030"; +height=0.5; ]; - node4 [style="filled"; + node1 [style="filled"; label=""; -id="node4"; +id="node1"; shape="box"; class="default"; fillcolor="#d3d3d3"; -height=0.3; +height=0.6; ]; - node5 [style="filled"; + node4 [style="filled"; label=""; -id="node5"; +id="node4"; shape="box"; class="default"; fillcolor="#d3d3d3"; @@ -4933,124 +4791,137 @@ height=0.3; node8 [style="filled"; label=""; id="node8"; +shape="house"; +class="exit"; +fillcolor="#AB3030"; +height=0.8999999999999999; +]; + node1 -> node4 [penwidth=1; +color="#ff0000"; +class="alternative"; +]; + node6 -> node4 [penwidth=2; +color="#0000ff"; +class="regular"; +dir="back"; +headport="s"; +tailport="n"; +]; + node6 -> node5 [penwidth=1; +color="#ff0000"; +class="alternative"; +]; + node0 -> node6 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node6 -> node1 [penwidth=1; +color="#008000"; +class="consequence"; +]; + node1 -> node8 [penwidth=1; +color="#008000"; +class="consequence"; +]; +}" +`; + +exports[`Python: While: DOT Snapshot 1`] = ` +"digraph "" { + node [shape=box, color="#000000"]; + edge [headport=n tailport=s] + bgcolor="#ffffff" + node0 [style="filled"; +label=""; +id="node0"; +shape="invhouse"; +class="entry"; +fillcolor="#48AB30"; +height=0.5; +]; + node1 [style="filled"; +label=""; +id="node1"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node6 [style="filled"; + node2 [style="filled"; label=""; -id="node6"; +id="node2"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node7 [style="filled"; -label=""; -id="node7"; -shape="house"; -class="exit"; -fillcolor="#AB3030"; -height=0.5; -]; - node9 [style="filled"; + node4 [style="filled"; label=""; -id="node9"; +id="node4"; shape="house"; class="exit"; fillcolor="#AB3030"; height=0.6; ]; - node2 -> node3 [penwidth=1; -color="#0000ff"; -style="invis"; -headport="e"; -tailport="w"; -]; - node2 -> node4 [penwidth=1; -color="#0000ff"; -style="invis"; -headport="e"; -tailport="w"; -]; - node2 -> node5 [penwidth=1; -color="#0000ff"; -style="invis"; -headport="e"; -tailport="w"; -]; - node5 -> node6 [penwidth=1; -color="#0000ff"; -class="regular"; -]; - node6 -> node7 [penwidth=1; -color="#0000ff"; -class="regular"; -]; - node2 -> node8 [penwidth=1; -color="#0000ff"; -class="regular"; -]; - node3 -> node8 [penwidth=1; -color="#0000ff"; -class="regular"; + node1 -> node2 [penwidth=1; +color="#008000"; +class="consequence"; ]; - node4 -> node8 [penwidth=1; + node1 -> node2 [penwidth=2; color="#0000ff"; class="regular"; +dir="back"; +headport="s"; +tailport="n"; ]; - node0 -> node2 [penwidth=1; + node0 -> node1 [penwidth=1; color="#0000ff"; class="regular"; ]; - node8 -> node9 [penwidth=1; -color="#0000ff"; -class="regular"; + node1 -> node4 [penwidth=1; +color="#ff0000"; +class="alternative"; ]; }" `; -exports[`Python: try_except_else_finally: DOT Snapshot 1`] = ` +exports[`Python: WhileContinue: DOT Snapshot 1`] = ` "digraph "" { node [shape=box, color="#000000"]; edge [headport=n tailport=s] bgcolor="#ffffff" -subgraph cluster_0 { -penwidth=0; -color="#ffffff"; -bgcolor="#ddddff"; -class="tryComplex"; - node4 [style="filled"; + node0 [style="filled"; label=""; -id="node4"; +id="node0"; +shape="invhouse"; +class="entry"; +fillcolor="#48AB30"; +height=0.5; +]; + node1 [style="filled"; +label=""; +id="node1"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - -subgraph cluster_1 { -penwidth=0; -color="#ffffff"; -bgcolor="#ddffdd"; -class="try"; node2 [style="filled"; label=""; id="node2"; shape="box"; class="default"; fillcolor="#d3d3d3"; -height=0.3; +height=0.6; +]; + node8 [style="filled"; +label=""; +id="node8"; +shape="house"; +class="exit"; +fillcolor="#AB3030"; +height=0.6; ]; - -} - -subgraph cluster_2 { -penwidth=0; -color="#ffffff"; -bgcolor="#ffdddd"; -class="except"; node3 [style="filled"; label=""; id="node3"; @@ -5059,26 +4930,57 @@ class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - -} - -subgraph cluster_3 { -penwidth=0; -color="#ffffff"; -bgcolor="#ffffdd"; -class="finally"; - node5 [style="filled"; + node6 [style="filled"; label=""; -id="node5"; +id="node6"; shape="box"; class="default"; fillcolor="#d3d3d3"; -height=0.3; +height=0.6; ]; + node2 -> node3 [penwidth=1; +color="#008000"; +class="consequence"; +]; + node1 -> node6 [penwidth=2; +color="#0000ff"; +class="regular"; +dir="back"; +headport="s"; +tailport="n"; +]; + node1 -> node3 [penwidth=2; +color="#0000ff"; +class="regular"; +dir="back"; +headport="s"; +tailport="n"; +]; + node0 -> node1 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node1 -> node2 [penwidth=1; +color="#008000"; +class="consequence"; +]; + node1 -> node8 [penwidth=1; +color="#ff0000"; +class="alternative"; +]; + node2 -> node6 [penwidth=1; +color="#ff0000"; +class="alternative"; +]; +}" +`; -} - -} node0 [style="filled"; +exports[`Python: WhileBreak: DOT Snapshot 1`] = ` +"digraph "" { + node [shape=box, color="#000000"]; + edge [headport=n tailport=s] + bgcolor="#ffffff" + node0 [style="filled"; label=""; id="node0"; shape="invhouse"; @@ -5086,25 +4988,33 @@ class="entry"; fillcolor="#48AB30"; height=0.5; ]; - node2 [style="filled"; + node1 [style="filled"; label=""; -id="node2"; +id="node1"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node3 [style="filled"; + node2 [style="filled"; label=""; -id="node3"; +id="node2"; shape="box"; class="default"; fillcolor="#d3d3d3"; -height=0.3; +height=0.6; ]; - node4 [style="filled"; + node7 [style="filled"; label=""; -id="node4"; +id="node7"; +shape="house"; +class="exit"; +fillcolor="#AB3030"; +height=0.6; +]; + node3 [style="filled"; +label=""; +id="node3"; shape="box"; class="default"; fillcolor="#d3d3d3"; @@ -5117,389 +5027,299 @@ shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; -]; - node6 [style="filled"; -label=""; -id="node6"; -shape="house"; -class="exit"; -fillcolor="#AB3030"; -height=0.6; ]; node2 -> node3 [penwidth=1; -color="#0000ff"; -style="invis"; -headport="e"; -tailport="w"; +color="#008000"; +class="consequence"; ]; - node2 -> node4 [penwidth=1; -color="#0000ff"; -class="regular"; + node2 -> node5 [penwidth=1; +color="#ff0000"; +class="alternative"; ]; - node4 -> node5 [penwidth=1; + node1 -> node5 [penwidth=2; color="#0000ff"; class="regular"; +dir="back"; +headport="s"; +tailport="n"; ]; - node3 -> node5 [penwidth=1; + node0 -> node1 [penwidth=1; color="#0000ff"; class="regular"; ]; - node0 -> node2 [penwidth=1; -color="#0000ff"; -class="regular"; + node1 -> node2 [penwidth=1; +color="#008000"; +class="consequence"; ]; - node5 -> node6 [penwidth=1; + node1 -> node7 [penwidth=1; +color="#ff0000"; +class="alternative"; +]; + node3 -> node7 [penwidth=1; color="#0000ff"; class="regular"; ]; }" `; -exports[`Python: massive_try_except_else_finally: DOT Snapshot 1`] = ` +exports[`Python: WhileElse: DOT Snapshot 1`] = ` "digraph "" { node [shape=box, color="#000000"]; edge [headport=n tailport=s] bgcolor="#ffffff" -subgraph cluster_0 { -penwidth=0; -color="#ffffff"; -bgcolor="#ddddff"; -class="tryComplex"; - node12 [style="filled"; + node0 [style="filled"; label=""; -id="node12"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -height=0.6; +id="node0"; +shape="invhouse"; +class="entry"; +fillcolor="#48AB30"; +height=0.5; ]; - node13 [style="filled"; + node1 [style="filled"; label=""; -id="node13"; +id="node1"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node14 [style="filled"; + node2 [style="filled"; label=""; -id="node14"; +id="node2"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node16 [style="filled"; + node5 [style="filled"; label=""; -id="node16"; +id="node5"; +shape="house"; +class="exit"; +fillcolor="#AB3030"; +height=0.8999999999999999; +]; + node1 -> node2 [penwidth=1; +color="#008000"; +class="consequence"; +]; + node1 -> node2 [penwidth=2; +color="#0000ff"; +class="regular"; +dir="back"; +headport="s"; +tailport="n"; +]; + node0 -> node1 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node1 -> node5 [penwidth=1; +color="#ff0000"; +class="alternative"; +]; +}" +`; + +exports[`Python: WhileElseBreak: DOT Snapshot 1`] = ` +"digraph "" { + node [shape=box, color="#000000"]; + edge [headport=n tailport=s] + bgcolor="#ffffff" + node0 [style="filled"; +label=""; +id="node0"; +shape="invhouse"; +class="entry"; +fillcolor="#48AB30"; +height=0.5; +]; + node1 [style="filled"; +label=""; +id="node1"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node17 [style="filled"; + node7 [style="filled"; label=""; -id="node17"; +id="node7"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - -subgraph cluster_1 { -penwidth=0; -color="#ffffff"; -bgcolor="#ddffdd"; -class="try"; node2 [style="filled"; label=""; id="node2"; shape="box"; class="default"; fillcolor="#d3d3d3"; -height=0.3; +height=0.6; ]; - -subgraph cluster_2 { -penwidth=0; -color="#ffffff"; -bgcolor="#ddddff"; -class="tryComplex"; - node5 [style="filled"; + node3 [style="filled"; label=""; -id="node5"; +id="node3"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - -subgraph cluster_3 { -penwidth=0; -color="#ffffff"; -bgcolor="#ddffdd"; -class="try"; - node3 [style="filled"; + node9 [style="filled"; label=""; -id="node3"; +id="node9"; +shape="house"; +class="exit"; +fillcolor="#AB3030"; +height=0.6; +]; + node6 [style="filled"; +label=""; +id="node6"; shape="box"; class="default"; fillcolor="#d3d3d3"; -height=0.3; +height=0.6; ]; - -} - -subgraph cluster_4 { -penwidth=0; -color="#ffffff"; -bgcolor="#ffdddd"; -class="except"; - node4 [style="filled"; -label=""; -id="node4"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -height=0.3; + node2 -> node3 [penwidth=1; +color="#008000"; +class="consequence"; ]; - -} - -subgraph cluster_5 { -penwidth=0; -color="#ffffff"; -bgcolor="#ffffdd"; -class="finally"; - node6 [style="filled"; -label=""; -id="node6"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -height=0.3; + node1 -> node7 [penwidth=1; +color="#ff0000"; +class="alternative"; ]; - -} - -} - -} - -subgraph cluster_6 { -penwidth=0; -color="#ffffff"; -bgcolor="#ffdddd"; -class="except"; - node7 [style="filled"; -label=""; -id="node7"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -height=0.3; + node1 -> node6 [penwidth=2; +color="#0000ff"; +class="regular"; +dir="back"; +headport="s"; +tailport="n"; ]; - -subgraph cluster_7 { -penwidth=0; -color="#ffffff"; -bgcolor="#ddddff"; -class="tryComplex"; - node10 [style="filled"; -label=""; -id="node10"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -height=0.3; + node0 -> node1 [penwidth=1; +color="#0000ff"; +class="regular"; ]; - -subgraph cluster_8 { -penwidth=0; -color="#ffffff"; -bgcolor="#ddffdd"; -class="try"; - node8 [style="filled"; -label=""; -id="node8"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -height=0.3; + node1 -> node2 [penwidth=1; +color="#008000"; +class="consequence"; ]; - -} - -subgraph cluster_9 { -penwidth=0; -color="#ffffff"; -bgcolor="#ffdddd"; -class="except"; - node9 [style="filled"; -label=""; -id="node9"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -height=0.3; + node7 -> node9 [penwidth=1; +color="#0000ff"; +class="regular"; ]; - -} - -subgraph cluster_10 { -penwidth=0; -color="#ffffff"; -bgcolor="#ffffdd"; -class="finally"; - node11 [style="filled"; -label=""; -id="node11"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -height=0.3; + node3 -> node9 [penwidth=1; +color="#0000ff"; +class="regular"; ]; + node2 -> node6 [penwidth=1; +color="#ff0000"; +class="alternative"; +]; +}" +`; -} - -} - -} - -subgraph cluster_11 { -penwidth=6; -color="#ffffff"; -bgcolor="#ddddff"; -class="tryComplex"; - -subgraph cluster_12 { -penwidth=0; -color="#ffffff"; -bgcolor="#ddffdd"; -class="try"; - node18 [style="filled"; +exports[`Python: Match: DOT Snapshot 1`] = ` +"digraph "" { + node [shape=box, color="#000000"]; + edge [headport=n tailport=s] + bgcolor="#ffffff" + node1 [style="filled"; label=""; -id="node18"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -height=0.3; +id="node1"; +shape="invhouse"; +class="entry"; +fillcolor="#48AB30"; +height=0.6; ]; - -} - -subgraph cluster_13 { -penwidth=0; -color="#ffffff"; -bgcolor="#ffffdd"; -class="finally"; - node19 [style="filled"; + node4 [style="filled"; label=""; -id="node19"; +id="node4"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - -} - -} - -subgraph cluster_14 { -penwidth=0; -color="#ffffff"; -bgcolor="#ffffdd"; -class="finally"; - node20 [style="filled"; + node7 [style="filled"; label=""; -id="node20"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -height=0.3; +id="node7"; +shape="house"; +class="exit"; +fillcolor="#AB3030"; +height=0.6; ]; - -subgraph cluster_15 { -penwidth=0; -color="#ffffff"; -bgcolor="#ffddff"; -class="with"; - node22 [style="filled"; + node3 [style="filled"; label=""; -id="node22"; +id="node3"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node21 [style="filled"; + node6 [style="filled"; label=""; -id="node21"; +id="node6"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node23 [style="filled"; + node5 [style="filled"; label=""; -id="node23"; +id="node5"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node22 -> node21 [penwidth=1; + node4 -> node3 [penwidth=1; color="#008000"; class="consequence"; ]; - node22 -> node21 [penwidth=2; -color="#0000ff"; -class="regular"; -dir="back"; -headport="s"; -tailport="n"; -]; - node22 -> node23 [penwidth=1; + node1 -> node4 [penwidth=1; color="#ff0000"; class="alternative"; ]; - -} - -} - node12 -> node13 [penwidth=1; + node6 -> node5 [penwidth=1; color="#008000"; class="consequence"; ]; - node13 -> node16 [penwidth=1; -color="#0000ff"; -class="regular"; + node4 -> node6 [penwidth=1; +color="#ff0000"; +class="alternative"; ]; - node12 -> node14 [penwidth=1; + node1 -> node7 [penwidth=1; color="#ff0000"; class="alternative"; ]; - node14 -> node16 [penwidth=1; + node3 -> node7 [penwidth=1; color="#0000ff"; class="regular"; ]; - -} node0 [style="filled"; -label=""; -id="node0"; -shape="invhouse"; -class="entry"; -fillcolor="#48AB30"; -height=0.5; + node5 -> node7 [penwidth=1; +color="#0000ff"; +class="regular"; ]; - node3 [style="filled"; -label=""; -id="node3"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -height=0.3; + node6 -> node7 [penwidth=1; +color="#ff0000"; +class="alternative"; +]; +}" +`; + +exports[`Python: MatchMultiPattern: DOT Snapshot 1`] = ` +"digraph "" { + node [shape=box, color="#000000"]; + edge [headport=n tailport=s] + bgcolor="#ffffff" + node1 [style="filled"; +label=""; +id="node1"; +shape="invhouse"; +class="entry"; +fillcolor="#48AB30"; +height=0.6; ]; node4 [style="filled"; label=""; @@ -5509,21 +5329,21 @@ class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node5 [style="filled"; + node7 [style="filled"; label=""; -id="node5"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -height=0.3; +id="node7"; +shape="house"; +class="exit"; +fillcolor="#AB3030"; +height=0.6; ]; - node8 [style="filled"; + node3 [style="filled"; label=""; -id="node8"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -height=0.3; +id="node3"; +shape="house"; +class="exit"; +fillcolor="#AB3030"; +height=0.5; ]; node6 [style="filled"; label=""; @@ -5533,232 +5353,218 @@ class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node9 [style="filled"; + node5 [style="filled"; label=""; -id="node9"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -height=0.3; +id="node5"; +shape="house"; +class="exit"; +fillcolor="#AB3030"; +height=0.5; ]; - node10 [style="filled"; + node4 -> node3 [penwidth=1; +color="#008000"; +class="consequence"; +]; + node1 -> node4 [penwidth=1; +color="#ff0000"; +class="alternative"; +]; + node6 -> node5 [penwidth=1; +color="#008000"; +class="consequence"; +]; + node4 -> node6 [penwidth=1; +color="#ff0000"; +class="alternative"; +]; + node1 -> node7 [penwidth=1; +color="#ff0000"; +class="alternative"; +]; + node6 -> node7 [penwidth=1; +color="#ff0000"; +class="alternative"; +]; +}" +`; + +exports[`Python: Return: DOT Snapshot 1`] = ` +"digraph "" { + node [shape=box, color="#000000"]; + edge [headport=n tailport=s] + bgcolor="#ffffff" + node1 [style="filled"; label=""; -id="node10"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -height=0.3; +id="node1"; +shape="invhouse"; +class="entry"; +fillcolor="#48AB30"; +height=0.8999999999999999; ]; node2 [style="filled"; label=""; id="node2"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -height=0.3; +shape="house"; +class="exit"; +fillcolor="#AB3030"; +height=0.5; ]; - node11 [style="filled"; + node5 [style="filled"; label=""; -id="node11"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -height=0.3; +id="node5"; +shape="house"; +class="exit"; +fillcolor="#AB3030"; +height=0.6; ]; - node7 [style="filled"; -label=""; -id="node7"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -height=0.3; + node1 -> node2 [penwidth=1; +color="#008000"; +class="consequence"; ]; - node12 [style="filled"; + node1 -> node5 [penwidth=1; +color="#ff0000"; +class="alternative"; +]; +}" +`; + +exports[`Python: WithCluster: DOT Snapshot 1`] = ` +"digraph "" { + node [shape=box, color="#000000"]; + edge [headport=n tailport=s] + bgcolor="#ffffff" +subgraph cluster_0 { +penwidth=0; +color="#ffffff"; +bgcolor="#ffddff"; +class="with"; + node3 [style="filled"; label=""; -id="node12"; +id="node3"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.6; ]; - node20 [style="filled"; + node4 [style="filled"; label=""; -id="node20"; +id="node4"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node13 [style="filled"; + node7 [style="filled"; label=""; -id="node13"; +id="node7"; shape="box"; class="default"; fillcolor="#d3d3d3"; -height=0.3; +height=0.6; ]; - node14 [style="filled"; + node3 -> node4 [penwidth=1; +color="#008000"; +class="consequence"; +]; + node4 -> node7 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node3 -> node7 [penwidth=1; +color="#ff0000"; +class="alternative"; +]; + +}subgraph cluster_1 { +penwidth=0; +color="#ffffff"; +bgcolor="#ffddff"; +class="with"; + node9 [style="filled"; label=""; -id="node14"; +id="node9"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node22 [style="filled"; + +} node2 [style="filled"; label=""; -id="node22"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -height=0.3; +id="node2"; +shape="invhouse"; +class="entry"; +fillcolor="#48AB30"; +height=0.8999999999999999; ]; - node16 [style="filled"; + node3 [style="filled"; label=""; -id="node16"; +id="node3"; shape="box"; class="default"; fillcolor="#d3d3d3"; -height=0.3; +height=0.6; ]; - node21 [style="filled"; + node4 [style="filled"; label=""; -id="node21"; +id="node4"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node23 [style="filled"; + node7 [style="filled"; label=""; -id="node23"; +id="node7"; shape="box"; class="default"; fillcolor="#d3d3d3"; -height=0.3; +height=0.6; ]; - node18 [style="filled"; + node8 [style="filled"; label=""; -id="node18"; +id="node8"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node19 [style="filled"; + node9 [style="filled"; label=""; -id="node19"; +id="node9"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node24 [style="filled"; + node11 [style="filled"; label=""; -id="node24"; +id="node11"; shape="house"; class="exit"; fillcolor="#AB3030"; height=0.6; ]; - node17 [style="filled"; -label=""; -id="node17"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -height=0.3; -]; - node3 -> node4 [penwidth=1; -color="#0000ff"; -style="invis"; -headport="e"; -tailport="w"; -]; - node3 -> node5 [penwidth=1; + node8 -> node9 [penwidth=1; color="#0000ff"; class="regular"; ]; - node5 -> node6 [penwidth=1; + node7 -> node8 [penwidth=1; color="#0000ff"; class="regular"; ]; - node4 -> node6 [penwidth=1; + node2 -> node3 [penwidth=1; color="#0000ff"; class="regular"; ]; - node6 -> node2 [penwidth=1; -color="#0000ff"; -class="regular"; -]; - node8 -> node9 [penwidth=1; -color="#0000ff"; -style="invis"; -headport="e"; -tailport="w"; -]; - node8 -> node10 [penwidth=1; -color="#0000ff"; -class="regular"; -]; - node10 -> node11 [penwidth=1; -color="#0000ff"; -class="regular"; -]; - node9 -> node11 [penwidth=1; -color="#0000ff"; -class="regular"; -]; - node11 -> node7 [penwidth=1; -color="#0000ff"; -class="regular"; -]; - node3 -> node8 [penwidth=1; -color="#0000ff"; -style="invis"; -headport="e"; -tailport="w"; -]; - node18 -> node19 [penwidth=1; -color="#0000ff"; -class="regular"; -]; - node19 -> node17 [penwidth=1; -color="#0000ff"; -class="regular"; -]; - node16 -> node18 [penwidth=1; -color="#0000ff"; -class="regular"; -]; - node20 -> node22 [penwidth=1; -color="#0000ff"; -class="regular"; -]; - node17 -> node20 [penwidth=1; -color="#0000ff"; -class="regular"; -]; - node7 -> node20 [penwidth=1; -color="#0000ff"; -class="regular"; -]; - node0 -> node3 [penwidth=1; -color="#0000ff"; -class="regular"; -]; - node2 -> node12 [penwidth=1; -color="#0000ff"; -class="regular"; -]; - node23 -> node24 [penwidth=1; + node9 -> node11 [penwidth=1; color="#0000ff"; class="regular"; ]; }" `; -exports[`Python: try_finally: DOT Snapshot 1`] = ` +exports[`Python: WithNestedCluster: DOT Snapshot 1`] = ` "digraph "" { node [shape=box, color="#000000"]; edge [headport=n tailport=s] @@ -5766,22 +5572,8 @@ exports[`Python: try_finally: DOT Snapshot 1`] = ` subgraph cluster_0 { penwidth=0; color="#ffffff"; -bgcolor="#ddddff"; -class="tryComplex"; - node8 [style="filled"; -label=""; -id="node8"; -shape="house"; -class="exit"; -fillcolor="#AB3030"; -height=0.5; -]; - -subgraph cluster_1 { -penwidth=0; -color="#ffffff"; -bgcolor="#ddffdd"; -class="try"; +bgcolor="#ffddff"; +class="with"; node2 [style="filled"; label=""; id="node2"; @@ -5809,26 +5601,28 @@ height=0.6; node2 -> node3 [penwidth=1; color="#008000"; class="consequence"; +]; + node3 -> node6 [penwidth=1; +color="#0000ff"; +class="regular"; ]; node2 -> node6 [penwidth=1; color="#ff0000"; class="alternative"; ]; -} - -subgraph cluster_2 { +}subgraph cluster_1 { penwidth=0; color="#ffffff"; -bgcolor="#ffffdd"; -class="finally"; - node7 [style="filled"; +bgcolor="#ffddff"; +class="with"; + node8 [style="filled"; label=""; -id="node7"; +id="node8"; shape="box"; class="default"; fillcolor="#d3d3d3"; -height=0.3; +height=0.6; ]; node9 [style="filled"; label=""; @@ -5838,134 +5632,135 @@ class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - -} - -} node0 [style="filled"; + node16 [style="filled"; label=""; -id="node0"; -shape="invhouse"; -class="entry"; -fillcolor="#48AB30"; +id="node16"; +shape="house"; +class="exit"; +fillcolor="#AB3030"; height=0.5; ]; - node2 [style="filled"; + node18 [style="filled"; label=""; -id="node2"; +id="node18"; shape="box"; class="default"; fillcolor="#d3d3d3"; -height=0.6; +height=0.3; ]; - node3 [style="filled"; + +subgraph cluster_2 { +penwidth=6; +color="#ffffff"; +bgcolor="#ffddff"; +class="with"; + node10 [style="filled"; label=""; -id="node3"; +id="node10"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node7 [style="filled"; + node11 [style="filled"; label=""; -id="node7"; +id="node11"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node6 [style="filled"; + node13 [style="filled"; label=""; -id="node6"; +id="node13"; shape="box"; class="default"; fillcolor="#d3d3d3"; -height=0.6; +height=0.3; ]; - node8 [style="filled"; + node12 [style="filled"; label=""; -id="node8"; -shape="house"; -class="exit"; -fillcolor="#AB3030"; -height=0.5; +id="node12"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; ]; - node9 [style="filled"; + node15 [style="filled"; label=""; -id="node9"; +id="node15"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node10 [style="filled"; + node14 [style="filled"; label=""; -id="node10"; -shape="house"; -class="exit"; -fillcolor="#AB3030"; -height=0.6; +id="node14"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; ]; - node3 -> node7 [penwidth=1; -color="#0000ff"; -class="regular"; + node10 -> node11 [penwidth=1; +color="#ff0000"; +class="alternative"; ]; - node7 -> node8 [penwidth=1; -color="#0000ff"; -class="regular"; + node13 -> node12 [penwidth=1; +color="#008000"; +class="consequence"; ]; - node6 -> node9 [penwidth=1; + node12 -> node11 [penwidth=1; color="#0000ff"; class="regular"; ]; - node0 -> node2 [penwidth=1; -color="#0000ff"; -class="regular"; + node10 -> node13 [penwidth=1; +color="#ff0000"; +class="alternative"; ]; - node9 -> node10 [penwidth=1; + node15 -> node14 [penwidth=1; +color="#008000"; +class="consequence"; +]; + node14 -> node11 [penwidth=1; color="#0000ff"; class="regular"; ]; -}" -`; + node13 -> node15 [penwidth=1; +color="#ff0000"; +class="alternative"; +]; + node15 -> node11 [penwidth=1; +color="#ff0000"; +class="alternative"; +]; -exports[`Python: try_with_finally: DOT Snapshot 1`] = ` -"digraph "" { - node [shape=box, color="#000000"]; - edge [headport=n tailport=s] - bgcolor="#ffffff" -subgraph cluster_0 { -penwidth=0; -color="#ffffff"; -bgcolor="#ddddff"; -class="tryComplex"; - node6 [style="filled"; -label=""; -id="node6"; -shape="house"; -class="exit"; -fillcolor="#AB3030"; -height=0.5; +} + node8 -> node9 [penwidth=1; +color="#008000"; +class="consequence"; +]; + node8 -> node16 [penwidth=1; +color="#ff0000"; +class="alternative"; ]; -subgraph cluster_1 { -penwidth=0; -color="#ffffff"; -bgcolor="#ddffdd"; -class="try"; +} node1 [style="filled"; +label=""; +id="node1"; +shape="invhouse"; +class="entry"; +fillcolor="#48AB30"; +height=0.6; +]; node2 [style="filled"; label=""; id="node2"; shape="box"; class="default"; fillcolor="#d3d3d3"; -height=0.3; +height=0.6; ]; - -subgraph cluster_2 { -penwidth=0; -color="#ffffff"; -bgcolor="#ffddff"; -class="with"; node3 [style="filled"; label=""; id="node3"; @@ -5974,6879 +5769,9690 @@ class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - -} - -} - -subgraph cluster_3 { -penwidth=0; -color="#ffffff"; -bgcolor="#ffffdd"; -class="finally"; - node5 [style="filled"; + node6 [style="filled"; label=""; -id="node5"; +id="node6"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.6; +]; + node7 [style="filled"; +label=""; +id="node7"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - -} - -} node0 [style="filled"; + node8 [style="filled"; label=""; -id="node0"; -shape="invhouse"; -class="entry"; -fillcolor="#48AB30"; +id="node8"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.6; +]; + node9 [style="filled"; +label=""; +id="node9"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node16 [style="filled"; +label=""; +id="node16"; +shape="house"; +class="exit"; +fillcolor="#AB3030"; height=0.5; ]; - node2 [style="filled"; + node10 [style="filled"; label=""; -id="node2"; +id="node10"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node3 [style="filled"; + node11 [style="filled"; label=""; -id="node3"; +id="node11"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node5 [style="filled"; + node13 [style="filled"; label=""; -id="node5"; +id="node13"; shape="box"; class="default"; fillcolor="#d3d3d3"; height=0.3; ]; - node6 [style="filled"; + node18 [style="filled"; label=""; -id="node6"; +id="node18"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node12 [style="filled"; +label=""; +id="node12"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node15 [style="filled"; +label=""; +id="node15"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node19 [style="filled"; +label=""; +id="node19"; shape="house"; class="exit"; fillcolor="#AB3030"; height=0.5; ]; - node2 -> node3 [penwidth=1; + node14 [style="filled"; +label=""; +id="node14"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node9 -> node10 [penwidth=1; color="#0000ff"; class="regular"; ]; - node3 -> node5 [penwidth=1; + node11 -> node18 [penwidth=1; color="#0000ff"; class="regular"; ]; - node5 -> node6 [penwidth=1; + node6 -> node7 [penwidth=1; color="#0000ff"; class="regular"; ]; - node0 -> node2 [penwidth=1; + node18 -> node19 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node1 -> node2 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node7 -> node8 [penwidth=1; color="#0000ff"; class="regular"; ]; }" `; -exports[`C: trivial: Segmentation 1`] = ` -[ - { - "start": 0, - "value": "node2", - }, - { - "start": 15, - "value": "node2", - }, - { - "start": 32, - "value": "node2", - }, -] +exports[`Python: raise_exception: DOT Snapshot 1`] = ` +"digraph "" { + node [shape=box, color="#000000"]; + edge [headport=n tailport=s] + bgcolor="#ffffff" + node0 [style="filled"; +label=""; +id="node0"; +shape="invhouse"; +class="entry"; +fillcolor="#48AB30"; +height=0.5; +]; + node1 [style="filled"; +label=""; +id="node1"; +shape="triangle"; +class="throw"; +fillcolor="#ffdddd"; +height=0.5; +]; + node0 -> node1 [penwidth=1; +color="#0000ff"; +class="regular"; +]; +}" `; -exports[`C: simpleIf: Segmentation 1`] = ` -[ - { - "start": 0, - "value": "node1", - }, - { - "start": 49, - "value": "node1", - }, - { - "start": 71, - "value": "node1", - }, - { - "start": 74, - "value": "node1", - }, - { - "start": 77, - "value": "node2", - }, - { - "start": 78, - "value": "node1", - }, - { - "start": 78, - "value": "node2", - }, - { - "start": 85, - "value": "node1", - }, - { - "start": 85, - "value": "node1", - }, - { - "start": 87, - "value": "node1", - }, - { - "start": 87, - "value": "node1", - }, -] -`; +exports[`Python: raise_again: DOT Snapshot 1`] = ` +"digraph "" { + node [shape=box, color="#000000"]; + edge [headport=n tailport=s] + bgcolor="#ffffff" +subgraph cluster_0 { +penwidth=0; +color="#ffffff"; +bgcolor="#ddddff"; +class="tryComplex"; -exports[`C: ifElse: Segmentation 1`] = ` -[ - { - "start": 0, - "value": "node1", - }, - { - "start": 114, - "value": "node1", - }, - { - "start": 134, - "value": "node1", - }, - { - "start": 137, - "value": "node1", - }, - { - "start": 140, - "value": "node2", - }, - { - "start": 141, - "value": "node1", - }, - { - "start": 141, - "value": "node2", - }, - { - "start": 148, - "value": "node3", - }, - { - "start": 154, - "value": "node1", - }, - { - "start": 154, - "value": "node3", - }, - { - "start": 157, - "value": "node3", - }, - { - "start": 160, - "value": "node4", - }, - { - "start": 161, - "value": "node3", +subgraph cluster_1 { +penwidth=0; +color="#ffffff"; +bgcolor="#ddffdd"; +class="try"; + node2 [style="filled"; +label=""; +id="node2"; +shape="triangle"; +class="throw"; +fillcolor="#ffdddd"; +height=0.3; +]; + +} + +subgraph cluster_2 { +penwidth=0; +color="#ffffff"; +bgcolor="#ffdddd"; +class="except"; + node3 [style="filled"; +label=""; +id="node3"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.6; +]; + node4 [style="filled"; +label=""; +id="node4"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node6 [style="filled"; +label=""; +id="node6"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node3 -> node4 [penwidth=1; +color="#008000"; +class="consequence"; +]; + node4 -> node6 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node3 -> node6 [penwidth=1; +color="#ff0000"; +class="alternative"; +]; + +} + +} node0 [style="filled"; +label=""; +id="node0"; +shape="invhouse"; +class="entry"; +fillcolor="#48AB30"; +height=0.5; +]; + node2 [style="filled"; +label=""; +id="node2"; +shape="triangle"; +class="throw"; +fillcolor="#ffdddd"; +height=0.3; +]; + node3 [style="filled"; +label=""; +id="node3"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.6; +]; + node4 [style="filled"; +label=""; +id="node4"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node6 [style="filled"; +label=""; +id="node6"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node11 [style="filled"; +label=""; +id="node11"; +shape="house"; +class="exit"; +fillcolor="#AB3030"; +height=0.6; +]; + node0 -> node2 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node2 -> node3 [penwidth=1; +color="#0000ff"; +style="invis"; +headport="e"; +tailport="w"; +]; + node6 -> node11 [penwidth=1; +color="#0000ff"; +class="regular"; +]; +}" +`; + +exports[`Python: yield_value: DOT Snapshot 1`] = ` +"digraph "" { + node [shape=box, color="#000000"]; + edge [headport=n tailport=s] + bgcolor="#ffffff" + node0 [style="filled"; +label=""; +id="node0"; +shape="invhouse"; +class="entry"; +fillcolor="#48AB30"; +height=0.5; +]; + node2 [style="filled"; +label=""; +id="node2"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node1 [style="filled"; +label=""; +id="node1"; +shape="hexagon"; +class="yield"; +fillcolor="#00bfff"; +orientation=90; +height=0.3; +]; + node4 [style="filled"; +label=""; +id="node4"; +shape="house"; +class="exit"; +fillcolor="#AB3030"; +height=0.6; +]; + node2 -> node1 [penwidth=1; +color="#008000"; +class="consequence"; +]; + node2 -> node1 [penwidth=2; +color="#0000ff"; +class="regular"; +dir="back"; +headport="s"; +tailport="n"; +]; + node0 -> node2 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node2 -> node4 [penwidth=1; +color="#ff0000"; +class="alternative"; +]; +}" +`; + +exports[`Python: try_except: DOT Snapshot 1`] = ` +"digraph "" { + node [shape=box, color="#000000"]; + edge [headport=n tailport=s] + bgcolor="#ffffff" +subgraph cluster_0 { +penwidth=0; +color="#ffffff"; +bgcolor="#ddddff"; +class="tryComplex"; + +subgraph cluster_1 { +penwidth=0; +color="#ffffff"; +bgcolor="#ddffdd"; +class="try"; + node2 [style="filled"; +label=""; +id="node2"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + +} + +subgraph cluster_2 { +penwidth=0; +color="#ffffff"; +bgcolor="#ffdddd"; +class="except"; + node3 [style="filled"; +label=""; +id="node3"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + +} + +} node0 [style="filled"; +label=""; +id="node0"; +shape="invhouse"; +class="entry"; +fillcolor="#48AB30"; +height=0.5; +]; + node2 [style="filled"; +label=""; +id="node2"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node3 [style="filled"; +label=""; +id="node3"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node4 [style="filled"; +label=""; +id="node4"; +shape="house"; +class="exit"; +fillcolor="#AB3030"; +height=0.6; +]; + node2 -> node3 [penwidth=1; +color="#0000ff"; +style="invis"; +headport="e"; +tailport="w"; +]; + node0 -> node2 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node3 -> node4 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node2 -> node4 [penwidth=1; +color="#0000ff"; +class="regular"; +]; +}" +`; + +exports[`Python: try_except_finally: DOT Snapshot 1`] = ` +"digraph "" { + node [shape=box, color="#000000"]; + edge [headport=n tailport=s] + bgcolor="#ffffff" +subgraph cluster_0 { +penwidth=0; +color="#ffffff"; +bgcolor="#ddddff"; +class="tryComplex"; + +subgraph cluster_1 { +penwidth=0; +color="#ffffff"; +bgcolor="#ddffdd"; +class="try"; + node2 [style="filled"; +label=""; +id="node2"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + +} + +subgraph cluster_2 { +penwidth=0; +color="#ffffff"; +bgcolor="#ffdddd"; +class="except"; + node3 [style="filled"; +label=""; +id="node3"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + +} + +subgraph cluster_3 { +penwidth=0; +color="#ffffff"; +bgcolor="#ffffdd"; +class="finally"; + node4 [style="filled"; +label=""; +id="node4"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + +} + +} node0 [style="filled"; +label=""; +id="node0"; +shape="invhouse"; +class="entry"; +fillcolor="#48AB30"; +height=0.5; +]; + node2 [style="filled"; +label=""; +id="node2"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node3 [style="filled"; +label=""; +id="node3"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node4 [style="filled"; +label=""; +id="node4"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node5 [style="filled"; +label=""; +id="node5"; +shape="house"; +class="exit"; +fillcolor="#AB3030"; +height=0.6; +]; + node2 -> node3 [penwidth=1; +color="#0000ff"; +style="invis"; +headport="e"; +tailport="w"; +]; + node2 -> node4 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node3 -> node4 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node0 -> node2 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node4 -> node5 [penwidth=1; +color="#0000ff"; +class="regular"; +]; +}" +`; + +exports[`Python: try_many_except_finally: DOT Snapshot 1`] = ` +"digraph "" { + node [shape=box, color="#000000"]; + edge [headport=n tailport=s] + bgcolor="#ffffff" +subgraph cluster_0 { +penwidth=0; +color="#ffffff"; +bgcolor="#ddddff"; +class="tryComplex"; + node7 [style="filled"; +label=""; +id="node7"; +shape="house"; +class="exit"; +fillcolor="#AB3030"; +height=0.5; +]; + +subgraph cluster_1 { +penwidth=0; +color="#ffffff"; +bgcolor="#ddffdd"; +class="try"; + node2 [style="filled"; +label=""; +id="node2"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + +} + +subgraph cluster_2 { +penwidth=0; +color="#ffffff"; +bgcolor="#ffdddd"; +class="except"; + node3 [style="filled"; +label=""; +id="node3"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + +} + +subgraph cluster_3 { +penwidth=0; +color="#ffffff"; +bgcolor="#ffdddd"; +class="except"; + node4 [style="filled"; +label=""; +id="node4"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + +} + +subgraph cluster_4 { +penwidth=0; +color="#ffffff"; +bgcolor="#ffdddd"; +class="except"; + node5 [style="filled"; +label=""; +id="node5"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + +} + +subgraph cluster_5 { +penwidth=0; +color="#ffffff"; +bgcolor="#ffffdd"; +class="finally"; + node8 [style="filled"; +label=""; +id="node8"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node6 [style="filled"; +label=""; +id="node6"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + +} + +} node0 [style="filled"; +label=""; +id="node0"; +shape="invhouse"; +class="entry"; +fillcolor="#48AB30"; +height=0.5; +]; + node2 [style="filled"; +label=""; +id="node2"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node3 [style="filled"; +label=""; +id="node3"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node4 [style="filled"; +label=""; +id="node4"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node5 [style="filled"; +label=""; +id="node5"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node8 [style="filled"; +label=""; +id="node8"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node6 [style="filled"; +label=""; +id="node6"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node7 [style="filled"; +label=""; +id="node7"; +shape="house"; +class="exit"; +fillcolor="#AB3030"; +height=0.5; +]; + node9 [style="filled"; +label=""; +id="node9"; +shape="house"; +class="exit"; +fillcolor="#AB3030"; +height=0.6; +]; + node2 -> node3 [penwidth=1; +color="#0000ff"; +style="invis"; +headport="e"; +tailport="w"; +]; + node2 -> node4 [penwidth=1; +color="#0000ff"; +style="invis"; +headport="e"; +tailport="w"; +]; + node2 -> node5 [penwidth=1; +color="#0000ff"; +style="invis"; +headport="e"; +tailport="w"; +]; + node5 -> node6 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node6 -> node7 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node2 -> node8 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node3 -> node8 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node4 -> node8 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node0 -> node2 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node8 -> node9 [penwidth=1; +color="#0000ff"; +class="regular"; +]; +}" +`; + +exports[`Python: try_except_else_finally: DOT Snapshot 1`] = ` +"digraph "" { + node [shape=box, color="#000000"]; + edge [headport=n tailport=s] + bgcolor="#ffffff" +subgraph cluster_0 { +penwidth=0; +color="#ffffff"; +bgcolor="#ddddff"; +class="tryComplex"; + node4 [style="filled"; +label=""; +id="node4"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + +subgraph cluster_1 { +penwidth=0; +color="#ffffff"; +bgcolor="#ddffdd"; +class="try"; + node2 [style="filled"; +label=""; +id="node2"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + +} + +subgraph cluster_2 { +penwidth=0; +color="#ffffff"; +bgcolor="#ffdddd"; +class="except"; + node3 [style="filled"; +label=""; +id="node3"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + +} + +subgraph cluster_3 { +penwidth=0; +color="#ffffff"; +bgcolor="#ffffdd"; +class="finally"; + node5 [style="filled"; +label=""; +id="node5"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + +} + +} node0 [style="filled"; +label=""; +id="node0"; +shape="invhouse"; +class="entry"; +fillcolor="#48AB30"; +height=0.5; +]; + node2 [style="filled"; +label=""; +id="node2"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node3 [style="filled"; +label=""; +id="node3"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node4 [style="filled"; +label=""; +id="node4"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node5 [style="filled"; +label=""; +id="node5"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node6 [style="filled"; +label=""; +id="node6"; +shape="house"; +class="exit"; +fillcolor="#AB3030"; +height=0.6; +]; + node2 -> node3 [penwidth=1; +color="#0000ff"; +style="invis"; +headport="e"; +tailport="w"; +]; + node2 -> node4 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node4 -> node5 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node3 -> node5 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node0 -> node2 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node5 -> node6 [penwidth=1; +color="#0000ff"; +class="regular"; +]; +}" +`; + +exports[`Python: massive_try_except_else_finally: DOT Snapshot 1`] = ` +"digraph "" { + node [shape=box, color="#000000"]; + edge [headport=n tailport=s] + bgcolor="#ffffff" +subgraph cluster_0 { +penwidth=0; +color="#ffffff"; +bgcolor="#ddddff"; +class="tryComplex"; + node12 [style="filled"; +label=""; +id="node12"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.6; +]; + node13 [style="filled"; +label=""; +id="node13"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node14 [style="filled"; +label=""; +id="node14"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node16 [style="filled"; +label=""; +id="node16"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node17 [style="filled"; +label=""; +id="node17"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + +subgraph cluster_1 { +penwidth=0; +color="#ffffff"; +bgcolor="#ddffdd"; +class="try"; + node2 [style="filled"; +label=""; +id="node2"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + +subgraph cluster_2 { +penwidth=0; +color="#ffffff"; +bgcolor="#ddddff"; +class="tryComplex"; + node5 [style="filled"; +label=""; +id="node5"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + +subgraph cluster_3 { +penwidth=0; +color="#ffffff"; +bgcolor="#ddffdd"; +class="try"; + node3 [style="filled"; +label=""; +id="node3"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + +} + +subgraph cluster_4 { +penwidth=0; +color="#ffffff"; +bgcolor="#ffdddd"; +class="except"; + node4 [style="filled"; +label=""; +id="node4"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + +} + +subgraph cluster_5 { +penwidth=0; +color="#ffffff"; +bgcolor="#ffffdd"; +class="finally"; + node6 [style="filled"; +label=""; +id="node6"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + +} + +} + +} + +subgraph cluster_6 { +penwidth=0; +color="#ffffff"; +bgcolor="#ffdddd"; +class="except"; + node7 [style="filled"; +label=""; +id="node7"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + +subgraph cluster_7 { +penwidth=0; +color="#ffffff"; +bgcolor="#ddddff"; +class="tryComplex"; + node10 [style="filled"; +label=""; +id="node10"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + +subgraph cluster_8 { +penwidth=0; +color="#ffffff"; +bgcolor="#ddffdd"; +class="try"; + node8 [style="filled"; +label=""; +id="node8"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + +} + +subgraph cluster_9 { +penwidth=0; +color="#ffffff"; +bgcolor="#ffdddd"; +class="except"; + node9 [style="filled"; +label=""; +id="node9"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + +} + +subgraph cluster_10 { +penwidth=0; +color="#ffffff"; +bgcolor="#ffffdd"; +class="finally"; + node11 [style="filled"; +label=""; +id="node11"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + +} + +} + +} + +subgraph cluster_11 { +penwidth=6; +color="#ffffff"; +bgcolor="#ddddff"; +class="tryComplex"; + +subgraph cluster_12 { +penwidth=0; +color="#ffffff"; +bgcolor="#ddffdd"; +class="try"; + node18 [style="filled"; +label=""; +id="node18"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + +} + +subgraph cluster_13 { +penwidth=0; +color="#ffffff"; +bgcolor="#ffffdd"; +class="finally"; + node19 [style="filled"; +label=""; +id="node19"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + +} + +} + +subgraph cluster_14 { +penwidth=0; +color="#ffffff"; +bgcolor="#ffffdd"; +class="finally"; + node20 [style="filled"; +label=""; +id="node20"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + +subgraph cluster_15 { +penwidth=0; +color="#ffffff"; +bgcolor="#ffddff"; +class="with"; + node22 [style="filled"; +label=""; +id="node22"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node21 [style="filled"; +label=""; +id="node21"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node23 [style="filled"; +label=""; +id="node23"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node22 -> node21 [penwidth=1; +color="#008000"; +class="consequence"; +]; + node22 -> node21 [penwidth=2; +color="#0000ff"; +class="regular"; +dir="back"; +headport="s"; +tailport="n"; +]; + node22 -> node23 [penwidth=1; +color="#ff0000"; +class="alternative"; +]; + +} + +} + node12 -> node13 [penwidth=1; +color="#008000"; +class="consequence"; +]; + node13 -> node16 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node12 -> node14 [penwidth=1; +color="#ff0000"; +class="alternative"; +]; + node14 -> node16 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + +} node0 [style="filled"; +label=""; +id="node0"; +shape="invhouse"; +class="entry"; +fillcolor="#48AB30"; +height=0.5; +]; + node3 [style="filled"; +label=""; +id="node3"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node4 [style="filled"; +label=""; +id="node4"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node5 [style="filled"; +label=""; +id="node5"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node8 [style="filled"; +label=""; +id="node8"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node6 [style="filled"; +label=""; +id="node6"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node9 [style="filled"; +label=""; +id="node9"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node10 [style="filled"; +label=""; +id="node10"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node2 [style="filled"; +label=""; +id="node2"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node11 [style="filled"; +label=""; +id="node11"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node7 [style="filled"; +label=""; +id="node7"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node12 [style="filled"; +label=""; +id="node12"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.6; +]; + node20 [style="filled"; +label=""; +id="node20"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node13 [style="filled"; +label=""; +id="node13"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node14 [style="filled"; +label=""; +id="node14"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node22 [style="filled"; +label=""; +id="node22"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node16 [style="filled"; +label=""; +id="node16"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node21 [style="filled"; +label=""; +id="node21"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node23 [style="filled"; +label=""; +id="node23"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node18 [style="filled"; +label=""; +id="node18"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node19 [style="filled"; +label=""; +id="node19"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node24 [style="filled"; +label=""; +id="node24"; +shape="house"; +class="exit"; +fillcolor="#AB3030"; +height=0.6; +]; + node17 [style="filled"; +label=""; +id="node17"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node3 -> node4 [penwidth=1; +color="#0000ff"; +style="invis"; +headport="e"; +tailport="w"; +]; + node3 -> node5 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node5 -> node6 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node4 -> node6 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node6 -> node2 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node8 -> node9 [penwidth=1; +color="#0000ff"; +style="invis"; +headport="e"; +tailport="w"; +]; + node8 -> node10 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node10 -> node11 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node9 -> node11 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node11 -> node7 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node3 -> node8 [penwidth=1; +color="#0000ff"; +style="invis"; +headport="e"; +tailport="w"; +]; + node18 -> node19 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node19 -> node17 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node16 -> node18 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node20 -> node22 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node17 -> node20 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node7 -> node20 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node0 -> node3 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node2 -> node12 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node23 -> node24 [penwidth=1; +color="#0000ff"; +class="regular"; +]; +}" +`; + +exports[`Python: try_finally: DOT Snapshot 1`] = ` +"digraph "" { + node [shape=box, color="#000000"]; + edge [headport=n tailport=s] + bgcolor="#ffffff" +subgraph cluster_0 { +penwidth=0; +color="#ffffff"; +bgcolor="#ddddff"; +class="tryComplex"; + node8 [style="filled"; +label=""; +id="node8"; +shape="house"; +class="exit"; +fillcolor="#AB3030"; +height=0.5; +]; + +subgraph cluster_1 { +penwidth=0; +color="#ffffff"; +bgcolor="#ddffdd"; +class="try"; + node2 [style="filled"; +label=""; +id="node2"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.6; +]; + node3 [style="filled"; +label=""; +id="node3"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node6 [style="filled"; +label=""; +id="node6"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.6; +]; + node2 -> node3 [penwidth=1; +color="#008000"; +class="consequence"; +]; + node2 -> node6 [penwidth=1; +color="#ff0000"; +class="alternative"; +]; + +} + +subgraph cluster_2 { +penwidth=0; +color="#ffffff"; +bgcolor="#ffffdd"; +class="finally"; + node7 [style="filled"; +label=""; +id="node7"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node9 [style="filled"; +label=""; +id="node9"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + +} + +} node0 [style="filled"; +label=""; +id="node0"; +shape="invhouse"; +class="entry"; +fillcolor="#48AB30"; +height=0.5; +]; + node2 [style="filled"; +label=""; +id="node2"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.6; +]; + node3 [style="filled"; +label=""; +id="node3"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node7 [style="filled"; +label=""; +id="node7"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node6 [style="filled"; +label=""; +id="node6"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.6; +]; + node8 [style="filled"; +label=""; +id="node8"; +shape="house"; +class="exit"; +fillcolor="#AB3030"; +height=0.5; +]; + node9 [style="filled"; +label=""; +id="node9"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node10 [style="filled"; +label=""; +id="node10"; +shape="house"; +class="exit"; +fillcolor="#AB3030"; +height=0.6; +]; + node3 -> node7 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node7 -> node8 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node6 -> node9 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node0 -> node2 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node9 -> node10 [penwidth=1; +color="#0000ff"; +class="regular"; +]; +}" +`; + +exports[`Python: try_with_finally: DOT Snapshot 1`] = ` +"digraph "" { + node [shape=box, color="#000000"]; + edge [headport=n tailport=s] + bgcolor="#ffffff" +subgraph cluster_0 { +penwidth=0; +color="#ffffff"; +bgcolor="#ddddff"; +class="tryComplex"; + node6 [style="filled"; +label=""; +id="node6"; +shape="house"; +class="exit"; +fillcolor="#AB3030"; +height=0.5; +]; + +subgraph cluster_1 { +penwidth=0; +color="#ffffff"; +bgcolor="#ddffdd"; +class="try"; + node2 [style="filled"; +label=""; +id="node2"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + +subgraph cluster_2 { +penwidth=0; +color="#ffffff"; +bgcolor="#ffddff"; +class="with"; + node3 [style="filled"; +label=""; +id="node3"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + +} + +} + +subgraph cluster_3 { +penwidth=0; +color="#ffffff"; +bgcolor="#ffffdd"; +class="finally"; + node5 [style="filled"; +label=""; +id="node5"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + +} + +} node0 [style="filled"; +label=""; +id="node0"; +shape="invhouse"; +class="entry"; +fillcolor="#48AB30"; +height=0.5; +]; + node2 [style="filled"; +label=""; +id="node2"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node3 [style="filled"; +label=""; +id="node3"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node5 [style="filled"; +label=""; +id="node5"; +shape="box"; +class="default"; +fillcolor="#d3d3d3"; +height=0.3; +]; + node6 [style="filled"; +label=""; +id="node6"; +shape="house"; +class="exit"; +fillcolor="#AB3030"; +height=0.5; +]; + node2 -> node3 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node3 -> node5 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node5 -> node6 [penwidth=1; +color="#0000ff"; +class="regular"; +]; + node0 -> node2 [penwidth=1; +color="#0000ff"; +class="regular"; +]; +}" +`; + +exports[`C: trivial: Segmentation 1`] = ` +[ + { + "start": 0, + "value": "node2", + }, + { + "start": 15, + "value": "node2", + }, + { + "start": 32, + "value": "node2", + }, +] +`; + +exports[`C: simpleIf: Segmentation 1`] = ` +[ + { + "start": 0, + "value": "node1", + }, + { + "start": 49, + "value": "node1", + }, + { + "start": 71, + "value": "node1", + }, + { + "start": 74, + "value": "node1", + }, + { + "start": 77, + "value": "node2", + }, + { + "start": 78, + "value": "node1", + }, + { + "start": 78, + "value": "node2", + }, + { + "start": 85, + "value": "node1", + }, + { + "start": 85, + "value": "node1", + }, + { + "start": 87, + "value": "node1", + }, + { + "start": 87, + "value": "node1", + }, +] +`; + +exports[`C: ifElse: Segmentation 1`] = ` +[ + { + "start": 0, + "value": "node1", + }, + { + "start": 114, + "value": "node1", + }, + { + "start": 134, + "value": "node1", + }, + { + "start": 137, + "value": "node1", + }, + { + "start": 140, + "value": "node2", + }, + { + "start": 141, + "value": "node1", + }, + { + "start": 141, + "value": "node2", + }, + { + "start": 148, + "value": "node3", + }, + { + "start": 154, + "value": "node1", + }, + { + "start": 154, + "value": "node3", + }, + { + "start": 157, + "value": "node3", + }, + { + "start": 160, + "value": "node4", + }, + { + "start": 161, + "value": "node3", + }, + { + "start": 161, + "value": "node4", + }, + { + "start": 168, + "value": "node5", + }, + { + "start": 169, + "value": "node3", + }, + { + "start": 169, + "value": "node5", + }, + { + "start": 174, + "value": "node5", + }, + { + "start": 181, + "value": "node5", + }, + { + "start": 181, + "value": "node3", + }, + { + "start": 181, + "value": "node1", + }, + { + "start": 181, + "value": "node1", + }, + { + "start": 183, + "value": "node1", + }, + { + "start": 183, + "value": "node1", + }, +] +`; + +exports[`C: forever: Segmentation 1`] = ` +[ + { + "start": 0, + "value": "node2", + }, + { + "start": 210, + "value": "node2", + }, + { + "start": 231, + "value": "node2", + }, + { + "start": 239, + "value": "node4", + }, + { + "start": 240, + "value": "node2", + }, + { + "start": 240, + "value": "node4", + }, + { + "start": 247, + "value": "node2", + }, + { + "start": 247, + "value": "node2", + }, + { + "start": 249, + "value": "node2", + }, + { + "start": 249, + "value": "node2", + }, +] +`; + +exports[`C: forever2: Segmentation 1`] = ` +[ + { + "start": 0, + "value": "node1", + }, + { + "start": 276, + "value": "node1", + }, + { + "start": 298, + "value": "node1", + }, + { + "start": 303, + "value": "node1", + }, + { + "start": 313, + "value": "node1", + }, + { + "start": 313, + "value": "node1", + }, + { + "start": 314, + "value": "node1", + }, + { + "start": 315, + "value": "node2", + }, + { + "start": 318, + "value": "node2", + }, + { + "start": 319, + "value": "node2", + }, + { + "start": 320, + "value": "node1", + }, + { + "start": 320, + "value": "node2", + }, + { + "start": 327, + "value": "node1", + }, + { + "start": 327, + "value": "node1", + }, + { + "start": 329, + "value": "node1", + }, + { + "start": 329, + "value": "node1", + }, +] +`; + +exports[`C: forLoop: Segmentation 1`] = ` +[ + { + "start": 0, + "value": "node1", + }, + { + "start": 388, + "value": "node1", + }, + { + "start": 409, + "value": "node1", + }, + { + "start": 414, + "value": "node1", + }, + { + "start": 424, + "value": "node1", + }, + { + "start": 424, + "value": "node1", + }, + { + "start": 425, + "value": "node2", + }, + { + "start": 431, + "value": "node2", + }, + { + "start": 432, + "value": "node2", + }, + { + "start": 432, + "value": "node1", + }, + { + "start": 433, + "value": "node3", + }, + { + "start": 436, + "value": "node3", + }, + { + "start": 437, + "value": "node3", + }, + { + "start": 438, + "value": "node1", + }, + { + "start": 438, + "value": "node3", + }, + { + "start": 481, + "value": "node1", + }, + { + "start": 481, + "value": "node1", + }, + { + "start": 483, + "value": "node1", + }, + { + "start": 483, + "value": "node1", + }, +] +`; + +exports[`C: whileLoop: Segmentation 1`] = ` +[ + { + "start": 0, + "value": "node0", + }, + { + "start": 510, + "value": "node0", + }, + { + "start": 533, + "value": "node1", + }, + { + "start": 539, + "value": "node1", + }, + { + "start": 544, + "value": "node1", + }, + { + "start": 544, + "value": "node1", + }, + { + "start": 545, + "value": "node2", + }, + { + "start": 552, + "value": "node2", + }, + { + "start": 552, + "value": "node1", + }, + { + "start": 552, + "value": "node1", + }, + { + "start": 554, + "value": "node0", + }, + { + "start": 554, + "value": "node0", + }, +] +`; + +exports[`C: doWhile: Segmentation 1`] = ` +[ + { + "start": 0, + "value": "node0", + }, + { + "start": 581, + "value": "node0", + }, + { + "start": 602, + "value": "node1", + }, + { + "start": 605, + "value": "node1", + }, + { + "start": 612, + "value": "node1", + }, + { + "start": 612, + "value": "node1", + }, + { + "start": 619, + "value": "node1", + }, + { + "start": 624, + "value": "node1", + }, + { + "start": 624, + "value": "node1", + }, + { + "start": 625, + "value": "node1", + }, + { + "start": 627, + "value": "node0", + }, + { + "start": 627, + "value": "node0", + }, +] +`; + +exports[`C: gotoA: Segmentation 1`] = ` +[ + { + "start": 0, + "value": "node0", + }, + { + "start": 654, + "value": "node0", + }, + { + "start": 669, + "value": "node2", + }, + { + "start": 680, + "value": "node2", + }, + { + "start": 683, + "value": "node2", + }, + { + "start": 686, + "value": "node3", + }, + { + "start": 687, + "value": "node2", + }, + { + "start": 687, + "value": "node3", + }, + { + "start": 697, + "value": "node3", + }, + { + "start": 708, + "value": "node3", + }, + { + "start": 714, + "value": "node2", + }, + { + "start": 714, + "value": "node2", + }, + { + "start": 714, + "value": "node2", + }, + { + "start": 716, + "value": "node0", + }, + { + "start": 716, + "value": "node0", + }, +] +`; + +exports[`C: switch_1: Segmentation 1`] = ` +[ + { + "start": 0, + "value": "node1", + }, + { + "start": 765, + "value": "node1", + }, + { + "start": 787, + "value": "node1", + }, + { + "start": 799, + "value": "node1", + }, + { + "start": 804, + "value": "node1", + }, + { + "start": 804, + "value": "node1", + }, + { + "start": 811, + "value": "Not found", + }, + { + "start": 820, + "value": "node1", + }, + { + "start": 838, + "value": "node2", + }, + { + "start": 852, + "value": "node1", + }, + { + "start": 852, + "value": "node3", + }, + { + "start": 857, + "value": "node1", + }, + { + "start": 857, + "value": "node3", + }, + { + "start": 864, + "value": "node5", + }, + { + "start": 869, + "value": "node1", + }, + { + "start": 869, + "value": "node5", + }, + { + "start": 876, + "value": "Not found", + }, + { + "start": 885, + "value": "node5", + }, + { + "start": 903, + "value": "node6", + }, + { + "start": 917, + "value": "node5", + }, + { + "start": 917, + "value": "node5", + }, + { + "start": 923, + "value": "node1", + }, + { + "start": 923, + "value": "node1", + }, + { + "start": 925, + "value": "node1", + }, + { + "start": 925, + "value": "node1", + }, +] +`; + +exports[`C: switch_2: Segmentation 1`] = ` +[ + { + "start": 0, + "value": "node1", + }, + { + "start": 952, + "value": "node1", + }, + { + "start": 974, + "value": "node1", + }, + { + "start": 986, + "value": "node1", + }, + { + "start": 991, + "value": "node1", + }, + { + "start": 991, + "value": "node1", + }, + { + "start": 998, + "value": "node2", + }, + { + "start": 1007, + "value": "node2", + }, + { + "start": 1013, + "value": "node1", + }, + { + "start": 1013, + "value": "node3", + }, + { + "start": 1018, + "value": "node1", + }, + { + "start": 1018, + "value": "node3", + }, + { + "start": 1025, + "value": "node5", + }, + { + "start": 1030, + "value": "node1", + }, + { + "start": 1030, + "value": "node5", + }, + { + "start": 1037, + "value": "node5", }, { - "start": 161, - "value": "node4", + "start": 1043, + "value": "node1", + }, + { + "start": 1043, + "value": "node1", + }, + { + "start": 1045, + "value": "node1", + }, + { + "start": 1045, + "value": "node1", + }, +] +`; + +exports[`C: ManyIfs: Segmentation 1`] = ` +[ + { + "start": 0, + "value": "node1", + }, + { + "start": 1073, + "value": "node1", + }, + { + "start": 1094, + "value": "node1", + }, + { + "start": 1097, + "value": "node1", + }, + { + "start": 1100, + "value": "node2", + }, + { + "start": 1101, + "value": "node1", + }, + { + "start": 1101, + "value": "node2", + }, + { + "start": 1108, + "value": "node1", + }, + { + "start": 1108, + "value": "node5", + }, + { + "start": 1114, + "value": "node1", + }, + { + "start": 1114, + "value": "node5", + }, + { + "start": 1117, + "value": "node5", + }, + { + "start": 1120, + "value": "node6", + }, + { + "start": 1121, + "value": "node5", + }, + { + "start": 1121, + "value": "node6", + }, + { + "start": 1128, + "value": "node7", + }, + { + "start": 1129, + "value": "node5", + }, + { + "start": 1129, + "value": "node7", + }, + { + "start": 1134, + "value": "node7", + }, + { + "start": 1141, + "value": "node7", + }, + { + "start": 1141, + "value": "node5", + }, + { + "start": 1141, + "value": "node10", + }, + { + "start": 1147, + "value": "node1", + }, + { + "start": 1147, + "value": "node10", + }, + { + "start": 1150, + "value": "node10", + }, + { + "start": 1153, + "value": "node11", + }, + { + "start": 1154, + "value": "node10", + }, + { + "start": 1154, + "value": "node11", + }, + { + "start": 1161, + "value": "node12", + }, + { + "start": 1167, + "value": "node10", + }, + { + "start": 1167, + "value": "node12", + }, + { + "start": 1170, + "value": "node12", + }, + { + "start": 1173, + "value": "node13", + }, + { + "start": 1174, + "value": "node12", + }, + { + "start": 1174, + "value": "node13", + }, + { + "start": 1181, + "value": "node12", + }, + { + "start": 1181, + "value": "node10", + }, + { + "start": 1181, + "value": "node16", + }, + { + "start": 1187, + "value": "node1", + }, + { + "start": 1187, + "value": "node16", + }, + { + "start": 1190, + "value": "node16", + }, + { + "start": 1193, + "value": "node17", + }, + { + "start": 1194, + "value": "node16", + }, + { + "start": 1194, + "value": "node17", + }, + { + "start": 1201, + "value": "node18", + }, + { + "start": 1207, + "value": "node16", + }, + { + "start": 1207, + "value": "node18", + }, + { + "start": 1210, + "value": "node18", + }, + { + "start": 1213, + "value": "node19", + }, + { + "start": 1214, + "value": "node18", + }, + { + "start": 1214, + "value": "node19", + }, + { + "start": 1222, + "value": "node20", + }, + { + "start": 1223, + "value": "node18", + }, + { + "start": 1223, + "value": "node20", + }, + { + "start": 1228, + "value": "node20", + }, + { + "start": 1235, + "value": "node20", + }, + { + "start": 1235, + "value": "node18", + }, + { + "start": 1235, + "value": "node16", }, { - "start": 168, - "value": "node5", + "start": 1235, + "value": "node16", }, { - "start": 169, - "value": "node3", + "start": 1237, + "value": "node1", }, { - "start": 169, - "value": "node5", + "start": 1237, + "value": "node1", }, +] +`; + +exports[`C: IfWithoutBraces: Segmentation 1`] = ` +[ { - "start": 174, + "start": 0, "value": "node5", }, { - "start": 181, + "start": 1254, "value": "node5", }, { - "start": 181, - "value": "node3", + "start": 1428, + "value": "node5", }, { - "start": 181, + "start": 1436, "value": "node1", }, { - "start": 181, - "value": "node1", + "start": 1437, + "value": "node5", }, { - "start": 183, + "start": 1437, "value": "node1", }, { - "start": 183, + "start": 1447, "value": "node1", }, -] -`; - -exports[`C: forever: Segmentation 1`] = ` -[ { - "start": 0, - "value": "node2", + "start": 1450, + "value": "node1", }, { - "start": 210, - "value": "node2", + "start": 1453, + "value": "node1", }, { - "start": 231, - "value": "node2", + "start": 1453, + "value": "node12", }, { - "start": 239, - "value": "node4", + "start": 1466, + "value": "node12", }, { - "start": 240, - "value": "node2", + "start": 1472, + "value": "node1", }, { - "start": 240, - "value": "node4", + "start": 1472, + "value": "node1", }, { - "start": 247, - "value": "node2", + "start": 1478, + "value": "node5", }, { - "start": 247, - "value": "node2", + "start": 1478, + "value": "node12", }, { - "start": 249, - "value": "node2", + "start": 1484, + "value": "node5", }, { - "start": 249, - "value": "node2", + "start": 1484, + "value": "node12", }, -] -`; - -exports[`C: forever2: Segmentation 1`] = ` -[ { - "start": 0, - "value": "node1", + "start": 1492, + "value": "node8", }, { - "start": 276, - "value": "node1", + "start": 1493, + "value": "node12", }, { - "start": 298, - "value": "node1", + "start": 1493, + "value": "node8", }, { - "start": 303, - "value": "node1", + "start": 1503, + "value": "node8", }, { - "start": 313, - "value": "node1", + "start": 1506, + "value": "node8", }, { - "start": 313, - "value": "node1", + "start": 1509, + "value": "node15", }, { - "start": 314, - "value": "node1", + "start": 1510, + "value": "node8", }, { - "start": 315, - "value": "node2", + "start": 1510, + "value": "node15", }, { - "start": 318, - "value": "node2", + "start": 1524, + "value": "node15", }, { - "start": 319, - "value": "node2", + "start": 1530, + "value": "node15", }, { - "start": 320, - "value": "node1", + "start": 1540, + "value": "node8", }, { - "start": 320, - "value": "node2", + "start": 1540, + "value": "node8", }, { - "start": 327, - "value": "node1", + "start": 1546, + "value": "node12", }, { - "start": 327, - "value": "node1", + "start": 1546, + "value": "node12", }, { - "start": 329, - "value": "node1", + "start": 1548, + "value": "node5", }, { - "start": 329, - "value": "node1", + "start": 1548, + "value": "node5", }, ] `; -exports[`C: forLoop: Segmentation 1`] = ` +exports[`C: ForLoops: Segmentation 1`] = ` [ { "start": 0, - "value": "node1", + "value": "node7", }, { - "start": 388, - "value": "node1", + "start": 1566, + "value": "node7", }, { - "start": 409, - "value": "node1", + "start": 1612, + "value": "node7", }, { - "start": 414, + "start": 1620, "value": "node1", }, { - "start": 424, + "start": 1621, "value": "node1", }, { - "start": 424, + "start": 1622, "value": "node1", }, { - "start": 425, - "value": "node2", + "start": 1622, + "value": "node7", }, { - "start": 431, + "start": 1623, "value": "node2", }, { - "start": 432, + "start": 1624, "value": "node2", }, { - "start": 432, - "value": "node1", - }, - { - "start": 433, + "start": 1625, "value": "node3", }, { - "start": 436, - "value": "node3", + "start": 1626, + "value": "node7", }, { - "start": 437, + "start": 1626, "value": "node3", }, { - "start": 438, - "value": "node1", - }, - { - "start": 438, + "start": 1628, "value": "node3", }, { - "start": 481, - "value": "node1", - }, - { - "start": 481, - "value": "node1", - }, - { - "start": 483, - "value": "node1", - }, - { - "start": 483, - "value": "node1", - }, -] -`; - -exports[`C: whileLoop: Segmentation 1`] = ` -[ - { - "start": 0, - "value": "node0", - }, - { - "start": 510, - "value": "node0", - }, - { - "start": 533, - "value": "node1", - }, - { - "start": 539, - "value": "node1", + "start": 1631, + "value": "node3", }, { - "start": 544, - "value": "node1", + "start": 1634, + "value": "node4", }, { - "start": 544, - "value": "node1", + "start": 1635, + "value": "node3", }, { - "start": 545, - "value": "node2", + "start": 1635, + "value": "node4", }, { - "start": 552, - "value": "node2", + "start": 1641, + "value": "node3", }, { - "start": 552, - "value": "node1", + "start": 1641, + "value": "node3", }, { - "start": 552, - "value": "node1", + "start": 1642, + "value": "node7", }, { - "start": 554, - "value": "node0", + "start": 1642, + "value": "node15", }, { - "start": 554, - "value": "node0", + "start": 1647, + "value": "node7", }, -] -`; - -exports[`C: doWhile: Segmentation 1`] = ` -[ { - "start": 0, - "value": "node0", + "start": 1647, + "value": "node15", }, { - "start": 581, - "value": "node0", + "start": 1655, + "value": "node10", }, { - "start": 602, - "value": "node1", + "start": 1656, + "value": "node15", }, { - "start": 605, - "value": "node1", + "start": 1656, + "value": "node10", }, { - "start": 612, - "value": "node1", + "start": 1657, + "value": "node10", }, { - "start": 612, - "value": "node1", + "start": 1657, + "value": "node10", }, { - "start": 619, - "value": "node1", + "start": 1660, + "value": "node11", }, { - "start": 624, - "value": "node1", + "start": 1661, + "value": "node15", }, { - "start": 624, - "value": "node1", + "start": 1661, + "value": "node11", }, { - "start": 625, - "value": "node1", + "start": 1663, + "value": "node11", }, { - "start": 627, - "value": "node0", + "start": 1666, + "value": "node11", }, { - "start": 627, - "value": "node0", + "start": 1669, + "value": "node12", }, -] -`; - -exports[`C: gotoA: Segmentation 1`] = ` -[ { - "start": 0, - "value": "node0", + "start": 1670, + "value": "node11", }, { - "start": 654, - "value": "node0", + "start": 1670, + "value": "node12", }, { - "start": 669, - "value": "node2", + "start": 1676, + "value": "node11", }, { - "start": 680, - "value": "node2", + "start": 1676, + "value": "node11", }, { - "start": 683, - "value": "node2", + "start": 1677, + "value": "node15", }, { - "start": 686, - "value": "node3", + "start": 1677, + "value": "node23", }, { - "start": 687, - "value": "node2", + "start": 1682, + "value": "node7", }, { - "start": 687, - "value": "node3", + "start": 1682, + "value": "node23", }, { - "start": 697, - "value": "node3", + "start": 1693, + "value": "node18", }, { - "start": 708, - "value": "node3", + "start": 1694, + "value": "node18", }, { - "start": 714, - "value": "node2", + "start": 1695, + "value": "node19", }, { - "start": 714, - "value": "node2", + "start": 1696, + "value": "node23", }, { - "start": 714, - "value": "node2", + "start": 1696, + "value": "node19", }, { - "start": 716, - "value": "node0", + "start": 1698, + "value": "node19", }, { - "start": 716, - "value": "node0", + "start": 1701, + "value": "node19", }, -] -`; - -exports[`C: switch_1: Segmentation 1`] = ` -[ { - "start": 0, - "value": "node1", + "start": 1704, + "value": "node30", }, { - "start": 765, - "value": "node1", + "start": 1705, + "value": "node19", }, { - "start": 787, - "value": "node1", + "start": 1705, + "value": "node30", }, { - "start": 799, - "value": "node1", + "start": 1711, + "value": "node19", }, { - "start": 804, - "value": "node1", + "start": 1711, + "value": "node19", }, { - "start": 804, - "value": "node1", + "start": 1712, + "value": "node23", }, { - "start": 811, - "value": "Not found", + "start": 1712, + "value": "node30", }, { - "start": 820, - "value": "node1", + "start": 1717, + "value": "node7", }, { - "start": 838, - "value": "node2", + "start": 1717, + "value": "node30", }, { - "start": 852, - "value": "node1", + "start": 1730, + "value": "node26", }, { - "start": 852, - "value": "node3", + "start": 1731, + "value": "node30", }, { - "start": 857, - "value": "node1", + "start": 1731, + "value": "node26", }, { - "start": 857, - "value": "node3", + "start": 1733, + "value": "node26", }, { - "start": 864, - "value": "node5", + "start": 1736, + "value": "node26", }, { - "start": 869, - "value": "node1", + "start": 1739, + "value": "node39", }, { - "start": 869, - "value": "node5", + "start": 1740, + "value": "node26", }, { - "start": 876, - "value": "Not found", + "start": 1740, + "value": "node39", }, { - "start": 885, - "value": "node5", + "start": 1746, + "value": "node26", }, { - "start": 903, - "value": "node6", + "start": 1746, + "value": "node26", }, { - "start": 917, - "value": "node5", + "start": 1747, + "value": "node30", }, { - "start": 917, - "value": "node5", + "start": 1747, + "value": "node39", }, { - "start": 923, - "value": "node1", + "start": 1752, + "value": "node7", }, { - "start": 923, - "value": "node1", + "start": 1752, + "value": "node39", }, { - "start": 925, - "value": "node1", + "start": 1760, + "value": "node33", }, { - "start": 925, - "value": "node1", + "start": 1761, + "value": "node33", }, -] -`; - -exports[`C: switch_2: Segmentation 1`] = ` -[ { - "start": 0, - "value": "node1", + "start": 1762, + "value": "node33", }, { - "start": 952, - "value": "node1", + "start": 1762, + "value": "node39", }, { - "start": 974, - "value": "node1", + "start": 1763, + "value": "node34", }, { - "start": 986, - "value": "node1", + "start": 1764, + "value": "node34", }, { - "start": 991, - "value": "node1", + "start": 1765, + "value": "node35", }, { - "start": 991, - "value": "node1", + "start": 1766, + "value": "node39", }, { - "start": 998, - "value": "node2", + "start": 1766, + "value": "node35", }, { - "start": 1007, - "value": "node2", + "start": 1768, + "value": "node35", }, { - "start": 1013, - "value": "node1", + "start": 1771, + "value": "node35", }, { - "start": 1013, - "value": "node3", + "start": 1774, + "value": "node36", }, { - "start": 1018, - "value": "node1", + "start": 1775, + "value": "node35", }, { - "start": 1018, - "value": "node3", + "start": 1775, + "value": "node36", }, { - "start": 1025, - "value": "node5", + "start": 1781, + "value": "node35", }, { - "start": 1030, - "value": "node1", + "start": 1781, + "value": "node35", }, { - "start": 1030, - "value": "node5", + "start": 1782, + "value": "node39", }, { - "start": 1037, - "value": "node5", + "start": 1782, + "value": "node47", }, { - "start": 1043, - "value": "node1", + "start": 1787, + "value": "node7", }, { - "start": 1043, - "value": "node1", + "start": 1787, + "value": "node47", }, { - "start": 1045, - "value": "node1", + "start": 1795, + "value": "node42", }, { - "start": 1045, - "value": "node1", + "start": 1796, + "value": "node47", }, -] -`; - -exports[`C: ManyIfs: Segmentation 1`] = ` -[ { - "start": 0, - "value": "node1", + "start": 1796, + "value": "node42", }, { - "start": 1073, - "value": "node1", + "start": 1797, + "value": "node42", }, { - "start": 1094, - "value": "node1", + "start": 1797, + "value": "node42", }, { - "start": 1097, - "value": "node1", + "start": 1800, + "value": "node43", }, { - "start": 1100, - "value": "node2", + "start": 1801, + "value": "node47", }, { - "start": 1101, - "value": "node1", + "start": 1801, + "value": "node43", }, { - "start": 1101, - "value": "node2", + "start": 1803, + "value": "node43", }, { - "start": 1108, - "value": "node1", + "start": 1806, + "value": "node43", }, { - "start": 1108, - "value": "node5", + "start": 1809, + "value": "node44", }, { - "start": 1114, - "value": "node1", + "start": 1810, + "value": "node43", }, { - "start": 1114, - "value": "node5", + "start": 1810, + "value": "node44", }, { - "start": 1117, - "value": "node5", + "start": 1816, + "value": "node43", }, { - "start": 1120, - "value": "node6", + "start": 1816, + "value": "node43", }, { - "start": 1121, - "value": "node5", + "start": 1817, + "value": "node47", }, { - "start": 1121, - "value": "node6", + "start": 1817, + "value": "node55", }, { - "start": 1128, + "start": 1822, "value": "node7", }, { - "start": 1129, - "value": "node5", + "start": 1822, + "value": "node55", }, { - "start": 1129, - "value": "node7", + "start": 1833, + "value": "node50", }, { - "start": 1134, - "value": "node7", + "start": 1834, + "value": "node50", }, { - "start": 1141, - "value": "node7", + "start": 1835, + "value": "node51", }, { - "start": 1141, - "value": "node5", + "start": 1836, + "value": "node55", }, { - "start": 1141, - "value": "node10", + "start": 1836, + "value": "node51", }, { - "start": 1147, - "value": "node1", + "start": 1838, + "value": "node51", }, { - "start": 1147, - "value": "node10", + "start": 1841, + "value": "node51", }, { - "start": 1150, - "value": "node10", + "start": 1844, + "value": "node62", }, { - "start": 1153, - "value": "node11", + "start": 1845, + "value": "node51", }, { - "start": 1154, - "value": "node10", + "start": 1845, + "value": "node62", }, { - "start": 1154, - "value": "node11", + "start": 1851, + "value": "node51", }, { - "start": 1161, - "value": "node12", + "start": 1851, + "value": "node51", }, { - "start": 1167, - "value": "node10", + "start": 1852, + "value": "node55", }, { - "start": 1167, - "value": "node12", + "start": 1852, + "value": "node62", }, { - "start": 1170, - "value": "node12", + "start": 1857, + "value": "node7", }, { - "start": 1173, - "value": "node13", + "start": 1857, + "value": "node62", }, { - "start": 1174, - "value": "node12", + "start": 1870, + "value": "node58", }, { - "start": 1174, - "value": "node13", + "start": 1871, + "value": "node62", }, { - "start": 1181, - "value": "node12", + "start": 1871, + "value": "node58", }, { - "start": 1181, - "value": "node10", + "start": 1873, + "value": "node58", }, { - "start": 1181, - "value": "node16", + "start": 1876, + "value": "node58", }, { - "start": 1187, - "value": "node1", + "start": 1879, + "value": "node65", }, { - "start": 1187, - "value": "node16", + "start": 1880, + "value": "node58", }, { - "start": 1190, - "value": "node16", + "start": 1880, + "value": "node65", }, { - "start": 1193, - "value": "node17", + "start": 1886, + "value": "node58", }, { - "start": 1194, - "value": "node16", + "start": 1886, + "value": "node58", }, { - "start": 1194, - "value": "node17", + "start": 1887, + "value": "node62", }, { - "start": 1201, - "value": "node18", + "start": 1887, + "value": "node7", }, { - "start": 1207, - "value": "node16", + "start": 1909, + "value": "Not found", }, { - "start": 1207, - "value": "node18", + "start": 1911, + "value": "node7", }, { - "start": 1210, - "value": "node18", + "start": 1911, + "value": "node7", }, +] +`; + +exports[`C: MoreSwitch: Segmentation 1`] = ` +[ { - "start": 1213, - "value": "node19", + "start": 0, + "value": "node1", }, { - "start": 1214, - "value": "node18", + "start": 1928, + "value": "node1", }, { - "start": 1214, - "value": "node19", + "start": 2030, + "value": "node1", }, { - "start": 1222, - "value": "node20", + "start": 2042, + "value": "node1", }, { - "start": 1223, - "value": "node18", + "start": 2051, + "value": "node1", }, { - "start": 1223, - "value": "node20", + "start": 2051, + "value": "node1", }, { - "start": 1228, - "value": "node20", + "start": 2058, + "value": "node2", }, { - "start": 1235, - "value": "node20", + "start": 2059, + "value": "node1", }, { - "start": 1235, - "value": "node18", + "start": 2059, + "value": "node2", }, { - "start": 1235, - "value": "node16", + "start": 2065, + "value": "node1", }, { - "start": 1235, - "value": "node16", + "start": 2065, + "value": "node3", }, { - "start": 1237, + "start": 2074, "value": "node1", }, { - "start": 1237, - "value": "node1", + "start": 2074, + "value": "node3", }, -] -`; - -exports[`C: IfWithoutBraces: Segmentation 1`] = ` -[ { - "start": 0, - "value": "node5", + "start": 2081, + "value": "node4", }, { - "start": 1254, - "value": "node5", + "start": 2082, + "value": "node3", }, { - "start": 1428, - "value": "node5", + "start": 2082, + "value": "node4", }, { - "start": 1436, - "value": "node1", + "start": 2088, + "value": "node3", }, { - "start": 1437, + "start": 2088, "value": "node5", }, { - "start": 1437, + "start": 2097, "value": "node1", }, { - "start": 1447, - "value": "node1", + "start": 2097, + "value": "node5", }, { - "start": 1450, - "value": "node1", + "start": 2104, + "value": "node6", }, { - "start": 1453, - "value": "node1", + "start": 2105, + "value": "node5", }, { - "start": 1453, - "value": "node12", + "start": 2105, + "value": "node6", }, { - "start": 1466, - "value": "node12", + "start": 2109, + "value": "node5", }, { - "start": 1472, - "value": "node1", + "start": 2109, + "value": "node7", }, { - "start": 1472, + "start": 2118, "value": "node1", }, { - "start": 1478, - "value": "node5", + "start": 2118, + "value": "node7", }, { - "start": 1478, - "value": "node12", + "start": 2125, + "value": "node8", }, { - "start": 1484, - "value": "node5", + "start": 2126, + "value": "node7", }, { - "start": 1484, - "value": "node12", + "start": 2126, + "value": "node8", }, { - "start": 1492, - "value": "node8", + "start": 2132, + "value": "node7", }, { - "start": 1493, - "value": "node12", + "start": 2132, + "value": "node10", }, { - "start": 1493, - "value": "node8", + "start": 2141, + "value": "node1", }, { - "start": 1503, - "value": "node8", + "start": 2141, + "value": "node10", }, { - "start": 1506, - "value": "node8", + "start": 2149, + "value": "node10", }, { - "start": 1509, - "value": "node15", + "start": 2150, + "value": "node10", }, { - "start": 1510, - "value": "node8", + "start": 2150, + "value": "node10", }, { - "start": 1510, - "value": "node15", + "start": 2154, + "value": "node10", }, { - "start": 1524, - "value": "node15", + "start": 2154, + "value": "node10", }, { - "start": 1530, - "value": "node15", + "start": 2160, + "value": "node1", }, { - "start": 1540, - "value": "node8", + "start": 2160, + "value": "node1", }, { - "start": 1540, - "value": "node8", + "start": 2162, + "value": "node1", }, { - "start": 1546, - "value": "node12", + "start": 2162, + "value": "node1", }, +] +`; + +exports[`C++: trivial: Segmentation 1`] = ` +[ { - "start": 1546, - "value": "node12", + "start": 0, + "value": "node2", }, { - "start": 1548, - "value": "node5", + "start": 15, + "value": "node2", }, { - "start": 1548, - "value": "node5", + "start": 32, + "value": "node2", }, ] `; -exports[`C: ForLoops: Segmentation 1`] = ` +exports[`C++: simpleIf: Segmentation 1`] = ` [ { "start": 0, - "value": "node7", + "value": "node1", }, { - "start": 1566, - "value": "node7", + "start": 49, + "value": "node1", }, { - "start": 1612, - "value": "node7", + "start": 71, + "value": "node1", }, { - "start": 1620, + "start": 74, "value": "node1", }, { - "start": 1621, + "start": 77, + "value": "node2", + }, + { + "start": 78, "value": "node1", }, { - "start": 1622, + "start": 78, + "value": "node2", + }, + { + "start": 85, "value": "node1", }, { - "start": 1622, - "value": "node7", + "start": 85, + "value": "node1", }, { - "start": 1623, - "value": "node2", + "start": 87, + "value": "node1", }, { - "start": 1624, - "value": "node2", + "start": 87, + "value": "node1", }, +] +`; + +exports[`C++: ifElse: Segmentation 1`] = ` +[ { - "start": 1625, - "value": "node3", + "start": 0, + "value": "node1", }, { - "start": 1626, - "value": "node7", + "start": 114, + "value": "node1", }, { - "start": 1626, - "value": "node3", + "start": 134, + "value": "node1", }, { - "start": 1628, - "value": "node3", + "start": 137, + "value": "node1", }, { - "start": 1631, - "value": "node3", + "start": 140, + "value": "node2", }, { - "start": 1634, - "value": "node4", + "start": 141, + "value": "node1", + }, + { + "start": 141, + "value": "node2", }, { - "start": 1635, + "start": 148, "value": "node3", }, { - "start": 1635, - "value": "node4", + "start": 154, + "value": "node1", }, { - "start": 1641, + "start": 154, "value": "node3", }, { - "start": 1641, + "start": 157, "value": "node3", }, { - "start": 1642, - "value": "node7", - }, - { - "start": 1642, - "value": "node15", + "start": 160, + "value": "node4", }, { - "start": 1647, - "value": "node7", + "start": 161, + "value": "node3", }, { - "start": 1647, - "value": "node15", + "start": 161, + "value": "node4", }, { - "start": 1655, - "value": "node10", + "start": 168, + "value": "node5", }, { - "start": 1656, - "value": "node15", + "start": 169, + "value": "node3", }, { - "start": 1656, - "value": "node10", + "start": 169, + "value": "node5", }, { - "start": 1657, - "value": "node10", + "start": 174, + "value": "node5", }, { - "start": 1657, - "value": "node10", + "start": 181, + "value": "node5", }, { - "start": 1660, - "value": "node11", + "start": 181, + "value": "node3", }, { - "start": 1661, - "value": "node15", + "start": 181, + "value": "node1", }, { - "start": 1661, - "value": "node11", + "start": 181, + "value": "node1", }, { - "start": 1663, - "value": "node11", + "start": 183, + "value": "node1", }, { - "start": 1666, - "value": "node11", + "start": 183, + "value": "node1", }, +] +`; + +exports[`C++: forever: Segmentation 1`] = ` +[ { - "start": 1669, - "value": "node12", + "start": 0, + "value": "node2", }, { - "start": 1670, - "value": "node11", + "start": 210, + "value": "node2", }, { - "start": 1670, - "value": "node12", + "start": 231, + "value": "node2", }, { - "start": 1676, - "value": "node11", + "start": 239, + "value": "node4", }, { - "start": 1676, - "value": "node11", + "start": 240, + "value": "node2", }, { - "start": 1677, - "value": "node15", + "start": 240, + "value": "node4", }, { - "start": 1677, - "value": "node23", + "start": 247, + "value": "node2", }, { - "start": 1682, - "value": "node7", + "start": 247, + "value": "node2", }, { - "start": 1682, - "value": "node23", + "start": 249, + "value": "node2", }, { - "start": 1693, - "value": "node18", + "start": 249, + "value": "node2", }, +] +`; + +exports[`C++: forever2: Segmentation 1`] = ` +[ { - "start": 1694, - "value": "node18", + "start": 0, + "value": "node1", }, { - "start": 1695, - "value": "node19", + "start": 276, + "value": "node1", }, { - "start": 1696, - "value": "node23", + "start": 298, + "value": "node1", }, { - "start": 1696, - "value": "node19", + "start": 303, + "value": "node1", }, { - "start": 1698, - "value": "node19", + "start": 313, + "value": "node1", }, { - "start": 1701, - "value": "node19", + "start": 313, + "value": "node1", }, { - "start": 1704, - "value": "node30", + "start": 314, + "value": "node1", }, { - "start": 1705, - "value": "node19", + "start": 315, + "value": "node2", }, { - "start": 1705, - "value": "node30", + "start": 318, + "value": "node2", }, { - "start": 1711, - "value": "node19", + "start": 319, + "value": "node2", }, { - "start": 1711, - "value": "node19", + "start": 320, + "value": "node1", }, { - "start": 1712, - "value": "node23", + "start": 320, + "value": "node2", }, { - "start": 1712, - "value": "node30", + "start": 327, + "value": "node1", }, { - "start": 1717, - "value": "node7", + "start": 327, + "value": "node1", }, { - "start": 1717, - "value": "node30", + "start": 329, + "value": "node1", }, { - "start": 1730, - "value": "node26", + "start": 329, + "value": "node1", }, +] +`; + +exports[`C++: forLoop: Segmentation 1`] = ` +[ { - "start": 1731, - "value": "node30", + "start": 0, + "value": "node1", }, { - "start": 1731, - "value": "node26", + "start": 388, + "value": "node1", }, { - "start": 1733, - "value": "node26", + "start": 409, + "value": "node1", }, { - "start": 1736, - "value": "node26", + "start": 414, + "value": "node1", }, { - "start": 1739, - "value": "node39", + "start": 424, + "value": "node1", }, { - "start": 1740, - "value": "node26", + "start": 424, + "value": "node1", }, { - "start": 1740, - "value": "node39", + "start": 425, + "value": "node2", }, { - "start": 1746, - "value": "node26", + "start": 431, + "value": "node2", }, { - "start": 1746, - "value": "node26", + "start": 432, + "value": "node2", }, { - "start": 1747, - "value": "node30", + "start": 432, + "value": "node1", }, { - "start": 1747, - "value": "node39", + "start": 433, + "value": "node3", }, { - "start": 1752, - "value": "node7", + "start": 436, + "value": "node3", }, { - "start": 1752, - "value": "node39", + "start": 437, + "value": "node3", }, { - "start": 1760, - "value": "node33", + "start": 438, + "value": "node1", }, { - "start": 1761, - "value": "node33", + "start": 438, + "value": "node3", }, { - "start": 1762, - "value": "node33", + "start": 481, + "value": "node1", }, { - "start": 1762, - "value": "node39", + "start": 481, + "value": "node1", }, { - "start": 1763, - "value": "node34", + "start": 483, + "value": "node1", }, { - "start": 1764, - "value": "node34", + "start": 483, + "value": "node1", }, +] +`; + +exports[`C++: whileLoop: Segmentation 1`] = ` +[ { - "start": 1765, - "value": "node35", + "start": 0, + "value": "node0", }, { - "start": 1766, - "value": "node39", + "start": 510, + "value": "node0", }, { - "start": 1766, - "value": "node35", + "start": 533, + "value": "node1", }, { - "start": 1768, - "value": "node35", + "start": 539, + "value": "node1", }, { - "start": 1771, - "value": "node35", + "start": 544, + "value": "node1", }, { - "start": 1774, - "value": "node36", + "start": 544, + "value": "node1", }, { - "start": 1775, - "value": "node35", + "start": 545, + "value": "node2", }, { - "start": 1775, - "value": "node36", + "start": 552, + "value": "node2", }, { - "start": 1781, - "value": "node35", + "start": 552, + "value": "node1", }, { - "start": 1781, - "value": "node35", + "start": 552, + "value": "node1", }, { - "start": 1782, - "value": "node39", + "start": 554, + "value": "node0", }, { - "start": 1782, - "value": "node47", + "start": 554, + "value": "node0", }, +] +`; + +exports[`C++: doWhile: Segmentation 1`] = ` +[ { - "start": 1787, - "value": "node7", + "start": 0, + "value": "node0", }, { - "start": 1787, - "value": "node47", + "start": 581, + "value": "node0", }, { - "start": 1795, - "value": "node42", + "start": 602, + "value": "node1", }, { - "start": 1796, - "value": "node47", + "start": 605, + "value": "node1", }, { - "start": 1796, - "value": "node42", + "start": 612, + "value": "node1", }, { - "start": 1797, - "value": "node42", + "start": 612, + "value": "node1", }, { - "start": 1797, - "value": "node42", + "start": 619, + "value": "node1", }, { - "start": 1800, - "value": "node43", + "start": 624, + "value": "node1", }, { - "start": 1801, - "value": "node47", + "start": 624, + "value": "node1", }, { - "start": 1801, - "value": "node43", + "start": 625, + "value": "node1", }, { - "start": 1803, - "value": "node43", + "start": 627, + "value": "node0", }, { - "start": 1806, - "value": "node43", + "start": 627, + "value": "node0", }, +] +`; + +exports[`C++: gotoA: Segmentation 1`] = ` +[ { - "start": 1809, - "value": "node44", + "start": 0, + "value": "node0", }, { - "start": 1810, - "value": "node43", + "start": 654, + "value": "node0", }, { - "start": 1810, - "value": "node44", + "start": 669, + "value": "node2", }, { - "start": 1816, - "value": "node43", + "start": 680, + "value": "node2", }, { - "start": 1816, - "value": "node43", + "start": 683, + "value": "node2", }, { - "start": 1817, - "value": "node47", + "start": 686, + "value": "node3", }, { - "start": 1817, - "value": "node55", + "start": 687, + "value": "node2", }, { - "start": 1822, - "value": "node7", + "start": 687, + "value": "node3", }, { - "start": 1822, - "value": "node55", + "start": 697, + "value": "node3", }, { - "start": 1833, - "value": "node50", + "start": 708, + "value": "node3", }, { - "start": 1834, - "value": "node50", + "start": 714, + "value": "node2", }, { - "start": 1835, - "value": "node51", + "start": 714, + "value": "node2", }, { - "start": 1836, - "value": "node55", + "start": 714, + "value": "node2", }, { - "start": 1836, - "value": "node51", + "start": 716, + "value": "node0", }, { - "start": 1838, - "value": "node51", + "start": 716, + "value": "node0", }, +] +`; + +exports[`C++: switch_1: Segmentation 1`] = ` +[ { - "start": 1841, - "value": "node51", + "start": 0, + "value": "node1", }, { - "start": 1844, - "value": "node62", + "start": 765, + "value": "node1", }, { - "start": 1845, - "value": "node51", + "start": 787, + "value": "node1", }, { - "start": 1845, - "value": "node62", + "start": 799, + "value": "node1", }, { - "start": 1851, - "value": "node51", + "start": 804, + "value": "node1", }, { - "start": 1851, - "value": "node51", + "start": 804, + "value": "node1", }, { - "start": 1852, - "value": "node55", + "start": 811, + "value": "Not found", }, { - "start": 1852, - "value": "node62", + "start": 820, + "value": "node1", }, { - "start": 1857, - "value": "node7", + "start": 838, + "value": "node2", }, { - "start": 1857, - "value": "node62", + "start": 852, + "value": "node1", }, { - "start": 1870, - "value": "node58", + "start": 852, + "value": "node3", }, { - "start": 1871, - "value": "node62", + "start": 857, + "value": "node1", }, { - "start": 1871, - "value": "node58", + "start": 857, + "value": "node3", }, { - "start": 1873, - "value": "node58", + "start": 864, + "value": "node5", }, { - "start": 1876, - "value": "node58", + "start": 869, + "value": "node1", }, { - "start": 1879, - "value": "node65", + "start": 869, + "value": "node5", }, { - "start": 1880, - "value": "node58", + "start": 876, + "value": "Not found", }, { - "start": 1880, - "value": "node65", + "start": 885, + "value": "node5", }, { - "start": 1886, - "value": "node58", + "start": 903, + "value": "node6", }, { - "start": 1886, - "value": "node58", + "start": 917, + "value": "node5", }, { - "start": 1887, - "value": "node62", + "start": 917, + "value": "node5", }, { - "start": 1887, - "value": "node7", + "start": 923, + "value": "node1", }, { - "start": 1909, - "value": "Not found", + "start": 923, + "value": "node1", }, { - "start": 1911, - "value": "node7", + "start": 925, + "value": "node1", }, { - "start": 1911, - "value": "node7", + "start": 925, + "value": "node1", }, ] `; -exports[`C: MoreSwitch: Segmentation 1`] = ` +exports[`C++: switch_2: Segmentation 1`] = ` [ { "start": 0, "value": "node1", }, { - "start": 1928, + "start": 952, "value": "node1", }, { - "start": 2030, + "start": 974, "value": "node1", }, { - "start": 2042, + "start": 986, "value": "node1", }, { - "start": 2051, + "start": 991, "value": "node1", }, { - "start": 2051, + "start": 991, "value": "node1", }, { - "start": 2058, + "start": 998, "value": "node2", }, { - "start": 2059, - "value": "node1", - }, - { - "start": 2059, + "start": 1007, "value": "node2", }, { - "start": 2065, + "start": 1013, "value": "node1", }, { - "start": 2065, + "start": 1013, "value": "node3", }, { - "start": 2074, + "start": 1018, "value": "node1", }, { - "start": 2074, + "start": 1018, "value": "node3", }, { - "start": 2081, - "value": "node4", - }, - { - "start": 2082, - "value": "node3", + "start": 1025, + "value": "node5", }, { - "start": 2082, - "value": "node4", + "start": 1030, + "value": "node1", }, { - "start": 2088, - "value": "node3", + "start": 1030, + "value": "node5", }, { - "start": 2088, + "start": 1037, "value": "node5", }, { - "start": 2097, + "start": 1043, "value": "node1", }, { - "start": 2097, - "value": "node5", + "start": 1043, + "value": "node1", }, { - "start": 2104, - "value": "node6", + "start": 1045, + "value": "node1", }, { - "start": 2105, - "value": "node5", + "start": 1045, + "value": "node1", }, +] +`; + +exports[`C++: ManyIfs: Segmentation 1`] = ` +[ { - "start": 2105, - "value": "node6", + "start": 0, + "value": "node1", }, { - "start": 2109, - "value": "node5", + "start": 1073, + "value": "node1", }, { - "start": 2109, - "value": "node7", + "start": 1094, + "value": "node1", }, { - "start": 2118, + "start": 1097, "value": "node1", }, { - "start": 2118, - "value": "node7", + "start": 1100, + "value": "node2", }, { - "start": 2125, - "value": "node8", + "start": 1101, + "value": "node1", }, { - "start": 2126, - "value": "node7", + "start": 1101, + "value": "node2", }, { - "start": 2126, - "value": "node8", + "start": 1108, + "value": "node1", }, { - "start": 2132, - "value": "node7", + "start": 1108, + "value": "node5", }, { - "start": 2132, - "value": "node10", + "start": 1114, + "value": "node1", }, { - "start": 2141, - "value": "node1", + "start": 1114, + "value": "node5", }, { - "start": 2141, - "value": "node10", + "start": 1117, + "value": "node5", }, { - "start": 2149, - "value": "node10", + "start": 1120, + "value": "node6", }, { - "start": 2150, - "value": "node10", + "start": 1121, + "value": "node5", }, { - "start": 2150, - "value": "node10", + "start": 1121, + "value": "node6", }, { - "start": 2154, - "value": "node10", + "start": 1128, + "value": "node7", }, { - "start": 2154, - "value": "node10", + "start": 1129, + "value": "node5", }, { - "start": 2160, - "value": "node1", + "start": 1129, + "value": "node7", }, { - "start": 2160, - "value": "node1", + "start": 1134, + "value": "node7", }, { - "start": 2162, - "value": "node1", + "start": 1141, + "value": "node7", }, { - "start": 2162, - "value": "node1", + "start": 1141, + "value": "node5", }, -] -`; - -exports[`Go: trivial: Segmentation 1`] = ` -[ { - "start": 0, - "value": "node2", + "start": 1141, + "value": "node10", }, { - "start": 43, - "value": "node2", + "start": 1147, + "value": "node1", }, { - "start": 61, - "value": "node2", + "start": 1147, + "value": "node10", }, -] -`; - -exports[`Go: ifThen: Segmentation 1`] = ` -[ { - "start": 0, - "value": "node1", + "start": 1150, + "value": "node10", }, { - "start": 78, - "value": "node1", + "start": 1153, + "value": "node11", }, { - "start": 95, - "value": "node1", + "start": 1154, + "value": "node10", }, { - "start": 100, - "value": "node3", + "start": 1154, + "value": "node11", }, { - "start": 105, - "value": "node3", + "start": 1161, + "value": "node12", }, { - "start": 105, - "value": "node1", + "start": 1167, + "value": "node10", }, { - "start": 105, - "value": "node1", + "start": 1167, + "value": "node12", }, { - "start": 107, - "value": "node1", + "start": 1170, + "value": "node12", }, { - "start": 107, - "value": "node1", + "start": 1173, + "value": "node13", }, -] -`; - -exports[`Go: ManyIfStatements: Segmentation 1`] = ` -[ { - "start": 0, - "value": "node1", + "start": 1174, + "value": "node12", }, { - "start": 135, - "value": "node1", + "start": 1174, + "value": "node13", }, { - "start": 162, - "value": "node1", + "start": 1181, + "value": "node12", }, { - "start": 167, - "value": "node3", + "start": 1181, + "value": "node10", }, { - "start": 171, - "value": "node3", + "start": 1181, + "value": "node16", }, { - "start": 171, + "start": 1187, "value": "node1", }, { - "start": 171, - "value": "node4", + "start": 1187, + "value": "node16", }, { - "start": 177, - "value": "node4", + "start": 1190, + "value": "node16", }, { - "start": 181, - "value": "node1", + "start": 1193, + "value": "node17", }, { - "start": 181, - "value": "node5", + "start": 1194, + "value": "node16", }, { - "start": 184, - "value": "node1", + "start": 1194, + "value": "node17", }, { - "start": 184, - "value": "node5", + "start": 1201, + "value": "node18", }, { - "start": 189, - "value": "node7", + "start": 1207, + "value": "node16", }, { - "start": 193, - "value": "node7", + "start": 1207, + "value": "node18", }, { - "start": 193, - "value": "node5", + "start": 1210, + "value": "node18", }, { - "start": 193, - "value": "node8", + "start": 1213, + "value": "node19", }, { - "start": 199, - "value": "node5", + "start": 1214, + "value": "node18", }, { - "start": 199, - "value": "node8", + "start": 1214, + "value": "node19", }, { - "start": 204, - "value": "node9", + "start": 1222, + "value": "node20", }, { - "start": 208, - "value": "node9", + "start": 1223, + "value": "node18", }, { - "start": 208, - "value": "node8", + "start": 1223, + "value": "node20", }, { - "start": 208, - "value": "node5", + "start": 1228, + "value": "node20", }, { - "start": 208, - "value": "node10", + "start": 1235, + "value": "node20", }, { - "start": 211, - "value": "node1", + "start": 1235, + "value": "node18", }, { - "start": 211, - "value": "node10", + "start": 1235, + "value": "node16", }, { - "start": 216, - "value": "node12", + "start": 1235, + "value": "node16", }, { - "start": 220, - "value": "node12", + "start": 1237, + "value": "node1", }, { - "start": 220, - "value": "node10", + "start": 1237, + "value": "node1", }, +] +`; + +exports[`C++: IfWithoutBraces: Segmentation 1`] = ` +[ { - "start": 220, - "value": "node13", + "start": 0, + "value": "node5", }, { - "start": 226, - "value": "node10", + "start": 1254, + "value": "node5", }, { - "start": 226, - "value": "node13", + "start": 1428, + "value": "node5", }, { - "start": 231, - "value": "node14", + "start": 1436, + "value": "node1", }, { - "start": 235, - "value": "node14", + "start": 1437, + "value": "node5", }, { - "start": 235, - "value": "node13", + "start": 1437, + "value": "node1", }, { - "start": 235, - "value": "node15", + "start": 1447, + "value": "node1", }, { - "start": 241, - "value": "node15", + "start": 1450, + "value": "node1", }, { - "start": 245, - "value": "node13", + "start": 1453, + "value": "node1", }, { - "start": 245, - "value": "node10", + "start": 1453, + "value": "node12", }, { - "start": 245, - "value": "node10", + "start": 1466, + "value": "node12", }, { - "start": 247, + "start": 1472, "value": "node1", }, { - "start": 247, + "start": 1472, "value": "node1", }, -] -`; - -exports[`Go: Switch: Segmentation 1`] = ` -[ { - "start": 0, - "value": "node1", + "start": 1478, + "value": "node5", }, { - "start": 264, - "value": "node1", + "start": 1478, + "value": "node12", }, { - "start": 281, - "value": "node1", + "start": 1484, + "value": "node5", }, { - "start": 291, - "value": "node1", + "start": 1484, + "value": "node12", }, { - "start": 293, - "value": "node1", + "start": 1492, + "value": "node8", }, { - "start": 293, - "value": "node1", + "start": 1493, + "value": "node12", }, { - "start": 300, - "value": "node3", + "start": 1493, + "value": "node8", }, { - "start": 302, - "value": "node1", + "start": 1503, + "value": "node8", }, { - "start": 302, - "value": "node3", + "start": 1506, + "value": "node8", }, { - "start": 309, - "value": "node5", + "start": 1509, + "value": "node15", }, { - "start": 311, - "value": "node1", + "start": 1510, + "value": "node8", }, { - "start": 311, - "value": "node5", + "start": 1510, + "value": "node15", }, { - "start": 318, - "value": "node7", + "start": 1524, + "value": "node15", }, { - "start": 320, - "value": "node1", + "start": 1530, + "value": "node15", }, { - "start": 320, - "value": "node7", + "start": 1540, + "value": "node8", }, { - "start": 327, - "value": "node7", + "start": 1540, + "value": "node8", }, { - "start": 330, - "value": "node1", + "start": 1546, + "value": "node12", }, { - "start": 330, - "value": "node1", + "start": 1546, + "value": "node12", }, { - "start": 332, - "value": "node1", + "start": 1548, + "value": "node5", }, { - "start": 332, - "value": "node1", + "start": 1548, + "value": "node5", }, ] `; -exports[`Go: switchAndLabelsAndGoto: Segmentation 1`] = ` +exports[`C++: ForLoops: Segmentation 1`] = ` [ { "start": 0, - "value": "node1", + "value": "node7", }, { - "start": 350, - "value": "node1", + "start": 1566, + "value": "node7", }, { - "start": 383, - "value": "node1", + "start": 1612, + "value": "node7", }, { - "start": 393, + "start": 1620, "value": "node1", }, { - "start": 395, + "start": 1621, "value": "node1", }, { - "start": 395, + "start": 1622, "value": "node1", }, { - "start": 402, - "value": "node3", - }, - { - "start": 404, - "value": "node1", + "start": 1622, + "value": "node7", }, { - "start": 404, - "value": "node3", + "start": 1623, + "value": "node2", }, { - "start": 411, - "value": "node13", + "start": 1624, + "value": "node2", }, { - "start": 414, + "start": 1625, "value": "node3", }, { - "start": 414, - "value": "node13", + "start": 1626, + "value": "node7", }, { - "start": 424, + "start": 1626, "value": "node3", }, { - "start": 425, - "value": "node5", + "start": 1628, + "value": "node3", }, { - "start": 426, - "value": "node1", + "start": 1631, + "value": "node3", }, { - "start": 426, - "value": "node5", + "start": 1634, + "value": "node4", }, { - "start": 433, - "value": "node7", + "start": 1635, + "value": "node3", }, { - "start": 435, - "value": "node1", + "start": 1635, + "value": "node4", }, { - "start": 435, - "value": "node7", + "start": 1641, + "value": "node3", }, { - "start": 442, - "value": "node7", + "start": 1641, + "value": "node3", }, { - "start": 445, - "value": "node1", + "start": 1642, + "value": "node7", }, { - "start": 445, - "value": "node11", + "start": 1642, + "value": "node15", }, { - "start": 447, - "value": "node1", + "start": 1647, + "value": "node7", }, { - "start": 447, - "value": "node11", + "start": 1647, + "value": "node15", }, { - "start": 453, - "value": "node13", + "start": 1655, + "value": "node10", }, { - "start": 455, - "value": "node1", + "start": 1656, + "value": "node15", }, { - "start": 455, - "value": "node13", + "start": 1656, + "value": "node10", }, { - "start": 463, - "value": "node13", + "start": 1657, + "value": "node10", }, { - "start": 468, - "value": "node15", + "start": 1657, + "value": "node10", }, { - "start": 472, - "value": "node15", + "start": 1660, + "value": "node11", }, { - "start": 475, + "start": 1661, "value": "node15", }, { - "start": 478, - "value": "node15", + "start": 1661, + "value": "node11", }, { - "start": 478, - "value": "node16", + "start": 1663, + "value": "node11", }, { - "start": 484, - "value": "node13", + "start": 1666, + "value": "node11", }, { - "start": 484, - "value": "node16", + "start": 1669, + "value": "node12", }, { - "start": 488, - "value": "node16", + "start": 1670, + "value": "node11", }, { - "start": 491, - "value": "node16", + "start": 1670, + "value": "node12", }, { - "start": 494, - "value": "node13", + "start": 1676, + "value": "node11", }, { - "start": 494, - "value": "node13", + "start": 1676, + "value": "node11", }, { - "start": 494, - "value": "node13", + "start": 1677, + "value": "node15", }, { - "start": 496, - "value": "node1", + "start": 1677, + "value": "node23", }, { - "start": 496, - "value": "node1", + "start": 1682, + "value": "node7", }, -] -`; - -exports[`Go: trivialReachability: Segmentation 1`] = ` -[ { - "start": 0, - "value": "node2", + "start": 1682, + "value": "node23", }, { - "start": 539, - "value": "node2", + "start": 1693, + "value": "node18", }, { - "start": 589, - "value": "Not found", + "start": 1694, + "value": "node18", }, { - "start": 591, - "value": "node2", + "start": 1695, + "value": "node19", }, { - "start": 591, - "value": "node2", + "start": 1696, + "value": "node23", }, -] -`; - -exports[`Go: hasFallthrough: Segmentation 1`] = ` -[ { - "start": 0, - "value": "node1", + "start": 1696, + "value": "node19", }, { - "start": 624, - "value": "node1", + "start": 1698, + "value": "node19", }, { - "start": 649, - "value": "node1", + "start": 1701, + "value": "node19", }, { - "start": 659, - "value": "node1", + "start": 1704, + "value": "node30", }, { - "start": 661, - "value": "node1", + "start": 1705, + "value": "node19", }, { - "start": 661, - "value": "node1", + "start": 1705, + "value": "node30", }, { - "start": 668, - "value": "Not found", + "start": 1711, + "value": "node19", }, { - "start": 671, - "value": "node1", + "start": 1711, + "value": "node19", }, { - "start": 683, - "value": "node2", + "start": 1712, + "value": "node23", }, { - "start": 694, - "value": "node1", + "start": 1712, + "value": "node30", }, { - "start": 695, - "value": "node3", + "start": 1717, + "value": "node7", }, { - "start": 696, - "value": "node1", + "start": 1717, + "value": "node30", }, { - "start": 696, - "value": "node3", + "start": 1730, + "value": "node26", }, { - "start": 703, - "value": "Not found", + "start": 1731, + "value": "node30", }, { - "start": 706, - "value": "node3", + "start": 1731, + "value": "node26", }, { - "start": 718, - "value": "node4", + "start": 1733, + "value": "node26", }, { - "start": 731, - "value": "node3", + "start": 1736, + "value": "node26", }, { - "start": 732, - "value": "node3", + "start": 1739, + "value": "node39", }, { - "start": 734, - "value": "node1", + "start": 1740, + "value": "node26", }, { - "start": 734, - "value": "node1", + "start": 1740, + "value": "node39", }, { - "start": 736, - "value": "node1", + "start": 1746, + "value": "node26", }, { - "start": 736, - "value": "node1", + "start": 1746, + "value": "node26", }, -] -`; - -exports[`Go: forever: Segmentation 1`] = ` -[ { - "start": 0, - "value": "node0", + "start": 1747, + "value": "node30", }, { - "start": 753, - "value": "node0", + "start": 1747, + "value": "node39", }, { - "start": 771, - "value": "node2", + "start": 1752, + "value": "node7", }, { - "start": 775, - "value": "node2", + "start": 1752, + "value": "node39", }, { - "start": 779, - "value": "node2", + "start": 1760, + "value": "node33", }, { - "start": 779, - "value": "node2", + "start": 1761, + "value": "node33", }, { - "start": 781, - "value": "node0", + "start": 1762, + "value": "node33", }, { - "start": 781, - "value": "node0", + "start": 1762, + "value": "node39", }, -] -`; - -exports[`Go: forCond: Segmentation 1`] = ` -[ { - "start": 0, - "value": "node0", + "start": 1763, + "value": "node34", }, { - "start": 798, - "value": "node0", + "start": 1764, + "value": "node34", }, { - "start": 816, - "value": "node1", + "start": 1765, + "value": "node35", }, { - "start": 827, - "value": "node2", + "start": 1766, + "value": "node39", }, { - "start": 831, - "value": "node1", + "start": 1766, + "value": "node35", }, { - "start": 831, - "value": "node1", + "start": 1768, + "value": "node35", }, { - "start": 833, - "value": "node0", + "start": 1771, + "value": "node35", }, { - "start": 833, - "value": "node0", + "start": 1774, + "value": "node36", }, -] -`; - -exports[`Go: forCStyle: Segmentation 1`] = ` -[ { - "start": 0, - "value": "node0", + "start": 1775, + "value": "node35", }, { - "start": 850, - "value": "node0", + "start": 1775, + "value": "node36", }, { - "start": 870, - "value": "node1", + "start": 1781, + "value": "node35", }, { - "start": 896, - "value": "node2", + "start": 1781, + "value": "node35", }, { - "start": 900, - "value": "node1", + "start": 1782, + "value": "node39", }, { - "start": 900, - "value": "node1", + "start": 1782, + "value": "node47", }, { - "start": 902, - "value": "node0", + "start": 1787, + "value": "node7", }, { - "start": 902, - "value": "node0", + "start": 1787, + "value": "node47", }, -] -`; - -exports[`Go: forRange: Segmentation 1`] = ` -[ { - "start": 0, - "value": "node0", + "start": 1795, + "value": "node42", }, { - "start": 919, - "value": "node0", + "start": 1796, + "value": "node47", }, { - "start": 938, - "value": "node1", + "start": 1796, + "value": "node42", }, { - "start": 955, - "value": "node2", + "start": 1797, + "value": "node42", }, { - "start": 959, - "value": "node1", + "start": 1797, + "value": "node42", }, { - "start": 959, - "value": "node1", + "start": 1800, + "value": "node43", }, { - "start": 961, - "value": "node0", + "start": 1801, + "value": "node47", }, { - "start": 961, - "value": "node0", + "start": 1801, + "value": "node43", }, -] -`; - -exports[`Go: typeSwitch: Segmentation 1`] = ` -[ { - "start": 0, - "value": "node1", + "start": 1803, + "value": "node43", }, { - "start": 978, - "value": "node1", + "start": 1806, + "value": "node43", }, { - "start": 999, - "value": "node1", + "start": 1809, + "value": "node44", }, { - "start": 1016, - "value": "node1", + "start": 1810, + "value": "node43", }, { - "start": 1018, - "value": "node1", + "start": 1810, + "value": "node44", }, { - "start": 1018, - "value": "node1", + "start": 1816, + "value": "node43", }, { - "start": 1027, - "value": "node3", + "start": 1816, + "value": "node43", }, { - "start": 1029, - "value": "node1", + "start": 1817, + "value": "node47", }, { - "start": 1029, - "value": "node3", + "start": 1817, + "value": "node55", }, { - "start": 1039, - "value": "node3", + "start": 1822, + "value": "node7", }, { - "start": 1042, - "value": "node1", + "start": 1822, + "value": "node55", }, { - "start": 1042, - "value": "node1", + "start": 1833, + "value": "node50", }, { - "start": 1044, - "value": "node1", + "start": 1834, + "value": "node50", }, { - "start": 1044, - "value": "node1", + "start": 1835, + "value": "node51", }, -] -`; - -exports[`Go: Select: Segmentation 1`] = ` -[ { - "start": 0, - "value": "node2", + "start": 1836, + "value": "node55", }, { - "start": 1071, - "value": "node2", + "start": 1836, + "value": "node51", }, { - "start": 1104, - "value": "node2", + "start": 1838, + "value": "node51", }, { - "start": 1116, - "value": "node2", + "start": 1841, + "value": "node51", }, { - "start": 1118, - "value": "node2", + "start": 1844, + "value": "node62", }, { - "start": 1118, - "value": "node2", + "start": 1845, + "value": "node51", }, { - "start": 1126, - "value": "node2", + "start": 1845, + "value": "node62", }, { - "start": 1128, - "value": "node2", + "start": 1851, + "value": "node51", }, { - "start": 1128, - "value": "node2", + "start": 1851, + "value": "node51", }, { - "start": 1140, - "value": "node9", + "start": 1852, + "value": "node55", }, { - "start": 1143, - "value": "node2", + "start": 1852, + "value": "node62", }, { - "start": 1143, - "value": "node9", + "start": 1857, + "value": "node7", }, { - "start": 1156, - "value": "node2", + "start": 1857, + "value": "node62", }, { - "start": 1157, - "value": "node6", + "start": 1870, + "value": "node58", }, { - "start": 1158, - "value": "node2", + "start": 1871, + "value": "node62", }, { - "start": 1158, - "value": "node6", + "start": 1871, + "value": "node58", }, { - "start": 1170, - "value": "node6", + "start": 1873, + "value": "node58", }, { - "start": 1173, - "value": "node6", + "start": 1876, + "value": "node58", }, { - "start": 1173, - "value": "node6", + "start": 1879, + "value": "node65", }, { - "start": 1192, - "value": "node6", + "start": 1880, + "value": "node58", }, { - "start": 1195, - "value": "node6", + "start": 1880, + "value": "node65", }, { - "start": 1195, - "value": "node6", + "start": 1886, + "value": "node58", }, { - "start": 1201, - "value": "node6", + "start": 1886, + "value": "node58", }, { - "start": 1202, - "value": "node6", + "start": 1887, + "value": "node62", }, { - "start": 1204, - "value": "node2", + "start": 1887, + "value": "node7", }, { - "start": 1204, - "value": "node2", + "start": 1909, + "value": "Not found", }, { - "start": 1206, - "value": "node2", + "start": 1911, + "value": "node7", }, { - "start": 1206, - "value": "node2", + "start": 1911, + "value": "node7", }, ] `; -exports[`Go: Select2: Segmentation 1`] = ` +exports[`C++: MoreSwitch: Segmentation 1`] = ` [ { "start": 0, - "value": "node2", + "value": "node1", }, { - "start": 1233, - "value": "node2", + "start": 1928, + "value": "node1", }, { - "start": 1267, - "value": "node2", + "start": 2030, + "value": "node1", }, { - "start": 1279, - "value": "node2", + "start": 2042, + "value": "node1", }, { - "start": 1281, - "value": "node2", + "start": 2051, + "value": "node1", }, { - "start": 1281, - "value": "node2", + "start": 2051, + "value": "node1", }, { - "start": 1289, + "start": 2058, "value": "node2", }, { - "start": 1291, - "value": "node2", + "start": 2059, + "value": "node1", }, { - "start": 1291, + "start": 2059, "value": "node2", }, { - "start": 1303, - "value": "node3", + "start": 2065, + "value": "node1", }, { - "start": 1306, - "value": "node2", + "start": 2065, + "value": "node3", }, { - "start": 1306, - "value": "node3", + "start": 2074, + "value": "node1", }, { - "start": 1319, - "value": "node2", + "start": 2074, + "value": "node3", }, { - "start": 1320, + "start": 2081, "value": "node4", }, { - "start": 1321, - "value": "node2", + "start": 2082, + "value": "node3", }, { - "start": 1321, + "start": 2082, "value": "node4", }, { - "start": 1333, - "value": "node6", - }, - { - "start": 1336, - "value": "node4", + "start": 2088, + "value": "node3", }, { - "start": 1336, - "value": "node6", + "start": 2088, + "value": "node5", }, { - "start": 1355, - "value": "node6", + "start": 2097, + "value": "node1", }, { - "start": 1358, - "value": "node4", + "start": 2097, + "value": "node5", }, { - "start": 1358, + "start": 2104, "value": "node6", }, { - "start": 1364, - "value": "node4", + "start": 2105, + "value": "node5", }, { - "start": 1365, - "value": "node8", + "start": 2105, + "value": "node6", }, { - "start": 1366, - "value": "node2", + "start": 2109, + "value": "node5", }, { - "start": 1366, - "value": "node8", + "start": 2109, + "value": "node7", }, { - "start": 1375, - "value": "node8", + "start": 2118, + "value": "node1", }, { - "start": 1378, - "value": "node8", + "start": 2118, + "value": "node7", }, { - "start": 1378, + "start": 2125, "value": "node8", }, { - "start": 1381, - "value": "node8", + "start": 2126, + "value": "node7", }, { - "start": 1382, + "start": 2126, "value": "node8", }, { - "start": 1384, - "value": "node2", - }, - { - "start": 1384, - "value": "node2", + "start": 2132, + "value": "node7", }, { - "start": 1386, - "value": "node2", + "start": 2132, + "value": "node10", }, { - "start": 1386, - "value": "node2", + "start": 2141, + "value": "node1", }, -] -`; - -exports[`Python: trivial: Segmentation 1`] = ` -[ { - "start": 0, - "value": "node2", + "start": 2141, + "value": "node10", }, { - "start": 23, - "value": "node2", + "start": 2149, + "value": "node10", }, { - "start": 42, - "value": "node2", + "start": 2150, + "value": "node10", }, { - "start": 46, - "value": "node2", + "start": 2150, + "value": "node10", }, { - "start": 46, - "value": "node2", + "start": 2154, + "value": "node10", }, { - "start": 46, - "value": "node2", + "start": 2154, + "value": "node10", }, -] -`; - -exports[`Python: If: Segmentation 1`] = ` -[ { - "start": 0, + "start": 2160, "value": "node1", }, { - "start": 59, + "start": 2160, "value": "node1", }, { - "start": 73, + "start": 2162, "value": "node1", }, { - "start": 76, + "start": 2162, "value": "node1", }, +] +`; + +exports[`Go: trivial: Segmentation 1`] = ` +[ { - "start": 77, - "value": "node1", + "start": 0, + "value": "node2", }, { - "start": 78, + "start": 43, "value": "node2", }, { - "start": 87, + "start": 61, "value": "node2", }, +] +`; + +exports[`Go: ifThen: Segmentation 1`] = ` +[ + { + "start": 0, + "value": "node1", + }, { - "start": 91, - "value": "node2", + "start": 78, + "value": "node1", }, { - "start": 91, - "value": "node2", + "start": 95, + "value": "node1", }, { - "start": 91, - "value": "node1", + "start": 100, + "value": "node3", }, { - "start": 91, - "value": "node6", + "start": 105, + "value": "node3", }, { - "start": 96, - "value": "node6", + "start": 105, + "value": "node1", }, { - "start": 100, + "start": 105, "value": "node1", }, { - "start": 100, - "value": "node6", + "start": 107, + "value": "node1", }, { - "start": 100, + "start": 107, "value": "node1", }, ] `; -exports[`Python: IfElse: Segmentation 1`] = ` +exports[`Go: ManyIfStatements: Segmentation 1`] = ` [ { "start": 0, "value": "node1", }, { - "start": 113, - "value": "node1", - }, - { - "start": 131, + "start": 135, "value": "node1", }, { - "start": 134, + "start": 162, "value": "node1", }, { - "start": 135, - "value": "node1", + "start": 167, + "value": "node3", }, { - "start": 136, - "value": "node2", + "start": 171, + "value": "node3", }, { - "start": 145, - "value": "node2", + "start": 171, + "value": "node1", }, { - "start": 148, - "value": "node2", + "start": 171, + "value": "node4", }, { - "start": 148, - "value": "node2", + "start": 177, + "value": "node4", }, { - "start": 148, + "start": 181, "value": "node1", }, { - "start": 148, - "value": "node3", + "start": 181, + "value": "node5", }, { - "start": 153, + "start": 184, "value": "node1", }, { - "start": 153, - "value": "node3", + "start": 184, + "value": "node5", }, { - "start": 158, - "value": "node3", + "start": 189, + "value": "node7", }, { - "start": 167, - "value": "node3", + "start": 193, + "value": "node7", }, { - "start": 170, - "value": "node3", + "start": 193, + "value": "node5", }, { - "start": 170, - "value": "node3", + "start": 193, + "value": "node8", }, { - "start": 170, - "value": "node1", + "start": 199, + "value": "node5", }, { - "start": 170, - "value": "node7", + "start": 199, + "value": "node8", }, { - "start": 175, - "value": "node7", + "start": 204, + "value": "node9", }, { - "start": 178, - "value": "node1", + "start": 208, + "value": "node9", }, { - "start": 178, - "value": "node7", + "start": 208, + "value": "node8", }, { - "start": 178, - "value": "node1", + "start": 208, + "value": "node5", }, -] -`; - -exports[`Python: IfElifElse: Segmentation 1`] = ` -[ { - "start": 0, - "value": "node1", + "start": 208, + "value": "node10", }, { - "start": 191, + "start": 211, "value": "node1", }, { - "start": 213, - "value": "node1", + "start": 211, + "value": "node10", }, { "start": 216, - "value": "node1", - }, - { - "start": 217, - "value": "node1", + "value": "node12", }, { - "start": 218, - "value": "node2", + "start": 220, + "value": "node12", }, { - "start": 227, - "value": "node2", + "start": 220, + "value": "node10", }, { - "start": 230, - "value": "node2", + "start": 220, + "value": "node13", }, { - "start": 230, - "value": "node2", + "start": 226, + "value": "node10", }, { - "start": 230, - "value": "node1", + "start": 226, + "value": "node13", }, { - "start": 230, - "value": "node3", + "start": 231, + "value": "node14", }, { "start": 235, - "value": "node1", + "value": "node14", }, { "start": 235, - "value": "node3", + "value": "node13", }, { - "start": 240, - "value": "node3", + "start": 235, + "value": "node15", }, { "start": 241, - "value": "node3", - }, - { - "start": 242, - "value": "node4", + "value": "node15", }, { - "start": 251, - "value": "node4", + "start": 245, + "value": "node13", }, { - "start": 254, - "value": "node4", + "start": 245, + "value": "node10", }, { - "start": 254, - "value": "node3", + "start": 245, + "value": "node10", }, { - "start": 254, - "value": "node5", + "start": 247, + "value": "node1", }, { - "start": 259, + "start": 247, "value": "node1", }, +] +`; + +exports[`Go: Switch: Segmentation 1`] = ` +[ { - "start": 259, - "value": "node5", + "start": 0, + "value": "node1", }, { "start": 264, - "value": "node5", - }, - { - "start": 273, - "value": "node5", + "value": "node1", }, { - "start": 276, - "value": "node5", + "start": 281, + "value": "node1", }, { - "start": 276, - "value": "node5", + "start": 291, + "value": "node1", }, { - "start": 276, + "start": 293, "value": "node1", }, { - "start": 276, - "value": "node9", + "start": 293, + "value": "node1", }, { - "start": 281, - "value": "node9", + "start": 300, + "value": "node3", }, { - "start": 284, + "start": 302, "value": "node1", }, { - "start": 284, - "value": "node9", + "start": 302, + "value": "node3", }, { - "start": 284, - "value": "node1", + "start": 309, + "value": "node5", }, -] -`; - -exports[`Python: For: Segmentation 1`] = ` -[ { - "start": 0, - "value": "node0", + "start": 311, + "value": "node1", }, { - "start": 309, - "value": "node0", + "start": 311, + "value": "node5", }, { - "start": 324, - "value": "node2", + "start": 318, + "value": "node7", }, { - "start": 335, + "start": 320, "value": "node1", }, { - "start": 344, - "value": "node1", + "start": 320, + "value": "node7", }, { - "start": 348, - "value": "node1", + "start": 327, + "value": "node7", }, { - "start": 348, - "value": "node2", + "start": 330, + "value": "node1", }, { - "start": 348, - "value": "node0", + "start": 330, + "value": "node1", }, { - "start": 348, - "value": "node2", + "start": 332, + "value": "node1", }, { - "start": 348, - "value": "node0", + "start": 332, + "value": "node1", }, ] `; -exports[`Python: ForContinue: Segmentation 1`] = ` +exports[`Go: switchAndLabelsAndGoto: Segmentation 1`] = ` [ { "start": 0, - "value": "node0", + "value": "node1", }, { - "start": 361, - "value": "node0", + "start": 350, + "value": "node1", }, { - "start": 384, - "value": "node6", + "start": 383, + "value": "node1", + }, + { + "start": 393, + "value": "node1", }, { "start": 395, "value": "node1", }, { - "start": 404, - "value": "node6", + "start": 395, + "value": "node1", + }, + { + "start": 402, + "value": "node3", }, { "start": 404, "value": "node1", }, { - "start": 407, - "value": "node1", + "start": 404, + "value": "node3", }, { - "start": 408, - "value": "node1", + "start": 411, + "value": "node13", }, { - "start": 409, - "value": "node2", + "start": 414, + "value": "node3", }, { - "start": 422, - "value": "node2", + "start": 414, + "value": "node13", }, { - "start": 430, - "value": "node2", + "start": 424, + "value": "node3", }, { - "start": 430, - "value": "node2", + "start": 425, + "value": "node5", }, { - "start": 430, + "start": 426, "value": "node1", }, { - "start": 430, + "start": 426, "value": "node5", }, { - "start": 439, - "value": "node5", + "start": 433, + "value": "node7", }, { - "start": 443, + "start": 435, "value": "node1", }, { - "start": 443, - "value": "node6", + "start": 435, + "value": "node7", }, { - "start": 443, - "value": "node0", + "start": 442, + "value": "node7", }, { - "start": 443, - "value": "node6", + "start": 445, + "value": "node1", }, { - "start": 443, - "value": "node0", + "start": 445, + "value": "node11", }, -] -`; - -exports[`Python: ForBreak: Segmentation 1`] = ` -[ { - "start": 0, - "value": "node0", + "start": 447, + "value": "node1", }, { - "start": 456, - "value": "node0", + "start": 447, + "value": "node11", }, { - "start": 476, - "value": "node5", + "start": 453, + "value": "node13", }, { - "start": 487, + "start": 455, "value": "node1", }, { - "start": 496, - "value": "node5", + "start": 455, + "value": "node13", }, { - "start": 496, - "value": "node1", + "start": 463, + "value": "node13", }, { - "start": 499, - "value": "node1", + "start": 468, + "value": "node15", }, { - "start": 500, - "value": "node1", + "start": 472, + "value": "node15", }, { - "start": 501, - "value": "node2", + "start": 475, + "value": "node15", }, { - "start": 514, - "value": "node2", + "start": 478, + "value": "node15", }, { - "start": 519, - "value": "node2", + "start": 478, + "value": "node16", }, { - "start": 519, - "value": "node2", + "start": 484, + "value": "node13", }, { - "start": 519, - "value": "node1", + "start": 484, + "value": "node16", }, { - "start": 519, - "value": "node1", + "start": 488, + "value": "node16", }, { - "start": 519, - "value": "node5", + "start": 491, + "value": "node16", }, { - "start": 519, - "value": "node0", + "start": 494, + "value": "node13", }, { - "start": 519, - "value": "node5", + "start": 494, + "value": "node13", }, { - "start": 519, - "value": "node0", + "start": 494, + "value": "node13", + }, + { + "start": 496, + "value": "node1", + }, + { + "start": 496, + "value": "node1", }, ] `; -exports[`Python: ForElse: Segmentation 1`] = ` +exports[`Go: trivialReachability: Segmentation 1`] = ` [ { "start": 0, - "value": "node0", + "value": "node2", }, { - "start": 532, - "value": "node0", + "start": 539, + "value": "node2", }, { - "start": 551, - "value": "node3", + "start": 589, + "value": "Not found", }, { - "start": 562, - "value": "node1", + "start": 591, + "value": "node2", }, { - "start": 571, - "value": "node1", + "start": 591, + "value": "node2", }, +] +`; + +exports[`Go: hasFallthrough: Segmentation 1`] = ` +[ { - "start": 575, + "start": 0, "value": "node1", }, { - "start": 575, - "value": "node3", + "start": 624, + "value": "node1", }, { - "start": 594, - "value": "node2", + "start": 649, + "value": "node1", }, { - "start": 602, - "value": "node2", + "start": 659, + "value": "node1", }, { - "start": 602, - "value": "node3", + "start": 661, + "value": "node1", }, { - "start": 602, - "value": "node0", + "start": 661, + "value": "node1", }, { - "start": 602, - "value": "node3", + "start": 668, + "value": "Not found", }, { - "start": 602, - "value": "node0", + "start": 671, + "value": "node1", }, -] -`; - -exports[`Python: ForElseBreak: Segmentation 1`] = ` -[ { - "start": 0, - "value": "node0", + "start": 683, + "value": "node2", }, { - "start": 615, - "value": "node0", + "start": 694, + "value": "node1", }, { - "start": 639, - "value": "node6", + "start": 695, + "value": "node3", }, { - "start": 650, + "start": 696, "value": "node1", }, { - "start": 659, - "value": "node6", + "start": 696, + "value": "node3", }, { - "start": 659, - "value": "node1", + "start": 703, + "value": "Not found", + }, + { + "start": 706, + "value": "node3", }, { - "start": 662, - "value": "node1", + "start": 718, + "value": "node4", }, { - "start": 663, - "value": "node1", + "start": 731, + "value": "node3", }, { - "start": 664, - "value": "node2", + "start": 732, + "value": "node3", }, { - "start": 677, - "value": "node2", + "start": 734, + "value": "node1", }, { - "start": 682, - "value": "node2", + "start": 734, + "value": "node1", }, { - "start": 682, - "value": "node2", + "start": 736, + "value": "node1", }, { - "start": 682, + "start": 736, "value": "node1", }, +] +`; + +exports[`Go: forever: Segmentation 1`] = ` +[ { - "start": 682, - "value": "node1", + "start": 0, + "value": "node0", }, { - "start": 682, - "value": "node6", + "start": 753, + "value": "node0", }, { - "start": 701, - "value": "node5", + "start": 771, + "value": "node2", }, { - "start": 705, - "value": "node5", + "start": 775, + "value": "node2", }, { - "start": 705, - "value": "node6", + "start": 779, + "value": "node2", }, { - "start": 705, - "value": "node0", + "start": 779, + "value": "node2", }, { - "start": 705, - "value": "node6", + "start": 781, + "value": "node0", }, { - "start": 705, + "start": 781, "value": "node0", }, ] `; -exports[`Python: ForElseBreakReturn: Segmentation 1`] = ` +exports[`Go: forCond: Segmentation 1`] = ` [ { "start": 0, "value": "node0", }, { - "start": 718, + "start": 798, "value": "node0", }, { - "start": 748, - "value": "node6", - }, - { - "start": 759, + "start": 816, "value": "node1", }, { - "start": 768, - "value": "node6", - }, - { - "start": 768, - "value": "node1", + "start": 827, + "value": "node2", }, { - "start": 771, + "start": 831, "value": "node1", }, { - "start": 772, + "start": 831, "value": "node1", }, { - "start": 773, - "value": "node8", - }, - { - "start": 786, - "value": "node8", + "start": 833, + "value": "node0", }, { - "start": 791, - "value": "node8", + "start": 833, + "value": "node0", }, +] +`; + +exports[`Go: forCStyle: Segmentation 1`] = ` +[ { - "start": 791, - "value": "node8", + "start": 0, + "value": "node0", }, { - "start": 791, - "value": "node1", + "start": 850, + "value": "node0", }, { - "start": 791, + "start": 870, "value": "node1", }, { - "start": 791, - "value": "node6", - }, - { - "start": 810, - "value": "node5", + "start": 896, + "value": "node2", }, { - "start": 816, - "value": "node5", + "start": 900, + "value": "node1", }, { - "start": 816, - "value": "node6", + "start": 900, + "value": "node1", }, { - "start": 816, + "start": 902, "value": "node0", }, { - "start": 816, - "value": "node6", - }, - { - "start": 816, + "start": 902, "value": "node0", }, ] `; -exports[`Python: While: Segmentation 1`] = ` +exports[`Go: forRange: Segmentation 1`] = ` [ { "start": 0, "value": "node0", }, { - "start": 829, + "start": 919, "value": "node0", }, { - "start": 852, + "start": 938, "value": "node1", }, { - "start": 853, - "value": "node0", - }, - { - "start": 854, + "start": 955, "value": "node2", }, { - "start": 863, - "value": "node2", + "start": 959, + "value": "node1", }, { - "start": 867, - "value": "node2", + "start": 959, + "value": "node1", }, { - "start": 867, + "start": 961, "value": "node0", }, { - "start": 867, - "value": "Not found", - }, - { - "start": 867, + "start": 961, "value": "node0", }, ] `; -exports[`Python: WhileContinue: Segmentation 1`] = ` +exports[`Go: typeSwitch: Segmentation 1`] = ` [ { "start": 0, - "value": "node0", + "value": "node1", }, { - "start": 880, - "value": "node0", + "start": 978, + "value": "node1", }, { - "start": 911, + "start": 999, "value": "node1", }, { - "start": 912, - "value": "node0", + "start": 1016, + "value": "node1", }, { - "start": 913, - "value": "node2", + "start": 1018, + "value": "node1", }, { - "start": 922, - "value": "node0", + "start": 1018, + "value": "node1", }, { - "start": 922, - "value": "node2", + "start": 1027, + "value": "node3", }, { - "start": 925, - "value": "node2", + "start": 1029, + "value": "node1", }, { - "start": 926, - "value": "node2", + "start": 1029, + "value": "node3", }, { - "start": 927, + "start": 1039, "value": "node3", }, { - "start": 940, - "value": "node3", + "start": 1042, + "value": "node1", }, { - "start": 948, - "value": "node3", + "start": 1042, + "value": "node1", }, { - "start": 948, - "value": "node3", + "start": 1044, + "value": "node1", }, { - "start": 948, + "start": 1044, + "value": "node1", + }, +] +`; + +exports[`Go: Select: Segmentation 1`] = ` +[ + { + "start": 0, "value": "node2", }, { - "start": 948, - "value": "node6", + "start": 1071, + "value": "node2", }, { - "start": 957, - "value": "node6", + "start": 1104, + "value": "node2", }, { - "start": 961, + "start": 1116, "value": "node2", }, { - "start": 961, - "value": "node0", + "start": 1118, + "value": "node2", }, { - "start": 961, - "value": "Not found", + "start": 1118, + "value": "node2", }, { - "start": 961, - "value": "node0", + "start": 1126, + "value": "node2", }, -] -`; - -exports[`Python: WhileBreak: Segmentation 1`] = ` -[ { - "start": 0, - "value": "node0", + "start": 1128, + "value": "node2", + }, + { + "start": 1128, + "value": "node2", }, { - "start": 974, - "value": "node0", + "start": 1140, + "value": "node9", }, { - "start": 1002, - "value": "node1", + "start": 1143, + "value": "node2", }, { - "start": 1003, - "value": "node0", + "start": 1143, + "value": "node9", }, { - "start": 1004, + "start": 1156, "value": "node2", }, { - "start": 1013, - "value": "node0", + "start": 1157, + "value": "node6", }, { - "start": 1013, + "start": 1158, "value": "node2", }, { - "start": 1016, - "value": "node2", + "start": 1158, + "value": "node6", }, { - "start": 1017, - "value": "node2", + "start": 1170, + "value": "node6", }, { - "start": 1018, - "value": "node3", + "start": 1173, + "value": "node6", }, { - "start": 1031, - "value": "node3", + "start": 1173, + "value": "node6", }, { - "start": 1036, - "value": "node3", + "start": 1192, + "value": "node6", }, { - "start": 1036, - "value": "node3", + "start": 1195, + "value": "node6", }, { - "start": 1036, - "value": "node2", + "start": 1195, + "value": "node6", }, { - "start": 1036, + "start": 1201, + "value": "node6", + }, + { + "start": 1202, + "value": "node6", + }, + { + "start": 1204, "value": "node2", }, { - "start": 1036, - "value": "node0", + "start": 1204, + "value": "node2", }, { - "start": 1036, - "value": "Not found", + "start": 1206, + "value": "node2", }, { - "start": 1036, - "value": "node0", + "start": 1206, + "value": "node2", }, ] `; -exports[`Python: WhileElse: Segmentation 1`] = ` +exports[`Go: Select2: Segmentation 1`] = ` [ { "start": 0, - "value": "node0", - }, - { - "start": 1057, - "value": "node0", + "value": "node2", }, { - "start": 1084, - "value": "node1", + "start": 1233, + "value": "node2", }, { - "start": 1085, - "value": "node0", + "start": 1267, + "value": "node2", }, { - "start": 1086, + "start": 1279, "value": "node2", }, { - "start": 1095, + "start": 1281, "value": "node2", }, { - "start": 1099, + "start": 1281, "value": "node2", }, { - "start": 1099, - "value": "node0", + "start": 1289, + "value": "node2", }, { - "start": 1118, - "value": "node5", + "start": 1291, + "value": "node2", }, { - "start": 1122, - "value": "node5", + "start": 1291, + "value": "node2", }, { - "start": 1122, - "value": "node0", + "start": 1303, + "value": "node3", }, { - "start": 1122, - "value": "Not found", + "start": 1306, + "value": "node2", }, { - "start": 1122, - "value": "node0", + "start": 1306, + "value": "node3", }, -] -`; - -exports[`Python: WhileElseBreak: Segmentation 1`] = ` -[ { - "start": 0, - "value": "node0", + "start": 1319, + "value": "node2", }, { - "start": 1135, - "value": "node0", + "start": 1320, + "value": "node4", }, { - "start": 1167, - "value": "node1", + "start": 1321, + "value": "node2", }, { - "start": 1168, - "value": "node0", + "start": 1321, + "value": "node4", }, { - "start": 1169, - "value": "node2", + "start": 1333, + "value": "node6", }, { - "start": 1178, - "value": "node0", + "start": 1336, + "value": "node4", }, { - "start": 1178, - "value": "node2", + "start": 1336, + "value": "node6", }, { - "start": 1181, - "value": "node2", + "start": 1355, + "value": "node6", }, { - "start": 1182, - "value": "node2", + "start": 1358, + "value": "node4", }, { - "start": 1183, - "value": "node3", + "start": 1358, + "value": "node6", }, { - "start": 1196, - "value": "node3", + "start": 1364, + "value": "node4", }, { - "start": 1201, - "value": "node3", + "start": 1365, + "value": "node8", }, { - "start": 1201, - "value": "node3", + "start": 1366, + "value": "node2", }, { - "start": 1201, - "value": "node2", + "start": 1366, + "value": "node8", }, { - "start": 1201, - "value": "node6", + "start": 1375, + "value": "node8", }, { - "start": 1210, - "value": "node6", + "start": 1378, + "value": "node8", }, { - "start": 1214, - "value": "node2", + "start": 1378, + "value": "node8", }, { - "start": 1214, - "value": "node0", + "start": 1381, + "value": "node8", }, { - "start": 1233, - "value": "node7", + "start": 1382, + "value": "node8", }, { - "start": 1237, - "value": "node7", + "start": 1384, + "value": "node2", }, { - "start": 1237, - "value": "node0", + "start": 1384, + "value": "node2", }, { - "start": 1237, - "value": "Not found", + "start": 1386, + "value": "node2", }, { - "start": 1237, - "value": "node0", + "start": 1386, + "value": "node2", }, ] `; -exports[`Python: Match: Segmentation 1`] = ` +exports[`Python: trivial: Segmentation 1`] = ` [ { "start": 0, - "value": "node1", - }, - { - "start": 1250, - "value": "node1", - }, - { - "start": 1267, - "value": "node1", - }, - { - "start": 1273, - "value": "node1", + "value": "node2", }, { - "start": 1274, - "value": "node1", + "start": 23, + "value": "node2", }, { - "start": 1284, - "value": "node4", + "start": 42, + "value": "node2", }, { - "start": 1289, - "value": "node4", + "start": 46, + "value": "node2", }, { - "start": 1290, - "value": "node4", + "start": 46, + "value": "node2", }, { - "start": 1291, - "value": "node3", + "start": 46, + "value": "node2", }, +] +`; + +exports[`Python: If: Segmentation 1`] = ` +[ { - "start": 1304, - "value": "node3", + "start": 0, + "value": "node1", }, { - "start": 1308, - "value": "node3", + "start": 59, + "value": "node1", }, { - "start": 1308, - "value": "node4", + "start": 73, + "value": "node1", }, { - "start": 1308, + "start": 76, "value": "node1", }, { - "start": 1317, - "value": "node6", + "start": 77, + "value": "node1", }, { - "start": 1322, - "value": "node6", + "start": 78, + "value": "node2", }, { - "start": 1323, - "value": "node6", + "start": 87, + "value": "node2", }, { - "start": 1324, - "value": "node5", + "start": 91, + "value": "node2", }, { - "start": 1337, - "value": "node5", + "start": 91, + "value": "node2", }, { - "start": 1341, - "value": "node5", + "start": 91, + "value": "node1", }, { - "start": 1341, + "start": 91, "value": "node6", }, { - "start": 1341, - "value": "node1", + "start": 96, + "value": "node6", }, { - "start": 1341, + "start": 100, "value": "node1", }, { - "start": 1341, - "value": "node1", + "start": 100, + "value": "node6", }, { - "start": 1341, + "start": 100, "value": "node1", }, ] `; -exports[`Python: MatchMultiPattern: Segmentation 1`] = ` +exports[`Python: IfElse: Segmentation 1`] = ` [ { "start": 0, "value": "node1", }, { - "start": 1354, + "start": 113, "value": "node1", }, { - "start": 1383, + "start": 131, "value": "node1", }, { - "start": 1389, + "start": 134, "value": "node1", }, { - "start": 1390, + "start": 135, "value": "node1", }, { - "start": 1400, - "value": "node4", + "start": 136, + "value": "node2", }, { - "start": 1405, - "value": "node4", + "start": 145, + "value": "node2", }, { - "start": 1406, - "value": "node4", + "start": 148, + "value": "node2", }, { - "start": 1407, - "value": "node4", + "start": 148, + "value": "node2", }, { - "start": 1408, - "value": "node4", + "start": 148, + "value": "node1", }, { - "start": 1409, - "value": "node4", + "start": 148, + "value": "node3", }, { - "start": 1410, - "value": "node4", + "start": 153, + "value": "node1", }, { - "start": 1411, + "start": 153, "value": "node3", }, { - "start": 1424, + "start": 158, "value": "node3", }, { - "start": 1430, + "start": 167, "value": "node3", }, { - "start": 1430, - "value": "node4", + "start": 170, + "value": "node3", }, { - "start": 1430, - "value": "node1", + "start": 170, + "value": "node3", }, { - "start": 1439, - "value": "node6", + "start": 170, + "value": "node1", }, { - "start": 1444, - "value": "node6", + "start": 170, + "value": "node7", }, { - "start": 1445, - "value": "node6", + "start": 175, + "value": "node7", }, { - "start": 1446, - "value": "node6", + "start": 178, + "value": "node1", }, { - "start": 1447, - "value": "node6", + "start": 178, + "value": "node7", }, { - "start": 1448, - "value": "node5", + "start": 178, + "value": "node1", }, +] +`; + +exports[`Python: IfElifElse: Segmentation 1`] = ` +[ { - "start": 1461, - "value": "node5", + "start": 0, + "value": "node1", }, { - "start": 1467, - "value": "node5", + "start": 191, + "value": "node1", }, { - "start": 1467, - "value": "node6", + "start": 213, + "value": "node1", }, { - "start": 1467, + "start": 216, "value": "node1", }, { - "start": 1467, + "start": 217, "value": "node1", }, { - "start": 1467, - "value": "node1", + "start": 218, + "value": "node2", }, { - "start": 1467, - "value": "node1", + "start": 227, + "value": "node2", }, -] -`; - -exports[`Python: Return: Segmentation 1`] = ` -[ { - "start": 0, - "value": "node1", + "start": 230, + "value": "node2", }, { - "start": 1480, - "value": "node1", + "start": 230, + "value": "node2", }, { - "start": 1498, + "start": 230, "value": "node1", }, { - "start": 1501, - "value": "node1", + "start": 230, + "value": "node3", }, { - "start": 1502, + "start": 235, "value": "node1", }, { - "start": 1503, - "value": "node2", + "start": 235, + "value": "node3", }, { - "start": 1512, - "value": "node2", + "start": 240, + "value": "node3", }, { - "start": 1520, - "value": "node2", + "start": 241, + "value": "node3", }, { - "start": 1520, - "value": "node2", + "start": 242, + "value": "node4", }, { - "start": 1520, - "value": "node1", + "start": 251, + "value": "node4", }, { - "start": 1520, + "start": 254, + "value": "node4", + }, + { + "start": 254, + "value": "node3", + }, + { + "start": 254, "value": "node5", }, { - "start": 1525, + "start": 259, "value": "node1", }, { - "start": 1525, + "start": 259, "value": "node5", }, { - "start": 1533, - "value": "node1", + "start": 264, + "value": "node5", }, { - "start": 1533, + "start": 273, "value": "node5", }, { - "start": 1533, + "start": 276, + "value": "node5", + }, + { + "start": 276, + "value": "node5", + }, + { + "start": 276, "value": "node1", }, -] -`; - -exports[`Python: WithCluster: Segmentation 1`] = ` -[ { - "start": 0, - "value": "node2", + "start": 276, + "value": "node9", }, { - "start": 1563, - "value": "node2", + "start": 281, + "value": "node9", }, { - "start": 1586, - "value": "node2", + "start": 284, + "value": "node1", + }, + { + "start": 284, + "value": "node9", + }, + { + "start": 284, + "value": "node1", }, +] +`; + +exports[`Python: For: Segmentation 1`] = ` +[ { - "start": 1590, - "value": "node2", + "start": 0, + "value": "node0", }, { - "start": 1590, - "value": "Not found", + "start": 309, + "value": "node0", }, { - "start": 1595, + "start": 324, "value": "node2", }, { - "start": 1600, - "value": "node2", + "start": 335, + "value": "node1", }, { - "start": 1601, - "value": "node2", + "start": 344, + "value": "node1", }, { - "start": 1602, - "value": "node3", + "start": 348, + "value": "node1", }, { - "start": 1611, + "start": 348, "value": "node2", }, { - "start": 1611, - "value": "node3", - }, - { - "start": 1614, - "value": "node3", + "start": 348, + "value": "node0", }, { - "start": 1617, - "value": "node3", + "start": 348, + "value": "node2", }, { - "start": 1618, - "value": "node4", + "start": 348, + "value": "node0", }, +] +`; + +exports[`Python: ForContinue: Segmentation 1`] = ` +[ { - "start": 1631, - "value": "node4", + "start": 0, + "value": "node0", }, { - "start": 1634, - "value": "node4", + "start": 361, + "value": "node0", }, { - "start": 1634, - "value": "node4", + "start": 384, + "value": "node6", }, { - "start": 1634, - "value": "node3", + "start": 395, + "value": "node1", }, { - "start": 1634, - "value": "node7", + "start": 404, + "value": "node6", }, { - "start": 1643, - "value": "node7", + "start": 404, + "value": "node1", }, { - "start": 1646, - "value": "node3", + "start": 407, + "value": "node1", }, { - "start": 1646, - "value": "Not found", + "start": 408, + "value": "node1", }, { - "start": 1651, + "start": 409, "value": "node2", }, { - "start": 1656, - "value": "node8", + "start": 422, + "value": "node2", }, { - "start": 1657, + "start": 430, "value": "node2", }, { - "start": 1658, - "value": "node9", + "start": 430, + "value": "node2", }, { - "start": 1667, - "value": "node9", + "start": 430, + "value": "node1", }, { - "start": 1671, - "value": "node9", + "start": 430, + "value": "node5", }, { - "start": 1671, - "value": "node2", + "start": 439, + "value": "node5", }, { - "start": 1671, - "value": "node11", + "start": 443, + "value": "node1", }, { - "start": 1676, - "value": "node11", + "start": 443, + "value": "node6", }, { - "start": 1680, - "value": "node2", + "start": 443, + "value": "node0", }, { - "start": 1680, - "value": "node11", + "start": 443, + "value": "node6", }, { - "start": 1680, - "value": "node2", + "start": 443, + "value": "node0", }, ] `; -exports[`Python: WithNestedCluster: Segmentation 1`] = ` +exports[`Python: ForBreak: Segmentation 1`] = ` [ { "start": 0, - "value": "node1", + "value": "node0", }, { - "start": 1710, - "value": "node1", + "start": 456, + "value": "node0", }, { - "start": 1744, + "start": 476, + "value": "node5", + }, + { + "start": 487, "value": "node1", }, { - "start": 1745, + "start": 496, + "value": "node5", + }, + { + "start": 496, "value": "node1", }, { - "start": 1746, - "value": "node2", + "start": 499, + "value": "node1", }, { - "start": 1755, + "start": 500, "value": "node1", }, { - "start": 1755, + "start": 501, "value": "node2", }, { - "start": 1758, + "start": 514, "value": "node2", }, { - "start": 1761, + "start": 519, "value": "node2", }, { - "start": 1762, - "value": "node3", + "start": 519, + "value": "node2", }, { - "start": 1775, - "value": "node3", + "start": 519, + "value": "node1", }, { - "start": 1778, - "value": "node3", + "start": 519, + "value": "node1", }, { - "start": 1778, - "value": "node3", + "start": 519, + "value": "node5", }, { - "start": 1778, - "value": "node2", + "start": 519, + "value": "node0", }, { - "start": 1778, - "value": "node6", + "start": 519, + "value": "node5", }, { - "start": 1787, - "value": "node6", + "start": 519, + "value": "node0", }, +] +`; + +exports[`Python: ForElse: Segmentation 1`] = ` +[ { - "start": 1790, - "value": "node2", + "start": 0, + "value": "node0", }, { - "start": 1790, - "value": "Not found", + "start": 532, + "value": "node0", }, { - "start": 1795, + "start": 551, + "value": "node3", + }, + { + "start": 562, "value": "node1", }, { - "start": 1800, - "value": "node7", + "start": 571, + "value": "node1", }, { - "start": 1801, + "start": 575, "value": "node1", }, { - "start": 1802, - "value": "node8", + "start": 575, + "value": "node3", }, { - "start": 1811, - "value": "node1", + "start": 594, + "value": "node2", }, { - "start": 1811, - "value": "node8", + "start": 602, + "value": "node2", }, { - "start": 1814, - "value": "node8", + "start": 602, + "value": "node3", }, { - "start": 1815, - "value": "node8", + "start": 602, + "value": "node0", }, { - "start": 1816, - "value": "node9", + "start": 602, + "value": "node3", }, { - "start": 1829, - "value": "node8", + "start": 602, + "value": "node0", }, +] +`; + +exports[`Python: ForElseBreak: Segmentation 1`] = ` +[ { - "start": 1829, - "value": "node9", + "start": 0, + "value": "node0", }, { - "start": 1834, - "value": "node9", + "start": 615, + "value": "node0", + }, + { + "start": 639, + "value": "node6", + }, + { + "start": 650, + "value": "node1", + }, + { + "start": 659, + "value": "node6", }, { - "start": 1835, - "value": "node9", + "start": 659, + "value": "node1", }, { - "start": 1836, - "value": "node10", + "start": 662, + "value": "node1", }, { - "start": 1853, - "value": "node9", + "start": 663, + "value": "node1", }, { - "start": 1853, - "value": "node10", + "start": 664, + "value": "node2", }, { - "start": 1859, - "value": "node10", + "start": 677, + "value": "node2", }, { - "start": 1860, - "value": "node10", + "start": 682, + "value": "node2", }, { - "start": 1882, - "value": "node13", + "start": 682, + "value": "node2", }, { - "start": 1887, - "value": "node13", + "start": 682, + "value": "node1", }, { - "start": 1888, - "value": "node13", + "start": 682, + "value": "node1", }, { - "start": 1889, - "value": "node12", + "start": 682, + "value": "node6", }, { - "start": 1889, - "value": "node12", + "start": 701, + "value": "node5", }, { - "start": 1893, - "value": "node12", + "start": 705, + "value": "node5", }, { - "start": 1893, - "value": "node13", + "start": 705, + "value": "node6", }, { - "start": 1893, - "value": "node10", + "start": 705, + "value": "node0", }, { - "start": 1914, - "value": "node15", + "start": 705, + "value": "node6", }, { - "start": 1919, - "value": "node15", + "start": 705, + "value": "node0", }, +] +`; + +exports[`Python: ForElseBreakReturn: Segmentation 1`] = ` +[ { - "start": 1920, - "value": "node15", + "start": 0, + "value": "node0", }, { - "start": 1921, - "value": "node14", + "start": 718, + "value": "node0", }, { - "start": 1921, - "value": "node14", + "start": 748, + "value": "node6", }, { - "start": 1925, - "value": "node14", + "start": 759, + "value": "node1", }, { - "start": 1925, - "value": "node15", + "start": 768, + "value": "node6", }, { - "start": 1925, - "value": "node10", + "start": 768, + "value": "node1", }, { - "start": 1925, - "value": "node10", + "start": 771, + "value": "node1", }, { - "start": 1925, - "value": "node9", + "start": 772, + "value": "node1", }, { - "start": 1925, - "value": "node9", + "start": 773, + "value": "node8", }, { - "start": 1925, - "value": "node16", + "start": 786, + "value": "node8", }, { - "start": 1934, + "start": 791, "value": "node8", }, { - "start": 1934, - "value": "node16", + "start": 791, + "value": "node8", }, { - "start": 1939, - "value": "node16", + "start": 791, + "value": "node1", }, { - "start": 1952, - "value": "node16", + "start": 791, + "value": "node1", }, { - "start": 1958, - "value": "node16", + "start": 791, + "value": "node6", }, { - "start": 1958, - "value": "node16", + "start": 810, + "value": "node5", }, { - "start": 1958, - "value": "node8", + "start": 816, + "value": "node5", }, { - "start": 1958, - "value": "node8", + "start": 816, + "value": "node6", }, { - "start": 1958, - "value": "node1", + "start": 816, + "value": "node0", }, { - "start": 1958, - "value": "Not found", + "start": 816, + "value": "node6", }, { - "start": 1958, - "value": "node1", + "start": 816, + "value": "node0", }, ] `; -exports[`Python: raise_exception: Segmentation 1`] = ` +exports[`Python: While: Segmentation 1`] = ` [ { "start": 0, "value": "node0", }, { - "start": 2000, + "start": 829, "value": "node0", }, { - "start": 2027, + "start": 852, "value": "node1", }, { - "start": 2032, + "start": 853, "value": "node0", }, { - "start": 2032, - "value": "node1", + "start": 854, + "value": "node2", }, { - "start": 2032, + "start": 863, + "value": "node2", + }, + { + "start": 867, + "value": "node2", + }, + { + "start": 867, + "value": "node0", + }, + { + "start": 867, + "value": "Not found", + }, + { + "start": 867, "value": "node0", }, ] `; -exports[`Python: raise_again: Segmentation 1`] = ` +exports[`Python: WhileContinue: Segmentation 1`] = ` [ { "start": 0, "value": "node0", }, { - "start": 2073, + "start": 880, "value": "node0", }, { - "start": 2096, + "start": 911, + "value": "node1", + }, + { + "start": 912, + "value": "node0", + }, + { + "start": 913, "value": "node2", }, { - "start": 2109, + "start": 922, + "value": "node0", + }, + { + "start": 922, "value": "node2", }, { - "start": 2116, + "start": 925, "value": "node2", }, { - "start": 2116, + "start": 926, "value": "node2", }, { - "start": 2121, + "start": 927, "value": "node3", }, { - "start": 2138, + "start": 940, "value": "node3", }, { - "start": 2141, + "start": 948, "value": "node3", }, { - "start": 2142, + "start": 948, "value": "node3", }, { - "start": 2143, - "value": "node4", + "start": 948, + "value": "node2", }, { - "start": 2156, - "value": "node4", + "start": 948, + "value": "node6", }, { - "start": 2160, - "value": "node4", + "start": 957, + "value": "node6", }, { - "start": 2160, - "value": "node4", + "start": 961, + "value": "node2", }, { - "start": 2160, - "value": "node3", + "start": 961, + "value": "node0", }, { - "start": 2160, - "value": "node3", + "start": 961, + "value": "Not found", }, { - "start": 2160, - "value": "node3", + "start": 961, + "value": "node0", + }, +] +`; + +exports[`Python: WhileBreak: Segmentation 1`] = ` +[ + { + "start": 0, + "value": "node0", + }, + { + "start": 974, + "value": "node0", }, { - "start": 2160, - "value": "node2", + "start": 1002, + "value": "node1", }, { - "start": 2165, - "value": "node9", + "start": 1003, + "value": "node0", }, { - "start": 2180, - "value": "node9", + "start": 1004, + "value": "node2", }, { - "start": 2183, - "value": "node7", + "start": 1013, + "value": "node0", }, { - "start": 2184, - "value": "node9", + "start": 1013, + "value": "node2", }, { - "start": 2185, - "value": "node8", + "start": 1016, + "value": "node2", }, { - "start": 2198, - "value": "node8", + "start": 1017, + "value": "node2", }, { - "start": 2202, - "value": "node8", + "start": 1018, + "value": "node3", }, { - "start": 2202, - "value": "node8", + "start": 1031, + "value": "node3", }, { - "start": 2202, - "value": "node9", + "start": 1036, + "value": "node3", }, { - "start": 2202, - "value": "node9", + "start": 1036, + "value": "node3", }, { - "start": 2202, - "value": "node9", + "start": 1036, + "value": "node2", }, { - "start": 2202, + "start": 1036, "value": "node2", }, { - "start": 2202, + "start": 1036, "value": "node0", }, { - "start": 2202, - "value": "node2", + "start": 1036, + "value": "Not found", }, { - "start": 2202, + "start": 1036, "value": "node0", }, ] `; -exports[`Python: yield_value: Segmentation 1`] = ` +exports[`Python: WhileElse: Segmentation 1`] = ` [ { "start": 0, "value": "node0", }, { - "start": 2243, + "start": 1057, "value": "node0", }, { - "start": 2266, - "value": "node2", + "start": 1084, + "value": "node1", }, { - "start": 2277, - "value": "node1", + "start": 1085, + "value": "node0", }, { - "start": 2286, - "value": "node1", + "start": 1086, + "value": "node2", }, { - "start": 2293, - "value": "node1", + "start": 1095, + "value": "node2", }, { - "start": 2293, + "start": 1099, "value": "node2", }, { - "start": 2293, + "start": 1099, "value": "node0", }, { - "start": 2293, - "value": "node2", + "start": 1118, + "value": "node5", }, { - "start": 2293, + "start": 1122, + "value": "node5", + }, + { + "start": 1122, + "value": "node0", + }, + { + "start": 1122, + "value": "Not found", + }, + { + "start": 1122, "value": "node0", }, ] `; -exports[`Python: try_except: Segmentation 1`] = ` +exports[`Python: WhileElseBreak: Segmentation 1`] = ` [ { "start": 0, "value": "node0", }, { - "start": 2339, + "start": 1135, "value": "node0", }, { - "start": 2361, + "start": 1167, + "value": "node1", + }, + { + "start": 1168, + "value": "node0", + }, + { + "start": 1169, "value": "node2", }, { - "start": 2374, + "start": 1178, + "value": "node0", + }, + { + "start": 1178, "value": "node2", }, { - "start": 2377, + "start": 1181, "value": "node2", }, { - "start": 2377, + "start": 1182, "value": "node2", }, { - "start": 2382, + "start": 1183, "value": "node3", }, { - "start": 2398, + "start": 1196, "value": "node3", }, { - "start": 2401, + "start": 1201, "value": "node3", }, { - "start": 2401, + "start": 1201, "value": "node3", }, { - "start": 2401, + "start": 1201, "value": "node2", }, { - "start": 2401, - "value": "node4", + "start": 1201, + "value": "node6", }, { - "start": 2406, + "start": 1210, + "value": "node6", + }, + { + "start": 1214, + "value": "node2", + }, + { + "start": 1214, "value": "node0", }, { - "start": 2406, - "value": "node4", + "start": 1233, + "value": "node7", }, { - "start": 2412, + "start": 1237, + "value": "node7", + }, + { + "start": 1237, "value": "node0", }, { - "start": 2412, - "value": "node4", + "start": 1237, + "value": "Not found", }, { - "start": 2412, + "start": 1237, "value": "node0", }, ] `; -exports[`Python: try_except_finally: Segmentation 1`] = ` +exports[`Python: Match: Segmentation 1`] = ` [ { "start": 0, - "value": "node0", + "value": "node1", }, { - "start": 2453, - "value": "node0", + "start": 1250, + "value": "node1", }, { - "start": 2483, - "value": "node2", + "start": 1267, + "value": "node1", }, { - "start": 2496, - "value": "node2", + "start": 1273, + "value": "node1", }, { - "start": 2499, - "value": "node2", + "start": 1274, + "value": "node1", }, { - "start": 2499, - "value": "node2", + "start": 1284, + "value": "node4", }, { - "start": 2504, - "value": "node3", + "start": 1289, + "value": "node4", }, { - "start": 2520, - "value": "node3", + "start": 1290, + "value": "node4", }, { - "start": 2523, + "start": 1291, "value": "node3", }, { - "start": 2523, + "start": 1304, "value": "node3", }, { - "start": 2523, - "value": "node2", + "start": 1308, + "value": "node3", }, { - "start": 2528, + "start": 1308, "value": "node4", }, { - "start": 2545, - "value": "node4", + "start": 1308, + "value": "node1", }, { - "start": 2548, - "value": "node4", + "start": 1317, + "value": "node6", }, { - "start": 2548, - "value": "node4", + "start": 1322, + "value": "node6", }, { - "start": 2548, - "value": "node2", + "start": 1323, + "value": "node6", }, { - "start": 2548, + "start": 1324, "value": "node5", }, { - "start": 2553, - "value": "node0", - }, - { - "start": 2553, + "start": 1337, "value": "node5", }, { - "start": 2559, - "value": "node0", - }, - { - "start": 2559, + "start": 1341, "value": "node5", }, { - "start": 2559, - "value": "node0", + "start": 1341, + "value": "node6", }, -] -`; - -exports[`Python: try_many_except_finally: Segmentation 1`] = ` -[ { - "start": 0, - "value": "node0", + "start": 1341, + "value": "node1", }, { - "start": 2600, - "value": "node0", + "start": 1341, + "value": "node1", }, { - "start": 2635, - "value": "node2", + "start": 1341, + "value": "node1", }, { - "start": 2648, - "value": "node2", + "start": 1341, + "value": "node1", }, +] +`; + +exports[`Python: MatchMultiPattern: Segmentation 1`] = ` +[ { - "start": 2651, - "value": "node2", + "start": 0, + "value": "node1", }, { - "start": 2651, - "value": "node2", + "start": 1354, + "value": "node1", }, { - "start": 2656, - "value": "node3", + "start": 1383, + "value": "node1", }, { - "start": 2674, - "value": "node3", + "start": 1389, + "value": "node1", }, { - "start": 2677, - "value": "node3", + "start": 1390, + "value": "node1", }, { - "start": 2677, - "value": "node3", + "start": 1400, + "value": "node4", }, { - "start": 2677, - "value": "node2", + "start": 1405, + "value": "node4", }, { - "start": 2682, + "start": 1406, "value": "node4", }, { - "start": 2700, + "start": 1407, "value": "node4", }, { - "start": 2704, + "start": 1408, "value": "node4", }, { - "start": 2704, + "start": 1409, "value": "node4", }, { - "start": 2704, - "value": "node2", + "start": 1410, + "value": "node4", }, { - "start": 2709, - "value": "node7", + "start": 1411, + "value": "node3", }, { - "start": 2717, - "value": "node7", + "start": 1424, + "value": "node3", }, { - "start": 2723, - "value": "node7", + "start": 1430, + "value": "node3", }, { - "start": 2723, - "value": "node7", + "start": 1430, + "value": "node4", }, { - "start": 2723, - "value": "node2", + "start": 1430, + "value": "node1", }, { - "start": 2728, - "value": "node8", + "start": 1439, + "value": "node6", }, { - "start": 2745, - "value": "node8", + "start": 1444, + "value": "node6", }, { - "start": 2748, - "value": "node8", + "start": 1445, + "value": "node6", }, { - "start": 2748, - "value": "node8", + "start": 1446, + "value": "node6", }, { - "start": 2748, - "value": "node8", + "start": 1447, + "value": "node6", }, { - "start": 2748, - "value": "node8", + "start": 1448, + "value": "node5", }, { - "start": 2748, - "value": "node2", + "start": 1461, + "value": "node5", }, { - "start": 2748, - "value": "node9", + "start": 1467, + "value": "node5", }, { - "start": 2753, - "value": "node0", + "start": 1467, + "value": "node6", }, { - "start": 2753, - "value": "node9", + "start": 1467, + "value": "node1", }, { - "start": 2759, - "value": "node0", + "start": 1467, + "value": "node1", }, { - "start": 2759, - "value": "node9", + "start": 1467, + "value": "node1", }, { - "start": 2759, - "value": "node0", + "start": 1467, + "value": "node1", }, ] `; -exports[`Python: try_except_else_finally: Segmentation 1`] = ` +exports[`Python: Return: Segmentation 1`] = ` [ { "start": 0, - "value": "node0", + "value": "node1", }, { - "start": 2801, - "value": "node0", + "start": 1480, + "value": "node1", }, { - "start": 2836, - "value": "node2", + "start": 1498, + "value": "node1", }, { - "start": 2841, - "value": "node2", + "start": 1501, + "value": "node1", }, { - "start": 2845, + "start": 1502, + "value": "node1", + }, + { + "start": 1503, "value": "node2", }, { - "start": 2845, + "start": 1512, "value": "node2", }, { - "start": 2850, - "value": "node3", + "start": 1520, + "value": "node2", }, { - "start": 2858, - "value": "node3", + "start": 1520, + "value": "node2", }, { - "start": 2862, - "value": "node3", + "start": 1520, + "value": "node1", }, { - "start": 2862, - "value": "node3", + "start": 1520, + "value": "node5", }, { - "start": 2862, - "value": "node2", + "start": 1525, + "value": "node1", }, { - "start": 2867, - "value": "node4", + "start": 1525, + "value": "node5", }, { - "start": 2873, - "value": "node4", + "start": 1533, + "value": "node1", }, { - "start": 2877, - "value": "node4", + "start": 1533, + "value": "node5", }, { - "start": 2877, - "value": "node4", + "start": 1533, + "value": "node1", }, +] +`; + +exports[`Python: WithCluster: Segmentation 1`] = ` +[ { - "start": 2877, + "start": 0, "value": "node2", }, { - "start": 2882, - "value": "node5", + "start": 1563, + "value": "node2", }, { - "start": 2891, - "value": "node5", + "start": 1586, + "value": "node2", }, { - "start": 2895, - "value": "node5", + "start": 1590, + "value": "node2", }, { - "start": 2895, - "value": "node5", + "start": 1590, + "value": "Not found", }, { - "start": 2895, + "start": 1595, "value": "node2", }, { - "start": 2895, - "value": "node0", - }, - { - "start": 2895, + "start": 1600, "value": "node2", }, { - "start": 2895, - "value": "node0", + "start": 1601, + "value": "node2", }, -] -`; - -exports[`Python: massive_try_except_else_finally: Segmentation 1`] = ` -[ { - "start": 0, - "value": "node0", + "start": 1602, + "value": "node3", }, { - "start": 2912, - "value": "node0", + "start": 1611, + "value": "node2", }, { - "start": 2955, + "start": 1611, "value": "node3", }, { - "start": 2969, + "start": 1614, "value": "node3", }, { - "start": 2974, + "start": 1617, "value": "node3", }, { - "start": 2978, - "value": "node3", + "start": 1618, + "value": "node4", }, { - "start": 2978, - "value": "node3", + "start": 1631, + "value": "node4", }, { - "start": 2987, + "start": 1634, "value": "node4", }, { - "start": 2995, + "start": 1634, "value": "node4", }, { - "start": 2999, - "value": "node4", + "start": 1634, + "value": "node3", + }, + { + "start": 1634, + "value": "node7", + }, + { + "start": 1643, + "value": "node7", }, { - "start": 2999, - "value": "node4", + "start": 1646, + "value": "node3", }, { - "start": 2999, - "value": "node3", + "start": 1646, + "value": "Not found", }, { - "start": 3008, - "value": "node5", + "start": 1651, + "value": "node2", }, { - "start": 3014, - "value": "node5", + "start": 1656, + "value": "node8", }, { - "start": 3018, - "value": "node5", + "start": 1657, + "value": "node2", }, { - "start": 3018, - "value": "node5", + "start": 1658, + "value": "node9", }, { - "start": 3018, - "value": "node3", + "start": 1667, + "value": "node9", }, { - "start": 3027, - "value": "node6", + "start": 1671, + "value": "node9", }, { - "start": 3036, - "value": "node6", + "start": 1671, + "value": "node2", }, { - "start": 3040, - "value": "node6", + "start": 1671, + "value": "node11", }, { - "start": 3040, - "value": "node6", + "start": 1676, + "value": "node11", }, { - "start": 3040, - "value": "node3", + "start": 1680, + "value": "node2", }, { - "start": 3040, - "value": "node3", + "start": 1680, + "value": "node11", }, { - "start": 3040, - "value": "node3", + "start": 1680, + "value": "node2", }, +] +`; + +exports[`Python: WithNestedCluster: Segmentation 1`] = ` +[ { - "start": 3045, - "value": "node8", + "start": 0, + "value": "node1", }, { - "start": 3061, - "value": "node8", + "start": 1710, + "value": "node1", }, { - "start": 3066, - "value": "node8", + "start": 1744, + "value": "node1", }, { - "start": 3070, - "value": "node8", + "start": 1745, + "value": "node1", }, { - "start": 3070, - "value": "node8", + "start": 1746, + "value": "node2", }, { - "start": 3079, - "value": "node9", + "start": 1755, + "value": "node1", }, { - "start": 3087, - "value": "node9", + "start": 1755, + "value": "node2", }, { - "start": 3091, - "value": "node9", + "start": 1758, + "value": "node2", }, { - "start": 3091, - "value": "node9", + "start": 1761, + "value": "node2", }, { - "start": 3091, - "value": "node8", + "start": 1762, + "value": "node3", }, { - "start": 3100, - "value": "node10", + "start": 1775, + "value": "node3", }, { - "start": 3106, - "value": "node10", + "start": 1778, + "value": "node3", }, { - "start": 3110, - "value": "node10", + "start": 1778, + "value": "node3", }, { - "start": 3110, - "value": "node10", + "start": 1778, + "value": "node2", }, { - "start": 3110, - "value": "node8", + "start": 1778, + "value": "node6", }, { - "start": 3119, - "value": "node11", + "start": 1787, + "value": "node6", }, { - "start": 3128, - "value": "node11", + "start": 1790, + "value": "node2", }, { - "start": 3132, - "value": "node11", + "start": 1790, + "value": "Not found", }, { - "start": 3132, - "value": "node11", + "start": 1795, + "value": "node1", }, { - "start": 3132, - "value": "node8", + "start": 1800, + "value": "node7", }, { - "start": 3132, - "value": "node8", + "start": 1801, + "value": "node1", }, { - "start": 3132, + "start": 1802, "value": "node8", }, { - "start": 3132, - "value": "node3", + "start": 1811, + "value": "node1", }, { - "start": 3137, - "value": "node12", + "start": 1811, + "value": "node8", }, { - "start": 3152, - "value": "node12", + "start": 1814, + "value": "node8", }, { - "start": 3155, - "value": "node12", + "start": 1815, + "value": "node8", }, { - "start": 3156, - "value": "node12", + "start": 1816, + "value": "node9", }, { - "start": 3157, - "value": "node13", + "start": 1829, + "value": "node8", }, { - "start": 3170, - "value": "node13", + "start": 1829, + "value": "node9", }, { - "start": 3174, - "value": "node13", + "start": 1834, + "value": "node9", }, { - "start": 3174, - "value": "node13", + "start": 1835, + "value": "node9", }, { - "start": 3174, - "value": "node12", + "start": 1836, + "value": "node10", }, { - "start": 3174, - "value": "node14", + "start": 1853, + "value": "node9", }, { - "start": 3183, - "value": "node12", + "start": 1853, + "value": "node10", }, { - "start": 3183, - "value": "node14", + "start": 1859, + "value": "node10", }, { - "start": 3188, - "value": "node14", + "start": 1860, + "value": "node10", }, { - "start": 3201, - "value": "node14", + "start": 1882, + "value": "node13", }, { - "start": 3205, - "value": "node14", + "start": 1887, + "value": "node13", }, { - "start": 3205, - "value": "node14", + "start": 1888, + "value": "node13", }, { - "start": 3205, + "start": 1889, "value": "node12", }, { - "start": 3205, - "value": "node18", + "start": 1889, + "value": "node12", }, { - "start": 3214, + "start": 1893, "value": "node12", }, { - "start": 3214, - "value": "node18", + "start": 1893, + "value": "node13", }, { - "start": 3231, - "value": "node18", + "start": 1893, + "value": "node10", }, { - "start": 3235, - "value": "node18", + "start": 1914, + "value": "node15", }, { - "start": 3235, - "value": "node18", + "start": 1919, + "value": "node15", }, { - "start": 3244, - "value": "node19", + "start": 1920, + "value": "node15", }, { - "start": 3253, - "value": "node19", + "start": 1921, + "value": "node14", + }, + { + "start": 1921, + "value": "node14", }, { - "start": 3257, - "value": "node19", + "start": 1925, + "value": "node14", }, { - "start": 3257, - "value": "node19", + "start": 1925, + "value": "node15", }, { - "start": 3257, - "value": "node18", + "start": 1925, + "value": "node10", }, { - "start": 3257, - "value": "node12", + "start": 1925, + "value": "node10", }, { - "start": 3257, - "value": "node12", + "start": 1925, + "value": "node9", }, { - "start": 3257, - "value": "node3", + "start": 1925, + "value": "node9", }, { - "start": 3262, - "value": "node20", + "start": 1925, + "value": "node16", }, { - "start": 3280, - "value": "node20", + "start": 1934, + "value": "node8", }, { - "start": 3285, - "value": "node20", + "start": 1934, + "value": "node16", }, { - "start": 3286, - "value": "node20", + "start": 1939, + "value": "node16", }, { - "start": 3287, - "value": "node22", + "start": 1952, + "value": "node16", }, { - "start": 3300, - "value": "node20", + "start": 1958, + "value": "node16", }, { - "start": 3300, - "value": "node22", + "start": 1958, + "value": "node16", }, { - "start": 3311, - "value": "node21", + "start": 1958, + "value": "node8", }, { - "start": 3328, - "value": "node21", + "start": 1958, + "value": "node8", }, { - "start": 3332, - "value": "node21", + "start": 1958, + "value": "node1", }, { - "start": 3332, - "value": "node22", + "start": 1958, + "value": "Not found", }, { - "start": 3332, - "value": "node22", + "start": 1958, + "value": "node1", }, +] +`; + +exports[`Python: raise_exception: Segmentation 1`] = ` +[ { - "start": 3332, - "value": "node20", + "start": 0, + "value": "node0", }, { - "start": 3332, - "value": "node20", + "start": 2000, + "value": "node0", }, { - "start": 3332, - "value": "node3", + "start": 2027, + "value": "node1", }, { - "start": 3332, + "start": 2032, "value": "node0", }, { - "start": 3332, - "value": "node3", + "start": 2032, + "value": "node1", }, { - "start": 3332, + "start": 2032, "value": "node0", }, ] `; -exports[`Python: try_finally: Segmentation 1`] = ` +exports[`Python: raise_again: Segmentation 1`] = ` [ { "start": 0, "value": "node0", }, { - "start": 3373, + "start": 2073, "value": "node0", }, { - "start": 3396, + "start": 2096, "value": "node2", }, { - "start": 3409, + "start": 2109, "value": "node2", }, { - "start": 3412, + "start": 2116, "value": "node2", }, { - "start": 3413, + "start": 2116, "value": "node2", }, { - "start": 3414, - "value": "node8", - }, - { - "start": 3427, - "value": "node8", + "start": 2121, + "value": "node3", }, { - "start": 3433, - "value": "node8", + "start": 2138, + "value": "node3", }, { - "start": 3433, - "value": "node8", + "start": 2141, + "value": "node3", }, { - "start": 3433, - "value": "node2", + "start": 2142, + "value": "node3", }, { - "start": 3433, - "value": "node6", + "start": 2143, + "value": "node4", }, { - "start": 3442, - "value": "node6", + "start": 2156, + "value": "node4", }, { - "start": 3446, - "value": "node2", + "start": 2160, + "value": "node4", }, { - "start": 3446, - "value": "node2", + "start": 2160, + "value": "node4", }, { - "start": 3451, - "value": "node9", + "start": 2160, + "value": "node3", }, { - "start": 3468, - "value": "node9", + "start": 2160, + "value": "node3", }, { - "start": 3472, - "value": "node9", + "start": 2160, + "value": "node3", }, { - "start": 3472, - "value": "node9", + "start": 2160, + "value": "node2", }, { - "start": 3472, + "start": 2165, "value": "node9", }, { - "start": 3472, + "start": 2180, "value": "node9", }, { - "start": 3472, - "value": "node2", + "start": 2183, + "value": "node7", }, { - "start": 3472, - "value": "node0", + "start": 2184, + "value": "node9", }, { - "start": 3472, - "value": "node2", + "start": 2185, + "value": "node8", }, { - "start": 3472, - "value": "node0", + "start": 2198, + "value": "node8", }, -] -`; - -exports[`Python: try_with_finally: Segmentation 1`] = ` -[ { - "start": 0, - "value": "node0", + "start": 2202, + "value": "node8", }, { - "start": 3513, - "value": "node0", + "start": 2202, + "value": "node8", }, { - "start": 3541, - "value": "node2", + "start": 2202, + "value": "node9", }, { - "start": 3554, - "value": "node2", + "start": 2202, + "value": "node9", }, { - "start": 3559, - "value": "node2", + "start": 2202, + "value": "node9", }, { - "start": 3560, + "start": 2202, "value": "node2", }, { - "start": 3561, - "value": "node6", - }, - { - "start": 3574, - "value": "node6", - }, - { - "start": 3580, - "value": "node6", + "start": 2202, + "value": "node0", }, { - "start": 3580, + "start": 2202, "value": "node2", }, { - "start": 3580, - "value": "node4", + "start": 2202, + "value": "node0", }, +] +`; + +exports[`Python: yield_value: Segmentation 1`] = ` +[ { - "start": 3589, - "value": "node4", + "start": 0, + "value": "node0", }, { - "start": 3593, - "value": "node2", + "start": 2243, + "value": "node0", }, { - "start": 3593, + "start": 2266, "value": "node2", }, { - "start": 3598, - "value": "node7", - }, - { - "start": 3615, - "value": "node7", - }, - { - "start": 3619, - "value": "node7", - }, - { - "start": 3619, - "value": "node7", + "start": 2277, + "value": "node1", }, { - "start": 3619, - "value": "node7", + "start": 2286, + "value": "node1", }, { - "start": 3619, - "value": "node7", + "start": 2293, + "value": "node1", }, { - "start": 3619, + "start": 2293, "value": "node2", }, { - "start": 3619, + "start": 2293, "value": "node0", }, { - "start": 3619, + "start": 2293, "value": "node2", }, - { - "start": 3619, - "value": "node0", - }, -] -`; - -exports[`C++: trivial: DOT Snapshot 1`] = ` -"digraph "" { - node [shape=box, color="#000000"]; - edge [headport=n tailport=s] - bgcolor="#ffffff" - node2 [style="filled"; -label=""; -id="node2"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -minHeight=0.5; -height=0.8999999999999999; -]; -}" -`; - -exports[`C++: simpleIf: DOT Snapshot 1`] = ` -"digraph "" { - node [shape=box, color="#000000"]; - edge [headport=n tailport=s] - bgcolor="#ffffff" - node2 [style="filled"; -label=""; -id="node2"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -minHeight=0.5; -height=0.8999999999999999; -]; -}" -`; - -exports[`C++: ifElse: DOT Snapshot 1`] = ` -"digraph "" { - node [shape=box, color="#000000"]; - edge [headport=n tailport=s] - bgcolor="#ffffff" - node2 [style="filled"; -label=""; -id="node2"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -minHeight=0.5; -height=0.8999999999999999; -]; -}" -`; - -exports[`C++: forever: DOT Snapshot 1`] = ` -"digraph "" { - node [shape=box, color="#000000"]; - edge [headport=n tailport=s] - bgcolor="#ffffff" - node2 [style="filled"; -label=""; -id="node2"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -minHeight=0.5; -height=0.8999999999999999; -]; -}" -`; - -exports[`C++: forever2: DOT Snapshot 1`] = ` -"digraph "" { - node [shape=box, color="#000000"]; - edge [headport=n tailport=s] - bgcolor="#ffffff" - node2 [style="filled"; -label=""; -id="node2"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -minHeight=0.5; -height=0.8999999999999999; -]; -}" -`; - -exports[`C++: forLoop: DOT Snapshot 1`] = ` -"digraph "" { - node [shape=box, color="#000000"]; - edge [headport=n tailport=s] - bgcolor="#ffffff" - node2 [style="filled"; -label=""; -id="node2"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -minHeight=0.5; -height=0.8999999999999999; -]; -}" -`; - -exports[`C++: whileLoop: DOT Snapshot 1`] = ` -"digraph "" { - node [shape=box, color="#000000"]; - edge [headport=n tailport=s] - bgcolor="#ffffff" - node2 [style="filled"; -label=""; -id="node2"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -minHeight=0.5; -height=0.8999999999999999; -]; -}" -`; - -exports[`C++: doWhile: DOT Snapshot 1`] = ` -"digraph "" { - node [shape=box, color="#000000"]; - edge [headport=n tailport=s] - bgcolor="#ffffff" - node2 [style="filled"; -label=""; -id="node2"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -minHeight=0.5; -height=0.8999999999999999; -]; -}" -`; - -exports[`C++: gotoA: DOT Snapshot 1`] = ` -"digraph "" { - node [shape=box, color="#000000"]; - edge [headport=n tailport=s] - bgcolor="#ffffff" - node2 [style="filled"; -label=""; -id="node2"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -minHeight=0.5; -height=0.8999999999999999; -]; -}" -`; - -exports[`C++: switch_1: DOT Snapshot 1`] = ` -"digraph "" { - node [shape=box, color="#000000"]; - edge [headport=n tailport=s] - bgcolor="#ffffff" - node2 [style="filled"; -label=""; -id="node2"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -minHeight=0.5; -height=0.8999999999999999; -]; -}" -`; - -exports[`C++: switch_2: DOT Snapshot 1`] = ` -"digraph "" { - node [shape=box, color="#000000"]; - edge [headport=n tailport=s] - bgcolor="#ffffff" - node2 [style="filled"; -label=""; -id="node2"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -minHeight=0.5; -height=0.8999999999999999; -]; -}" -`; - -exports[`C++: ManyIfs: DOT Snapshot 1`] = ` -"digraph "" { - node [shape=box, color="#000000"]; - edge [headport=n tailport=s] - bgcolor="#ffffff" - node5 [style="filled"; -label=""; -id="node5"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -minHeight=0.5; -height=1.7999999999999998; -]; -}" -`; - -exports[`C++: IfWithoutBraces: DOT Snapshot 1`] = ` -"digraph "" { - node [shape=box, color="#000000"]; - edge [headport=n tailport=s] - bgcolor="#ffffff" - node3 [style="filled"; -label=""; -id="node3"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -minHeight=0.5; -height=1.2; -]; -}" -`; - -exports[`C++: ForLoops: DOT Snapshot 1`] = ` -"digraph "" { - node [shape=box, color="#000000"]; - edge [headport=n tailport=s] - bgcolor="#ffffff" - node9 [style="filled"; -label=""; -id="node9"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -minHeight=0.5; -height=3; -]; -}" + { + "start": 2293, + "value": "node0", + }, +] `; -exports[`C++: MoreSwitch: DOT Snapshot 1`] = ` -"digraph "" { - node [shape=box, color="#000000"]; - edge [headport=n tailport=s] - bgcolor="#ffffff" - node2 [style="filled"; -label=""; -id="node2"; -shape="box"; -class="default"; -fillcolor="#d3d3d3"; -minHeight=0.5; -height=0.8999999999999999; -]; -}" +exports[`Python: try_except: Segmentation 1`] = ` +[ + { + "start": 0, + "value": "node0", + }, + { + "start": 2339, + "value": "node0", + }, + { + "start": 2361, + "value": "node2", + }, + { + "start": 2374, + "value": "node2", + }, + { + "start": 2377, + "value": "node2", + }, + { + "start": 2377, + "value": "node2", + }, + { + "start": 2382, + "value": "node3", + }, + { + "start": 2398, + "value": "node3", + }, + { + "start": 2401, + "value": "node3", + }, + { + "start": 2401, + "value": "node3", + }, + { + "start": 2401, + "value": "node2", + }, + { + "start": 2401, + "value": "node4", + }, + { + "start": 2406, + "value": "node0", + }, + { + "start": 2406, + "value": "node4", + }, + { + "start": 2412, + "value": "node0", + }, + { + "start": 2412, + "value": "node4", + }, + { + "start": 2412, + "value": "node0", + }, +] `; -exports[`C++: trivial: Segmentation 1`] = ` +exports[`Python: try_except_finally: Segmentation 1`] = ` +[ + { + "start": 0, + "value": "node0", + }, + { + "start": 2453, + "value": "node0", + }, + { + "start": 2483, + "value": "node2", + }, + { + "start": 2496, + "value": "node2", + }, + { + "start": 2499, + "value": "node2", + }, + { + "start": 2499, + "value": "node2", + }, + { + "start": 2504, + "value": "node3", + }, + { + "start": 2520, + "value": "node3", + }, + { + "start": 2523, + "value": "node3", + }, + { + "start": 2523, + "value": "node3", + }, + { + "start": 2523, + "value": "node2", + }, + { + "start": 2528, + "value": "node4", + }, + { + "start": 2545, + "value": "node4", + }, + { + "start": 2548, + "value": "node4", + }, + { + "start": 2548, + "value": "node4", + }, + { + "start": 2548, + "value": "node2", + }, + { + "start": 2548, + "value": "node5", + }, + { + "start": 2553, + "value": "node0", + }, + { + "start": 2553, + "value": "node5", + }, + { + "start": 2559, + "value": "node0", + }, + { + "start": 2559, + "value": "node5", + }, + { + "start": 2559, + "value": "node0", + }, +] +`; + +exports[`Python: try_many_except_finally: Segmentation 1`] = ` [ { - "start": 0, - "value": "node2", + "start": 0, + "value": "node0", + }, + { + "start": 2600, + "value": "node0", + }, + { + "start": 2635, + "value": "node2", + }, + { + "start": 2648, + "value": "node2", + }, + { + "start": 2651, + "value": "node2", + }, + { + "start": 2651, + "value": "node2", + }, + { + "start": 2656, + "value": "node3", + }, + { + "start": 2674, + "value": "node3", + }, + { + "start": 2677, + "value": "node3", + }, + { + "start": 2677, + "value": "node3", + }, + { + "start": 2677, + "value": "node2", + }, + { + "start": 2682, + "value": "node4", + }, + { + "start": 2700, + "value": "node4", + }, + { + "start": 2704, + "value": "node4", + }, + { + "start": 2704, + "value": "node4", + }, + { + "start": 2704, + "value": "node2", + }, + { + "start": 2709, + "value": "node7", + }, + { + "start": 2717, + "value": "node7", + }, + { + "start": 2723, + "value": "node7", }, { - "start": 15, + "start": 2723, + "value": "node7", + }, + { + "start": 2723, "value": "node2", }, { - "start": 32, + "start": 2728, + "value": "node8", + }, + { + "start": 2745, + "value": "node8", + }, + { + "start": 2748, + "value": "node8", + }, + { + "start": 2748, + "value": "node8", + }, + { + "start": 2748, + "value": "node8", + }, + { + "start": 2748, + "value": "node8", + }, + { + "start": 2748, "value": "node2", }, + { + "start": 2748, + "value": "node9", + }, + { + "start": 2753, + "value": "node0", + }, + { + "start": 2753, + "value": "node9", + }, + { + "start": 2759, + "value": "node0", + }, + { + "start": 2759, + "value": "node9", + }, + { + "start": 2759, + "value": "node0", + }, ] `; -exports[`C++: simpleIf: Segmentation 1`] = ` +exports[`Python: try_except_else_finally: Segmentation 1`] = ` [ { "start": 0, + "value": "node0", + }, + { + "start": 2801, + "value": "node0", + }, + { + "start": 2836, "value": "node2", }, { - "start": 49, + "start": 2841, "value": "node2", }, { - "start": 71, + "start": 2845, "value": "node2", }, { - "start": 85, + "start": 2845, "value": "node2", }, { - "start": 87, + "start": 2850, + "value": "node3", + }, + { + "start": 2858, + "value": "node3", + }, + { + "start": 2862, + "value": "node3", + }, + { + "start": 2862, + "value": "node3", + }, + { + "start": 2862, "value": "node2", }, { - "start": 87, + "start": 2867, + "value": "node4", + }, + { + "start": 2873, + "value": "node4", + }, + { + "start": 2877, + "value": "node4", + }, + { + "start": 2877, + "value": "node4", + }, + { + "start": 2877, + "value": "node2", + }, + { + "start": 2882, + "value": "node5", + }, + { + "start": 2891, + "value": "node5", + }, + { + "start": 2895, + "value": "node5", + }, + { + "start": 2895, + "value": "node5", + }, + { + "start": 2895, + "value": "node2", + }, + { + "start": 2895, + "value": "node0", + }, + { + "start": 2895, "value": "node2", }, + { + "start": 2895, + "value": "node0", + }, ] `; -exports[`C++: ifElse: Segmentation 1`] = ` +exports[`Python: massive_try_except_else_finally: Segmentation 1`] = ` [ { - "start": 0, - "value": "node2", + "start": 0, + "value": "node0", + }, + { + "start": 2912, + "value": "node0", + }, + { + "start": 2955, + "value": "node3", + }, + { + "start": 2969, + "value": "node3", + }, + { + "start": 2974, + "value": "node3", + }, + { + "start": 2978, + "value": "node3", + }, + { + "start": 2978, + "value": "node3", + }, + { + "start": 2987, + "value": "node4", + }, + { + "start": 2995, + "value": "node4", + }, + { + "start": 2999, + "value": "node4", + }, + { + "start": 2999, + "value": "node4", + }, + { + "start": 2999, + "value": "node3", + }, + { + "start": 3008, + "value": "node5", + }, + { + "start": 3014, + "value": "node5", + }, + { + "start": 3018, + "value": "node5", + }, + { + "start": 3018, + "value": "node5", + }, + { + "start": 3018, + "value": "node3", + }, + { + "start": 3027, + "value": "node6", + }, + { + "start": 3036, + "value": "node6", + }, + { + "start": 3040, + "value": "node6", + }, + { + "start": 3040, + "value": "node6", + }, + { + "start": 3040, + "value": "node3", + }, + { + "start": 3040, + "value": "node3", + }, + { + "start": 3040, + "value": "node3", + }, + { + "start": 3045, + "value": "node8", + }, + { + "start": 3061, + "value": "node8", + }, + { + "start": 3066, + "value": "node8", + }, + { + "start": 3070, + "value": "node8", }, { - "start": 114, - "value": "node2", + "start": 3070, + "value": "node8", }, { - "start": 134, - "value": "node2", + "start": 3079, + "value": "node9", }, { - "start": 181, - "value": "node2", + "start": 3087, + "value": "node9", }, { - "start": 183, - "value": "node2", + "start": 3091, + "value": "node9", }, { - "start": 183, - "value": "node2", + "start": 3091, + "value": "node9", }, -] -`; - -exports[`C++: forever: Segmentation 1`] = ` -[ { - "start": 0, - "value": "node2", + "start": 3091, + "value": "node8", }, { - "start": 210, - "value": "node2", + "start": 3100, + "value": "node10", }, { - "start": 231, - "value": "node2", + "start": 3106, + "value": "node10", }, { - "start": 247, - "value": "node2", + "start": 3110, + "value": "node10", }, { - "start": 249, - "value": "node2", + "start": 3110, + "value": "node10", }, { - "start": 249, - "value": "node2", + "start": 3110, + "value": "node8", }, -] -`; - -exports[`C++: forever2: Segmentation 1`] = ` -[ { - "start": 0, - "value": "node2", + "start": 3119, + "value": "node11", }, { - "start": 276, - "value": "node2", + "start": 3128, + "value": "node11", }, { - "start": 298, - "value": "node2", + "start": 3132, + "value": "node11", }, { - "start": 327, - "value": "node2", + "start": 3132, + "value": "node11", }, { - "start": 329, - "value": "node2", + "start": 3132, + "value": "node8", }, { - "start": 329, - "value": "node2", + "start": 3132, + "value": "node8", }, -] -`; - -exports[`C++: forLoop: Segmentation 1`] = ` -[ { - "start": 0, - "value": "node2", + "start": 3132, + "value": "node8", }, { - "start": 388, - "value": "node2", + "start": 3132, + "value": "node3", }, { - "start": 409, - "value": "node2", + "start": 3137, + "value": "node12", }, { - "start": 481, - "value": "node2", + "start": 3152, + "value": "node12", }, { - "start": 483, - "value": "node2", + "start": 3155, + "value": "node12", }, { - "start": 483, - "value": "node2", + "start": 3156, + "value": "node12", }, -] -`; - -exports[`C++: whileLoop: Segmentation 1`] = ` -[ { - "start": 0, - "value": "node2", + "start": 3157, + "value": "node13", }, { - "start": 510, - "value": "node2", + "start": 3170, + "value": "node13", }, { - "start": 533, - "value": "node2", + "start": 3174, + "value": "node13", }, { - "start": 552, - "value": "node2", + "start": 3174, + "value": "node13", }, { - "start": 554, - "value": "node2", + "start": 3174, + "value": "node12", }, { - "start": 554, - "value": "node2", + "start": 3174, + "value": "node14", }, -] -`; - -exports[`C++: doWhile: Segmentation 1`] = ` -[ { - "start": 0, - "value": "node2", + "start": 3183, + "value": "node12", }, { - "start": 581, - "value": "node2", + "start": 3183, + "value": "node14", }, { - "start": 602, - "value": "node2", + "start": 3188, + "value": "node14", }, { - "start": 625, - "value": "node2", + "start": 3201, + "value": "node14", }, { - "start": 627, - "value": "node2", + "start": 3205, + "value": "node14", }, { - "start": 627, - "value": "node2", + "start": 3205, + "value": "node14", }, -] -`; - -exports[`C++: gotoA: Segmentation 1`] = ` -[ { - "start": 0, - "value": "node2", + "start": 3205, + "value": "node12", }, { - "start": 654, - "value": "node2", + "start": 3205, + "value": "node18", }, { - "start": 669, - "value": "node2", + "start": 3214, + "value": "node12", }, { - "start": 714, - "value": "node2", + "start": 3214, + "value": "node18", }, { - "start": 716, - "value": "node2", + "start": 3231, + "value": "node18", }, { - "start": 716, - "value": "node2", + "start": 3235, + "value": "node18", }, -] -`; - -exports[`C++: switch_1: Segmentation 1`] = ` -[ { - "start": 0, - "value": "node2", + "start": 3235, + "value": "node18", }, { - "start": 765, - "value": "node2", + "start": 3244, + "value": "node19", }, { - "start": 787, - "value": "node2", + "start": 3253, + "value": "node19", }, { - "start": 923, - "value": "node2", + "start": 3257, + "value": "node19", }, { - "start": 925, - "value": "node2", + "start": 3257, + "value": "node19", }, { - "start": 925, - "value": "node2", + "start": 3257, + "value": "node18", }, -] -`; - -exports[`C++: switch_2: Segmentation 1`] = ` -[ { - "start": 0, - "value": "node2", + "start": 3257, + "value": "node12", }, { - "start": 952, - "value": "node2", + "start": 3257, + "value": "node12", }, { - "start": 974, - "value": "node2", + "start": 3257, + "value": "node3", }, { - "start": 1043, - "value": "node2", + "start": 3262, + "value": "node20", }, { - "start": 1045, - "value": "node2", + "start": 3280, + "value": "node20", }, { - "start": 1045, - "value": "node2", + "start": 3285, + "value": "node20", }, -] -`; - -exports[`C++: ManyIfs: Segmentation 1`] = ` -[ { - "start": 0, - "value": "node5", + "start": 3286, + "value": "node20", }, { - "start": 1073, - "value": "node5", + "start": 3287, + "value": "node22", }, { - "start": 1094, - "value": "node5", + "start": 3300, + "value": "node20", }, { - "start": 1108, - "value": "node5", + "start": 3300, + "value": "node22", }, { - "start": 1114, - "value": "node5", + "start": 3311, + "value": "node21", }, { - "start": 1114, - "value": "node5", + "start": 3328, + "value": "node21", }, { - "start": 1141, - "value": "node5", + "start": 3332, + "value": "node21", }, { - "start": 1147, - "value": "node5", + "start": 3332, + "value": "node22", }, { - "start": 1147, - "value": "node5", + "start": 3332, + "value": "node22", }, { - "start": 1181, - "value": "node5", + "start": 3332, + "value": "node20", }, { - "start": 1187, - "value": "node5", + "start": 3332, + "value": "node20", }, { - "start": 1187, - "value": "node5", + "start": 3332, + "value": "node3", }, { - "start": 1235, - "value": "node5", + "start": 3332, + "value": "node0", }, { - "start": 1237, - "value": "node5", + "start": 3332, + "value": "node3", }, { - "start": 1237, - "value": "node5", + "start": 3332, + "value": "node0", }, ] `; -exports[`C++: IfWithoutBraces: Segmentation 1`] = ` +exports[`Python: try_finally: Segmentation 1`] = ` [ { "start": 0, - "value": "node3", + "value": "node0", }, { - "start": 1254, - "value": "node3", + "start": 3373, + "value": "node0", }, { - "start": 1428, - "value": "node3", + "start": 3396, + "value": "node2", }, { - "start": 1478, - "value": "node3", + "start": 3409, + "value": "node2", }, { - "start": 1484, - "value": "node3", + "start": 3412, + "value": "node2", }, { - "start": 1484, - "value": "node3", + "start": 3413, + "value": "node2", }, { - "start": 1546, - "value": "node3", + "start": 3414, + "value": "node8", }, { - "start": 1548, - "value": "node3", + "start": 3427, + "value": "node8", }, { - "start": 1548, - "value": "node3", + "start": 3433, + "value": "node8", }, -] -`; - -exports[`C++: ForLoops: Segmentation 1`] = ` -[ { - "start": 0, - "value": "node9", + "start": 3433, + "value": "node8", }, { - "start": 1566, - "value": "node9", + "start": 3433, + "value": "node2", }, { - "start": 1612, - "value": "node9", + "start": 3433, + "value": "node6", }, { - "start": 1642, - "value": "node9", + "start": 3442, + "value": "node6", }, { - "start": 1647, - "value": "node9", + "start": 3446, + "value": "node2", }, { - "start": 1647, - "value": "node9", + "start": 3446, + "value": "node2", }, { - "start": 1677, + "start": 3451, "value": "node9", }, { - "start": 1682, + "start": 3468, "value": "node9", }, { - "start": 1682, + "start": 3472, "value": "node9", }, { - "start": 1712, + "start": 3472, "value": "node9", }, { - "start": 1717, + "start": 3472, "value": "node9", }, { - "start": 1717, + "start": 3472, "value": "node9", }, { - "start": 1747, - "value": "node9", + "start": 3472, + "value": "node2", }, { - "start": 1752, - "value": "node9", + "start": 3472, + "value": "node0", }, { - "start": 1752, - "value": "node9", + "start": 3472, + "value": "node2", }, { - "start": 1782, - "value": "node9", + "start": 3472, + "value": "node0", }, +] +`; + +exports[`Python: try_with_finally: Segmentation 1`] = ` +[ { - "start": 1787, - "value": "node9", + "start": 0, + "value": "node0", }, { - "start": 1787, - "value": "node9", + "start": 3513, + "value": "node0", }, { - "start": 1817, - "value": "node9", + "start": 3541, + "value": "node2", }, { - "start": 1822, - "value": "node9", + "start": 3554, + "value": "node2", }, { - "start": 1822, - "value": "node9", + "start": 3559, + "value": "node2", }, { - "start": 1852, - "value": "node9", + "start": 3560, + "value": "node2", }, { - "start": 1857, - "value": "node9", + "start": 3561, + "value": "node6", }, { - "start": 1857, - "value": "node9", + "start": 3574, + "value": "node6", }, { - "start": 1887, - "value": "node9", + "start": 3580, + "value": "node6", }, { - "start": 1909, - "value": "Not found", + "start": 3580, + "value": "node2", }, { - "start": 1911, - "value": "node9", + "start": 3580, + "value": "node4", }, { - "start": 1911, - "value": "node9", + "start": 3589, + "value": "node4", }, -] -`; - -exports[`C++: MoreSwitch: Segmentation 1`] = ` -[ { - "start": 0, + "start": 3593, "value": "node2", }, { - "start": 1928, + "start": 3593, "value": "node2", }, { - "start": 2030, - "value": "node2", + "start": 3598, + "value": "node7", }, { - "start": 2160, - "value": "node2", + "start": 3615, + "value": "node7", }, { - "start": 2162, + "start": 3619, + "value": "node7", + }, + { + "start": 3619, + "value": "node7", + }, + { + "start": 3619, + "value": "node7", + }, + { + "start": 3619, + "value": "node7", + }, + { + "start": 3619, "value": "node2", }, { - "start": 2162, + "start": 3619, + "value": "node0", + }, + { + "start": 3619, "value": "node2", }, + { + "start": 3619, + "value": "node0", + }, ] `; diff --git a/src/test/commentTestSamples/sample.cpp b/src/test/commentTestSamples/sample.cpp index b385f1f..831c405 100644 --- a/src/test/commentTestSamples/sample.cpp +++ b/src/test/commentTestSamples/sample.cpp @@ -182,4 +182,24 @@ void MoreSwitch() { case 4: break; default: f(); } +} + +/* +exits: 1, +nodes: 0 +*/ +void Exception() { + try { + } + catch (...) { + } +} + +/* +nodes: 0 +*/ +void Throw() { + if (x) { + throw exc; + } } \ No newline at end of file From 0f9fcf6503b574f08fac4c77ad9051477d88d8fa Mon Sep 17 00:00:00 2001 From: Tamir Bahar Date: Fri, 29 Nov 2024 20:53:20 +0200 Subject: [PATCH 08/25] Docs docs docs... --- DEVELOPMENT.md | 4 +- src/control-flow/block-matcher.ts | 21 +++++++++-- src/control-flow/builder.ts | 49 +++++++++++++++++++++++++ src/control-flow/generic-cfg-builder.ts | 9 +++++ 4 files changed, 78 insertions(+), 5 deletions(-) diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index a5a3377..8459acf 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -65,11 +65,11 @@ function defaultProcessStatement( } ``` - # TODO: - Register the new parser in a ton of places - Create a test collector - write tests - Run tests -- Add the new language to the demo, and all extensions \ No newline at end of file +- Add the new language to the demo, and all extensions +- Mention the playground and AST queries diff --git a/src/control-flow/block-matcher.ts b/src/control-flow/block-matcher.ts index 947ab18..00a22cf 100644 --- a/src/control-flow/block-matcher.ts +++ b/src/control-flow/block-matcher.ts @@ -101,12 +101,15 @@ export class BlockMatcher { } /** - * Maintains a single {Parser.QueryMatch} and allows accesing the captures within it. + * A utility class for matching against the AST using queries. + * + * [tree-sitter query reference](https://tree-sitter.github.io/tree-sitter/using-parsers#pattern-matching-with-queries */ export class Match { private match: Parser.QueryMatch; private blockHandler: BlockHandler; private dispatchSingle: BlockMatcher["dispatchSingle"]; + constructor( match: Parser.QueryMatch, blockHandler: BlockHandler, @@ -118,7 +121,7 @@ export class Match { } /** - * Get the first named syntax node from the query match. + * Returns the first named syntax node from the query match, if present. * @param name Name of the capture * @returns {Parser.SyntaxNode|undefined} The syntax matching the capture name, if captured. */ @@ -126,14 +129,26 @@ export class Match { return getSyntax(this.match, name); } + /** + * Returns the last named syntax node from the query match, if present. + * @param name Name of the capture + */ public getLastSyntax(name: string): ReturnType { return getLastSyntax(this.match, name); } + /** + * Returns the first named syntax node from the query match. + * Throws an error if no matching node exists. + * @param name + */ public requireSyntax(name: string): ReturnType { return requireSyntax(this.match, name); } - + /** + * Returns the all named syntax nodes from the query match. + * @param name Name of the capture + */ public getSyntaxMany(name: string): ReturnType { return getSyntaxMany(this.match, name); } diff --git a/src/control-flow/builder.ts b/src/control-flow/builder.ts index 9fba099..4f5e0b6 100644 --- a/src/control-flow/builder.ts +++ b/src/control-flow/builder.ts @@ -9,6 +9,9 @@ import type { } from "./cfg-defs.ts"; import { MultiDirectedGraph } from "graphology"; +/** + * Constructs the CFG + */ export class Builder { private graph: CFGGraph = new MultiDirectedGraph(); private nodeId: number = 0; @@ -35,6 +38,15 @@ export class Builder { this.activeClusters.pop(); } + /** + * Calls the function within the context of a cluster. + * Clusters are used for representing context managers and exceptions. + * + * Clustered can be nested. + * + * @param type The type of the cluster. + * @param fn The function to run in the context of the cluster. + */ public withCluster(type: ClusterType, fn: (cluster: Cluster) => T): T { const cluster = this.startCluster(type); try { @@ -44,6 +56,12 @@ export class Builder { } } + /** + * Add a node to the CFG + * @param type + * @param code + * @param startOffset The offset in the code for which the node is generated + */ public addNode( type: NodeType, code: string, @@ -63,6 +81,14 @@ export class Builder { return id; } + /** + * Clones a node. + * + * Useful for `finally` blocks, where the "same" node exists in multiple paths. + * + * @param node The node to clone + * @param overrides Node attributes to override + */ public cloneNode(node: string, overrides?: { cluster: Cluster }): string { const id = `node${this.nodeId++}`; const originalAttrs = this.graph.getNodeAttributes(node); @@ -73,10 +99,25 @@ export class Builder { return id; } + /** + * Marks a given node. + * + * This is currently only used for testing, to denote nodes of interest for + * reachability tests. + * + * @param node The node to mark + * @param marker The desired marker + */ public addMarker(node: string, marker: string) { this.graph.getNodeAttributes(node).markers.push(marker); } + /** + * Adds an edge to the CFG + * @param source Source node + * @param target Target node + * @param type Edge type + */ public addEdge( source: string, target: string, @@ -87,10 +128,18 @@ export class Builder { } } + /** + * Returns the current CFG + */ public getGraph(): CFGGraph { return this.graph; } + /** + * Sets node attributes if they are not yet set (make them default to a value). + * @param node The node to modify + * @param defaults Attributes to set + */ public setDefault(node: string, defaults: Partial): void { this.graph.updateNodeAttributes(node, (existing: GraphNode) => { const result = { ...existing }; diff --git a/src/control-flow/generic-cfg-builder.ts b/src/control-flow/generic-cfg-builder.ts index 19dce17..7e5ef2a 100644 --- a/src/control-flow/generic-cfg-builder.ts +++ b/src/control-flow/generic-cfg-builder.ts @@ -11,7 +11,16 @@ import { NodeMapper } from "./node-mapper"; import { pairwise } from "./zip"; interface Dispatch { + /** + * Process a single AST node into a basic block + * @param syntax + */ single(syntax: Parser.SyntaxNode | null): BasicBlock; + + /** + * Process an array of AST nodes into a basic clock + * @param statements + */ many(statements: Parser.SyntaxNode[]): BasicBlock; } interface Link { From 26099b1fe3d12f241ee05ecd73fcb364b80a6682 Mon Sep 17 00:00:00 2001 From: Tamir Bahar Date: Fri, 29 Nov 2024 21:11:35 +0200 Subject: [PATCH 09/25] cpp: Support try-catch --- src/control-flow/cfg-cpp.ts | 74 +++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) diff --git a/src/control-flow/cfg-cpp.ts b/src/control-flow/cfg-cpp.ts index 1dc48c0..00c3597 100644 --- a/src/control-flow/cfg-cpp.ts +++ b/src/control-flow/cfg-cpp.ts @@ -32,6 +32,7 @@ const statementHandlers: StatementHandlers = { labeled_statement: processLabeledStatement, goto_statement: processGotoStatement, comment: processComment, + try_statement: processTryStatement, }, default: defaultProcessStatement, }; @@ -558,3 +559,76 @@ function processSwitchlike( return blockHandler.update({ entry: headNode, exit: mergeNode }); } + +function processTryStatement( + trySyntax: Parser.SyntaxNode, + ctx: Context, +): BasicBlock { + const { builder, matcher } = ctx; + /* + Here's an idea - I can duplicate the finally blocks! + Then if there's a return, I stick the finally before it. + In other cases, the finally is after the end of the try-body. + This is probably the best course of action. + */ + const match = matcher.match( + trySyntax, + ` + (try_statement + body: (_) @try-body + (catch_clause body: (_) @catch-body)* @catch + ) @try + `, + ); + + const bodySyntax = match.requireSyntax("try-body"); + const catchSyntaxMany = match.getSyntaxMany("catch-body"); + + const mergeNode = builder.addNode( + "MERGE", + "merge try-complex", + trySyntax.endIndex, + ); + + return builder.withCluster("try-complex", (_tryComplexCluster) => { + const bodyBlock = builder.withCluster("try", () => + match.getBlock(bodySyntax), + ); + ctx.link.syntaxToNode(trySyntax, bodyBlock.entry); + + // We handle `except` blocks before the `finally` block to support `return` handling. + const exceptBlocks = catchSyntaxMany.map((exceptSyntax) => + builder.withCluster("except", () => match.getBlock(exceptSyntax)), + ); + for (const [syntax, { entry }] of zip( + match.getSyntaxMany("except"), + exceptBlocks, + )) { + ctx.link.syntaxToNode(syntax, entry); + } + // We attach the except-blocks to the top of the `try` body. + // In the rendering, we will connect them to the side of the node, and use invisible lines for it. + if (bodyBlock.entry) { + const headNode = bodyBlock.entry; + for (const exceptBlock of exceptBlocks) { + // Yes, this is effectively a head-to-head link. But that's ok. + builder.addEdge(headNode, exceptBlock.entry, "exception"); + } + } + + // This is the exit we get to if we don't have an exception + + // We need to connect the `except` blocks to the merge node + for (const exceptBlock of exceptBlocks) { + if (exceptBlock.exit) builder.addEdge(exceptBlock.exit, mergeNode); + } + const happyExit: string | null = bodyBlock.exit; + + if (happyExit) builder.addEdge(happyExit, mergeNode); + + return matcher.update({ + entry: bodyBlock.entry, + exit: mergeNode, + }); + }); +} From 6da12017d2c8c9d9ecb24cd63d387b6529143cc8 Mon Sep 17 00:00:00 2001 From: Tamir Bahar Date: Fri, 29 Nov 2024 21:13:18 +0200 Subject: [PATCH 10/25] cpp: Add support for throw statement --- src/control-flow/cfg-cpp.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/control-flow/cfg-cpp.ts b/src/control-flow/cfg-cpp.ts index 00c3597..4ff45e0 100644 --- a/src/control-flow/cfg-cpp.ts +++ b/src/control-flow/cfg-cpp.ts @@ -33,6 +33,7 @@ const statementHandlers: StatementHandlers = { goto_statement: processGotoStatement, comment: processComment, try_statement: processTryStatement, + throw_statement: processThrowStatement, }, default: defaultProcessStatement, }; @@ -632,3 +633,18 @@ function processTryStatement( }); }); } + + +function processThrowStatement( + throwSyntax: Parser.SyntaxNode, + ctx: Context, +): BasicBlock { + const { builder } = ctx; + const throwNode = builder.addNode( + "THROW", + throwSyntax.text, + throwSyntax.startIndex, + ); + ctx.link.syntaxToNode(throwSyntax, throwNode); + return { entry: throwNode, exit: null }; +} \ No newline at end of file From ee7c87f8a514ef16f789a224b0614c7575dc9b9b Mon Sep 17 00:00:00 2001 From: Tamir Bahar Date: Fri, 29 Nov 2024 21:23:29 +0200 Subject: [PATCH 11/25] cpp: learn for-range loops --- src/control-flow/cfg-cpp.ts | 78 +++++++++++++++++++++----- src/test/commentTestSamples/sample.cpp | 8 +++ 2 files changed, 73 insertions(+), 13 deletions(-) diff --git a/src/control-flow/cfg-cpp.ts b/src/control-flow/cfg-cpp.ts index 4ff45e0..a46d961 100644 --- a/src/control-flow/cfg-cpp.ts +++ b/src/control-flow/cfg-cpp.ts @@ -33,7 +33,8 @@ const statementHandlers: StatementHandlers = { goto_statement: processGotoStatement, comment: processComment, try_statement: processTryStatement, - throw_statement: processThrowStatement, + throw_statement: processThrowStatement, + for_range_loop: processForRangeLoopStatement, }, default: defaultProcessStatement, }; @@ -634,17 +635,68 @@ function processTryStatement( }); } - function processThrowStatement( - throwSyntax: Parser.SyntaxNode, - ctx: Context, + throwSyntax: Parser.SyntaxNode, + ctx: Context, ): BasicBlock { - const { builder } = ctx; - const throwNode = builder.addNode( - "THROW", - throwSyntax.text, - throwSyntax.startIndex, - ); - ctx.link.syntaxToNode(throwSyntax, throwNode); - return { entry: throwNode, exit: null }; -} \ No newline at end of file + const { builder } = ctx; + const throwNode = builder.addNode( + "THROW", + throwSyntax.text, + throwSyntax.startIndex, + ); + ctx.link.syntaxToNode(throwSyntax, throwNode); + return { entry: throwNode, exit: null }; +} + +function processForRangeLoopStatement( + forNode: Parser.SyntaxNode, + ctx: Context, +): BasicBlock { + const { builder, matcher } = ctx; + const match = matcher.match( + forNode, + ` + (for_range_loop + ")" @close-paren + body: (_) @body + ) @range-loop + `, + ); + + const bodySyntax = match.requireSyntax("body"); + + const bodyBlock = match.getBlock(bodySyntax); + + const headNode = builder.addNode( + "LOOP_HEAD", + "loop head", + forNode.startIndex, + ); + const exitNode = builder.addNode("FOR_EXIT", "loop exit", forNode.endIndex); + const headBlock = { entry: headNode, exit: headNode }; + + ctx.link.syntaxToNode(forNode, headNode); + ctx.link.offsetToSyntax(match.requireSyntax("close-paren"), bodySyntax); + + /* + head +-> body -> head + --> else / exit + break -> exit + continue -> head + */ + builder.addEdge(headBlock.exit, bodyBlock.entry, "consequence"); + if (bodyBlock.exit) builder.addEdge(bodyBlock.exit, headBlock.entry); + + builder.addEdge(headBlock.exit, exitNode, "alternative"); + + matcher.state.forEachContinue((continueNode) => { + builder.addEdge(continueNode, headNode); + }); + + matcher.state.forEachBreak((breakNode) => { + builder.addEdge(breakNode, exitNode); + }); + + return matcher.update({ entry: headNode, exit: exitNode }); +} diff --git a/src/test/commentTestSamples/sample.cpp b/src/test/commentTestSamples/sample.cpp index 831c405..bc81286 100644 --- a/src/test/commentTestSamples/sample.cpp +++ b/src/test/commentTestSamples/sample.cpp @@ -202,4 +202,12 @@ void Throw() { if (x) { throw exc; } +} + +/* +nodes: 0 +*/ +void ForRangeLoop() { + for (auto it : items) { + } } \ No newline at end of file From b1db599b37ec3434ea9f392b1cb95ef71e5f5b26 Mon Sep 17 00:00:00 2001 From: Tamir Bahar Date: Fri, 29 Nov 2024 21:39:11 +0200 Subject: [PATCH 12/25] demo: Learned to show C++ --- src/components/Demo.svelte | 12 ++++++++++++ src/components/Graph.svelte | 1 + src/components/utils.ts | 2 +- 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/components/Demo.svelte b/src/components/Demo.svelte index fe207df..bc50e16 100644 --- a/src/components/Demo.svelte +++ b/src/components/Demo.svelte @@ -22,6 +22,7 @@ { language: "Go" as Language, text: "Go" }, { language: "C" as Language, text: "C" }, { language: "Python" as Language, text: "Python (experimental)" }, + { language: "C++" as Language, text: "C++ (experimental)" }, ]; const urlParams = new URLSearchParams(window.location.search); @@ -59,6 +60,9 @@ case "C": code = codeC; break; + case "C++": + code = codeC; + break; case "Go": code = codeGo; break; @@ -214,6 +218,14 @@ on:cursorMoved={cursorMoved} {fontSize} /> + {:else if selection.language === "C++"} + {:else if selection.language === "Python"} { if (functionNodeTypes[language].includes(cursor.nodeType)) { functionNode = cursor.currentNode; From 86c8db1199c610b5fbb0e976594c026d204a11c5 Mon Sep 17 00:00:00 2001 From: Tamir Bahar Date: Fri, 29 Nov 2024 22:15:11 +0200 Subject: [PATCH 13/25] Remove duplication --- src/components/Jetbrains.svelte | 12 +++++------- src/components/utils.ts | 8 +------- src/control-flow/cfg-cpp.ts | 12 +++++++----- src/control-flow/cfg.ts | 12 +++++++++++- src/vscode/extension.ts | 18 ++++++++++-------- 5 files changed, 34 insertions(+), 28 deletions(-) diff --git a/src/components/Jetbrains.svelte b/src/components/Jetbrains.svelte index 6ad2995..f2a9aed 100644 --- a/src/components/Jetbrains.svelte +++ b/src/components/Jetbrains.svelte @@ -1,6 +1,10 @@

VQ(Yzwhw~NcUg$}-Yddl5^o7dqKGY&aAL>%&@$Z<%f#pif~(nyf? zcb9aOJ2a~U?~1HR#IjfpdEaW~7E`irFKP-~ntj+aa31!BciLKa^Nn(Wg=E;4`3vtdG zVJx=1r}wFdMc0d1^l4%@?;~v2IQI1TtaR8|^xT+rYsj7=mPpn1{rB{O+FC6`*jjsP zu(e(h@+_{%v$grHP@fD=?0wvmzmLn_#~`u$F*1$)52|z__dwiq`w^yYH;RJp8MQ3p zeX4YIJKH(WqR;g@Of>DB^__z6x8C0=>V7NZkZk)dap;$8Gp1j-Zicd`&MOlPWXI zooIh=b0)43@;0fywEy0;cXeqm-#Mti>@@~|%&8(U@3qe?lJ^nN+D$bM?`p=$-hXOe zKV97S#At(sy{z&b1be?)#yap%MRQqgmoZ-mT%kM|?%tJ*)tHN44O=I@Q{mgj%*{|S zE-*PhHLv*BF^-P274>N-a>KMZfvK!x?7u=&RWX(kt@Nntm*rAo!;;OV4JF5%gRDMFrZp6GwB?pj=9wzV(##O%-yWUXcS&3OO)R$bn}?F6c)}4wEx? zsTMs2@@Bkpn4Gzwm%GS;R5?s6@1l%TX1mJK%6f!PiE;iyj8o>k{=;XSVRK$@OJkft z{p0)){&8Uh|CoJKHFxYx5rgj%AO@eOJqAAux%73o#Pm&PgowdU&qxe@mFcJdF>nli zleQTAV}a$(GgoQO3c@T1IxFe+T>gIY5G_snm!(orf#;} zU?DR*29TLK+GHl{kC(;1*R`hp*cxKrYfI#PFE?78C}?qN09u@`ofh)8Bt9>X8F0KiR35CnVY&5VvMOggamrtcE*b4crB5;d$5!FTjiN65PP#KDZyVn>Jux(_?tn^%cw*cq5VDl)M){%&`|fJY##|O`F^EL?pTQWJ&7W z9$x2a9^XY~4B^?pF@!CVV+hRWw=@x-XJ4o7h%~o51M0Nwk85+JaXlSyT+A;&=C%-b z1VLVKjqt68+e5hjTbqbqSuX!OuwS!Fn_t6yKM}a^C$;z8l>2Y*wDrz|{J5>&^Qx5X zOS!&WSu5QBm%8tjBQ&vkZ?3MrFJ24Fn`kXGt&V;+lDyjzKu7allbVYed}mFqucGd$ zJuUW{j#Bp2Uh&ym54)#!V@%D(3|3!-<;t)U@AY+HNoLlU4jRk+h1+lyaK7tiLF4Iy z#$!bO!Ul~rzSTzKaQO?H1IzBGwaIRl6SpIUnj#j(wr;z2EuhYL!dTLAPsMAw2|rn$ z%j$w$kP?$}D$C51WcK?U4cGx|3gkWR?V%Ii&)!8;BB5N$QuBU8nN3Oi_tq_rjE5SV zEfc==5dnPbk=lLh}gq(Sgi*|JF9I8Sny@;bw;N2?~+oyZS- z7v=pP=NyvnqFi4T{Vqz*9$SkT81Q5JmO?+ZYjJNkRYTo}pDYcvIF>7TQ`JvYalo#l zcEG}z%!Q^JS;?AdfS{G7n^;H7``@0*k(sD!EYtLVW81pw;Yw=vW4z_T@hJ+@Zivv(fq_{nx3Ww^&>D zT7zykE3$_3u4=$NugwqA^F8_cd;Ts2w|%db+oYC#TE^W|T&=Q?%TB6S(Zr$N| zY)jz=)Ig6#tME4GV#?bkn{lp{U-68@z+DSyVl#9_}Q zYOQWh)Ju6Ssa{GO-^!}n6LnzZsO0@%&39D1W0GoAET?*humt*QwFLGJ(epqpJ=^(H z-sIVQXOiAx(0sC{(OYw`(FWXnTxnr#2bL}2;z=(A ziYL94c04IPtR4-7)gRKviuo})*7RnMSFCAFf$mrnXVtxrRue{f_9WSVzmFBJW|6Hg za>f|wOzu!P%GW~T+VisRdLu?(WZgV@U#{ew|Be+Qs|5M42-Ys2cCy!i`lM5)Yd|r7 zsq*f3W)yLC2zj?AlDy;bXTJs(_q-#Jf45Vke`mKFHwzixeC;b&{yqWkdr4ouD@Z>BzUueTc9- zL8Kwv@25+T?>K@3GVj11i64L#sFU;jV!@4x=)(gc#=b$z*m>Pw5~Al>T6=ygM9=SN?RjvBh~7{w z5xw+0!FvN~x!SPH*RkYaf#RYuCtjt+X9alF3+z*JzUWzoPDWQT;~Al@|B9?S66PLuteNkAf>7 zdW}NezsuBa9aU}YVUCPz2d2h-0s0$xDdr$O?1SwwHWalIb+{}!A+wZ%Va`<#z347? zO#L$Zn7@N!E2}h?nRKQqjk4xp5PTOQtyymTJA@6gON$NCImIkTp_R2~+<-SENgZI# zsNAQQ6r!v=zqKSQEpEpwYJa(q-kdfRwKK7kH-cC=%KSD9NB@(-j3rm2Q~57-HYxL* zC4U-O=Do7*BXZIoZv3<*|1QVMUc{ zv7)%=o*{bfrM2h&A$lI5wdcn|=$^;5=pLr_*CpxY5&x&8t4maf*Q9qI@s5PPeImq| zpVT_$%^`YzT1(IN-I!OK`ECqXx=FPg!+xN;d%O!J_9)xkeE-JGw$^w?AvuSKvwMeT z0_>1+%S4jP#z>(Vxg<&GM51P@6^dh&6L50ZWx&ov2n~lM~ zdRw&_hPv7eBYo{s`yRe!$6pa>uk|X8d#xO)k$0wli*qm%&cO_}A;z27wle;JG`Y;^ z-JNbrZ<{YG;O;7DftAAt!%wk1mke9`4xY@eHS)usXXJgA-H4L`=Xc=KEAJJkr&m6} zPuA&`tjaP}nUcSyVYSs{P_JMuf^DfD3Z9Vsbsz1koZ?jQE8ET?8iJ(#4|(#ei0Ha&lN3UE)9W8I-Owx!S(+aAyn+cL<< zwj2tvoeRa-&V#Pl&WG;UE`T1`E`q(VT?T&_=Q_U;=Q^o=9PJ+(-DN&}d;ClJ@Ok)` zeC{&*OS`ju@b7Y*mzLdInzhAp@L%#i(JtNhz*FFINAhv3+CX=_*drS1uH#0`x|flR zOpJ$W4C)-u>jB2YwtPXXz(tq1oz|dJp4*@(CilwQU=0($GxBtX*DpgP+h;a-yt`wm z?}q;&=5|`i?PNH|!M)E(aa5uoa`6s$KBw5n19Cq_*$8}Y)4p5mrOo)1jAh+SYaMQm z>ssrXP>HP_$+syM4u(%jQN1X`NN@j!#LgcMkf&Y{Gs>hL$dhj90IM(M{#X3j}HyGrVog? zrrD0)8+n{>$neX>RV_95^VVLx?SCTfpIB4V`<$|>;~L>#ouZ%fW_sV~nw83N4ST;g z7e?=wd94Rp8bjf8yi=kaK1JVvxcK>;pf>VTIrj4a{;_f|&uL|dv9HoFb~~>fg7+2s zXFTcVweF@JkX*S-=7GyQV*BE0i0;rITf9RH+a53w+cG!++dgnGw$tGdZ0EvZ*v^B) zv7HY`V!Hs2!q)%(^j=ucg7|!2{7ZJvLHL*Ko_*2YX^lCVy}Po#GZ_CR?VX|cFS%QC zU2#XBvk+_(tJSH(RuK6PN3abBqBLNe_#j~u$AnE>ggJU^jF`xo)l)%)Y~mQo%~7y9 zkWHLPTaM~L>a^u{2C(H=9>|!Qs(Z%RD*wdc&74f>9*$>7`&iob$(FmfW!_LEwKZp+ zSh<2$rr^vX8O`9jAl~*mORJ5ElRe?^YH*E0>B33J8v8tHjrA34tVpb}mST+!QPvpW zs+8_+yw)1KFVGre-FS5f{V-31e%RlX&+2aJ-AJqDa4)voVK7RiRxlLX)^Gr}ZQvkm zi{M~vi{TJ#OW-hUyTakvc7r3a?G8s_TMEZu+XIfnwkI5qE#?nk+Y3&@b}tx>ZErXQ z+dgm_wte9YZ2Q4k*!G7p*zOJIU^@!V!*)7cfNcX@i0up*i|tGpkL@Ke0ozMq61KD8 z7ua3~)!5F4DcJrJreZq>YO$RQ_1MmX>DbPP8Q3m>OR!xCv#?zRv$0(atM@SA4MW{$ zzpy9Xab$2N{2bF)=J~1#ahCpK*9dI5v-E{FzuG@S5F|DbG$tVPhbRX*Rdiq`=Ag+N zV7=wdM##5~!z;$&AJ+(qyBo%oH^h=sjcv@t9e9a-sc(Fvs}29?@tP};`&z+O*iN^_ zZm0&fPW|{~Nhe&%>e)_v+$M}X_`fX)=Hgtm2`vv=g!Co%i0Dh^+4wLyO6V06jIwsr z_0mv8HxKhl;tWW#IJ{T?0*uD8{LD7JxZj&yEf)4cRWE3%neP%b=Hc#h=SG~TbYr!g znZ`3jxqEy=cd9x1pDbXjV16iBz&VGi4J~8#$re7Z!}RBu?|D{d*t)&kZxt@Wb(mx0 zOLc!C3a)ku;f7&hLdz!SMyeV~<{Ub!6z)oSeqCL`I$~y=nW=Y9)eK1KEvd5@mPU5J zb|La?KR6$EfYuoYyGlFiQRZA)XUh&L(sQ=2RY*P9CZZl>A2B)3q$|SoJ^Dj!;8#f1 z)^H8BqrmU(Wv`f%f2`@Iu70tmOvYj8-U{M9mPb+d2%ioRhv7V8bxnCooifi|N;-w3 zI}XApru=c^9n-5l*H=Hs3Y%9Xa{+_LWN2r0BT7rTpV}N^*q`SH-#2i-(L0>a%Qo95 zA@(ai)v#Z|nHTf%CbAC3Ey#aIz>%;7&+K+IzBO*dz460f1RM_6cW;j}f$YN)ieKX% z1I1S3IBVB+FT<$EJ|YY0z(hUGa^D)67n=7%8Hs(W|Jh+|hb;?bhws5 zldaF^xSvCo>z8&87h+b$Q#pK2$I9TNY!7)3nWLzD(w%iulzbUk%RtSS87AVEB_eLQ zS>(&ex(0G@fa8{2Nh9nn=~lkXBZ1caPO?@>ZRPq~MB(GvEIXP?X8jN%p8J!A zcrK6kgAo0GsG(oZQ}*Wrrw+e2u-^P_8haT`i=`oGu}lLkxZiB^-2e0h>xsrtdZMZ3 zi~DUC(pTyb(N{`utu6?>Ru`qQR(0q~dH2u?oO|9!A0%|;fkIcx8;I@@8q-}@hOIg! zbtTz->jUXZp6~V{_KZ4e*fZjOA9g*h!7)#J-pzvr(erLH>95|T*v*37_vP!$2oKE@#Fu=c9!j{Ldo|3(T(Z0IuzYF-Y^=YUhCl$Y&XEKFqYV0 zTeu(N0hIT> z5&vEQ6>xV4j29TKj5bDFqrb7Y@s+Wzds`T2W~W;BW31`k5hDU#w`4q9+$j+!u{HC@jG4KedOUqA4}f+kq?b=v z$sGyChu29m7SHFn-*LeaK`W*pbpuBPxhHjx-cL6)rkS(#LSTFDr8Mlh^lZ#W1LO3E zG;q>kV_t+Om$rdwV-6QKW^Z9*4nXU2jWNr|#!N3BLvr-)KsF}FEaf_t8TH94bX!4t z#|rI-l8n~qs|9-2D9fpA`@n3Y{fPA~hrqtB{KOWox<@$B)y_^YufC~r8vcWI2E6n6 zy-v&Q0IpA9*VbNRPd+bmP)J>La710iGFS5W<3bn7ea@p@=i6{oV-7@1kbsS zgiVM;94hf1zgEV^c9?N!oP)JR2O4k0q>V7K$XV%~Zr`F?1>;!Rl6DC8LrdWRar;(! z_i8Xc{_!{7uX@vyPOP1HNBHeD_p2Bml|J=?J|7GEjJDAy&yzk~G|`9m0_Kae^L^2h zrL*&H`&e#S%gbPB62CZ4&Z}7qPAg#}Fg?`$>8Frumf3cZ|Ae+AoxluQZ@HT-i=q$m zU{Ifut7WM8$eI}vtLG87?(hP(rSKBAJzzVwW$_tA_%C?|CDZsa ztocXQ8)FpoRto#RZBSaLhf~lyDbmBqZSLj$Rn2kkcLtjKaO*2*g;TxjOWu6e9BF(@ zAR2Rp2X%d^r?{ez>?4#P(`^#bxmwecAJ-M<;0}G zR@0LoLF>S#hZEOgO{SHgqZW)4Xcd#T2 zifeL(QJITEaidgJUId(zoC$m_JB_o=%h0!x@h#^W#MGEBPEk!8vbeX=B#9qKk;@@BE< zqtZWLPe+_DStTy|$TBrwTT;#!$Cci}{ijjzZh?P}so##!U{hmKmZ`Ku>^Y``#9cSe z$P&ldce_UPSfi-99Y1KT-~409nne&X_RHg)8L~!GgQgly+1}6K@jmPtt8|;+M%d`O zmk}=Kp7&T~j9uOvE$hx+h4I^U23MSYGp9AiAgwC1BSHV&rRmuVL2vU(&xXmCy>Lyj z-g7zEVSa(%`ETa8#t=EPD>UTHTKje_aNlkuKwj|J{I{C!qx)lsHMU8^8smMerpz5+ zU*TUE)z}Zd#dauskL>}_qSSzg;P1FkGr;%?qx7PZF8-xlmw$BMGqL7}z~8&K#+`u! zQ9n_Z5Z&_rrEBKP`yDV!t7OQ`Hm)-|xA@FAABOp{Q^-BW&YJX0ZpeOP5&QjLz8dGN z?TP#szWzc<$oc9PalV*8cZZN2KWLC0|Kk(plh$eRNohzv>8XiNUJapFU)P{lnLl@g z=y#{ae%}hw?>id%J-gV=esH&!&n=Fg>&|rk+}97|s3_gx^M$Jv@XESz&kE;WPswkI zRui2&9i2ZoQ5|(KYVm_$7#s}4;Se}9kyjcf!^AHK_3ILO9?$Yqo!HBq2+kNn&jj4> zG_mJg$g!%~pUbcoFniipVeZCmqiv~`Z@Q`=KVVH}${t;5-qh`1k6Gp_TbO(Iep9I4 zZ-~_Uw|M8nZlk?2_Ucf*{~}WF--+HkD!pG3s`ojOdQYDBC82u1Hm%-yh56^8tLyqX z4eOe@ZMop}9EIX*^TY7^J^6BPLl>{l2u1PfX;GZVo;=^PL-jr@Qtw^Rs^|yDne}qr zY6QDw6|PUp5_6Y`Zql5jBXiru#cn;a_ENd6&Q*6gd$s2}*kg#+Ig5>WPl{juC}*rU z!pe4T8Z*6KZw@@xr5eY&EO4)l8hc$4xYv~$d!5!g=)Bgojy|uPfgZyZWWdypd>_t; zJoP@DBk+@TACB|B5@`?YZ94%%Ho%q0p;VobDs6NVwcvY-dd>aK*f^icuvXHvz!Y!L zNb#A0d%aXcuN+6p$H**J9>KF(G5Dra3z%e78-FZJUDbb6A)ijP_Q1W?vfHT~OM?6q z*!ndzjGLupw}RATEG^J=a{>3-GeEDswD;OSK(7O|_xf0XGk=fg>!$EEfmhLW8oB9- z0Aqbp`&c&z==EuBy}C(^?WV*q%*x^=Skt*%qOO)@dywzivPhT2XdQTt+iI9&`>xg( zct)rkWc~N!vBuLnviZX!EMWc+>J6Cq>9vijcYI=~1Gwk1%4Z7FoawhT(KJq&tdTMozJ-ortLtiE*t)^HkN zOvE?bVRXdvb-6|-yv2d`B6^m#5LLK(;a{rH73(PLb9L?90`@j`85MZ*UV+iwC^PyP zD~z#t@~yQ}qw8k4Mbz2a20xW_z*%;`J%&dxO4A7PeMi6*##*?J;Hb1lz%$=I0KawA z&Tl6NUgba2u*!L?tpfWqZDP^wUhcJB;9fgu?Dgxwme;o$;uAd9Qv=WI=^E#CP2gVF zYUq_u4JY5~A|+Wa%Cn_VjO~-q72Bua7;Fc@ao7$9S(BzO%Cn)+AKONdlI&PqsxrE z7C$d+0e2cN7*EGq!f%YbjJ1ZJbmQ3^6qv3MQ{YwFS>r0r4cu!? zW3RCQK0|?apP?~;MY}@LG?wofu1*NW^eqqcp1|C+P6Ib_tnz)V3eXQ)w34@LxmS{u zm6kb%7QH4lTH$6*jvGVWL49+fv%+&YYmR%p*>%U;zLUeFU26IZ)=p9K9Q)gl-0R9v zV_l_btd|Ams$Xj0Djw_gfqT7CL$B-;o{jZw>x?H1zx#z(7syOj)oV$<19b#qz}&l^23f&l4Rd>@J`byF;IVesIM#A z))Fh9XH(9e7zrGV5x|o%Qutg>U!}Ibtduhdz3DJFKfB%f{6Q#7@azta8E*7lD{jfM~3qbSPvf*c+3ZD7&G^Jcc-Az z;!f9FR?-{m(g5+IW!mFKs{{19MtiTb1N1sad#`f?^g3UAukAzG%^fw_%?ksJb+Pub zz8Xp%zphChPY$emYBcJe>jOt=Zqyj1X_{W^0*`f?#?3mBM(0ifQL6|=i#eE zanrnr+{95`uCMHN%E}(0->hj8#@l8H^DFz9C~wL1EJQMA|KlJ2E|GcIfZmL3lGK zopW1u42CKge3%;+gU@o)!N6@-vo+>H4TW~tmYcbs{uxsTBHoQK4BKsHuGC3lSMwyX zs~H#jnO|bN#_-RTD!}|uqNQ_JvkY^kC`XEOrY^;tDaw_4F%~9QYX86%#(^3wjA4O$ z9j>w0#!wcf5=V8Tce#gNBoMOyM5`=zP#VuWbTwQ#-)OgQ-VM;}d)j+#5!kohL!)o~a6!=B0rxv3)3ei?W~@!q>j{Z!9_3l6=D|AX zXrY5z1Uj#~JfIG`HM9=;F7QtE_j&r{^811PlfP;3PuNaZvoXFivoTf&$i`Tc*k81A zroC2`|9Ra90^3*{G}>6l2JW?7L$AD(E9*%dtJKmsCNE4ajpOpt@rYOlpAdM=Cu$fo z_d43tOKP4j#p4#>PW2*KjJwr4;1oqKMLS){l0@AzKOUt@cNm53JlI<3o*B<~PRZT# z7ft_x;vDJho$K>KPeQEO2c0Z@&ujzGeC#Vm)C6EuwrxEEq z;FdBXar@*NmXE^DsD4q7?T(FG-OK(hS1SWk2COd4H?92!zyk-jntl461 zYnFTcE`SC5z0#|td6G|ZaOBlZ_t;PCWY_oObwj6kb*!7?eAf-1;_c*niZ|T4;Sr3) zb#ofX^VISrwYu`p5G(&IvGT`=m47;(Od4PusjPo_lKK)cf`53Nq`uBv`5jzGU_VLC z=csArf6z7cNoqL)d7e7T2u}1J0nfotuCmL1k~-)Jc*UFmgZac*?` zm~AIn4eMR3|F+J!-_=&8D3mb10^F!6un;WUFUUKg%LiOI5 zR_{&2UA)_S4(j07;F(Z)kk1v#-Cpa&to>%!V7U^XggRyNX~a_|OyzljSJMIwtBLvg z-=aF{d5V93Pbkh>8;P^d4?N}yjbr{&jQIj(%(bD$JT=moD+7;toQ5$ocQs80=$716 zx&QM;_WxGX>ax~tAM{}TZjWZQSn#aHr!B5i{iY4&?W-R@Nxkzcc!LkbJku zM>&3XR6UiGgS581dpe)5W)d~R^ErM|JkIuGKKg&`eRqIW#r6Lg$}W9j`!2ABq6i8L z_ReA@>kF$NV(?1d0iG)j<=1V~ius4;d88YLP_)DTSK*Vqe|-)Cm- zd2jB!<;{Kf-UsXV_s@9*!<{o{&YXVEthKy1FC=hp>YSc>%}4sxG?R}uAKrNs?~2LX ze3yXt+MmbW)$;-LUd&yDadehr+iJTj-fqMVX?8eP`)9Lj`#Nizr|ieY?)c5~#P2Xg z!--!;4w@%eI6ll{vrFx(Q28COtbC3pt9Z?;BFM*UV#-Iha1Ky1aeqf2U%M=6;#R??sp}^L|X($!iX;wCAN3=S`5fymVXy+MbXQZ6`%o zb4o&MzG$fn)+L||_&mQCVV~cRxleul z@JWIzo1ZGz?=6P=Ch`S9sh7R8poRE%xrht7u7jvJl6|m+TG1q*vfHmKaxn}n&ou4u*PP~)hcFszAR?YjD@g}Cu7e*4(#soCJ=l_!3uRA{Wt9m~8Hk@0b4Mgi0CB@2s#U!OOY$$8MP z@w$e7+dF^k>hnm|E8(%LO(AneMTjG9mrxw3B7)wjim7*4wtgDHe*Zin`+bK9wB0Et zZ3~NeUsBu4N6Tg3(3xLw44&zJXSKZ^{X=y!dh{8~_}y~}#_xU=fxm7~h`-K^kWV}>9x~t!GzU=5F7&G#&9%E_2gb6RY~_)(?hDJ0y=EyZ z-bheZ6f<7Uywn)s-Zsa)x4h=S2x|^bXwBPu+25JlJauG+@lf9g`|O|4KEIA28z|;I z<@0>6+@7`@%9D{t|9?&HI?L9pw`bZ`N6;^|G5MDD%gz-YU_YEoyH@ldvwp;^_IkLi zT*c6`R)e3-uo_iGe)V-({ghi*v?=)an+Ue3NJt)ak01kkCbZ^T5%&3ym^L@ptl7n2 zUdiKEy_%_gj8@wut6j1&$`ui4zA7fo-Ep25Hsd(Yi+STbEEnETe#M)izJy&B;lpJ- z!zO#4x|%k(Dv|5ubSI0fdK~J!?D}8ObS!;}ZqAKjKU7987wgasCSQ4dysV@1%Im9T zW}nMIRLt=^11;z;-5wpLvcL4eOo!?CkRH?Q8?Ri~`g|urchN@l;7y{h04LKofKy16 z3YtoFfGepl;4115cqd%|i(Sx#fL&-V;7Ga{a3bk0z8?7hw28d|*Nfq(@!TlB>LX~F zn1Gi9-xB|eirEQbbhDs0#a^UeNPVTG1I-e*i(XC_+{Y!^-IkY@($-=dF+#M6nc{5m zBhgAdvHPGMvdz*Vg1+e#Q{QZgH92PaF*?3S(q2{3D;@T!iZd@@Q_%OK2y*X|m~xNL z^r{HD=9-wghS#i#u+O@7xKFoExpyn(H{;{t0k1yi-SE%(TyVjpt#PzRJ>!0Xae|izuKU1y0 zr)&MzBCbDAt^bW{ww*|6{Y@q7*~T#afS1rgJ4YO-{DAvhen1~Q#u2_NQwA<-G9lnjl$wBr8^*snPq^^TG?OHT+Wqo9yv~Y_eS=(0ccn zv}Rp%MudHy8FQbk&vl)7cx`!{dJxUY?kQEg-|t4C@i8%J%y)O6Dp`H9bCs->uTj&= zN21zf$Eu;8x{@7eN7{*Yrd?=P+{nVJOzNEozpgSdt4XfIEfTZnl??QXKZ0)rm9T*>q|bx8y0dx{6b?M zVbuB(_Sbg8jP6Q08W^llPFV1A~X znYBYW4fytU!0C^rjp*HzHB(=gcXoJsD7fm=@~uL7Ith+m2Hu1x063CX08XS;fRpGC zfRpJ?z$vsEa4OvcxRUMzTtyE6GDqJ7AAh5mgj%U#q5->U6S6*Rz1Rg_;si0nhokRs zIQdoVT2@Z|*5K%}iozUj-Y>v-~b?l~3s@kb>+pc@I#_gDHg`LubdtaOd^Ryl8puA?P*r_1jBKlkZH zty7Fzq4-anbD9;3tcAD4q|kN9vsXvDbq|*ncIS#q!!w%FrJ;K_e^R&fadk_dR=4z7 zz)AFHz{&JH;1v1`;8c1Ea3%c}a234*$P!pv6ZQmkg+f2G@nEimx89$&{ zUO;+Wp>M3NHTU-dlBhCgt~eXk!Af}fQl4o4=5FL}Ceo{rErMPL97%r%oJ4N{PNshV zP9dpbrqVlrEPvYIHMEKE!=BhEv@AMPNg=(P$szKmvtv)()hlaH9NcwtlRrlo)=}8m zyy8gHBsu`(`^;rZx8|Gm#j%Ux`bBM)eo=PHlbv70yjfURhmEx~-SRYllfY@ZcaxN_ z^|88LcD~kI3Hn;@-K61%oM@a)m>+Vtv#TWhkkxo6#_pzZ#de`L%}u}bw1}2bYa72! zwuRP)w4$d&TTn)c59q zBHf#`W!n0p$~5hbn_l<7Vf6}n7jPuK2RMn|2b@eF0#2ci0jJWZfNU9?p7}RQx0#;# zks+4xpmrw(G^d@FI;W*41%9ngD8JY8$Hb*Tvihdn!)akLpx*6{(+H6X5jl}P#NQtK;>>T=Zf;6>H_Ty)+zG&K2fiD%MD$sp4>D4$^qaGps z8b{Vn-7V{j;=hzr?bL|2A~rOhrec>ZR1G;*NezIz(ICLF^d(?DeGS+^1WUZxsR%tC zwOTufi;;QlAx^@-y;=MXm2>6d-*`{=cshZaP>HxZ?Lh1aBJ zj-}&(yPjb&){w7|D3O=FhtZQW# zIJM=4+FR_&nQtBEd)YX->E&*Dlt#qD)O@G4d(C&anoy{#H^b@^`X->q`R;aV?CzS> zF$#YAIQYk_sYBxykZr?ME$8--eo}TxxwRMVP5aQkkc2_g52du5NY~Nzv;dM+%C37L zyLiPefh(3IyrP@`($j}ueyg;5X;HMh`)tyX4W=Dg2W?$EPcS`B`^&eA)3z%Lrxg|t zyT{Tayf0QfEIm%yr6{y@-{SOkv+`TT_ji1&cJtu3YBvvkt9J9;w`w=ff2(%$%C~Aa zfBRPL=CyCtZr<1gyGh%ke?8?KxZAQxV>f2(;^UCrw2!F0xtmcbM`E~t=odX@r%IX8 z^R^@2>-A%h)BqKft_Q$JJ6$1b}Q8*0xV}1bZgvNMM}1z;VN1p-@@Q1NtE91 ziKs)IjQYc=4vu%?Jq(`yaXczphl)OpI+lEsQ@OTvMK}CEc*-irZWd9m#<15ZhE`Mo zU)iI}SdKN~HC#<`4?RQ=BW{!aO)x$6-p%QH>KqZ(wJrCe`;}{3CRF>^w!Bi7Tx|=} z(p&rZ8{`cH-2pg~bobW1`12&XA8;}~2sniv0-Q>Z0CHWbw_|H}qxSKDkh;`LCx+O5 zDxl|uNR=eJ>C)?1GG*jtA-icG65qVFH-+q`{hiINA-idRXY>1z-L${6Ssk*Q_IEaa z3fWEjI2%(6bWK@za|UT!>w2~A>+~zV`SYiKlZJS`n!5ZGV(RLeG8M4qD{M1eZ$9!X z6#nyJ_!WxuG|)-PI`GRaZjIN^S(f>bH@t$AjKhupT zktNajKifiXoSlH&;B&gYmtU00JM&D?ZM~APKfY(Nzwalwzp;p-)#6Poo><~PJ5A0F z+pkLRFL#3D5L5@567E*Ijh4`_XesK7vNPJ4o}XIq{pShrJ+F7JwR}21mVDy%CRv={ zlmyT3IP3kLkjVZzROYvjJ5|P)TTIXYv7qNE3D7fr{jyxi$+Yzg$II&xJ?@VQi2d-} zKo?_jbpCVWsnPP)fB`g+f?w8?Z%xmm`E;q8xB3g?rSQ`%&g+Z>&WriuI*audB)HxY z*7xnGMDE)`*7Es~MC9{A3wka}ke)YMthYG9^_Ezyw=}`^mRYQ~Ji+x!EaY>S1mrX4 zs&sB;0A6ojE?(&(b96gaWaq-It?uD#U9_N&_=V~qdqVaPYn#H%=9#_2t1}hGpIX<~ zf1Y^_k$tsXOJ*?1H&pm70C(T8ogaCM;YYrUyq)wT53%wi$4B%dS^hOz@KOZ~dnSn%U;@mIj?%f9O{1=%id{&IEn zmwlNp&n(SvZ=6w@oSk^4HJ`M_;uGHAC<{5eT>^5}&6jD^rW{$+IPw2jpVKLcoYQcN zb81Q8ob2?&>4tvzi=!X5v(gVc6sRAnE%slV!2bDO)L5TyU99tU--~2tF?|oG#PhiQ zrZ90_i{pWDrv5SAW?R$k>;&nSRQ&l}MX^m0fBvE(zn=NBA~`+N&Eh`wNbo+LX3ZC8 z#NrF)!)-0>yX_OS?^avTb8)xi&aaondc6}ozjBN9Did6MGtX1ERUh05uNili_=wi_7;d%$==f; z_}vrzr(5G!c9?cYPEPjE|I+Es-T^NJXZz>JRCjUu=d<1OgBtU9&+lk`w{}kCZjG?G zTO$*=Tm0S!$NrXD#Qv7mG#E7v`J#Up1;+n&u;BNd66E*mtj};kB4@b7dcCEItoLMD ze*N}vS#t96_FnndyRBDp>n*gV=b}XD+1KI@_D|pry6w|6x+RZ;v>oRA`W)M*T;CJt z^*Oc+jVwdVX!;H&Oz23Qr`^ zd6GTRrLiRqSC;Unc!6i5I0ZKFaYfve*1SEtuGu_NcW3f|H(JY& z#j)fE=U21`yS?M5vVS_Nv7<9R>8k!cGyas`wR{~`<~7HmF6xT@ebxS@{N6rvwvwz) zl~a}EUgcyZzQa0Cm2BMeG?3Z|E7TzQIkmH1a5G)kLqf>+RFu$G?pU zqxyXae!C~vuZYt(;NC~FeEjw%;N#gA`OdZk^PM%;_ogn^yz8Hz=Dbc4b>4lg^-}*>dWq?lUj4#P72VRVUtoS)VNJJHvFOI@?PI;( z*hJPFXuaOxSnE|eHd>FqGD7d2aJv&M=6c!%uz_|1Y^G{swymB-peNi;P!alG0TXU{ ze(I%x^HYby4%G7|c}nCr^}#WEH$SJLubYaZubIE^G7J51 zMFRSP_qW1gy;TXUXIIxT9To@ok2O2}V~1PSbsSk>UB`je^5fuG@`LGJVL|Vz1nABF zm9AeK3Azp!4+3WE*PgJhUwf*6`Zc%QN%l24QW8h|SAOrv<=P){>PnK6`=dkUe!Y{K zJMwER6Cp6cAke_DPQM3ppG zu_X~UE1x@J9&t&L{xyE_bTi7gkaXO%v8K+|;p<;D&K2uirOt7|Vfac5U0E-qlj~uF zji9|jnQ8PxM1M=fd~_wx5d$#gXSnE7+X>d!SUM1PT1D+36*-err-nL_-%+$3>8S5P zbTA!4hX%Y2AnPTvbDh=_b9jGX(m>k+ZtuJt--y`c-E<@1Dw>4~j!HTUu!hb7tf%t; zo9Wp~Ijd+8&TAyy0sP03uG%;RQP;P`8vK2kxF22B-Na*y2 z@uuif)14|rji?t5Vu1LCxJmq4ye|GB-Vu-X2%BBSnA_kyTF$_w-vGmU`W;{ctpseQ z-vhcam-qTDu@dp(GI3SPn5RMWKFA@oPn!R!C^Wa{mIJ^E%p0#M&Ur&|&YOyJG@t)O zamz`H=CYb84L)ZHb+=1G9cwM2jxR_;rFpxq+Kf;7Id#%&)k(kLIq9)VqRBUd(>Un{ z#~TmgQ7wPvT(?Tn5>4~yLEyr%^jpAs+810{LgN4%=m5ZGItXwa9S?cEgV6k{YwEUF zduamimWw9=Zxm~=-}&Mpz)OYR<1p%=rUQNlnT%3oCZ4P70KN2~A-#8~>6EFp3zp>3 zxyihJ9|5C!`UJ3nJ_Braw2a=(QpHW5V3%o}30s^8<-Ba;-wD5t;`Ld^ z!*4T{wAWV6DNX6{TNKPq8K8F&ep7Br^`S3>zD*GH#v>xzcbYrnbW3<53u%0H zKPNNoU-K}6#;AE7rZ2=^4d3zHcgKS6c)Xb*$@!ae!Cm>^{`#wL3`16zNAWlL#3tZm zFwYfmBI!8#Ryd!H;smFro#*-<*O;yJnN%TPg3F!pJEfv0G@`5(80);WWcqhUhtB_H zY|QyrLHtvy_$S+!=FdMn#NZ#cbY;azHlp{9bwp1TWa;v%PrFv_X>DJZ#ai`c*Q$qF zuXfhEfOArjMnKnfkA<%S)Bc(Unjm z;jMg{SOr)-nuYuQvlWk}<@d8T&3*MWNSns1fQmw=s1~!f-qNy|`7Zv^br&aC-^HT~ zx{EAHZ8YaUfY~F))#7n&D?_I0* zv0k;JpjG3YQn*gKFjbut1@ovD+YPB&Z22;7lavIJw|I_dR2jEvM#k-=6f$l$R&Ufh z+FF!5db{hk)LGw_zNz1qsFsP&mZfExR66neR(SecU8i4;KO7l^dO8xYfhGVp)9LWV z7SIm?SJF(tRnA-T*McwG#AuZx*V*xHV5w)L75{QPHTRqGr>d8gxwb;Szig8W=i43B zwXb{hX92rXnNi8qIKO z9rp93(d24Lqb?4W!fC|OGVj@Hj4xCe&s7*-tS~-9@tpTmpS3#GoqaJLQ(X%GPu6)d zKZc!aKAh(%oG(>4|4iY0M*z-^p;YGnoUHLjzRqGC`%RzxH=>f=#6m8+!~@!dmTS8zxyBX5 zJ$<9CS2=QRM5JnAcPH9HMJGLtQd7&ENx7!XZIw%Jdn-`w@iHA3_fjn%%~pe2nqEsI z@x-!%c!Jlet&YNf_0@$`F){yX-$%cjFa#1y&b1V^Ht!>JtaY#Jmvb0P`+;xG8RAj+ zPwG`W{@dHdfBk&`VJ%k)x^kt-xSCsV4wM)ssD~B=`XV z65L)-x@Cp#SJm@tKZ4xaD4wd%=3~~Bb#~}B9+Z2$tXXMe&d&_X(C08ZoQ|L)=_r~& z-=(AJ7&?}YQ`K;ia#^`5J2;tFo`@tXo+?OI_}$-!oVkM!)Y#nLH8~c&-TmctwcgV5 zSWDswJ`;giZ@p5MhTf`G8mnGutbR&kX-%f>aZ_*Y8=$w!U2;Q&$_?&uVT*h%g>|_w zolN=qYv+6(vpSzAVx5n~1DVi_YBa;2pt04O+pMPWTlRXwnorw;0b_k%(rt!)C8jABI2j?vV zaklr#n9e%lwiq{9&@F(KbSq#zEdgwxrGU-!Tfm9V{hok{9DT%Ez<%Ol!~}bY-m2=0 zJKmQ$^BuUmadNq?ZEtAcISK&=OX6H<*(2PT;)_-2=FtOP>Cv zwgb*#EV0%4Qf)`4=B1@K`oBbp=pwp`Az~}>iCEp(1ut#8`yRriXg<2$2W;x;0l)@Y z1K8|fX3}*R@NFOQJpOAp5yS~CiP1F}<8alL_^-h8@Fu_%m9sg+e}-a0k+_7q;0`J1CM%= zC*DAR0c5UdQ!zb_w~k@#p}Z94+@=OSuXF%@_r$!?pExpYs)M;ZW-GOnwh6R$4dY|B zlr~n{_9=Z;S+9Jz@YgN$3>wqdcJp7<)4bmLGYe$wbuK8#rX<)1+bD{1+1sn0UPM= zfX(y|K$b+Oz|-p^ZpQ6qz5iHKm?Y}z;oY|kNwly>bV;N!HgB7jl>bzCzoYQ}x58WN zeJz8u)EubvlZ=W7%g!A=7{`^JX<5QNQ09)t} zkdCeNE^fm#T7%rk9Pt6*aB)~SSz|n{w!3TcAJ^8&>3@9#vLxXdlGT(Ci$@g}|5jM+ zqp;``h($%gSh%IN>GNn0!p72l16Ej&rF))pFSqt^c``naJ(rKNuDok1APV9ObEnfEdB?S4mkkTe{At@7i#f$^kDprVeyadS*XRIJjP2M8YhRb zJ432vn$D08P#tU?o3a_wwK>+_3)PK~qJ?HiWq#Csi|pxjt>p>-+@aThJh!OO6XsY= zC-g$;JanZa@y(gP9U65lx}N#Fn|kL)#*D(M)MPb{)JQ!2*G(Jqz9thZJlmm7a#a|@M&rb-X;go1(St>asW#ljKAZNWra##)~jBxZ#^b_ zn_l0$<;i({^^U!z^{Sq5YR)e5PR-aGmNzD405;Hf0Gr92qoF5g+y{B#o|o|hXtFY~ zg|dkLggNH(of#RWO}fV#uPfFgbtCtp`jW->V1K zl)2CUany1osRvA1XMa21z*z>}4yM=siQSHTCv0<{!!SO_xzA}~Y_DstvedOq_-B7x)l=z)PmoYKv@^-flh%tnZdlV~zcp{cl)vX1jk*y0@j(Ni7E!4W*qaRZ{gbHqWAj>9vZsTH+m zM`|Cu^AfismCt{PZU zc{A2JL#*jGv>>{%KB&Zvf~*BZzE(vXZU7uA`oa#E6Gk709F-GB>kKVH-CYr3u~ zh^~HmLU$prR(j%Sm!3Gur6;B(s3#U%@AH;|_Q~`-#yPj|rhINK)^cc6L2`)q)6aUH zhFI$?cj&e(Wx5qhk3VS5Zx0p3Z!E8xl%5!>^n}(B0u%N(iY*;I@wKBT1{-=}im#rS z6rd*tgz5>d*l&fla(91!37t_-UjsG}sa%BaQZuV#bzP6{{ytsBqO=du9Z{%k_xCXY z-6nEQoa_r8<#gK0oMl)&A))koLgu5KMg7rKzLiv9@6jRGFHHA!s&UXO=m9 z?xK(tt26Om^?ZjQtTm=luwyLRYJ1}AS?}45lS^!LMS+P;liI~#V8wbs=S6i!bYIX( z(02eUX&hiZ9RS!s2LU$I4e;K32>r6frP@tAf)`w5MFPL%!qs1| zIdR#CdT`g*;X7209YZjp>z$9`_d8 zAk+Ph=ms6;#q@uj$ojLfF=gN4N^}FZ(h#hZdC3=H zO&JS0q&le5czkt@;wg82WJur~meo|@@S7QV*PTk<_ZrPEVEuNZw&u*qD@QBc&i37T zzPkNX=yskbrE?O}jt{f*xEesm$;RVkDk!9bPK}J48iUoHloKc9 zo9jUnYTOy=_fUB`mUMm6DL4!H;&`^^Qb+vOmk$6p4MX40aFr`7bP6Qrh=M9Ej|E@U z)A4`}G!d|w-c>%GdE@k}9BWiAB&bT2@7!Y!Cy%M_q~;QhgIDFQGzgok#INY-n?4N^ z&wQC_Xhjd;r|Xb%D~z_rwCCU&rpclHFzfhXbv8AY+tk_gt9fU`^l|P+E9H9K-kEDB z<0QD3-<+^^0%Tv-$L4qU+!?s(P2Hgf_(t$N2YDyL{Ol;${U89lAr{!pCL) zMfa=wr8!*S-?j;TzYbTjZfkUIOP;^Qk#+97b1J%ub^JunDa%*!&6t{+)?R=8Ca?bD zTmM3A{S^<>71o&kWfNnXpQi6QHbH!vvRpgVO0FGNpj_*l=Wd2u#y`ZJ=ua~N8)z2b zMRXS6#l9BvBlR6%bBY8k=SS=HTz9rlXHu^`yNDuTY;ELTfs#f_nOX-UeRtzm4~Ewb z>gmbJR1ET6wvmrIwqqk7_jAd|#lG_Ks)+Kjc)WXUV!V63hj)v&ix(2x#fzR@MDbv{ zB46@|xCF9XdN79vdN4;u_F$NIO^s>qn_iOFH~qUK-S3I5hx+G{ScS>mb0B?7=sdug zzB2g1#5mxg`p!nYg6&T|gU{iqqYF}l4vbV_Z6uGVAG2j(x9djqIoyW-7 znRo@wxYE|KIg?Fe*T(`ow{>hg(aO)C%}%@Y_h&oS#_?y_Pt)1UA3J^;=PkDm$V$!$ z^}>c$lsVoVPePUzrDjzOpMv(F{so(F0qNJAb&SF5N9kOp=|N4h@KH9@72-kpokDhI zq5mnYi4|2~df0HK_9(qvS#80UZjaKID;Ya|PBu7tv8%Db&V5?8*lil=`B-Ao^9h&q zjHk8oM^yX3+LG_T$B(Gi#nM{ZPYCu93XQ3^VSbK`qzfauKD)L{j(t88asKdldSN=( z&$n2Y7^l4Kv9$aoRd#x(zodF1mZah+q>hzbf%kF7JModZur%uFV!#HP2iQzM1Kf?y zD3O(u+o*c=W6*ou!-uNHhkX)zkj-*`L z)C18~|2ZDTJLP*5JLUU5r_3@TDEDLLs-kD9Y_e0ODnrDXA(<8GmUE*TkTaW^>70$v z9T$ai$J-89?22v`Da~YzIy!f-Uei{Hv{$2BA^TfcA#ABeo5sr6nfg{+M_vnBTB9W8Bw7P7(7Yvu1}fgRff(Xivmut7H_T)O*7@gRLMS>0tyV+Lh)|LH`l-Z1Pb{Yp-htZt7yR&$u-L?LM;(y71wDLhAX(otGt=K{Q^WCvs^Rz%&PDgL1l4d% zj~oGw5{KQOu(-~_V!OaN><*E!;FHq!m1!vi#ofHogDMM4!EI&PMh_S}6R#jEOGaM& ztgNvX*m2|~njPb=ng6-bMQ|QERGWc~?7Ut;=TtW#7Ro(lHq#9?eax5~uk{P)_WqFf zH{iDc`MalT{QbyhYV>PGy0@(#?0?Do?kXDYy}ktXbMn^6Dmhs($FsOTL|xN5da}%> zTI1oeTGxG(yX^-|rRR}dSy%4xI*pFJ8ixDYLS9*+Cx+`t`As<8Qo0SWFZ~*@k$wl* zOm_edrn>=$(!GE)>3+bu^dR6R^bp{DSA2ap?CC3U9_rajJQadBgQimQ{Sv@R{T7w~p zHi}0KUSH-~YiWXOZK2kB)L83u*IK70xR#fOx470?oa$QFy4Jcn!L^1d8a`&waE5EG zlM`I4zgp`FW33BZYt2b;E$?|<>00aZ1lMX-`+CaQ*HXM9ot5v)s*;oM-hIt-?Q3QN z`(jVvD`j5_n{K?y{T(w7yBd zz-jgYjCI}>I*<;cgXs`DRB}Y%OOCSU_zpFRlX*9chyH`xqAiH<7dQXaWdGtO`)%wS zE)DPvm(?^VUyXgk{w^Pldo0*Hya;}j+dpJpUD99Pk>!8~((eFU=zW~$HuNdr2>JqW z6nzEAuRA^F@G3QHefmTQuYT0zeb?!KLvo3{cRfFPXV_08|BZ@BvxM0g5RvYpEE<`i;{N%t9)n<8Lf6W7 z#ODXSq99v>CWU}lH$(?x_W_u-vYX?Y<;CIy7?&)pV zJyCJxo_KBd=;>ZMM$r{ioJM+fi|lrqBO1{kHXN@@$Xl+XKquA8iI=8slCv3tm*hS4`sdjY2A&vyBY|h%}<6)o6yQ=*uX-BRm zKfkL_bJ)}_=3b6!=6he@;WGU)c~(ohW0^x$Cn9S}j%hL_M}<&wyI7Ru6{Nmt!tjt4T4Jpby)(s}V*OjhG3sdrU<0iJY^LLtmj4O< z{FYPYr6*cHptQX1Oz8|iS!!@^hl)F%5`-lF_P%=wa{;=c=`5sQYV7|Ij=0P5XrAjHO1G zrONRpx1~A;Gc}{lc5`DEj?>BT*Len%iP=sTm`!hrhncQc49Cw)v)7?v^7ZO(sEdkO z@J;u=$!>O4o?%EKv+MjV*G=Cs@TTjkANKOYWD#@p*CFzlV%Z<;;|zk!fc#xya>&vAsmht6j^lte8#rg7k*_R^o z#g%0~i}jd}Ehl}p_qfh>Ti>&lddB{2gXu8=wbV?HSIUy12Xj(~5KFdGEKcHzQ&Y2> zvvbTD4zrYgKTGNNbCiD9({!#;dP2{0(E9x~7v0DB(*4v%={b&2x;@_%2d2X*E*)`N zf;z&E4qgiA?(HBt{KrLyJ$&hKRRlWtVd=HQ^u&$x)M?F8r*(lkEp3gh@SN6@E-c6S zVyRC{&MnPvi`il6#ZS{R2+O-%SnlhKrKY7FmdsP>-L2xS@PO-HtV!@*u%^+TjOoGb z8{on0T~QA?nBRlR?QLahbqkSoJz~i^?%6f9<`C%4{xlTuB2?^gg{@h2Vd~FkYO0l0 z>eipZ+LNhAsHPZ88&L^S2|x8~Xih!jY9xIM&6&iME7nUb*vSam7O;g*MZ~T|d?<#) z@8nqb*3Hd1cD3%V36FN?TGV`2B_U_kCDvK-3Ln?^cKNh&8kxHeMpnTT5)X`Gd+R_E;9F1RDjoAk2l&x8xU0dOBpjm?|W45`o zE64Ks~6LD^Cx>pY*#5{0g48j@I0VcLz3Dr-APi_4M_N zTO0440cp;C)V+rjluXGt!y{@ZR6d#VA0<;xRWfCSk}2*CWgMBpQC~0r=a(rgOWH8E z)ZP0sySBF6?tu zPCKXz`*J7$KF-N$yJKNto!9Yr=O_!_k+Gm?U37ehbPV8R&}B;+jL7bCF!3LUnrFPyGF-ab%1Ik}&T|pENXt>_t&1qQ zb2eRk!}Jb!n@c=p3{`4aX*&f^ptu%X-4fW#5#GO%OW`Es`1P3aA)^Gc@@XbGLi5Cd zp_5Mcujq?=tNoAd^VWq)yNBOscJsMe*{J#4{rM!^%Uz8)?iiNXHpA^qg*D^z6dvW4+;18fh z(zgR=Wb8oJ|6UtJbBEcpruo9#q1J}E^^L$fpQN*+vYrIurt&4Y2b)IkMe%3uuP<>d zFRfGJ*)027*eo(j6wPMw%OrT?+V80t>H8{1`k{)E>PYTZo*3!YD(A_wiCdkX7Pnm| zW2EwyOP!K0qRlbVV(?>FS0s01YdOo(>0(t`oHPx$b4$w z*`YQ)&&(Mc*{0`6Q_xxKPFXE=!t`aX=H_#iv%4B$^RyV5a!(uLGmql32llV7%9D zW_Z7BiTAym8Q%B1@DBEGA5?g6djIyJ`Y`{tJ;;?ubL0xgNnY#P4c2Hj{-*13R?~*A z*%v~2(r{RO)A_zpd?nepPIE?#7NQQHpE=WcYx37lv&JX6jg>6qg2_#1bwDAxlF z%6x@K=ejFxnj4+FBvY?w*5m}euA(!O=8G!20%x4^s@PxIfGJk8r`+wY%xH@CmI~Xk zCSJOlG6*{_UZ-2&HKsZ~UO^b?DoQV2XIkJjJpp>@O3EPYym;+zf!Bt*X!L3iGVSF6 znRZ}6)ye+GtH*`NG`Bxq4B6n9DdtxLwM=L-V)n8MC0Lg}wwdVCCqi{;d7jvo&f9C5 zYx==D?$+#yy9G&If6D5&X8b8TADHR5+iP9JUQyf7wb0x`ycpTuN(zMMgk_ycVKFjq z$F$iW{bv;;dtSxJ{-R=JX2*1!ij?Wh^=`T^ps(&BpW?)K+%@ttzN0ISbRA(>w=~C} zlESamh2Jz^{A3Kz7Qgo9zgW{u$e9g970zDZberE&ZKJr=hF3nm(b4v=hF>{W-2KU$R zM4yA&I+-6n55Kam@B;kG+Pe$!D{JpA#;>fs`vrbwxA&#U`swM9KSSl~Ak+fNs!_f{ za<-cMnpxv3JJ-BbrTTtyk4!cStn<+BiJ43vuRJY`M{fd6O6g`mH;*m?kCwCx9{r`- z!EJzU9=!=WNT<${&mavR{T24%=FwkaA4&5lS8?n4$NJssTVSWi3C9oA1WhIg(vm6O}g6@gkjm=w!@oV&i z%NtjZJJ%1Ap$RJv!i|*oXdK<%TnA2<>*;Bt0XEWefX(zG z;9zX=m$LvjbMa}NYPF>#7=)jSk39_0}M+l`iCw;l# z=pe5rt5=ggdoBMy_MH8XQdyXOqPGYpHTgPdY<%C)tKIGWaYvqQ+i(%W12-hbv^MQ zDC^Y|)GDRkfW`Bj(m3^U<2H!qDHRC;zWtex$k+OvZL+u06kJv*4z&UR4m*}?pF zwu6429o(D34mcO3-=Ema$an2imCTer_5#hU-33n8?yz_1aUz6v|=cJ&sc?VH7=#lWSf~N%y0Pdx(dW-aC1_fIk z=PRq@0A+QoGpvr6V_F@|TYA#l#hF)}1{u6Hw>mCwxo_k9YM!^wK7Ux5%x!e<<3`_o zEQ-AkUgZOI6PIOH*}|aK(!^HzNUd^uW|bkvDyJs4iaz;UGOL&;zc}_P`R?R{xO>4l zji7ACP~6G=TzB$9$dhz(8hqxOPS^U<>FU(!6gAqd<8E7nPVT(JOVG9HMh>D%-yqLr zxRSdqfNsy_E$kqjyaS(fC&=23Vn*hqM;Z6-T5`8**!uPK~nnjay_{}x5p~Hcg2r35361@ zEvLVOU6#^8fPLw3z($$?h*uT?2h(K0X*3mZCY=a4m!<<=LMH>dt7HG@^q(zl(0yg& z2I#uj1Mn+3@DTjUy4dmfm36U4;#bziPQV(_n{q&Kk2&I%~f99A0RLMXnj7k z{6dOzhh~7*>HBW!;QoW6;LcW$cjmVH-K}gqKHISsUgKwWYpsnbBf~2WOphZC8OiqjHE>Wjs;LJbs+Toqt0}%dHg#}1e0eJP(jDPVgXWv7{CYHk{Ib^-L0aN; z(0ZCH>yU=7V4w16#CpckB*b?f5iNlplUUD^sw=bq5WZ(^^89@92bdUxoFRPIpv zco%x-e+ca_WrlwjI>*w?nYG>*+~%rC-^D7@H%~?S&On9vP@&&O+eStG^qjBTR4nak zyuNxooj`A8VriW+aX$CVuduf#+&X6_czjEG0P`)Di(H+HIA$-=d%ln zas_#MK{>!MJrmX6o25=~Ki{6FbmaC~MX@K+!Tp?~;Lb5AbMBnJGxJn+xB23<_pRxt zR7@)0B)lkZP5aR@zD_x>C^{t`EgO}z38&?l>L|2~htD?_XFI*Ac=)_;fzO7zDEI`+ zWcPcsjhQ~5crrOXJ0Kl>%JD3-OLq=#QY&4c?$bH2n&yZH0Edgu087L)yy76cbWf_4 zZ(2p`&efCs?|}~UlL7Jl;tPRu`ZjzzxX%Ud?bWBhxE0JK#NK2lR35fQndlKs-9EwV;Ev7wzf5_TpsK70w;$ zN7Q8d1J11IlCc#VNXCj+Q}llHU^x&cFK{jHQhT)_t}hDin```)bK<%AW}Y+a_1$MF z-~BAW2090@ne;6CYdmjny=rkwW;Dr|)CjA$w|IKc`<2{3^I@gm+%H@!GLXTh6VZrb6*wy8Nup|`Tdd%`|#hPE9~3#hC{&$6k9T`&}UZa2+_wXoE| zetS3Nv(0&wS)7NK&xP;3TJ8N%WABH>-aFs_^y0Wz)TL1q!MtJiJLryvGS|fWK2`47 z8nzSf^{k`(xyMZ@A8%56vWxG8qjcos%|(%q>EQm$qTtT=DJWOHDf#8L5PnIz&fw=t z9&(+*-<>*xs~Y3f8JK!t8zl>OHDuxLv1K946my+zb?nDjry`Ygc2Vop8SC^-Wu0Bs zI{l4x8e^}sIrF@(uJMCXgV9aM2>`eE7vn?`BW9Qx^Mo!2fbzw;|-=~B8KF#Y@v&+QK45tD|w zwBwrow%StF>Cy;)L|5$3c6wZ7T}2b=H!5UxzdU7kRb`D&ze$=r8l~@GHr^JO(WL$g z?~ACq$hg|{M$E3&nF&d0NnKet82o0dNm;YML*M)8-5hopc6F$j#qbhL`ZN2C%(o+x z#xbn3WHu^;^$ANpW%|i?)%@P}GBMMAF`91X9pQHubMH!SA51t_Jp!m01sIo4R`_}J_C@w;iGZ?63le)Ks+(Py$jpQ*9w$z2RN3VEbHp(mzVEPE~JOc>Xqhjcdrjty~6q>T(=J4F0Fj$y(wdm zzX^#!=EFM)KHVDDkDSE7J=#(Gef-`oVn5Prcj=B&KkJL%CS@zEtyXh@_9J;-0>6Qr z^(BXRyvWty5%aB&lVK@rNrOveA69P7Ki99z@5x-*2$D4`{+VIfA7*x9ZQi+%-ioir z_~t_L@ztih5AUc~D*W;Gvk6VP9To52so2WOqQq7m z-9?eXezGi%{_wKcv(r?`R*^KAFRxsbSx8>?= z3|e#bC6G@%FJ8}!(Y^cnWjNizzov|9oz3^*9xv;wJd*7DaADRX*I3CO{-k;F5p|xA z7UeuSUZ3`PvM=C23Bnz(=aZa=v*dVv5T{)Zy*Pxf1l)==kD1)XQG1RH=Wi6m#AuL`j>;+)}AMLENC`0p9uo_?Ps`=Va{OKQGe(5=4! zma&|y8RWA+ry@QpumHvyq+yY^E0h2h(eSbLkDhOXy8N_x#jc9CKsyPXK2*H}x6(%DJiQ@GC2; z{9^Lic#Oo`zkW%danR|;!_^MQZ2gkPGOT{d#MVpG=+v~sFzY)qhGF$fN#huP!e;$a z7CZm?B@;7~7tK4uo=`qM49Cj!hfJ*e>zC5N>xE{X9_+Qb+!*=SFPS*$TVPVjmOAkECVmW00j% zgGQ0DTvH>lFNO})wKd7=(Dp!QuBj;&opo)^|2;Z$+(pv4J@5s`T_nD2i){-ZXnT6T zlc2k(5&qWQbR*y@It!iTHMBe4g{-7K0qdz1uz~ghY^G-`1^(SZsupDsY9L2aXH1dp zLhp4Kw1YSVfB%-y6QW+ne=QTQsP3-&;k|VeqoHkPiQC1S!aX^*3tn5R5H+G+G>8G> z7vd)IYw^1Hhj>S%Pi*Pc+M2*>ByT)U z)*=-a*LvD#?Pnv!wF+DJ9-npZi?nVu8vn#+y^A8#IGwxn!X}G##E;p&2;7Sov-QS0 z{32_dLwP!&2IARGTx-9sC^RdEjaX=1-^(gO_ zy&hPnAL-`Iwzjtaiiu5vUIDD6R{`tkb-)JtJ76>Y18^c8rru*X6!vr_vOiKC~|_?9rL3M4f07gTxJ@m3kr*5|sZ)`t&yx zg^u~Kjw&Vo1*|uvR4eSJ{imq39*ru*{mAqKbX-Z}9+l#z?n_gHOlg-`n^ZO}+o;|A z{|gRD-=@uX8}~rQrZ0U5u#pY`#8iC1!88GICLIkpmyQLzgpLQCPya0{UnfQD585TI zKiXupHl;^Y4*8^AV*OdW#QFHlfD+XWnwzCGcNv@FJL5_Ah- zCEW^GPfGwBXenSb{T7fTEeGN~i#}p4U_a5@H`21)h_uY>5--vc$G7VSI<`OGu18Vj zLsGUvuXc%b?{PX zOH~v6UET4erxHbf!z1Y%GX(S)Lt)viB&J|6J$7`_W9J0u!Lwj=f4`myH2^v2<>KA) zP7bYGX?=ME{3baEs>Qm;ZW=r=?(BE#){o(T3HlVUl0FBlr;UIO^c7$;A&s5!&K^*@ z^?;tzJKN6JJNw4)&PMl)?w#$?u6*-OPPgRHfpWsiP6pf&Y=2?iTRyuXfqfwzO=m5ZxbO$<1$I?fD_4El~ z1APYAOy5I|b9Zq|m8@U>iK=M+s-K`O#3$fRvx@n{k`mg1cBGwXXWE5!rQkZ|r0F`M zU22Yz?Go#4i^9W6bIA7X66+n?CDuE)ORRS-3f645eC@JZs5-tK$6xMJZEC=734Zw# z7tWt0U~4hXZ@9kvW&&Sk`EhBxvSyObl5KQl$x4h|>88$-?T*{l{(QYXi-NV=H+UFU zmY_cZR??pU>*;a826_?@{bzujxw#&;SsyXFM*0Sw@b}&t*{2QPV2_&UzClvigw~?a zk)_KQF6r`R0@B5OLiXOqgx<@}cv#rmPy0?>TMC+OdO+LeHdc)1gJd zn)P_C%d@FZz_Ur39)}f`9)n!;*dhUXFr~M4eR+5SUrw6RM-+w9Nn?FfQLyGyT<5ZT zUrxa861$>yA0N2uSIR6ne5wL}(0FI&)0mo7|R4^|VvymlPBAx}jRXl^}%L(GMYCW5? zci#?l9bKKf2y^na_H?|(PE8;KhijGP1><@|}AK3Q2z-3im zn1EFskFR#YY`~=Xiuby}wbz9S?3K^{$#%uDOpjY#^jMMrJ>s2xuN2OnPbevka%xdD z3ZKwY*9k34;Dq?g%UxgoZGvB3;rjBb1itL%Dl-eLbH4vnn(7^;ss3$fDxLowsJQA< zUrkkL7MQ8{gln%)ZSuV~r?}U%Tzfrdlkat#6!-c!*Ir*sV6V(EEv|U-s08B4{N-Yv zPk8mkqp4M2@Lqens92r=75N<_b2fvX$MBw#F7GSp@}ZJ0TX`li40BZ%Z79=|7~Jz0 zW;B(k+}iKy56G{rrLcJn@vzy^0-G__#lmK|1vb-*Mw?wNu-Q;&Pn)Fei_?o@{pZ6v zYM0dyfpz*FZAnK8r>aQdg+`=sn}i~TNm-jSi^>fH+EuK`Z55jFO&z~jq2%@|CAa^e zBKJ}2l|MMeEWt9jbE^K>fzE(y%Nw){N;YGFE=Fc<#<&5Fhwdhx%N6BfxWWS z8}xsO&p%D^goe0IXlMc_#C(3Q%l^JU0sEWJJ}JpOtEiHB?{>wpe2NdcPVu1xPLaR- zi0jLbCh+B?ZHvQ|ZE==iTfB#yd7Mtcq%mw&7+z~&cxp`Rhfk-{B^Rm_lnaYo=YC@X z=kC^j_Vw#aQmbE2`kePu=X{89&KqK$GrwzOQz;TuBXTa}=US>%l_CRy+Y&JdQ3I|N z;R=zn(910SW%;UWSf$88A(bLY({qNR=NSe)Ww&sgo6WlE{B|Yf8S5XlORST!1LhRf z4oC{?3yOj@>x1iRyZcsWEu;mt^(rRjtxjuo>eI}6wrs7MTWXuWU-(47{ZgxK;fP%; zI@HEfHLB7oX%OI8`m^#wWv0A={$lu{Z7Pa*5~SYEVzi1%{Tp?0<~t52K#x|7{-Rk7 z7B>nRKh%>Oq(odxZ};tiX%2_c;dBHYNk`EH`Ys(!$I!8K9L2+Cj0H9_epnoA_Oif6 z#t(~w&E6K+$oQcxHY`Pxy4e@vW~W~h6+9W{m9p$)m(JC1~bI z)K?U}?e_{UfwRTz7kj$uU0oH8{q18 ziS@Nb#k$Y`X|MHq(7OHUy`Q&BtbfrivA&^QVtrG)#QJ7noxac3#qmq-ZkAnp_X4)i z99WXA^jFBj;i3~_u_fXO^xol3HhQYMKO{sKL^0|Sw~!N6$D;GjKiVK;7Cg;!HG1>b zVx^9VgRGztbwQDzk#%(ekssZc=pXmt?=}X0w>j2#pDYW)_u;ZQ_^z%D`tIUxalSh+ zkPd@m(P7)b?`~hvcRM@$@Jqz=`_n~q8-5$msrpn+5M7?BsWSMZi3ZR>;+|FRZ_UO7 zE1mBL`P}B5Pd(f7F2w8w-3?ez_X0N1{eaE%AmB)vsABvx;mN!uIx27b6jdoQy166G z61R&th5dw2=GhMeqo5zx#^Hh6dj-+(wq9|*yJH{^>|78JFdcRc{O<0tzI$NccMp#B z-M)d}?O)J$nOFOR{~E}KW6wdPxSq}f#FR5|rl3KnedZ~(lXZSi@#@8jS94=R_Pokn z)qFpf2HwwQH8sZl>`(3+dQqkaJ$py_{67u62cO5f2P*>4X;nez#Q5$L_}#GueYccl zm3+gC8liPZ(SLAymGmCqSoE@Yb!AJope@nK|8SY4x4VabFeKtus*B%GTQdIp1>(Pd zLHGw}f4vg|_J%YaLHh!>(02eAx#k26Gv)-mioJ98H|m^#Q;h6y3Fw%e65xlciKU6( z-#qx~9Q86-XA5XcBU3%pz?C!9zk)`ynQ3s23s*U@p0Q=QU?UN1bl4O_hn2+CVM*gQ z&A_c|Ox&2yj|k-RqYC14{_a(Q-@PW*cP|V4?iB@nmu;+Vm0bA{*#S8hqs${qOj#l2 zikyj&n}5}k#XTV;*ne1~{D%(!OT;?Ie|R~T|By7l9cu8~|3Y_`iNfuFNapJA|*TF9(XG9~|drJ3GU zGXD#}wa)AseKNm+%pXOA)cJgZJueYLozHs6s_YyaKA#sWb#>AP{L1+?JkN&b*qk14 zKKJ0>X+JqBnZLhrKKI2upQLdcZ{YSwOx&1vY65wut{~pw?;aQU-4kMccT(VYr^Nd1 z_X5BB{aD}qpTO^)66?FC1%CI8g1%el+@qv2D8+iS=b}J5Tv8Ann19a<{BB#U@6HbV z?%A=vdtKmn7Zmheu7BzQ$?mSk>VY^;J@o=?Ao-?iGo6eVgmw_em&q5Ebv4$(kn-iC zms5>(Q!m}kIismFbiy=MkGhuJwOQZP=dZ;o443cv;xY!6Va3Pg7++kbZxXsp^2KFC zU14FNxzD zQLEd}bI~>%F}Md>Puq{f0%@>KK{Vj+9vb-F!(x5++`#XiU(k2i_x(M1x|Hq!+%GVW zCS&4Z{;ugCbM%t+iMG=lOOZLCeW5)BeFw0T#sSvT0e}s35MVRiF1>K^I8ME{I1AS9 zJL0dX2JR*v>!E9Wc}BobYY_tywW6us6V32%#?x1o z^2Ho8Q#S&!VOc+IpReP3&QpQ=N;(~I6$x-}n<%T|b^280W&}s%T}972kQu>l4yS$q zKWYSh1lU3=K%G`vjnkS&yMm@AVh!rE=ZH@Lhl^>oIum&kYQ)|98yi3yGY`2Ir>yUW zneXg?J(Y+)HTugHH4Qmmjz%?>6x!2#1^&$_m%r(i8rtjp9{O(Sczc=JJWQo{dc->5k)BEY3pnSBrz=sy&FnNPd%^p*& zJ53z_q)zP+h3PX2QyIZ$-N~5Rp4ydpFfEL~ZZPQkJ%#Ckiocfl@Ru!37x`c+`HN{9 z71I*qCTN=ez@X`TA53j&dc6x%)|vOj#MI>3*#@6J>w~E+O)n0>w5ub(w3K`T9LG{} z2v(jW-Ub{lhEWIHoEAE%wxiN&4Kxi|H2EIu_Ouu6P5aQkfx1M>%Za34Vr32IoquyI zv_U-`57O;9ox|@3Wr+(r_nROM9_19CG-N|IQjv!;_c!l zU^QFZ3wV~;9p^Ao41?9)Rh)u<^_EzGsQ1rO3rv4zw)GI52flHf-aFS zeEhy^2RcWr7bBdh+oPL1ptj*n(F^=oB8G|{9sEwByE=()oG8DDc@lmre5~>a6P&X? zI)xSfSFLcUv%+C9SKymt+J@RHJOsA|@dv)sukd zM)5**wkK(Abzfi-?X_yRgf!3D#s@eb5;9pIpiqumkvPW{ipi?PG4bR5TE+Wy4)6Dk z$@_jQ)TtHvJ1aECT)|J{_f&q-P^>dY{1Y&%@hdVKzfVCL-)}zy)qak3_H%s9{jgOS z9!b&Jw@!v7sIzaTy*(LtEfzWxx5%)xIaA6Ocdk#6n~D30%hu9frSu87?n&p)gDP+e zi5%F`z`J`Loik~0sG@<6)Gan>z!xkAyJ7)a;ovRviyyX0Tzq=aP zPfFNGPHFijD>=J6cG!!`y80U+zZg0Z)ZHi=5p$5X(!0)kXyYrgn&YnnJ7p~D!z)Ul zMWl7Ly{de!uMLaY@cs+4t=B+SW?yP!+jG|g3-EWrHv*#+GuJ*+DOMJ!gZ34(@j)5>1HF2qBYb0N)m6c zeEu!rJuY!_CQ-G~k6n^jMsVegzQ;FO_l5FVPIPE7Jti%{88nk#5yV*+-^*&=s_< zCmC&NAQ`D|cKmET4Z@7Qty6M8H}*CL_(}VAXoScc)2k`7w*jf_O-BqmHp?A$21FJH zu$cyX=4!v}ySM30(O;=`-#?q!zt#ckl@5>-(>PagFHU2z=mEKZs~B!bf4+aVao<~v z`_~CFUq%&I!#>qntA3d?Xo!6V{LR|TH|t}6lc%Z$y$~2a_buItZ@k~FGy5GLd%yh6 z4>Gdkqr_y%gPCtW6#JXZ=Vz0QTAd5HigeVu6_JEVv=`uH+6Qn7jRl-aCjj0_m*VbC zbYjwG)cM~^3%m*&Z==`_T6&mh18fsFBlf)Bi8_zQ?R`_Mb>hlRh%3t;xt-xvv)yoT z*HYSAY$Ha97BN$tEq)}Jp6fDue>wKv`I~2DzIje!-&~sc=CZ`T**n9Z<%#jyk1ou1_^YpeodNwC z)plUH6Ey>@^{cjW--WDMOZO}N`m(ZYKT}q2VYLu9hw9ffcqPei=F_jb%j5%4Yy^D_ z*g~HHqW%PMEZwN;`QBFbe9_+Cy#kp%SxK@_hI;??yuHhEc2S0pZ;Z{y{LQa3-=xH3 zVr53oR>%IP-+i;UXFDh_($7|x_TTCPZ1ptaw5BYv-&;rDy=|zAZmZkzevpNk?z_{> zr%z<~^r^&n|ANdnFO2=od^8M_95hJE;M0`+*hXa;wEST2<}0TXEodS$%a4OC zdVLm~UVi*#FB?mI_a^PELgoG&nZ3OkdvDAOi!1}vyTRKXtL@5;&<>-hE8qh96nWw$qQuBVbN-`b zke-DQl!;~?ai*aobo`4mnv9vZg4)}6VcNZ>_Ufd3hr+bi`7X@3dUP6cGj2b}CW|y2 z)p%U(t>gGQw_gYPEfzYTzpaWUy8Rs6eEu;5W#wlpDg;+#ux9$1XKGST&${qZPM@sS z{=*FI&sv{PHlOxCH-pK42bw244f<5aH+5BOAH<$Y#0GeL*}9gez~MT_^h9+bm8`sX zFYkCe^Szxr+Imc98i{-FJF30^%eD8HGkafGq`jLwpuI*i?hW5)w*K;+`wv{_Zr&R{ z6_X>q=i%i`&5;_jMuQ_6Gh2>qb75xAU17{@q@a#dm|b*fP6x2V%!`wjFKPDlu@tn) zqv$?_8x1LFRyFOaq@eChxWy;hW1CHpQc&87mGofdq`8X0lzclNR^3WHpuwim>&SJ_ z5l7WGKoN_JJAZ}t``IABo06Y$Nv{)CE!}+v_F!xmqc#8kKvcPlWxsQJiD+Ml=t~O0M&& zYw%s}lL+cYHao~_96IT2^LW%(;RPhn3~!?Wj-;W06KQL}Ni-aAGPM9sp;3TSX*J&O;3R|I#Hl zJawO`*}bXpN~3R+ z<%O=TJh?fy8|m>fzPpDQbYD|erS9AIupoka3b|X8_il40nv2JSH%8DAfGzZU_)$y5 zS|f79IyaxS&Afb}4=e3 z30s~$(?2=gjC}jJGydre#_s!;l$_e#Bd0bND5p5mY}V*+z^$F;Q~*u|NBQ;DnH_c0 zRlGU3Qs2HhpZUuxA8opI((BXlJG%+sX+cK=j-=xOC(=Z~Ni-R7GED`XLMH-FrRjhx z>14oFGz0KX8mx589gvd4Lx0SZjmXxhs&X&}i%uW06z|P7e*H!IohuX`A?Ug(* zeZ3#x)Yj5rN;aIRq{2slON3iCuuR|xD$54$24fk)p2V{mjG6CkXlGLGG=@%>L=YqW_Cs-CY@@%{G=z8~c9{Vap;@AUA!8^1Jcn0oj`!$fz5 zUs^VdS5wXdwbs%yr7z$0(U-Qi-&L-2)p07RFPY!Gw^VlonmndG9aE2MujghTylnaH ziU7Ra=UE5cwvze+f`1H~^rxVXpvwS9(p7+y=o-MubRFOnS^zke76RT$J@9Ya#0bER zVsF6pqE*?XJE`+L+TgcW&{ZI-N3SsWt-RDm&gyLJjHa;Ob5lni6I0HnPov)`8uc!a zM%>4-EA}a9PeAT8QLs;$?co*wzTEFWz2k+)ARy$&@uUO`@nwlusme)PnoG^YFb*%Ol5{(wC9T zm5eMaP)54((`U6pox>`?k#r~EL|P3viS7ZMO!om!p$7n`(i*^(^e`Y|HGp?gS3|?S zhHSww@euH96Q8KF`hlV6t}WAg?hnRUEi22_b1YYMtnN&s)9z2kznfJNHCE^T?jl28 zJ!yRR#)9RQ*Pb!`M$@V>?HOHBa)V*dMD;zc&PaM`KWFW%G|#z7aiBiuj}tlP#m0F& zW1Pn=k4iYYYDF=}O<7Y<%|xZ6W#=^N0ZJjDx@*XYhJada!!Uu4UM<8Z(5;dkk6GhRWOS;uU> z`CUDOFTII|e)llGAA6(6k1bdFAg&*)^}(xUK*op>;si`{dXgVk}Gl9)@B=k? z({}SoQa-*nhxnQDC;Vz1!hL+^lS=rbC7Bt)Q)@W$Jh`Tj%4)Vgp6`^MVyo}2o?rV3 zJhxWT^J^Et;uuLAVFkh7ffaPS7!F)!ix$AM#GBaHNFnEkb`_^7E9els)N(FHfrL%2 zy{?a*SbJs8#M)iJJ$hnoJPfzq>@jRA0)|}e_#W13r7ckjT1gY|=Z&IFRXf%JW~&{q zhYaE=4?9;?BHw3M>*#kP@%mjQF}?{n<-UlfjT9%TQ$A9i@`*}fG>1xzvyi=% zr#vI)lskl;vOR|8DQ}(_ny0*}Ff{do&K8Qn{(9kE)UJ&byQ)*x*3oV7)6NwOLnoSl zS*lNYx13XMus-E*3{AbTd17elg-wOw{~(IM+Fw^CbX2F@0Uqn^;w8Y5Vm3U8v&6@M zv&F&cly!_o*8HC|$@IQDZEzCf~#;cCmxTE+C2}F^b)_R}=wDq7Y-p^83s=&$;(JW$rU~?~?ew z|D1*0XJ*cvK4;F%OtoW(%e<0$n|#XUC9TcHkEOr;t zF<6(wG2G@ykKwjI0u1>a%St7=yeDy)Ydy>1@?HrpZ`dj>m&TB}{A0$Dx%}V9kh6bZ zK{uPDJ=5;Q<(D9JGwf@KTAS=K$RM3yj|H4+e?wg6ozS01|KV}S<|Bo;{gS40_$>(c&6PLFlUH%-f$sL9T zmo4B_dkt}!ccL$+7<)iTF3*T``T7KxzYW&q5DXc&D#G)}jA8r#5r)?)F0;O9UDodn za{llfrOV~yVE>Td@+!f)TpB|iWB)iY)G_w|3PaZ7TghV2Ba7XKboqUptC?Y+!7T$# zb{XJQ+ZDSoC)feR-klIC)``zf=2^mPs^8pAY~ z|Nlor(dF`X&BEm{t;^-oaP|t8!^*jwk6}60i2SaFem81Gy%^P6thjdbb2@|4lg{@VS-JIC(HK^4JytY^m2>&oA3c{>G=`OPc|~JbIhR|0^ju!i7*@{Z z6^&u#Tz=t4&*c@3VdY$2(HK_F<)?o1Twc)_R?g)WjbY_n{`5!BCT7*@{Z z7k~6zUeOp<&gB)2VdY$Y{YTH`6^&u#Twc)_R?g)&e)L>k(HK_FYM3@hhyK8A80eK7K% z3fw<=S6wf&Cfz_e9ycdnY%alTbM8(Zcgy~4yutRMdB{ABe5~}k9?pCePq}w5oN`~O zRj1sg*P2+bzbN#&Lq)xIj`g}xq1T^O)NA)xue}Ss_N=JaA+cUpF7(>JqFy(Q^*W@` z>!6ByT_@J-ZiQZVsi@cWW4-QK=yi{ZdhHkM^?*XJ`&HEI+Ob}n3%&ldqF%eidbNdK ze`wYFbpPv}j{JR6x&7cAR8}{ecTxW)w;vpcb0`Pc=TS-Z|NYw!^7lG>N3Xf81{Ye)BpOO%N~rSBhwYlEgnAS2H1b(b*->N)ResOwAvkFlfA6OJ+h5um zr>(&8w!-N|NXnh&Wb)@sv%f;4thv|S?_ll&oM`R`+}q3poMavX+{ZiuxUcy;;4HH? z__?}04)8d8Flx}3+eLs&>^4-Z$}a*9MP<3WO>cI$;_W2cbxPi*mnT=HPZHOGDpM_= zw%?NEs{Av=hXu-2Tir=}4=5;i(w2W4ZCtL}3a6HeaLVH$*PE6;k8}Z@L^_LjSpG?* zGXr^8xo!Aq8|dMRvFneJU0+b9U60FCC#<7cQ79KLfp z{otvm+KWiW%RixWbD)e@POmWkR~fxRP8xJV1^-lg9nq`&QxHc7((5st$FPP^-8_wd zPc+X0?rok2oMc`A+{e5GxUYEy@J{m@;9ceoz*&a9-WI4qUv9U<39;4f2Y|;}K4lm8 zgHH}F`oWKSCjDSs57V!=l>7GFQ2683t$u;7^)I%t9xlfXa(kQa04JFr0QWH#ws2pg zZ)hBZ-^?<<1#PV1TQ&Htl1K6V>Xu(1;kQRd;mpf&%ifylB(IKqUR|V9`qhyQt{>W#JZHL#AWo!wI+Wo77}YHMuO@bo?H2FVAe89G+@_ zO}LeRXVC6m+~Ts|Rx!=R(8{)ovnszc_&Crm{=Ql3ZwqF9to+XIQ^-c>x2MX#ty_4P zUQ_To;w`cT3jlF*H{c|*7;qo+KH$D)7;=$&o8f@*H3i$%!(jiH+esN~iu&P28&Uq6 zf_+cvbIAkf9NsjN_43b5Ul=IsmD_o3;rrA3T$S4Sw#Df^(!$o`l$NVz_?W%TW`L8- z7J&Ph@qqi9y#QyK^AKZAG#wy0$Z`NSnYXZ-UvBk^bvkr$i9IYsuGTlD6rZzopsedSfun*--Y%O*a#jBA&B8;rp>2!P z{cVoZ#jujr@IAg);NKI?Re*b&YXB#iYXSE$*8}crZUmfVbezRDbOG$x^5}lwc${^a zibvCNR-8_i`>lZ|d^h^ZYt%ojUQ6eDfjs z>WIAgAa6amH|=X_w{B+PJcIBo949_m(GK^$jy3%9&!AS|Brj(!E8sLMg;Uy&mm42& zwlN(UY=<+`t4FVpOU|)$d?0jU8^CKmy|()&bjccCJuJn)_cs3qoMiq3xR3c9a9{H! zpnv_xtBTgF|4Q>NElGC_bEjhXC5W{Y@8s1}d4Dxrp6*ETE(9knNj)J?ErwslTsH%! z(3dfb@-#bzlg|hL06i96dlzSg)-@ZXukCC}pZ0Pd>Q(8xl9p^}!+f_bz05?~Ew@Ly~nJLFt@-R(xJM z=P&x_JelV;R_Qw?o&`2j?de3X^6$Txm`g98 ze6fv4OBSCn{0GSwpEHchSLg}DqI}&SEMGcrmA(N;=dD&FdhwdHoV$M-a_PnLRrwn= z>r$>mzqQ3XI_wX_UfIgC5m%|0ieIeN)}CJ-xh3P2XnA(tRYl!e;Gy8uR&<*3U!xPt z`bOlJwJkj!6uQygnn9=XWZlu}fdZXYOq~8G#pz2?$xu$+LR<6fCgd05@5q%e+bf1X zONl-&KrhOnPo5nQxpnndSldmt>yuq7|3=vLa_v$&cHu0~1>nWr<`00A%>M!IWBv@d zulWn$EOQOzfH?o|%K>qQJszir<$%}*RK6}AL^hypaCK)gP7N=k4$~g0`@_mN6lxL}i1}w3A03K&6-DjvArzhJG zr}2>3z0KBulg!Tm_c1>Q+}CIuaTo_c@Y;;nByXJ;U#q*=^;lfP0OKmU|Or_62;; za_!BZU`fMjDkV12vdea$t#V_hSC|`XTbbUdl`<`KV%k)Klg^Ki#(vRq%hd?w?<3^- z6rC?fzr)A*0)BySI{B3HU*Nks*QbQ&U3wMFFJfQc3cZsTv3dRL^ln~3@ABxS<4oVZ z?;K}NB6^j7C;i@DdiAQP&iZY#5ATqDSV;DP>#WBkr_$XH4X&^jEO=kB7Cl{Ih61*j zUk`KHuZe(TV(&+v07~3wp9Q?$K7-NrvdLY9yceT)A67$|F!x^h1f27kYXpn7tvSC4 z($u|-YV*pl@Nr~fD>)KE3$D4J4Su0MA8>%VA8@dl2Uu?&0&FtJl9zZ18S(D+u%YF8 ziS&N+=IC{_*%EM!(Qk}@1xXoeShG*1{QDxn8$B|zY*-aEb+YlvitO$@RnTQQoyD&> zuir;rG;L5-8SD1xgL$uxa|=6~UznZDFU`*8S7sNptJ%%$ZuT(0HhY@Au;OqT%Dc*v zx^PP0QzoTF>e3px1}aoWo6&${%viv&W*p#na}a6Z(pG5T7JaMC4fbid@UTHtpWMj98sM~?GyoQu0L z10#9YUUG6Gfk})co_oB2k#H(RGoQsf&p6uvEg5ef0UTid4mjBS1F+sa4%lRVN1Ay) z*@s`0ZLveJ2$$OaghgB12hAOw4de{q%^BPgIgw1Dk2@kS^IOH8aJqa|rZ$I3E!)j~ z$YQe8PN6L6engSa0L5;K9*NY-&Z^KwcIZWVWvBkx6kW7^@%i?Xfl-SYM)qY@NT+ys z!6I~YzlYaYe2URVo6iBq80|d_(c%cgV$BRJWGB~01MwZpym5xc!e?bSfURvY{RxZF z8Ca}4yo$~x`>^oa+H&kj`h?wcWKCMgn!HHXgd@KxB&n{7AZ#624i@41(xXf}vSP4! zW(8`kmeh?%Mh+&e{W3#q#hQgm>~krtZCfk<&ob#E+!+L4HrRyVauTwC1I%v#>ka$B zRWYXIEw(3*cOl8hykJSKj#f(h(c1YKyem0KM%ueq4AlHvO` zD@H~-mMJ5GMcZ1ia|nxYzZWK{=`0nmv3YOrDw5aiELBocWmPR%D#-~w-6}~9k0Srp zN^8cEqt4L2i521%F@2qh_4YKwS^PS+t`)7l37J`U^H!d=?mnzKmcUh2ygqoseglW^~>B99mT{4zgygUX|s+ zhl8ert8Zp*l){1Okj8}1f>dYFq3v4lFDS|+pTP+BH+E|7KetybuTmIvX4-d{`01M?zHjjxCfT{3vlS~|%7&FAR3$!q}% zH=A{_J6ey`*!q3?748G%HCd^(nA^LVQ&@?mEe+c|ZE2Xpyl*lrgRU~C5PMVP?c`h> zw54HfV|z0s0|$|D9}d}iR>UFA+q9+8=XPc(8JE1S*nXdkYxyeDp{VPnJr8G>+46CY zxlz#}iGz<0**FyGzWU6Y zyX(UtPae`ZXpP|PHtPlFxYtlPByFA#hisdd&x!g;h^b|#S5Q2q^ZGl zz(sV0%$mr9(8Gs=rb8AEtecDpM+6h;#MpGemS|U(ebF!){hxq0+ITD=xcGFlh(ibC zs$iTSE^4N($~m0IKAOg68=))UZi5`$Xg?rnh@V7}z1$=Q$>@0ZVI2?|Ivge_JMF`O z^DDqHW**U? zhVUql3;Wl}9)A`WSO(eawuq1Lsynyy051`q< zt+*f~i+xT?VmdC);sRr!<&kyrK%xiZp{od<%HV=j4w?oqStI!{s8*WEd|_R< zA_IdwZPdCTHmPV2LNH*dWJ!Fm6&PqqEMm|;%Eh-`1Xy}5Jd0mbbpKbvRky9 z>*HtkT*COt67?9#^fQFPxfvLgBT+?a#xY2H7#-P9BpR$rV}AoE9!9iEyj+q7qE)3m z43Et=Me8!hoZ7?ix$$e1Wf2U@(QBV&@#!_|6Q4%o`jeR%T#&kxBn?EbwN^0(TCX(? zv|Z&jwzjT(PJMa?4J6)4Vjx^7ZCy16n)kfA)gFddy4Pl4P>vj=xuEIKkp@#j&;A^$ z@R&)u@NotP<#VBQq`{QXv)A_ElMD>Xu?J}yFc-9!)x6Mn@H+b{g+Zv7)!LZGptMcY zu^-2K&t~XCo`;casEhZ)Et1xYBS;SRq_LM}Sfp}vAszFkxuETmwn%(4$`!5PLUA>k z6>XK~0#ick!dV$yC`T8l(+KGG)Qy7M+1(wI9JbjaDM*A3>uUp ziD|1`8UxnMeaJU%M>2S31_tHZ1ML?|W56_EJPsrbp2)x;j|MtIDVGL}0m~!T^8T(B z7?k#nX}`c+*LtX9q<<-Gl=z^W7%AK)@{8R}|NTe~-Xbno+9`^!zQX08_#$>ZM$>fQ zbq9~n)M%?$uy-F;9KU-Maq}+oHK;VU=32m7a~t49^8nxg^B~}0^Dtn&X~DfP1MRlp zKo|Q8_UL-r7x4Se_SPZA)3@hz>|pxX{&uKc)m~}GA%DA$S=X#*);AlNpX9D|c+MC+(6exBSGk;T zO>=&{Rda5wZXHi!E^O79BHP-M{P%7z${Jmtrd_f3qR8m%Q8~h6E6UL}-&MvM-S#)k z^^7d(3+*l5qvH2S-bGdFc%yG;IuJgj)*KAjYz`xTvIKRNGwlATik)w(AoI^#KKnTs z)ilr8Ly>#9)%?|LQt$3KSZD|L=x9!|PuM5zQ}$W=oPEPCu`+MXbEZ1ab;aJY(lwfQ zU*KD7Rs|eyb^;t=b_N`5b^)w6HACG#>L$45VI8|aNwJ>-Jy9i?0$F;X1@Il^7g#t zJM7NDZ8Xo=V-i|*e5bTl#pSvmN%R1c=z%2BEa@!QTPnHko-5bCnx5&QMdH`{39QWm3NbAhjFYqjYdA5 zMm~#1uA-4op^^VhBl8{IC(_7gBt|}KrS!-mQE7SBcABFA-udE8$Osh+l%ENa+e!VS zvnA2v>bj2_HM*=h!n0vAx}WNI5!LI6>S-?#`3Jm;Gb8d6QxG4#XW2{qK0);Vf-ui6)xg>4pleGPjq-_y2c!u2xcmB+`Z^zf+L z&E1V2x1ekvNY7If1R7IbtJ8}OM69T{i}>p8M_)EQ>ZVzkYD z5`MW}K>FOB^!ZOD*B6moPb0a0iLB@%=<|HLjO3bcZQG9I`r?FK|0BbGXYuyGcaLP& z=sF@wOV$G{Q-I06rSc@p-E=FXm-ZkWmFYUlwz=P0M&}iVuBBnQ(UF>SD>@l`}TazwIiU{bTDH^Qd}{ye&@JhmEb*J8gH4JZx;{w6@_hGWacg zmRzA!4VBMteZPjTUu(NF7yfzcv30#x+uiLEHny(Q`Ylm=F`)0PiO^nXF1w~ed)YPf zkDbujOM=? z;M(>OU|XDj`8eH8INeJ)%_f}gBb-{0Uu&?h0A6fg1-!(*1~|>W2^hzz7h$t9VYV*e zG#!*J;?yzX3Cjt`n=CE!;JwEqzjb(zDt!MR+a;B>03$^QR&yRCjS5Q`K4&}A{ zeLj-t^V?dMjE8dj%!<3erMUZhin|T%<8a)4q>8(jXU5%~D4KV1_k;-V7SN%cvE~l* z51hUoLo@&T@LDy~VwCQ3c*XfXV*ZAlhn(nr7W`>3Php-e7b4bp$LJoSCklN(KD=wR zqG&`7WHC4BC@6Z8&bspLsr=Sn3r4CnFVlEaAd55XyA*Tty{Rt(1D#|2wqJS`=^sb0 z+c~5ADvef^TC2aF7-z4HRl0v1zF)r&`nKjx8sQz9&-+*#&#>>%eE8P++_e4KwJ z#+lVMJx-TM@^!X*J?PT_vjN~>vmxnLU!_$OVeiv*hC!accUnm~p;MjB|OPa>n7; z1bZqjF@MULMpQv^&o(#Li8Y^D*E6!XgCM73bI&U5 z$guB{Q(No_-|5Z%>5+onerR})m`}*^e|}j!6TYg+bRe3>bQpeHa-jTLYZdU<_WL(w z$w;{U4zUmZ`RH9h-+XxIud;D;-idQf?MFE8#~CM`YpPDrZD~f9$v>a)aXKc(Syt9K z;r^&|Vw|6qRQ{)LZNti=K*}_X7Td%vt8Cg1$df*F7`Ba&Z~!y2O+;-^KQ`Gk<1{SlibRpt8?Y}W1pHj8UxHTp5x09O^W1^fbCR(X+{&}3aUYtFInG4nAu-2T$TYHU zbJXCD0DsKkm;3NM#ySak{7Xh2!_N=Np9w#{jB;`hmE=cT;Jsb~@0&94&bG-L7W~r& zBPv-tg~tyYCvd$iBYyDHBz&C8*4MH15_w-=u4t3Qd?uD-%N-@bGbVON{eoS>uGq3VS5R=}}g!5FY#NnHXowjQNQCXRkY2=ffwG zEKgl}d006&8_u?KhW#15QQKtOVf{Nb zdY$%Wth7(Ib5XH#igkO84x=aF{ZB$o_R*2Ik-BZ!G3kuk;dsZSYi%#W(8;yN@+@TH zbmg{V!48`!dQl&jtcG{YVxU`Mk*>A``3eavBiSDJ&t$-Y=yABvw&*N%V|US+N} z*O=+%TJxtqHRen6mHFCyW0srm%n?@J^BRpl$C|?cr`aTY@(VPI-Y)%9m zZ%ziBU`_*^Yp$+xyK&P2=h=fOPjD3F2|mItXnR?A7uu)x6ky^g@KO{(9X6=S9AFQz zvPbOW9D5^vFOPGvoPYg!Psh1F;NMistL8}<=VUtw8O9>#c8EB4VS;m&jk;6dsFFPu zc@g_4tM%UltCMZ-sxt}^!s#Qrf#!UsGA`qsv8fF2{;kAYbe``q3W>FSdMa{1sv!4c z0_9#>o=_vYc3e%EuI16Jv~B1ZXd9Be_K#Zn4dyFQ8#~pm>~d0(T<=G6T_2O{sa@D2 zwbiKCl{M;`!P=zXC)05l?+3a!)~4Ezkr8c*&d1z9*7vfQ_5HS{lDU3|icM=eA--%f zY&ou?xo!kI)npH)yxue#wJtX54&B2??G71fGVE_Ocl%RR%cGvHMm@|s>fN1q)U6W~ z7U}^G&7s>B5z^T!Bl($KqE|1C6{ngCbjT4;p+X?+v zozBDXp8a>2Ym+??I|WlMXD7Rpo!B}yYP(3DlCK|&JXIC!aQi?zTp7MQ2I8CKjo^Ds z!TKK+X#J(-p9(Vg$3V@ImTgI+5J`GDP?C}~s*E%1w30KGjk;6ds2jAY)@&CzYB+^U z`?(Hf`MHyV=URHyzGaP?oNN4?GuJ9^In?=5u2`Iae-AL*01h_W0@j<0VCx&r^Vo&! zVW(n;@I(6=VwTQ!Ev&k#?do`A#J$~;u2l3(P>8n7ZKbyKh}KaT1M3U>?Bj8YTGhn@G!i{bJwwFcgsw?o*9QJPOZpbi%mJKjLiW-(_vW?RVQ+W_&S1yoAw&}9V)TyYSa{v?t4Vf!v zK=S9Bv>wqyH118L#z`3xdXZm_v4v$DSdY` z2%OJ;!Bo`QB3)gZ&KB`q3#GC}d$;MRob$;aHEA#NEWy|CE6qk%dh_X=&AU5Kcn{!I z%lB!_p?qAQm?zw&Yj}Q_`5HoD&Z4yCTti0XEK2^U`?M)vIg64%YLc(<9ZbD<`8Pxp z9nGVFc{`XtP3>T2NlVC@Rol|?*Q{BihFgJUfmR?%LI0@QZ=@q{-h&8@yiX05meM{_ z=b`d_WcXaqz%Gi!!@6dJ>p?!JczAnM$4#|-i_+y}1>9{<#r@$KQ9PU+Rdzi2ts&X3 zl?uLcDifq9et{;W=Fzuz+FGu2Rwk6|NlM6`^<&6nx$_0{@zb3v(&r4^o^`q^Lp-HW zAe)w16;tI?ptJBX~1T)IWjp7b_>AxD)9rXQ}?p}0`#vEvv|OEme(Ss_wei5a1TEu zhopCy+a`y^b1g09dN;j%J1eWx?+fd26Sz7pKR5C$NyUpQH^Msw2Kxx5b_z;Ma#qcE zIg;#?;pYk47f6O*0-S4(u5yxmEMQ!cdr-ckXUTj=mL!K*6ZYMlAYgWrSi>5%h>_-p4b60uK?DX*8uM@Q*mzARfYDVy0ih$jpi-DX0rfrt{G&Vtr-Fsw>1}&t+}M6t?{q4-bLRX&3k}(E3GYpR$AH@ zm)6NW+gv+BbaMZ|QO{2B&aWLIqplP5x^Z5KsLo#^|8o!rH(t`pVzm9F~I zD@3lUEwwk(5J0UE-=^cGeBYL&mY+v@uIVhQ_Ne*!%v}?6m3XNwtAk48%j>wdtXtGt zTe{Ag_Ym^ytXs#Mv>ftW+0N(7Vfd)pr%gj9pvf$!`cU3o=WPB$SIudUpc>8XDQYmW zoWaFCIdgb*LL&TfSb9{>kA#kzoNM`Y3;!b9KM9_rE$bFSJm{-|9&}m^4k}b^xLw|`4l~coiX#RbNn(H z!mqai`IVH(yirTr8s0g~w>3i({1S^iwy?jtcHjzDs+A?TrSHt?LAfn`W6oq`!LrWs ztWy|wy})q=<1Y(-{qw*IEor&D(DLiRmLgl(*`Tbm$>qydX?w?O%GTODzifrrg4#e^ zaC1Vo{G*nhE3cA5=Xz6O)GP~h1T0E(>}-~<%J_~f&<}uf%`3=HG}u=G;}+;_%D25$ z(gOMC%XXu5zU@2O`{#S>N}Z>>F)?5Ns3E+q3*>FmT8S=oE9h^JK>hXO8$u=1hFQsU zE+-w`aDFgU7L!!+&ozWMV_V4^|ENsi(ku3tTIs(eqpA1yd*Hlbwdn^q!Po{@ecBFi zfaw5;mv8`^OeestO&7pd%;v~*y=Mm@-_&9^sh29#$5-xPUa&9Pm+aeiv5nuq#J4T| zhN=@zrRs#=Qgs5~>3IhzxQ^xfm%1YA>1C7mFICgY!O^s0Y%!gpYTA{6jWyi?YfVqU zKBf-vO4GZ6Pl)!xPj^DJe}g_DdO+Xg2~mH4D+lyYbCe#7|QSKnUU?!(;escyfkcx&n067+5W-g)#s zE=3Qz0RuKH~d;F=PcnPF|VzIc_gd8 zGr7w$WmT%8m>zttp|zCYS8(|rhd7>m`whQ3Jq~C4-CfGQeayz;rF4pQ^jVyyY%x8+ z-5c!_QGdQW10K)pPx7HW?{c|54wlm0W3d)2r8}b?pL2GfzVjf(zG_ro?gWX%=h^+q zd6IFEK)F+6tp>i$nemakG^!)}n%z&ly^HW=KGNQuS`mJxeaO1dn>?Gga~s>VGt1JI zG|uY>;Cw08w-S`{ zc^d`LdiNBqE2G0tgXtjob-v@PU34RbzT>u7(cQl5_NVpus+b&LGG^ka`U#`(w~oU?2s zuQzuE&erS>SZ96>*ktwsoNe|7%(9Vx!mjQ>dlBF*_Ah`7?8SiZ*lB=^?UjHZ+E>X& zX012VHeer&lNU?9kzmT+aU6yzF78Hifdl&i)CJ? z#pZQN?!4ms;QJaltHyWJZ-EzONd1+*0dQ~`{rxeZzjadmRVELA!kA(5 z5SM$MN7jDuBJ_v1!T_7hG{CGk8AANvCn-NDa-#KrN=*Mk|e`&s6 z2E6mu9zRL(LF~y@F?(`Fu05%Yf7bxlF#c6G&b7hg`009m09`ju(X}$XZ!8<{wB5Lw z@GiY}JSv5EcJ4#J8&Ep;5!bi0pK)g`#LvtGhSuB)n5Azae&(x`pAkNCPMB|@{Q@Tm zZnQdw<#Nsb9G2d<@$<1S_WHJtcKq654)MLdF8IwW<~EvP$X=g+oYH%WJkA{$CrqCz zi%X{j#eTwrw2it8c;?xtg{g{Se}DG`^mmW9zqHQGqW((j%x)>2@#8lq0KW!re_DpW zjLER<>xc}e^EXTUZU_c9iM5QN`GnF_e21_?@!TN`s3Z0H)&@ky(bgm&v=(Y`b*>YQ~-Vtc=1d3 z_e?;4^HTj)#`ouf`5uo`^tym6ONOJT`%DX>$D6t9kIHQ4!DZP_t$XQx z6s>zcKOEP+H0|CApxqHE+WC3AFrdF4 zI9dCq=g_|Cd9-hO0qvXKtM*M__w1XxdIh(4>UK_BjMVq&{n+EF->KB^Nz^ab(Orak zFsY;aBC~f_N5@rkbI`Y+2OkCSVAm86B(~zZ47oovUXS74mg-1VdGVSKU6Y|@Hl1(O zGV6;`SZ2dy;$I{apO8!}BbjJj9(QO;Cj53XWL@+ra49cV!=Y2FEd~rqGb})YY(!vphpX}x4*LY>&m$pTpfo6GrVPZ;dMGrVaNz%{FGoOAO zNAY~czOx=&gNk+kox9~$YJGu9EvG@1$<|lFvQ^nQ-vo~n=Rs0N91rqkMDrltAKx_6 zpJYzfIidA>aT#VA;a7bwrv4F*#*B#OKB9t@OKirSl15D_U0z zeQZ!HSQ%|Q2Gdq#a9m6V*UFW_%JAzPj9+ErbPXOybSf=l-2!B6vy_ZgCL@0gl982S zHMQ5mXJy?GU#_=WtD#*~e_I*tdj!)yE9U!};^kiG11CiQ>r7w3Cesgawiy6;pLq%O ze>3cBfD3Is?pIr4m!jHbpj`%di~Tp?0{bc8JN7?-i|rSHAKHy5=39Gcaj#h7b@u(~ zJNC<`V6h&*G8zuVJj3EiKMk3BOtHb}&zhltO=cCqto%X<4L3>A(62wMVw^l1eRfKJ z#4fG2n%u)YVl{X6HR~-hx9XA?i`Zl>jBoAHCE%3 zMjPO#t1{mhKi!IE6h`EGfHqvMJzh_6?BvpKCH>|P^jWq@;MQ?*)HE3rRmKgg^2 z8)>zBGp%-S1Dt3M>*!7cwEzyZyb`~4NPDxH+1zYlwlwE->|pxX{&uKc)m~}+y>nko z@ds&)hiMG%w>@lU&)l;{VxL3e{mns@j%A<95t_b9oOnBs6Y*KUhIv`@24Jn>>c9mw z-*;)givcH^wUM9bX{RHPFwk$A+%ercs%E|IAF{78vWBo+8=J(@RuNIOnFJWz6 zs5E!F702rujBL%dfVHMHH~xjQf%)9%8cA(wjok`ZcWz_7T@^VO*&i8NZ+O`#%)G3B*s1J3SM3H!nXF2wF z`&QZCjxl`8bfRB~MEib%)9Q0pMG?5kOea z2eqQ-Jh|ft^$?P{DS%DpaKNxN!6BKkMcl6r$DJt+<^_Ctt6kcwJyms1M%ML%UR_gB zgS#Qf#c^TOIINtcY>wAoq=@3Ip-#ivel_rUP`naGm7`lh74ZVc z7qs!%0BsDzXKDrbEFUJZ|FU8EF=iM(C$$2fJRN$7Y&UDtZ_vLrrvirQ(6O016gHRN zwqh=M8sJ;8ejg;G;u}vO-*{r6ZW;!n+wHeFt2?B(-|7k%z9lYvAIOC;N&RyxBvtUa zg7CR25T86dw>EDsAvKJ`ES$QLFgH}!EG4d=rvO9x%3yJL7qpgnY!f5`N zR?s{yMS4xV3r_sIHSrtW!`8&5vm}?a0yl|7`{HKNTC*zPc=J3_)nz3Io0kCV&2bco z?ho2dw?Cywbg#Z0OkX?5*4yFsD%)Xbb#w<2ui@kN@NekDnnwX^BaY3dzMrJNp9P#~ zo+krJzPdBIX#8el1;)zyVoSC-N0xH@|e!ruBk%)#&K0*1_ZLnS*XnEJ@2PKo6tfXbKW3zt-fGwtxxt(J$?b*4z2^IsF_9#0pgOP=;-v>IdX z#?FL$<7Q@^WNG>SPnR*9fSg%z|3h}R@5Pv7&Bf78BDzvu`>1B@EfvSi!+qTZ?(2JS z7ajNpCvV1>Z+rL5$n!a@In&4cHhE+BNsL{WGxk_iRF5%h*M^KOJ6C*mr#;qGSD5q( z9(`i2cnb~RmQ;)E%NNBVZOeY zQpua@Tp#|*tI~ZXZxVBT`74M@_m#Zu%k|~2&MDnj@}@7>m%qX$*_Y@;70G1#Aeod~ zwAqg6jGZr6$2YAWq_T7&_o}uAw@TWqLo`?~hz2rFUux4Ys7?8F;}jwL@Z5+-vo?j$mo9(Qg%&!;CuQq6YV&Bg| zt;ZO1oe_e>pEIcqKz{i=+242^eG(0DRWrWH$ya7<{GCnK^;qHlh^x0_q@@D02Cj`?Gt z;hKiuP+x{9=rX$vqVxBx+?jjJ0Dd80llm&$G`i5vM?ChRdB{9mkil|xf`t~}lYcj5 z$*s;<-d@;!zO$dEy{-s#dJ?B2OHGoFq4F|{bZtx!&N9!Bx=E(&U)@~%m3~?93eq8W z6PvVIUYOf=xjXA&JbqH~_=OA}_k}Gu$u7YjMUuyH`my#W>6fSXGOtexv{;r)i>x(e zS47kUOgF&6#?^n+n}ZNn%Uj3W(wefv&<=>ECKF9tOnikYcnlyu4h-UB`96X7y|hor z+VOfRimqkHOZL}7d^V5pGHhz z;*x%#e0uPUa~jW(m*w(edbbABYoQJ~F?~1Ud5<8T$7O!MOh2_vf4Vt^~l%tMw@J>#P*MK6+p1zW^%&r>~OT|`EG7_&AGD0t}#<%@S+*Qm+NagIh$fYzJ zK137$@NO|bRe1CLtd}E3ecImT!CRz&&w6czd0k~8s6eV{M^&*W!{JUG|@cXgd|qmM%%S&;c7KzZNv@M+(kMyyO531baK{X zyosNx6+CnjG(-yj1q$K4C6dBDam!hQU8H33V-HWu8Q~KeK}-8LY6O<^gCQ05 zF=;Pngk@?Dv(R^geNT;We;dr^K9V^UTIFUUTP}bLR4VwypFW< zK@W~$bmkGXthgKT@UkZQo^DU35x((^AX*!4x2`M0ZiP_hE8^aHIC&xVmhrxg@Ma0z zF(rXw7qs_cZ+IK1oAzEsZ1n>#LlGTD3!yW(W3 zbJe#v6<3s|@A1FZNs}2_ve%5KnyEj6NX|6gla8WhQcwO^ zs&r2}2liL$$)5=;-ILBt-A+CE^Ha&5Bw|gkzK%gOT{&=diU1Hj^ zUHVn0qFq{&!h2K-?=Z@+#nygnAo(q}e19Y@p6;Q&nEN@x_0Jv-ifo5R%AKJ@=}396LHfll@jhMgtu^Olc%SYgwfE_T z|FzEhXsh%QGRWe6o>m-MHN_#BwT?7OYjiXE%hTvAZP0N4nLcZsniJ>F9XYRqJ_mYa{d>n692ApQL;9mtEbE%+_x5U!*>!My#Mjuc-z z-tmdA$;I~2*IL8l4@r$b$UDAR6K$FKmG^p*$zgyK&08I~cGa=9kvD z`r$=+lJWPW`RyA#zjFC^JN5t9;Qp^E+%J1=tTsThr*fi3JkLbR$xkOM$Z^9`#6rb; zpe6PwW;?6t{43kk;_GGH5BKm((6YsJ#`@?+>yJF*{ekjTV znY4X9%)@VOUxnYR5kE%c@*~S$usz;H`KP!&7Vo5AN7Me{ZzQj~ki70j@;V;bx8?R! z!hgTcNqtBP0x6(?Y_tWajmV`_+qW?OB*eCzRq@3Fb~X7TZGj5)@1SGH(M6nhl! zSaaUl*`loWF4m5>msmU9Ug*21Aa_ej%AI^at?>P2LEnE@`2L5W@4FP%oGX>A<&rF| zK7G!1=Q>)g-vl_>98DBC7I1>;MRdIz9&oztgB9@FwlClzcGKv*`H_$uw=Nl-Nn595 zaoUQGrD>bR8|P=@?ZwZ8wRd(j-d^lzx_y>iXW2d;y;w69aH6R#Dcjd8+0L4ei__!y zNSvO=C#$`S)8p+WPEWVbn$NMMt0&QXena!Ar}-RAy83;}?;f8s9~bw>@sYSc44+L2 zAC3S{C9DqW==|oso;YCh9DH~kq;0y;m!rlko6d2-vSH=h z$Z@ud;>Mc=6ve$wc=@x=alC|{uNLU}dP#c9_iq-ye>>>=GYa3I74-dC1z&nbNna}X za2&gPnexZ2lJZyFu}#Z^jJFN>+6lS7R=&TSzP~j0`z(25?l#c+DOq(=tcr>ARpegB z!_LP~Gg`03$EWpLq4qpO5F7-I-_?^<>99oUhU2irr3+D{^oh$-(qoIgszqFX+L!L3;4V z!uJ=J{634ncab0Y6M2w}04JJGI4Q8)PGLXNJsE@Eqx^{Adkf8PM)3UDEfcf0Hz00)~IzL=|r0&Z1 zXA-`@%f(l|KZm|QJNWwx==<}6zyCk_{tvm|iw<#?V;}MY{%V`F4#|9OEzoObNqWh6 zTIbw)HSP;#y_&Y&S^Peed?9PwZRpFIQIvbz#iMhdR~K_{V#}_A4spf67{eL3)ybCm ztD!nT+TCq~qY>@N3G>nsrLN8UxvI_k&Ql>EbG?J+bQfS3a}QuQGYhagZrikGnf(}W zseKG{9cSmjclIzn&5MKEna|AU<_q&R{ji)Af5cck0P zbh#kx2unE75+ZnpBaF?XjxkJ{^pgvhXZBrih%LsbLW#Dc{Pghx%+4En0E$`re=`U z3!kca61_}|-H9moAI^_@X$BACuSRfXB5ShlMW4-)b2z#emoxBj^RobIW=ru?IGdAa z1H$a2u87-7Rm5HAv6I>OoECtOpC8Y9`SEm$AKByoJAjfhewvdn(D+%Ld|r*uoD|FI ziyO;}7zHP-t1MlNlfJi8WK`qCGAcN+@6y)(CCsdgd55h1;0$YTP$k2@YX{_8;=U_Q zr`No6dL@WXn>DzX0Ny|^*1QGSWEKF{t(`(%R@hPvo^IdWKmo4Kb56;*5_}F|(Ew9o%KDJ0?n)~m0x&Lm8 z`+^61@30sz?m-0)_WU|x{CQ>+P|RKFSTU;?&b^Mw?4_82)xC(El#V#{d6TD6btN^L z4|(Jy3pZXFKlNA&cs*W&aLzOdx7%yG5A@zjt1yoTmW zycfN0%)`dti{25)i)wW*VOqd7{QGxGTFbw9v_L4$k@EdmNw=81(<9jyOZ!mXkNgmv z&t7Z2A6YC{#mH+dp|tLWJu%z8EKjWM9(!V$jb63n*{itRWb4r$0k&Ue@BwA`exQ{H z=lMs$zou(w;}(WxW$xSvS;yhz$~&`_8pS%`?6bZ9ndmNvh_KP zl~fHrpQqU_Ro|V(57yu%nUpN9W1ZHOrsOdJv&tHub-!1pJj6Xi>G8V-*mcnb)@+W0 z@~XMxnw`zjuLH&o|R*5_oH6kqF(&I zQcJktlD53O-pI1Ndc6@}r!!qx&X~m zvh+IdB9Ar5!Yl72bR4g2n%o$`!T*WYC-MrJLNm)k~J^3nOu#z63t87Os>Z48O`hb1g|Bg=DMWb z_{!BI^}$b9$Nx-SCuQCFlvE3Lf_Yz5>+oq_9X>s!!}0k$?Muu0`M3qm-TyjtM0Onw zYY10zh1PIo(Jn-1>mu5n>XC`xDVbn7=ueWdGD*fDl8JRmCU%a=#Cl35gr-XXqj{DPXa9dH(Qy!j=f#g-B`V`uAujvI!chj`pDsH6{OSqoh;rfE=b zi?)y{u{u#=O`^eQqQOXf(_mLZ)k@J8HrgT$Bwid(@#5Ac$*fXY7o_@ z$c_FjnfJ4CE$KR_>}obWNfudle%90Z0In!)ie%^L9;IX_bah*#o6NNf&2^=cbB)U> zYhr#Lu{c(i-mo6>Y3St?8L%F{i}Q%1qSMf8MRR{F5nGG@OY>ZFdmQn9XX5#JF}eSh z;e8uv_J1(T1%FONW+={>U_nT&x?> zW|M?m2w&@nul-B%Rp!oKZ++0K#cYoIX`OGCGp>2QPt%Rh$Y{Ea%%oeEJmqJUi}ED= z*R_%zhPs$%U+B^RvmfAKa{yqy8K`dJ*%>jHyEjt5bR)QM{Lqdf2VMzetpPfu;)g8$ zHBoHGC-ZxgUT@Xe`IxR0@AAp~4I}=I?i|-^9RrOw8{;b%18stz5(DwO>8?W0@yVS< zlR2;rW&O<0D;Mc0a=Of%?6Jd~DZPUw0}W zn>9CH^TuBmk+~Jmau(;7#q0bWev#K%^Vx>5-xjdhY!5iW>xK5n@f6`f+$F=+|n_uj$U^rY$p-lj*sDX zP!8XAp_aP=Hk&;FCzw3}aRU)zzXm%h78k7Bu{h5xzD28I+&-MX7ofN{PV-H#Q(R6g zJJ-N@Fr8}<9o6=h&j4zBJ1*1SX7TA9%(mI^X@@%EQx&|+47(Zfx1*xd4ih6j_3Res zlgQw@z&}5yw|*+8mxT|<17}i2aR5i5kB{>?Z}i&J0f_y{7OFFoNLi| zi!5ueu3w$<=jMvCoW)nZ!-ToppKOO-gY!)$QzE|3!3{lHSK~ObZs^ym{CVg!POBrE zFb3;B_hQ=;?0Suk^2l5}awKG9f;ovY>HPZo;lRo58B4A3Cy0fr?SBflnV0VGXitB0 zQvHeSYI~ISg2$5V9z`+C{V~}+IwOW*9=?yfk0|zV ziehGe=U~L~W**VW$*;TPk57!b*-556Z#=h0mLAVfTUU{pP1~nq zw2foTdBHTsgEBCVw`4DsZaF2lCFgU}Er;i}xv0FRJD@`tBl{6MS z{vQaJ{{x(DR_AYTEMo*}h*33(RNzp1Vh&1!%NHh0J*|O5>(7augxb$*vEG
0y`;Qvx`AUeo??Nz+8F&>e-__dc;6Tj9BKM}8;OKZ;!u`!oLV-8NuJ&)#Y zA1F<8p_tC;mcB{)Pl)l7+1zq$Fk86|U|lcFu)#t(jww2z2E;`K^6F7dzxau4R}JFl z)=e?W4UQ;xd_=jU3wB3(V7t#*&neg&X)&LX-S@AL#O}v?;ML4VSP`|DFR2IrY9`r3 zn*TFmvv@R`#YvI%Jiags;biHRa^4zQdI^sw&&Y@;r5C+g*c`iS$cHvKZ+r{pWXUz3kW^dcYUVqGMp38`;UlUdRYaXF$mQ~ZI-h5Uq`!t+zInATL#&|R^ zvQPhvByHmYkEDlm#O%%*W=D0;$D%r+Y-wMex8o{!u*7p->vqfmH{uXw{X1x-D67w1 z-bEbV9=kyA+8qEF*&6_7+Uy%V;y#=6t7)G-t}LH@PmCuoMtZYb%5DlR(p;St>tRIH z!zn3iAIF|o)M@P3FAMuQv9ZTSV=s-y{$)X;#9p$earRPs8n%~wraj-&%#DrN5J~aK zXw_Pba{Lr~Al5^Dg!Ky%%{NP7%`xgNkhxp!!%>X-U}lW!AM=iII&lg z)sL_4Z8ue``X+9F)mgl(etdQ6(=a!wQ(xRU-cKGa-1;np7QR}ZU#eQ36BD%>S#$8! z4t&;1<{P_*Um}Qt!4G&+w&iUb*0p-^h@mZXZ7RT zKYmW_AFt=xH`Y;}Z+~-pwZAzsv9Fnhk8dB4`O14n>v{J7G(Nt)C#Dbgv$|)`N%!Nc zn|e>xO}!eRbG|(j<~#41%uVc-WYLH5N!L@d4d8mpn#8>Fbk1ehLUb;~Zu~4!Co8)0 zY-A&!_Si`IZjET=H>zK@PRVyKMEyOV)88x6cQ1Lq%cG6USte;C`xtyye>KV)=AATl ze#_nLnAJA#w126#dG{5RYMXa1PTC61--u}WnunHI^2&OcK8wI|&u0*Lg@a zD$2%T#dsI8r}vqz_E9#OrNy%(<5DL zsO@%h!f(ZK2)hwMaEP}JyH88nX5sHUqxA{$*>Xnfql7&aJ{=Y5_Awsamih%b<6G+e z&^*0$yA(;i&1>UUYRNW!8l=x$Fb(+3#RUnO&g#c^CgnPcJ@`z@4+(pkHwU*9m7GIf z8@CsfY$H5-FVd}dJ-Q|H(sB5m$koh^-VNp2y>DojdpY1d`xQmLydy8WgK-Rb4Sg?t z$NOtj=$x;^k*hF^??}83S#z1fH+yC6aKu;WdPnOHy4h2DclCO1Z_@4E75jE)3|-$( zW%ezrARR4CS zm_^GOik4jS@f(u;Q@pYt*2}5X%W2+T%A>)2MFVNcxA!c?yt|lx19mh20qkx*$GqKL zo3FxpkF(2c@ovg^OWo#6>P1>!i*<-=`BLGIpDcaX(q9LCk4t}Ei$SRtaoyK@(pvY2 zkBsYnyp`TX)U8G)T4iCU?bq;>{mN@GGSwnXPR=7aIo~TMS>tNTkISK>&T?vste>Dr z99zy0WZS*wT1T0P>mR(aTNl)^U8GJOrnj9aE;y^`OqFGpLk>j#is|1QWTr2XN4 zh)bV&xfG`!(=FZ0=hVv=-d^%(@k5Fh$@9{F4Y#X1JCW4zUlr~&%;KEZ2&duB=N3JB zUJIw;@fM=1T(Q9!$Yl1?pL^tchPjHY9cI(bbO7vb_@3c@;O{tFvpUcnr&q!Vct0Ajlj#fC+w=$A)bxe~yPC+`qFsgbZcbVQ zRz}M%hVLwm>p}6R(zu1*LpF9d`nR;#6qVrA4Hg6 zj7o*2Hja5uNI2iI8ix6$g!z?T%=09E{gnLXS>qwVJ?@#3HymV*scowBhH(oiW3pW7 zb9VI@t;P%o9Ao(2jkB?z|G6Cod2u&x$SoYgAzdAjUl$>*bVWpdErhgUY0$NnS{mvS z(hzT@>m7BgL7rB+x*)%59%G}#7;#$q*0aAQ zJ#_XZdnKBu6HX7~IuXZK$Fmw+j%U+0C%sY}1x`p*xR9d4F`!d?wePoBW6`>c$+B4A z74Ak2qtpdNsSCZ7iub~GBrFxYR$f3Bdo%0K=4}p`O>gm3X&<*X%_JESzEp?^s*fw5gIX0hU}v|ZG#*e?27X?vktvArm^^3QJrHNX0y zZhjl)%um}7Jto_a;+S#H_#%*ViNAmJ@>k?JEb@9@S z>zOFC^;~9VOTKzL`s$sMUoDKjT9o;f;HzcOSDWXr$>TFpysN`!t~SAJC!4*I|F5?0 zb<$Jq5ZZ&@zh8S;-aD~(Q@q*M*ZOE`eJ-_Lgc{bdEMK|>)zq@x-$OibO>_9Eqfj+r*AT2YSlFVfJfmLBaotV>+^Y>?cP(Zm-%Gg9J4GsktgxTw!rLuvpwMR zW}DU9(cWK^nXq~XwJRv!?nvM6RPtNFNmEegt@#`yXRJf=LOWwLYjy!_GG}yl=ehU9 z+T%TYWaoI*OF82vqkg{~f1r!IFOT;y2E}Tdgj;(6v+?F0ME3jIW$-RX+1(%)9igws z;0)IF<_2@4xyjsIsHF~}%MOY2eQ^t_*BBEqx~wi_J+UXa=vMZl3unNXyOZ$k{azl+ zd|3Bcenu+!arqXP$93_j%eUlx?=mg=dy%1i35)#z{qmOAw~HKg-+A9Vzg^Dv&SUHE zMYeo;c8#KwoPbU0*#R`~gDRT0TcvBfWZqNI>v;2XoWPo7$H6uoWe>@eLE*vSgv*g7 zaglEs>f_lL(D zZ;m55*b}>w)2-tb*C+A{PUd_P&EPjB=bYEKlV{y`-uF(P%lY2vdO6=aT`%W*ClBR( z@ASQ#?;Wr7_d@$qiT1xONqhPBcl7Od=0tF6MXQZS?9vw;5NWjgJ0xn~h>^gbpmJ=MXh~`Y&`y>)m;12hBj$>q5IL z;0${N;1bLJf0KG^j=508BWNZxi`ejscHkqFywrMauy11(S zrC4jYdbSUGx!rVk(qL@iJSo%aQ|yE{nLiUQe<4~ONz^@#D1AKOLi-DfmY7z;(@Utu z<$$-CjZkyF93JCRM0~|)MR;;6YA~D48@Ll_thtg}T@Bb|rUPzcp1_)~n|%r+bhJGY z``lq&ZRza=j%vDb)oEHD+I4XplxJgCahj&*cpHeZ4d10EwNnH9VSgquZq$nRAO#$#VC(*3yqi_i>pV&##%pf zEX@(ki@(x{PZCGIAdbw!S?nZ77}IOP)h2U0wYZb0lGaeJlg^?k$KrQW>wBs7$;6T0 z5J#>ij&O|5twoE{>wj$-=Z~y{q)jN?^bywT`9v$xCbq)tm9;f+HqOVt1tcr8XdhmF_FUF@W}V9#4?rfl8J6R$Lj3=C>h~Xjx0t`+%u8C|!>Ijqg4#j>o2 z`sl}c&NqO@#6tU1z$MY`a9OSS z)^MK=GPSsNH>)+@a`rNf{VI(;5ILP0b~V6-_6Wcw(T!(Wt+`VEb!z=4wNC3l*UNM3 zJgu5iLaX>b)VFD@cWA7%RXjpzmH4QI)M63fE#?xOa`Ver9H~TVK_3f1n z@sGJojX63&0clm*9=}pj*FT`h<5L>tGr-v<&DE)jt1@PqI$tPE_r%8B_mt$k8fMXk3aDSMk*AD7YE=jYl} z>&9%KCBZ)e78R@!}@CJ$=`ZOn2=XI@6tn2fvW@ zF!~gp-;EQr(`_Hza^!H&lfQmz6y-0zde zD*Epn(O>2;7=N>77-09XeTs^pFR+}k1Wu=Ax3u@-=~*T zlwOL3-UD`Xyty7(PszN;GwyLbH62z5o{eTrK#{{e6Lj$5v5~?<`cLcN(_Z+lr8>hRLg$;pAquCfxWMQ8`Sy*57FYB>Qi5i}|C0Mp}womhwc#xtaRT zeEhT(HfT$t_g0GDzli89*?Y!m4a8qHQ9f(}zOFXg0B&uzQ!N+bHJ4shao#d@8Nc_v z_{Hg^v#8n*j|;HFbG>8u@!A1%$d>=CHe5UO3$)3OA4DIgkUjhdXd=5nrR*WoiTnPg zw{O8GZF}CuyhCh{mUB&8mUHLhM30&8OK~cGe8hK_MVJ3{wQ%k|Jmn~d*KO--waXVm&Z`r94(lzOvk&v<`gcMnAC8gnpUce6hti?r3{nd-gsL-BRT zs4`df&ILbS>uCIRHc#jA1ivHDTfI3fF<-%Nm(`p_J__GVFgxQl-Qo+#G9u@7^@zvd zYuu(u6ggT^L}ZEgn>6os#7e)`ypO#9t@eFz?Erg7Av)chZg1Waa7^@OWrsd|H}jYH z>Ec+K$q6)*;}SCw?(049!*Pn*-R^uMqB>WZQq*M~KP^>jG4XDVMksSKMyoY%qAF#g zwN}*3s#hO=`Q0dKLawYnEorQAW+OSJxEmmGpBh^^+yt<@Iwt z_48>4J~Gmc-jRd?EXnKVNV4>IGxcXO=q~-GC3q&m=2)^i0pn`AfFg!tZ(LCEE_?_2q23-}>uOo$m?za-+hRA`R(zKa??V z;q~9~H)Popu}0oZoX2DQ;-j)`@S0{XiaO$1DEXRYby$vuWnrOX88>&9Bhj67RBJFl z$;<1EytGKing5^`r&H9|Q$>AQ*l3zgJOzk5_-m?gie+9QzU0#Zd?xW3`tCXUZi_1ZPH3;~@zq0J)ZRj0 z{|x&#-`PJRo~kaq;G6#TMf$cMefu1u-Ri>ld@BUs2k|m}^(u{jY=oys-0N#p;moEr zZ^H6)qH~+Q3#&wy-7|?Ezr(q6M~TAy$WittjnmsS+F-)zAk3%~{_oJYJlCyrzFnxk zU6ezYMe5s2a=u-nzU@Oa^z-He_3aip_#GN+6-RklUefKSWcWB}}E!*GIcVSJqF(Mz4J*cx?Vx7s^#BPQo6grsgWJgCPys@d?# zxNh`S55Ng9oXk_93EQfNNjLdc+Xqv&iqDDi{W`s5 zTsU0^&?v0WBS=;SU*_R(WaAo4k%w{Hs^>nCdKygl9u&=8Xr$$ID1EmIeRn`4e}em} z(Y!{edHH#=8ui4ucg@l5M*6mn_;(7;Q^s5)8go?8m}97)EvTP+A;G0=dD>4`kft?L;GzN-m?gAf4|$SZ(UtODW2}A zzTKZ>PV}V%WoUW*P=nhWYLUN@R~_UV?R$5ko+Ja6^~KJ)U+j|k#cud*joAxujA73G z8obiyX*3>t$NCTs>Q%}<_@blHkz*FNlc}Ezu#R&XHTlB%zdOybfOna{bh73+yFYMo z865dS<8mPNu~niE{l&rb#V<>IaVUKubd~uGK_%UN<}m!tn!TyIcnGkWX*WcK`e7jk zqowL4sSbFn->8mnBxem zmSKMCoj`q@SAsSt(idAtUkGg&+u>zkdvXlhswlENWz7zdddYsqdtcwvyL_edlc&*4 zxf1(G=-3?v{%EN@9baWjrH(!hLq(&DKAb*|&6K$_XfEex(qyCuYvGSxQFGRM0~)Eh zu=>#RI!n!KE;Qnff|lrh22owf2dJHQ*+Cge>%i{`icjvJkH2>@kD(%Joc#h;cd4zyx62AxYn(15oDM4?dw--aPAT!lpXiGdN_=q< zeQ|DyFD|Apgf>~!n?_&knCRm&{I6>GHMMV|FSd!k5U#NVOv#Y|pCvrVYvX3nXr*X+ zOYDm{KI3xmVXW&sUkL|!XXti}(_}sYrU%%+k{?+sQ$y|~d?u8j;N3BdWfV>0dt+b7 zoU}gA#uwJGow^$F$Q_0F?tc8G$=rv?Xia?KZYGuy(*AH>8jyBc#Depgks7!u}Ap$lHz_ZigpH#phQWH+Y1 z+edxBkG9vEgP<#&sy;;9>(IN5`%nDsX7e%N46_t)rkR58x>QNuC!!j>+58)SsWppN zvSz-WkG`KN*l#^{Cz{uh(YzS%snGr!^B=UYHlG8|G2O9l?o*f-^LNJ>e`U0 z8iWq~{i?C=BC!&%;cc%`2#JX|nBO^shl%AN@7uJK?*V6ZG$b-&LEHX!P!Y&E|N} zZ>0kLdeUE5E_x^MVy^X}R?{%^`SuawozRQdz8lB%K=`iXt~&J47*+Mk-91dG9mwHqW~~(wKT)o{bzUih2>B z60+{*oZocGDcYrW{*6SvcUEnfL)I-9uR$UYufgK5(T3`8DEWxw5(RkWX^h?Z?H8;6 z3bF0~(}qRZPxs${+o2fo5OH6&gSF0;kjDh_8YD{d8Y~_~luebrtc;hJ@d`42T*j@k zRbt!!r)*VZKIR(gz6Mq!&O3ZL7b08dtn&WBehyKC*C?VEuYTei{eH)_Zr5SkN>Pv3 zAn_Nk!QzZjANO^of!z1kWokq`L}Zm^vd-T`9@CW9Akm!HU~$pt%OP&pg@Li0YfE3b zwpinKa%|^J8O|~B#ZKa_Y~xrZ+PSWG?&WJK&-Lr_wI&`SemBb3Rvy!y*C5f6*I;qw zm-X)~_x*MLU5ST?77_WY@ub$ESUi(%F4i-W0&D@)Z@g=L8%>?8djWM9a5lDk{Z!9& zCufJ~$*Z48WAtBdwyhL>c?}Z%c?}k~jP{Mf6)sSyRi~PdbG^wCvA(MD>fU|>WnRCo z-#^4d#3ZBrhR9=v@fsvX@ER zxXj<0PgB_T|CvwIWIoopRoQ09ZU6EbBxds(EFS-|>~kYI-o5SS8*$b5>Myryomxn| zqG&DGDQj$xa~u0Ld5Ut(_E3&}Yh6|Mfx*UopcQ*2*ZOiCrPq2ZrtW7`GO~2cI;Z=1 z^rEE$Y=syP<6ZZjiz#PUv6RZ$V#{T0rHmcs?+?zHm2U#Re-|KviP=Ol zhfNH%sdpe&+#7+EpZ2bCl3gUy_&tJunGH?b|E zt*qnJoLBF+Tk$(i&d*?4F_mXkBTwsk8A5LS9WuN6Oo4vB>)!S$+}hsCQ=O>*?cK_@ zi+de!k;hesJ>+TK>+W~m2dOq!ZFZ17Vz|D&Vdd$N$EBfhv&tJ8@d)dQ{ zva7avB)2``HAp<;HCV)yZD)-MHIH5psp$Glgf({Gur;T6CC9GwUeDV8L2iHN+HTcD zz32EuG*A@aoy9R*7S^d#u6g1m-y=Vc9oZVE+Niy3qZP7^!i+X@Uju{W8rYh+UIV{y z)~@0kuiZpr$FJA9RBm(4Dz|(8JeOmCs64mT{y)g||I_{=$A8C;``EV=4-pxSvG2Y{ zdJ(tAj@3U=+2$?OoQ;;leDA3~d#kQhG1#vnV^ZByt8uB?J6W8_+PkaUb*u$-K4u$6 zo%MTr^|^JGcPyFrdE+|h-XD_~Q31AbvOlagbzk3-N7Cl*@zic{tKO>YH;l1j#nd(S zzHyC>?7Zq~)|GiR)HPRQ(U;yL4mFA@e0dEN+vyMeo?1Nv8bOQv@9S_pIR+ORV^Ceg z>qdGFcdu_!xB6P;R^^H(%auTuYap!}%XLqdh;1u{Kd(U|DX+nzSi~Br`r5reCd#s{ zGx|e~vq#*AXO8$5&QNCPYFE3smoKGJKKC^?IcIi=l)U@~ zzSGyp)Ev`Qq~*1ncq7dD>0Wj_xdzzw8f91W^OJnWHBLTfx<`B<>xwE{dUE~$%+CP! z^IY3i-s;(0E17pRnYVQ>oJk&&h1VdFjn`nYHR66#)q9%TJi1SfkJ+kmyk7HsJO{Z(6}fl~6dxn{T;=V)CcctuVqW<^z?uhY?asrIdhNFQ!+qV!#~vZ#y|M1N zx9K!l@3#?cs?M$QE+F%+@9|9`_q+?qyyqKvyRT_Qh+Au#RW|o{u}I?TzHnSN=RJ)2 z3!D0FS*zZvO=Cv7Hu%c(?mu=npswJz(Fd5Saoub_mgoiqp#Gu(%e{Atoo?74wP+eeJ;_AsqfZX->SF9W@(OCDa!I1B+By| zESk$T!92FY|HxN;U(@=grj@U{U#i4$4pD_yKaq>N+;QE1s`6I*ANi{9qFdiWH}m~N z=37JNTOyKtYyFRW)pxtCZ*`mXtn)vPQ{Q{DzVT)rSMPrur@lXIeRJ6CYv;dh7AWfS z{k2@S0!Ck}_W8>rU$s^>VC(;9t!l)6|7)#E&FIf%ODE53mP@T=>0~^;5pP1CnMG4x z=ZfaM?ic5YFLzx7)cspaB7x!$on>Ns`PWYVPLRg= z7q2UvA*$<1{Ydun7NdF1BMuVz=(;DK!C!#9#aJRfqAIKCYgc5vJZ7SdBq8$56;bC| z#MykrT;n{G+1n<*a%B&)ylpWEA%pDh zcb2L?vp6P?IKwfzK1*a9EaSD5SU}mlU2PC?=f(OQCJLs$Ly75TS26P_`)#>U1d`x2qF?9f;dK( zU=`cE#afx$a3b+Nj#)2{F-zT5_UT3z$U zzdTxHP-8uenCIM8^ROf><|Eosem&n+67HMo?I>-p<{w>To+ zMMj}E(d+>^&HI{6vK(1?^_>0DxQezF*@?6iM{PDy!qrAoAJJ>(A zs~&2tDo4a>No(f(#EoMo@Ed@ez3_lU`}msB1~2f^ZPgqfXVMHIWeUfHUh=Lq*!khF5@* zO04c6vP7)E*4EDK8C7(p9^PCHtrk>$*qvBrk(ScxHLfSy+KAq~?i77_)%WD;nEvvZ zgT^rf+2$<<^IAbXrG|d4k*bavDvycmj%#=%5jC?%5~)EM+-J7RZL~bbPnN)1aZ+&B zX!fxlD~{^(@$8>RG+=*yO;7-5j_(Y6KNxs z^14$j=XDpeS>3IvySmgK*J;&OE7{XpQ>?L~=I%PK;65TbwbOTCYLo_Z48NB_#B*e? zmJxGgKbCg_Yl-l8H;&Qw#v6$6ucyd(3Ns@2-ps2tx2(FTm9xLc%Bjk=HIlQdNJu0R z)$coqc&=({t=~n&N2H@%O*ors$vqL*!shgcdS9>B%YE$Y@K`m~nGeV_XENH#{qF-I z#{H!_=8!x_wW4+ABW`C_Wl{ScbKBSIKUK5iMEJ`SXV!CFMNY~{WV7?MTf}Pdvuq3H z-y~4iDr@U`x%C=%y6$&u?qhsAXO88%;$39_sN%B6s-)@=MlAAsm}^9Q#Bb!J?_qAR zE%I4;i-@SgvH&di8*(s?qGvBGxOb70b%Ikn$0CA=cIka%&}zdlS`n zFUZ?-ysA5pS44b7KI-6k2l9qUh{#Sv&sR0Z-^pY06VdlGs!u-1W6YVXBAO07q>I>zUh$3&OMs4;J~vl`jG zJ=PNSR4FF=dp=cCVc{vpQizDNAKh1(ghV`78Fl8w@|df}9hf>#5*aCCoTqhM=lD%V#B=)^b*Bye&DWh9X*1DCMZIRFHtVG&~?7Z$2 zIeFFhD7oE^F|UWJ{&|V}i1xDnR=+!cLq4bI=rO<42+Gg?A)*HR>$`R5Z?W@BWghz% z{Nrpe6Q$@F&tonceR#)zjABiTQ}0lufU@DyQm^ zo>{+Y!aa?X69>rT;*S3Mup>eYd5 zo~xJpCm!VvU|&Y>O)Tc#NLx)ZAO- zv2}KT8)>b z>`mVKs$lnZw#-B#o~!j_wne^Ps{629^1X)oySO!?-6Q5-5>z`)l_j_;+sQgcMW)M0 zw1^f|_nDR)~wVivX3V|^BT2a0*TdVBnZyN?OXar3vRwN2`qaC&2`^xRm@w#Zvwm20icZH`ecb=Q2$;(II{v9fg+cU*mtZyY;@7f-wcK(7>X8wL*jT}|0Q{<9act=v- zGcpp{JEU`wMAYcHK*V$H`62JLE)nsZyXwkvMIIAO3G_X?8a-EKWEBz5JM-&AB5%Q) zzl_|DB%)@+U3s3toJY?Fb?B_ik#H3YU>9MD!}9>hnnD#TOQNYIFGsqk0vALQz})T7?I?rBC&oMi4#dg&DQ)}+bf8v z)JMN#ig;4MF`iGu)brtZGB=NB*YZk`!0kL%PbXqqRNE$uEW9*_y7?qlt@>rj$8*(JEm&Sg))+0Q%3py< z9&wg-((eM)`;|&WYVb)Ndc}2bxkcVDR$*+re`cr}dwPrNyoLyKmZ(uylZfXiQ)4!c z{1izqT2GHzbxdt_4CT_-fA@C{4Y;btcHLvCt9(b#tGxXCQeATL{L8>Mc`f{ti08FX zt!?#*_=vZZORsGW<=#zX#C(dN#&1(1o~xdUG>;^rYT1%VW+52!x|XfkW{py72B|wq zbxd1%jCnuM{+GveB;qZ)@ank&sQ&Lp#B*e;Cj&j?F%@V7{aG0`&fc^3`G_Gz^gXj$ zHG0WoRuj?JE7hWXWaN<1qN;WJ5%Fv{mD>P$%;HFL8zdur86CQRRBnSK$!#dxyu}D! zt#{ehYNh_#F^Y)wY~PBg+{VbGFTRsU^AeUto=pZrv9#JeB$X~Dt1?%S4dRD4l`QQy`zgO{-_K$PUk z!fMwxwGOR_Sb@|WP@js-AV2ABm2-tWR{cVewM~8cF{%9YqqR-_O6oDbr4!&fM-azS z6V`(u*EaQ?t!k;9-`TR(TR>^w< zMqET2t)UFwVjZugT-!d=0Ge%BMczut}EO+HY%SXAM+stZk}a8}N5> zeGc`#zW7F2MjFSeJBBUf?hxB}^>dw9wfkeE-BnxFjN?AW)V6BIHdV6i8eco|^KD9>$zLMScOo z93$$xDeC(u=CRR@W6#L4sArYde&^)2&+_@DwXF@;u>jF9y8GBvbscBS*EMOJ_wvr) zgjRJ>>sL8r{ZeyohB4>V?}9#yWG-ExG+`naLowqfg2M!d?`Bsna2kSE; z*7zGN$Dea;QDgKHXL5)uy!yF533xT)y@{2t`tHjE#=$Yy7`-mr>ow!g+qF&oa_bOE z;W;Lo(-zJ#soF=ip;>P=c6UXLUHARs8*@*sKTYIVv+`4GNLHhtZp!kh&+l3LO{NBc zLj6X8RsY+v{&!{lt^Mwk3J@8M{M4KblylPBPt~JPBy(_|tcTU+n_X?L>gE3JM{A$B zatxKCh15Q(J+>P8JWlN#XL=ts&Pp>%^>tFMe{VTX_ksG}Z6J5|`CZqTO&;f463JXt z^&4Tdzq*#1^DbPrbpx)OdYw>Z>uSsaHD=W}FRgm2Z7=2eXSId(EY#XZt;>%%i>~|a zRL(v+$8}j>H`F>2+nDRB4*te?QTJ5a*{0tiJdt&H#;cyk>et9?821C}Jw`m{qCQrQ z$;`$%Uda5+^)9`$B|X+Q^&1&akll3s?k?OM_#x+ZQ&$I&DbUoCZX-iMF@|gRtoOc$k zZK}+nMw!*UST&>V)tG9;9Mt1ojqRkgL4H?$Y7S&H)=O32HFB<6cnG0Laf{eZFdt8wuvl5yb|(YI#g$hNb#sc~_^ z7*nb&%Z#!_mG$i>KbLMDtJ?2JMEkj4Kh8$vr`o_rwn6kr+Td&?ZE(jpuUa!N(Dr)W zQ|(e*jz?<@l=F37qx5?hH3qzmK2z@lFZ;RQ^QyJBvoYUQJN;p_ll!-Wt@^9|N*Vj9 zw)E8D0SWx#(CAacx_yN)PAXq{nUH)WJWuwIl7&G)c3N>+{S=4 z2Y$-?G+lpnT(B{>)i_q)$hPXBwjDD1L6!HkG42Ycao(jA=2f3#ky|;e{M2t4wdWq` znCrgpuDlo3YjhfFZ9Pr2j#Jl#H^y@W)%V+tzE{`ib;g`k??I{???KY#agGQ5UQo^d zaAW?fKFDD7ff^%OXm5Sbqqg;r7&mIIQ|;E@Xg4)}I~(&*wdGf%?^Ss#$?{tDSNq*G z+FY%%D~xNP`mG@Kn_$+ls;}3|zP83gMp^$5#QvDV2ZFO>XK0{FNUCnzwwV(Rdx>a7a?QuN!d84*HmD{X3Sf8V^(&JN@ z>%97H8})lOR^DpuUm~xO)^XO~y{vuIv!m>^g>x*c_Q^@gA#(Go-;?HbwV|q?y2q<( z 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�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
0YnEwkq(l<;&vt8amuOGMd=WMEqx#KNH-S#o4%R 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