{
  "fileName": "RefundEscrow.sol",
  "contractName": "RefundEscrow",
  "source": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"./ConditionalEscrow.sol\";\n\n/**\n * @title RefundEscrow\n * @dev Escrow that holds funds for a beneficiary, deposited from multiple\n * parties.\n * @dev Intended usage: See {Escrow}. Same usage guidelines apply here.\n * @dev The owner account (that is, the contract that instantiates this\n * contract) may deposit, close the deposit period, and allow for either\n * withdrawal by the beneficiary, or refunds to the depositors. All interactions\n * with `RefundEscrow` will be made through the owner contract.\n */\ncontract RefundEscrow is ConditionalEscrow {\n    enum State { Active, Refunding, Closed }\n\n    event RefundsClosed();\n    event RefundsEnabled();\n\n    State private _state;\n    address payable private _beneficiary;\n\n    /**\n     * @dev Constructor.\n     * @param beneficiary The beneficiary of the deposits.\n     */\n    constructor (address payable beneficiary) {\n        require(beneficiary != address(0), \"RefundEscrow: beneficiary is the zero address\");\n        _beneficiary = beneficiary;\n        _state = State.Active;\n    }\n\n    /**\n     * @return The current state of the escrow.\n     */\n    function state() public view returns (State) {\n        return _state;\n    }\n\n    /**\n     * @return The beneficiary of the escrow.\n     */\n    function beneficiary() public view returns (address) {\n        return _beneficiary;\n    }\n\n    /**\n     * @dev Stores funds that may later be refunded.\n     * @param refundee The address funds will be sent to if a refund occurs.\n     */\n    function deposit(address refundee) public payable virtual override {\n        require(_state == State.Active, \"RefundEscrow: can only deposit while active\");\n        super.deposit(refundee);\n    }\n\n    /**\n     * @dev Allows for the beneficiary to withdraw their funds, rejecting\n     * further deposits.\n     */\n    function close() public onlyOwner virtual {\n        require(_state == State.Active, \"RefundEscrow: can only close while active\");\n        _state = State.Closed;\n        emit RefundsClosed();\n    }\n\n    /**\n     * @dev Allows for refunds to take place, rejecting further deposits.\n     */\n    function enableRefunds() public onlyOwner virtual {\n        require(_state == State.Active, \"RefundEscrow: can only enable refunds while active\");\n        _state = State.Refunding;\n        emit RefundsEnabled();\n    }\n\n    /**\n     * @dev Withdraws the beneficiary's funds.\n     */\n    function beneficiaryWithdraw() public virtual {\n        require(_state == State.Closed, \"RefundEscrow: beneficiary can only withdraw while closed\");\n        _beneficiary.transfer(address(this).balance);\n    }\n\n    /**\n     * @dev Returns whether refundees can withdraw their deposits (be refunded). The overridden function receives a\n     * 'payee' argument, but we ignore it here since the condition is global, not per-payee.\n     */\n    function withdrawalAllowed(address) public view override returns (bool) {\n        return _state == State.Refunding;\n    }\n}\n",
  "sourcePath": "contracts/payment/escrow/RefundEscrow.sol",
  "sourceMap": "573:2439:72:-:0;;;893:209;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;856:17:7;876:12;:10;;;:12;;:::i;:::-;856:32;;907:9;898:6;;:18;;;;;;;;;;;;;;;;;;964:9;931:43;;960:1;931:43;;;;;;;;;;;;831:150;976:1:72;953:25;;:11;:25;;;;945:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1053:11;1038:12;;:26;;;;;;;;;;;;;;;;;;1083:12;1074:6;;:21;;;;;;;;;;;;;;;;;;;;;;;;893:209;573:2439;;590:104:0;643:15;677:10;670:17;;590:104;:::o;573:2439:72:-;;;;;;;",
  "deployedSourceMap": "573:2439:72:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1315:89;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;1872:196;;;;;;;;;;;;;:::i;:::-;;598:201:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2889:121:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;1680:145:7;;;;;;;;;;;;;:::i;:::-;;2164:217:72;;;;;;;;;;;;;:::i;:::-;;1057:77:7;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2450:208:72;;;;;;;;;;;;;:::i;:::-;;1172:75;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;1091:105:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1974:240:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1556:195:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1315:89;1359:7;1385:12;;;;;;;;;;;1378:19;;1315:89;:::o;1872:196::-;1271:12:7;:10;:12::i;:::-;1261:22;;:6;;;;;;;;;;:22;;;1253:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1942:12:72::1;1932:22;;;;;;;;:6;;;;;;;;;;;:22;;;;;;;;;1924:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2019:12;2010:6:::0;::::1;:21;;;;;;;;;;;;;;;;;;;;;;;;2046:15;;;;;;;;;;1872:196::o:0;598:201:70:-;681:24;699:5;681:17;:24::i;:::-;673:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;771:21;786:5;771:14;:21::i;:::-;598:201;:::o;2889:121:72:-;2955:4;2988:15;2978:25;;;;;;;;:6;;;;;;;;;;;:25;;;;;;;;;2971:32;;2889:121;;;:::o;1680:145:7:-;1271:12;:10;:12::i;:::-;1261:22;;:6;;;;;;;;;;:22;;;1253:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1786:1:::1;1749:40;;1770:6;::::0;::::1;;;;;;;;1749:40;;;;;;;;;;;;1816:1;1799:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;1680:145::o:0;2164:217:72:-;1271:12:7;:10;:12::i;:::-;1261:22;;:6;;;;;;;;;;:22;;;1253:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2242:12:72::1;2232:22;;;;;;;;:6;;;;;;;;;;;:22;;;;;;;;;2224:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2328:15;2319:6;;:24;;;;;;;;;;;;;;;;;;;;;;;;2358:16;;;;;;;;;;2164:217::o:0;1057:77:7:-;1095:7;1121:6;;;;;;;;;;;1114:13;;1057:77;:::o;2450:208:72:-;2524:12;2514:22;;;;;;;;:6;;;;;;;;;;;:22;;;;;;;;;2506:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2607:12;;;;;;;;;;;:21;;:44;2637:4;2629:21;;;2607:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2450:208::o;1172:75::-;1210:5;1234:6;;;;;;;;;;;1227:13;;1172:75;:::o;1091:105:71:-;1147:7;1173:9;:16;1183:5;1173:16;;;;;;;;;;;;;;;;1166:23;;1091:105;;;:::o;1974:240:7:-;1271:12;:10;:12::i;:::-;1261:22;;:6;;;;;;;;;;:22;;;1253:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2082:1:::1;2062:22;;:8;:22;;;;2054:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2171:8;2142:38;;2163:6;::::0;::::1;;;;;;;;2142:38;;;;;;;;;;;;2199:8;2190:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;1974:240:::0;:::o;1556:195:72:-;1651:12;1641:22;;;;;;;;:6;;;;;;;;;;;:22;;;;;;;;;1633:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1721:23;1735:8;1721:13;:23::i;:::-;1556:195;:::o;590:104:0:-;643:15;677:10;670:17;;590:104;:::o;1981:224:71:-;1271:12:7;:10;:12::i;:::-;1261:22;;:6;;;;;;;;;;:22;;;1253:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2057:15:71::1;2075:9;:16;2085:5;2075:16;;;;;;;;;;;;;;;;2057:34;;2121:1;2102:9;:16;2112:5;2102:16;;;;;;;;;;;;;;;:20;;;;2133:24;2149:7;2133:5;:15;;;;:24;;;;:::i;:::-;2183:5;2173:25;;;2190:7;2173:25;;;;;;;;;;;;;;;;;;1330:1:7;1981:224:71::0;:::o;1338:205::-;1271:12:7;:10;:12::i;:::-;1261:22;;:6;;;;;;;;;;:22;;;1253:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1413:14:71::1;1430:9;1413:26;;1468:28;1489:6;1468:9;:16;1478:5;1468:16;;;;;;;;;;;;;;;;:20;;:28;;;;:::i;:::-;1449:9;:16;1459:5;1449:16;;;;;;;;;;;;;;;:47;;;;1522:5;1512:24;;;1529:6;1512:24;;;;;;;;;;;;;;;;;;1330:1:7;1338:205:71::0;:::o;2048:391:104:-;2162:6;2145:4;2137:21;;;:31;;2129:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2291:12;2309:9;:14;;2332:6;2309:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2290:54;;;2362:7;2354:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2048:391;;;:::o;874:176:17:-;932:7;951:9;967:1;963;:5;951:17;;991:1;986;:6;;978:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1042:1;1035:8;;;874:176;;;;:::o",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address payable",
          "name": "beneficiary",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "payee",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "weiAmount",
          "type": "uint256"
        }
      ],
      "name": "Deposited",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [],
      "name": "RefundsClosed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [],
      "name": "RefundsEnabled",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "payee",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "weiAmount",
          "type": "uint256"
        }
      ],
      "name": "Withdrawn",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "beneficiary",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "beneficiaryWithdraw",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "close",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "refundee",
          "type": "address"
        }
      ],
      "name": "deposit",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "payee",
          "type": "address"
        }
      ],
      "name": "depositsOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "enableRefunds",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "state",
      "outputs": [
        {
          "internalType": "enum RefundEscrow.State",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address payable",
          "name": "payee",
          "type": "address"
        }
      ],
      "name": "withdraw",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "withdrawalAllowed",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "ast": {
    "absolutePath": "contracts/payment/escrow/RefundEscrow.sol",
    "exportedSymbols": {
      "RefundEscrow": [
        6822
      ]
    },
    "id": 6823,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 6655,
        "literals": [
          "solidity",
          "^",
          "0.7",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "33:23:72"
      },
      {
        "absolutePath": "contracts/payment/escrow/ConditionalEscrow.sol",
        "file": "./ConditionalEscrow.sol",
        "id": 6656,
        "nodeType": "ImportDirective",
        "scope": 6823,
        "sourceUnit": 6549,
        "src": "58:33:72",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 6658,
              "name": "ConditionalEscrow",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6548,
              "src": "598:17:72",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ConditionalEscrow_$6548",
                "typeString": "contract ConditionalEscrow"
              }
            },
            "id": 6659,
            "nodeType": "InheritanceSpecifier",
            "src": "598:17:72"
          }
        ],
        "contractDependencies": [
          22,
          1576,
          6548,
          6653
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 6657,
          "nodeType": "StructuredDocumentation",
          "src": "93:479:72",
          "text": " @title RefundEscrow\n @dev Escrow that holds funds for a beneficiary, deposited from multiple\n parties.\n @dev Intended usage: See {Escrow}. Same usage guidelines apply here.\n @dev The owner account (that is, the contract that instantiates this\n contract) may deposit, close the deposit period, and allow for either\n withdrawal by the beneficiary, or refunds to the depositors. All interactions\n with `RefundEscrow` will be made through the owner contract."
        },
        "fullyImplemented": true,
        "id": 6822,
        "linearizedBaseContracts": [
          6822,
          6548,
          6653,
          1576,
          22
        ],
        "name": "RefundEscrow",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "canonicalName": "RefundEscrow.State",
            "id": 6663,
            "members": [
              {
                "id": 6660,
                "name": "Active",
                "nodeType": "EnumValue",
                "src": "635:6:72"
              },
              {
                "id": 6661,
                "name": "Refunding",
                "nodeType": "EnumValue",
                "src": "643:9:72"
              },
              {
                "id": 6662,
                "name": "Closed",
                "nodeType": "EnumValue",
                "src": "654:6:72"
              }
            ],
            "name": "State",
            "nodeType": "EnumDefinition",
            "src": "622:40:72"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 6665,
            "name": "RefundsClosed",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 6664,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "687:2:72"
            },
            "src": "668:22:72"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 6667,
            "name": "RefundsEnabled",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 6666,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "715:2:72"
            },
            "src": "695:23:72"
          },
          {
            "constant": false,
            "id": 6669,
            "mutability": "mutable",
            "name": "_state",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 6822,
            "src": "724:20:72",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_enum$_State_$6663",
              "typeString": "enum RefundEscrow.State"
            },
            "typeName": {
              "contractScope": null,
              "id": 6668,
              "name": "State",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 6663,
              "src": "724:5:72",
              "typeDescriptions": {
                "typeIdentifier": "t_enum$_State_$6663",
                "typeString": "enum RefundEscrow.State"
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 6671,
            "mutability": "mutable",
            "name": "_beneficiary",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 6822,
            "src": "750:36:72",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address_payable",
              "typeString": "address payable"
            },
            "typeName": {
              "id": 6670,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "750:15:72",
              "stateMutability": "payable",
              "typeDescriptions": {
                "typeIdentifier": "t_address_payable",
                "typeString": "address payable"
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 6696,
              "nodeType": "Block",
              "src": "935:167:72",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        "id": 6683,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 6678,
                          "name": "beneficiary",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6674,
                          "src": "953:11:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 6681,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "976:1:72",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              }
                            ],
                            "id": 6680,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "968:7:72",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 6679,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "968:7:72",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 6682,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "968:10:72",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "src": "953:25:72",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "526566756e64457363726f773a2062656e656669636961727920697320746865207a65726f2061646472657373",
                        "id": 6684,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "980:47:72",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8a77d0d3ca4410791e8781774e7ba61ae1755bbb27066c5d9f65089e2c7a8f1d",
                          "typeString": "literal_string \"RefundEscrow: beneficiary is the zero address\""
                        },
                        "value": "RefundEscrow: beneficiary is the zero address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8a77d0d3ca4410791e8781774e7ba61ae1755bbb27066c5d9f65089e2c7a8f1d",
                          "typeString": "literal_string \"RefundEscrow: beneficiary is the zero address\""
                        }
                      ],
                      "id": 6677,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "945:7:72",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6685,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "945:83:72",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6686,
                  "nodeType": "ExpressionStatement",
                  "src": "945:83:72"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6689,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 6687,
                      "name": "_beneficiary",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6671,
                      "src": "1038:12:72",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 6688,
                      "name": "beneficiary",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6674,
                      "src": "1053:11:72",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "1038:26:72",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "id": 6690,
                  "nodeType": "ExpressionStatement",
                  "src": "1038:26:72"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6694,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 6691,
                      "name": "_state",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6669,
                      "src": "1074:6:72",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_State_$6663",
                        "typeString": "enum RefundEscrow.State"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 6692,
                        "name": "State",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6663,
                        "src": "1083:5:72",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_State_$6663_$",
                          "typeString": "type(enum RefundEscrow.State)"
                        }
                      },
                      "id": 6693,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "Active",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "1083:12:72",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_State_$6663",
                        "typeString": "enum RefundEscrow.State"
                      }
                    },
                    "src": "1074:21:72",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_State_$6663",
                      "typeString": "enum RefundEscrow.State"
                    }
                  },
                  "id": 6695,
                  "nodeType": "ExpressionStatement",
                  "src": "1074:21:72"
                }
              ]
            },
            "documentation": {
              "id": 6672,
              "nodeType": "StructuredDocumentation",
              "src": "793:95:72",
              "text": " @dev Constructor.\n @param beneficiary The beneficiary of the deposits."
            },
            "id": 6697,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6675,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6674,
                  "mutability": "mutable",
                  "name": "beneficiary",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6697,
                  "src": "906:27:72",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 6673,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "906:15:72",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "905:29:72"
            },
            "returnParameters": {
              "id": 6676,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "935:0:72"
            },
            "scope": 6822,
            "src": "893:209:72",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6705,
              "nodeType": "Block",
              "src": "1217:30:72",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6703,
                    "name": "_state",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 6669,
                    "src": "1234:6:72",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_State_$6663",
                      "typeString": "enum RefundEscrow.State"
                    }
                  },
                  "functionReturnParameters": 6702,
                  "id": 6704,
                  "nodeType": "Return",
                  "src": "1227:13:72"
                }
              ]
            },
            "documentation": {
              "id": 6698,
              "nodeType": "StructuredDocumentation",
              "src": "1108:59:72",
              "text": " @return The current state of the escrow."
            },
            "functionSelector": "c19d93fb",
            "id": 6706,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "state",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6699,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1186:2:72"
            },
            "returnParameters": {
              "id": 6702,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6701,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6706,
                  "src": "1210:5:72",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_State_$6663",
                    "typeString": "enum RefundEscrow.State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 6700,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 6663,
                    "src": "1210:5:72",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_State_$6663",
                      "typeString": "enum RefundEscrow.State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1209:7:72"
            },
            "scope": 6822,
            "src": "1172:75:72",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6714,
              "nodeType": "Block",
              "src": "1368:36:72",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6712,
                    "name": "_beneficiary",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 6671,
                    "src": "1385:12:72",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "functionReturnParameters": 6711,
                  "id": 6713,
                  "nodeType": "Return",
                  "src": "1378:19:72"
                }
              ]
            },
            "documentation": {
              "id": 6707,
              "nodeType": "StructuredDocumentation",
              "src": "1253:57:72",
              "text": " @return The beneficiary of the escrow."
            },
            "functionSelector": "38af3eed",
            "id": 6715,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "beneficiary",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6708,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1335:2:72"
            },
            "returnParameters": {
              "id": 6711,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6710,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6715,
                  "src": "1359:7:72",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6709,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1359:7:72",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1358:9:72"
            },
            "scope": 6822,
            "src": "1315:89:72",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              6620
            ],
            "body": {
              "id": 6736,
              "nodeType": "Block",
              "src": "1623:128:72",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_enum$_State_$6663",
                          "typeString": "enum RefundEscrow.State"
                        },
                        "id": 6726,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 6723,
                          "name": "_state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6669,
                          "src": "1641:6:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_State_$6663",
                            "typeString": "enum RefundEscrow.State"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 6724,
                            "name": "State",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6663,
                            "src": "1651:5:72",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_State_$6663_$",
                              "typeString": "type(enum RefundEscrow.State)"
                            }
                          },
                          "id": 6725,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "Active",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1651:12:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_State_$6663",
                            "typeString": "enum RefundEscrow.State"
                          }
                        },
                        "src": "1641:22:72",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "526566756e64457363726f773a2063616e206f6e6c79206465706f736974207768696c6520616374697665",
                        "id": 6727,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1665:45:72",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_65d2eddec03fda23f4156a228b50726cf2ff6928b71d9dbcbc2607b547d1e19f",
                          "typeString": "literal_string \"RefundEscrow: can only deposit while active\""
                        },
                        "value": "RefundEscrow: can only deposit while active"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_65d2eddec03fda23f4156a228b50726cf2ff6928b71d9dbcbc2607b547d1e19f",
                          "typeString": "literal_string \"RefundEscrow: can only deposit while active\""
                        }
                      ],
                      "id": 6722,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1633:7:72",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6728,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1633:78:72",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6729,
                  "nodeType": "ExpressionStatement",
                  "src": "1633:78:72"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 6733,
                        "name": "refundee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6718,
                        "src": "1735:8:72",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 6730,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -25,
                        "src": "1721:5:72",
                        "typeDescriptions": {
                          "typeIdentifier": "t_super$_RefundEscrow_$6822",
                          "typeString": "contract super RefundEscrow"
                        }
                      },
                      "id": 6732,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "deposit",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6620,
                      "src": "1721:13:72",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 6734,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1721:23:72",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6735,
                  "nodeType": "ExpressionStatement",
                  "src": "1721:23:72"
                }
              ]
            },
            "documentation": {
              "id": 6716,
              "nodeType": "StructuredDocumentation",
              "src": "1410:141:72",
              "text": " @dev Stores funds that may later be refunded.\n @param refundee The address funds will be sent to if a refund occurs."
            },
            "functionSelector": "f340fa01",
            "id": 6737,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "deposit",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 6720,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "1614:8:72"
            },
            "parameters": {
              "id": 6719,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6718,
                  "mutability": "mutable",
                  "name": "refundee",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6737,
                  "src": "1573:16:72",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6717,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1573:7:72",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1572:18:72"
            },
            "returnParameters": {
              "id": 6721,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1623:0:72"
            },
            "scope": 6822,
            "src": "1556:195:72",
            "stateMutability": "payable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6759,
              "nodeType": "Block",
              "src": "1914:154:72",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_enum$_State_$6663",
                          "typeString": "enum RefundEscrow.State"
                        },
                        "id": 6747,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 6744,
                          "name": "_state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6669,
                          "src": "1932:6:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_State_$6663",
                            "typeString": "enum RefundEscrow.State"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 6745,
                            "name": "State",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6663,
                            "src": "1942:5:72",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_State_$6663_$",
                              "typeString": "type(enum RefundEscrow.State)"
                            }
                          },
                          "id": 6746,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "Active",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "1942:12:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_State_$6663",
                            "typeString": "enum RefundEscrow.State"
                          }
                        },
                        "src": "1932:22:72",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "526566756e64457363726f773a2063616e206f6e6c7920636c6f7365207768696c6520616374697665",
                        "id": 6748,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1956:43:72",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8b57f36bbfb6b8cf96de8737d30d9d1cbc0f0335b9d71ea7602e79c09a766100",
                          "typeString": "literal_string \"RefundEscrow: can only close while active\""
                        },
                        "value": "RefundEscrow: can only close while active"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8b57f36bbfb6b8cf96de8737d30d9d1cbc0f0335b9d71ea7602e79c09a766100",
                          "typeString": "literal_string \"RefundEscrow: can only close while active\""
                        }
                      ],
                      "id": 6743,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1924:7:72",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6749,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1924:76:72",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6750,
                  "nodeType": "ExpressionStatement",
                  "src": "1924:76:72"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6754,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 6751,
                      "name": "_state",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6669,
                      "src": "2010:6:72",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_State_$6663",
                        "typeString": "enum RefundEscrow.State"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 6752,
                        "name": "State",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6663,
                        "src": "2019:5:72",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_State_$6663_$",
                          "typeString": "type(enum RefundEscrow.State)"
                        }
                      },
                      "id": 6753,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "Closed",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "2019:12:72",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_State_$6663",
                        "typeString": "enum RefundEscrow.State"
                      }
                    },
                    "src": "2010:21:72",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_State_$6663",
                      "typeString": "enum RefundEscrow.State"
                    }
                  },
                  "id": 6755,
                  "nodeType": "ExpressionStatement",
                  "src": "2010:21:72"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 6756,
                      "name": "RefundsClosed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6665,
                      "src": "2046:13:72",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 6757,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2046:15:72",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6758,
                  "nodeType": "EmitStatement",
                  "src": "2041:20:72"
                }
              ]
            },
            "documentation": {
              "id": 6738,
              "nodeType": "StructuredDocumentation",
              "src": "1757:110:72",
              "text": " @dev Allows for the beneficiary to withdraw their funds, rejecting\n further deposits."
            },
            "functionSelector": "43d726d6",
            "id": 6760,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 6741,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 6740,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1525,
                  "src": "1896:9:72",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1896:9:72"
              }
            ],
            "name": "close",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6739,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1886:2:72"
            },
            "returnParameters": {
              "id": 6742,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1914:0:72"
            },
            "scope": 6822,
            "src": "1872:196:72",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6782,
              "nodeType": "Block",
              "src": "2214:167:72",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_enum$_State_$6663",
                          "typeString": "enum RefundEscrow.State"
                        },
                        "id": 6770,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 6767,
                          "name": "_state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6669,
                          "src": "2232:6:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_State_$6663",
                            "typeString": "enum RefundEscrow.State"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 6768,
                            "name": "State",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6663,
                            "src": "2242:5:72",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_State_$6663_$",
                              "typeString": "type(enum RefundEscrow.State)"
                            }
                          },
                          "id": 6769,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "Active",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "2242:12:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_State_$6663",
                            "typeString": "enum RefundEscrow.State"
                          }
                        },
                        "src": "2232:22:72",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "526566756e64457363726f773a2063616e206f6e6c7920656e61626c6520726566756e6473207768696c6520616374697665",
                        "id": 6771,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2256:52:72",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c983cde4805ee52cdf0ba0ddf13817bc95474a21a1151fc5899abaab3f302200",
                          "typeString": "literal_string \"RefundEscrow: can only enable refunds while active\""
                        },
                        "value": "RefundEscrow: can only enable refunds while active"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c983cde4805ee52cdf0ba0ddf13817bc95474a21a1151fc5899abaab3f302200",
                          "typeString": "literal_string \"RefundEscrow: can only enable refunds while active\""
                        }
                      ],
                      "id": 6766,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2224:7:72",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6772,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2224:85:72",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6773,
                  "nodeType": "ExpressionStatement",
                  "src": "2224:85:72"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 6777,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 6774,
                      "name": "_state",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6669,
                      "src": "2319:6:72",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_State_$6663",
                        "typeString": "enum RefundEscrow.State"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 6775,
                        "name": "State",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6663,
                        "src": "2328:5:72",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_State_$6663_$",
                          "typeString": "type(enum RefundEscrow.State)"
                        }
                      },
                      "id": 6776,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "Refunding",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "2328:15:72",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_State_$6663",
                        "typeString": "enum RefundEscrow.State"
                      }
                    },
                    "src": "2319:24:72",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_State_$6663",
                      "typeString": "enum RefundEscrow.State"
                    }
                  },
                  "id": 6778,
                  "nodeType": "ExpressionStatement",
                  "src": "2319:24:72"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 6779,
                      "name": "RefundsEnabled",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6667,
                      "src": "2358:14:72",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 6780,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2358:16:72",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6781,
                  "nodeType": "EmitStatement",
                  "src": "2353:21:72"
                }
              ]
            },
            "documentation": {
              "id": 6761,
              "nodeType": "StructuredDocumentation",
              "src": "2074:85:72",
              "text": " @dev Allows for refunds to take place, rejecting further deposits."
            },
            "functionSelector": "8c52dc41",
            "id": 6783,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 6764,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 6763,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1525,
                  "src": "2196:9:72",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2196:9:72"
              }
            ],
            "name": "enableRefunds",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6762,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2186:2:72"
            },
            "returnParameters": {
              "id": 6765,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2214:0:72"
            },
            "scope": 6822,
            "src": "2164:217:72",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "body": {
              "id": 6805,
              "nodeType": "Block",
              "src": "2496:162:72",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_enum$_State_$6663",
                          "typeString": "enum RefundEscrow.State"
                        },
                        "id": 6791,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 6788,
                          "name": "_state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 6669,
                          "src": "2514:6:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_State_$6663",
                            "typeString": "enum RefundEscrow.State"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 6789,
                            "name": "State",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 6663,
                            "src": "2524:5:72",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_State_$6663_$",
                              "typeString": "type(enum RefundEscrow.State)"
                            }
                          },
                          "id": 6790,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "Closed",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "2524:12:72",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_State_$6663",
                            "typeString": "enum RefundEscrow.State"
                          }
                        },
                        "src": "2514:22:72",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "526566756e64457363726f773a2062656e65666963696172792063616e206f6e6c79207769746864726177207768696c6520636c6f736564",
                        "id": 6792,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2538:58:72",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_01d94a28ecd337ff4054022bb41ef2363cd1a92d1c775148e2e03f86b6e5dabc",
                          "typeString": "literal_string \"RefundEscrow: beneficiary can only withdraw while closed\""
                        },
                        "value": "RefundEscrow: beneficiary can only withdraw while closed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_01d94a28ecd337ff4054022bb41ef2363cd1a92d1c775148e2e03f86b6e5dabc",
                          "typeString": "literal_string \"RefundEscrow: beneficiary can only withdraw while closed\""
                        }
                      ],
                      "id": 6787,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2506:7:72",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 6793,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2506:91:72",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6794,
                  "nodeType": "ExpressionStatement",
                  "src": "2506:91:72"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 6800,
                              "name": "this",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -28,
                              "src": "2637:4:72",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_RefundEscrow_$6822",
                                "typeString": "contract RefundEscrow"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_RefundEscrow_$6822",
                                "typeString": "contract RefundEscrow"
                              }
                            ],
                            "id": 6799,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2629:7:72",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 6798,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "2629:7:72",
                              "typeDescriptions": {
                                "typeIdentifier": null,
                                "typeString": null
                              }
                            }
                          },
                          "id": 6801,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2629:13:72",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 6802,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "balance",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "2629:21:72",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 6795,
                        "name": "_beneficiary",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6671,
                        "src": "2607:12:72",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "id": 6797,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "2607:21:72",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 6803,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2607:44:72",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 6804,
                  "nodeType": "ExpressionStatement",
                  "src": "2607:44:72"
                }
              ]
            },
            "documentation": {
              "id": 6784,
              "nodeType": "StructuredDocumentation",
              "src": "2387:58:72",
              "text": " @dev Withdraws the beneficiary's funds."
            },
            "functionSelector": "9af6549a",
            "id": 6806,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "beneficiaryWithdraw",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 6785,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2478:2:72"
            },
            "returnParameters": {
              "id": 6786,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2496:0:72"
            },
            "scope": 6822,
            "src": "2450:208:72",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              6527
            ],
            "body": {
              "id": 6820,
              "nodeType": "Block",
              "src": "2961:49:72",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_State_$6663",
                      "typeString": "enum RefundEscrow.State"
                    },
                    "id": 6818,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 6815,
                      "name": "_state",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 6669,
                      "src": "2978:6:72",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_State_$6663",
                        "typeString": "enum RefundEscrow.State"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 6816,
                        "name": "State",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6663,
                        "src": "2988:5:72",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_State_$6663_$",
                          "typeString": "type(enum RefundEscrow.State)"
                        }
                      },
                      "id": 6817,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "Refunding",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "2988:15:72",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_State_$6663",
                        "typeString": "enum RefundEscrow.State"
                      }
                    },
                    "src": "2978:25:72",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 6814,
                  "id": 6819,
                  "nodeType": "Return",
                  "src": "2971:32:72"
                }
              ]
            },
            "documentation": {
              "id": 6807,
              "nodeType": "StructuredDocumentation",
              "src": "2664:220:72",
              "text": " @dev Returns whether refundees can withdraw their deposits (be refunded). The overridden function receives a\n 'payee' argument, but we ignore it here since the condition is global, not per-payee."
            },
            "functionSelector": "685ca194",
            "id": 6821,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "withdrawalAllowed",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 6811,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2937:8:72"
            },
            "parameters": {
              "id": 6810,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6809,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6821,
                  "src": "2916:7:72",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 6808,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2916:7:72",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2915:9:72"
            },
            "returnParameters": {
              "id": 6814,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 6813,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 6821,
                  "src": "2955:4:72",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 6812,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2955:4:72",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2954:6:72"
            },
            "scope": 6822,
            "src": "2889:121:72",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "scope": 6823,
        "src": "573:2439:72"
      }
    ],
    "src": "33:2980:72"
  },
  "bytecode": "0x608060405234801561001057600080fd5b506040516116193803806116198339818101604052602081101561003357600080fd5b810190808051906020019092919050505060006100546101e360201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610178576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001806115ec602d913960400191505060405180910390fd5b80600260016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260006101000a81548160ff021916908360028111156101d857fe5b0217905550506101eb565b600033905090565b6113f2806101fa6000396000f3fe6080604052600436106100a75760003560e01c80638da5cb5b116100645780638da5cb5b146101ea5780639af6549a1461022b578063c19d93fb14610242578063e3a9db1a14610278578063f2fde38b146102dd578063f340fa011461032e576100a7565b806338af3eed146100ac57806343d726d6146100ed57806351cff8d914610104578063685ca19414610155578063715018a6146101bc5780638c52dc41146101d3575b600080fd5b3480156100b857600080fd5b506100c1610372565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156100f957600080fd5b5061010261039c565b005b34801561011057600080fd5b506101536004803603602081101561012757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610533565b005b34801561016157600080fd5b506101a46004803603602081101561017857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061059d565b60405180821515815260200191505060405180910390f35b3480156101c857600080fd5b506101d16105cf565b005b3480156101df57600080fd5b506101e8610755565b005b3480156101f657600080fd5b506101ff6108ed565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561023757600080fd5b50610240610916565b005b34801561024e57600080fd5b50610257610a15565b6040518082600281111561026757fe5b815260200191505060405180910390f35b34801561028457600080fd5b506102c76004803603602081101561029b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610a2c565b6040518082815260200191505060405180910390f35b3480156102e957600080fd5b5061032c6004803603602081101561030057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610a75565b005b6103706004803603602081101561034457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610c80565b005b6000600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6103a4610d0a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610464576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600281111561047157fe5b600260009054906101000a900460ff16600281111561048c57fe5b146104e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806113626029913960400191505060405180910390fd5b60028060006101000a81548160ff0219169083600281111561050057fe5b02179055507f088672c3a6e342f7cd94a65ba63b79df24a8973927b4d05d803c44bbf787d12f60405160405180910390a1565b61053c8161059d565b610591576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603381526020018061132f6033913960400191505060405180910390fd5b61059a81610d12565b50565b6000600160028111156105ac57fe5b600260009054906101000a900460ff1660028111156105c757fe5b149050919050565b6105d7610d0a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610697576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61075d610d0a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461081d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600281111561082a57fe5b600260009054906101000a900460ff16600281111561084557fe5b1461089b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603281526020018061138b6032913960400191505060405180910390fd5b6001600260006101000a81548160ff021916908360028111156108ba57fe5b02179055507f599d8e5a83cffb867d051598c4d70e805d59802d8081c1c7d6dffc5b6aca2b8960405160405180910390a1565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60028081111561092257fe5b600260009054906101000a900460ff16600281111561093d57fe5b14610993576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603881526020018061126c6038913960400191505060405180910390fd5b600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050158015610a12573d6000803e3d6000fd5b50565b6000600260009054906101000a900460ff16905090565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a7d610d0a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b3d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610bc3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806112a46026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006002811115610c8d57fe5b600260009054906101000a900460ff166002811115610ca857fe5b14610cfe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180611304602b913960400191505060405180910390fd5b610d0781610ede565b50565b600033905090565b610d1a610d0a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dda576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610e8c818373ffffffffffffffffffffffffffffffffffffffff1661109290919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5826040518082815260200191505060405180910390a25050565b610ee6610d0a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fa6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000349050610ffd81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111e390919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff167f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4826040518082815260200191505060405180910390a25050565b803073ffffffffffffffffffffffffffffffffffffffff1631101561111f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a20696e73756666696369656e742062616c616e636500000081525060200191505060405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405180600001905060006040518083038185875af1925050503d806000811461117f576040519150601f19603f3d011682016040523d82523d6000602084013e611184565b606091505b50509050806111de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a8152602001806112ca603a913960400191505060405180910390fd5b505050565b600080828401905083811015611261576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b809150509291505056fe526566756e64457363726f773a2062656e65666963696172792063616e206f6e6c79207769746864726177207768696c6520636c6f7365644f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d61792068617665207265766572746564526566756e64457363726f773a2063616e206f6e6c79206465706f736974207768696c6520616374697665436f6e646974696f6e616c457363726f773a207061796565206973206e6f7420616c6c6f77656420746f207769746864726177526566756e64457363726f773a2063616e206f6e6c7920636c6f7365207768696c6520616374697665526566756e64457363726f773a2063616e206f6e6c7920656e61626c6520726566756e6473207768696c6520616374697665a26469706673582212202faed144de0cbfbf726a6ff107346fe89778733f9ea5a5810de0393ea96118a864736f6c63430007000033526566756e64457363726f773a2062656e656669636961727920697320746865207a65726f2061646472657373",
  "deployedBytecode": "0x6080604052600436106100a75760003560e01c80638da5cb5b116100645780638da5cb5b146101ea5780639af6549a1461022b578063c19d93fb14610242578063e3a9db1a14610278578063f2fde38b146102dd578063f340fa011461032e576100a7565b806338af3eed146100ac57806343d726d6146100ed57806351cff8d914610104578063685ca19414610155578063715018a6146101bc5780638c52dc41146101d3575b600080fd5b3480156100b857600080fd5b506100c1610372565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156100f957600080fd5b5061010261039c565b005b34801561011057600080fd5b506101536004803603602081101561012757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610533565b005b34801561016157600080fd5b506101a46004803603602081101561017857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061059d565b60405180821515815260200191505060405180910390f35b3480156101c857600080fd5b506101d16105cf565b005b3480156101df57600080fd5b506101e8610755565b005b3480156101f657600080fd5b506101ff6108ed565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561023757600080fd5b50610240610916565b005b34801561024e57600080fd5b50610257610a15565b6040518082600281111561026757fe5b815260200191505060405180910390f35b34801561028457600080fd5b506102c76004803603602081101561029b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610a2c565b6040518082815260200191505060405180910390f35b3480156102e957600080fd5b5061032c6004803603602081101561030057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610a75565b005b6103706004803603602081101561034457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610c80565b005b6000600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6103a4610d0a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610464576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600281111561047157fe5b600260009054906101000a900460ff16600281111561048c57fe5b146104e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806113626029913960400191505060405180910390fd5b60028060006101000a81548160ff0219169083600281111561050057fe5b02179055507f088672c3a6e342f7cd94a65ba63b79df24a8973927b4d05d803c44bbf787d12f60405160405180910390a1565b61053c8161059d565b610591576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603381526020018061132f6033913960400191505060405180910390fd5b61059a81610d12565b50565b6000600160028111156105ac57fe5b600260009054906101000a900460ff1660028111156105c757fe5b149050919050565b6105d7610d0a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610697576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61075d610d0a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461081d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600281111561082a57fe5b600260009054906101000a900460ff16600281111561084557fe5b1461089b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603281526020018061138b6032913960400191505060405180910390fd5b6001600260006101000a81548160ff021916908360028111156108ba57fe5b02179055507f599d8e5a83cffb867d051598c4d70e805d59802d8081c1c7d6dffc5b6aca2b8960405160405180910390a1565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60028081111561092257fe5b600260009054906101000a900460ff16600281111561093d57fe5b14610993576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603881526020018061126c6038913960400191505060405180910390fd5b600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050158015610a12573d6000803e3d6000fd5b50565b6000600260009054906101000a900460ff16905090565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a7d610d0a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b3d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610bc3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806112a46026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006002811115610c8d57fe5b600260009054906101000a900460ff166002811115610ca857fe5b14610cfe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180611304602b913960400191505060405180910390fd5b610d0781610ede565b50565b600033905090565b610d1a610d0a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dda576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610e8c818373ffffffffffffffffffffffffffffffffffffffff1661109290919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5826040518082815260200191505060405180910390a25050565b610ee6610d0a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fa6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000349050610ffd81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111e390919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff167f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4826040518082815260200191505060405180910390a25050565b803073ffffffffffffffffffffffffffffffffffffffff1631101561111f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a20696e73756666696369656e742062616c616e636500000081525060200191505060405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405180600001905060006040518083038185875af1925050503d806000811461117f576040519150601f19603f3d011682016040523d82523d6000602084013e611184565b606091505b50509050806111de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a8152602001806112ca603a913960400191505060405180910390fd5b505050565b600080828401905083811015611261576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b809150509291505056fe526566756e64457363726f773a2062656e65666963696172792063616e206f6e6c79207769746864726177207768696c6520636c6f7365644f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d61792068617665207265766572746564526566756e64457363726f773a2063616e206f6e6c79206465706f736974207768696c6520616374697665436f6e646974696f6e616c457363726f773a207061796565206973206e6f7420616c6c6f77656420746f207769746864726177526566756e64457363726f773a2063616e206f6e6c7920636c6f7365207768696c6520616374697665526566756e64457363726f773a2063616e206f6e6c7920656e61626c6520726566756e6473207768696c6520616374697665a26469706673582212202faed144de0cbfbf726a6ff107346fe89778733f9ea5a5810de0393ea96118a864736f6c63430007000033",
  "compiler": {
    "name": "solc",
    "version": "0.7.0+commit.9e61f92b.Emscripten.clang",
    "optimizer": {
      "enabled": false,
      "runs": 200
    },
    "evmVersion": "petersburg"
  }
}
