{
    "repeat": {
        "NodeType": "MacroDef",
        "Name": {
            "NodeType": "Identifier",
            "Name": "repeat"
        },
        "Parameters": {
            "NodeType": "Tuple",
            "Elements": [
                {
                    "NodeType": "Identifier",
                    "Name": "n"
                },
                {
                    "NodeType": "Identifier",
                    "Name": "body"
                }
            ]
        },
        "Body": {
            "NodeType": "Quasiquote",
            "Expression": {
                "NodeType": "Block",
                "Expressions": {
                    "NodeType": "Tuple",
                    "Elements": [
                        {
                            "NodeType": "VarDecl",
                            "Identifier": {
                                "NodeType": "Identifier",
                                "Name": "loop"
                            },
                            "Initializer": {
                                "NodeType": "LambdaExpr",
                                "Parameters": {
                                    "NodeType": "Tuple",
                                    "Elements": [
                                        {
                                            "NodeType": "Identifier",
                                            "Name": "counter"
                                        }
                                    ]
                                },
                                "Body": {
                                    "NodeType": "IfExpr",
                                    "Condition": {
                                        "NodeType": "FunctionCall",
                                        "Callee": {
                                            "NodeType": "Identifier",
                                            "Name": ">"
                                        },
                                        "Arguments": {
                                            "NodeType": "Tuple",
                                            "Elements": [
                                                {
                                                    "NodeType": "Identifier",
                                                    "Name": "counter"
                                                },
                                                {
                                                    "NodeType": "Constant",
                                                    "Value": {
                                                        "Kind": "Scalar",
                                                        "Value": {
                                                            "Kind": "Ordinal",
                                                            "Value": 0
                                                        }
                                                    }
                                                }
                                            ]
                                        }
                                    },
                                    "ThenBranch": {
                                        "NodeType": "Block",
                                        "Expressions": {
                                            "NodeType": "Tuple",
                                            "Elements": [
                                                {
                                                    "NodeType": "Unquote",
                                                    "Expression": {
                                                        "NodeType": "Identifier",
                                                        "Name": "body"
                                                    }
                                                },
                                                {
                                                    "NodeType": "Recur",
                                                    "Arguments": {
                                                        "NodeType": "Tuple",
                                                        "Elements": [
                                                            {
                                                                "NodeType": "FunctionCall",
                                                                "Callee": {
                                                                    "NodeType": "Identifier",
                                                                    "Name": "-"
                                                                },
                                                                "Arguments": {
                                                                    "NodeType": "Tuple",
                                                                    "Elements": [
                                                                        {
                                                                            "NodeType": "Identifier",
                                                                            "Name": "counter"
                                                                        },
                                                                        {
                                                                            "NodeType": "Constant",
                                                                            "Value": {
                                                                                "Kind": "Scalar",
                                                                                "Value": {
                                                                                    "Kind": "Ordinal",
                                                                                    "Value": 1
                                                                                }
                                                                            }
                                                                        }
                                                                    ]
                                                                }
                                                            }
                                                        ]
                                                    }
                                                }
                                            ]
                                        }
                                    },
                                    "ElseBranch": {
                                        "NodeType": "Block",
                                        "Expressions": {
                                            "NodeType": "Tuple",
                                            "Elements": [
                                            ]
                                        }
                                    }
                                }
                            }
                        },
                        {
                            "NodeType": "FunctionCall",
                            "Callee": {
                                "NodeType": "Identifier",
                                "Name": "loop"
                            },
                            "Arguments": {
                                "NodeType": "Tuple",
                                "Elements": [
                                    {
                                        "NodeType": "Unquote",
                                        "Expression": {
                                            "NodeType": "Identifier",
                                            "Name": "n"
                                        }
                                    }
                                ]
                            }
                        }
                    ]
                }
            }
        }
    },
    "factorial": {
        "NodeType": "LambdaExpr",
        "Parameters": {
            "NodeType": "Tuple",
            "Elements": [
                {
                    "NodeType": "Identifier",
                    "Name": "n"
                }
            ]
        },
        "Body": {
            "NodeType": "FunctionCall",
            "Callee": {
                "NodeType": "LambdaExpr",
                "Parameters": {
                    "NodeType": "Tuple",
                    "Elements": [
                        {
                            "NodeType": "Identifier",
                            "Name": "n"
                        },
                        {
                            "NodeType": "Identifier",
                            "Name": "acc"
                        }
                    ]
                },
                "Body": {
                    "NodeType": "TernaryExpr",
                    "Condition": {
                        "NodeType": "FunctionCall",
                        "Callee": {
                            "NodeType": "Identifier",
                            "Name": "<="
                        },
                        "Arguments": {
                            "NodeType": "Tuple",
                            "Elements": [
                                {
                                    "NodeType": "Identifier",
                                    "Name": "n"
                                },
                                {
                                    "NodeType": "Constant",
                                    "Value": {
                                        "Kind": "Scalar",
                                        "Value": {
                                            "Kind": "Ordinal",
                                            "Value": 1
                                        }
                                    }
                                }
                            ]
                        }
                    },
                    "ThenBranch": {
                        "NodeType": "Identifier",
                        "Name": "acc"
                    },
                    "ElseBranch": {
                        "NodeType": "Recur",
                        "Arguments": {
                            "NodeType": "Tuple",
                            "Elements": [
                                {
                                    "NodeType": "FunctionCall",
                                    "Callee": {
                                        "NodeType": "Identifier",
                                        "Name": "-"
                                    },
                                    "Arguments": {
                                        "NodeType": "Tuple",
                                        "Elements": [
                                            {
                                                "NodeType": "Identifier",
                                                "Name": "n"
                                            },
                                            {
                                                "NodeType": "Constant",
                                                "Value": {
                                                    "Kind": "Scalar",
                                                    "Value": {
                                                        "Kind": "Ordinal",
                                                        "Value": 1
                                                    }
                                                }
                                            }
                                        ]
                                    }
                                },
                                {
                                    "NodeType": "FunctionCall",
                                    "Callee": {
                                        "NodeType": "Identifier",
                                        "Name": "*"
                                    },
                                    "Arguments": {
                                        "NodeType": "Tuple",
                                        "Elements": [
                                            {
                                                "NodeType": "Identifier",
                                                "Name": "acc"
                                            },
                                            {
                                                "NodeType": "Identifier",
                                                "Name": "n"
                                            }
                                        ]
                                    }
                                }
                            ]
                        }
                    }
                }
            },
            "Arguments": {
                "NodeType": "Tuple",
                "Elements": [
                    {
                        "NodeType": "Identifier",
                        "Name": "n"
                    },
                    {
                        "NodeType": "Constant",
                        "Value": {
                            "Kind": "Scalar",
                            "Value": {
                                "Kind": "Ordinal",
                                "Value": 1
                            }
                        }
                    }
                ]
            }
        }
    },
    "CreateSMA": {
        "NodeType": "LambdaExpr",
        "Parameters": {
            "NodeType": "Tuple",
            "Elements": [
                {
                    "NodeType": "Identifier",
                    "Name": "len"
                }
            ]
        },
        "Body": {
            "NodeType": "Block",
            "Expressions": {
                "NodeType": "Tuple",
                "Elements": [
                    {
                        "NodeType": "VarDecl",
                        "Identifier": {
                            "NodeType": "Identifier",
                            "Name": "sum"
                        },
                        "Initializer": {
                            "NodeType": "Constant",
                            "Value": {
                                "Kind": "Scalar",
                                "Value": {
                                    "Kind": "Ordinal",
                                    "Value": 0
                                }
                            }
                        }
                    },
                    {
                        "NodeType": "VarDecl",
                        "Identifier": {
                            "NodeType": "Identifier",
                            "Name": "count"
                        },
                        "Initializer": {
                            "NodeType": "Constant",
                            "Value": {
                                "Kind": "Scalar",
                                "Value": {
                                    "Kind": "Ordinal",
                                    "Value": 0
                                }
                            }
                        }
                    },
                    {
                        "NodeType": "LambdaExpr",
                        "Parameters": {
                            "NodeType": "Tuple",
                            "Elements": [
                                {
                                    "NodeType": "Identifier",
                                    "Name": "series"
                                },
                                {
                                    "NodeType": "Identifier",
                                    "Name": "val"
                                }
                            ]
                        },
                        "Body": {
                            "NodeType": "Block",
                            "Expressions": {
                                "NodeType": "Tuple",
                                "Elements": [
                                    {
                                        "NodeType": "Assignment",
                                        "Identifier": {
                                            "NodeType": "Identifier",
                                            "Name": "sum"
                                        },
                                        "Value": {
                                            "NodeType": "FunctionCall",
                                            "Callee": {
                                                "NodeType": "Identifier",
                                                "Name": "+"
                                            },
                                            "Arguments": {
                                                "NodeType": "Tuple",
                                                "Elements": [
                                                    {
                                                        "NodeType": "Identifier",
                                                        "Name": "sum"
                                                    },
                                                    {
                                                        "NodeType": "Identifier",
                                                        "Name": "val"
                                                    }
                                                ]
                                            }
                                        }
                                    },
                                    {
                                        "NodeType": "Assignment",
                                        "Identifier": {
                                            "NodeType": "Identifier",
                                            "Name": "count"
                                        },
                                        "Value": {
                                            "NodeType": "FunctionCall",
                                            "Callee": {
                                                "NodeType": "Identifier",
                                                "Name": "+"
                                            },
                                            "Arguments": {
                                                "NodeType": "Tuple",
                                                "Elements": [
                                                    {
                                                        "NodeType": "Identifier",
                                                        "Name": "count"
                                                    },
                                                    {
                                                        "NodeType": "Constant",
                                                        "Value": {
                                                            "Kind": "Scalar",
                                                            "Value": {
                                                                "Kind": "Ordinal",
                                                                "Value": 1
                                                            }
                                                        }
                                                    }
                                                ]
                                            }
                                        }
                                    },
                                    {
                                        "NodeType": "Assignment",
                                        "Identifier": {
                                            "NodeType": "Identifier",
                                            "Name": "sum"
                                        },
                                        "Value": {
                                            "NodeType": "TernaryExpr",
                                            "Condition": {
                                                "NodeType": "FunctionCall",
                                                "Callee": {
                                                    "NodeType": "Identifier",
                                                    "Name": ">"
                                                },
                                                "Arguments": {
                                                    "NodeType": "Tuple",
                                                    "Elements": [
                                                        {
                                                            "NodeType": "Identifier",
                                                            "Name": "count"
                                                        },
                                                        {
                                                            "NodeType": "Identifier",
                                                            "Name": "len"
                                                        }
                                                    ]
                                                }
                                            },
                                            "ThenBranch": {
                                                "NodeType": "FunctionCall",
                                                "Callee": {
                                                    "NodeType": "Identifier",
                                                    "Name": "-"
                                                },
                                                "Arguments": {
                                                    "NodeType": "Tuple",
                                                    "Elements": [
                                                        {
                                                            "NodeType": "Identifier",
                                                            "Name": "sum"
                                                        },
                                                        {
                                                            "NodeType": "Indexer",
                                                            "Base": {
                                                                "NodeType": "Identifier",
                                                                "Name": "series"
                                                            },
                                                            "Index": {
                                                                "NodeType": "FunctionCall",
                                                                "Callee": {
                                                                    "NodeType": "Identifier",
                                                                    "Name": "-"
                                                                },
                                                                "Arguments": {
                                                                    "NodeType": "Tuple",
                                                                    "Elements": [
                                                                        {
                                                                            "NodeType": "Identifier",
                                                                            "Name": "count"
                                                                        },
                                                                        {
                                                                            "NodeType": "Identifier",
                                                                            "Name": "len"
                                                                        }
                                                                    ]
                                                                }
                                                            }
                                                        }
                                                    ]
                                                }
                                            },
                                            "ElseBranch": {
                                                "NodeType": "Identifier",
                                                "Name": "sum"
                                            }
                                        }
                                    },
                                    {
                                        "NodeType": "FunctionCall",
                                        "Callee": {
                                            "NodeType": "Identifier",
                                            "Name": "/"
                                        },
                                        "Arguments": {
                                            "NodeType": "Tuple",
                                            "Elements": [
                                                {
                                                    "NodeType": "Identifier",
                                                    "Name": "sum"
                                                },
                                                {
                                                    "NodeType": "TernaryExpr",
                                                    "Condition": {
                                                        "NodeType": "FunctionCall",
                                                        "Callee": {
                                                            "NodeType": "Identifier",
                                                            "Name": "<"
                                                        },
                                                        "Arguments": {
                                                            "NodeType": "Tuple",
                                                            "Elements": [
                                                                {
                                                                    "NodeType": "Identifier",
                                                                    "Name": "count"
                                                                },
                                                                {
                                                                    "NodeType": "Identifier",
                                                                    "Name": "len"
                                                                }
                                                            ]
                                                        }
                                                    },
                                                    "ThenBranch": {
                                                        "NodeType": "Identifier",
                                                        "Name": "count"
                                                    },
                                                    "ElseBranch": {
                                                        "NodeType": "Identifier",
                                                        "Name": "len"
                                                    }
                                                }
                                            ]
                                        }
                                    }
                                ]
                            }
                        }
                    }
                ]
            }
        }
    },
    "broker": {
        "NodeType": "FunctionCall",
        "Callee": {
            "NodeType": "Identifier",
            "Name": "create-broker"
        },
        "Arguments": {
            "NodeType": "Tuple",
            "Elements": [
                {
                    "NodeType": "Constant",
                    "Value": {
                        "Kind": "Scalar",
                        "Value": {
                            "Kind": "Float",
                            "Value": 10000.0
                        }
                    }
                }
            ]
        }
    }
}