{
  "type": "Script",
  "span": {
    "start": 43,
    "end": 573,
    "ctxt": 0
  },
  "body": [
    {
      "type": "VariableDeclaration",
      "span": {
        "start": 43,
        "end": 66,
        "ctxt": 0
      },
      "kind": "var",
      "declare": true,
      "declarations": [
        {
          "type": "VariableDeclarator",
          "span": {
            "start": 55,
            "end": 65,
            "ctxt": 0
          },
          "id": {
            "type": "Identifier",
            "span": {
              "start": 55,
              "end": 56,
              "ctxt": 0
            },
            "value": "a",
            "optional": false,
            "typeAnnotation": {
              "type": "TsTypeAnnotation",
              "span": {
                "start": 56,
                "end": 65,
                "ctxt": 0
              },
              "typeAnnotation": {
                "type": "TsKeywordType",
                "span": {
                  "start": 58,
                  "end": 65,
                  "ctxt": 0
                },
                "kind": "boolean"
              }
            }
          },
          "init": null,
          "definite": false
        }
      ]
    },
    {
      "type": "VariableDeclaration",
      "span": {
        "start": 67,
        "end": 99,
        "ctxt": 0
      },
      "kind": "var",
      "declare": true,
      "declarations": [
        {
          "type": "VariableDeclarator",
          "span": {
            "start": 79,
            "end": 98,
            "ctxt": 0
          },
          "id": {
            "type": "Identifier",
            "span": {
              "start": 79,
              "end": 80,
              "ctxt": 0
            },
            "value": "p",
            "optional": false,
            "typeAnnotation": {
              "type": "TsTypeAnnotation",
              "span": {
                "start": 80,
                "end": 98,
                "ctxt": 0
              },
              "typeAnnotation": {
                "type": "TsTypeReference",
                "span": {
                  "start": 82,
                  "end": 98,
                  "ctxt": 0
                },
                "typeName": {
                  "type": "Identifier",
                  "span": {
                    "start": 82,
                    "end": 89,
                    "ctxt": 0
                  },
                  "value": "Promise",
                  "optional": false
                },
                "typeParams": {
                  "type": "TsTypeParameterInstantiation",
                  "span": {
                    "start": 89,
                    "end": 98,
                    "ctxt": 0
                  },
                  "params": [
                    {
                      "type": "TsKeywordType",
                      "span": {
                        "start": 90,
                        "end": 97,
                        "ctxt": 0
                      },
                      "kind": "boolean"
                    }
                  ]
                }
              }
            }
          },
          "init": null,
          "definite": false
        }
      ]
    },
    {
      "type": "FunctionDeclaration",
      "identifier": {
        "type": "Identifier",
        "span": {
          "start": 117,
          "end": 119,
          "ctxt": 0
        },
        "value": "fn",
        "optional": false
      },
      "declare": true,
      "params": [
        {
          "type": "Parameter",
          "span": {
            "start": 120,
            "end": 133,
            "ctxt": 0
          },
          "decorators": [],
          "pat": {
            "type": "Identifier",
            "span": {
              "start": 120,
              "end": 133,
              "ctxt": 0
            },
            "value": "arg0",
            "optional": false,
            "typeAnnotation": {
              "type": "TsTypeAnnotation",
              "span": {
                "start": 124,
                "end": 133,
                "ctxt": 0
              },
              "typeAnnotation": {
                "type": "TsKeywordType",
                "span": {
                  "start": 126,
                  "end": 133,
                  "ctxt": 0
                },
                "kind": "boolean"
              }
            }
          }
        },
        {
          "type": "Parameter",
          "span": {
            "start": 135,
            "end": 148,
            "ctxt": 0
          },
          "decorators": [],
          "pat": {
            "type": "Identifier",
            "span": {
              "start": 135,
              "end": 148,
              "ctxt": 0
            },
            "value": "arg1",
            "optional": false,
            "typeAnnotation": {
              "type": "TsTypeAnnotation",
              "span": {
                "start": 139,
                "end": 148,
                "ctxt": 0
              },
              "typeAnnotation": {
                "type": "TsKeywordType",
                "span": {
                  "start": 141,
                  "end": 148,
                  "ctxt": 0
                },
                "kind": "boolean"
              }
            }
          }
        },
        {
          "type": "Parameter",
          "span": {
            "start": 150,
            "end": 163,
            "ctxt": 0
          },
          "decorators": [],
          "pat": {
            "type": "Identifier",
            "span": {
              "start": 150,
              "end": 163,
              "ctxt": 0
            },
            "value": "arg2",
            "optional": false,
            "typeAnnotation": {
              "type": "TsTypeAnnotation",
              "span": {
                "start": 154,
                "end": 163,
                "ctxt": 0
              },
              "typeAnnotation": {
                "type": "TsKeywordType",
                "span": {
                  "start": 156,
                  "end": 163,
                  "ctxt": 0
                },
                "kind": "boolean"
              }
            }
          }
        }
      ],
      "decorators": [],
      "span": {
        "start": 100,
        "end": 171,
        "ctxt": 0
      },
      "body": null,
      "generator": false,
      "async": false,
      "typeParameters": null,
      "returnType": {
        "type": "TsTypeAnnotation",
        "span": {
          "start": 164,
          "end": 170,
          "ctxt": 0
        },
        "typeAnnotation": {
          "type": "TsKeywordType",
          "span": {
            "start": 166,
            "end": 170,
            "ctxt": 0
          },
          "kind": "void"
        }
      }
    },
    {
      "type": "VariableDeclaration",
      "span": {
        "start": 172,
        "end": 246,
        "ctxt": 0
      },
      "kind": "var",
      "declare": true,
      "declarations": [
        {
          "type": "VariableDeclarator",
          "span": {
            "start": 184,
            "end": 245,
            "ctxt": 0
          },
          "id": {
            "type": "Identifier",
            "span": {
              "start": 184,
              "end": 185,
              "ctxt": 0
            },
            "value": "o",
            "optional": false,
            "typeAnnotation": {
              "type": "TsTypeAnnotation",
              "span": {
                "start": 185,
                "end": 245,
                "ctxt": 0
              },
              "typeAnnotation": {
                "type": "TsTypeLiteral",
                "span": {
                  "start": 187,
                  "end": 245,
                  "ctxt": 0
                },
                "members": [
                  {
                    "type": "TsMethodSignature",
                    "span": {
                      "start": 189,
                      "end": 243,
                      "ctxt": 0
                    },
                    "readonly": false,
                    "key": {
                      "type": "Identifier",
                      "span": {
                        "start": 189,
                        "end": 191,
                        "ctxt": 0
                      },
                      "value": "fn",
                      "optional": false
                    },
                    "computed": false,
                    "optional": false,
                    "params": [
                      {
                        "type": "Identifier",
                        "span": {
                          "start": 192,
                          "end": 205,
                          "ctxt": 0
                        },
                        "value": "arg0",
                        "optional": false,
                        "typeAnnotation": {
                          "type": "TsTypeAnnotation",
                          "span": {
                            "start": 196,
                            "end": 205,
                            "ctxt": 0
                          },
                          "typeAnnotation": {
                            "type": "TsKeywordType",
                            "span": {
                              "start": 198,
                              "end": 205,
                              "ctxt": 0
                            },
                            "kind": "boolean"
                          }
                        }
                      },
                      {
                        "type": "Identifier",
                        "span": {
                          "start": 207,
                          "end": 220,
                          "ctxt": 0
                        },
                        "value": "arg1",
                        "optional": false,
                        "typeAnnotation": {
                          "type": "TsTypeAnnotation",
                          "span": {
                            "start": 211,
                            "end": 220,
                            "ctxt": 0
                          },
                          "typeAnnotation": {
                            "type": "TsKeywordType",
                            "span": {
                              "start": 213,
                              "end": 220,
                              "ctxt": 0
                            },
                            "kind": "boolean"
                          }
                        }
                      },
                      {
                        "type": "Identifier",
                        "span": {
                          "start": 222,
                          "end": 235,
                          "ctxt": 0
                        },
                        "value": "arg2",
                        "optional": false,
                        "typeAnnotation": {
                          "type": "TsTypeAnnotation",
                          "span": {
                            "start": 226,
                            "end": 235,
                            "ctxt": 0
                          },
                          "typeAnnotation": {
                            "type": "TsKeywordType",
                            "span": {
                              "start": 228,
                              "end": 235,
                              "ctxt": 0
                            },
                            "kind": "boolean"
                          }
                        }
                      }
                    ],
                    "typeAnn": {
                      "type": "TsTypeAnnotation",
                      "span": {
                        "start": 236,
                        "end": 242,
                        "ctxt": 0
                      },
                      "typeAnnotation": {
                        "type": "TsKeywordType",
                        "span": {
                          "start": 238,
                          "end": 242,
                          "ctxt": 0
                        },
                        "kind": "void"
                      }
                    },
                    "typeParams": null
                  }
                ]
              }
            }
          },
          "init": null,
          "definite": false
        }
      ]
    },
    {
      "type": "VariableDeclaration",
      "span": {
        "start": 247,
        "end": 330,
        "ctxt": 0
      },
      "kind": "var",
      "declare": true,
      "declarations": [
        {
          "type": "VariableDeclarator",
          "span": {
            "start": 259,
            "end": 329,
            "ctxt": 0
          },
          "id": {
            "type": "Identifier",
            "span": {
              "start": 259,
              "end": 262,
              "ctxt": 0
            },
            "value": "pfn",
            "optional": false,
            "typeAnnotation": {
              "type": "TsTypeAnnotation",
              "span": {
                "start": 262,
                "end": 329,
                "ctxt": 0
              },
              "typeAnnotation": {
                "type": "TsTypeReference",
                "span": {
                  "start": 264,
                  "end": 329,
                  "ctxt": 0
                },
                "typeName": {
                  "type": "Identifier",
                  "span": {
                    "start": 264,
                    "end": 271,
                    "ctxt": 0
                  },
                  "value": "Promise",
                  "optional": false
                },
                "typeParams": {
                  "type": "TsTypeParameterInstantiation",
                  "span": {
                    "start": 271,
                    "end": 329,
                    "ctxt": 0
                  },
                  "params": [
                    {
                      "type": "TsTypeLiteral",
                      "span": {
                        "start": 272,
                        "end": 328,
                        "ctxt": 0
                      },
                      "members": [
                        {
                          "type": "TsCallSignatureDeclaration",
                          "span": {
                            "start": 274,
                            "end": 326,
                            "ctxt": 0
                          },
                          "params": [
                            {
                              "type": "Identifier",
                              "span": {
                                "start": 275,
                                "end": 288,
                                "ctxt": 0
                              },
                              "value": "arg0",
                              "optional": false,
                              "typeAnnotation": {
                                "type": "TsTypeAnnotation",
                                "span": {
                                  "start": 279,
                                  "end": 288,
                                  "ctxt": 0
                                },
                                "typeAnnotation": {
                                  "type": "TsKeywordType",
                                  "span": {
                                    "start": 281,
                                    "end": 288,
                                    "ctxt": 0
                                  },
                                  "kind": "boolean"
                                }
                              }
                            },
                            {
                              "type": "Identifier",
                              "span": {
                                "start": 290,
                                "end": 303,
                                "ctxt": 0
                              },
                              "value": "arg1",
                              "optional": false,
                              "typeAnnotation": {
                                "type": "TsTypeAnnotation",
                                "span": {
                                  "start": 294,
                                  "end": 303,
                                  "ctxt": 0
                                },
                                "typeAnnotation": {
                                  "type": "TsKeywordType",
                                  "span": {
                                    "start": 296,
                                    "end": 303,
                                    "ctxt": 0
                                  },
                                  "kind": "boolean"
                                }
                              }
                            },
                            {
                              "type": "Identifier",
                              "span": {
                                "start": 305,
                                "end": 318,
                                "ctxt": 0
                              },
                              "value": "arg2",
                              "optional": false,
                              "typeAnnotation": {
                                "type": "TsTypeAnnotation",
                                "span": {
                                  "start": 309,
                                  "end": 318,
                                  "ctxt": 0
                                },
                                "typeAnnotation": {
                                  "type": "TsKeywordType",
                                  "span": {
                                    "start": 311,
                                    "end": 318,
                                    "ctxt": 0
                                  },
                                  "kind": "boolean"
                                }
                              }
                            }
                          ],
                          "typeAnnotation": {
                            "type": "TsTypeAnnotation",
                            "span": {
                              "start": 319,
                              "end": 325,
                              "ctxt": 0
                            },
                            "typeAnnotation": {
                              "type": "TsKeywordType",
                              "span": {
                                "start": 321,
                                "end": 325,
                                "ctxt": 0
                              },
                              "kind": "void"
                            }
                          },
                          "typeParams": null
                        }
                      ]
                    }
                  ]
                }
              }
            }
          },
          "init": null,
          "definite": false
        }
      ]
    },
    {
      "type": "VariableDeclaration",
      "span": {
        "start": 331,
        "end": 415,
        "ctxt": 0
      },
      "kind": "var",
      "declare": true,
      "declarations": [
        {
          "type": "VariableDeclarator",
          "span": {
            "start": 343,
            "end": 414,
            "ctxt": 0
          },
          "id": {
            "type": "Identifier",
            "span": {
              "start": 343,
              "end": 345,
              "ctxt": 0
            },
            "value": "po",
            "optional": false,
            "typeAnnotation": {
              "type": "TsTypeAnnotation",
              "span": {
                "start": 345,
                "end": 414,
                "ctxt": 0
              },
              "typeAnnotation": {
                "type": "TsTypeReference",
                "span": {
                  "start": 347,
                  "end": 414,
                  "ctxt": 0
                },
                "typeName": {
                  "type": "Identifier",
                  "span": {
                    "start": 347,
                    "end": 354,
                    "ctxt": 0
                  },
                  "value": "Promise",
                  "optional": false
                },
                "typeParams": {
                  "type": "TsTypeParameterInstantiation",
                  "span": {
                    "start": 354,
                    "end": 414,
                    "ctxt": 0
                  },
                  "params": [
                    {
                      "type": "TsTypeLiteral",
                      "span": {
                        "start": 355,
                        "end": 413,
                        "ctxt": 0
                      },
                      "members": [
                        {
                          "type": "TsMethodSignature",
                          "span": {
                            "start": 357,
                            "end": 411,
                            "ctxt": 0
                          },
                          "readonly": false,
                          "key": {
                            "type": "Identifier",
                            "span": {
                              "start": 357,
                              "end": 359,
                              "ctxt": 0
                            },
                            "value": "fn",
                            "optional": false
                          },
                          "computed": false,
                          "optional": false,
                          "params": [
                            {
                              "type": "Identifier",
                              "span": {
                                "start": 360,
                                "end": 373,
                                "ctxt": 0
                              },
                              "value": "arg0",
                              "optional": false,
                              "typeAnnotation": {
                                "type": "TsTypeAnnotation",
                                "span": {
                                  "start": 364,
                                  "end": 373,
                                  "ctxt": 0
                                },
                                "typeAnnotation": {
                                  "type": "TsKeywordType",
                                  "span": {
                                    "start": 366,
                                    "end": 373,
                                    "ctxt": 0
                                  },
                                  "kind": "boolean"
                                }
                              }
                            },
                            {
                              "type": "Identifier",
                              "span": {
                                "start": 375,
                                "end": 388,
                                "ctxt": 0
                              },
                              "value": "arg1",
                              "optional": false,
                              "typeAnnotation": {
                                "type": "TsTypeAnnotation",
                                "span": {
                                  "start": 379,
                                  "end": 388,
                                  "ctxt": 0
                                },
                                "typeAnnotation": {
                                  "type": "TsKeywordType",
                                  "span": {
                                    "start": 381,
                                    "end": 388,
                                    "ctxt": 0
                                  },
                                  "kind": "boolean"
                                }
                              }
                            },
                            {
                              "type": "Identifier",
                              "span": {
                                "start": 390,
                                "end": 403,
                                "ctxt": 0
                              },
                              "value": "arg2",
                              "optional": false,
                              "typeAnnotation": {
                                "type": "TsTypeAnnotation",
                                "span": {
                                  "start": 394,
                                  "end": 403,
                                  "ctxt": 0
                                },
                                "typeAnnotation": {
                                  "type": "TsKeywordType",
                                  "span": {
                                    "start": 396,
                                    "end": 403,
                                    "ctxt": 0
                                  },
                                  "kind": "boolean"
                                }
                              }
                            }
                          ],
                          "typeAnn": {
                            "type": "TsTypeAnnotation",
                            "span": {
                              "start": 404,
                              "end": 410,
                              "ctxt": 0
                            },
                            "typeAnnotation": {
                              "type": "TsKeywordType",
                              "span": {
                                "start": 406,
                                "end": 410,
                                "ctxt": 0
                              },
                              "kind": "void"
                            }
                          },
                          "typeParams": null
                        }
                      ]
                    }
                  ]
                }
              }
            }
          },
          "init": null,
          "definite": false
        }
      ]
    },
    {
      "type": "FunctionDeclaration",
      "identifier": {
        "type": "Identifier",
        "span": {
          "start": 433,
          "end": 439,
          "ctxt": 0
        },
        "value": "before",
        "optional": false
      },
      "declare": true,
      "params": [],
      "decorators": [],
      "span": {
        "start": 416,
        "end": 448,
        "ctxt": 0
      },
      "body": null,
      "generator": false,
      "async": false,
      "typeParameters": null,
      "returnType": {
        "type": "TsTypeAnnotation",
        "span": {
          "start": 441,
          "end": 447,
          "ctxt": 0
        },
        "typeAnnotation": {
          "type": "TsKeywordType",
          "span": {
            "start": 443,
            "end": 447,
            "ctxt": 0
          },
          "kind": "void"
        }
      }
    },
    {
      "type": "FunctionDeclaration",
      "identifier": {
        "type": "Identifier",
        "span": {
          "start": 466,
          "end": 471,
          "ctxt": 0
        },
        "value": "after",
        "optional": false
      },
      "declare": true,
      "params": [],
      "decorators": [],
      "span": {
        "start": 449,
        "end": 480,
        "ctxt": 0
      },
      "body": null,
      "generator": false,
      "async": false,
      "typeParameters": null,
      "returnType": {
        "type": "TsTypeAnnotation",
        "span": {
          "start": 473,
          "end": 479,
          "ctxt": 0
        },
        "typeAnnotation": {
          "type": "TsKeywordType",
          "span": {
            "start": 475,
            "end": 479,
            "ctxt": 0
          },
          "kind": "void"
        }
      }
    },
    {
      "type": "FunctionDeclaration",
      "identifier": {
        "type": "Identifier",
        "span": {
          "start": 496,
          "end": 500,
          "ctxt": 0
        },
        "value": "func",
        "optional": false
      },
      "declare": false,
      "params": [],
      "decorators": [],
      "span": {
        "start": 481,
        "end": 573,
        "ctxt": 0
      },
      "body": {
        "type": "BlockStatement",
        "span": {
          "start": 518,
          "end": 573,
          "ctxt": 0
        },
        "stmts": [
          {
            "type": "ExpressionStatement",
            "span": {
              "start": 524,
              "end": 533,
              "ctxt": 0
            },
            "expression": {
              "type": "CallExpression",
              "span": {
                "start": 524,
                "end": 532,
                "ctxt": 0
              },
              "callee": {
                "type": "Identifier",
                "span": {
                  "start": 524,
                  "end": 530,
                  "ctxt": 0
                },
                "value": "before",
                "optional": false
              },
              "arguments": [],
              "typeArguments": null
            }
          },
          {
            "type": "VariableDeclaration",
            "span": {
              "start": 538,
              "end": 558,
              "ctxt": 0
            },
            "kind": "var",
            "declare": false,
            "declarations": [
              {
                "type": "VariableDeclarator",
                "span": {
                  "start": 542,
                  "end": 557,
                  "ctxt": 0
                },
                "id": {
                  "type": "Identifier",
                  "span": {
                    "start": 542,
                    "end": 543,
                    "ctxt": 0
                  },
                  "value": "b",
                  "optional": false,
                  "typeAnnotation": null
                },
                "init": {
                  "type": "CallExpression",
                  "span": {
                    "start": 546,
                    "end": 557,
                    "ctxt": 0
                  },
                  "callee": {
                    "type": "Identifier",
                    "span": {
                      "start": 546,
                      "end": 548,
                      "ctxt": 0
                    },
                    "value": "fn",
                    "optional": false
                  },
                  "arguments": [
                    {
                      "spread": null,
                      "expression": {
                        "type": "Identifier",
                        "span": {
                          "start": 549,
                          "end": 550,
                          "ctxt": 0
                        },
                        "value": "a",
                        "optional": false
                      }
                    },
                    {
                      "spread": null,
                      "expression": {
                        "type": "Identifier",
                        "span": {
                          "start": 552,
                          "end": 553,
                          "ctxt": 0
                        },
                        "value": "a",
                        "optional": false
                      }
                    },
                    {
                      "spread": null,
                      "expression": {
                        "type": "Identifier",
                        "span": {
                          "start": 555,
                          "end": 556,
                          "ctxt": 0
                        },
                        "value": "a",
                        "optional": false
                      }
                    }
                  ],
                  "typeArguments": null
                },
                "definite": false
              }
            ]
          },
          {
            "type": "ExpressionStatement",
            "span": {
              "start": 563,
              "end": 571,
              "ctxt": 0
            },
            "expression": {
              "type": "CallExpression",
              "span": {
                "start": 563,
                "end": 570,
                "ctxt": 0
              },
              "callee": {
                "type": "Identifier",
                "span": {
                  "start": 563,
                  "end": 568,
                  "ctxt": 0
                },
                "value": "after",
                "optional": false
              },
              "arguments": [],
              "typeArguments": null
            }
          }
        ]
      },
      "generator": false,
      "async": true,
      "typeParameters": null,
      "returnType": {
        "type": "TsTypeAnnotation",
        "span": {
          "start": 502,
          "end": 517,
          "ctxt": 0
        },
        "typeAnnotation": {
          "type": "TsTypeReference",
          "span": {
            "start": 504,
            "end": 517,
            "ctxt": 0
          },
          "typeName": {
            "type": "Identifier",
            "span": {
              "start": 504,
              "end": 511,
              "ctxt": 0
            },
            "value": "Promise",
            "optional": false
          },
          "typeParams": {
            "type": "TsTypeParameterInstantiation",
            "span": {
              "start": 511,
              "end": 517,
              "ctxt": 0
            },
            "params": [
              {
                "type": "TsKeywordType",
                "span": {
                  "start": 512,
                  "end": 516,
                  "ctxt": 0
                },
                "kind": "void"
              }
            ]
          }
        }
      }
    }
  ],
  "interpreter": null
}