{
  "fileName": "Escrow.sol",
  "contractName": "EscrowUpgradeSafe",
  "source": "pragma solidity ^0.6.0;\n\nimport \"../../math/SafeMath.sol\";\nimport \"../../access/Ownable.sol\";\nimport \"../../utils/Address.sol\";\nimport \"../../Initializable.sol\";\n\n /**\n  * @title Escrow\n  * @dev Base escrow contract, holds funds designated for a payee until they\n  * withdraw them.\n  *\n  * Intended usage: This contract (and derived escrow contracts) should be a\n  * standalone contract, that only interacts with the contract that instantiated\n  * it. That way, it is guaranteed that all Ether will be handled according to\n  * the `Escrow` rules, and there is no need to check for payable functions or\n  * transfers in the inheritance tree. The contract that uses the escrow as its\n  * payment method should be its owner, and provide public methods redirecting\n  * to the escrow's deposit and withdraw.\n  */\ncontract EscrowUpgradeSafe is Initializable, OwnableUpgradeSafe {\n    function initialize() public {\n        __Escrow_init();\n    }\n\n    function __Escrow_init() internal initializer {\n        __Context_init_unchained();\n        __Ownable_init_unchained();\n        __Escrow_init_unchained();\n    }\n\n    function __Escrow_init_unchained() internal initializer {\n\n\n    }\n\n    using SafeMath for uint256;\n    using Address for address payable;\n\n    event Deposited(address indexed payee, uint256 weiAmount);\n    event Withdrawn(address indexed payee, uint256 weiAmount);\n\n    mapping(address => uint256) private _deposits;\n\n    function depositsOf(address payee) public view returns (uint256) {\n        return _deposits[payee];\n    }\n\n    /**\n     * @dev Stores the sent amount as credit to be withdrawn.\n     * @param payee The destination address of the funds.\n     */\n    function deposit(address payee) public virtual payable onlyOwner {\n        uint256 amount = msg.value;\n        _deposits[payee] = _deposits[payee].add(amount);\n\n        emit Deposited(payee, amount);\n    }\n\n    /**\n     * @dev Withdraw accumulated balance for a payee, forwarding all gas to the\n     * recipient.\n     *\n     * WARNING: Forwarding all gas opens the door to reentrancy vulnerabilities.\n     * Make sure you trust the recipient, or are either following the\n     * checks-effects-interactions pattern or using {ReentrancyGuard}.\n     *\n     * @param payee The address whose funds will be withdrawn and transferred to.\n     */\n    function withdraw(address payable payee) public virtual onlyOwner {\n        uint256 payment = _deposits[payee];\n\n        _deposits[payee] = 0;\n\n        payee.sendValue(payment);\n\n        emit Withdrawn(payee, payment);\n    }\n\n    uint256[49] private __gap;\n}\n",
  "sourcePath": "contracts/payment/escrow/Escrow.sol",
  "sourceMap": "808:1773:74:-:0;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;808:1773:74;;;;;;;",
  "deployedSourceMap": "808:1773:74:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;2323:224:74;;5:9:-1;2:2;;;27:1;24;17:12;2:2;2323:224:74;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;2323:224:74;-1:-1:-1;;;;;2323:224:74;;:::i;:::-;;1894:145:8;;5:9:-1;2:2;;;27:1;24;17:12;2:2;1894:145:8;;;:::i;878:61:74:-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;878:61:74;;;:::i;1271:77:8:-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;1271:77:8;;;:::i;:::-;;;;-1:-1:-1;;;;;1271:77:8;;;;;;;;;;;;;;1433:105:74;;5:9:-1;2:2;;;27:1;24;17:12;2:2;1433:105:74;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1433:105:74;-1:-1:-1;;;;;1433:105:74;;:::i;:::-;;;;;;;;;;;;;;;;2188:240:8;;5:9:-1;2:2;;;27:1;24;17:12;2:2;2188:240:8;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;2188:240:8;-1:-1:-1;;;;;2188:240:8;;:::i;1680:205:74:-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1680:205:74;-1:-1:-1;;;;;1680:205:74;;:::i;2323:224::-;1485:12:8;:10;:12::i;:::-;1475:6;;-1:-1:-1;;;;;1475:22:8;;;:6;;:22;1467:67;;;;;-1:-1:-1;;;1467:67:8;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1467:67:8;;;;;;;;;;;;;;;-1:-1:-1;;;;;2417:16:74;::::1;2399:15;2417:16:::0;;;:9:::1;:16;::::0;;;;;;2444:20;;;2417:16;2475:24:::1;::::0;2417:16;2475:15:::1;:24::i;:::-;2515:25;::::0;;;;;;;-1:-1:-1;;;;;2515:25:74;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;::::1;1544:1:8;2323:224:74::0;:::o;1894:145:8:-;1485:12;:10;:12::i;:::-;1475:6;;-1:-1:-1;;;;;1475:22:8;;;:6;;:22;1467:67;;;;;-1:-1:-1;;;1467:67:8;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1467:67:8;;;;;;;;;;;;;;;1984:6:::1;::::0;1963:40:::1;::::0;2000:1:::1;::::0;-1:-1:-1;;;;;1984:6:8::1;::::0;1963:40:::1;::::0;2000:1;;1963:40:::1;2013:6;:19:::0;;-1:-1:-1;;;;;;2013:19:8::1;::::0;;1894:145::o;878:61:74:-;917:15;:13;:15::i;:::-;878:61::o;1271:77:8:-;1335:6;;-1:-1:-1;;;;;1335:6:8;;1271:77::o;1433:105:74:-;-1:-1:-1;;;;;1515:16:74;1489:7;1515:16;;;:9;:16;;;;;;;1433:105::o;2188:240:8:-;1485:12;:10;:12::i;:::-;1475:6;;-1:-1:-1;;;;;1475:22:8;;;:6;;:22;1467:67;;;;;-1:-1:-1;;;1467:67:8;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1467:67:8;;;;;;;;;;;;;;;-1:-1:-1;;;;;2276:22:8;::::1;2268:73;;;;-1:-1:-1::0;;;2268:73:8::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2377:6;::::0;2356:38:::1;::::0;-1:-1:-1;;;;;2356:38:8;;::::1;::::0;2377:6:::1;::::0;2356:38:::1;::::0;2377:6:::1;::::0;2356:38:::1;2404:6;:17:::0;;-1:-1:-1;;;;;;2404:17:8::1;-1:-1:-1::0;;;;;2404:17:8;;;::::1;::::0;;;::::1;::::0;;2188:240::o;1680:205:74:-;1485:12:8;:10;:12::i;:::-;1475:6;;-1:-1:-1;;;;;1475:22:8;;;:6;;:22;1467:67;;;;;-1:-1:-1;;;1467:67:8;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1467:67:8;;;;;;;;;;;;;;;-1:-1:-1;;;;;1810:16:74;::::1;1755:14;1810:16:::0;;;:9:::1;:16;::::0;;;;;1772:9:::1;::::0;1810:28:::1;::::0;1772:9;1810:20:::1;:28::i;:::-;-1:-1:-1::0;;;;;1791:16:74;::::1;;::::0;;;:9:::1;:16;::::0;;;;;;;;:47;;;;1854:24;;;;;;;1791:16;;1854:24:::1;::::0;;;;;;;::::1;1544:1:8;1680:205:74::0;:::o;931:104:0:-;1018:10;931:104;:::o;2212:391:98:-;2309:4;2301:21;:31;-1:-1:-1;2301:31:98;2293:73;;;;;-1:-1:-1;;;2293:73:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;2473:35;;2455:12;;-1:-1:-1;;;;;2473:14:98;;;2496:6;;2455:12;2473:35;2455:12;2473:35;2496:6;2473:14;:35;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;2454:54:98;;;2526:7;2518:78;;;;-1:-1:-1;;;2518:78:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2212:391;;;:::o;945:160:74:-;1024:12:6;;;;;;;;:31;;;1040:15;:13;:15::i;:::-;1024:47;;;-1:-1:-1;1060:11:6;;;;1059:12;1024:47;1016:106;;;;-1:-1:-1;;;1016:106:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1129:19;1152:12;;;;;;1151:13;1170:80;;;;1198:12;:19;;-1:-1:-1;;;;1198:19:6;;;;;1225:18;1213:4;1225:18;;;1170:80;1001:26:74::1;:24;:26::i;:::-;1037;:24;:26::i;:::-;1073:25;:23;:25::i;:::-;1268:14:6::0;1264:55;;;1307:5;1292:20;;-1:-1:-1;;1292:20:6;;;1264:55;945:160:74;:::o;834:176:19:-;892:7;923:5;;;946:6;;;;938:46;;;;;-1:-1:-1;;;938:46:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;1002:1;834:176;-1:-1:-1;;;834:176:19:o;1409:498:6:-;1820:4;1864:17;1895:7;1409:498;:::o;858:66:0:-;1024:12:6;;;;;;;;:31;;;1040:15;:13;:15::i;:::-;1024:47;;;-1:-1:-1;1060:11:6;;;;1059:12;1024:47;1016:106;;;;-1:-1:-1;;;1016:106:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1129:19;1152:12;;;;;;1151:13;1170:80;;;;1198:12;:19;;-1:-1:-1;;;;1198:19:6;;;;;1225:18;1213:4;1225:18;;;1268:14;1264:55;;;-1:-1:-1;1307:5:6;1292:20;;-1:-1:-1;;1292:20:6;;;858:66:0:o;999:195:8:-;1024:12:6;;;;;;;;:31;;;1040:15;:13;:15::i;:::-;1024:47;;;-1:-1:-1;1060:11:6;;;;1059:12;1024:47;1016:106;;;;-1:-1:-1;;;1016:106:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1129:19;1152:12;;;;;;1151:13;1170:80;;;;1198:12;:19;;-1:-1:-1;;;;1198:19:6;;;;;1225:18;1213:4;1225:18;;;1170:80;1068:17:8::1;1088:12;:10;:12::i;:::-;1110:6;:18:::0;;-1:-1:-1;;;;;;1110:18:8::1;-1:-1:-1::0;;;;;1110:18:8;::::1;::::0;;::::1;::::0;;;1143:43:::1;::::0;1110:18;;-1:-1:-1;1110:18:8;-1:-1:-1;;1143:43:8::1;::::0;-1:-1:-1;;1143:43:8::1;1256:1:6;1268:14:::0;1264:55;;;-1:-1:-1;1307:5:6;1292:20;;-1:-1:-1;;1292:20:6;;;999:195:8:o",
  "abi": [
    {
      "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": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "payee",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "weiAmount",
          "type": "uint256"
        }
      ],
      "name": "Withdrawn",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "payee",
          "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": "initialize",
      "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": [
        {
          "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"
    }
  ],
  "ast": {
    "absolutePath": "contracts/payment/escrow/Escrow.sol",
    "exportedSymbols": {
      "EscrowUpgradeSafe": [
        9041
      ]
    },
    "id": 9042,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 8903,
        "literals": [
          "solidity",
          "^",
          "0.6",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:74"
      },
      {
        "absolutePath": "contracts/math/SafeMath.sol",
        "file": "../../math/SafeMath.sol",
        "id": 8904,
        "nodeType": "ImportDirective",
        "scope": 9042,
        "sourceUnit": 3153,
        "src": "25:33:74",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "contracts/access/Ownable.sol",
        "file": "../../access/Ownable.sol",
        "id": 8905,
        "nodeType": "ImportDirective",
        "scope": 9042,
        "sourceUnit": 1828,
        "src": "59:34:74",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "contracts/utils/Address.sol",
        "file": "../../utils/Address.sol",
        "id": 8906,
        "nodeType": "ImportDirective",
        "scope": 9042,
        "sourceUnit": 13938,
        "src": "94:33:74",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "contracts/Initializable.sol",
        "file": "../../Initializable.sol",
        "id": 8907,
        "nodeType": "ImportDirective",
        "scope": 9042,
        "sourceUnit": 1408,
        "src": "128:33:74",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 8909,
              "name": "Initializable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1407,
              "src": "838:13:74",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Initializable_$1407",
                "typeString": "contract Initializable"
              }
            },
            "id": 8910,
            "nodeType": "InheritanceSpecifier",
            "src": "838:13:74"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 8911,
              "name": "OwnableUpgradeSafe",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1827,
              "src": "853:18:74",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_OwnableUpgradeSafe_$1827",
                "typeString": "contract OwnableUpgradeSafe"
              }
            },
            "id": 8912,
            "nodeType": "InheritanceSpecifier",
            "src": "853:18:74"
          }
        ],
        "contractDependencies": [
          44,
          1407,
          1827
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 8908,
          "nodeType": "StructuredDocumentation",
          "src": "164:643:74",
          "text": "@title Escrow\n@dev Base escrow contract, holds funds designated for a payee until they\nwithdraw them.\n  * Intended usage: This contract (and derived escrow contracts) should be a\nstandalone contract, that only interacts with the contract that instantiated\nit. That way, it is guaranteed that all Ether will be handled according to\nthe `Escrow` rules, and there is no need to check for payable functions or\ntransfers in the inheritance tree. The contract that uses the escrow as its\npayment method should be its owner, and provide public methods redirecting\nto the escrow's deposit and withdraw."
        },
        "fullyImplemented": true,
        "id": 9041,
        "linearizedBaseContracts": [
          9041,
          1827,
          44,
          1407
        ],
        "name": "EscrowUpgradeSafe",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 8918,
              "nodeType": "Block",
              "src": "907:32:74",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 8915,
                      "name": "__Escrow_init",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8934,
                      "src": "917:13:74",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 8916,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "917:15:74",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8917,
                  "nodeType": "ExpressionStatement",
                  "src": "917:15:74"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "8129fc1c",
            "id": 8919,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "initialize",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 8913,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "897:2:74"
            },
            "returnParameters": {
              "id": 8914,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "907:0:74"
            },
            "scope": 9041,
            "src": "878:61:74",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 8933,
              "nodeType": "Block",
              "src": "991:114:74",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 8924,
                      "name": "__Context_init_unchained",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19,
                      "src": "1001:24:74",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 8925,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1001:26:74",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8926,
                  "nodeType": "ExpressionStatement",
                  "src": "1001:26:74"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 8927,
                      "name": "__Ownable_init_unchained",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1750,
                      "src": "1037:24:74",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 8928,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1037:26:74",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8929,
                  "nodeType": "ExpressionStatement",
                  "src": "1037:26:74"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 8930,
                      "name": "__Escrow_init_unchained",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8940,
                      "src": "1073:23:74",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 8931,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1073:25:74",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 8932,
                  "nodeType": "ExpressionStatement",
                  "src": "1073:25:74"
                }
              ]
            },
            "documentation": null,
            "id": 8934,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 8922,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8921,
                  "name": "initializer",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1380,
                  "src": "979:11:74",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "979:11:74"
              }
            ],
            "name": "__Escrow_init",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 8920,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "967:2:74"
            },
            "returnParameters": {
              "id": 8923,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "991:0:74"
            },
            "scope": 9041,
            "src": "945:160:74",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 8939,
              "nodeType": "Block",
              "src": "1167:9:74",
              "statements": []
            },
            "documentation": null,
            "id": 8940,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 8937,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8936,
                  "name": "initializer",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1380,
                  "src": "1155:11:74",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1155:11:74"
              }
            ],
            "name": "__Escrow_init_unchained",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 8935,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1143:2:74"
            },
            "returnParameters": {
              "id": 8938,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1167:0:74"
            },
            "scope": 9041,
            "src": "1111:65:74",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 8943,
            "libraryName": {
              "contractScope": null,
              "id": 8941,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3152,
              "src": "1188:8:74",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$3152",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "1182:27:74",
            "typeName": {
              "id": 8942,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1201:7:74",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "id": 8946,
            "libraryName": {
              "contractScope": null,
              "id": 8944,
              "name": "Address",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 13937,
              "src": "1220:7:74",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Address_$13937",
                "typeString": "library Address"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "1214:34:74",
            "typeName": {
              "id": 8945,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1232:15:74",
              "stateMutability": "payable",
              "typeDescriptions": {
                "typeIdentifier": "t_address_payable",
                "typeString": "address payable"
              }
            }
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 8952,
            "name": "Deposited",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 8951,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8948,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "payee",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8952,
                  "src": "1270:21:74",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8947,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1270:7:74",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8950,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "weiAmount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8952,
                  "src": "1293:17:74",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8949,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1293:7:74",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1269:42:74"
            },
            "src": "1254:58:74"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 8958,
            "name": "Withdrawn",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 8957,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8954,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "payee",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8958,
                  "src": "1333:21:74",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8953,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1333:7:74",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 8956,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "weiAmount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8958,
                  "src": "1356:17:74",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8955,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1356:7:74",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1332:42:74"
            },
            "src": "1317:58:74"
          },
          {
            "constant": false,
            "id": 8962,
            "mutability": "mutable",
            "name": "_deposits",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 9041,
            "src": "1381:45:74",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 8961,
              "keyType": {
                "id": 8959,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1389:7:74",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1381:27:74",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueType": {
                "id": 8960,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1400:7:74",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 8973,
              "nodeType": "Block",
              "src": "1498:40:74",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 8969,
                      "name": "_deposits",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8962,
                      "src": "1515:9:74",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 8971,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 8970,
                      "name": "payee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8964,
                      "src": "1525:5:74",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "1515:16:74",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 8968,
                  "id": 8972,
                  "nodeType": "Return",
                  "src": "1508:23:74"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "e3a9db1a",
            "id": 8974,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "depositsOf",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 8965,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8964,
                  "mutability": "mutable",
                  "name": "payee",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8974,
                  "src": "1453:13:74",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8963,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1453:7:74",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1452:15:74"
            },
            "returnParameters": {
              "id": 8968,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8967,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 8974,
                  "src": "1489:7:74",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 8966,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1489:7:74",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1488:9:74"
            },
            "scope": 9041,
            "src": "1433:105:74",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9003,
              "nodeType": "Block",
              "src": "1745:140:74",
              "statements": [
                {
                  "assignments": [
                    8983
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 8983,
                      "mutability": "mutable",
                      "name": "amount",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 9003,
                      "src": "1755:14:74",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 8982,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "1755:7:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 8986,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 8984,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -15,
                      "src": "1772:3:74",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 8985,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "value",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "1772:9:74",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1755:26:74"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 8996,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 8987,
                        "name": "_deposits",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8962,
                        "src": "1791:9:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 8989,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 8988,
                        "name": "payee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8977,
                        "src": "1801:5:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "1791:16:74",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 8994,
                          "name": "amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 8983,
                          "src": "1831:6:74",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 8990,
                            "name": "_deposits",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8962,
                            "src": "1810:9:74",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 8992,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 8991,
                            "name": "payee",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 8977,
                            "src": "1820:5:74",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "1810:16:74",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 8993,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2985,
                        "src": "1810:20:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 8995,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1810:28:74",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "1791:47:74",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 8997,
                  "nodeType": "ExpressionStatement",
                  "src": "1791:47:74"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 8999,
                        "name": "payee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8977,
                        "src": "1864:5:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9000,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8983,
                        "src": "1871:6:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 8998,
                      "name": "Deposited",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8952,
                      "src": "1854:9:74",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 9001,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1854:24:74",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9002,
                  "nodeType": "EmitStatement",
                  "src": "1849:29:74"
                }
              ]
            },
            "documentation": {
              "id": 8975,
              "nodeType": "StructuredDocumentation",
              "src": "1544:131:74",
              "text": "@dev Stores the sent amount as credit to be withdrawn.\n@param payee The destination address of the funds."
            },
            "functionSelector": "f340fa01",
            "id": 9004,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 8980,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 8979,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1772,
                  "src": "1735:9:74",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1735:9:74"
              }
            ],
            "name": "deposit",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 8978,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8977,
                  "mutability": "mutable",
                  "name": "payee",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9004,
                  "src": "1697:13:74",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 8976,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1697:7:74",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1696:15:74"
            },
            "returnParameters": {
              "id": 8981,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1745:0:74"
            },
            "scope": 9041,
            "src": "1680:205:74",
            "stateMutability": "payable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9035,
              "nodeType": "Block",
              "src": "2389:158:74",
              "statements": [
                {
                  "assignments": [
                    9013
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 9013,
                      "mutability": "mutable",
                      "name": "payment",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 9035,
                      "src": "2399:15:74",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 9012,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "2399:7:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 9017,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 9014,
                      "name": "_deposits",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8962,
                      "src": "2417:9:74",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 9016,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 9015,
                      "name": "payee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9007,
                      "src": "2427:5:74",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "2417:16:74",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2399:34:74"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 9022,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 9018,
                        "name": "_deposits",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 8962,
                        "src": "2444:9:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 9020,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 9019,
                        "name": "payee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9007,
                        "src": "2454:5:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "2444:16:74",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 9021,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2463:1:74",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "2444:20:74",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 9023,
                  "nodeType": "ExpressionStatement",
                  "src": "2444:20:74"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9027,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9013,
                        "src": "2491:7:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 9024,
                        "name": "payee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9007,
                        "src": "2475:5:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "id": 9026,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sendValue",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 13936,
                      "src": "2475:15:74",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_payable_$_t_uint256_$returns$__$bound_to$_t_address_payable_$",
                        "typeString": "function (address payable,uint256)"
                      }
                    },
                    "id": 9028,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2475:24:74",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9029,
                  "nodeType": "ExpressionStatement",
                  "src": "2475:24:74"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9031,
                        "name": "payee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9007,
                        "src": "2525:5:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9032,
                        "name": "payment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9013,
                        "src": "2532:7:74",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 9030,
                      "name": "Withdrawn",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 8958,
                      "src": "2515:9:74",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 9033,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2515:25:74",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9034,
                  "nodeType": "EmitStatement",
                  "src": "2510:30:74"
                }
              ]
            },
            "documentation": {
              "id": 9005,
              "nodeType": "StructuredDocumentation",
              "src": "1891:427:74",
              "text": "@dev Withdraw accumulated balance for a payee, forwarding all gas to the\nrecipient.\n     * WARNING: Forwarding all gas opens the door to reentrancy vulnerabilities.\nMake sure you trust the recipient, or are either following the\nchecks-effects-interactions pattern or using {ReentrancyGuard}.\n     * @param payee The address whose funds will be withdrawn and transferred to."
            },
            "functionSelector": "51cff8d9",
            "id": 9036,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 9010,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9009,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1772,
                  "src": "2379:9:74",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2379:9:74"
              }
            ],
            "name": "withdraw",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 9008,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9007,
                  "mutability": "mutable",
                  "name": "payee",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9036,
                  "src": "2341:21:74",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 9006,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2341:15:74",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2340:23:74"
            },
            "returnParameters": {
              "id": 9011,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2389:0:74"
            },
            "scope": 9041,
            "src": "2323:224:74",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 9040,
            "mutability": "mutable",
            "name": "__gap",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 9041,
            "src": "2553:25:74",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_uint256_$49_storage",
              "typeString": "uint256[49]"
            },
            "typeName": {
              "baseType": {
                "id": 9037,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "2553:7:74",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "id": 9039,
              "length": {
                "argumentTypes": null,
                "hexValue": "3439",
                "id": 9038,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "2561:2:74",
                "subdenomination": null,
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_49_by_1",
                  "typeString": "int_const 49"
                },
                "value": "49"
              },
              "nodeType": "ArrayTypeName",
              "src": "2553:11:74",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_uint256_$49_storage_ptr",
                "typeString": "uint256[49]"
              }
            },
            "value": null,
            "visibility": "private"
          }
        ],
        "scope": 9042,
        "src": "808:1773:74"
      }
    ],
    "src": "0:2582:74"
  },
  "bytecode": "0x608060405234801561001057600080fd5b506109a1806100206000396000f3fe6080604052600436106100705760003560e01c80638da5cb5b1161004e5780638da5cb5b146100d4578063e3a9db1a14610105578063f2fde38b1461014a578063f340fa011461017d57610070565b806351cff8d914610075578063715018a6146100aa5780638129fc1c146100bf575b600080fd5b34801561008157600080fd5b506100a86004803603602081101561009857600080fd5b50356001600160a01b03166101a3565b005b3480156100b657600080fd5b506100a861026c565b3480156100cb57600080fd5b506100a861030e565b3480156100e057600080fd5b506100e9610318565b604080516001600160a01b039092168252519081900360200190f35b34801561011157600080fd5b506101386004803603602081101561012857600080fd5b50356001600160a01b0316610327565b60408051918252519081900360200190f35b34801561015657600080fd5b506100a86004803603602081101561016d57600080fd5b50356001600160a01b0316610342565b6100a86004803603602081101561019357600080fd5b50356001600160a01b031661043b565b6101ab610514565b6065546001600160a01b039081169116146101fb576040805162461bcd60e51b8152602060048201819052602482015260008051602061091e833981519152604482015290519081900360640190fd5b6001600160a01b0381166000818152609760205260408120805491905590610229908263ffffffff61051816565b6040805182815290516001600160a01b038416917f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5919081900360200190a25050565b610274610514565b6065546001600160a01b039081169116146102c4576040805162461bcd60e51b8152602060048201819052602482015260008051602061091e833981519152604482015290519081900360640190fd5b6065546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3606580546001600160a01b0319169055565b610316610603565b565b6065546001600160a01b031690565b6001600160a01b031660009081526097602052604090205490565b61034a610514565b6065546001600160a01b0390811691161461039a576040805162461bcd60e51b8152602060048201819052602482015260008051602061091e833981519152604482015290519081900360640190fd5b6001600160a01b0381166103df5760405162461bcd60e51b81526004018080602001828103825260268152602001806108be6026913960400191505060405180910390fd5b6065546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3606580546001600160a01b0319166001600160a01b0392909216919091179055565b610443610514565b6065546001600160a01b03908116911614610493576040805162461bcd60e51b8152602060048201819052602482015260008051602061091e833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526097602052604090205434906104be908263ffffffff6106bd16565b6001600160a01b038316600081815260976020908152604091829020939093558051848152905191927f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c492918290030190a25050565b3390565b303181111561056e576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015290519081900360640190fd5b6040516000906001600160a01b0384169083908381818185875af1925050503d80600081146105b9576040519150601f19603f3d011682016040523d82523d6000602084013e6105be565b606091505b50509050806105fe5760405162461bcd60e51b815260040180806020018281038252603a8152602001806108e4603a913960400191505060405180910390fd5b505050565b600054610100900460ff168061061c575061061c61071e565b8061062a575060005460ff16155b6106655760405162461bcd60e51b815260040180806020018281038252602e81526020018061093e602e913960400191505060405180910390fd5b600054610100900460ff16158015610690576000805460ff1961ff0019909116610100171660011790555b610698610724565b6106a06107c4565b6106a8610724565b80156106ba576000805461ff00191690555b50565b600082820183811015610717576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b303b1590565b600054610100900460ff168061073d575061073d61071e565b8061074b575060005460ff16155b6107865760405162461bcd60e51b815260040180806020018281038252602e81526020018061093e602e913960400191505060405180910390fd5b600054610100900460ff161580156106a8576000805460ff1961ff00199091166101001716600117905580156106ba576000805461ff001916905550565b600054610100900460ff16806107dd57506107dd61071e565b806107eb575060005460ff16155b6108265760405162461bcd60e51b815260040180806020018281038252602e81526020018061093e602e913960400191505060405180910390fd5b600054610100900460ff16158015610851576000805460ff1961ff0019909116610100171660011790555b600061085b610514565b606580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156106ba576000805461ff00191690555056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d617920686176652072657665727465644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564a2646970667358221220352107050a949429bed7befb1122d94ed1cbb1e1b65f69858996d72a9561dfbb64736f6c63430006070033",
  "deployedBytecode": "0x6080604052600436106100705760003560e01c80638da5cb5b1161004e5780638da5cb5b146100d4578063e3a9db1a14610105578063f2fde38b1461014a578063f340fa011461017d57610070565b806351cff8d914610075578063715018a6146100aa5780638129fc1c146100bf575b600080fd5b34801561008157600080fd5b506100a86004803603602081101561009857600080fd5b50356001600160a01b03166101a3565b005b3480156100b657600080fd5b506100a861026c565b3480156100cb57600080fd5b506100a861030e565b3480156100e057600080fd5b506100e9610318565b604080516001600160a01b039092168252519081900360200190f35b34801561011157600080fd5b506101386004803603602081101561012857600080fd5b50356001600160a01b0316610327565b60408051918252519081900360200190f35b34801561015657600080fd5b506100a86004803603602081101561016d57600080fd5b50356001600160a01b0316610342565b6100a86004803603602081101561019357600080fd5b50356001600160a01b031661043b565b6101ab610514565b6065546001600160a01b039081169116146101fb576040805162461bcd60e51b8152602060048201819052602482015260008051602061091e833981519152604482015290519081900360640190fd5b6001600160a01b0381166000818152609760205260408120805491905590610229908263ffffffff61051816565b6040805182815290516001600160a01b038416917f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5919081900360200190a25050565b610274610514565b6065546001600160a01b039081169116146102c4576040805162461bcd60e51b8152602060048201819052602482015260008051602061091e833981519152604482015290519081900360640190fd5b6065546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3606580546001600160a01b0319169055565b610316610603565b565b6065546001600160a01b031690565b6001600160a01b031660009081526097602052604090205490565b61034a610514565b6065546001600160a01b0390811691161461039a576040805162461bcd60e51b8152602060048201819052602482015260008051602061091e833981519152604482015290519081900360640190fd5b6001600160a01b0381166103df5760405162461bcd60e51b81526004018080602001828103825260268152602001806108be6026913960400191505060405180910390fd5b6065546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3606580546001600160a01b0319166001600160a01b0392909216919091179055565b610443610514565b6065546001600160a01b03908116911614610493576040805162461bcd60e51b8152602060048201819052602482015260008051602061091e833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526097602052604090205434906104be908263ffffffff6106bd16565b6001600160a01b038316600081815260976020908152604091829020939093558051848152905191927f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c492918290030190a25050565b3390565b303181111561056e576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604482015290519081900360640190fd5b6040516000906001600160a01b0384169083908381818185875af1925050503d80600081146105b9576040519150601f19603f3d011682016040523d82523d6000602084013e6105be565b606091505b50509050806105fe5760405162461bcd60e51b815260040180806020018281038252603a8152602001806108e4603a913960400191505060405180910390fd5b505050565b600054610100900460ff168061061c575061061c61071e565b8061062a575060005460ff16155b6106655760405162461bcd60e51b815260040180806020018281038252602e81526020018061093e602e913960400191505060405180910390fd5b600054610100900460ff16158015610690576000805460ff1961ff0019909116610100171660011790555b610698610724565b6106a06107c4565b6106a8610724565b80156106ba576000805461ff00191690555b50565b600082820183811015610717576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b303b1590565b600054610100900460ff168061073d575061073d61071e565b8061074b575060005460ff16155b6107865760405162461bcd60e51b815260040180806020018281038252602e81526020018061093e602e913960400191505060405180910390fd5b600054610100900460ff161580156106a8576000805460ff1961ff00199091166101001716600117905580156106ba576000805461ff001916905550565b600054610100900460ff16806107dd57506107dd61071e565b806107eb575060005460ff16155b6108265760405162461bcd60e51b815260040180806020018281038252602e81526020018061093e602e913960400191505060405180910390fd5b600054610100900460ff16158015610851576000805460ff1961ff0019909116610100171660011790555b600061085b610514565b606580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156106ba576000805461ff00191690555056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d617920686176652072657665727465644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564a2646970667358221220352107050a949429bed7befb1122d94ed1cbb1e1b65f69858996d72a9561dfbb64736f6c63430006070033",
  "compiler": {
    "name": "solc",
    "version": "0.6.7+commit.b8d736ae.Emscripten.clang",
    "optimizer": {
      "enabled": true,
      "runs": 200
    },
    "evmVersion": "petersburg"
  }
}
