{
  "contractName": "Controller",
  "abi": [
    {
      "constant": false,
      "inputs": [
        {
          "name": "_scheme",
          "type": "address"
        },
        {
          "name": "",
          "type": "address"
        }
      ],
      "name": "unregisterScheme",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_scheme",
          "type": "address"
        },
        {
          "name": "",
          "type": "address"
        }
      ],
      "name": "getSchemeParameters",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "newController",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_newController",
          "type": "address"
        },
        {
          "name": "",
          "type": "address"
        }
      ],
      "name": "upgradeController",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_globalConstraint",
          "type": "address"
        },
        {
          "name": "",
          "type": "address"
        }
      ],
      "name": "removeGlobalConstraint",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "avatar",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_params",
          "type": "bytes32[]"
        },
        {
          "name": "",
          "type": "address"
        }
      ],
      "name": "genericAction",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_amountInWei",
          "type": "uint256"
        },
        {
          "name": "_to",
          "type": "address"
        },
        {
          "name": "",
          "type": "address"
        }
      ],
      "name": "sendEther",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_amount",
          "type": "uint256"
        },
        {
          "name": "_beneficiary",
          "type": "address"
        },
        {
          "name": "",
          "type": "address"
        }
      ],
      "name": "mintTokens",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_externalToken",
          "type": "address"
        },
        {
          "name": "_spender",
          "type": "address"
        },
        {
          "name": "_addedValue",
          "type": "uint256"
        },
        {
          "name": "",
          "type": "address"
        }
      ],
      "name": "externalTokenIncreaseApproval",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "name": "globalConstraintsRegister",
      "outputs": [
        {
          "name": "register",
          "type": "bool"
        },
        {
          "name": "index",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "globalConstraints",
      "outputs": [
        {
          "name": "gcAddress",
          "type": "address"
        },
        {
          "name": "params",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "name": "unregisterSelf",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_amount",
          "type": "int256"
        },
        {
          "name": "_beneficiary",
          "type": "address"
        },
        {
          "name": "",
          "type": "address"
        }
      ],
      "name": "mintReputation",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "name": "globalConstraintsCount",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "nativeReputation",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_scheme",
          "type": "address"
        },
        {
          "name": "",
          "type": "address"
        }
      ],
      "name": "getSchemePermissions",
      "outputs": [
        {
          "name": "",
          "type": "bytes4"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_scheme",
          "type": "address"
        },
        {
          "name": "",
          "type": "address"
        }
      ],
      "name": "isSchemeRegistered",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_externalToken",
          "type": "address"
        },
        {
          "name": "_to",
          "type": "address"
        },
        {
          "name": "_value",
          "type": "uint256"
        },
        {
          "name": "",
          "type": "address"
        }
      ],
      "name": "externalTokenTransfer",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_externalToken",
          "type": "address"
        },
        {
          "name": "_spender",
          "type": "address"
        },
        {
          "name": "_subtractedValue",
          "type": "uint256"
        },
        {
          "name": "",
          "type": "address"
        }
      ],
      "name": "externalTokenDecreaseApproval",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "name": "schemes",
      "outputs": [
        {
          "name": "paramsHash",
          "type": "bytes32"
        },
        {
          "name": "permissions",
          "type": "bytes4"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "nativeToken",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_globalConstraint",
          "type": "address"
        },
        {
          "name": "_params",
          "type": "bytes32"
        },
        {
          "name": "",
          "type": "address"
        }
      ],
      "name": "addGlobalConstraint",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_scheme",
          "type": "address"
        },
        {
          "name": "_paramsHash",
          "type": "bytes32"
        },
        {
          "name": "_permissions",
          "type": "bytes4"
        },
        {
          "name": "",
          "type": "address"
        }
      ],
      "name": "registerScheme",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_globalConstraint",
          "type": "address"
        },
        {
          "name": "",
          "type": "address"
        }
      ],
      "name": "isGlobalConstraintRegistered",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_externalToken",
          "type": "address"
        },
        {
          "name": "_from",
          "type": "address"
        },
        {
          "name": "_to",
          "type": "address"
        },
        {
          "name": "_value",
          "type": "uint256"
        },
        {
          "name": "",
          "type": "address"
        }
      ],
      "name": "externalTokenTransferFrom",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "name": "_avatar",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "fallback"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "_sender",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "_beneficiary",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "_amount",
          "type": "int256"
        }
      ],
      "name": "MintReputation",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "_sender",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "_beneficiary",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "MintTokens",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "_sender",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "_scheme",
          "type": "address"
        }
      ],
      "name": "RegisterScheme",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "_sender",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "_scheme",
          "type": "address"
        }
      ],
      "name": "UnregisterScheme",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "_sender",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "_params",
          "type": "bytes32[]"
        }
      ],
      "name": "GenericAction",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "_sender",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "_amountInWei",
          "type": "uint256"
        },
        {
          "indexed": true,
          "name": "_to",
          "type": "address"
        }
      ],
      "name": "SendEther",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "_sender",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "_externalToken",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "_to",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "ExternalTokenTransfer",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "_sender",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "_externalToken",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "_from",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "_to",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "ExternalTokenTransferFrom",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "_sender",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "_externalToken",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "_spender",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "ExternalTokenIncreaseApproval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "_sender",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "_externalToken",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "_spender",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "ExternalTokenDecreaseApproval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "_globalConstraint",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "_params",
          "type": "bytes32"
        }
      ],
      "name": "AddGlobalConstraint",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "_globalConstraint",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "_index",
          "type": "uint256"
        }
      ],
      "name": "RemoveGlobalConstraint",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "_oldController",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "_newController",
          "type": "address"
        }
      ],
      "name": "UpgradeController",
      "type": "event"
    }
  ],
  "bytecode": "0x606060405234156200001057600080fd5b6040516020806200301a8339810160405280805160018054600160a060020a031916600160a060020a03838116919091179182905591935016905063e1758bd86000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1515620000a157600080fd5b6102c65a03f11515620000b357600080fd5b505050604051805160028054600160a060020a031916600160a060020a039283161790556001541690506389ae1c906000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15156200013357600080fd5b6102c65a03f115156200014557600080fd5b505050604051805160038054600160a060020a031916600160a060020a03929092169190911790555060408051908101604090815260008083527c0f00000000000000000000000000000000000000000000000000000000602080850191909152600160a060020a033316825281905220815181556020820151600190910180547c010000000000000000000000000000000000000000000000000000000090920463ffffffff199092169190911790555050612e1280620002086000396000f30060606040526004361061013a5763ffffffff60e060020a600035041663039de01d811461014a5780631c4d5608146101835780633a02263c146101ba57806342427bf8146101e95780634f52b5be1461020e5780635aef7de6146102335780636035174814610246578063634965da146102a05780636407e432146102c8578063644b98ed146102f057806364f47ace1461031f57806365ab1ae8146103585780636c525b13146103905780636cfc6582146103af578063824f2f1f146103d757806389ae1c90146103f65780639b51e35a146104095780639be2faed1461044b578063b9a04cdd14610470578063c6ab78b91461049f578063db6149ce146104ce578063e1758bd81461050f578063e4537a7414610522578063e869d45f1461054b578063f76488be14610582578063fb4856a2146105a7575b341561014557600080fd5b600080fd5b341561015557600080fd5b61016f600160a060020a03600435811690602435166105dc565b604051901515815260200160405180910390f35b341561018e57600080fd5b6101a8600160a060020a036004358116906024351661091a565b60405190815260200160405180910390f35b34156101c557600080fd5b6101cd610936565b604051600160a060020a03909116815260200160405180910390f35b34156101f457600080fd5b61016f600160a060020a0360043581169060243516610945565b341561021957600080fd5b61016f600160a060020a0360043581169060243516610c58565b341561023e57600080fd5b6101cd610e6d565b341561025157600080fd5b61016f600460248135818101908301358060208181020160405190810160405280939291908181526020018383602002808284375094965050509235600160a060020a03169250610e7c915050565b34156102ab57600080fd5b61016f600435600160a060020a03602435811690604435166111d9565b34156102d357600080fd5b61016f600435600160a060020a03602435811690604435166114bd565b34156102fb57600080fd5b61016f600160a060020a036004358116906024358116906044359060643516611797565b341561032a57600080fd5b61033e600160a060020a0360043516611a99565b604051911515825260208201526040908101905180910390f35b341561036357600080fd5b61036e600435611ab8565b604051600160a060020a03909216825260208201526040908101905180910390f35b341561039b57600080fd5b61016f600160a060020a0360043516611aee565b34156103ba57600080fd5b61016f600435600160a060020a0360243581169060443516611b6b565b34156103e257600080fd5b6101a8600160a060020a0360043516611e45565b341561040157600080fd5b6101cd611e4c565b341561041457600080fd5b61042e600160a060020a0360043581169060243516611e5b565b604051600160e060020a0319909116815260200160405180910390f35b341561045657600080fd5b61016f600160a060020a0360043581169060243516611e80565b341561047b57600080fd5b61016f600160a060020a036004358116906024358116906044359060643516611eaa565b34156104aa57600080fd5b61016f600160a060020a03600435811690602435811690604435906064351661219b565b34156104d957600080fd5b6104ed600160a060020a0360043516612493565b604051918252600160e060020a03191660208201526040908101905180910390f35b341561051a57600080fd5b6101cd6124b2565b341561052d57600080fd5b61016f600160a060020a0360043581169060243590604435166124c1565b341561055657600080fd5b61016f600160a060020a0360043581169060243590600160e060020a031960443516906064351661268c565b341561058d57600080fd5b61016f600160a060020a0360043581169060243516612a2a565b34156105b257600080fd5b61016f600160a060020a036004358116906024358116906044358116906064359060843516612a49565b600160a060020a03331660009081526020819052604081206001015460e060020a027c02000000000000000000000000000000000000000000000000000000009081161461062957600080fd5b7f756e7265676973746572536368656d650000000000000000000000000000000060005b60055481101561072d57600580548290811061066557fe5b600091825260209091206002909102015460058054600160a060020a039092169163c1786ab29133918590811061069857fe5b9060005260206000209060020201600101548560006040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b15156106ff57600080fd5b6102c65a03f1151561071057600080fd5b50505060405180519050151561072557600080fd5b60010161064d565b600160a060020a03851660009081526020819052604090206001015460e060020a908102161515610761576000925061082e565b33600160a060020a0390811660009081526020819052604080822060019081015493891683529120015460e060020a918202199102167c0f0000000000000000000000000000000000000000000000000000000016156107c057600080fd5b84600160a060020a031633600160a060020a03167f10bb2cf04cb8b902a8e736d494f1a51003be6d4b16ef6fb95ce62c38445023bf60405160405180910390a3600160a060020a03851660009081526020819052604081209081556001908101805463ffffffff1916905592505b5060005b60055481101561091257600580548290811061084a57fe5b600091825260209091206002909102015460058054600160a060020a0390921691638043154d9133918590811061087d57fe5b9060005260206000209060020201600101548560006040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b15156108e457600080fd5b6102c65a03f115156108f557600080fd5b50505060405180519050151561090a57600080fd5b600101610832565b505092915050565b50600160a060020a031660009081526020819052604090205490565b600454600160a060020a031681565b600160a060020a03331660009081526020819052604081206001015460e060020a027c08000000000000000000000000000000000000000000000000000000009081161461099257600080fd5b600454600160a060020a0316156109a857600080fd5b600160a060020a03831615156109bd57600080fd5b6004805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03858116919091179091556001541663f2fde38b8460405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b1515610a3257600080fd5b6102c65a03f11515610a4357600080fd5b5050600254600160a060020a03308116925016638da5cb5b6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610a9257600080fd5b6102c65a03f11515610aa357600080fd5b50505060405180519050600160a060020a03161415610b2157600254600160a060020a031663f2fde38b8460405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b1515610b0c57600080fd5b6102c65a03f11515610b1d57600080fd5b5050505b600354600160a060020a033081169116638da5cb5b6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610b6d57600080fd5b6102c65a03f11515610b7e57600080fd5b50505060405180519050600160a060020a03161415610bfc57600354600160a060020a031663f2fde38b8460405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b1515610be757600080fd5b6102c65a03f11515610bf857600080fd5b5050505b6004547fdb7cbacf8df312d794506c0cc9af07f64d29ca075796ea2e950a3832cc9a63dd903090600160a060020a0316604051600160a060020a039283168152911660208201526040908101905180910390a150600192915050565b6000610c62612d5f565b610c6a612d5f565b600160a060020a03331660009081526020819052604090206001015460e060020a027c040000000000000000000000000000000000000000000000000000000090811614610cb757600080fd5b600160a060020a03851660009081526006602052604090819020908051908101604052815460ff161515815260019091015460208201529150815115610e62576005546000190160208301511015610dd457600580546000198101908110610d1b57fe5b9060005260206000209060020201604080519081016040528154600160a060020a03168152600190910154602080830191909152909150819060059084015181548110610d6457fe5b90600052602060002090600202016000820151815473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03919091161781556020820151600190910155506020820151600660008351600160a060020a031681526020810191909152604001600020600101555b6005805490610de7906000198301612d76565b50600160a060020a03851660009081526006602090815260408220805460ff19168155600101919091557f6ceab662049113d466f7e28b69edbec7cf641bc175522623536b09785887982a908690840151604051600160a060020a03909216825260208201526040908101905180910390a160019250610912565b506000949350505050565b600154600160a060020a031681565b600160a060020a03331660009081526020819052604081206001015460e060020a908102811614610eac57600080fd5b7f67656e65726963416374696f6e0000000000000000000000000000000000000060005b600554811015610fb0576005805482908110610ee857fe5b600091825260209091206002909102015460058054600160a060020a039092169163c1786ab291339185908110610f1b57fe5b9060005260206000209060020201600101548560006040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b1515610f8257600080fd5b6102c65a03f11515610f9357600080fd5b505050604051805190501515610fa857600080fd5b600101610ed0565b33600160a060020a03167f8518530cc6bc186721ab2fc226031ca054c8484893d8b0c7faab65a58aac238d8660405160208082528190810183818151815260200191508051906020019060200280838360005b8381101561101b578082015183820152602001611003565b505050509050019250505060405180910390a2600154600160a060020a0316636ce15a5433876000604051602001526040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200180602001828103825283818151815260200191508051906020019060200280838360005b838110156110b457808201518382015260200161109c565b505050509050019350505050602060405180830381600087803b15156110d957600080fd5b6102c65a03f115156110ea57600080fd5b50505060405180519350505060005b60055481101561091257600580548290811061111157fe5b600091825260209091206002909102015460058054600160a060020a0390921691638043154d9133918590811061114457fe5b9060005260206000209060020201600101548560006040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b15156111ab57600080fd5b6102c65a03f115156111bc57600080fd5b5050506040518051905015156111d157600080fd5b6001016110f9565b600160a060020a03331660009081526020819052604081206001015460e060020a90810281161461120957600080fd5b7f73656e644574686572000000000000000000000000000000000000000000000060005b60055481101561130d57600580548290811061124557fe5b600091825260209091206002909102015460058054600160a060020a039092169163c1786ab29133918590811061127857fe5b9060005260206000209060020201600101548560006040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b15156112df57600080fd5b6102c65a03f115156112f057600080fd5b50505060405180519050151561130557600080fd5b60010161122d565b84600160a060020a031633600160a060020a03167fda35e091786fbaaace32084910404a0e3a14f22a7645a4c3d0fec2c6731e3c348860405190815260200160405180910390a3600154600160a060020a031663cb16d4a2878760006040516020015260405160e060020a63ffffffff85160281526004810192909252600160a060020a03166024820152604401602060405180830381600087803b15156113b457600080fd5b6102c65a03f115156113c557600080fd5b50505060405180519350505060005b6005548110156114b45760058054829081106113ec57fe5b600091825260209091206002909102015460058054600160a060020a0390921691638043154d9133918590811061141f57fe5b9060005260206000209060020201600101548560006040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b151561148657600080fd5b6102c65a03f1151561149757600080fd5b5050506040518051905015156114ac57600080fd5b6001016113d4565b50509392505050565b600160a060020a03331660009081526020819052604081206001015460e060020a9081028116146114ed57600080fd5b7f6d696e74546f6b656e730000000000000000000000000000000000000000000060005b6005548110156115f157600580548290811061152957fe5b600091825260209091206002909102015460058054600160a060020a039092169163c1786ab29133918590811061155c57fe5b9060005260206000209060020201600101548560006040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b15156115c357600080fd5b6102c65a03f115156115d457600080fd5b5050506040518051905015156115e957600080fd5b600101611511565b84600160a060020a031633600160a060020a03167f21f9c9a1a1f9a311a50f15fec5c1faa9e21fc9edf964f0fdecba5bd490484c5e8860405190815260200160405180910390a3600254600160a060020a03166340c10f19868860006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561169757600080fd5b6102c65a03f115156116a857600080fd5b50505060405180519350505060005b6005548110156114b45760058054829081106116cf57fe5b600091825260209091206002909102015460058054600160a060020a0390921691638043154d9133918590811061170257fe5b9060005260206000209060020201600101548560006040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b151561176957600080fd5b6102c65a03f1151561177a57600080fd5b50505060405180519050151561178f57600080fd5b6001016116b7565b600160a060020a03331660009081526020819052604081206001015460e060020a9081028116146117c757600080fd5b7f65787465726e616c546f6b656e496e637265617365417070726f76616c00000060005b6005548110156118cb57600580548290811061180357fe5b600091825260209091206002909102015460058054600160a060020a039092169163c1786ab29133918590811061183657fe5b9060005260206000209060020201600101548560006040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b151561189d57600080fd5b6102c65a03f115156118ae57600080fd5b5050506040518051905015156118c357600080fd5b6001016117eb565b86600160a060020a031633600160a060020a03167f2cee0640e7c161518a78fa901d8c0e4b2f51d42612532184a4f017a45b01ba288888604051600160a060020a03909216825260208201526040908101905180910390a3600154600160a060020a0316638cf1355c88888860006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b151561198f57600080fd5b6102c65a03f115156119a057600080fd5b50505060405180519350505060005b600554811015611a8f5760058054829081106119c757fe5b600091825260209091206002909102015460058054600160a060020a0390921691638043154d913391859081106119fa57fe5b9060005260206000209060020201600101548560006040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b1515611a6157600080fd5b6102c65a03f11515611a7257600080fd5b505050604051805190501515611a8757600080fd5b6001016119af565b5050949350505050565b6006602052600090815260409020805460019091015460ff9091169082565b6005805482908110611ac657fe5b600091825260209091206002909102018054600190910154600160a060020a03909116915082565b6000611afb336000611e80565b1515611b0957506000611b66565b600160a060020a0333166000818152602081905260408082209182556001909101805463ffffffff1916905581907f10bb2cf04cb8b902a8e736d494f1a51003be6d4b16ef6fb95ce62c38445023bf905160405180910390a35060015b919050565b600160a060020a03331660009081526020819052604081206001015460e060020a908102811614611b9b57600080fd5b7f6d696e7452657075746174696f6e00000000000000000000000000000000000060005b600554811015611c9f576005805482908110611bd757fe5b600091825260209091206002909102015460058054600160a060020a039092169163c1786ab291339185908110611c0a57fe5b9060005260206000209060020201600101548560006040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b1515611c7157600080fd5b6102c65a03f11515611c8257600080fd5b505050604051805190501515611c9757600080fd5b600101611bbf565b84600160a060020a031633600160a060020a03167fb6ced7e295ffd06d19f45bd872b3bd3fd172b1ba53b17ce0543c276d06f5a4228860405190815260200160405180910390a3600354600160a060020a031663fd9bf3aa868860006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515611d4557600080fd5b6102c65a03f11515611d5657600080fd5b50505060405180519350505060005b6005548110156114b4576005805482908110611d7d57fe5b600091825260209091206002909102015460058054600160a060020a0390921691638043154d91339185908110611db057fe5b9060005260206000209060020201600101548560006040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b1515611e1757600080fd5b6102c65a03f11515611e2857600080fd5b505050604051805190501515611e3d57600080fd5b600101611d65565b5060055490565b600354600160a060020a031681565b50600160a060020a031660009081526020819052604090206001015460e060020a0290565b50600160a060020a031660009081526020819052604090206001015460e060020a90810216151590565b600160a060020a03331660009081526020819052604081206001015460e060020a908102811614611eda57600080fd5b7f65787465726e616c546f6b656e5472616e73666572000000000000000000000060005b600554811015611fde576005805482908110611f1657fe5b600091825260209091206002909102015460058054600160a060020a039092169163c1786ab291339185908110611f4957fe5b9060005260206000209060020201600101548560006040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b1515611fb057600080fd5b6102c65a03f11515611fc157600080fd5b505050604051805190501515611fd657600080fd5b600101611efe565b85600160a060020a031687600160a060020a031633600160a060020a03167fd4c08afec48fd2cbe49032dc89d3b388b7a4e4f0563a1fdccd73339beb025aa18860405190815260200160405180910390a4600154600160a060020a031663dab0efff88888860006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b151561209b57600080fd5b6102c65a03f115156120ac57600080fd5b50505060405180519350505060005b600554811015611a8f5760058054829081106120d357fe5b600091825260209091206002909102015460058054600160a060020a0390921691638043154d9133918590811061210657fe5b9060005260206000209060020201600101548560006040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b151561216d57600080fd5b6102c65a03f1151561217e57600080fd5b50505060405180519050151561219357600080fd5b6001016120bb565b600160a060020a03331660009081526020819052604081206001015460e060020a9081028116146121cb57600080fd5b7f65787465726e616c546f6b656e4465637265617365417070726f76616c00000060005b6005548110156122cf57600580548290811061220757fe5b600091825260209091206002909102015460058054600160a060020a039092169163c1786ab29133918590811061223a57fe5b9060005260206000209060020201600101548560006040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b15156122a157600080fd5b6102c65a03f115156122b257600080fd5b5050506040518051905015156122c757600080fd5b6001016121ef565b86600160a060020a031633600160a060020a03167f56fc1f50d44108d3b715d77eb371d388bf2998c65b4eb5cf0ccd6c055be46d498888604051600160a060020a03909216825260208201526040908101905180910390a3600154600160a060020a031663d29ab9c488888860006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b151561239357600080fd5b6102c65a03f115156123a457600080fd5b50505060405180519350505060005b600554811015611a8f5760058054829081106123cb57fe5b600091825260209091206002909102015460058054600160a060020a0390921691638043154d913391859081106123fe57fe5b9060005260206000209060020201600101548560006040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b151561246557600080fd5b6102c65a03f1151561247657600080fd5b50505060405180519050151561248b57600080fd5b6001016123b3565b6000602081905290815260409020805460019091015460e060020a0282565b600254600160a060020a031681565b600160a060020a03331660009081526020819052604081206001015460e060020a027c04000000000000000000000000000000000000000000000000000000009081161461250e57600080fd5b600160a060020a03841660009081526006602052604090205460ff1615156125fe5760058054600181016125428382612d76565b9160005260206000209060020201600060408051908101604052600160a060020a0388168152602081018790529190508151815473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039190911617815560208201516001909101555060409050805190810160409081526001825260055460001901602080840191909152600160a060020a03871660009081526006909152208151815460ff191690151517815560208201516001909101555061263e565b600160a060020a03841660009081526006602052604090206001015460058054859290811061262957fe5b60009182526020909120600160029092020101555b7f6f3ac186000a779fe66d0a5188f51993a6593d93c4ff052ec0453aa84f09dbcb8484604051600160a060020a03909216825260208201526040908101905180910390a15060019392505050565b6000612696612d5f565b600160a060020a03331660009081526020819052604090206001015460e060020a027c0200000000000000000000000000000000000000000000000000000000908116146126e357600080fd5b7f7265676973746572536368656d6500000000000000000000000000000000000060005b6005548110156127e757600580548290811061271f57fe5b600091825260209091206002909102015460058054600160a060020a039092169163c1786ab29133918590811061275257fe5b9060005260206000209060020201600101548560006040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b15156127b957600080fd5b6102c65a03f115156127ca57600080fd5b5050506040518051905015156127df57600080fd5b600101612707565b600160a060020a03881660009081526020819052604090819020908051908101604090815282548252600192830154600160e060020a031960e060020a918202166020808501918252600160a060020a03331660009081529081905292832090940154929650909291021990518818167c0f00000000000000000000000000000000000000000000000000000000161461288057600080fd5b600160a060020a03331660009081526020818152604082206001015460e060020a021990850151167c0f0000000000000000000000000000000000000000000000000000000016146128d157600080fd5b600160a060020a03888116600081815260208190526040908190208a8155600101805463ffffffff191660e060020a8b81170417905590913316907f546816e99403df442acb68ef69562682a50762c20a3fb6b472f7af9923736cfc905160405180910390a3600193505060005b600554811015612a1f57600580548290811061295757fe5b600091825260209091206002909102015460058054600160a060020a0390921691638043154d9133918590811061298a57fe5b9060005260206000209060020201600101548560006040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b15156129f157600080fd5b6102c65a03f11515612a0257600080fd5b505050604051805190501515612a1757600080fd5b60010161293f565b505050949350505050565b50600160a060020a031660009081526006602052604090205460ff1690565b600160a060020a03331660009081526020819052604081206001015460e060020a908102811614612a7957600080fd5b7f65787465726e616c546f6b656e5472616e7366657246726f6d0000000000000060005b600554811015612b7d576005805482908110612ab557fe5b600091825260209091206002909102015460058054600160a060020a039092169163c1786ab291339185908110612ae857fe5b9060005260206000209060020201600101548560006040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b1515612b4f57600080fd5b6102c65a03f11515612b6057600080fd5b505050604051805190501515612b7557600080fd5b600101612a9d565b87600160a060020a031633600160a060020a03167f283faba4b8dcfe263728666be500623fdf5ae89ac78e40952fe2493f918ed62c898989604051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a3600154600160a060020a031663b756d5a28989898960006040516020015260405160e060020a63ffffffff8716028152600160a060020a0394851660048201529284166024840152921660448201526064810191909152608401602060405180830381600087803b1515612c5457600080fd5b6102c65a03f11515612c6557600080fd5b50505060405180519350505060005b600554811015612d54576005805482908110612c8c57fe5b600091825260209091206002909102015460058054600160a060020a0390921691638043154d91339185908110612cbf57fe5b9060005260206000209060020201600101548560006040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b1515612d2657600080fd5b6102c65a03f11515612d3757600080fd5b505050604051805190501515612d4c57600080fd5b600101612c74565b505095945050505050565b604080519081016040526000808252602082015290565b815481835581811511612da257600202816002028360005260206000209182019101612da29190612da7565b505050565b612de391905b80821115612ddf57805473ffffffffffffffffffffffffffffffffffffffff1916815560006001820155600201612dad565b5090565b905600a165627a7a7230582054c543f94267e8d85f2711160aae1fc3a50b2e99d435b56a4a81231bf73bebc80029",
  "deployedBytecode": "0x60606040526004361061013a5763ffffffff60e060020a600035041663039de01d811461014a5780631c4d5608146101835780633a02263c146101ba57806342427bf8146101e95780634f52b5be1461020e5780635aef7de6146102335780636035174814610246578063634965da146102a05780636407e432146102c8578063644b98ed146102f057806364f47ace1461031f57806365ab1ae8146103585780636c525b13146103905780636cfc6582146103af578063824f2f1f146103d757806389ae1c90146103f65780639b51e35a146104095780639be2faed1461044b578063b9a04cdd14610470578063c6ab78b91461049f578063db6149ce146104ce578063e1758bd81461050f578063e4537a7414610522578063e869d45f1461054b578063f76488be14610582578063fb4856a2146105a7575b341561014557600080fd5b600080fd5b341561015557600080fd5b61016f600160a060020a03600435811690602435166105dc565b604051901515815260200160405180910390f35b341561018e57600080fd5b6101a8600160a060020a036004358116906024351661091a565b60405190815260200160405180910390f35b34156101c557600080fd5b6101cd610936565b604051600160a060020a03909116815260200160405180910390f35b34156101f457600080fd5b61016f600160a060020a0360043581169060243516610945565b341561021957600080fd5b61016f600160a060020a0360043581169060243516610c58565b341561023e57600080fd5b6101cd610e6d565b341561025157600080fd5b61016f600460248135818101908301358060208181020160405190810160405280939291908181526020018383602002808284375094965050509235600160a060020a03169250610e7c915050565b34156102ab57600080fd5b61016f600435600160a060020a03602435811690604435166111d9565b34156102d357600080fd5b61016f600435600160a060020a03602435811690604435166114bd565b34156102fb57600080fd5b61016f600160a060020a036004358116906024358116906044359060643516611797565b341561032a57600080fd5b61033e600160a060020a0360043516611a99565b604051911515825260208201526040908101905180910390f35b341561036357600080fd5b61036e600435611ab8565b604051600160a060020a03909216825260208201526040908101905180910390f35b341561039b57600080fd5b61016f600160a060020a0360043516611aee565b34156103ba57600080fd5b61016f600435600160a060020a0360243581169060443516611b6b565b34156103e257600080fd5b6101a8600160a060020a0360043516611e45565b341561040157600080fd5b6101cd611e4c565b341561041457600080fd5b61042e600160a060020a0360043581169060243516611e5b565b604051600160e060020a0319909116815260200160405180910390f35b341561045657600080fd5b61016f600160a060020a0360043581169060243516611e80565b341561047b57600080fd5b61016f600160a060020a036004358116906024358116906044359060643516611eaa565b34156104aa57600080fd5b61016f600160a060020a03600435811690602435811690604435906064351661219b565b34156104d957600080fd5b6104ed600160a060020a0360043516612493565b604051918252600160e060020a03191660208201526040908101905180910390f35b341561051a57600080fd5b6101cd6124b2565b341561052d57600080fd5b61016f600160a060020a0360043581169060243590604435166124c1565b341561055657600080fd5b61016f600160a060020a0360043581169060243590600160e060020a031960443516906064351661268c565b341561058d57600080fd5b61016f600160a060020a0360043581169060243516612a2a565b34156105b257600080fd5b61016f600160a060020a036004358116906024358116906044358116906064359060843516612a49565b600160a060020a03331660009081526020819052604081206001015460e060020a027c02000000000000000000000000000000000000000000000000000000009081161461062957600080fd5b7f756e7265676973746572536368656d650000000000000000000000000000000060005b60055481101561072d57600580548290811061066557fe5b600091825260209091206002909102015460058054600160a060020a039092169163c1786ab29133918590811061069857fe5b9060005260206000209060020201600101548560006040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b15156106ff57600080fd5b6102c65a03f1151561071057600080fd5b50505060405180519050151561072557600080fd5b60010161064d565b600160a060020a03851660009081526020819052604090206001015460e060020a908102161515610761576000925061082e565b33600160a060020a0390811660009081526020819052604080822060019081015493891683529120015460e060020a918202199102167c0f0000000000000000000000000000000000000000000000000000000016156107c057600080fd5b84600160a060020a031633600160a060020a03167f10bb2cf04cb8b902a8e736d494f1a51003be6d4b16ef6fb95ce62c38445023bf60405160405180910390a3600160a060020a03851660009081526020819052604081209081556001908101805463ffffffff1916905592505b5060005b60055481101561091257600580548290811061084a57fe5b600091825260209091206002909102015460058054600160a060020a0390921691638043154d9133918590811061087d57fe5b9060005260206000209060020201600101548560006040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b15156108e457600080fd5b6102c65a03f115156108f557600080fd5b50505060405180519050151561090a57600080fd5b600101610832565b505092915050565b50600160a060020a031660009081526020819052604090205490565b600454600160a060020a031681565b600160a060020a03331660009081526020819052604081206001015460e060020a027c08000000000000000000000000000000000000000000000000000000009081161461099257600080fd5b600454600160a060020a0316156109a857600080fd5b600160a060020a03831615156109bd57600080fd5b6004805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03858116919091179091556001541663f2fde38b8460405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b1515610a3257600080fd5b6102c65a03f11515610a4357600080fd5b5050600254600160a060020a03308116925016638da5cb5b6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610a9257600080fd5b6102c65a03f11515610aa357600080fd5b50505060405180519050600160a060020a03161415610b2157600254600160a060020a031663f2fde38b8460405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b1515610b0c57600080fd5b6102c65a03f11515610b1d57600080fd5b5050505b600354600160a060020a033081169116638da5cb5b6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610b6d57600080fd5b6102c65a03f11515610b7e57600080fd5b50505060405180519050600160a060020a03161415610bfc57600354600160a060020a031663f2fde38b8460405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b1515610be757600080fd5b6102c65a03f11515610bf857600080fd5b5050505b6004547fdb7cbacf8df312d794506c0cc9af07f64d29ca075796ea2e950a3832cc9a63dd903090600160a060020a0316604051600160a060020a039283168152911660208201526040908101905180910390a150600192915050565b6000610c62612d5f565b610c6a612d5f565b600160a060020a03331660009081526020819052604090206001015460e060020a027c040000000000000000000000000000000000000000000000000000000090811614610cb757600080fd5b600160a060020a03851660009081526006602052604090819020908051908101604052815460ff161515815260019091015460208201529150815115610e62576005546000190160208301511015610dd457600580546000198101908110610d1b57fe5b9060005260206000209060020201604080519081016040528154600160a060020a03168152600190910154602080830191909152909150819060059084015181548110610d6457fe5b90600052602060002090600202016000820151815473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03919091161781556020820151600190910155506020820151600660008351600160a060020a031681526020810191909152604001600020600101555b6005805490610de7906000198301612d76565b50600160a060020a03851660009081526006602090815260408220805460ff19168155600101919091557f6ceab662049113d466f7e28b69edbec7cf641bc175522623536b09785887982a908690840151604051600160a060020a03909216825260208201526040908101905180910390a160019250610912565b506000949350505050565b600154600160a060020a031681565b600160a060020a03331660009081526020819052604081206001015460e060020a908102811614610eac57600080fd5b7f67656e65726963416374696f6e0000000000000000000000000000000000000060005b600554811015610fb0576005805482908110610ee857fe5b600091825260209091206002909102015460058054600160a060020a039092169163c1786ab291339185908110610f1b57fe5b9060005260206000209060020201600101548560006040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b1515610f8257600080fd5b6102c65a03f11515610f9357600080fd5b505050604051805190501515610fa857600080fd5b600101610ed0565b33600160a060020a03167f8518530cc6bc186721ab2fc226031ca054c8484893d8b0c7faab65a58aac238d8660405160208082528190810183818151815260200191508051906020019060200280838360005b8381101561101b578082015183820152602001611003565b505050509050019250505060405180910390a2600154600160a060020a0316636ce15a5433876000604051602001526040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200180602001828103825283818151815260200191508051906020019060200280838360005b838110156110b457808201518382015260200161109c565b505050509050019350505050602060405180830381600087803b15156110d957600080fd5b6102c65a03f115156110ea57600080fd5b50505060405180519350505060005b60055481101561091257600580548290811061111157fe5b600091825260209091206002909102015460058054600160a060020a0390921691638043154d9133918590811061114457fe5b9060005260206000209060020201600101548560006040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b15156111ab57600080fd5b6102c65a03f115156111bc57600080fd5b5050506040518051905015156111d157600080fd5b6001016110f9565b600160a060020a03331660009081526020819052604081206001015460e060020a90810281161461120957600080fd5b7f73656e644574686572000000000000000000000000000000000000000000000060005b60055481101561130d57600580548290811061124557fe5b600091825260209091206002909102015460058054600160a060020a039092169163c1786ab29133918590811061127857fe5b9060005260206000209060020201600101548560006040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b15156112df57600080fd5b6102c65a03f115156112f057600080fd5b50505060405180519050151561130557600080fd5b60010161122d565b84600160a060020a031633600160a060020a03167fda35e091786fbaaace32084910404a0e3a14f22a7645a4c3d0fec2c6731e3c348860405190815260200160405180910390a3600154600160a060020a031663cb16d4a2878760006040516020015260405160e060020a63ffffffff85160281526004810192909252600160a060020a03166024820152604401602060405180830381600087803b15156113b457600080fd5b6102c65a03f115156113c557600080fd5b50505060405180519350505060005b6005548110156114b45760058054829081106113ec57fe5b600091825260209091206002909102015460058054600160a060020a0390921691638043154d9133918590811061141f57fe5b9060005260206000209060020201600101548560006040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b151561148657600080fd5b6102c65a03f1151561149757600080fd5b5050506040518051905015156114ac57600080fd5b6001016113d4565b50509392505050565b600160a060020a03331660009081526020819052604081206001015460e060020a9081028116146114ed57600080fd5b7f6d696e74546f6b656e730000000000000000000000000000000000000000000060005b6005548110156115f157600580548290811061152957fe5b600091825260209091206002909102015460058054600160a060020a039092169163c1786ab29133918590811061155c57fe5b9060005260206000209060020201600101548560006040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b15156115c357600080fd5b6102c65a03f115156115d457600080fd5b5050506040518051905015156115e957600080fd5b600101611511565b84600160a060020a031633600160a060020a03167f21f9c9a1a1f9a311a50f15fec5c1faa9e21fc9edf964f0fdecba5bd490484c5e8860405190815260200160405180910390a3600254600160a060020a03166340c10f19868860006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561169757600080fd5b6102c65a03f115156116a857600080fd5b50505060405180519350505060005b6005548110156114b45760058054829081106116cf57fe5b600091825260209091206002909102015460058054600160a060020a0390921691638043154d9133918590811061170257fe5b9060005260206000209060020201600101548560006040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b151561176957600080fd5b6102c65a03f1151561177a57600080fd5b50505060405180519050151561178f57600080fd5b6001016116b7565b600160a060020a03331660009081526020819052604081206001015460e060020a9081028116146117c757600080fd5b7f65787465726e616c546f6b656e496e637265617365417070726f76616c00000060005b6005548110156118cb57600580548290811061180357fe5b600091825260209091206002909102015460058054600160a060020a039092169163c1786ab29133918590811061183657fe5b9060005260206000209060020201600101548560006040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b151561189d57600080fd5b6102c65a03f115156118ae57600080fd5b5050506040518051905015156118c357600080fd5b6001016117eb565b86600160a060020a031633600160a060020a03167f2cee0640e7c161518a78fa901d8c0e4b2f51d42612532184a4f017a45b01ba288888604051600160a060020a03909216825260208201526040908101905180910390a3600154600160a060020a0316638cf1355c88888860006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b151561198f57600080fd5b6102c65a03f115156119a057600080fd5b50505060405180519350505060005b600554811015611a8f5760058054829081106119c757fe5b600091825260209091206002909102015460058054600160a060020a0390921691638043154d913391859081106119fa57fe5b9060005260206000209060020201600101548560006040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b1515611a6157600080fd5b6102c65a03f11515611a7257600080fd5b505050604051805190501515611a8757600080fd5b6001016119af565b5050949350505050565b6006602052600090815260409020805460019091015460ff9091169082565b6005805482908110611ac657fe5b600091825260209091206002909102018054600190910154600160a060020a03909116915082565b6000611afb336000611e80565b1515611b0957506000611b66565b600160a060020a0333166000818152602081905260408082209182556001909101805463ffffffff1916905581907f10bb2cf04cb8b902a8e736d494f1a51003be6d4b16ef6fb95ce62c38445023bf905160405180910390a35060015b919050565b600160a060020a03331660009081526020819052604081206001015460e060020a908102811614611b9b57600080fd5b7f6d696e7452657075746174696f6e00000000000000000000000000000000000060005b600554811015611c9f576005805482908110611bd757fe5b600091825260209091206002909102015460058054600160a060020a039092169163c1786ab291339185908110611c0a57fe5b9060005260206000209060020201600101548560006040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b1515611c7157600080fd5b6102c65a03f11515611c8257600080fd5b505050604051805190501515611c9757600080fd5b600101611bbf565b84600160a060020a031633600160a060020a03167fb6ced7e295ffd06d19f45bd872b3bd3fd172b1ba53b17ce0543c276d06f5a4228860405190815260200160405180910390a3600354600160a060020a031663fd9bf3aa868860006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515611d4557600080fd5b6102c65a03f11515611d5657600080fd5b50505060405180519350505060005b6005548110156114b4576005805482908110611d7d57fe5b600091825260209091206002909102015460058054600160a060020a0390921691638043154d91339185908110611db057fe5b9060005260206000209060020201600101548560006040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b1515611e1757600080fd5b6102c65a03f11515611e2857600080fd5b505050604051805190501515611e3d57600080fd5b600101611d65565b5060055490565b600354600160a060020a031681565b50600160a060020a031660009081526020819052604090206001015460e060020a0290565b50600160a060020a031660009081526020819052604090206001015460e060020a90810216151590565b600160a060020a03331660009081526020819052604081206001015460e060020a908102811614611eda57600080fd5b7f65787465726e616c546f6b656e5472616e73666572000000000000000000000060005b600554811015611fde576005805482908110611f1657fe5b600091825260209091206002909102015460058054600160a060020a039092169163c1786ab291339185908110611f4957fe5b9060005260206000209060020201600101548560006040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b1515611fb057600080fd5b6102c65a03f11515611fc157600080fd5b505050604051805190501515611fd657600080fd5b600101611efe565b85600160a060020a031687600160a060020a031633600160a060020a03167fd4c08afec48fd2cbe49032dc89d3b388b7a4e4f0563a1fdccd73339beb025aa18860405190815260200160405180910390a4600154600160a060020a031663dab0efff88888860006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b151561209b57600080fd5b6102c65a03f115156120ac57600080fd5b50505060405180519350505060005b600554811015611a8f5760058054829081106120d357fe5b600091825260209091206002909102015460058054600160a060020a0390921691638043154d9133918590811061210657fe5b9060005260206000209060020201600101548560006040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b151561216d57600080fd5b6102c65a03f1151561217e57600080fd5b50505060405180519050151561219357600080fd5b6001016120bb565b600160a060020a03331660009081526020819052604081206001015460e060020a9081028116146121cb57600080fd5b7f65787465726e616c546f6b656e4465637265617365417070726f76616c00000060005b6005548110156122cf57600580548290811061220757fe5b600091825260209091206002909102015460058054600160a060020a039092169163c1786ab29133918590811061223a57fe5b9060005260206000209060020201600101548560006040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b15156122a157600080fd5b6102c65a03f115156122b257600080fd5b5050506040518051905015156122c757600080fd5b6001016121ef565b86600160a060020a031633600160a060020a03167f56fc1f50d44108d3b715d77eb371d388bf2998c65b4eb5cf0ccd6c055be46d498888604051600160a060020a03909216825260208201526040908101905180910390a3600154600160a060020a031663d29ab9c488888860006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b151561239357600080fd5b6102c65a03f115156123a457600080fd5b50505060405180519350505060005b600554811015611a8f5760058054829081106123cb57fe5b600091825260209091206002909102015460058054600160a060020a0390921691638043154d913391859081106123fe57fe5b9060005260206000209060020201600101548560006040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b151561246557600080fd5b6102c65a03f1151561247657600080fd5b50505060405180519050151561248b57600080fd5b6001016123b3565b6000602081905290815260409020805460019091015460e060020a0282565b600254600160a060020a031681565b600160a060020a03331660009081526020819052604081206001015460e060020a027c04000000000000000000000000000000000000000000000000000000009081161461250e57600080fd5b600160a060020a03841660009081526006602052604090205460ff1615156125fe5760058054600181016125428382612d76565b9160005260206000209060020201600060408051908101604052600160a060020a0388168152602081018790529190508151815473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039190911617815560208201516001909101555060409050805190810160409081526001825260055460001901602080840191909152600160a060020a03871660009081526006909152208151815460ff191690151517815560208201516001909101555061263e565b600160a060020a03841660009081526006602052604090206001015460058054859290811061262957fe5b60009182526020909120600160029092020101555b7f6f3ac186000a779fe66d0a5188f51993a6593d93c4ff052ec0453aa84f09dbcb8484604051600160a060020a03909216825260208201526040908101905180910390a15060019392505050565b6000612696612d5f565b600160a060020a03331660009081526020819052604090206001015460e060020a027c0200000000000000000000000000000000000000000000000000000000908116146126e357600080fd5b7f7265676973746572536368656d6500000000000000000000000000000000000060005b6005548110156127e757600580548290811061271f57fe5b600091825260209091206002909102015460058054600160a060020a039092169163c1786ab29133918590811061275257fe5b9060005260206000209060020201600101548560006040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b15156127b957600080fd5b6102c65a03f115156127ca57600080fd5b5050506040518051905015156127df57600080fd5b600101612707565b600160a060020a03881660009081526020819052604090819020908051908101604090815282548252600192830154600160e060020a031960e060020a918202166020808501918252600160a060020a03331660009081529081905292832090940154929650909291021990518818167c0f00000000000000000000000000000000000000000000000000000000161461288057600080fd5b600160a060020a03331660009081526020818152604082206001015460e060020a021990850151167c0f0000000000000000000000000000000000000000000000000000000016146128d157600080fd5b600160a060020a03888116600081815260208190526040908190208a8155600101805463ffffffff191660e060020a8b81170417905590913316907f546816e99403df442acb68ef69562682a50762c20a3fb6b472f7af9923736cfc905160405180910390a3600193505060005b600554811015612a1f57600580548290811061295757fe5b600091825260209091206002909102015460058054600160a060020a0390921691638043154d9133918590811061298a57fe5b9060005260206000209060020201600101548560006040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b15156129f157600080fd5b6102c65a03f11515612a0257600080fd5b505050604051805190501515612a1757600080fd5b60010161293f565b505050949350505050565b50600160a060020a031660009081526006602052604090205460ff1690565b600160a060020a03331660009081526020819052604081206001015460e060020a908102811614612a7957600080fd5b7f65787465726e616c546f6b656e5472616e7366657246726f6d0000000000000060005b600554811015612b7d576005805482908110612ab557fe5b600091825260209091206002909102015460058054600160a060020a039092169163c1786ab291339185908110612ae857fe5b9060005260206000209060020201600101548560006040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b1515612b4f57600080fd5b6102c65a03f11515612b6057600080fd5b505050604051805190501515612b7557600080fd5b600101612a9d565b87600160a060020a031633600160a060020a03167f283faba4b8dcfe263728666be500623fdf5ae89ac78e40952fe2493f918ed62c898989604051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a3600154600160a060020a031663b756d5a28989898960006040516020015260405160e060020a63ffffffff8716028152600160a060020a0394851660048201529284166024840152921660448201526064810191909152608401602060405180830381600087803b1515612c5457600080fd5b6102c65a03f11515612c6557600080fd5b50505060405180519350505060005b600554811015612d54576005805482908110612c8c57fe5b600091825260209091206002909102015460058054600160a060020a0390921691638043154d91339185908110612cbf57fe5b9060005260206000209060020201600101548560006040516020015260405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b1515612d2657600080fd5b6102c65a03f11515612d3757600080fd5b505050604051805190501515612d4c57600080fd5b600101612c74565b505095945050505050565b604080519081016040526000808252602082015290565b815481835581811511612da257600202816002028360005260206000209182019101612da29190612da7565b505050565b612de391905b80821115612ddf57805473ffffffffffffffffffffffffffffffffffffffff1916815560006001820155600201612dad565b5090565b905600a165627a7a7230582054c543f94267e8d85f2711160aae1fc3a50b2e99d435b56a4a81231bf73bebc80029",
  "sourceMap": "462:15395:6:-;;;3106:281;;;;;;;;;;;;;;;;;;;;;;3177:6;:16;;-1:-1:-1;;;;;;3177:16:6;-1:-1:-1;;;;;3177:16:6;;;;;;;;;;;;;-1:-1:-1;3217:6:6;;-1:-1:-1;3217:18:6;-1:-1:-1;3217:20:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3203:11;:34;;-1:-1:-1;;;;;;3203:34:6;-1:-1:-1;;;;;3203:34:6;;;;;;-1:-1:-1;3266:6:6;;;-1:-1:-1;3266:23:6;-1:-1:-1;3266:25:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3247:16;:44;;-1:-1:-1;;;;;;3247:44:6;-1:-1:-1;;;;;3247:44:6;;;;;;;;;;-1:-1:-1;3323:57:6;;;;;;;;;;3351:1;3323:57;;;3367:11;3323:57;;;;;;;;-1:-1:-1;;;;;3309:10:6;3301:19;;;;;;;3323:57;3301:79;;;;;;;;;;;;;;;;;-1:-1:-1;;3301:79:6;;;;;;;;;-1:-1:-1;;462:15395:6;;;;;;",
  "deployedSourceMap": "462:15395:6:-;;;;;;;;-1:-1:-1;;;462:15395:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3455:8;;;6976:601;;;;;;;;;;-1:-1:-1;;;;;6976:601:6;;;;;;;;;;;;;;;;;;;;;;;;;;;8131:138;;;;;;;;;;-1:-1:-1;;;;;8131:138:6;;;;;;;;;;;;;;;;;;;;;;;;;1494:28;;;;;;;;;;;;;;;-1:-1:-1;;;;;1494:28:6;;;;;;;;;;;;;;;10974:673;;;;;;;;;;-1:-1:-1;;;;;10974:673:6;;;;;;;;;;9806:938;;;;;;;;;;-1:-1:-1;;;;;9806:938:6;;;;;;;;;;1302:20;;;;;;;;;;;;11987:262;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11987:262:6;;-1:-1:-1;;;11987:262:6;;-1:-1:-1;;;;;11987:262:6;;-1:-1:-1;11987:262:6;;-1:-1:-1;;11987:262:6;12443:267;;;;;;;;;;;;-1:-1:-1;;;;;12443:267:6;;;;;;;;;;5222:285;;;;;;;;;;;;-1:-1:-1;;;;;5222:285:6;;;;;;;;;;14623:418;;;;;;;;;;-1:-1:-1;;;;;14623:418:6;;;;;;;;;;;;;;;;;;1756:75;;;;;;;;;;;;-1:-1:-1;;;;;1756:75:6;;;;;;;;;;;;;;;;;;;;;;;;;;1625:43;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1625:43:6;;;;;;;;;;;;;;;;;;;;;7689:270;;;;;;;;;;;;-1:-1:-1;;;;;7689:270:6;;;4732:301;;;;;;;;;;;;-1:-1:-1;;;;;4732:301:6;;;;;;;;;;8445:119;;;;;;;;;;;;-1:-1:-1;;;;;8445:119:6;;;1361:34;;;;;;;;;;;;8275:139;;;;;;;;;;-1:-1:-1;;;;;8275:139:6;;;;;;;;;;;;;-1:-1:-1;;;;;;8275:139:6;;;;;;;;;;;;;;;7965:160;;;;;;;;;;-1:-1:-1;;;;;7965:160:6;;;;;;;;;;12994:359;;;;;;;;;;-1:-1:-1;;;;;12994:359:6;;;;;;;;;;;;;;;;;;15422:433;;;;;;;;;;-1:-1:-1;;;;;15422:433:6;;;;;;;;;;;;;;;;;;1256:39;;;;;;;;;;;;-1:-1:-1;;;;;1256:39:6;;;;;;;;;-1:-1:-1;;;;;;1256:39:6;;;;;;;;;;;;;;;;1328:27;;;;;;;;;;;;8999:618;;;;;;;;;;-1:-1:-1;;;;;8999:618:6;;;;;;;;;;;;;5784:1043;;;;;;;;;;-1:-1:-1;;;;;5784:1043:6;;;;;;;;-1:-1:-1;;;;;;5784:1043:6;;;;;;;;;8570:180;;;;;;;;;;-1:-1:-1;;;;;8570:180:6;;;;;;;;;;13843:404;;;;;;;;;;-1:-1:-1;;;;;13843:404:6;;;;;;;;;;;;;;;;;;;;;;;6976:601;-1:-1:-1;;;;;3681:10:6;3673:19;7126:4;3673:19;;;;;;;;;;-1:-1:-1;3673:31:6;;-1:-1:-1;;;3673:31:6;3718:9;3673:41;;;:54;3665:63;;;;;;4016:518;4073:10;4093:207;4114:17;:24;4108:30;;4093:207;;;4197:17;:24;;4215:5;;4197:24;;;;;;;;;;;;;;;;;;;:34;4250:17;:24;;-1:-1:-1;;;;;4197:34:6;;;;4170:67;;4238:10;;4268:5;;4250:24;;;;;;;;;;;;;;;;:31;;;4283:4;4170:118;;;;;;;;;;;-1:-1:-1;;;4170:118:6;;;-1:-1:-1;;;;;4170:118:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4162:127;;;;;;;;4139:7;;4093:207;;;-1:-1:-1;;;;;7188:16:6;;7237:1;7188:16;;;;;;;;;;-1:-1:-1;7188:28:6;;-1:-1:-1;;;7188:28:6;;;:38;:51;7184:96;;;7262:5;7255:12;;;;7184:96;7410:10;-1:-1:-1;;;;;7402:19:6;;;7446:1;7402:19;;;;;;;;;;;-1:-1:-1;7402:31:6;;;;7371:16;;;;;;;:28;;-1:-1:-1;;;7402:31:6;;;7401:32;7371:28;;:63;7359:10;:76;:89;7351:98;;;;;;-1:-1:-1;;;;;7479:37:6;;;;7496:10;7479:37;;;;;;;;;;;-1:-1:-1;;;;;7533:16:6;;:7;:16;;;;;;;;;;7526:23;;;-1:-1:-1;7526:23:6;;;;;-1:-1:-1;;7526:23:6;;;-1:-1:-1;;4309:1:6;-1:-1:-1;4333:1:6;4320:208;4341:17;:24;4335:30;;4320:208;;;4424:17;:24;;4442:5;;4424:24;;;;;;;;;;;;;;;;;;;:34;4478:17;:24;;-1:-1:-1;;;;;4424:34:6;;;;4397:68;;4466:10;;4496:5;;4478:24;;;;;;;;;;;;;;;;:31;;;4511:4;4397:119;;;;;;;;;;;-1:-1:-1;;;4397:119:6;;;-1:-1:-1;;;;;4397:119:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4389:128;;;;;;;;4366:7;;4320:208;;;3738:1;;6976:601;;;;:::o;8131:138::-;-1:-1:-1;;;;;;8235:16:6;8209:7;8235:16;;;;;;;;;;:27;;8131:138::o;1494:28::-;;;-1:-1:-1;;;;;1494:28:6;;:::o;10974:673::-;-1:-1:-1;;;;;3945:10:6;3937:19;11072:4;3937:19;;;;;;;;;;-1:-1:-1;3937:31:6;;-1:-1:-1;;;3937:31:6;3982:9;3937:41;;;:54;3929:63;;;;;;11100:13;;-1:-1:-1;;;;;11100:13:6;:27;11092:36;;;;;;-1:-1:-1;;;;;11201:28:6;;;;11193:37;;;;;;11240:13;:30;;-1:-1:-1;;11240:30:6;-1:-1:-1;;;;;11240:30:6;;;;;;;;;;-1:-1:-1;11280:6:6;;:24;11240:30;11280:40;;;;;-1:-1:-1;;;11280:40:6;;;-1:-1:-1;;;;;11280:40:6;;;;;;;;;;-1:-1:-1;11280:40:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11334:11:6;;-1:-1:-1;;;;;11365:4:6;11334:36;;;-1:-1:-1;11334:11:6;:17;:11;:19;;;;;;;-1:-1:-1;;;11334:19:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11334:36:6;;;;;11330:112;;-1:-1:-1;11330:112:6;;11386:11;;-1:-1:-1;;;;;11386:11:6;:29;11416:14;11386:45;;;;;-1:-1:-1;;;11386:45:6;;;-1:-1:-1;;;;;11386:45:6;;;;;;;;;;-1:-1:-1;11386:45:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11330:112;11455:16;;-1:-1:-1;;;;;11491:4:6;11455:41;;;:16;:22;:16;:24;;;;;;;-1:-1:-1;;;11455:24:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11455:41:6;;;;;11451:122;;-1:-1:-1;11451:122:6;;11512:16;;-1:-1:-1;;;;;11512:16:6;:34;11547:14;11512:50;;;;;-1:-1:-1;;;11512:50:6;;;-1:-1:-1;;;;;11512:50:6;;;;;;;;;;-1:-1:-1;11512:50:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11451:122;11605:13;;11582:37;;11600:4;;-1:-1:-1;;;;;11605:13:6;11582:37;;-1:-1:-1;;;;;11582:37:6;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11636:4:6;10974:673;;;;:::o;9806:938::-;9921:4;9941:56;;:::i;:::-;10191:40;;:::i;:::-;-1:-1:-1;;;;;3817:10:6;3809:19;:7;:19;;;;;;;;;;-1:-1:-1;3809:31:6;;-1:-1:-1;;;3809:31:6;3854:9;3809:41;;;:54;3801:63;;;;;;-1:-1:-1;;;;;10000:44:6;;;;;;:25;:44;;;;;;;;;9941:103;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9941:103:6;10059:33;10055:661;;;10145:17;:24;-1:-1:-1;;10145:26:6;10112:30;;;;:59;10108:382;;;10234:17;10252:24;;-1:-1:-1;;10252:26:6;;;10234:45;;;;;;;;;;;;;;;;10191:88;;;;;;;;;;-1:-1:-1;;;;;10191:88:6;;;-1:-1:-1;10191:88:6;;;;;;;;;;;;;;-1:-1:-1;10191:88:6;;10297:17;;10315:30;;;10297:49;;;;;;;;;;;;;;;;;;:68;;;;;;-1:-1:-1;;10297:68:6;-1:-1:-1;;;;;10297:68:6;;;;;;;;;;;;;;;;-1:-1:-1;10445:30:6;;;;10383:25;:53;10409:16;:26;-1:-1:-1;;;;;10383:53:6;;;;;;;;;;;;-1:-1:-1;10383:53:6;-1:-1:-1;10383:59:6;:92;10108:382;10503:17;:26;;;;;-1:-1:-1;;10503:26:6;;;:::i;:::-;-1:-1:-1;;;;;;10550:44:6;;;;;;:25;:44;;;;;;;10543:51;;-1:-1:-1;;10543:51:6;;;-1:-1:-1;10543:51:6;;;;;10608:72;;10550:44;;10649:30;;;10608:72;;-1:-1:-1;;;;;10608:72:6;;;;;;;;;;;;;;;;;;;;;10701:4;10694:11;;;;10055:661;-1:-1:-1;10732:5:6;;9806:938;-1:-1:-1;;;;9806:938:6:o;1302:20::-;;;-1:-1:-1;;;;;1302:20:6;;:::o;11987:262::-;3550:10;-1:-1:-1;;;;;3542:19:6;12130:4;3542:19;;;;;;;;;;-1:-1:-1;3542:31:6;;-1:-1:-1;;;3542:31:6;;;:41;;:54;3534:63;;;;;;4016:518;4073:10;4093:207;4114:17;:24;4108:30;;4093:207;;;4197:17;:24;;4215:5;;4197:24;;;;;;;;;;;;;;;;;;;:34;4250:17;:24;;-1:-1:-1;;;;;4197:34:6;;;;4170:67;;4238:10;;4268:5;;4250:24;;;;;;;;;;;;;;;;:31;;;4283:4;4170:118;;;;;;;;;;;-1:-1:-1;;;4170:118:6;;;-1:-1:-1;;;;;4170:118:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4162:127;;;;;;;;4139:7;;4093:207;;;-1:-1:-1;;;;;12164:10:6;12150:34;;12176:7;12150:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:2;8:100;;;99:1;94:3;90;84:5;71:3;;;64:6;52:2;45:3;8:100;;;12:14;3:109;;;;;;;;;;;;;;;;;12201:6:6;;-1:-1:-1;;;;;12201:6:6;:20;12222:10;12234:7;12201:6;:41;;;;;;;-1:-1:-1;;;12201:41:6;;;;;;-1:-1:-1;;;;;12201:41:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:2;8:100;;;99:1;94:3;90;84:5;71:3;;;64:6;52:2;45:3;8:100;;;12:14;3:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1;;;4333:1:6;4320:208;4341:17;:24;4335:30;;4320:208;;;4424:17;:24;;4442:5;;4424:24;;;;;;;;;;;;;;;;;;;:34;4478:17;:24;;-1:-1:-1;;;;;4424:34:6;;;;4397:68;;4466:10;;4496:5;;4478:24;;;;;;;;;;;;;;;;:31;;;4511:4;4397:119;;;;;;;;;;;-1:-1:-1;;;4397:119:6;;;-1:-1:-1;;;;;4397:119:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4389:128;;;;;;;;4366:7;;4320:208;;12443:267;3550:10;-1:-1:-1;;;;;3542:19:6;12591:4;3542:19;;;;;;;;;;-1:-1:-1;3542:31:6;;-1:-1:-1;;;3542:31:6;;;:41;;:54;3534:63;;;;;;4016:518;4073:10;4093:207;4114:17;:24;4108:30;;4093:207;;;4197:17;:24;;4215:5;;4197:24;;;;;;;;;;;;;;;;;;;:34;4250:17;:24;;-1:-1:-1;;;;;4197:34:6;;;;4170:67;;4238:10;;4268:5;;4250:24;;;;;;;;;;;;;;;;:31;;;4283:4;4170:118;;;;;;;;;;;-1:-1:-1;;;4170:118:6;;;-1:-1:-1;;;;;4170:118:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4162:127;;;;;;;;4139:7;;4093:207;;;-1:-1:-1;;;;;12611:40:6;;;;12621:10;12611:40;;12633:12;12611:40;;;;;;;;;;;;;;12668:6;;-1:-1:-1;;;;;12668:6:6;:16;12685:12;12699:3;12668:6;:35;;;;;;;;;;-1:-1:-1;;;12668:35:6;;;;;;;;;;-1:-1:-1;;;;;12668:35:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4333:1:6;4320:208;4341:17;:24;4335:30;;4320:208;;;4424:17;:24;;4442:5;;4424:24;;;;;;;;;;;;;;;;;;;:34;4478:17;:24;;-1:-1:-1;;;;;4424:34:6;;;;4397:68;;4466:10;;4496:5;;4478:24;;;;;;;;;;;;;;;;:31;;;4511:4;4397:119;;;;;;;;;;;-1:-1:-1;;;4397:119:6;;;-1:-1:-1;;;;;4397:119:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4389:128;;;;;;;;4366:7;;4320:208;;;3607:1;;12443:267;;;;;:::o;5222:285::-;3550:10;-1:-1:-1;;;;;3542:19:6;5379:4;3542:19;;;;;;;;;;-1:-1:-1;3542:31:6;;-1:-1:-1;;;3542:31:6;;;:41;;:54;3534:63;;;;;;4016:518;4073:10;4093:207;4114:17;:24;4108:30;;4093:207;;;4197:17;:24;;4215:5;;4197:24;;;;;;;;;;;;;;;;;;;:34;4250:17;:24;;-1:-1:-1;;;;;4197:34:6;;;;4170:67;;4238:10;;4268:5;;4250:24;;;;;;;;;;;;;;;;:31;;;4283:4;4170:118;;;;;;;;;;;-1:-1:-1;;;4170:118:6;;;-1:-1:-1;;;;;4170:118:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4162:127;;;;;;;;4139:7;;4093:207;;;-1:-1:-1;;;;;5399:45:6;;;;5410:10;5399:45;;5436:7;5399:45;;;;;;;;;;;;;;5461:11;;-1:-1:-1;;;;;5461:11:6;:16;5478:12;5492:7;5461:11;:39;;;;;;;;;;-1:-1:-1;;;5461:39:6;;;-1:-1:-1;;;;;5461:39:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4333:1:6;4320:208;4341:17;:24;4335:30;;4320:208;;;4424:17;:24;;4442:5;;4424:24;;;;;;;;;;;;;;;;;;;:34;4478:17;:24;;-1:-1:-1;;;;;4424:34:6;;;;4397:68;;4466:10;;4496:5;;4478:24;;;;;;;;;;;;;;;;:31;;;4511:4;4397:119;;;;;;;;;;;-1:-1:-1;;;4397:119:6;;;-1:-1:-1;;;;;4397:119:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4389:128;;;;;;;;4366:7;;4320:208;;14623:418;3550:10;-1:-1:-1;;;;;3542:19:6;14845:4;3542:19;;;;;;;;;;-1:-1:-1;3542:31:6;;-1:-1:-1;;;3542:31:6;;;:41;;:54;3534:63;;;;;;4016:518;4073:10;4093:207;4114:17;:24;4108:30;;4093:207;;;4197:17;:24;;4215:5;;4197:24;;;;;;;;;;;;;;;;;;;:34;4250:17;:24;;-1:-1:-1;;;;;4197:34:6;;;;4170:67;;4238:10;;4268:5;;4250:24;;;;;;;;;;;;;;;;:31;;;4283:4;4170:118;;;;;;;;;;;-1:-1:-1;;;4170:118:6;;;-1:-1:-1;;;;;4170:118:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4162:127;;;;;;;;4139:7;;4093:207;;;-1:-1:-1;;;;;14865:77:6;;;;14895:10;14865:77;;14921:8;14930:11;14865:77;;-1:-1:-1;;;;;14865:77:6;;;;;;;;;;;;;;;;;;;;;14959:6;;-1:-1:-1;;;;;14959:6:6;:36;14996:14;15012:8;15022:11;14959:6;:75;;;;;;;;;;-1:-1:-1;;;14959:75:6;;;-1:-1:-1;;;;;14959:75:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4333:1:6;4320:208;4341:17;:24;4335:30;;4320:208;;;4424:17;:24;;4442:5;;4424:24;;;;;;;;;;;;;;;;;;;:34;4478:17;:24;;-1:-1:-1;;;;;4424:34:6;;;;4397:68;;4466:10;;4496:5;;4478:24;;;;;;;;;;;;;;;;:31;;;4511:4;4397:119;;;;;;;;;;;-1:-1:-1;;;4397:119:6;;;-1:-1:-1;;;;;4397:119:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4389:128;;;;;;;;4366:7;;4320:208;;;3607:1;;14623:418;;;;;;:::o;1756:75::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;1625:43::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1625:43:6;;;;-1:-1:-1;1625:43:6;:::o;7689:270::-;7737:4;7757:41;7776:10;7795:1;7757:18;:41::i;:::-;:50;;7753:93;;-1:-1:-1;7830:5:6;7823:12;;7753:93;-1:-1:-1;;;;;7870:10:6;7862:19;:7;:19;;;;;;;;;;;7855:26;;;-1:-1:-1;7855:26:6;;;;;-1:-1:-1;;7855:26:6;;;7862:19;;7891:40;;;;;;;;;;-1:-1:-1;7948:4:6;7689:270;;;;:::o;4732:301::-;3550:10;-1:-1:-1;;;;;3542:19:6;4896:4;3542:19;;;;;;;;;;-1:-1:-1;3542:31:6;;-1:-1:-1;;;3542:31:6;;;:41;;:54;3534:63;;;;;;4016:518;4073:10;4093:207;4114:17;:24;4108:30;;4093:207;;;4197:17;:24;;4215:5;;4197:24;;;;;;;;;;;;;;;;;;;:34;4250:17;:24;;-1:-1:-1;;;;;4197:34:6;;;;4170:67;;4238:10;;4268:5;;4250:24;;;;;;;;;;;;;;;;:31;;;4283:4;4170:118;;;;;;;;;;;-1:-1:-1;;;4170:118:6;;;-1:-1:-1;;;;;4170:118:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4162:127;;;;;;;;4139:7;;4093:207;;;-1:-1:-1;;;;;4916:49:6;;;;4931:10;4916:49;;4957:7;4916:49;;;;;;;;;;;;;;4982:16;;-1:-1:-1;;;;;4982:16:6;:21;5004:12;5018:7;4982:16;:44;;;;;;;;;;-1:-1:-1;;;4982:44:6;;;-1:-1:-1;;;;;4982:44:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4333:1:6;4320:208;4341:17;:24;4335:30;;4320:208;;;4424:17;:24;;4442:5;;4424:24;;;;;;;;;;;;;;;;;;;:34;4478:17;:24;;-1:-1:-1;;;;;4424:34:6;;;;4397:68;;4466:10;;4496:5;;4478:24;;;;;;;;;;;;;;;;:31;;;4511:4;4397:119;;;;;;;;;;;-1:-1:-1;;;4397:119:6;;;-1:-1:-1;;;;;4397:119:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4389:128;;;;;;;;4366:7;;4320:208;;8445:119;-1:-1:-1;8533:17:6;:24;;8445:119::o;1361:34::-;;;-1:-1:-1;;;;;1361:34:6;;:::o;8275:139::-;-1:-1:-1;;;;;;8379:16:6;8354:6;8379:16;;;;;;;;;;-1:-1:-1;8379:28:6;;-1:-1:-1;;;8379:28:6;;8275:139::o;7965:160::-;-1:-1:-1;;;;;;8066:16:6;8042:4;8066:16;;;;;;;;;;-1:-1:-1;8066:28:6;;-1:-1:-1;;;8066:28:6;;;:38;:51;;;7965:160::o;12994:359::-;3550:10;-1:-1:-1;;;;;3542:19:6;13190:4;3542:19;;;;;;;;;;-1:-1:-1;3542:31:6;;-1:-1:-1;;;3542:31:6;;;:41;;:54;3534:63;;;;;;4016:518;4073:10;4093:207;4114:17;:24;4108:30;;4093:207;;;4197:17;:24;;4215:5;;4197:24;;;;;;;;;;;;;;;;;;;:34;4250:17;:24;;-1:-1:-1;;;;;4197:34:6;;;;4170:67;;4238:10;;4268:5;;4250:24;;;;;;;;;;;;;;;;:31;;;4283:4;4170:118;;;;;;;;;;;-1:-1:-1;;;4170:118:6;;;-1:-1:-1;;;;;4170:118:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4162:127;;;;;;;;4139:7;;4093:207;;;-1:-1:-1;;;;;13210:62:6;;;;;;;;13232:10;13210:62;;13265:6;13210:62;;;;;;;;;;;;;;13289:6;;-1:-1:-1;;;;;13289:6:6;:28;13318:14;13334:3;13339:6;13289;:57;;;;;;;;;;-1:-1:-1;;;13289:57:6;;;-1:-1:-1;;;;;13289:57:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4333:1:6;4320:208;4341:17;:24;4335:30;;4320:208;;;4424:17;:24;;4442:5;;4424:24;;;;;;;;;;;;;;;;;;;:34;4478:17;:24;;-1:-1:-1;;;;;4424:34:6;;;;4397:68;;4466:10;;4496:5;;4478:24;;;;;;;;;;;;;;;;:31;;;4511:4;4397:119;;;;;;;;;;;-1:-1:-1;;;4397:119:6;;;-1:-1:-1;;;;;4397:119:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4389:128;;;;;;;;4366:7;;4320:208;;15422:433;3550:10;-1:-1:-1;;;;;3542:19:6;15649:4;3542:19;;;;;;;;;;-1:-1:-1;3542:31:6;;-1:-1:-1;;;3542:31:6;;;:41;;:54;3534:63;;;;;;4016:518;4073:10;4093:207;4114:17;:24;4108:30;;4093:207;;;4197:17;:24;;4215:5;;4197:24;;;;;;;;;;;;;;;;;;;:34;4250:17;:24;;-1:-1:-1;;;;;4197:34:6;;;;4170:67;;4238:10;;4268:5;;4250:24;;;;;;;;;;;;;;;;:31;;;4283:4;4170:118;;;;;;;;;;;-1:-1:-1;;;4170:118:6;;;-1:-1:-1;;;;;4170:118:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4162:127;;;;;;;;4139:7;;4093:207;;;-1:-1:-1;;;;;15669:82:6;;;;15699:10;15669:82;;15725:8;15734:16;15669:82;;-1:-1:-1;;;;;15669:82:6;;;;;;;;;;;;;;;;;;;;;15768:6;;-1:-1:-1;;;;;15768:6:6;:36;15805:14;15821:8;15831:16;15768:6;:80;;;;;;;;;;-1:-1:-1;;;15768:80:6;;;-1:-1:-1;;;;;15768:80:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4333:1:6;4320:208;4341:17;:24;4335:30;;4320:208;;;4424:17;:24;;4442:5;;4424:24;;;;;;;;;;;;;;;;;;;:34;4478:17;:24;;-1:-1:-1;;;;;4424:34:6;;;;4397:68;;4466:10;;4496:5;;4478:24;;;;;;;;;;;;;;;;:31;;;4511:4;4397:119;;;;;;;;;;;-1:-1:-1;;;4397:119:6;;;-1:-1:-1;;;;;4397:119:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4389:128;;;;;;;;4366:7;;4320:208;;1256:39;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1256:39:6;;:::o;1328:27::-;;;-1:-1:-1;;;;;1328:27:6;;:::o;8999:618::-;-1:-1:-1;;;;;3817:10:6;3809:19;9127:4;3809:19;;;;;;;;;;-1:-1:-1;3809:31:6;;-1:-1:-1;;;3809:31:6;3854:9;3809:41;;;:54;3801:63;;;;;;-1:-1:-1;;;;;9152:44:6;;;;;;:25;:44;;;;;:53;;;9151:54;9147:386;;;9221:17;:67;;;;;;:17;:67;;:::i;:::-;;;;;;;;;;;;9244:43;;;;;;;;-1:-1:-1;;;;;9244:43:6;;;;;;;;;;;;-1:-1:-1;9244:43:6;9221:67;;;-1:-1:-1;;9221:67:6;-1:-1:-1;;;;;9221:67:6;;;;;;;;;;;;;;;;-1:-1:-1;9349:57:6;;-1:-1:-1;9349:57:6;;;;;;;;;9374:4;9349:57;;9379:17;:24;-1:-1:-1;;9379:26:6;9349:57;;;;;;;;-1:-1:-1;;;;;9302:44:6;;-1:-1:-1;9302:44:6;;;:25;:44;;;;9349:57;9302:104;;;-1:-1:-1;;9302:104:6;;;;;;;;;;;;;;;;-1:-1:-1;9147:386:6;;;-1:-1:-1;;;;;9454:44:6;;;;;;:25;:44;;;;;-1:-1:-1;9454:50:6;;9436:17;:69;;9515:7;;9454:50;9436:69;;;;;;;;;;;;;;:76;:69;;;;;:76;:86;9147:386;9542:47;9562:17;9581:7;9542:47;;-1:-1:-1;;;;;9542:47:6;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9606:4:6;8999:618;;;;;:::o;5784:1043::-;5971:4;5992:20;;:::i;:::-;-1:-1:-1;;;;;3681:10:6;3673:19;:7;:19;;;;;;;;;;-1:-1:-1;3673:31:6;;-1:-1:-1;;;3673:31:6;3718:9;3673:41;;;:54;3665:63;;;;;;4016:518;4073:10;4093:207;4114:17;:24;4108:30;;4093:207;;;4197:17;:24;;4215:5;;4197:24;;;;;;;;;;;;;;;;;;;:34;4250:17;:24;;-1:-1:-1;;;;;4197:34:6;;;;4170:67;;4238:10;;4268:5;;4250:24;;;;;;;;;;;;;;;;:31;;;4283:4;4170:118;;;;;;;;;;;-1:-1:-1;;;4170:118:6;;;-1:-1:-1;;;;;4170:118:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4162:127;;;;;;;;4139:7;;4093:207;;;-1:-1:-1;;;;;6015:16:6;;:7;:16;;;;;;;;;;;;;;5992:39;;;;;;;;;;;;;;;;;-1:-1:-1;;;5992:39:6;;;-1:-1:-1;;;;;;5992:39:6;;;;;;;;6385:10;-1:-1:-1;;;;;6377:19:6;-1:-1:-1;6377:19:6;;;;;;;;;;:31;;;;5992:39;;-1:-1:-1;;;6377:31:6;;6376:32;;6355:18;6342:31;;6330:79;:10;:79;:92;6322:101;;;;;;6567:10;-1:-1:-1;;;;;6559:19:6;6603:1;6559:19;;;;;;;;;;-1:-1:-1;6559:31:6;;-1:-1:-1;;;6559:31:6;6558:32;;6538:18;;;:53;6526:10;:66;:79;6518:88;;;;;;-1:-1:-1;;;;;6650:16:6;;;:7;:16;;;;;;;;;;;;:41;;;-1:-1:-1;6701:28:6;:53;;-1:-1:-1;;6701:53:6;-1:-1:-1;;;6732:22:6;;;6701:53;;;;6650:16;;6779:10;6764:35;;;;;;;;;;;;6816:4;6809:11;;-1:-1:-1;4333:1:6;4320:208;4341:17;:24;4335:30;;4320:208;;;4424:17;:24;;4442:5;;4424:24;;;;;;;;;;;;;;;;;;;:34;4478:17;:24;;-1:-1:-1;;;;;4424:34:6;;;;4397:68;;4466:10;;4496:5;;4478:24;;;;;;;;;;;;;;;;:31;;;4511:4;4397:119;;;;;;;;;;;-1:-1:-1;;;4397:119:6;;;-1:-1:-1;;;;;4397:119:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4389:128;;;;;;;;4366:7;;4320:208;;;3738:1;;5784:1043;;;;;;;:::o;8570:180::-;-1:-1:-1;;;;;;8690:44:6;8667:4;8690:44;;;:25;:44;;;;;:53;;;;8570:180::o;13843:404::-;3550:10;-1:-1:-1;;;;;3542:19:6;14062:4;3542:19;;;;;;;;;;-1:-1:-1;3542:31:6;;-1:-1:-1;;;3542:31:6;;;:41;;:54;3534:63;;;;;;4016:518;4073:10;4093:207;4114:17;:24;4108:30;;4093:207;;;4197:17;:24;;4215:5;;4197:24;;;;;;;;;;;;;;;;;;;:34;4250:17;:24;;-1:-1:-1;;;;;4197:34:6;;;;4170:67;;4238:10;;4268:5;;4250:24;;;;;;;;;;;;;;;;:31;;;4283:4;4170:118;;;;;;;;;;;-1:-1:-1;;;4170:118:6;;;-1:-1:-1;;;;;4170:118:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4162:127;;;;;;;;4139:7;;4093:207;;;-1:-1:-1;;;;;14082:73:6;;;;14108:10;14082:73;;14136:5;14143:3;14148:6;14082:73;;-1:-1:-1;;;;;14082:73:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14172:6;;-1:-1:-1;;;;;14172:6:6;:32;14205:14;14221:5;14228:3;14233:6;14172;:68;;;;;;;;;;-1:-1:-1;;;14172:68:6;;;-1:-1:-1;;;;;14172:68:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4333:1:6;4320:208;4341:17;:24;4335:30;;4320:208;;;4424:17;:24;;4442:5;;4424:24;;;;;;;;;;;;;;;;;;;:34;4478:17;:24;;-1:-1:-1;;;;;4424:34:6;;;;4397:68;;4466:10;;4496:5;;4478:24;;;;;;;;;;;;;;;;:31;;;4511:4;4397:119;;;;;;;;;;;-1:-1:-1;;;4397:119:6;;;-1:-1:-1;;;;;4397:119:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4389:128;;;;;;;;4366:7;;4320:208;;;3607:1;;13843:404;;;;;;;:::o;462:15395::-;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;;462:15395:6;;;-1:-1:-1;;462:15395:6;;;;;;;;;;;;;:::o",
  "source": "pragma solidity ^0.4.18;\n\nimport \"./Avatar.sol\";\nimport \"./Reputation.sol\";\nimport \"./DAOToken.sol\";\nimport \"../globalConstraints/GlobalConstraintInterface.sol\";\nimport \"./ControllerInterface.sol\";\n\n\n/**\n * @title Controller contract\n * @dev A controller controls the organizations tokens,reputation and avatar.\n * It is subject to a set of schemes and constraints that determine its behavior.\n * Each scheme has it own parameters and operation permissions.\n */\ncontract Controller is ControllerInterface {\n\n    struct Scheme {\n        bytes32 paramsHash;  // a hash \"configuration\" of the scheme\n        bytes4  permissions; // A bitwise flags of permissions,\n                             // All 0: Not registered,\n                             // 1st bit: Flag if the scheme is registered,\n                             // 2nd bit: Scheme can register other schemes\n                             // 3rd bit: Scheme can add/remove global constraints\n                             // 4th bit: Scheme can upgrade the controller\n    }\n\n    struct GlobalConstraint {\n        address gcAddress;\n        bytes32 params;\n    }\n\n    struct GlobalConstraintRegister {\n        bool register; //is register\n        uint index;    //index at globalConstraints\n    }\n\n    mapping(address=>Scheme) public schemes;\n\n    Avatar public avatar;\n    DAOToken public nativeToken;\n    Reputation public nativeReputation;\n  // newController will point to the new controller after the present controller is upgraded\n    address public newController;\n  // globalConstraints that determine pre- and post-conditions for all actions on the controller\n    GlobalConstraint[] public globalConstraints;\n  // globalConstraintsRegister indicate is a globalConstraints is register or not\n    mapping(address=>GlobalConstraintRegister) public globalConstraintsRegister;\n\n    event MintReputation (address indexed _sender, address indexed _beneficiary, int256 _amount);\n    event MintTokens (address indexed _sender, address indexed _beneficiary, uint256 _amount);\n    event RegisterScheme (address indexed _sender, address indexed _scheme);\n    event UnregisterScheme (address indexed _sender, address indexed _scheme);\n    event GenericAction (address indexed _sender, bytes32[] _params);\n    event SendEther (address indexed _sender, uint _amountInWei, address indexed _to);\n    event ExternalTokenTransfer (address indexed _sender, address indexed _externalToken, address indexed _to, uint _value);\n    event ExternalTokenTransferFrom (address indexed _sender, address indexed _externalToken, address _from, address _to, uint _value);\n    event ExternalTokenIncreaseApproval (address indexed _sender, StandardToken indexed _externalToken, address _spender, uint _value);\n    event ExternalTokenDecreaseApproval (address indexed _sender, StandardToken indexed _externalToken, address _spender, uint _value);\n    event AddGlobalConstraint(address _globalConstraint, bytes32 _params);\n    event RemoveGlobalConstraint(address _globalConstraint ,uint256 _index);\n    event UpgradeController(address _oldController,address _newController);\n\n    function Controller(\n        Avatar _avatar\n    ) public\n    {\n        avatar = _avatar;\n        nativeToken = avatar.nativeToken();\n        nativeReputation = avatar.nativeReputation();\n        schemes[msg.sender] = Scheme({paramsHash: bytes32(0),permissions: bytes4(0xF)});\n    }\n\n  // Do not allow mistaken calls:\n    function() public {\n        revert();\n    }\n\n  // Modifiers:\n    modifier onlyRegisteredScheme() {\n        require(schemes[msg.sender].permissions&bytes4(1) == bytes4(1));\n        _;\n    }\n\n    modifier onlyRegisteringSchemes() {\n        require(schemes[msg.sender].permissions&bytes4(2) == bytes4(2));\n        _;\n    }\n\n    modifier onlyGlobalConstraintsScheme() {\n        require(schemes[msg.sender].permissions&bytes4(4) == bytes4(4));\n        _;\n    }\n\n    modifier onlyUpgradingScheme() {\n        require(schemes[msg.sender].permissions&bytes4(8) == bytes4(8));\n        _;\n    }\n\n    modifier onlySubjectToConstraint(bytes32 func) {\n        uint index;\n        for (index = 0;index<globalConstraints.length;index++) {\n            require((GlobalConstraintInterface(globalConstraints[index].gcAddress)).pre(msg.sender, globalConstraints[index].params, func));\n        }\n        _;\n        for (index = 0;index<globalConstraints.length;index++) {\n            require((GlobalConstraintInterface(globalConstraints[index].gcAddress)).post(msg.sender, globalConstraints[index].params, func));\n        }\n    }\n\n    /**\n     * @dev mint reputation .\n     * @param  _amount amount of reputation to mint\n     * @param _beneficiary beneficiary address\n     * @return bool which represents a success\n     */\n    function mintReputation(int256 _amount, address _beneficiary,address)\n    public\n    onlyRegisteredScheme\n    onlySubjectToConstraint(\"mintReputation\")\n    returns(bool)\n    {\n        MintReputation(msg.sender, _beneficiary, _amount);\n        return nativeReputation.mint(_beneficiary, _amount);\n    }\n\n    /**\n     * @dev mint tokens .\n     * @param  _amount amount of token to mint\n     * @param _beneficiary beneficiary address\n     * @return bool which represents a success\n     */\n    function mintTokens(uint256 _amount, address _beneficiary,address)\n    public\n    onlyRegisteredScheme\n    onlySubjectToConstraint(\"mintTokens\")\n    returns(bool)\n    {\n        MintTokens(msg.sender, _beneficiary, _amount);\n        return nativeToken.mint(_beneficiary, _amount);\n    }\n\n  /**\n   * @dev register a scheme\n   * @param _scheme the address of the scheme\n   * @param _paramsHash a hashed configuration of the usage of the scheme\n   * @param _permissions the permissions the new scheme will have\n   * @return bool which represents a success\n   */\n    function registerScheme(address _scheme, bytes32 _paramsHash, bytes4 _permissions,address)\n    public\n    onlyRegisteringSchemes\n    onlySubjectToConstraint(\"registerScheme\")\n    returns(bool)\n    {\n\n        Scheme memory scheme = schemes[_scheme];\n\n    // Check scheme has at least the permissions it is changing, and at least the current permissions:\n    // Implementation is a bit messy. One must recall logic-circuits ^^\n\n    // produces non-zero if sender does not have all of the perms that are changing between old and new\n        require(bytes4(15)&(_permissions^scheme.permissions)&(~schemes[msg.sender].permissions) == bytes4(0));\n\n    // produces non-zero if sender does not have all of the perms in the old scheme\n        require(bytes4(15)&(scheme.permissions&(~schemes[msg.sender].permissions)) == bytes4(0));\n\n    // Add or change the scheme:\n        schemes[_scheme].paramsHash = _paramsHash;\n        schemes[_scheme].permissions = _permissions|bytes4(1);\n        RegisterScheme(msg.sender, _scheme);\n        return true;\n    }\n\n    /**\n     * @dev unregister a scheme\n     * @param _scheme the address of the scheme\n     * @return bool which represents a success\n     */\n    function unregisterScheme( address _scheme,address)\n    public\n    onlyRegisteringSchemes\n    onlySubjectToConstraint(\"unregisterScheme\")\n    returns(bool)\n    {\n    //check if the scheme is register\n        if (schemes[_scheme].permissions&bytes4(1) == bytes4(0)) {\n            return false;\n          }\n    // Check the unregistering scheme has enough permissions:\n        require(bytes4(15)&(schemes[_scheme].permissions&(~schemes[msg.sender].permissions)) == bytes4(0));\n\n    // Unregister:\n        UnregisterScheme(msg.sender, _scheme);\n        delete schemes[_scheme];\n        return true;\n    }\n\n    /**\n     * @dev unregister the caller's scheme\n     * @return bool which represents a success\n     */\n    function unregisterSelf(address) public returns(bool) {\n        if (isSchemeRegistered(msg.sender,address(0)) == false) {\n            return false;\n        }\n        delete schemes[msg.sender];\n        UnregisterScheme(msg.sender, msg.sender);\n        return true;\n    }\n\n    function isSchemeRegistered(address _scheme,address) public constant returns(bool) {\n        return (schemes[_scheme].permissions&bytes4(1) != bytes4(0));\n    }\n\n    function getSchemeParameters(address _scheme,address) public constant returns(bytes32) {\n        return schemes[_scheme].paramsHash;\n    }\n\n    function getSchemePermissions(address _scheme,address) public constant returns(bytes4) {\n        return schemes[_scheme].permissions;\n    }\n\n  // Global constraints:\n    function globalConstraintsCount(address) public constant returns(uint) {\n        return globalConstraints.length;\n    }\n\n    function isGlobalConstraintRegistered(address _globalConstraint,address) public constant returns(bool) {\n        return globalConstraintsRegister[_globalConstraint].register;\n    }\n\n    /**\n     * @dev add or update Global Constraint\n     * @param _globalConstraint the address of the global constraint to be added.\n     * @param _params the constraint parameters hash.\n     * @return bool which represents a success\n     */\n    function addGlobalConstraint(address _globalConstraint, bytes32 _params,address)\n    public onlyGlobalConstraintsScheme returns(bool)\n    {\n        if (!globalConstraintsRegister[_globalConstraint].register) {\n            globalConstraints.push(GlobalConstraint(_globalConstraint,_params));\n            globalConstraintsRegister[_globalConstraint] = GlobalConstraintRegister(true,globalConstraints.length-1);\n        }else {\n            globalConstraints[globalConstraintsRegister[_globalConstraint].index].params = _params;\n        }\n        AddGlobalConstraint(_globalConstraint, _params);\n        return true;\n    }\n\n    /**\n     * @dev remove Global Constraint\n     * @param _globalConstraint the address of the global constraint to be remove.\n     * @return bool which represents a success\n     */\n    function removeGlobalConstraint (address _globalConstraint,address)\n    public onlyGlobalConstraintsScheme returns(bool)\n    {\n        GlobalConstraintRegister memory globalConstraintRegister = globalConstraintsRegister[_globalConstraint];\n\n        if (globalConstraintRegister.register) {\n            if (globalConstraintRegister.index < globalConstraints.length-1) {\n                GlobalConstraint memory globalConstraint = globalConstraints[globalConstraints.length-1];\n                globalConstraints[globalConstraintRegister.index] = globalConstraint;\n                globalConstraintsRegister[globalConstraint.gcAddress].index = globalConstraintRegister.index;\n            }\n            globalConstraints.length--;\n            delete globalConstraintsRegister[_globalConstraint];\n            RemoveGlobalConstraint(_globalConstraint,globalConstraintRegister.index);\n            return true;\n        }\n        return false;\n    }\n\n  /**\n    * @dev upgrade the Controller\n    *      The function will trigger an event 'UpgradeController'.\n    * @param  _newController the address of the new controller.\n    * @return bool which represents a success\n    */\n    function upgradeController(address _newController,address)\n    public onlyUpgradingScheme returns(bool)\n    {\n        require(newController == address(0));   // so the upgrade could be done once for a contract.\n        require(_newController != address(0));\n        newController = _newController;\n        avatar.transferOwnership(_newController);\n        if (nativeToken.owner() == address(this)) {\n            nativeToken.transferOwnership(_newController);\n        }\n        if (nativeReputation.owner() == address(this)) {\n            nativeReputation.transferOwnership(_newController);\n        }\n        UpgradeController(this,newController);\n        return true;\n    }\n\n    /**\n    * @dev do a generic delegate call to the contract which called us.\n    * This function use delegatecall and might expose the organization to security\n    * risk. Use this function only if you really knows what you are doing.\n    * @param _params the params for the call.\n    * @return bool which represents success\n    */\n    function genericAction(bytes32[] _params,address)\n    public\n    onlyRegisteredScheme\n    onlySubjectToConstraint(\"genericAction\")\n    returns(bool)\n    {\n        GenericAction(msg.sender, _params);\n        return avatar.genericAction(msg.sender, _params);\n    }\n\n  /**\n   * @dev send some ether\n   * @param _amountInWei the amount of ether (in Wei) to send\n   * @param _to address of the beneficiary\n   * @return bool which represents a success\n   */\n    function sendEther(uint _amountInWei, address _to,address)\n    public\n    onlyRegisteredScheme\n    onlySubjectToConstraint(\"sendEther\")\n    returns(bool)\n    {\n        SendEther(msg.sender, _amountInWei, _to);\n        return avatar.sendEther(_amountInWei, _to);\n    }\n\n    /**\n    * @dev send some amount of arbitrary ERC20 Tokens\n    * @param _externalToken the address of the Token Contract\n    * @param _to address of the beneficiary\n    * @param _value the amount of ether (in Wei) to send\n    * @return bool which represents a success\n    */\n    function externalTokenTransfer(StandardToken _externalToken, address _to, uint _value,address)\n    public\n    onlyRegisteredScheme\n    onlySubjectToConstraint(\"externalTokenTransfer\")\n    returns(bool)\n    {\n        ExternalTokenTransfer(msg.sender, _externalToken, _to, _value);\n        return avatar.externalTokenTransfer(_externalToken, _to, _value);\n    }\n\n    /**\n    * @dev transfer token \"from\" address \"to\" address\n    *      One must to approve the amount of tokens which can be spend from the\n    *      \"from\" account.This can be done using externalTokenApprove.\n    * @param _externalToken the address of the Token Contract\n    * @param _from address of the account to send from\n    * @param _to address of the beneficiary\n    * @param _value the amount of ether (in Wei) to send\n    * @return bool which represents a success\n    */\n    function externalTokenTransferFrom(StandardToken _externalToken, address _from, address _to, uint _value,address)\n    public\n    onlyRegisteredScheme\n    onlySubjectToConstraint(\"externalTokenTransferFrom\")\n    returns(bool)\n    {\n        ExternalTokenTransferFrom(msg.sender, _externalToken, _from, _to, _value);\n        return avatar.externalTokenTransferFrom(_externalToken, _from, _to, _value);\n    }\n\n    /**\n    * @dev increase approval for the spender address to spend a specified amount of tokens\n    *      on behalf of msg.sender.\n    * @param _externalToken the address of the Token Contract\n    * @param _spender address\n    * @param _addedValue the amount of ether (in Wei) which the approval is referring to.\n    * @return bool which represents a success\n    */\n    function externalTokenIncreaseApproval(StandardToken _externalToken, address _spender, uint _addedValue,address)\n    public\n    onlyRegisteredScheme\n    onlySubjectToConstraint(\"externalTokenIncreaseApproval\")\n    returns(bool)\n    {\n        ExternalTokenIncreaseApproval(msg.sender,_externalToken,_spender,_addedValue);\n        return avatar.externalTokenIncreaseApproval(_externalToken, _spender, _addedValue);\n    }\n\n    /**\n    * @dev decrease approval for the spender address to spend a specified amount of tokens\n    *      on behalf of msg.sender.\n    * @param _externalToken the address of the Token Contract\n    * @param _spender address\n    * @param _subtractedValue the amount of ether (in Wei) which the approval is referring to.\n    * @return bool which represents a success\n    */\n    function externalTokenDecreaseApproval(StandardToken _externalToken, address _spender, uint _subtractedValue,address)\n    public\n    onlyRegisteredScheme\n    onlySubjectToConstraint(\"externalTokenDecreaseApproval\")\n    returns(bool)\n    {\n        ExternalTokenDecreaseApproval(msg.sender,_externalToken,_spender,_subtractedValue);\n        return avatar.externalTokenDecreaseApproval(_externalToken, _spender, _subtractedValue);\n    }\n}\n",
  "sourcePath": "/home/travis/build/dev-matan-tsuberi/daostack/contracts/controller/Controller.sol",
  "ast": {
    "attributes": {
      "absolutePath": "/home/travis/build/dev-matan-tsuberi/daostack/contracts/controller/Controller.sol",
      "exportedSymbols": {
        "Controller": [
          4159
        ]
      }
    },
    "children": [
      {
        "attributes": {
          "literals": [
            "solidity",
            "^",
            "0.4",
            ".18"
          ]
        },
        "id": 3067,
        "name": "PragmaDirective",
        "src": "0:24:6"
      },
      {
        "attributes": {
          "SourceUnit": 3066,
          "absolutePath": "/home/travis/build/dev-matan-tsuberi/daostack/contracts/controller/Avatar.sol",
          "file": "./Avatar.sol",
          "scope": 4160,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 3068,
        "name": "ImportDirective",
        "src": "26:22:6"
      },
      {
        "attributes": {
          "SourceUnit": 4545,
          "absolutePath": "/home/travis/build/dev-matan-tsuberi/daostack/contracts/controller/Reputation.sol",
          "file": "./Reputation.sol",
          "scope": 4160,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 3069,
        "name": "ImportDirective",
        "src": "49:26:6"
      },
      {
        "attributes": {
          "SourceUnit": 4400,
          "absolutePath": "/home/travis/build/dev-matan-tsuberi/daostack/contracts/controller/DAOToken.sol",
          "file": "./DAOToken.sol",
          "scope": 4160,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 3070,
        "name": "ImportDirective",
        "src": "76:24:6"
      },
      {
        "attributes": {
          "SourceUnit": 5891,
          "absolutePath": "/home/travis/build/dev-matan-tsuberi/daostack/contracts/globalConstraints/GlobalConstraintInterface.sol",
          "file": "../globalConstraints/GlobalConstraintInterface.sol",
          "scope": 4160,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 3071,
        "name": "ImportDirective",
        "src": "101:60:6"
      },
      {
        "attributes": {
          "SourceUnit": 4365,
          "absolutePath": "/home/travis/build/dev-matan-tsuberi/daostack/contracts/controller/ControllerInterface.sol",
          "file": "./ControllerInterface.sol",
          "scope": 4160,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 3072,
        "name": "ImportDirective",
        "src": "162:35:6"
      },
      {
        "attributes": {
          "contractDependencies": [
            4364
          ],
          "contractKind": "contract",
          "documentation": "@title Controller contract\n@dev A controller controls the organizations tokens,reputation and avatar.\nIt is subject to a set of schemes and constraints that determine its behavior.\nEach scheme has it own parameters and operation permissions.",
          "fullyImplemented": true,
          "linearizedBaseContracts": [
            4159,
            4364
          ],
          "name": "Controller",
          "scope": 4160
        },
        "children": [
          {
            "attributes": {
              "arguments": [
                null
              ]
            },
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "ControllerInterface",
                  "referencedDeclaration": 4364,
                  "type": "contract ControllerInterface"
                },
                "id": 3073,
                "name": "UserDefinedTypeName",
                "src": "485:19:6"
              }
            ],
            "id": 3074,
            "name": "InheritanceSpecifier",
            "src": "485:19:6"
          },
          {
            "attributes": {
              "canonicalName": "Controller.Scheme",
              "name": "Scheme",
              "scope": 4159,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "constant": false,
                  "name": "paramsHash",
                  "scope": 3079,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "bytes32",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "bytes32",
                      "type": "bytes32"
                    },
                    "id": 3075,
                    "name": "ElementaryTypeName",
                    "src": "536:7:6"
                  }
                ],
                "id": 3076,
                "name": "VariableDeclaration",
                "src": "536:18:6"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "permissions",
                  "scope": 3079,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "bytes4",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "bytes4",
                      "type": "bytes4"
                    },
                    "id": 3077,
                    "name": "ElementaryTypeName",
                    "src": "605:6:6"
                  }
                ],
                "id": 3078,
                "name": "VariableDeclaration",
                "src": "605:19:6"
              }
            ],
            "id": 3079,
            "name": "StructDefinition",
            "src": "512:516:6"
          },
          {
            "attributes": {
              "canonicalName": "Controller.GlobalConstraint",
              "name": "GlobalConstraint",
              "scope": 4159,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "constant": false,
                  "name": "gcAddress",
                  "scope": 3084,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "address",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "address",
                      "type": "address"
                    },
                    "id": 3080,
                    "name": "ElementaryTypeName",
                    "src": "1068:7:6"
                  }
                ],
                "id": 3081,
                "name": "VariableDeclaration",
                "src": "1068:17:6"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "params",
                  "scope": 3084,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "bytes32",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "bytes32",
                      "type": "bytes32"
                    },
                    "id": 3082,
                    "name": "ElementaryTypeName",
                    "src": "1095:7:6"
                  }
                ],
                "id": 3083,
                "name": "VariableDeclaration",
                "src": "1095:14:6"
              }
            ],
            "id": 3084,
            "name": "StructDefinition",
            "src": "1034:82:6"
          },
          {
            "attributes": {
              "canonicalName": "Controller.GlobalConstraintRegister",
              "name": "GlobalConstraintRegister",
              "scope": 4159,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "constant": false,
                  "name": "register",
                  "scope": 3089,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "bool",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "bool",
                      "type": "bool"
                    },
                    "id": 3085,
                    "name": "ElementaryTypeName",
                    "src": "1164:4:6"
                  }
                ],
                "id": 3086,
                "name": "VariableDeclaration",
                "src": "1164:13:6"
              },
              {
                "attributes": {
                  "constant": false,
                  "name": "index",
                  "scope": 3089,
                  "stateVariable": false,
                  "storageLocation": "default",
                  "type": "uint256",
                  "value": null,
                  "visibility": "internal"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "uint",
                      "type": "uint256"
                    },
                    "id": 3087,
                    "name": "ElementaryTypeName",
                    "src": "1201:4:6"
                  }
                ],
                "id": 3088,
                "name": "VariableDeclaration",
                "src": "1201:10:6"
              }
            ],
            "id": 3089,
            "name": "StructDefinition",
            "src": "1122:128:6"
          },
          {
            "attributes": {
              "constant": false,
              "name": "schemes",
              "scope": 4159,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "mapping(address => struct Controller.Scheme storage ref)",
              "value": null,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "type": "mapping(address => struct Controller.Scheme storage ref)"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "address",
                      "type": "address"
                    },
                    "id": 3090,
                    "name": "ElementaryTypeName",
                    "src": "1264:7:6"
                  },
                  {
                    "attributes": {
                      "contractScope": null,
                      "name": "Scheme",
                      "referencedDeclaration": 3079,
                      "type": "struct Controller.Scheme storage pointer"
                    },
                    "id": 3091,
                    "name": "UserDefinedTypeName",
                    "src": "1273:6:6"
                  }
                ],
                "id": 3092,
                "name": "Mapping",
                "src": "1256:24:6"
              }
            ],
            "id": 3093,
            "name": "VariableDeclaration",
            "src": "1256:39:6"
          },
          {
            "attributes": {
              "constant": false,
              "name": "avatar",
              "scope": 4159,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "contract Avatar",
              "value": null,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "Avatar",
                  "referencedDeclaration": 3065,
                  "type": "contract Avatar"
                },
                "id": 3094,
                "name": "UserDefinedTypeName",
                "src": "1302:6:6"
              }
            ],
            "id": 3095,
            "name": "VariableDeclaration",
            "src": "1302:20:6"
          },
          {
            "attributes": {
              "constant": false,
              "name": "nativeToken",
              "scope": 4159,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "contract DAOToken",
              "value": null,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "DAOToken",
                  "referencedDeclaration": 4399,
                  "type": "contract DAOToken"
                },
                "id": 3096,
                "name": "UserDefinedTypeName",
                "src": "1328:8:6"
              }
            ],
            "id": 3097,
            "name": "VariableDeclaration",
            "src": "1328:27:6"
          },
          {
            "attributes": {
              "constant": false,
              "name": "nativeReputation",
              "scope": 4159,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "contract Reputation",
              "value": null,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "contractScope": null,
                  "name": "Reputation",
                  "referencedDeclaration": 4544,
                  "type": "contract Reputation"
                },
                "id": 3098,
                "name": "UserDefinedTypeName",
                "src": "1361:10:6"
              }
            ],
            "id": 3099,
            "name": "VariableDeclaration",
            "src": "1361:34:6"
          },
          {
            "attributes": {
              "constant": false,
              "name": "newController",
              "scope": 4159,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "address",
              "value": null,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "name": "address",
                  "type": "address"
                },
                "id": 3100,
                "name": "ElementaryTypeName",
                "src": "1494:7:6"
              }
            ],
            "id": 3101,
            "name": "VariableDeclaration",
            "src": "1494:28:6"
          },
          {
            "attributes": {
              "constant": false,
              "name": "globalConstraints",
              "scope": 4159,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "struct Controller.GlobalConstraint storage ref[] storage ref",
              "value": null,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "length": null,
                  "type": "struct Controller.GlobalConstraint storage ref[] storage pointer"
                },
                "children": [
                  {
                    "attributes": {
                      "contractScope": null,
                      "name": "GlobalConstraint",
                      "referencedDeclaration": 3084,
                      "type": "struct Controller.GlobalConstraint storage pointer"
                    },
                    "id": 3102,
                    "name": "UserDefinedTypeName",
                    "src": "1625:16:6"
                  }
                ],
                "id": 3103,
                "name": "ArrayTypeName",
                "src": "1625:18:6"
              }
            ],
            "id": 3104,
            "name": "VariableDeclaration",
            "src": "1625:43:6"
          },
          {
            "attributes": {
              "constant": false,
              "name": "globalConstraintsRegister",
              "scope": 4159,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)",
              "value": null,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "type": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "address",
                      "type": "address"
                    },
                    "id": 3105,
                    "name": "ElementaryTypeName",
                    "src": "1764:7:6"
                  },
                  {
                    "attributes": {
                      "contractScope": null,
                      "name": "GlobalConstraintRegister",
                      "referencedDeclaration": 3089,
                      "type": "struct Controller.GlobalConstraintRegister storage pointer"
                    },
                    "id": 3106,
                    "name": "UserDefinedTypeName",
                    "src": "1773:24:6"
                  }
                ],
                "id": 3107,
                "name": "Mapping",
                "src": "1756:42:6"
              }
            ],
            "id": 3108,
            "name": "VariableDeclaration",
            "src": "1756:75:6"
          },
          {
            "attributes": {
              "anonymous": false,
              "name": "MintReputation"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": true,
                      "name": "_sender",
                      "scope": 3116,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 3109,
                        "name": "ElementaryTypeName",
                        "src": "1860:7:6"
                      }
                    ],
                    "id": 3110,
                    "name": "VariableDeclaration",
                    "src": "1860:23:6"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": true,
                      "name": "_beneficiary",
                      "scope": 3116,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 3111,
                        "name": "ElementaryTypeName",
                        "src": "1885:7:6"
                      }
                    ],
                    "id": 3112,
                    "name": "VariableDeclaration",
                    "src": "1885:28:6"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": false,
                      "name": "_amount",
                      "scope": 3116,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "int256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "int256",
                          "type": "int256"
                        },
                        "id": 3113,
                        "name": "ElementaryTypeName",
                        "src": "1915:6:6"
                      }
                    ],
                    "id": 3114,
                    "name": "VariableDeclaration",
                    "src": "1915:14:6"
                  }
                ],
                "id": 3115,
                "name": "ParameterList",
                "src": "1859:71:6"
              }
            ],
            "id": 3116,
            "name": "EventDefinition",
            "src": "1838:93:6"
          },
          {
            "attributes": {
              "anonymous": false,
              "name": "MintTokens"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": true,
                      "name": "_sender",
                      "scope": 3124,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 3117,
                        "name": "ElementaryTypeName",
                        "src": "1954:7:6"
                      }
                    ],
                    "id": 3118,
                    "name": "VariableDeclaration",
                    "src": "1954:23:6"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": true,
                      "name": "_beneficiary",
                      "scope": 3124,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 3119,
                        "name": "ElementaryTypeName",
                        "src": "1979:7:6"
                      }
                    ],
                    "id": 3120,
                    "name": "VariableDeclaration",
                    "src": "1979:28:6"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": false,
                      "name": "_amount",
                      "scope": 3124,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 3121,
                        "name": "ElementaryTypeName",
                        "src": "2009:7:6"
                      }
                    ],
                    "id": 3122,
                    "name": "VariableDeclaration",
                    "src": "2009:15:6"
                  }
                ],
                "id": 3123,
                "name": "ParameterList",
                "src": "1953:72:6"
              }
            ],
            "id": 3124,
            "name": "EventDefinition",
            "src": "1936:90:6"
          },
          {
            "attributes": {
              "anonymous": false,
              "name": "RegisterScheme"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": true,
                      "name": "_sender",
                      "scope": 3130,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 3125,
                        "name": "ElementaryTypeName",
                        "src": "2053:7:6"
                      }
                    ],
                    "id": 3126,
                    "name": "VariableDeclaration",
                    "src": "2053:23:6"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": true,
                      "name": "_scheme",
                      "scope": 3130,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 3127,
                        "name": "ElementaryTypeName",
                        "src": "2078:7:6"
                      }
                    ],
                    "id": 3128,
                    "name": "VariableDeclaration",
                    "src": "2078:23:6"
                  }
                ],
                "id": 3129,
                "name": "ParameterList",
                "src": "2052:50:6"
              }
            ],
            "id": 3130,
            "name": "EventDefinition",
            "src": "2031:72:6"
          },
          {
            "attributes": {
              "anonymous": false,
              "name": "UnregisterScheme"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": true,
                      "name": "_sender",
                      "scope": 3136,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 3131,
                        "name": "ElementaryTypeName",
                        "src": "2132:7:6"
                      }
                    ],
                    "id": 3132,
                    "name": "VariableDeclaration",
                    "src": "2132:23:6"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": true,
                      "name": "_scheme",
                      "scope": 3136,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 3133,
                        "name": "ElementaryTypeName",
                        "src": "2157:7:6"
                      }
                    ],
                    "id": 3134,
                    "name": "VariableDeclaration",
                    "src": "2157:23:6"
                  }
                ],
                "id": 3135,
                "name": "ParameterList",
                "src": "2131:50:6"
              }
            ],
            "id": 3136,
            "name": "EventDefinition",
            "src": "2108:74:6"
          },
          {
            "attributes": {
              "anonymous": false,
              "name": "GenericAction"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": true,
                      "name": "_sender",
                      "scope": 3143,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 3137,
                        "name": "ElementaryTypeName",
                        "src": "2208:7:6"
                      }
                    ],
                    "id": 3138,
                    "name": "VariableDeclaration",
                    "src": "2208:23:6"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": false,
                      "name": "_params",
                      "scope": 3143,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32[] memory",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "length": null,
                          "type": "bytes32[] storage pointer"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes32",
                              "type": "bytes32"
                            },
                            "id": 3139,
                            "name": "ElementaryTypeName",
                            "src": "2233:7:6"
                          }
                        ],
                        "id": 3140,
                        "name": "ArrayTypeName",
                        "src": "2233:9:6"
                      }
                    ],
                    "id": 3141,
                    "name": "VariableDeclaration",
                    "src": "2233:17:6"
                  }
                ],
                "id": 3142,
                "name": "ParameterList",
                "src": "2207:44:6"
              }
            ],
            "id": 3143,
            "name": "EventDefinition",
            "src": "2187:65:6"
          },
          {
            "attributes": {
              "anonymous": false,
              "name": "SendEther"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": true,
                      "name": "_sender",
                      "scope": 3151,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 3144,
                        "name": "ElementaryTypeName",
                        "src": "2274:7:6"
                      }
                    ],
                    "id": 3145,
                    "name": "VariableDeclaration",
                    "src": "2274:23:6"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": false,
                      "name": "_amountInWei",
                      "scope": 3151,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 3146,
                        "name": "ElementaryTypeName",
                        "src": "2299:4:6"
                      }
                    ],
                    "id": 3147,
                    "name": "VariableDeclaration",
                    "src": "2299:17:6"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": true,
                      "name": "_to",
                      "scope": 3151,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 3148,
                        "name": "ElementaryTypeName",
                        "src": "2318:7:6"
                      }
                    ],
                    "id": 3149,
                    "name": "VariableDeclaration",
                    "src": "2318:19:6"
                  }
                ],
                "id": 3150,
                "name": "ParameterList",
                "src": "2273:65:6"
              }
            ],
            "id": 3151,
            "name": "EventDefinition",
            "src": "2257:82:6"
          },
          {
            "attributes": {
              "anonymous": false,
              "name": "ExternalTokenTransfer"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": true,
                      "name": "_sender",
                      "scope": 3161,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 3152,
                        "name": "ElementaryTypeName",
                        "src": "2373:7:6"
                      }
                    ],
                    "id": 3153,
                    "name": "VariableDeclaration",
                    "src": "2373:23:6"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": true,
                      "name": "_externalToken",
                      "scope": 3161,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 3154,
                        "name": "ElementaryTypeName",
                        "src": "2398:7:6"
                      }
                    ],
                    "id": 3155,
                    "name": "VariableDeclaration",
                    "src": "2398:30:6"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": true,
                      "name": "_to",
                      "scope": 3161,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 3156,
                        "name": "ElementaryTypeName",
                        "src": "2430:7:6"
                      }
                    ],
                    "id": 3157,
                    "name": "VariableDeclaration",
                    "src": "2430:19:6"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": false,
                      "name": "_value",
                      "scope": 3161,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 3158,
                        "name": "ElementaryTypeName",
                        "src": "2451:4:6"
                      }
                    ],
                    "id": 3159,
                    "name": "VariableDeclaration",
                    "src": "2451:11:6"
                  }
                ],
                "id": 3160,
                "name": "ParameterList",
                "src": "2372:91:6"
              }
            ],
            "id": 3161,
            "name": "EventDefinition",
            "src": "2344:120:6"
          },
          {
            "attributes": {
              "anonymous": false,
              "name": "ExternalTokenTransferFrom"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": true,
                      "name": "_sender",
                      "scope": 3173,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 3162,
                        "name": "ElementaryTypeName",
                        "src": "2502:7:6"
                      }
                    ],
                    "id": 3163,
                    "name": "VariableDeclaration",
                    "src": "2502:23:6"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": true,
                      "name": "_externalToken",
                      "scope": 3173,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 3164,
                        "name": "ElementaryTypeName",
                        "src": "2527:7:6"
                      }
                    ],
                    "id": 3165,
                    "name": "VariableDeclaration",
                    "src": "2527:30:6"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": false,
                      "name": "_from",
                      "scope": 3173,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 3166,
                        "name": "ElementaryTypeName",
                        "src": "2559:7:6"
                      }
                    ],
                    "id": 3167,
                    "name": "VariableDeclaration",
                    "src": "2559:13:6"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": false,
                      "name": "_to",
                      "scope": 3173,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 3168,
                        "name": "ElementaryTypeName",
                        "src": "2574:7:6"
                      }
                    ],
                    "id": 3169,
                    "name": "VariableDeclaration",
                    "src": "2574:11:6"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": false,
                      "name": "_value",
                      "scope": 3173,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 3170,
                        "name": "ElementaryTypeName",
                        "src": "2587:4:6"
                      }
                    ],
                    "id": 3171,
                    "name": "VariableDeclaration",
                    "src": "2587:11:6"
                  }
                ],
                "id": 3172,
                "name": "ParameterList",
                "src": "2501:98:6"
              }
            ],
            "id": 3173,
            "name": "EventDefinition",
            "src": "2469:131:6"
          },
          {
            "attributes": {
              "anonymous": false,
              "name": "ExternalTokenIncreaseApproval"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": true,
                      "name": "_sender",
                      "scope": 3183,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 3174,
                        "name": "ElementaryTypeName",
                        "src": "2642:7:6"
                      }
                    ],
                    "id": 3175,
                    "name": "VariableDeclaration",
                    "src": "2642:23:6"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": true,
                      "name": "_externalToken",
                      "scope": 3183,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "contract StandardToken",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "StandardToken",
                          "referencedDeclaration": 10855,
                          "type": "contract StandardToken"
                        },
                        "id": 3176,
                        "name": "UserDefinedTypeName",
                        "src": "2667:13:6"
                      }
                    ],
                    "id": 3177,
                    "name": "VariableDeclaration",
                    "src": "2667:36:6"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": false,
                      "name": "_spender",
                      "scope": 3183,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 3178,
                        "name": "ElementaryTypeName",
                        "src": "2705:7:6"
                      }
                    ],
                    "id": 3179,
                    "name": "VariableDeclaration",
                    "src": "2705:16:6"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": false,
                      "name": "_value",
                      "scope": 3183,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 3180,
                        "name": "ElementaryTypeName",
                        "src": "2723:4:6"
                      }
                    ],
                    "id": 3181,
                    "name": "VariableDeclaration",
                    "src": "2723:11:6"
                  }
                ],
                "id": 3182,
                "name": "ParameterList",
                "src": "2641:94:6"
              }
            ],
            "id": 3183,
            "name": "EventDefinition",
            "src": "2605:131:6"
          },
          {
            "attributes": {
              "anonymous": false,
              "name": "ExternalTokenDecreaseApproval"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": true,
                      "name": "_sender",
                      "scope": 3193,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 3184,
                        "name": "ElementaryTypeName",
                        "src": "2778:7:6"
                      }
                    ],
                    "id": 3185,
                    "name": "VariableDeclaration",
                    "src": "2778:23:6"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": true,
                      "name": "_externalToken",
                      "scope": 3193,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "contract StandardToken",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "StandardToken",
                          "referencedDeclaration": 10855,
                          "type": "contract StandardToken"
                        },
                        "id": 3186,
                        "name": "UserDefinedTypeName",
                        "src": "2803:13:6"
                      }
                    ],
                    "id": 3187,
                    "name": "VariableDeclaration",
                    "src": "2803:36:6"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": false,
                      "name": "_spender",
                      "scope": 3193,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 3188,
                        "name": "ElementaryTypeName",
                        "src": "2841:7:6"
                      }
                    ],
                    "id": 3189,
                    "name": "VariableDeclaration",
                    "src": "2841:16:6"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": false,
                      "name": "_value",
                      "scope": 3193,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 3190,
                        "name": "ElementaryTypeName",
                        "src": "2859:4:6"
                      }
                    ],
                    "id": 3191,
                    "name": "VariableDeclaration",
                    "src": "2859:11:6"
                  }
                ],
                "id": 3192,
                "name": "ParameterList",
                "src": "2777:94:6"
              }
            ],
            "id": 3193,
            "name": "EventDefinition",
            "src": "2741:131:6"
          },
          {
            "attributes": {
              "anonymous": false,
              "name": "AddGlobalConstraint"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": false,
                      "name": "_globalConstraint",
                      "scope": 3199,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 3194,
                        "name": "ElementaryTypeName",
                        "src": "2903:7:6"
                      }
                    ],
                    "id": 3195,
                    "name": "VariableDeclaration",
                    "src": "2903:25:6"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": false,
                      "name": "_params",
                      "scope": 3199,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 3196,
                        "name": "ElementaryTypeName",
                        "src": "2930:7:6"
                      }
                    ],
                    "id": 3197,
                    "name": "VariableDeclaration",
                    "src": "2930:15:6"
                  }
                ],
                "id": 3198,
                "name": "ParameterList",
                "src": "2902:44:6"
              }
            ],
            "id": 3199,
            "name": "EventDefinition",
            "src": "2877:70:6"
          },
          {
            "attributes": {
              "anonymous": false,
              "name": "RemoveGlobalConstraint"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": false,
                      "name": "_globalConstraint",
                      "scope": 3205,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 3200,
                        "name": "ElementaryTypeName",
                        "src": "2981:7:6"
                      }
                    ],
                    "id": 3201,
                    "name": "VariableDeclaration",
                    "src": "2981:25:6"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": false,
                      "name": "_index",
                      "scope": 3205,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 3202,
                        "name": "ElementaryTypeName",
                        "src": "3008:7:6"
                      }
                    ],
                    "id": 3203,
                    "name": "VariableDeclaration",
                    "src": "3008:14:6"
                  }
                ],
                "id": 3204,
                "name": "ParameterList",
                "src": "2980:43:6"
              }
            ],
            "id": 3205,
            "name": "EventDefinition",
            "src": "2952:72:6"
          },
          {
            "attributes": {
              "anonymous": false,
              "name": "UpgradeController"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": false,
                      "name": "_oldController",
                      "scope": 3211,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 3206,
                        "name": "ElementaryTypeName",
                        "src": "3053:7:6"
                      }
                    ],
                    "id": 3207,
                    "name": "VariableDeclaration",
                    "src": "3053:22:6"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": false,
                      "name": "_newController",
                      "scope": 3211,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 3208,
                        "name": "ElementaryTypeName",
                        "src": "3076:7:6"
                      }
                    ],
                    "id": 3209,
                    "name": "VariableDeclaration",
                    "src": "3076:22:6"
                  }
                ],
                "id": 3210,
                "name": "ParameterList",
                "src": "3052:47:6"
              }
            ],
            "id": 3211,
            "name": "EventDefinition",
            "src": "3029:71:6"
          },
          {
            "attributes": {
              "constant": false,
              "implemented": true,
              "isConstructor": true,
              "modifiers": [
                null
              ],
              "name": "Controller",
              "payable": false,
              "scope": 4159,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_avatar",
                      "scope": 3247,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "contract Avatar",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "Avatar",
                          "referencedDeclaration": 3065,
                          "type": "contract Avatar"
                        },
                        "id": 3212,
                        "name": "UserDefinedTypeName",
                        "src": "3135:6:6"
                      }
                    ],
                    "id": 3213,
                    "name": "VariableDeclaration",
                    "src": "3135:14:6"
                  }
                ],
                "id": 3214,
                "name": "ParameterList",
                "src": "3125:30:6"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 3215,
                "name": "ParameterList",
                "src": "3167:0:6"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "contract Avatar"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3095,
                              "type": "contract Avatar",
                              "value": "avatar"
                            },
                            "id": 3216,
                            "name": "Identifier",
                            "src": "3177:6:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3213,
                              "type": "contract Avatar",
                              "value": "_avatar"
                            },
                            "id": 3217,
                            "name": "Identifier",
                            "src": "3186:7:6"
                          }
                        ],
                        "id": 3218,
                        "name": "Assignment",
                        "src": "3177:16:6"
                      }
                    ],
                    "id": 3219,
                    "name": "ExpressionStatement",
                    "src": "3177:16:6"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "contract DAOToken"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3097,
                              "type": "contract DAOToken",
                              "value": "nativeToken"
                            },
                            "id": 3220,
                            "name": "Identifier",
                            "src": "3203:11:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "arguments": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "contract DAOToken",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "nativeToken",
                                  "referencedDeclaration": 2796,
                                  "type": "function () view external returns (contract DAOToken)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3095,
                                      "type": "contract Avatar",
                                      "value": "avatar"
                                    },
                                    "id": 3221,
                                    "name": "Identifier",
                                    "src": "3217:6:6"
                                  }
                                ],
                                "id": 3222,
                                "name": "MemberAccess",
                                "src": "3217:18:6"
                              }
                            ],
                            "id": 3223,
                            "name": "FunctionCall",
                            "src": "3217:20:6"
                          }
                        ],
                        "id": 3224,
                        "name": "Assignment",
                        "src": "3203:34:6"
                      }
                    ],
                    "id": 3225,
                    "name": "ExpressionStatement",
                    "src": "3203:34:6"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "contract Reputation"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3099,
                              "type": "contract Reputation",
                              "value": "nativeReputation"
                            },
                            "id": 3226,
                            "name": "Identifier",
                            "src": "3247:16:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "arguments": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "contract Reputation",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "nativeReputation",
                                  "referencedDeclaration": 2798,
                                  "type": "function () view external returns (contract Reputation)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3095,
                                      "type": "contract Avatar",
                                      "value": "avatar"
                                    },
                                    "id": 3227,
                                    "name": "Identifier",
                                    "src": "3266:6:6"
                                  }
                                ],
                                "id": 3228,
                                "name": "MemberAccess",
                                "src": "3266:23:6"
                              }
                            ],
                            "id": 3229,
                            "name": "FunctionCall",
                            "src": "3266:25:6"
                          }
                        ],
                        "id": 3230,
                        "name": "Assignment",
                        "src": "3247:44:6"
                      }
                    ],
                    "id": 3231,
                    "name": "ExpressionStatement",
                    "src": "3247:44:6"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "struct Controller.Scheme storage ref"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "type": "struct Controller.Scheme storage ref"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3093,
                                  "type": "mapping(address => struct Controller.Scheme storage ref)",
                                  "value": "schemes"
                                },
                                "id": 3232,
                                "name": "Identifier",
                                "src": "3301:7:6"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "sender",
                                  "referencedDeclaration": null,
                                  "type": "address"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 10867,
                                      "type": "msg",
                                      "value": "msg"
                                    },
                                    "id": 3233,
                                    "name": "Identifier",
                                    "src": "3309:3:6"
                                  }
                                ],
                                "id": 3234,
                                "name": "MemberAccess",
                                "src": "3309:10:6"
                              }
                            ],
                            "id": 3235,
                            "name": "IndexAccess",
                            "src": "3301:19:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "isStructConstructorCall": true,
                              "lValueRequested": false,
                              "names": [
                                "paramsHash",
                                "permissions"
                              ],
                              "type": "struct Controller.Scheme memory",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3079,
                                  "type": "type(struct Controller.Scheme storage pointer)",
                                  "value": "Scheme"
                                },
                                "id": 3236,
                                "name": "Identifier",
                                "src": "3323:6:6"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "bytes32",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(bytes32)",
                                      "value": "bytes32"
                                    },
                                    "id": 3237,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "3343:7:6"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "30",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 0",
                                      "value": "0"
                                    },
                                    "id": 3238,
                                    "name": "Literal",
                                    "src": "3351:1:6"
                                  }
                                ],
                                "id": 3239,
                                "name": "FunctionCall",
                                "src": "3343:10:6"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "bytes4",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_15_by_1",
                                          "typeString": "int_const 15"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(bytes4)",
                                      "value": "bytes4"
                                    },
                                    "id": 3240,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "3367:6:6"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "307846",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 15",
                                      "value": "0xF"
                                    },
                                    "id": 3241,
                                    "name": "Literal",
                                    "src": "3374:3:6"
                                  }
                                ],
                                "id": 3242,
                                "name": "FunctionCall",
                                "src": "3367:11:6"
                              }
                            ],
                            "id": 3243,
                            "name": "FunctionCall",
                            "src": "3323:57:6"
                          }
                        ],
                        "id": 3244,
                        "name": "Assignment",
                        "src": "3301:79:6"
                      }
                    ],
                    "id": 3245,
                    "name": "ExpressionStatement",
                    "src": "3301:79:6"
                  }
                ],
                "id": 3246,
                "name": "Block",
                "src": "3167:220:6"
              }
            ],
            "id": 3247,
            "name": "FunctionDefinition",
            "src": "3106:281:6"
          },
          {
            "attributes": {
              "constant": false,
              "implemented": true,
              "isConstructor": false,
              "modifiers": [
                null
              ],
              "name": "",
              "payable": false,
              "scope": 4159,
              "stateMutability": "nonpayable",
              "superFunction": null,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 3248,
                "name": "ParameterList",
                "src": "3435:2:6"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 3249,
                "name": "ParameterList",
                "src": "3445:0:6"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "arguments": [
                            null
                          ],
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                null
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 10871,
                              "type": "function () pure",
                              "value": "revert"
                            },
                            "id": 3250,
                            "name": "Identifier",
                            "src": "3455:6:6"
                          }
                        ],
                        "id": 3251,
                        "name": "FunctionCall",
                        "src": "3455:8:6"
                      }
                    ],
                    "id": 3252,
                    "name": "ExpressionStatement",
                    "src": "3455:8:6"
                  }
                ],
                "id": 3253,
                "name": "Block",
                "src": "3445:25:6"
              }
            ],
            "id": 3254,
            "name": "FunctionDefinition",
            "src": "3427:43:6"
          },
          {
            "attributes": {
              "name": "onlyRegisteredScheme",
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 3255,
                "name": "ParameterList",
                "src": "3521:2:6"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 10870,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 3256,
                            "name": "Identifier",
                            "src": "3534:7:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "&",
                                  "type": "bytes4"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "permissions",
                                      "referencedDeclaration": 3078,
                                      "type": "bytes4"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "type": "struct Controller.Scheme storage ref"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 3093,
                                              "type": "mapping(address => struct Controller.Scheme storage ref)",
                                              "value": "schemes"
                                            },
                                            "id": 3257,
                                            "name": "Identifier",
                                            "src": "3542:7:6"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "member_name": "sender",
                                              "referencedDeclaration": null,
                                              "type": "address"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 10867,
                                                  "type": "msg",
                                                  "value": "msg"
                                                },
                                                "id": 3258,
                                                "name": "Identifier",
                                                "src": "3550:3:6"
                                              }
                                            ],
                                            "id": 3259,
                                            "name": "MemberAccess",
                                            "src": "3550:10:6"
                                          }
                                        ],
                                        "id": 3260,
                                        "name": "IndexAccess",
                                        "src": "3542:19:6"
                                      }
                                    ],
                                    "id": 3261,
                                    "name": "MemberAccess",
                                    "src": "3542:31:6"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "type": "bytes4",
                                      "type_conversion": true
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_rational_1_by_1",
                                              "typeString": "int_const 1"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "type": "type(bytes4)",
                                          "value": "bytes4"
                                        },
                                        "id": 3262,
                                        "name": "ElementaryTypeNameExpression",
                                        "src": "3574:6:6"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "hexvalue": "31",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "subdenomination": null,
                                          "token": "number",
                                          "type": "int_const 1",
                                          "value": "1"
                                        },
                                        "id": 3263,
                                        "name": "Literal",
                                        "src": "3581:1:6"
                                      }
                                    ],
                                    "id": 3264,
                                    "name": "FunctionCall",
                                    "src": "3574:9:6"
                                  }
                                ],
                                "id": 3265,
                                "name": "BinaryOperation",
                                "src": "3542:41:6"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "bytes4",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(bytes4)",
                                      "value": "bytes4"
                                    },
                                    "id": 3266,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "3587:6:6"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "31",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 1",
                                      "value": "1"
                                    },
                                    "id": 3267,
                                    "name": "Literal",
                                    "src": "3594:1:6"
                                  }
                                ],
                                "id": 3268,
                                "name": "FunctionCall",
                                "src": "3587:9:6"
                              }
                            ],
                            "id": 3269,
                            "name": "BinaryOperation",
                            "src": "3542:54:6"
                          }
                        ],
                        "id": 3270,
                        "name": "FunctionCall",
                        "src": "3534:63:6"
                      }
                    ],
                    "id": 3271,
                    "name": "ExpressionStatement",
                    "src": "3534:63:6"
                  },
                  {
                    "id": 3272,
                    "name": "PlaceholderStatement",
                    "src": "3607:1:6"
                  }
                ],
                "id": 3273,
                "name": "Block",
                "src": "3524:91:6"
              }
            ],
            "id": 3274,
            "name": "ModifierDefinition",
            "src": "3492:123:6"
          },
          {
            "attributes": {
              "name": "onlyRegisteringSchemes",
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 3275,
                "name": "ParameterList",
                "src": "3652:2:6"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 10870,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 3276,
                            "name": "Identifier",
                            "src": "3665:7:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "&",
                                  "type": "bytes4"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "permissions",
                                      "referencedDeclaration": 3078,
                                      "type": "bytes4"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "type": "struct Controller.Scheme storage ref"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 3093,
                                              "type": "mapping(address => struct Controller.Scheme storage ref)",
                                              "value": "schemes"
                                            },
                                            "id": 3277,
                                            "name": "Identifier",
                                            "src": "3673:7:6"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "member_name": "sender",
                                              "referencedDeclaration": null,
                                              "type": "address"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 10867,
                                                  "type": "msg",
                                                  "value": "msg"
                                                },
                                                "id": 3278,
                                                "name": "Identifier",
                                                "src": "3681:3:6"
                                              }
                                            ],
                                            "id": 3279,
                                            "name": "MemberAccess",
                                            "src": "3681:10:6"
                                          }
                                        ],
                                        "id": 3280,
                                        "name": "IndexAccess",
                                        "src": "3673:19:6"
                                      }
                                    ],
                                    "id": 3281,
                                    "name": "MemberAccess",
                                    "src": "3673:31:6"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "type": "bytes4",
                                      "type_conversion": true
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_rational_2_by_1",
                                              "typeString": "int_const 2"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "type": "type(bytes4)",
                                          "value": "bytes4"
                                        },
                                        "id": 3282,
                                        "name": "ElementaryTypeNameExpression",
                                        "src": "3705:6:6"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "hexvalue": "32",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "subdenomination": null,
                                          "token": "number",
                                          "type": "int_const 2",
                                          "value": "2"
                                        },
                                        "id": 3283,
                                        "name": "Literal",
                                        "src": "3712:1:6"
                                      }
                                    ],
                                    "id": 3284,
                                    "name": "FunctionCall",
                                    "src": "3705:9:6"
                                  }
                                ],
                                "id": 3285,
                                "name": "BinaryOperation",
                                "src": "3673:41:6"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "bytes4",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_2_by_1",
                                          "typeString": "int_const 2"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(bytes4)",
                                      "value": "bytes4"
                                    },
                                    "id": 3286,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "3718:6:6"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "32",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 2",
                                      "value": "2"
                                    },
                                    "id": 3287,
                                    "name": "Literal",
                                    "src": "3725:1:6"
                                  }
                                ],
                                "id": 3288,
                                "name": "FunctionCall",
                                "src": "3718:9:6"
                              }
                            ],
                            "id": 3289,
                            "name": "BinaryOperation",
                            "src": "3673:54:6"
                          }
                        ],
                        "id": 3290,
                        "name": "FunctionCall",
                        "src": "3665:63:6"
                      }
                    ],
                    "id": 3291,
                    "name": "ExpressionStatement",
                    "src": "3665:63:6"
                  },
                  {
                    "id": 3292,
                    "name": "PlaceholderStatement",
                    "src": "3738:1:6"
                  }
                ],
                "id": 3293,
                "name": "Block",
                "src": "3655:91:6"
              }
            ],
            "id": 3294,
            "name": "ModifierDefinition",
            "src": "3621:125:6"
          },
          {
            "attributes": {
              "name": "onlyGlobalConstraintsScheme",
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 3295,
                "name": "ParameterList",
                "src": "3788:2:6"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 10870,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 3296,
                            "name": "Identifier",
                            "src": "3801:7:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "&",
                                  "type": "bytes4"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "permissions",
                                      "referencedDeclaration": 3078,
                                      "type": "bytes4"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "type": "struct Controller.Scheme storage ref"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 3093,
                                              "type": "mapping(address => struct Controller.Scheme storage ref)",
                                              "value": "schemes"
                                            },
                                            "id": 3297,
                                            "name": "Identifier",
                                            "src": "3809:7:6"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "member_name": "sender",
                                              "referencedDeclaration": null,
                                              "type": "address"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 10867,
                                                  "type": "msg",
                                                  "value": "msg"
                                                },
                                                "id": 3298,
                                                "name": "Identifier",
                                                "src": "3817:3:6"
                                              }
                                            ],
                                            "id": 3299,
                                            "name": "MemberAccess",
                                            "src": "3817:10:6"
                                          }
                                        ],
                                        "id": 3300,
                                        "name": "IndexAccess",
                                        "src": "3809:19:6"
                                      }
                                    ],
                                    "id": 3301,
                                    "name": "MemberAccess",
                                    "src": "3809:31:6"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "type": "bytes4",
                                      "type_conversion": true
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_rational_4_by_1",
                                              "typeString": "int_const 4"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "type": "type(bytes4)",
                                          "value": "bytes4"
                                        },
                                        "id": 3302,
                                        "name": "ElementaryTypeNameExpression",
                                        "src": "3841:6:6"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "hexvalue": "34",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "subdenomination": null,
                                          "token": "number",
                                          "type": "int_const 4",
                                          "value": "4"
                                        },
                                        "id": 3303,
                                        "name": "Literal",
                                        "src": "3848:1:6"
                                      }
                                    ],
                                    "id": 3304,
                                    "name": "FunctionCall",
                                    "src": "3841:9:6"
                                  }
                                ],
                                "id": 3305,
                                "name": "BinaryOperation",
                                "src": "3809:41:6"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "bytes4",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_4_by_1",
                                          "typeString": "int_const 4"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(bytes4)",
                                      "value": "bytes4"
                                    },
                                    "id": 3306,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "3854:6:6"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "34",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 4",
                                      "value": "4"
                                    },
                                    "id": 3307,
                                    "name": "Literal",
                                    "src": "3861:1:6"
                                  }
                                ],
                                "id": 3308,
                                "name": "FunctionCall",
                                "src": "3854:9:6"
                              }
                            ],
                            "id": 3309,
                            "name": "BinaryOperation",
                            "src": "3809:54:6"
                          }
                        ],
                        "id": 3310,
                        "name": "FunctionCall",
                        "src": "3801:63:6"
                      }
                    ],
                    "id": 3311,
                    "name": "ExpressionStatement",
                    "src": "3801:63:6"
                  },
                  {
                    "id": 3312,
                    "name": "PlaceholderStatement",
                    "src": "3874:1:6"
                  }
                ],
                "id": 3313,
                "name": "Block",
                "src": "3791:91:6"
              }
            ],
            "id": 3314,
            "name": "ModifierDefinition",
            "src": "3752:130:6"
          },
          {
            "attributes": {
              "name": "onlyUpgradingScheme",
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 3315,
                "name": "ParameterList",
                "src": "3916:2:6"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 10870,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 3316,
                            "name": "Identifier",
                            "src": "3929:7:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "&",
                                  "type": "bytes4"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "permissions",
                                      "referencedDeclaration": 3078,
                                      "type": "bytes4"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "type": "struct Controller.Scheme storage ref"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 3093,
                                              "type": "mapping(address => struct Controller.Scheme storage ref)",
                                              "value": "schemes"
                                            },
                                            "id": 3317,
                                            "name": "Identifier",
                                            "src": "3937:7:6"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "member_name": "sender",
                                              "referencedDeclaration": null,
                                              "type": "address"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 10867,
                                                  "type": "msg",
                                                  "value": "msg"
                                                },
                                                "id": 3318,
                                                "name": "Identifier",
                                                "src": "3945:3:6"
                                              }
                                            ],
                                            "id": 3319,
                                            "name": "MemberAccess",
                                            "src": "3945:10:6"
                                          }
                                        ],
                                        "id": 3320,
                                        "name": "IndexAccess",
                                        "src": "3937:19:6"
                                      }
                                    ],
                                    "id": 3321,
                                    "name": "MemberAccess",
                                    "src": "3937:31:6"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "type": "bytes4",
                                      "type_conversion": true
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_rational_8_by_1",
                                              "typeString": "int_const 8"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "type": "type(bytes4)",
                                          "value": "bytes4"
                                        },
                                        "id": 3322,
                                        "name": "ElementaryTypeNameExpression",
                                        "src": "3969:6:6"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "hexvalue": "38",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "subdenomination": null,
                                          "token": "number",
                                          "type": "int_const 8",
                                          "value": "8"
                                        },
                                        "id": 3323,
                                        "name": "Literal",
                                        "src": "3976:1:6"
                                      }
                                    ],
                                    "id": 3324,
                                    "name": "FunctionCall",
                                    "src": "3969:9:6"
                                  }
                                ],
                                "id": 3325,
                                "name": "BinaryOperation",
                                "src": "3937:41:6"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "bytes4",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_8_by_1",
                                          "typeString": "int_const 8"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(bytes4)",
                                      "value": "bytes4"
                                    },
                                    "id": 3326,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "3982:6:6"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "38",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 8",
                                      "value": "8"
                                    },
                                    "id": 3327,
                                    "name": "Literal",
                                    "src": "3989:1:6"
                                  }
                                ],
                                "id": 3328,
                                "name": "FunctionCall",
                                "src": "3982:9:6"
                              }
                            ],
                            "id": 3329,
                            "name": "BinaryOperation",
                            "src": "3937:54:6"
                          }
                        ],
                        "id": 3330,
                        "name": "FunctionCall",
                        "src": "3929:63:6"
                      }
                    ],
                    "id": 3331,
                    "name": "ExpressionStatement",
                    "src": "3929:63:6"
                  },
                  {
                    "id": 3332,
                    "name": "PlaceholderStatement",
                    "src": "4002:1:6"
                  }
                ],
                "id": 3333,
                "name": "Block",
                "src": "3919:91:6"
              }
            ],
            "id": 3334,
            "name": "ModifierDefinition",
            "src": "3888:122:6"
          },
          {
            "attributes": {
              "name": "onlySubjectToConstraint",
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "func",
                      "scope": 3407,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 3335,
                        "name": "ElementaryTypeName",
                        "src": "4049:7:6"
                      }
                    ],
                    "id": 3336,
                    "name": "VariableDeclaration",
                    "src": "4049:12:6"
                  }
                ],
                "id": 3337,
                "name": "ParameterList",
                "src": "4048:14:6"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        null
                      ],
                      "initialValue": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "index",
                          "scope": 3407,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint",
                              "type": "uint256"
                            },
                            "id": 3338,
                            "name": "ElementaryTypeName",
                            "src": "4073:4:6"
                          }
                        ],
                        "id": 3339,
                        "name": "VariableDeclaration",
                        "src": "4073:10:6"
                      }
                    ],
                    "id": 3340,
                    "name": "VariableDeclarationStatement",
                    "src": "4073:10:6"
                  },
                  {
                    "children": [
                      {
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "=",
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3339,
                                  "type": "uint256",
                                  "value": "index"
                                },
                                "id": 3341,
                                "name": "Identifier",
                                "src": "4098:5:6"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 3342,
                                "name": "Literal",
                                "src": "4106:1:6"
                              }
                            ],
                            "id": 3343,
                            "name": "Assignment",
                            "src": "4098:9:6"
                          }
                        ],
                        "id": 3344,
                        "name": "ExpressionStatement",
                        "src": "4098:9:6"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "<",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3339,
                              "type": "uint256",
                              "value": "index"
                            },
                            "id": 3345,
                            "name": "Identifier",
                            "src": "4108:5:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "length",
                              "referencedDeclaration": null,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3104,
                                  "type": "struct Controller.GlobalConstraint storage ref[] storage ref",
                                  "value": "globalConstraints"
                                },
                                "id": 3346,
                                "name": "Identifier",
                                "src": "4114:17:6"
                              }
                            ],
                            "id": 3347,
                            "name": "MemberAccess",
                            "src": "4114:24:6"
                          }
                        ],
                        "id": 3348,
                        "name": "BinaryOperation",
                        "src": "4108:30:6"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "++",
                              "prefix": false,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3339,
                                  "type": "uint256",
                                  "value": "index"
                                },
                                "id": 3349,
                                "name": "Identifier",
                                "src": "4139:5:6"
                              }
                            ],
                            "id": 3350,
                            "name": "UnaryOperation",
                            "src": "4139:7:6"
                          }
                        ],
                        "id": 3351,
                        "name": "ExpressionStatement",
                        "src": "4139:7:6"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "tuple()",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 10870,
                                      "type": "function (bool) pure",
                                      "value": "require"
                                    },
                                    "id": 3352,
                                    "name": "Identifier",
                                    "src": "4162:7:6"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "type": "bool",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            },
                                            {
                                              "typeIdentifier": "t_bytes32",
                                              "typeString": "bytes32"
                                            },
                                            {
                                              "typeIdentifier": "t_bytes32",
                                              "typeString": "bytes32"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "pre",
                                          "referencedDeclaration": 5878,
                                          "type": "function (address,bytes32,bytes32) external returns (bool)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isInlineArray": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "type": "contract GlobalConstraintInterface"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "isStructConstructorCall": false,
                                                  "lValueRequested": false,
                                                  "names": [
                                                    null
                                                  ],
                                                  "type": "contract GlobalConstraintInterface",
                                                  "type_conversion": true
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": [
                                                        {
                                                          "typeIdentifier": "t_address",
                                                          "typeString": "address"
                                                        }
                                                      ],
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 5890,
                                                      "type": "type(contract GlobalConstraintInterface)",
                                                      "value": "GlobalConstraintInterface"
                                                    },
                                                    "id": 3353,
                                                    "name": "Identifier",
                                                    "src": "4171:25:6"
                                                  },
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "isConstant": false,
                                                      "isLValue": true,
                                                      "isPure": false,
                                                      "lValueRequested": false,
                                                      "member_name": "gcAddress",
                                                      "referencedDeclaration": 3081,
                                                      "type": "address"
                                                    },
                                                    "children": [
                                                      {
                                                        "attributes": {
                                                          "argumentTypes": null,
                                                          "isConstant": false,
                                                          "isLValue": true,
                                                          "isPure": false,
                                                          "lValueRequested": false,
                                                          "type": "struct Controller.GlobalConstraint storage ref"
                                                        },
                                                        "children": [
                                                          {
                                                            "attributes": {
                                                              "argumentTypes": null,
                                                              "overloadedDeclarations": [
                                                                null
                                                              ],
                                                              "referencedDeclaration": 3104,
                                                              "type": "struct Controller.GlobalConstraint storage ref[] storage ref",
                                                              "value": "globalConstraints"
                                                            },
                                                            "id": 3354,
                                                            "name": "Identifier",
                                                            "src": "4197:17:6"
                                                          },
                                                          {
                                                            "attributes": {
                                                              "argumentTypes": null,
                                                              "overloadedDeclarations": [
                                                                null
                                                              ],
                                                              "referencedDeclaration": 3339,
                                                              "type": "uint256",
                                                              "value": "index"
                                                            },
                                                            "id": 3355,
                                                            "name": "Identifier",
                                                            "src": "4215:5:6"
                                                          }
                                                        ],
                                                        "id": 3356,
                                                        "name": "IndexAccess",
                                                        "src": "4197:24:6"
                                                      }
                                                    ],
                                                    "id": 3357,
                                                    "name": "MemberAccess",
                                                    "src": "4197:34:6"
                                                  }
                                                ],
                                                "id": 3358,
                                                "name": "FunctionCall",
                                                "src": "4171:61:6"
                                              }
                                            ],
                                            "id": 3359,
                                            "name": "TupleExpression",
                                            "src": "4170:63:6"
                                          }
                                        ],
                                        "id": 3360,
                                        "name": "MemberAccess",
                                        "src": "4170:67:6"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "sender",
                                          "referencedDeclaration": null,
                                          "type": "address"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 10867,
                                              "type": "msg",
                                              "value": "msg"
                                            },
                                            "id": 3361,
                                            "name": "Identifier",
                                            "src": "4238:3:6"
                                          }
                                        ],
                                        "id": 3362,
                                        "name": "MemberAccess",
                                        "src": "4238:10:6"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "params",
                                          "referencedDeclaration": 3083,
                                          "type": "bytes32"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "type": "struct Controller.GlobalConstraint storage ref"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 3104,
                                                  "type": "struct Controller.GlobalConstraint storage ref[] storage ref",
                                                  "value": "globalConstraints"
                                                },
                                                "id": 3363,
                                                "name": "Identifier",
                                                "src": "4250:17:6"
                                              },
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 3339,
                                                  "type": "uint256",
                                                  "value": "index"
                                                },
                                                "id": 3364,
                                                "name": "Identifier",
                                                "src": "4268:5:6"
                                              }
                                            ],
                                            "id": 3365,
                                            "name": "IndexAccess",
                                            "src": "4250:24:6"
                                          }
                                        ],
                                        "id": 3366,
                                        "name": "MemberAccess",
                                        "src": "4250:31:6"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 3336,
                                          "type": "bytes32",
                                          "value": "func"
                                        },
                                        "id": 3367,
                                        "name": "Identifier",
                                        "src": "4283:4:6"
                                      }
                                    ],
                                    "id": 3368,
                                    "name": "FunctionCall",
                                    "src": "4170:118:6"
                                  }
                                ],
                                "id": 3369,
                                "name": "FunctionCall",
                                "src": "4162:127:6"
                              }
                            ],
                            "id": 3370,
                            "name": "ExpressionStatement",
                            "src": "4162:127:6"
                          }
                        ],
                        "id": 3371,
                        "name": "Block",
                        "src": "4148:152:6"
                      }
                    ],
                    "id": 3372,
                    "name": "ForStatement",
                    "src": "4093:207:6"
                  },
                  {
                    "id": 3373,
                    "name": "PlaceholderStatement",
                    "src": "4309:1:6"
                  },
                  {
                    "children": [
                      {
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "=",
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3339,
                                  "type": "uint256",
                                  "value": "index"
                                },
                                "id": 3374,
                                "name": "Identifier",
                                "src": "4325:5:6"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 3375,
                                "name": "Literal",
                                "src": "4333:1:6"
                              }
                            ],
                            "id": 3376,
                            "name": "Assignment",
                            "src": "4325:9:6"
                          }
                        ],
                        "id": 3377,
                        "name": "ExpressionStatement",
                        "src": "4325:9:6"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "<",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3339,
                              "type": "uint256",
                              "value": "index"
                            },
                            "id": 3378,
                            "name": "Identifier",
                            "src": "4335:5:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "length",
                              "referencedDeclaration": null,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3104,
                                  "type": "struct Controller.GlobalConstraint storage ref[] storage ref",
                                  "value": "globalConstraints"
                                },
                                "id": 3379,
                                "name": "Identifier",
                                "src": "4341:17:6"
                              }
                            ],
                            "id": 3380,
                            "name": "MemberAccess",
                            "src": "4341:24:6"
                          }
                        ],
                        "id": 3381,
                        "name": "BinaryOperation",
                        "src": "4335:30:6"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "++",
                              "prefix": false,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3339,
                                  "type": "uint256",
                                  "value": "index"
                                },
                                "id": 3382,
                                "name": "Identifier",
                                "src": "4366:5:6"
                              }
                            ],
                            "id": 3383,
                            "name": "UnaryOperation",
                            "src": "4366:7:6"
                          }
                        ],
                        "id": 3384,
                        "name": "ExpressionStatement",
                        "src": "4366:7:6"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "tuple()",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 10870,
                                      "type": "function (bool) pure",
                                      "value": "require"
                                    },
                                    "id": 3385,
                                    "name": "Identifier",
                                    "src": "4389:7:6"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "type": "bool",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            },
                                            {
                                              "typeIdentifier": "t_bytes32",
                                              "typeString": "bytes32"
                                            },
                                            {
                                              "typeIdentifier": "t_bytes32",
                                              "typeString": "bytes32"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "post",
                                          "referencedDeclaration": 5889,
                                          "type": "function (address,bytes32,bytes32) external returns (bool)"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isInlineArray": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "type": "contract GlobalConstraintInterface"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "isStructConstructorCall": false,
                                                  "lValueRequested": false,
                                                  "names": [
                                                    null
                                                  ],
                                                  "type": "contract GlobalConstraintInterface",
                                                  "type_conversion": true
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": [
                                                        {
                                                          "typeIdentifier": "t_address",
                                                          "typeString": "address"
                                                        }
                                                      ],
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 5890,
                                                      "type": "type(contract GlobalConstraintInterface)",
                                                      "value": "GlobalConstraintInterface"
                                                    },
                                                    "id": 3386,
                                                    "name": "Identifier",
                                                    "src": "4398:25:6"
                                                  },
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "isConstant": false,
                                                      "isLValue": true,
                                                      "isPure": false,
                                                      "lValueRequested": false,
                                                      "member_name": "gcAddress",
                                                      "referencedDeclaration": 3081,
                                                      "type": "address"
                                                    },
                                                    "children": [
                                                      {
                                                        "attributes": {
                                                          "argumentTypes": null,
                                                          "isConstant": false,
                                                          "isLValue": true,
                                                          "isPure": false,
                                                          "lValueRequested": false,
                                                          "type": "struct Controller.GlobalConstraint storage ref"
                                                        },
                                                        "children": [
                                                          {
                                                            "attributes": {
                                                              "argumentTypes": null,
                                                              "overloadedDeclarations": [
                                                                null
                                                              ],
                                                              "referencedDeclaration": 3104,
                                                              "type": "struct Controller.GlobalConstraint storage ref[] storage ref",
                                                              "value": "globalConstraints"
                                                            },
                                                            "id": 3387,
                                                            "name": "Identifier",
                                                            "src": "4424:17:6"
                                                          },
                                                          {
                                                            "attributes": {
                                                              "argumentTypes": null,
                                                              "overloadedDeclarations": [
                                                                null
                                                              ],
                                                              "referencedDeclaration": 3339,
                                                              "type": "uint256",
                                                              "value": "index"
                                                            },
                                                            "id": 3388,
                                                            "name": "Identifier",
                                                            "src": "4442:5:6"
                                                          }
                                                        ],
                                                        "id": 3389,
                                                        "name": "IndexAccess",
                                                        "src": "4424:24:6"
                                                      }
                                                    ],
                                                    "id": 3390,
                                                    "name": "MemberAccess",
                                                    "src": "4424:34:6"
                                                  }
                                                ],
                                                "id": 3391,
                                                "name": "FunctionCall",
                                                "src": "4398:61:6"
                                              }
                                            ],
                                            "id": 3392,
                                            "name": "TupleExpression",
                                            "src": "4397:63:6"
                                          }
                                        ],
                                        "id": 3393,
                                        "name": "MemberAccess",
                                        "src": "4397:68:6"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "sender",
                                          "referencedDeclaration": null,
                                          "type": "address"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 10867,
                                              "type": "msg",
                                              "value": "msg"
                                            },
                                            "id": 3394,
                                            "name": "Identifier",
                                            "src": "4466:3:6"
                                          }
                                        ],
                                        "id": 3395,
                                        "name": "MemberAccess",
                                        "src": "4466:10:6"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "params",
                                          "referencedDeclaration": 3083,
                                          "type": "bytes32"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "type": "struct Controller.GlobalConstraint storage ref"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 3104,
                                                  "type": "struct Controller.GlobalConstraint storage ref[] storage ref",
                                                  "value": "globalConstraints"
                                                },
                                                "id": 3396,
                                                "name": "Identifier",
                                                "src": "4478:17:6"
                                              },
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 3339,
                                                  "type": "uint256",
                                                  "value": "index"
                                                },
                                                "id": 3397,
                                                "name": "Identifier",
                                                "src": "4496:5:6"
                                              }
                                            ],
                                            "id": 3398,
                                            "name": "IndexAccess",
                                            "src": "4478:24:6"
                                          }
                                        ],
                                        "id": 3399,
                                        "name": "MemberAccess",
                                        "src": "4478:31:6"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 3336,
                                          "type": "bytes32",
                                          "value": "func"
                                        },
                                        "id": 3400,
                                        "name": "Identifier",
                                        "src": "4511:4:6"
                                      }
                                    ],
                                    "id": 3401,
                                    "name": "FunctionCall",
                                    "src": "4397:119:6"
                                  }
                                ],
                                "id": 3402,
                                "name": "FunctionCall",
                                "src": "4389:128:6"
                              }
                            ],
                            "id": 3403,
                            "name": "ExpressionStatement",
                            "src": "4389:128:6"
                          }
                        ],
                        "id": 3404,
                        "name": "Block",
                        "src": "4375:153:6"
                      }
                    ],
                    "id": 3405,
                    "name": "ForStatement",
                    "src": "4320:208:6"
                  }
                ],
                "id": 3406,
                "name": "Block",
                "src": "4063:471:6"
              }
            ],
            "id": 3407,
            "name": "ModifierDefinition",
            "src": "4016:518:6"
          },
          {
            "attributes": {
              "constant": false,
              "implemented": true,
              "isConstructor": false,
              "name": "mintReputation",
              "payable": false,
              "scope": 4159,
              "stateMutability": "nonpayable",
              "superFunction": 4176,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_amount",
                      "scope": 3437,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "int256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "int256",
                          "type": "int256"
                        },
                        "id": 3408,
                        "name": "ElementaryTypeName",
                        "src": "4756:6:6"
                      }
                    ],
                    "id": 3409,
                    "name": "VariableDeclaration",
                    "src": "4756:14:6"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_beneficiary",
                      "scope": 3437,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 3410,
                        "name": "ElementaryTypeName",
                        "src": "4772:7:6"
                      }
                    ],
                    "id": 3411,
                    "name": "VariableDeclaration",
                    "src": "4772:20:6"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 3437,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 3412,
                        "name": "ElementaryTypeName",
                        "src": "4793:7:6"
                      }
                    ],
                    "id": 3413,
                    "name": "VariableDeclaration",
                    "src": "4793:7:6"
                  }
                ],
                "id": 3414,
                "name": "ParameterList",
                "src": "4755:46:6"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 3437,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 3420,
                        "name": "ElementaryTypeName",
                        "src": "4896:4:6"
                      }
                    ],
                    "id": 3421,
                    "name": "VariableDeclaration",
                    "src": "4896:4:6"
                  }
                ],
                "id": 3422,
                "name": "ParameterList",
                "src": "4895:6:6"
              },
              {
                "attributes": {
                  "arguments": [
                    null
                  ]
                },
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 3274,
                      "type": "modifier ()",
                      "value": "onlyRegisteredScheme"
                    },
                    "id": 3415,
                    "name": "Identifier",
                    "src": "4817:20:6"
                  }
                ],
                "id": 3416,
                "name": "ModifierInvocation",
                "src": "4817:20:6"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 3407,
                      "type": "modifier (bytes32)",
                      "value": "onlySubjectToConstraint"
                    },
                    "id": 3417,
                    "name": "Identifier",
                    "src": "4842:23:6"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "hexvalue": "6d696e7452657075746174696f6e",
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "subdenomination": null,
                      "token": "string",
                      "type": "literal_string \"mintReputation\"",
                      "value": "mintReputation"
                    },
                    "id": 3418,
                    "name": "Literal",
                    "src": "4866:16:6"
                  }
                ],
                "id": 3419,
                "name": "ModifierInvocation",
                "src": "4842:41:6"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3116,
                              "type": "function (address,address,int256)",
                              "value": "MintReputation"
                            },
                            "id": 3423,
                            "name": "Identifier",
                            "src": "4916:14:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "sender",
                              "referencedDeclaration": null,
                              "type": "address"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 10867,
                                  "type": "msg",
                                  "value": "msg"
                                },
                                "id": 3424,
                                "name": "Identifier",
                                "src": "4931:3:6"
                              }
                            ],
                            "id": 3425,
                            "name": "MemberAccess",
                            "src": "4931:10:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3411,
                              "type": "address",
                              "value": "_beneficiary"
                            },
                            "id": 3426,
                            "name": "Identifier",
                            "src": "4943:12:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3409,
                              "type": "int256",
                              "value": "_amount"
                            },
                            "id": 3427,
                            "name": "Identifier",
                            "src": "4957:7:6"
                          }
                        ],
                        "id": 3428,
                        "name": "FunctionCall",
                        "src": "4916:49:6"
                      }
                    ],
                    "id": 3429,
                    "name": "ExpressionStatement",
                    "src": "4916:49:6"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 3422
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "bool",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_int256",
                                  "typeString": "int256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "mint",
                              "referencedDeclaration": 4543,
                              "type": "function (address,int256) external returns (bool)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3099,
                                  "type": "contract Reputation",
                                  "value": "nativeReputation"
                                },
                                "id": 3430,
                                "name": "Identifier",
                                "src": "4982:16:6"
                              }
                            ],
                            "id": 3431,
                            "name": "MemberAccess",
                            "src": "4982:21:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3411,
                              "type": "address",
                              "value": "_beneficiary"
                            },
                            "id": 3432,
                            "name": "Identifier",
                            "src": "5004:12:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3409,
                              "type": "int256",
                              "value": "_amount"
                            },
                            "id": 3433,
                            "name": "Identifier",
                            "src": "5018:7:6"
                          }
                        ],
                        "id": 3434,
                        "name": "FunctionCall",
                        "src": "4982:44:6"
                      }
                    ],
                    "id": 3435,
                    "name": "Return",
                    "src": "4975:51:6"
                  }
                ],
                "id": 3436,
                "name": "Block",
                "src": "4906:127:6"
              }
            ],
            "id": 3437,
            "name": "FunctionDefinition",
            "src": "4732:301:6"
          },
          {
            "attributes": {
              "constant": false,
              "implemented": true,
              "isConstructor": false,
              "name": "mintTokens",
              "payable": false,
              "scope": 4159,
              "stateMutability": "nonpayable",
              "superFunction": 4187,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_amount",
                      "scope": 3467,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 3438,
                        "name": "ElementaryTypeName",
                        "src": "5242:7:6"
                      }
                    ],
                    "id": 3439,
                    "name": "VariableDeclaration",
                    "src": "5242:15:6"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_beneficiary",
                      "scope": 3467,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 3440,
                        "name": "ElementaryTypeName",
                        "src": "5259:7:6"
                      }
                    ],
                    "id": 3441,
                    "name": "VariableDeclaration",
                    "src": "5259:20:6"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 3467,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 3442,
                        "name": "ElementaryTypeName",
                        "src": "5280:7:6"
                      }
                    ],
                    "id": 3443,
                    "name": "VariableDeclaration",
                    "src": "5280:7:6"
                  }
                ],
                "id": 3444,
                "name": "ParameterList",
                "src": "5241:47:6"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 3467,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 3450,
                        "name": "ElementaryTypeName",
                        "src": "5379:4:6"
                      }
                    ],
                    "id": 3451,
                    "name": "VariableDeclaration",
                    "src": "5379:4:6"
                  }
                ],
                "id": 3452,
                "name": "ParameterList",
                "src": "5378:6:6"
              },
              {
                "attributes": {
                  "arguments": [
                    null
                  ]
                },
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 3274,
                      "type": "modifier ()",
                      "value": "onlyRegisteredScheme"
                    },
                    "id": 3445,
                    "name": "Identifier",
                    "src": "5304:20:6"
                  }
                ],
                "id": 3446,
                "name": "ModifierInvocation",
                "src": "5304:20:6"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 3407,
                      "type": "modifier (bytes32)",
                      "value": "onlySubjectToConstraint"
                    },
                    "id": 3447,
                    "name": "Identifier",
                    "src": "5329:23:6"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "hexvalue": "6d696e74546f6b656e73",
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "subdenomination": null,
                      "token": "string",
                      "type": "literal_string \"mintTokens\"",
                      "value": "mintTokens"
                    },
                    "id": 3448,
                    "name": "Literal",
                    "src": "5353:12:6"
                  }
                ],
                "id": 3449,
                "name": "ModifierInvocation",
                "src": "5329:37:6"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3124,
                              "type": "function (address,address,uint256)",
                              "value": "MintTokens"
                            },
                            "id": 3453,
                            "name": "Identifier",
                            "src": "5399:10:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "sender",
                              "referencedDeclaration": null,
                              "type": "address"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 10867,
                                  "type": "msg",
                                  "value": "msg"
                                },
                                "id": 3454,
                                "name": "Identifier",
                                "src": "5410:3:6"
                              }
                            ],
                            "id": 3455,
                            "name": "MemberAccess",
                            "src": "5410:10:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3441,
                              "type": "address",
                              "value": "_beneficiary"
                            },
                            "id": 3456,
                            "name": "Identifier",
                            "src": "5422:12:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3439,
                              "type": "uint256",
                              "value": "_amount"
                            },
                            "id": 3457,
                            "name": "Identifier",
                            "src": "5436:7:6"
                          }
                        ],
                        "id": 3458,
                        "name": "FunctionCall",
                        "src": "5399:45:6"
                      }
                    ],
                    "id": 3459,
                    "name": "ExpressionStatement",
                    "src": "5399:45:6"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 3452
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "bool",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "mint",
                              "referencedDeclaration": 10589,
                              "type": "function (address,uint256) external returns (bool)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3097,
                                  "type": "contract DAOToken",
                                  "value": "nativeToken"
                                },
                                "id": 3460,
                                "name": "Identifier",
                                "src": "5461:11:6"
                              }
                            ],
                            "id": 3461,
                            "name": "MemberAccess",
                            "src": "5461:16:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3441,
                              "type": "address",
                              "value": "_beneficiary"
                            },
                            "id": 3462,
                            "name": "Identifier",
                            "src": "5478:12:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3439,
                              "type": "uint256",
                              "value": "_amount"
                            },
                            "id": 3463,
                            "name": "Identifier",
                            "src": "5492:7:6"
                          }
                        ],
                        "id": 3464,
                        "name": "FunctionCall",
                        "src": "5461:39:6"
                      }
                    ],
                    "id": 3465,
                    "name": "Return",
                    "src": "5454:46:6"
                  }
                ],
                "id": 3466,
                "name": "Block",
                "src": "5389:118:6"
              }
            ],
            "id": 3467,
            "name": "FunctionDefinition",
            "src": "5222:285:6"
          },
          {
            "attributes": {
              "constant": false,
              "implemented": true,
              "isConstructor": false,
              "name": "registerScheme",
              "payable": false,
              "scope": 4159,
              "stateMutability": "nonpayable",
              "superFunction": 4200,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_scheme",
                      "scope": 3564,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 3468,
                        "name": "ElementaryTypeName",
                        "src": "5808:7:6"
                      }
                    ],
                    "id": 3469,
                    "name": "VariableDeclaration",
                    "src": "5808:15:6"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_paramsHash",
                      "scope": 3564,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 3470,
                        "name": "ElementaryTypeName",
                        "src": "5825:7:6"
                      }
                    ],
                    "id": 3471,
                    "name": "VariableDeclaration",
                    "src": "5825:19:6"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_permissions",
                      "scope": 3564,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes4",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes4",
                          "type": "bytes4"
                        },
                        "id": 3472,
                        "name": "ElementaryTypeName",
                        "src": "5846:6:6"
                      }
                    ],
                    "id": 3473,
                    "name": "VariableDeclaration",
                    "src": "5846:19:6"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 3564,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 3474,
                        "name": "ElementaryTypeName",
                        "src": "5866:7:6"
                      }
                    ],
                    "id": 3475,
                    "name": "VariableDeclaration",
                    "src": "5866:7:6"
                  }
                ],
                "id": 3476,
                "name": "ParameterList",
                "src": "5807:67:6"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 3564,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 3482,
                        "name": "ElementaryTypeName",
                        "src": "5971:4:6"
                      }
                    ],
                    "id": 3483,
                    "name": "VariableDeclaration",
                    "src": "5971:4:6"
                  }
                ],
                "id": 3484,
                "name": "ParameterList",
                "src": "5970:6:6"
              },
              {
                "attributes": {
                  "arguments": [
                    null
                  ]
                },
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 3294,
                      "type": "modifier ()",
                      "value": "onlyRegisteringSchemes"
                    },
                    "id": 3477,
                    "name": "Identifier",
                    "src": "5890:22:6"
                  }
                ],
                "id": 3478,
                "name": "ModifierInvocation",
                "src": "5890:22:6"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 3407,
                      "type": "modifier (bytes32)",
                      "value": "onlySubjectToConstraint"
                    },
                    "id": 3479,
                    "name": "Identifier",
                    "src": "5917:23:6"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "hexvalue": "7265676973746572536368656d65",
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "subdenomination": null,
                      "token": "string",
                      "type": "literal_string \"registerScheme\"",
                      "value": "registerScheme"
                    },
                    "id": 3480,
                    "name": "Literal",
                    "src": "5941:16:6"
                  }
                ],
                "id": 3481,
                "name": "ModifierInvocation",
                "src": "5917:41:6"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        3486
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "scheme",
                          "scope": 3564,
                          "stateVariable": false,
                          "storageLocation": "memory",
                          "type": "struct Controller.Scheme memory",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "contractScope": null,
                              "name": "Scheme",
                              "referencedDeclaration": 3079,
                              "type": "struct Controller.Scheme storage pointer"
                            },
                            "id": 3485,
                            "name": "UserDefinedTypeName",
                            "src": "5992:6:6"
                          }
                        ],
                        "id": 3486,
                        "name": "VariableDeclaration",
                        "src": "5992:20:6"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "struct Controller.Scheme storage ref"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3093,
                              "type": "mapping(address => struct Controller.Scheme storage ref)",
                              "value": "schemes"
                            },
                            "id": 3487,
                            "name": "Identifier",
                            "src": "6015:7:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3469,
                              "type": "address",
                              "value": "_scheme"
                            },
                            "id": 3488,
                            "name": "Identifier",
                            "src": "6023:7:6"
                          }
                        ],
                        "id": 3489,
                        "name": "IndexAccess",
                        "src": "6015:16:6"
                      }
                    ],
                    "id": 3490,
                    "name": "VariableDeclarationStatement",
                    "src": "5992:39:6"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 10870,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 3491,
                            "name": "Identifier",
                            "src": "6322:7:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "&",
                                  "type": "bytes4"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_bytes4",
                                        "typeString": "bytes4"
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "&",
                                      "type": "bytes4"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "type": "bytes4",
                                          "type_conversion": true
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_rational_15_by_1",
                                                  "typeString": "int_const 15"
                                                }
                                              ],
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "type": "type(bytes4)",
                                              "value": "bytes4"
                                            },
                                            "id": 3492,
                                            "name": "ElementaryTypeNameExpression",
                                            "src": "6330:6:6"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "hexvalue": "3135",
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "subdenomination": null,
                                              "token": "number",
                                              "type": "int_const 15",
                                              "value": "15"
                                            },
                                            "id": 3493,
                                            "name": "Literal",
                                            "src": "6337:2:6"
                                          }
                                        ],
                                        "id": 3494,
                                        "name": "FunctionCall",
                                        "src": "6330:10:6"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isInlineArray": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "type": "bytes4"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "commonType": {
                                                "typeIdentifier": "t_bytes4",
                                                "typeString": "bytes4"
                                              },
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "operator": "^",
                                              "type": "bytes4"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 3473,
                                                  "type": "bytes4",
                                                  "value": "_permissions"
                                                },
                                                "id": 3495,
                                                "name": "Identifier",
                                                "src": "6342:12:6"
                                              },
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "isConstant": false,
                                                  "isLValue": true,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "member_name": "permissions",
                                                  "referencedDeclaration": 3078,
                                                  "type": "bytes4"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 3486,
                                                      "type": "struct Controller.Scheme memory",
                                                      "value": "scheme"
                                                    },
                                                    "id": 3496,
                                                    "name": "Identifier",
                                                    "src": "6355:6:6"
                                                  }
                                                ],
                                                "id": 3497,
                                                "name": "MemberAccess",
                                                "src": "6355:18:6"
                                              }
                                            ],
                                            "id": 3498,
                                            "name": "BinaryOperation",
                                            "src": "6342:31:6"
                                          }
                                        ],
                                        "id": 3499,
                                        "name": "TupleExpression",
                                        "src": "6341:33:6"
                                      }
                                    ],
                                    "id": 3500,
                                    "name": "BinaryOperation",
                                    "src": "6330:44:6"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "type": "bytes4"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "~",
                                          "prefix": true,
                                          "type": "bytes4"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "member_name": "permissions",
                                              "referencedDeclaration": 3078,
                                              "type": "bytes4"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "isConstant": false,
                                                  "isLValue": true,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "type": "struct Controller.Scheme storage ref"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 3093,
                                                      "type": "mapping(address => struct Controller.Scheme storage ref)",
                                                      "value": "schemes"
                                                    },
                                                    "id": 3501,
                                                    "name": "Identifier",
                                                    "src": "6377:7:6"
                                                  },
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": false,
                                                      "lValueRequested": false,
                                                      "member_name": "sender",
                                                      "referencedDeclaration": null,
                                                      "type": "address"
                                                    },
                                                    "children": [
                                                      {
                                                        "attributes": {
                                                          "argumentTypes": null,
                                                          "overloadedDeclarations": [
                                                            null
                                                          ],
                                                          "referencedDeclaration": 10867,
                                                          "type": "msg",
                                                          "value": "msg"
                                                        },
                                                        "id": 3502,
                                                        "name": "Identifier",
                                                        "src": "6385:3:6"
                                                      }
                                                    ],
                                                    "id": 3503,
                                                    "name": "MemberAccess",
                                                    "src": "6385:10:6"
                                                  }
                                                ],
                                                "id": 3504,
                                                "name": "IndexAccess",
                                                "src": "6377:19:6"
                                              }
                                            ],
                                            "id": 3505,
                                            "name": "MemberAccess",
                                            "src": "6377:31:6"
                                          }
                                        ],
                                        "id": 3506,
                                        "name": "UnaryOperation",
                                        "src": "6376:32:6"
                                      }
                                    ],
                                    "id": 3507,
                                    "name": "TupleExpression",
                                    "src": "6375:34:6"
                                  }
                                ],
                                "id": 3508,
                                "name": "BinaryOperation",
                                "src": "6330:79:6"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "bytes4",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(bytes4)",
                                      "value": "bytes4"
                                    },
                                    "id": 3509,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "6413:6:6"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "30",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 0",
                                      "value": "0"
                                    },
                                    "id": 3510,
                                    "name": "Literal",
                                    "src": "6420:1:6"
                                  }
                                ],
                                "id": 3511,
                                "name": "FunctionCall",
                                "src": "6413:9:6"
                              }
                            ],
                            "id": 3512,
                            "name": "BinaryOperation",
                            "src": "6330:92:6"
                          }
                        ],
                        "id": 3513,
                        "name": "FunctionCall",
                        "src": "6322:101:6"
                      }
                    ],
                    "id": 3514,
                    "name": "ExpressionStatement",
                    "src": "6322:101:6"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 10870,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 3515,
                            "name": "Identifier",
                            "src": "6518:7:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "&",
                                  "type": "bytes4"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "type": "bytes4",
                                      "type_conversion": true
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_rational_15_by_1",
                                              "typeString": "int_const 15"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "type": "type(bytes4)",
                                          "value": "bytes4"
                                        },
                                        "id": 3516,
                                        "name": "ElementaryTypeNameExpression",
                                        "src": "6526:6:6"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "hexvalue": "3135",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "subdenomination": null,
                                          "token": "number",
                                          "type": "int_const 15",
                                          "value": "15"
                                        },
                                        "id": 3517,
                                        "name": "Literal",
                                        "src": "6533:2:6"
                                      }
                                    ],
                                    "id": 3518,
                                    "name": "FunctionCall",
                                    "src": "6526:10:6"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "type": "bytes4"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_bytes4",
                                            "typeString": "bytes4"
                                          },
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "&",
                                          "type": "bytes4"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "member_name": "permissions",
                                              "referencedDeclaration": 3078,
                                              "type": "bytes4"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 3486,
                                                  "type": "struct Controller.Scheme memory",
                                                  "value": "scheme"
                                                },
                                                "id": 3519,
                                                "name": "Identifier",
                                                "src": "6538:6:6"
                                              }
                                            ],
                                            "id": 3520,
                                            "name": "MemberAccess",
                                            "src": "6538:18:6"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isInlineArray": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "type": "bytes4"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "operator": "~",
                                                  "prefix": true,
                                                  "type": "bytes4"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "isConstant": false,
                                                      "isLValue": true,
                                                      "isPure": false,
                                                      "lValueRequested": false,
                                                      "member_name": "permissions",
                                                      "referencedDeclaration": 3078,
                                                      "type": "bytes4"
                                                    },
                                                    "children": [
                                                      {
                                                        "attributes": {
                                                          "argumentTypes": null,
                                                          "isConstant": false,
                                                          "isLValue": true,
                                                          "isPure": false,
                                                          "lValueRequested": false,
                                                          "type": "struct Controller.Scheme storage ref"
                                                        },
                                                        "children": [
                                                          {
                                                            "attributes": {
                                                              "argumentTypes": null,
                                                              "overloadedDeclarations": [
                                                                null
                                                              ],
                                                              "referencedDeclaration": 3093,
                                                              "type": "mapping(address => struct Controller.Scheme storage ref)",
                                                              "value": "schemes"
                                                            },
                                                            "id": 3521,
                                                            "name": "Identifier",
                                                            "src": "6559:7:6"
                                                          },
                                                          {
                                                            "attributes": {
                                                              "argumentTypes": null,
                                                              "isConstant": false,
                                                              "isLValue": false,
                                                              "isPure": false,
                                                              "lValueRequested": false,
                                                              "member_name": "sender",
                                                              "referencedDeclaration": null,
                                                              "type": "address"
                                                            },
                                                            "children": [
                                                              {
                                                                "attributes": {
                                                                  "argumentTypes": null,
                                                                  "overloadedDeclarations": [
                                                                    null
                                                                  ],
                                                                  "referencedDeclaration": 10867,
                                                                  "type": "msg",
                                                                  "value": "msg"
                                                                },
                                                                "id": 3522,
                                                                "name": "Identifier",
                                                                "src": "6567:3:6"
                                                              }
                                                            ],
                                                            "id": 3523,
                                                            "name": "MemberAccess",
                                                            "src": "6567:10:6"
                                                          }
                                                        ],
                                                        "id": 3524,
                                                        "name": "IndexAccess",
                                                        "src": "6559:19:6"
                                                      }
                                                    ],
                                                    "id": 3525,
                                                    "name": "MemberAccess",
                                                    "src": "6559:31:6"
                                                  }
                                                ],
                                                "id": 3526,
                                                "name": "UnaryOperation",
                                                "src": "6558:32:6"
                                              }
                                            ],
                                            "id": 3527,
                                            "name": "TupleExpression",
                                            "src": "6557:34:6"
                                          }
                                        ],
                                        "id": 3528,
                                        "name": "BinaryOperation",
                                        "src": "6538:53:6"
                                      }
                                    ],
                                    "id": 3529,
                                    "name": "TupleExpression",
                                    "src": "6537:55:6"
                                  }
                                ],
                                "id": 3530,
                                "name": "BinaryOperation",
                                "src": "6526:66:6"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "bytes4",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(bytes4)",
                                      "value": "bytes4"
                                    },
                                    "id": 3531,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "6596:6:6"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "30",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 0",
                                      "value": "0"
                                    },
                                    "id": 3532,
                                    "name": "Literal",
                                    "src": "6603:1:6"
                                  }
                                ],
                                "id": 3533,
                                "name": "FunctionCall",
                                "src": "6596:9:6"
                              }
                            ],
                            "id": 3534,
                            "name": "BinaryOperation",
                            "src": "6526:79:6"
                          }
                        ],
                        "id": 3535,
                        "name": "FunctionCall",
                        "src": "6518:88:6"
                      }
                    ],
                    "id": 3536,
                    "name": "ExpressionStatement",
                    "src": "6518:88:6"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "bytes32"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "member_name": "paramsHash",
                              "referencedDeclaration": 3076,
                              "type": "bytes32"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "struct Controller.Scheme storage ref"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3093,
                                      "type": "mapping(address => struct Controller.Scheme storage ref)",
                                      "value": "schemes"
                                    },
                                    "id": 3537,
                                    "name": "Identifier",
                                    "src": "6650:7:6"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3469,
                                      "type": "address",
                                      "value": "_scheme"
                                    },
                                    "id": 3538,
                                    "name": "Identifier",
                                    "src": "6658:7:6"
                                  }
                                ],
                                "id": 3539,
                                "name": "IndexAccess",
                                "src": "6650:16:6"
                              }
                            ],
                            "id": 3540,
                            "name": "MemberAccess",
                            "src": "6650:27:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3471,
                              "type": "bytes32",
                              "value": "_paramsHash"
                            },
                            "id": 3541,
                            "name": "Identifier",
                            "src": "6680:11:6"
                          }
                        ],
                        "id": 3542,
                        "name": "Assignment",
                        "src": "6650:41:6"
                      }
                    ],
                    "id": 3543,
                    "name": "ExpressionStatement",
                    "src": "6650:41:6"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "bytes4"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "member_name": "permissions",
                              "referencedDeclaration": 3078,
                              "type": "bytes4"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "struct Controller.Scheme storage ref"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3093,
                                      "type": "mapping(address => struct Controller.Scheme storage ref)",
                                      "value": "schemes"
                                    },
                                    "id": 3544,
                                    "name": "Identifier",
                                    "src": "6701:7:6"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3469,
                                      "type": "address",
                                      "value": "_scheme"
                                    },
                                    "id": 3545,
                                    "name": "Identifier",
                                    "src": "6709:7:6"
                                  }
                                ],
                                "id": 3546,
                                "name": "IndexAccess",
                                "src": "6701:16:6"
                              }
                            ],
                            "id": 3547,
                            "name": "MemberAccess",
                            "src": "6701:28:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "|",
                              "type": "bytes4"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3473,
                                  "type": "bytes4",
                                  "value": "_permissions"
                                },
                                "id": 3548,
                                "name": "Identifier",
                                "src": "6732:12:6"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "bytes4",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(bytes4)",
                                      "value": "bytes4"
                                    },
                                    "id": 3549,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "6745:6:6"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "31",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 1",
                                      "value": "1"
                                    },
                                    "id": 3550,
                                    "name": "Literal",
                                    "src": "6752:1:6"
                                  }
                                ],
                                "id": 3551,
                                "name": "FunctionCall",
                                "src": "6745:9:6"
                              }
                            ],
                            "id": 3552,
                            "name": "BinaryOperation",
                            "src": "6732:22:6"
                          }
                        ],
                        "id": 3553,
                        "name": "Assignment",
                        "src": "6701:53:6"
                      }
                    ],
                    "id": 3554,
                    "name": "ExpressionStatement",
                    "src": "6701:53:6"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3130,
                              "type": "function (address,address)",
                              "value": "RegisterScheme"
                            },
                            "id": 3555,
                            "name": "Identifier",
                            "src": "6764:14:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "sender",
                              "referencedDeclaration": null,
                              "type": "address"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 10867,
                                  "type": "msg",
                                  "value": "msg"
                                },
                                "id": 3556,
                                "name": "Identifier",
                                "src": "6779:3:6"
                              }
                            ],
                            "id": 3557,
                            "name": "MemberAccess",
                            "src": "6779:10:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3469,
                              "type": "address",
                              "value": "_scheme"
                            },
                            "id": 3558,
                            "name": "Identifier",
                            "src": "6791:7:6"
                          }
                        ],
                        "id": 3559,
                        "name": "FunctionCall",
                        "src": "6764:35:6"
                      }
                    ],
                    "id": 3560,
                    "name": "ExpressionStatement",
                    "src": "6764:35:6"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 3484
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "hexvalue": "74727565",
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "subdenomination": null,
                          "token": "bool",
                          "type": "bool",
                          "value": "true"
                        },
                        "id": 3561,
                        "name": "Literal",
                        "src": "6816:4:6"
                      }
                    ],
                    "id": 3562,
                    "name": "Return",
                    "src": "6809:11:6"
                  }
                ],
                "id": 3563,
                "name": "Block",
                "src": "5981:846:6"
              }
            ],
            "id": 3564,
            "name": "FunctionDefinition",
            "src": "5784:1043:6"
          },
          {
            "attributes": {
              "constant": false,
              "implemented": true,
              "isConstructor": false,
              "name": "unregisterScheme",
              "payable": false,
              "scope": 4159,
              "stateMutability": "nonpayable",
              "superFunction": 4209,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_scheme",
                      "scope": 3632,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 3565,
                        "name": "ElementaryTypeName",
                        "src": "7003:7:6"
                      }
                    ],
                    "id": 3566,
                    "name": "VariableDeclaration",
                    "src": "7003:15:6"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 3632,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 3567,
                        "name": "ElementaryTypeName",
                        "src": "7019:7:6"
                      }
                    ],
                    "id": 3568,
                    "name": "VariableDeclaration",
                    "src": "7019:7:6"
                  }
                ],
                "id": 3569,
                "name": "ParameterList",
                "src": "7001:26:6"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 3632,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 3575,
                        "name": "ElementaryTypeName",
                        "src": "7126:4:6"
                      }
                    ],
                    "id": 3576,
                    "name": "VariableDeclaration",
                    "src": "7126:4:6"
                  }
                ],
                "id": 3577,
                "name": "ParameterList",
                "src": "7125:6:6"
              },
              {
                "attributes": {
                  "arguments": [
                    null
                  ]
                },
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 3294,
                      "type": "modifier ()",
                      "value": "onlyRegisteringSchemes"
                    },
                    "id": 3570,
                    "name": "Identifier",
                    "src": "7043:22:6"
                  }
                ],
                "id": 3571,
                "name": "ModifierInvocation",
                "src": "7043:22:6"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 3407,
                      "type": "modifier (bytes32)",
                      "value": "onlySubjectToConstraint"
                    },
                    "id": 3572,
                    "name": "Identifier",
                    "src": "7070:23:6"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "hexvalue": "756e7265676973746572536368656d65",
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "subdenomination": null,
                      "token": "string",
                      "type": "literal_string \"unregisterScheme\"",
                      "value": "unregisterScheme"
                    },
                    "id": 3573,
                    "name": "Literal",
                    "src": "7094:18:6"
                  }
                ],
                "id": 3574,
                "name": "ModifierInvocation",
                "src": "7070:43:6"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "==",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "&",
                              "type": "bytes4"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "permissions",
                                  "referencedDeclaration": 3078,
                                  "type": "bytes4"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "type": "struct Controller.Scheme storage ref"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 3093,
                                          "type": "mapping(address => struct Controller.Scheme storage ref)",
                                          "value": "schemes"
                                        },
                                        "id": 3578,
                                        "name": "Identifier",
                                        "src": "7188:7:6"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 3566,
                                          "type": "address",
                                          "value": "_scheme"
                                        },
                                        "id": 3579,
                                        "name": "Identifier",
                                        "src": "7196:7:6"
                                      }
                                    ],
                                    "id": 3580,
                                    "name": "IndexAccess",
                                    "src": "7188:16:6"
                                  }
                                ],
                                "id": 3581,
                                "name": "MemberAccess",
                                "src": "7188:28:6"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "bytes4",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(bytes4)",
                                      "value": "bytes4"
                                    },
                                    "id": 3582,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "7217:6:6"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "31",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 1",
                                      "value": "1"
                                    },
                                    "id": 3583,
                                    "name": "Literal",
                                    "src": "7224:1:6"
                                  }
                                ],
                                "id": 3584,
                                "name": "FunctionCall",
                                "src": "7217:9:6"
                              }
                            ],
                            "id": 3585,
                            "name": "BinaryOperation",
                            "src": "7188:38:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "bytes4",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(bytes4)",
                                  "value": "bytes4"
                                },
                                "id": 3586,
                                "name": "ElementaryTypeNameExpression",
                                "src": "7230:6:6"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 3587,
                                "name": "Literal",
                                "src": "7237:1:6"
                              }
                            ],
                            "id": 3588,
                            "name": "FunctionCall",
                            "src": "7230:9:6"
                          }
                        ],
                        "id": 3589,
                        "name": "BinaryOperation",
                        "src": "7188:51:6"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "functionReturnParameters": 3577
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "66616c7365",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "bool",
                                  "type": "bool",
                                  "value": "false"
                                },
                                "id": 3590,
                                "name": "Literal",
                                "src": "7262:5:6"
                              }
                            ],
                            "id": 3591,
                            "name": "Return",
                            "src": "7255:12:6"
                          }
                        ],
                        "id": 3592,
                        "name": "Block",
                        "src": "7241:39:6"
                      }
                    ],
                    "id": 3593,
                    "name": "IfStatement",
                    "src": "7184:96:6"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 10870,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 3594,
                            "name": "Identifier",
                            "src": "7351:7:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "&",
                                  "type": "bytes4"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "type": "bytes4",
                                      "type_conversion": true
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_rational_15_by_1",
                                              "typeString": "int_const 15"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "type": "type(bytes4)",
                                          "value": "bytes4"
                                        },
                                        "id": 3595,
                                        "name": "ElementaryTypeNameExpression",
                                        "src": "7359:6:6"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "hexvalue": "3135",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "subdenomination": null,
                                          "token": "number",
                                          "type": "int_const 15",
                                          "value": "15"
                                        },
                                        "id": 3596,
                                        "name": "Literal",
                                        "src": "7366:2:6"
                                      }
                                    ],
                                    "id": 3597,
                                    "name": "FunctionCall",
                                    "src": "7359:10:6"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "type": "bytes4"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_bytes4",
                                            "typeString": "bytes4"
                                          },
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "&",
                                          "type": "bytes4"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "member_name": "permissions",
                                              "referencedDeclaration": 3078,
                                              "type": "bytes4"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "isConstant": false,
                                                  "isLValue": true,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "type": "struct Controller.Scheme storage ref"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 3093,
                                                      "type": "mapping(address => struct Controller.Scheme storage ref)",
                                                      "value": "schemes"
                                                    },
                                                    "id": 3598,
                                                    "name": "Identifier",
                                                    "src": "7371:7:6"
                                                  },
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 3566,
                                                      "type": "address",
                                                      "value": "_scheme"
                                                    },
                                                    "id": 3599,
                                                    "name": "Identifier",
                                                    "src": "7379:7:6"
                                                  }
                                                ],
                                                "id": 3600,
                                                "name": "IndexAccess",
                                                "src": "7371:16:6"
                                              }
                                            ],
                                            "id": 3601,
                                            "name": "MemberAccess",
                                            "src": "7371:28:6"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isInlineArray": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "type": "bytes4"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "operator": "~",
                                                  "prefix": true,
                                                  "type": "bytes4"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "isConstant": false,
                                                      "isLValue": true,
                                                      "isPure": false,
                                                      "lValueRequested": false,
                                                      "member_name": "permissions",
                                                      "referencedDeclaration": 3078,
                                                      "type": "bytes4"
                                                    },
                                                    "children": [
                                                      {
                                                        "attributes": {
                                                          "argumentTypes": null,
                                                          "isConstant": false,
                                                          "isLValue": true,
                                                          "isPure": false,
                                                          "lValueRequested": false,
                                                          "type": "struct Controller.Scheme storage ref"
                                                        },
                                                        "children": [
                                                          {
                                                            "attributes": {
                                                              "argumentTypes": null,
                                                              "overloadedDeclarations": [
                                                                null
                                                              ],
                                                              "referencedDeclaration": 3093,
                                                              "type": "mapping(address => struct Controller.Scheme storage ref)",
                                                              "value": "schemes"
                                                            },
                                                            "id": 3602,
                                                            "name": "Identifier",
                                                            "src": "7402:7:6"
                                                          },
                                                          {
                                                            "attributes": {
                                                              "argumentTypes": null,
                                                              "isConstant": false,
                                                              "isLValue": false,
                                                              "isPure": false,
                                                              "lValueRequested": false,
                                                              "member_name": "sender",
                                                              "referencedDeclaration": null,
                                                              "type": "address"
                                                            },
                                                            "children": [
                                                              {
                                                                "attributes": {
                                                                  "argumentTypes": null,
                                                                  "overloadedDeclarations": [
                                                                    null
                                                                  ],
                                                                  "referencedDeclaration": 10867,
                                                                  "type": "msg",
                                                                  "value": "msg"
                                                                },
                                                                "id": 3603,
                                                                "name": "Identifier",
                                                                "src": "7410:3:6"
                                                              }
                                                            ],
                                                            "id": 3604,
                                                            "name": "MemberAccess",
                                                            "src": "7410:10:6"
                                                          }
                                                        ],
                                                        "id": 3605,
                                                        "name": "IndexAccess",
                                                        "src": "7402:19:6"
                                                      }
                                                    ],
                                                    "id": 3606,
                                                    "name": "MemberAccess",
                                                    "src": "7402:31:6"
                                                  }
                                                ],
                                                "id": 3607,
                                                "name": "UnaryOperation",
                                                "src": "7401:32:6"
                                              }
                                            ],
                                            "id": 3608,
                                            "name": "TupleExpression",
                                            "src": "7400:34:6"
                                          }
                                        ],
                                        "id": 3609,
                                        "name": "BinaryOperation",
                                        "src": "7371:63:6"
                                      }
                                    ],
                                    "id": 3610,
                                    "name": "TupleExpression",
                                    "src": "7370:65:6"
                                  }
                                ],
                                "id": 3611,
                                "name": "BinaryOperation",
                                "src": "7359:76:6"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "bytes4",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(bytes4)",
                                      "value": "bytes4"
                                    },
                                    "id": 3612,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "7439:6:6"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "30",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 0",
                                      "value": "0"
                                    },
                                    "id": 3613,
                                    "name": "Literal",
                                    "src": "7446:1:6"
                                  }
                                ],
                                "id": 3614,
                                "name": "FunctionCall",
                                "src": "7439:9:6"
                              }
                            ],
                            "id": 3615,
                            "name": "BinaryOperation",
                            "src": "7359:89:6"
                          }
                        ],
                        "id": 3616,
                        "name": "FunctionCall",
                        "src": "7351:98:6"
                      }
                    ],
                    "id": 3617,
                    "name": "ExpressionStatement",
                    "src": "7351:98:6"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3136,
                              "type": "function (address,address)",
                              "value": "UnregisterScheme"
                            },
                            "id": 3618,
                            "name": "Identifier",
                            "src": "7479:16:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "sender",
                              "referencedDeclaration": null,
                              "type": "address"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 10867,
                                  "type": "msg",
                                  "value": "msg"
                                },
                                "id": 3619,
                                "name": "Identifier",
                                "src": "7496:3:6"
                              }
                            ],
                            "id": 3620,
                            "name": "MemberAccess",
                            "src": "7496:10:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3566,
                              "type": "address",
                              "value": "_scheme"
                            },
                            "id": 3621,
                            "name": "Identifier",
                            "src": "7508:7:6"
                          }
                        ],
                        "id": 3622,
                        "name": "FunctionCall",
                        "src": "7479:37:6"
                      }
                    ],
                    "id": 3623,
                    "name": "ExpressionStatement",
                    "src": "7479:37:6"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "delete",
                          "prefix": true,
                          "type": "tuple()"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "type": "struct Controller.Scheme storage ref"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3093,
                                  "type": "mapping(address => struct Controller.Scheme storage ref)",
                                  "value": "schemes"
                                },
                                "id": 3624,
                                "name": "Identifier",
                                "src": "7533:7:6"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3566,
                                  "type": "address",
                                  "value": "_scheme"
                                },
                                "id": 3625,
                                "name": "Identifier",
                                "src": "7541:7:6"
                              }
                            ],
                            "id": 3626,
                            "name": "IndexAccess",
                            "src": "7533:16:6"
                          }
                        ],
                        "id": 3627,
                        "name": "UnaryOperation",
                        "src": "7526:23:6"
                      }
                    ],
                    "id": 3628,
                    "name": "ExpressionStatement",
                    "src": "7526:23:6"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 3577
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "hexvalue": "74727565",
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "subdenomination": null,
                          "token": "bool",
                          "type": "bool",
                          "value": "true"
                        },
                        "id": 3629,
                        "name": "Literal",
                        "src": "7566:4:6"
                      }
                    ],
                    "id": 3630,
                    "name": "Return",
                    "src": "7559:11:6"
                  }
                ],
                "id": 3631,
                "name": "Block",
                "src": "7136:441:6"
              }
            ],
            "id": 3632,
            "name": "FunctionDefinition",
            "src": "6976:601:6"
          },
          {
            "attributes": {
              "constant": false,
              "implemented": true,
              "isConstructor": false,
              "modifiers": [
                null
              ],
              "name": "unregisterSelf",
              "payable": false,
              "scope": 4159,
              "stateMutability": "nonpayable",
              "superFunction": 4216,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 3668,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 3633,
                        "name": "ElementaryTypeName",
                        "src": "7713:7:6"
                      }
                    ],
                    "id": 3634,
                    "name": "VariableDeclaration",
                    "src": "7713:7:6"
                  }
                ],
                "id": 3635,
                "name": "ParameterList",
                "src": "7712:9:6"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 3668,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 3636,
                        "name": "ElementaryTypeName",
                        "src": "7737:4:6"
                      }
                    ],
                    "id": 3637,
                    "name": "VariableDeclaration",
                    "src": "7737:4:6"
                  }
                ],
                "id": 3638,
                "name": "ParameterList",
                "src": "7736:6:6"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "==",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "bool",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "overloadedDeclarations": [
                                    3692
                                  ],
                                  "referencedDeclaration": 3692,
                                  "type": "function (address,address) view returns (bool)",
                                  "value": "isSchemeRegistered"
                                },
                                "id": 3639,
                                "name": "Identifier",
                                "src": "7757:18:6"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "sender",
                                  "referencedDeclaration": null,
                                  "type": "address"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 10867,
                                      "type": "msg",
                                      "value": "msg"
                                    },
                                    "id": 3640,
                                    "name": "Identifier",
                                    "src": "7776:3:6"
                                  }
                                ],
                                "id": 3641,
                                "name": "MemberAccess",
                                "src": "7776:10:6"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "address",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(address)",
                                      "value": "address"
                                    },
                                    "id": 3642,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "7787:7:6"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "30",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 0",
                                      "value": "0"
                                    },
                                    "id": 3643,
                                    "name": "Literal",
                                    "src": "7795:1:6"
                                  }
                                ],
                                "id": 3644,
                                "name": "FunctionCall",
                                "src": "7787:10:6"
                              }
                            ],
                            "id": 3645,
                            "name": "FunctionCall",
                            "src": "7757:41:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "hexvalue": "66616c7365",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "subdenomination": null,
                              "token": "bool",
                              "type": "bool",
                              "value": "false"
                            },
                            "id": 3646,
                            "name": "Literal",
                            "src": "7802:5:6"
                          }
                        ],
                        "id": 3647,
                        "name": "BinaryOperation",
                        "src": "7757:50:6"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "functionReturnParameters": 3638
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "66616c7365",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "bool",
                                  "type": "bool",
                                  "value": "false"
                                },
                                "id": 3648,
                                "name": "Literal",
                                "src": "7830:5:6"
                              }
                            ],
                            "id": 3649,
                            "name": "Return",
                            "src": "7823:12:6"
                          }
                        ],
                        "id": 3650,
                        "name": "Block",
                        "src": "7809:37:6"
                      }
                    ],
                    "id": 3651,
                    "name": "IfStatement",
                    "src": "7753:93:6"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "delete",
                          "prefix": true,
                          "type": "tuple()"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "type": "struct Controller.Scheme storage ref"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3093,
                                  "type": "mapping(address => struct Controller.Scheme storage ref)",
                                  "value": "schemes"
                                },
                                "id": 3652,
                                "name": "Identifier",
                                "src": "7862:7:6"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "sender",
                                  "referencedDeclaration": null,
                                  "type": "address"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 10867,
                                      "type": "msg",
                                      "value": "msg"
                                    },
                                    "id": 3653,
                                    "name": "Identifier",
                                    "src": "7870:3:6"
                                  }
                                ],
                                "id": 3654,
                                "name": "MemberAccess",
                                "src": "7870:10:6"
                              }
                            ],
                            "id": 3655,
                            "name": "IndexAccess",
                            "src": "7862:19:6"
                          }
                        ],
                        "id": 3656,
                        "name": "UnaryOperation",
                        "src": "7855:26:6"
                      }
                    ],
                    "id": 3657,
                    "name": "ExpressionStatement",
                    "src": "7855:26:6"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3136,
                              "type": "function (address,address)",
                              "value": "UnregisterScheme"
                            },
                            "id": 3658,
                            "name": "Identifier",
                            "src": "7891:16:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "sender",
                              "referencedDeclaration": null,
                              "type": "address"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 10867,
                                  "type": "msg",
                                  "value": "msg"
                                },
                                "id": 3659,
                                "name": "Identifier",
                                "src": "7908:3:6"
                              }
                            ],
                            "id": 3660,
                            "name": "MemberAccess",
                            "src": "7908:10:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "sender",
                              "referencedDeclaration": null,
                              "type": "address"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 10867,
                                  "type": "msg",
                                  "value": "msg"
                                },
                                "id": 3661,
                                "name": "Identifier",
                                "src": "7920:3:6"
                              }
                            ],
                            "id": 3662,
                            "name": "MemberAccess",
                            "src": "7920:10:6"
                          }
                        ],
                        "id": 3663,
                        "name": "FunctionCall",
                        "src": "7891:40:6"
                      }
                    ],
                    "id": 3664,
                    "name": "ExpressionStatement",
                    "src": "7891:40:6"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 3638
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "hexvalue": "74727565",
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "subdenomination": null,
                          "token": "bool",
                          "type": "bool",
                          "value": "true"
                        },
                        "id": 3665,
                        "name": "Literal",
                        "src": "7948:4:6"
                      }
                    ],
                    "id": 3666,
                    "name": "Return",
                    "src": "7941:11:6"
                  }
                ],
                "id": 3667,
                "name": "Block",
                "src": "7743:216:6"
              }
            ],
            "id": 3668,
            "name": "FunctionDefinition",
            "src": "7689:270:6"
          },
          {
            "attributes": {
              "constant": true,
              "implemented": true,
              "isConstructor": false,
              "modifiers": [
                null
              ],
              "name": "isSchemeRegistered",
              "payable": false,
              "scope": 4159,
              "stateMutability": "view",
              "superFunction": 4225,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_scheme",
                      "scope": 3692,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 3669,
                        "name": "ElementaryTypeName",
                        "src": "7993:7:6"
                      }
                    ],
                    "id": 3670,
                    "name": "VariableDeclaration",
                    "src": "7993:15:6"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 3692,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 3671,
                        "name": "ElementaryTypeName",
                        "src": "8009:7:6"
                      }
                    ],
                    "id": 3672,
                    "name": "VariableDeclaration",
                    "src": "8009:7:6"
                  }
                ],
                "id": 3673,
                "name": "ParameterList",
                "src": "7992:25:6"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 3692,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 3674,
                        "name": "ElementaryTypeName",
                        "src": "8042:4:6"
                      }
                    ],
                    "id": 3675,
                    "name": "VariableDeclaration",
                    "src": "8042:4:6"
                  }
                ],
                "id": 3676,
                "name": "ParameterList",
                "src": "8041:6:6"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 3676
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_bytes4",
                                "typeString": "bytes4"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "!=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_bytes4",
                                    "typeString": "bytes4"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "&",
                                  "type": "bytes4"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "permissions",
                                      "referencedDeclaration": 3078,
                                      "type": "bytes4"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "type": "struct Controller.Scheme storage ref"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 3093,
                                              "type": "mapping(address => struct Controller.Scheme storage ref)",
                                              "value": "schemes"
                                            },
                                            "id": 3677,
                                            "name": "Identifier",
                                            "src": "8066:7:6"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 3670,
                                              "type": "address",
                                              "value": "_scheme"
                                            },
                                            "id": 3678,
                                            "name": "Identifier",
                                            "src": "8074:7:6"
                                          }
                                        ],
                                        "id": 3679,
                                        "name": "IndexAccess",
                                        "src": "8066:16:6"
                                      }
                                    ],
                                    "id": 3680,
                                    "name": "MemberAccess",
                                    "src": "8066:28:6"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "type": "bytes4",
                                      "type_conversion": true
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_rational_1_by_1",
                                              "typeString": "int_const 1"
                                            }
                                          ],
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "type": "type(bytes4)",
                                          "value": "bytes4"
                                        },
                                        "id": 3681,
                                        "name": "ElementaryTypeNameExpression",
                                        "src": "8095:6:6"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "hexvalue": "31",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "subdenomination": null,
                                          "token": "number",
                                          "type": "int_const 1",
                                          "value": "1"
                                        },
                                        "id": 3682,
                                        "name": "Literal",
                                        "src": "8102:1:6"
                                      }
                                    ],
                                    "id": 3683,
                                    "name": "FunctionCall",
                                    "src": "8095:9:6"
                                  }
                                ],
                                "id": 3684,
                                "name": "BinaryOperation",
                                "src": "8066:38:6"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "bytes4",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(bytes4)",
                                      "value": "bytes4"
                                    },
                                    "id": 3685,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "8108:6:6"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "30",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 0",
                                      "value": "0"
                                    },
                                    "id": 3686,
                                    "name": "Literal",
                                    "src": "8115:1:6"
                                  }
                                ],
                                "id": 3687,
                                "name": "FunctionCall",
                                "src": "8108:9:6"
                              }
                            ],
                            "id": 3688,
                            "name": "BinaryOperation",
                            "src": "8066:51:6"
                          }
                        ],
                        "id": 3689,
                        "name": "TupleExpression",
                        "src": "8065:53:6"
                      }
                    ],
                    "id": 3690,
                    "name": "Return",
                    "src": "8058:60:6"
                  }
                ],
                "id": 3691,
                "name": "Block",
                "src": "8048:77:6"
              }
            ],
            "id": 3692,
            "name": "FunctionDefinition",
            "src": "7965:160:6"
          },
          {
            "attributes": {
              "constant": true,
              "implemented": true,
              "isConstructor": false,
              "modifiers": [
                null
              ],
              "name": "getSchemeParameters",
              "payable": false,
              "scope": 4159,
              "stateMutability": "view",
              "superFunction": 4234,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_scheme",
                      "scope": 3707,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 3693,
                        "name": "ElementaryTypeName",
                        "src": "8160:7:6"
                      }
                    ],
                    "id": 3694,
                    "name": "VariableDeclaration",
                    "src": "8160:15:6"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 3707,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 3695,
                        "name": "ElementaryTypeName",
                        "src": "8176:7:6"
                      }
                    ],
                    "id": 3696,
                    "name": "VariableDeclaration",
                    "src": "8176:7:6"
                  }
                ],
                "id": 3697,
                "name": "ParameterList",
                "src": "8159:25:6"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 3707,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 3698,
                        "name": "ElementaryTypeName",
                        "src": "8209:7:6"
                      }
                    ],
                    "id": 3699,
                    "name": "VariableDeclaration",
                    "src": "8209:7:6"
                  }
                ],
                "id": 3700,
                "name": "ParameterList",
                "src": "8208:9:6"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 3700
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "member_name": "paramsHash",
                          "referencedDeclaration": 3076,
                          "type": "bytes32"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "type": "struct Controller.Scheme storage ref"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3093,
                                  "type": "mapping(address => struct Controller.Scheme storage ref)",
                                  "value": "schemes"
                                },
                                "id": 3701,
                                "name": "Identifier",
                                "src": "8235:7:6"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3694,
                                  "type": "address",
                                  "value": "_scheme"
                                },
                                "id": 3702,
                                "name": "Identifier",
                                "src": "8243:7:6"
                              }
                            ],
                            "id": 3703,
                            "name": "IndexAccess",
                            "src": "8235:16:6"
                          }
                        ],
                        "id": 3704,
                        "name": "MemberAccess",
                        "src": "8235:27:6"
                      }
                    ],
                    "id": 3705,
                    "name": "Return",
                    "src": "8228:34:6"
                  }
                ],
                "id": 3706,
                "name": "Block",
                "src": "8218:51:6"
              }
            ],
            "id": 3707,
            "name": "FunctionDefinition",
            "src": "8131:138:6"
          },
          {
            "attributes": {
              "constant": true,
              "implemented": true,
              "isConstructor": false,
              "modifiers": [
                null
              ],
              "name": "getSchemePermissions",
              "payable": false,
              "scope": 4159,
              "stateMutability": "view",
              "superFunction": 4243,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_scheme",
                      "scope": 3722,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 3708,
                        "name": "ElementaryTypeName",
                        "src": "8305:7:6"
                      }
                    ],
                    "id": 3709,
                    "name": "VariableDeclaration",
                    "src": "8305:15:6"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 3722,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 3710,
                        "name": "ElementaryTypeName",
                        "src": "8321:7:6"
                      }
                    ],
                    "id": 3711,
                    "name": "VariableDeclaration",
                    "src": "8321:7:6"
                  }
                ],
                "id": 3712,
                "name": "ParameterList",
                "src": "8304:25:6"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 3722,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes4",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes4",
                          "type": "bytes4"
                        },
                        "id": 3713,
                        "name": "ElementaryTypeName",
                        "src": "8354:6:6"
                      }
                    ],
                    "id": 3714,
                    "name": "VariableDeclaration",
                    "src": "8354:6:6"
                  }
                ],
                "id": 3715,
                "name": "ParameterList",
                "src": "8353:8:6"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 3715
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "member_name": "permissions",
                          "referencedDeclaration": 3078,
                          "type": "bytes4"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "type": "struct Controller.Scheme storage ref"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3093,
                                  "type": "mapping(address => struct Controller.Scheme storage ref)",
                                  "value": "schemes"
                                },
                                "id": 3716,
                                "name": "Identifier",
                                "src": "8379:7:6"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3709,
                                  "type": "address",
                                  "value": "_scheme"
                                },
                                "id": 3717,
                                "name": "Identifier",
                                "src": "8387:7:6"
                              }
                            ],
                            "id": 3718,
                            "name": "IndexAccess",
                            "src": "8379:16:6"
                          }
                        ],
                        "id": 3719,
                        "name": "MemberAccess",
                        "src": "8379:28:6"
                      }
                    ],
                    "id": 3720,
                    "name": "Return",
                    "src": "8372:35:6"
                  }
                ],
                "id": 3721,
                "name": "Block",
                "src": "8362:52:6"
              }
            ],
            "id": 3722,
            "name": "FunctionDefinition",
            "src": "8275:139:6"
          },
          {
            "attributes": {
              "constant": true,
              "implemented": true,
              "isConstructor": false,
              "modifiers": [
                null
              ],
              "name": "globalConstraintsCount",
              "payable": false,
              "scope": 4159,
              "stateMutability": "view",
              "superFunction": 4250,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 3733,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 3723,
                        "name": "ElementaryTypeName",
                        "src": "8477:7:6"
                      }
                    ],
                    "id": 3724,
                    "name": "VariableDeclaration",
                    "src": "8477:7:6"
                  }
                ],
                "id": 3725,
                "name": "ParameterList",
                "src": "8476:9:6"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 3733,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 3726,
                        "name": "ElementaryTypeName",
                        "src": "8510:4:6"
                      }
                    ],
                    "id": 3727,
                    "name": "VariableDeclaration",
                    "src": "8510:4:6"
                  }
                ],
                "id": 3728,
                "name": "ParameterList",
                "src": "8509:6:6"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 3728
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "member_name": "length",
                          "referencedDeclaration": null,
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3104,
                              "type": "struct Controller.GlobalConstraint storage ref[] storage ref",
                              "value": "globalConstraints"
                            },
                            "id": 3729,
                            "name": "Identifier",
                            "src": "8533:17:6"
                          }
                        ],
                        "id": 3730,
                        "name": "MemberAccess",
                        "src": "8533:24:6"
                      }
                    ],
                    "id": 3731,
                    "name": "Return",
                    "src": "8526:31:6"
                  }
                ],
                "id": 3732,
                "name": "Block",
                "src": "8516:48:6"
              }
            ],
            "id": 3733,
            "name": "FunctionDefinition",
            "src": "8445:119:6"
          },
          {
            "attributes": {
              "constant": true,
              "implemented": true,
              "isConstructor": false,
              "modifiers": [
                null
              ],
              "name": "isGlobalConstraintRegistered",
              "payable": false,
              "scope": 4159,
              "stateMutability": "view",
              "superFunction": 4259,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_globalConstraint",
                      "scope": 3748,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 3734,
                        "name": "ElementaryTypeName",
                        "src": "8608:7:6"
                      }
                    ],
                    "id": 3735,
                    "name": "VariableDeclaration",
                    "src": "8608:25:6"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 3748,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 3736,
                        "name": "ElementaryTypeName",
                        "src": "8634:7:6"
                      }
                    ],
                    "id": 3737,
                    "name": "VariableDeclaration",
                    "src": "8634:7:6"
                  }
                ],
                "id": 3738,
                "name": "ParameterList",
                "src": "8607:35:6"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 3748,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 3739,
                        "name": "ElementaryTypeName",
                        "src": "8667:4:6"
                      }
                    ],
                    "id": 3740,
                    "name": "VariableDeclaration",
                    "src": "8667:4:6"
                  }
                ],
                "id": 3741,
                "name": "ParameterList",
                "src": "8666:6:6"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 3741
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "member_name": "register",
                          "referencedDeclaration": 3086,
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "type": "struct Controller.GlobalConstraintRegister storage ref"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3108,
                                  "type": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)",
                                  "value": "globalConstraintsRegister"
                                },
                                "id": 3742,
                                "name": "Identifier",
                                "src": "8690:25:6"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3735,
                                  "type": "address",
                                  "value": "_globalConstraint"
                                },
                                "id": 3743,
                                "name": "Identifier",
                                "src": "8716:17:6"
                              }
                            ],
                            "id": 3744,
                            "name": "IndexAccess",
                            "src": "8690:44:6"
                          }
                        ],
                        "id": 3745,
                        "name": "MemberAccess",
                        "src": "8690:53:6"
                      }
                    ],
                    "id": 3746,
                    "name": "Return",
                    "src": "8683:60:6"
                  }
                ],
                "id": 3747,
                "name": "Block",
                "src": "8673:77:6"
              }
            ],
            "id": 3748,
            "name": "FunctionDefinition",
            "src": "8570:180:6"
          },
          {
            "attributes": {
              "constant": false,
              "implemented": true,
              "isConstructor": false,
              "name": "addGlobalConstraint",
              "payable": false,
              "scope": 4159,
              "stateMutability": "nonpayable",
              "superFunction": 4270,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_globalConstraint",
                      "scope": 3808,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 3749,
                        "name": "ElementaryTypeName",
                        "src": "9028:7:6"
                      }
                    ],
                    "id": 3750,
                    "name": "VariableDeclaration",
                    "src": "9028:25:6"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_params",
                      "scope": 3808,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes32",
                          "type": "bytes32"
                        },
                        "id": 3751,
                        "name": "ElementaryTypeName",
                        "src": "9055:7:6"
                      }
                    ],
                    "id": 3752,
                    "name": "VariableDeclaration",
                    "src": "9055:15:6"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 3808,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 3753,
                        "name": "ElementaryTypeName",
                        "src": "9071:7:6"
                      }
                    ],
                    "id": 3754,
                    "name": "VariableDeclaration",
                    "src": "9071:7:6"
                  }
                ],
                "id": 3755,
                "name": "ParameterList",
                "src": "9027:52:6"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 3808,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 3758,
                        "name": "ElementaryTypeName",
                        "src": "9127:4:6"
                      }
                    ],
                    "id": 3759,
                    "name": "VariableDeclaration",
                    "src": "9127:4:6"
                  }
                ],
                "id": 3760,
                "name": "ParameterList",
                "src": "9126:6:6"
              },
              {
                "attributes": {
                  "arguments": [
                    null
                  ]
                },
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 3314,
                      "type": "modifier ()",
                      "value": "onlyGlobalConstraintsScheme"
                    },
                    "id": 3756,
                    "name": "Identifier",
                    "src": "9091:27:6"
                  }
                ],
                "id": 3757,
                "name": "ModifierInvocation",
                "src": "9091:27:6"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "!",
                          "prefix": true,
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "register",
                              "referencedDeclaration": 3086,
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "struct Controller.GlobalConstraintRegister storage ref"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3108,
                                      "type": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)",
                                      "value": "globalConstraintsRegister"
                                    },
                                    "id": 3761,
                                    "name": "Identifier",
                                    "src": "9152:25:6"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3750,
                                      "type": "address",
                                      "value": "_globalConstraint"
                                    },
                                    "id": 3762,
                                    "name": "Identifier",
                                    "src": "9178:17:6"
                                  }
                                ],
                                "id": 3763,
                                "name": "IndexAccess",
                                "src": "9152:44:6"
                              }
                            ],
                            "id": 3764,
                            "name": "MemberAccess",
                            "src": "9152:53:6"
                          }
                        ],
                        "id": 3765,
                        "name": "UnaryOperation",
                        "src": "9151:54:6"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "uint256",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_struct$_GlobalConstraint_$3084_memory",
                                          "typeString": "struct Controller.GlobalConstraint memory"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "push",
                                      "referencedDeclaration": null,
                                      "type": "function (struct Controller.GlobalConstraint storage ref) returns (uint256)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 3104,
                                          "type": "struct Controller.GlobalConstraint storage ref[] storage ref",
                                          "value": "globalConstraints"
                                        },
                                        "id": 3766,
                                        "name": "Identifier",
                                        "src": "9221:17:6"
                                      }
                                    ],
                                    "id": 3768,
                                    "name": "MemberAccess",
                                    "src": "9221:22:6"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": true,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "type": "struct Controller.GlobalConstraint memory",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_address",
                                              "typeString": "address"
                                            },
                                            {
                                              "typeIdentifier": "t_bytes32",
                                              "typeString": "bytes32"
                                            }
                                          ],
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 3084,
                                          "type": "type(struct Controller.GlobalConstraint storage pointer)",
                                          "value": "GlobalConstraint"
                                        },
                                        "id": 3769,
                                        "name": "Identifier",
                                        "src": "9244:16:6"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 3750,
                                          "type": "address",
                                          "value": "_globalConstraint"
                                        },
                                        "id": 3770,
                                        "name": "Identifier",
                                        "src": "9261:17:6"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 3752,
                                          "type": "bytes32",
                                          "value": "_params"
                                        },
                                        "id": 3771,
                                        "name": "Identifier",
                                        "src": "9279:7:6"
                                      }
                                    ],
                                    "id": 3772,
                                    "name": "FunctionCall",
                                    "src": "9244:43:6"
                                  }
                                ],
                                "id": 3773,
                                "name": "FunctionCall",
                                "src": "9221:67:6"
                              }
                            ],
                            "id": 3774,
                            "name": "ExpressionStatement",
                            "src": "9221:67:6"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "=",
                                  "type": "struct Controller.GlobalConstraintRegister storage ref"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": true,
                                      "type": "struct Controller.GlobalConstraintRegister storage ref"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 3108,
                                          "type": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)",
                                          "value": "globalConstraintsRegister"
                                        },
                                        "id": 3775,
                                        "name": "Identifier",
                                        "src": "9302:25:6"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 3750,
                                          "type": "address",
                                          "value": "_globalConstraint"
                                        },
                                        "id": 3776,
                                        "name": "Identifier",
                                        "src": "9328:17:6"
                                      }
                                    ],
                                    "id": 3777,
                                    "name": "IndexAccess",
                                    "src": "9302:44:6"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": true,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "type": "struct Controller.GlobalConstraintRegister memory",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_bool",
                                              "typeString": "bool"
                                            },
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 3089,
                                          "type": "type(struct Controller.GlobalConstraintRegister storage pointer)",
                                          "value": "GlobalConstraintRegister"
                                        },
                                        "id": 3778,
                                        "name": "Identifier",
                                        "src": "9349:24:6"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "hexvalue": "74727565",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "subdenomination": null,
                                          "token": "bool",
                                          "type": "bool",
                                          "value": "true"
                                        },
                                        "id": 3779,
                                        "name": "Literal",
                                        "src": "9374:4:6"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "-",
                                          "type": "uint256"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "member_name": "length",
                                              "referencedDeclaration": null,
                                              "type": "uint256"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 3104,
                                                  "type": "struct Controller.GlobalConstraint storage ref[] storage ref",
                                                  "value": "globalConstraints"
                                                },
                                                "id": 3780,
                                                "name": "Identifier",
                                                "src": "9379:17:6"
                                              }
                                            ],
                                            "id": 3781,
                                            "name": "MemberAccess",
                                            "src": "9379:24:6"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "hexvalue": "31",
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "lValueRequested": false,
                                              "subdenomination": null,
                                              "token": "number",
                                              "type": "int_const 1",
                                              "value": "1"
                                            },
                                            "id": 3782,
                                            "name": "Literal",
                                            "src": "9404:1:6"
                                          }
                                        ],
                                        "id": 3783,
                                        "name": "BinaryOperation",
                                        "src": "9379:26:6"
                                      }
                                    ],
                                    "id": 3784,
                                    "name": "FunctionCall",
                                    "src": "9349:57:6"
                                  }
                                ],
                                "id": 3785,
                                "name": "Assignment",
                                "src": "9302:104:6"
                              }
                            ],
                            "id": 3786,
                            "name": "ExpressionStatement",
                            "src": "9302:104:6"
                          }
                        ],
                        "id": 3787,
                        "name": "Block",
                        "src": "9207:210:6"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "=",
                                  "type": "bytes32"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": true,
                                      "member_name": "params",
                                      "referencedDeclaration": 3083,
                                      "type": "bytes32"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "type": "struct Controller.GlobalConstraint storage ref"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 3104,
                                              "type": "struct Controller.GlobalConstraint storage ref[] storage ref",
                                              "value": "globalConstraints"
                                            },
                                            "id": 3788,
                                            "name": "Identifier",
                                            "src": "9436:17:6"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "member_name": "index",
                                              "referencedDeclaration": 3088,
                                              "type": "uint256"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "isConstant": false,
                                                  "isLValue": true,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "type": "struct Controller.GlobalConstraintRegister storage ref"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 3108,
                                                      "type": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)",
                                                      "value": "globalConstraintsRegister"
                                                    },
                                                    "id": 3789,
                                                    "name": "Identifier",
                                                    "src": "9454:25:6"
                                                  },
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 3750,
                                                      "type": "address",
                                                      "value": "_globalConstraint"
                                                    },
                                                    "id": 3790,
                                                    "name": "Identifier",
                                                    "src": "9480:17:6"
                                                  }
                                                ],
                                                "id": 3791,
                                                "name": "IndexAccess",
                                                "src": "9454:44:6"
                                              }
                                            ],
                                            "id": 3792,
                                            "name": "MemberAccess",
                                            "src": "9454:50:6"
                                          }
                                        ],
                                        "id": 3793,
                                        "name": "IndexAccess",
                                        "src": "9436:69:6"
                                      }
                                    ],
                                    "id": 3794,
                                    "name": "MemberAccess",
                                    "src": "9436:76:6"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3752,
                                      "type": "bytes32",
                                      "value": "_params"
                                    },
                                    "id": 3795,
                                    "name": "Identifier",
                                    "src": "9515:7:6"
                                  }
                                ],
                                "id": 3796,
                                "name": "Assignment",
                                "src": "9436:86:6"
                              }
                            ],
                            "id": 3797,
                            "name": "ExpressionStatement",
                            "src": "9436:86:6"
                          }
                        ],
                        "id": 3798,
                        "name": "Block",
                        "src": "9422:111:6"
                      }
                    ],
                    "id": 3799,
                    "name": "IfStatement",
                    "src": "9147:386:6"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3199,
                              "type": "function (address,bytes32)",
                              "value": "AddGlobalConstraint"
                            },
                            "id": 3800,
                            "name": "Identifier",
                            "src": "9542:19:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3750,
                              "type": "address",
                              "value": "_globalConstraint"
                            },
                            "id": 3801,
                            "name": "Identifier",
                            "src": "9562:17:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3752,
                              "type": "bytes32",
                              "value": "_params"
                            },
                            "id": 3802,
                            "name": "Identifier",
                            "src": "9581:7:6"
                          }
                        ],
                        "id": 3803,
                        "name": "FunctionCall",
                        "src": "9542:47:6"
                      }
                    ],
                    "id": 3804,
                    "name": "ExpressionStatement",
                    "src": "9542:47:6"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 3760
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "hexvalue": "74727565",
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "subdenomination": null,
                          "token": "bool",
                          "type": "bool",
                          "value": "true"
                        },
                        "id": 3805,
                        "name": "Literal",
                        "src": "9606:4:6"
                      }
                    ],
                    "id": 3806,
                    "name": "Return",
                    "src": "9599:11:6"
                  }
                ],
                "id": 3807,
                "name": "Block",
                "src": "9137:480:6"
              }
            ],
            "id": 3808,
            "name": "FunctionDefinition",
            "src": "8999:618:6"
          },
          {
            "attributes": {
              "constant": false,
              "implemented": true,
              "isConstructor": false,
              "name": "removeGlobalConstraint",
              "payable": false,
              "scope": 4159,
              "stateMutability": "nonpayable",
              "superFunction": 4279,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_globalConstraint",
                      "scope": 3884,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 3809,
                        "name": "ElementaryTypeName",
                        "src": "9839:7:6"
                      }
                    ],
                    "id": 3810,
                    "name": "VariableDeclaration",
                    "src": "9839:25:6"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 3884,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 3811,
                        "name": "ElementaryTypeName",
                        "src": "9865:7:6"
                      }
                    ],
                    "id": 3812,
                    "name": "VariableDeclaration",
                    "src": "9865:7:6"
                  }
                ],
                "id": 3813,
                "name": "ParameterList",
                "src": "9838:35:6"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 3884,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 3816,
                        "name": "ElementaryTypeName",
                        "src": "9921:4:6"
                      }
                    ],
                    "id": 3817,
                    "name": "VariableDeclaration",
                    "src": "9921:4:6"
                  }
                ],
                "id": 3818,
                "name": "ParameterList",
                "src": "9920:6:6"
              },
              {
                "attributes": {
                  "arguments": [
                    null
                  ]
                },
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 3314,
                      "type": "modifier ()",
                      "value": "onlyGlobalConstraintsScheme"
                    },
                    "id": 3814,
                    "name": "Identifier",
                    "src": "9885:27:6"
                  }
                ],
                "id": 3815,
                "name": "ModifierInvocation",
                "src": "9885:27:6"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        3820
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "name": "globalConstraintRegister",
                          "scope": 3884,
                          "stateVariable": false,
                          "storageLocation": "memory",
                          "type": "struct Controller.GlobalConstraintRegister memory",
                          "value": null,
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "contractScope": null,
                              "name": "GlobalConstraintRegister",
                              "referencedDeclaration": 3089,
                              "type": "struct Controller.GlobalConstraintRegister storage pointer"
                            },
                            "id": 3819,
                            "name": "UserDefinedTypeName",
                            "src": "9941:24:6"
                          }
                        ],
                        "id": 3820,
                        "name": "VariableDeclaration",
                        "src": "9941:56:6"
                      },
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "struct Controller.GlobalConstraintRegister storage ref"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3108,
                              "type": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)",
                              "value": "globalConstraintsRegister"
                            },
                            "id": 3821,
                            "name": "Identifier",
                            "src": "10000:25:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3810,
                              "type": "address",
                              "value": "_globalConstraint"
                            },
                            "id": 3822,
                            "name": "Identifier",
                            "src": "10026:17:6"
                          }
                        ],
                        "id": 3823,
                        "name": "IndexAccess",
                        "src": "10000:44:6"
                      }
                    ],
                    "id": 3824,
                    "name": "VariableDeclarationStatement",
                    "src": "9941:103:6"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "member_name": "register",
                          "referencedDeclaration": 3086,
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3820,
                              "type": "struct Controller.GlobalConstraintRegister memory",
                              "value": "globalConstraintRegister"
                            },
                            "id": 3825,
                            "name": "Identifier",
                            "src": "10059:24:6"
                          }
                        ],
                        "id": 3826,
                        "name": "MemberAccess",
                        "src": "10059:33:6"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "falseBody": null
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "<",
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "index",
                                      "referencedDeclaration": 3088,
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 3820,
                                          "type": "struct Controller.GlobalConstraintRegister memory",
                                          "value": "globalConstraintRegister"
                                        },
                                        "id": 3827,
                                        "name": "Identifier",
                                        "src": "10112:24:6"
                                      }
                                    ],
                                    "id": 3828,
                                    "name": "MemberAccess",
                                    "src": "10112:30:6"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "-",
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "member_name": "length",
                                          "referencedDeclaration": null,
                                          "type": "uint256"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 3104,
                                              "type": "struct Controller.GlobalConstraint storage ref[] storage ref",
                                              "value": "globalConstraints"
                                            },
                                            "id": 3829,
                                            "name": "Identifier",
                                            "src": "10145:17:6"
                                          }
                                        ],
                                        "id": 3830,
                                        "name": "MemberAccess",
                                        "src": "10145:24:6"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "hexvalue": "31",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "subdenomination": null,
                                          "token": "number",
                                          "type": "int_const 1",
                                          "value": "1"
                                        },
                                        "id": 3831,
                                        "name": "Literal",
                                        "src": "10170:1:6"
                                      }
                                    ],
                                    "id": 3832,
                                    "name": "BinaryOperation",
                                    "src": "10145:26:6"
                                  }
                                ],
                                "id": 3833,
                                "name": "BinaryOperation",
                                "src": "10112:59:6"
                              },
                              {
                                "children": [
                                  {
                                    "attributes": {
                                      "assignments": [
                                        3835
                                      ]
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "constant": false,
                                          "name": "globalConstraint",
                                          "scope": 3884,
                                          "stateVariable": false,
                                          "storageLocation": "memory",
                                          "type": "struct Controller.GlobalConstraint memory",
                                          "value": null,
                                          "visibility": "internal"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "contractScope": null,
                                              "name": "GlobalConstraint",
                                              "referencedDeclaration": 3084,
                                              "type": "struct Controller.GlobalConstraint storage pointer"
                                            },
                                            "id": 3834,
                                            "name": "UserDefinedTypeName",
                                            "src": "10191:16:6"
                                          }
                                        ],
                                        "id": 3835,
                                        "name": "VariableDeclaration",
                                        "src": "10191:40:6"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "type": "struct Controller.GlobalConstraint storage ref"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 3104,
                                              "type": "struct Controller.GlobalConstraint storage ref[] storage ref",
                                              "value": "globalConstraints"
                                            },
                                            "id": 3836,
                                            "name": "Identifier",
                                            "src": "10234:17:6"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              },
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "operator": "-",
                                              "type": "uint256"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "isConstant": false,
                                                  "isLValue": true,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "member_name": "length",
                                                  "referencedDeclaration": null,
                                                  "type": "uint256"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 3104,
                                                      "type": "struct Controller.GlobalConstraint storage ref[] storage ref",
                                                      "value": "globalConstraints"
                                                    },
                                                    "id": 3837,
                                                    "name": "Identifier",
                                                    "src": "10252:17:6"
                                                  }
                                                ],
                                                "id": 3838,
                                                "name": "MemberAccess",
                                                "src": "10252:24:6"
                                              },
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "hexvalue": "31",
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "lValueRequested": false,
                                                  "subdenomination": null,
                                                  "token": "number",
                                                  "type": "int_const 1",
                                                  "value": "1"
                                                },
                                                "id": 3839,
                                                "name": "Literal",
                                                "src": "10277:1:6"
                                              }
                                            ],
                                            "id": 3840,
                                            "name": "BinaryOperation",
                                            "src": "10252:26:6"
                                          }
                                        ],
                                        "id": 3841,
                                        "name": "IndexAccess",
                                        "src": "10234:45:6"
                                      }
                                    ],
                                    "id": 3842,
                                    "name": "VariableDeclarationStatement",
                                    "src": "10191:88:6"
                                  },
                                  {
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "=",
                                          "type": "struct Controller.GlobalConstraint storage ref"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": true,
                                              "type": "struct Controller.GlobalConstraint storage ref"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 3104,
                                                  "type": "struct Controller.GlobalConstraint storage ref[] storage ref",
                                                  "value": "globalConstraints"
                                                },
                                                "id": 3843,
                                                "name": "Identifier",
                                                "src": "10297:17:6"
                                              },
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "isConstant": false,
                                                  "isLValue": true,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "member_name": "index",
                                                  "referencedDeclaration": 3088,
                                                  "type": "uint256"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 3820,
                                                      "type": "struct Controller.GlobalConstraintRegister memory",
                                                      "value": "globalConstraintRegister"
                                                    },
                                                    "id": 3844,
                                                    "name": "Identifier",
                                                    "src": "10315:24:6"
                                                  }
                                                ],
                                                "id": 3845,
                                                "name": "MemberAccess",
                                                "src": "10315:30:6"
                                              }
                                            ],
                                            "id": 3846,
                                            "name": "IndexAccess",
                                            "src": "10297:49:6"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 3835,
                                              "type": "struct Controller.GlobalConstraint memory",
                                              "value": "globalConstraint"
                                            },
                                            "id": 3847,
                                            "name": "Identifier",
                                            "src": "10349:16:6"
                                          }
                                        ],
                                        "id": 3848,
                                        "name": "Assignment",
                                        "src": "10297:68:6"
                                      }
                                    ],
                                    "id": 3849,
                                    "name": "ExpressionStatement",
                                    "src": "10297:68:6"
                                  },
                                  {
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "operator": "=",
                                          "type": "uint256"
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": true,
                                              "member_name": "index",
                                              "referencedDeclaration": 3088,
                                              "type": "uint256"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "isConstant": false,
                                                  "isLValue": true,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "type": "struct Controller.GlobalConstraintRegister storage ref"
                                                },
                                                "children": [
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "overloadedDeclarations": [
                                                        null
                                                      ],
                                                      "referencedDeclaration": 3108,
                                                      "type": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)",
                                                      "value": "globalConstraintsRegister"
                                                    },
                                                    "id": 3850,
                                                    "name": "Identifier",
                                                    "src": "10383:25:6"
                                                  },
                                                  {
                                                    "attributes": {
                                                      "argumentTypes": null,
                                                      "isConstant": false,
                                                      "isLValue": true,
                                                      "isPure": false,
                                                      "lValueRequested": false,
                                                      "member_name": "gcAddress",
                                                      "referencedDeclaration": 3081,
                                                      "type": "address"
                                                    },
                                                    "children": [
                                                      {
                                                        "attributes": {
                                                          "argumentTypes": null,
                                                          "overloadedDeclarations": [
                                                            null
                                                          ],
                                                          "referencedDeclaration": 3835,
                                                          "type": "struct Controller.GlobalConstraint memory",
                                                          "value": "globalConstraint"
                                                        },
                                                        "id": 3851,
                                                        "name": "Identifier",
                                                        "src": "10409:16:6"
                                                      }
                                                    ],
                                                    "id": 3852,
                                                    "name": "MemberAccess",
                                                    "src": "10409:26:6"
                                                  }
                                                ],
                                                "id": 3853,
                                                "name": "IndexAccess",
                                                "src": "10383:53:6"
                                              }
                                            ],
                                            "id": 3854,
                                            "name": "MemberAccess",
                                            "src": "10383:59:6"
                                          },
                                          {
                                            "attributes": {
                                              "argumentTypes": null,
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "member_name": "index",
                                              "referencedDeclaration": 3088,
                                              "type": "uint256"
                                            },
                                            "children": [
                                              {
                                                "attributes": {
                                                  "argumentTypes": null,
                                                  "overloadedDeclarations": [
                                                    null
                                                  ],
                                                  "referencedDeclaration": 3820,
                                                  "type": "struct Controller.GlobalConstraintRegister memory",
                                                  "value": "globalConstraintRegister"
                                                },
                                                "id": 3855,
                                                "name": "Identifier",
                                                "src": "10445:24:6"
                                              }
                                            ],
                                            "id": 3856,
                                            "name": "MemberAccess",
                                            "src": "10445:30:6"
                                          }
                                        ],
                                        "id": 3857,
                                        "name": "Assignment",
                                        "src": "10383:92:6"
                                      }
                                    ],
                                    "id": 3858,
                                    "name": "ExpressionStatement",
                                    "src": "10383:92:6"
                                  }
                                ],
                                "id": 3859,
                                "name": "Block",
                                "src": "10173:317:6"
                              }
                            ],
                            "id": 3860,
                            "name": "IfStatement",
                            "src": "10108:382:6"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "--",
                                  "prefix": false,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": true,
                                      "member_name": "length",
                                      "referencedDeclaration": null,
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 3104,
                                          "type": "struct Controller.GlobalConstraint storage ref[] storage ref",
                                          "value": "globalConstraints"
                                        },
                                        "id": 3861,
                                        "name": "Identifier",
                                        "src": "10503:17:6"
                                      }
                                    ],
                                    "id": 3863,
                                    "name": "MemberAccess",
                                    "src": "10503:24:6"
                                  }
                                ],
                                "id": 3864,
                                "name": "UnaryOperation",
                                "src": "10503:26:6"
                              }
                            ],
                            "id": 3865,
                            "name": "ExpressionStatement",
                            "src": "10503:26:6"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "delete",
                                  "prefix": true,
                                  "type": "tuple()"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": true,
                                      "type": "struct Controller.GlobalConstraintRegister storage ref"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 3108,
                                          "type": "mapping(address => struct Controller.GlobalConstraintRegister storage ref)",
                                          "value": "globalConstraintsRegister"
                                        },
                                        "id": 3866,
                                        "name": "Identifier",
                                        "src": "10550:25:6"
                                      },
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 3810,
                                          "type": "address",
                                          "value": "_globalConstraint"
                                        },
                                        "id": 3867,
                                        "name": "Identifier",
                                        "src": "10576:17:6"
                                      }
                                    ],
                                    "id": 3868,
                                    "name": "IndexAccess",
                                    "src": "10550:44:6"
                                  }
                                ],
                                "id": 3869,
                                "name": "UnaryOperation",
                                "src": "10543:51:6"
                              }
                            ],
                            "id": 3870,
                            "name": "ExpressionStatement",
                            "src": "10543:51:6"
                          },
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "tuple()",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        },
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3205,
                                      "type": "function (address,uint256)",
                                      "value": "RemoveGlobalConstraint"
                                    },
                                    "id": 3871,
                                    "name": "Identifier",
                                    "src": "10608:22:6"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3810,
                                      "type": "address",
                                      "value": "_globalConstraint"
                                    },
                                    "id": 3872,
                                    "name": "Identifier",
                                    "src": "10631:17:6"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "index",
                                      "referencedDeclaration": 3088,
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 3820,
                                          "type": "struct Controller.GlobalConstraintRegister memory",
                                          "value": "globalConstraintRegister"
                                        },
                                        "id": 3873,
                                        "name": "Identifier",
                                        "src": "10649:24:6"
                                      }
                                    ],
                                    "id": 3874,
                                    "name": "MemberAccess",
                                    "src": "10649:30:6"
                                  }
                                ],
                                "id": 3875,
                                "name": "FunctionCall",
                                "src": "10608:72:6"
                              }
                            ],
                            "id": 3876,
                            "name": "ExpressionStatement",
                            "src": "10608:72:6"
                          },
                          {
                            "attributes": {
                              "functionReturnParameters": 3818
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "hexvalue": "74727565",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "subdenomination": null,
                                  "token": "bool",
                                  "type": "bool",
                                  "value": "true"
                                },
                                "id": 3877,
                                "name": "Literal",
                                "src": "10701:4:6"
                              }
                            ],
                            "id": 3878,
                            "name": "Return",
                            "src": "10694:11:6"
                          }
                        ],
                        "id": 3879,
                        "name": "Block",
                        "src": "10094:622:6"
                      }
                    ],
                    "id": 3880,
                    "name": "IfStatement",
                    "src": "10055:661:6"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 3818
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "hexvalue": "66616c7365",
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "subdenomination": null,
                          "token": "bool",
                          "type": "bool",
                          "value": "false"
                        },
                        "id": 3881,
                        "name": "Literal",
                        "src": "10732:5:6"
                      }
                    ],
                    "id": 3882,
                    "name": "Return",
                    "src": "10725:12:6"
                  }
                ],
                "id": 3883,
                "name": "Block",
                "src": "9931:813:6"
              }
            ],
            "id": 3884,
            "name": "FunctionDefinition",
            "src": "9806:938:6"
          },
          {
            "attributes": {
              "constant": false,
              "implemented": true,
              "isConstructor": false,
              "name": "upgradeController",
              "payable": false,
              "scope": 4159,
              "stateMutability": "nonpayable",
              "superFunction": 4288,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_newController",
                      "scope": 3959,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 3885,
                        "name": "ElementaryTypeName",
                        "src": "11001:7:6"
                      }
                    ],
                    "id": 3886,
                    "name": "VariableDeclaration",
                    "src": "11001:22:6"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 3959,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 3887,
                        "name": "ElementaryTypeName",
                        "src": "11024:7:6"
                      }
                    ],
                    "id": 3888,
                    "name": "VariableDeclaration",
                    "src": "11024:7:6"
                  }
                ],
                "id": 3889,
                "name": "ParameterList",
                "src": "11000:32:6"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 3959,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 3892,
                        "name": "ElementaryTypeName",
                        "src": "11072:4:6"
                      }
                    ],
                    "id": 3893,
                    "name": "VariableDeclaration",
                    "src": "11072:4:6"
                  }
                ],
                "id": 3894,
                "name": "ParameterList",
                "src": "11071:6:6"
              },
              {
                "attributes": {
                  "arguments": [
                    null
                  ]
                },
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 3334,
                      "type": "modifier ()",
                      "value": "onlyUpgradingScheme"
                    },
                    "id": 3890,
                    "name": "Identifier",
                    "src": "11044:19:6"
                  }
                ],
                "id": 3891,
                "name": "ModifierInvocation",
                "src": "11044:19:6"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 10870,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 3895,
                            "name": "Identifier",
                            "src": "11092:7:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3101,
                                  "type": "address",
                                  "value": "newController"
                                },
                                "id": 3896,
                                "name": "Identifier",
                                "src": "11100:13:6"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "address",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(address)",
                                      "value": "address"
                                    },
                                    "id": 3897,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "11117:7:6"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "30",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 0",
                                      "value": "0"
                                    },
                                    "id": 3898,
                                    "name": "Literal",
                                    "src": "11125:1:6"
                                  }
                                ],
                                "id": 3899,
                                "name": "FunctionCall",
                                "src": "11117:10:6"
                              }
                            ],
                            "id": 3900,
                            "name": "BinaryOperation",
                            "src": "11100:27:6"
                          }
                        ],
                        "id": 3901,
                        "name": "FunctionCall",
                        "src": "11092:36:6"
                      }
                    ],
                    "id": 3902,
                    "name": "ExpressionStatement",
                    "src": "11092:36:6"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 10870,
                              "type": "function (bool) pure",
                              "value": "require"
                            },
                            "id": 3903,
                            "name": "Identifier",
                            "src": "11193:7:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "!=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3886,
                                  "type": "address",
                                  "value": "_newController"
                                },
                                "id": 3904,
                                "name": "Identifier",
                                "src": "11201:14:6"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "address",
                                  "type_conversion": true
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "type": "type(address)",
                                      "value": "address"
                                    },
                                    "id": 3905,
                                    "name": "ElementaryTypeNameExpression",
                                    "src": "11219:7:6"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "hexvalue": "30",
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "subdenomination": null,
                                      "token": "number",
                                      "type": "int_const 0",
                                      "value": "0"
                                    },
                                    "id": 3906,
                                    "name": "Literal",
                                    "src": "11227:1:6"
                                  }
                                ],
                                "id": 3907,
                                "name": "FunctionCall",
                                "src": "11219:10:6"
                              }
                            ],
                            "id": 3908,
                            "name": "BinaryOperation",
                            "src": "11201:28:6"
                          }
                        ],
                        "id": 3909,
                        "name": "FunctionCall",
                        "src": "11193:37:6"
                      }
                    ],
                    "id": 3910,
                    "name": "ExpressionStatement",
                    "src": "11193:37:6"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "address"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3101,
                              "type": "address",
                              "value": "newController"
                            },
                            "id": 3911,
                            "name": "Identifier",
                            "src": "11240:13:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3886,
                              "type": "address",
                              "value": "_newController"
                            },
                            "id": 3912,
                            "name": "Identifier",
                            "src": "11256:14:6"
                          }
                        ],
                        "id": 3913,
                        "name": "Assignment",
                        "src": "11240:30:6"
                      }
                    ],
                    "id": 3914,
                    "name": "ExpressionStatement",
                    "src": "11240:30:6"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "transferOwnership",
                              "referencedDeclaration": 10300,
                              "type": "function (address) external"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3095,
                                  "type": "contract Avatar",
                                  "value": "avatar"
                                },
                                "id": 3915,
                                "name": "Identifier",
                                "src": "11280:6:6"
                              }
                            ],
                            "id": 3917,
                            "name": "MemberAccess",
                            "src": "11280:24:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3886,
                              "type": "address",
                              "value": "_newController"
                            },
                            "id": 3918,
                            "name": "Identifier",
                            "src": "11305:14:6"
                          }
                        ],
                        "id": 3919,
                        "name": "FunctionCall",
                        "src": "11280:40:6"
                      }
                    ],
                    "id": 3920,
                    "name": "ExpressionStatement",
                    "src": "11280:40:6"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "==",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "arguments": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "address",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "owner",
                                  "referencedDeclaration": 10249,
                                  "type": "function () view external returns (address)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3097,
                                      "type": "contract DAOToken",
                                      "value": "nativeToken"
                                    },
                                    "id": 3921,
                                    "name": "Identifier",
                                    "src": "11334:11:6"
                                  }
                                ],
                                "id": 3922,
                                "name": "MemberAccess",
                                "src": "11334:17:6"
                              }
                            ],
                            "id": 3923,
                            "name": "FunctionCall",
                            "src": "11334:19:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "address",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_Controller_$4159",
                                      "typeString": "contract Controller"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(address)",
                                  "value": "address"
                                },
                                "id": 3924,
                                "name": "ElementaryTypeNameExpression",
                                "src": "11357:7:6"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 10910,
                                  "type": "contract Controller",
                                  "value": "this"
                                },
                                "id": 3925,
                                "name": "Identifier",
                                "src": "11365:4:6"
                              }
                            ],
                            "id": 3926,
                            "name": "FunctionCall",
                            "src": "11357:13:6"
                          }
                        ],
                        "id": 3927,
                        "name": "BinaryOperation",
                        "src": "11334:36:6"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "tuple()",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "transferOwnership",
                                      "referencedDeclaration": 10300,
                                      "type": "function (address) external"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 3097,
                                          "type": "contract DAOToken",
                                          "value": "nativeToken"
                                        },
                                        "id": 3928,
                                        "name": "Identifier",
                                        "src": "11386:11:6"
                                      }
                                    ],
                                    "id": 3930,
                                    "name": "MemberAccess",
                                    "src": "11386:29:6"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3886,
                                      "type": "address",
                                      "value": "_newController"
                                    },
                                    "id": 3931,
                                    "name": "Identifier",
                                    "src": "11416:14:6"
                                  }
                                ],
                                "id": 3932,
                                "name": "FunctionCall",
                                "src": "11386:45:6"
                              }
                            ],
                            "id": 3933,
                            "name": "ExpressionStatement",
                            "src": "11386:45:6"
                          }
                        ],
                        "id": 3934,
                        "name": "Block",
                        "src": "11372:70:6"
                      }
                    ],
                    "id": 3935,
                    "name": "IfStatement",
                    "src": "11330:112:6"
                  },
                  {
                    "attributes": {
                      "falseBody": null
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "==",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "arguments": [
                                null
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "address",
                              "type_conversion": false
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    null
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "owner",
                                  "referencedDeclaration": 10249,
                                  "type": "function () view external returns (address)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3099,
                                      "type": "contract Reputation",
                                      "value": "nativeReputation"
                                    },
                                    "id": 3936,
                                    "name": "Identifier",
                                    "src": "11455:16:6"
                                  }
                                ],
                                "id": 3937,
                                "name": "MemberAccess",
                                "src": "11455:22:6"
                              }
                            ],
                            "id": 3938,
                            "name": "FunctionCall",
                            "src": "11455:24:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "type": "address",
                              "type_conversion": true
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_Controller_$4159",
                                      "typeString": "contract Controller"
                                    }
                                  ],
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "type": "type(address)",
                                  "value": "address"
                                },
                                "id": 3939,
                                "name": "ElementaryTypeNameExpression",
                                "src": "11483:7:6"
                              },
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 10910,
                                  "type": "contract Controller",
                                  "value": "this"
                                },
                                "id": 3940,
                                "name": "Identifier",
                                "src": "11491:4:6"
                              }
                            ],
                            "id": 3941,
                            "name": "FunctionCall",
                            "src": "11483:13:6"
                          }
                        ],
                        "id": 3942,
                        "name": "BinaryOperation",
                        "src": "11455:41:6"
                      },
                      {
                        "children": [
                          {
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "type": "tuple()",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "transferOwnership",
                                      "referencedDeclaration": 10300,
                                      "type": "function (address) external"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": null,
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 3099,
                                          "type": "contract Reputation",
                                          "value": "nativeReputation"
                                        },
                                        "id": 3943,
                                        "name": "Identifier",
                                        "src": "11512:16:6"
                                      }
                                    ],
                                    "id": 3945,
                                    "name": "MemberAccess",
                                    "src": "11512:34:6"
                                  },
                                  {
                                    "attributes": {
                                      "argumentTypes": null,
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 3886,
                                      "type": "address",
                                      "value": "_newController"
                                    },
                                    "id": 3946,
                                    "name": "Identifier",
                                    "src": "11547:14:6"
                                  }
                                ],
                                "id": 3947,
                                "name": "FunctionCall",
                                "src": "11512:50:6"
                              }
                            ],
                            "id": 3948,
                            "name": "ExpressionStatement",
                            "src": "11512:50:6"
                          }
                        ],
                        "id": 3949,
                        "name": "Block",
                        "src": "11498:75:6"
                      }
                    ],
                    "id": 3950,
                    "name": "IfStatement",
                    "src": "11451:122:6"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_Controller_$4159",
                                  "typeString": "contract Controller"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3211,
                              "type": "function (address,address)",
                              "value": "UpgradeController"
                            },
                            "id": 3951,
                            "name": "Identifier",
                            "src": "11582:17:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 10910,
                              "type": "contract Controller",
                              "value": "this"
                            },
                            "id": 3952,
                            "name": "Identifier",
                            "src": "11600:4:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3101,
                              "type": "address",
                              "value": "newController"
                            },
                            "id": 3953,
                            "name": "Identifier",
                            "src": "11605:13:6"
                          }
                        ],
                        "id": 3954,
                        "name": "FunctionCall",
                        "src": "11582:37:6"
                      }
                    ],
                    "id": 3955,
                    "name": "ExpressionStatement",
                    "src": "11582:37:6"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 3894
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "hexvalue": "74727565",
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "subdenomination": null,
                          "token": "bool",
                          "type": "bool",
                          "value": "true"
                        },
                        "id": 3956,
                        "name": "Literal",
                        "src": "11636:4:6"
                      }
                    ],
                    "id": 3957,
                    "name": "Return",
                    "src": "11629:11:6"
                  }
                ],
                "id": 3958,
                "name": "Block",
                "src": "11082:565:6"
              }
            ],
            "id": 3959,
            "name": "FunctionDefinition",
            "src": "10974:673:6"
          },
          {
            "attributes": {
              "constant": false,
              "implemented": true,
              "isConstructor": false,
              "name": "genericAction",
              "payable": false,
              "scope": 4159,
              "stateMutability": "nonpayable",
              "superFunction": 4298,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_params",
                      "scope": 3988,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes32[] memory",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "length": null,
                          "type": "bytes32[] storage pointer"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "bytes32",
                              "type": "bytes32"
                            },
                            "id": 3960,
                            "name": "ElementaryTypeName",
                            "src": "12010:7:6"
                          }
                        ],
                        "id": 3961,
                        "name": "ArrayTypeName",
                        "src": "12010:9:6"
                      }
                    ],
                    "id": 3962,
                    "name": "VariableDeclaration",
                    "src": "12010:17:6"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 3988,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 3963,
                        "name": "ElementaryTypeName",
                        "src": "12028:7:6"
                      }
                    ],
                    "id": 3964,
                    "name": "VariableDeclaration",
                    "src": "12028:7:6"
                  }
                ],
                "id": 3965,
                "name": "ParameterList",
                "src": "12009:27:6"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 3988,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 3971,
                        "name": "ElementaryTypeName",
                        "src": "12130:4:6"
                      }
                    ],
                    "id": 3972,
                    "name": "VariableDeclaration",
                    "src": "12130:4:6"
                  }
                ],
                "id": 3973,
                "name": "ParameterList",
                "src": "12129:6:6"
              },
              {
                "attributes": {
                  "arguments": [
                    null
                  ]
                },
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 3274,
                      "type": "modifier ()",
                      "value": "onlyRegisteredScheme"
                    },
                    "id": 3966,
                    "name": "Identifier",
                    "src": "12052:20:6"
                  }
                ],
                "id": 3967,
                "name": "ModifierInvocation",
                "src": "12052:20:6"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 3407,
                      "type": "modifier (bytes32)",
                      "value": "onlySubjectToConstraint"
                    },
                    "id": 3968,
                    "name": "Identifier",
                    "src": "12077:23:6"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "hexvalue": "67656e65726963416374696f6e",
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "subdenomination": null,
                      "token": "string",
                      "type": "literal_string \"genericAction\"",
                      "value": "genericAction"
                    },
                    "id": 3969,
                    "name": "Literal",
                    "src": "12101:15:6"
                  }
                ],
                "id": 3970,
                "name": "ModifierInvocation",
                "src": "12077:40:6"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                  "typeString": "bytes32[] memory"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3143,
                              "type": "function (address,bytes32[] memory)",
                              "value": "GenericAction"
                            },
                            "id": 3974,
                            "name": "Identifier",
                            "src": "12150:13:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "sender",
                              "referencedDeclaration": null,
                              "type": "address"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 10867,
                                  "type": "msg",
                                  "value": "msg"
                                },
                                "id": 3975,
                                "name": "Identifier",
                                "src": "12164:3:6"
                              }
                            ],
                            "id": 3976,
                            "name": "MemberAccess",
                            "src": "12164:10:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3962,
                              "type": "bytes32[] memory",
                              "value": "_params"
                            },
                            "id": 3977,
                            "name": "Identifier",
                            "src": "12176:7:6"
                          }
                        ],
                        "id": 3978,
                        "name": "FunctionCall",
                        "src": "12150:34:6"
                      }
                    ],
                    "id": 3979,
                    "name": "ExpressionStatement",
                    "src": "12150:34:6"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 3973
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "bool",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                  "typeString": "bytes32[] memory"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "genericAction",
                              "referencedDeclaration": 2919,
                              "type": "function (address,bytes32[] memory) external returns (bool)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3095,
                                  "type": "contract Avatar",
                                  "value": "avatar"
                                },
                                "id": 3980,
                                "name": "Identifier",
                                "src": "12201:6:6"
                              }
                            ],
                            "id": 3981,
                            "name": "MemberAccess",
                            "src": "12201:20:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "sender",
                              "referencedDeclaration": null,
                              "type": "address"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 10867,
                                  "type": "msg",
                                  "value": "msg"
                                },
                                "id": 3982,
                                "name": "Identifier",
                                "src": "12222:3:6"
                              }
                            ],
                            "id": 3983,
                            "name": "MemberAccess",
                            "src": "12222:10:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3962,
                              "type": "bytes32[] memory",
                              "value": "_params"
                            },
                            "id": 3984,
                            "name": "Identifier",
                            "src": "12234:7:6"
                          }
                        ],
                        "id": 3985,
                        "name": "FunctionCall",
                        "src": "12201:41:6"
                      }
                    ],
                    "id": 3986,
                    "name": "Return",
                    "src": "12194:48:6"
                  }
                ],
                "id": 3987,
                "name": "Block",
                "src": "12140:109:6"
              }
            ],
            "id": 3988,
            "name": "FunctionDefinition",
            "src": "11987:262:6"
          },
          {
            "attributes": {
              "constant": false,
              "implemented": true,
              "isConstructor": false,
              "name": "sendEther",
              "payable": false,
              "scope": 4159,
              "stateMutability": "nonpayable",
              "superFunction": 4309,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_amountInWei",
                      "scope": 4018,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 3989,
                        "name": "ElementaryTypeName",
                        "src": "12462:4:6"
                      }
                    ],
                    "id": 3990,
                    "name": "VariableDeclaration",
                    "src": "12462:17:6"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_to",
                      "scope": 4018,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 3991,
                        "name": "ElementaryTypeName",
                        "src": "12481:7:6"
                      }
                    ],
                    "id": 3992,
                    "name": "VariableDeclaration",
                    "src": "12481:11:6"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 4018,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 3993,
                        "name": "ElementaryTypeName",
                        "src": "12493:7:6"
                      }
                    ],
                    "id": 3994,
                    "name": "VariableDeclaration",
                    "src": "12493:7:6"
                  }
                ],
                "id": 3995,
                "name": "ParameterList",
                "src": "12461:40:6"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 4018,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 4001,
                        "name": "ElementaryTypeName",
                        "src": "12591:4:6"
                      }
                    ],
                    "id": 4002,
                    "name": "VariableDeclaration",
                    "src": "12591:4:6"
                  }
                ],
                "id": 4003,
                "name": "ParameterList",
                "src": "12590:6:6"
              },
              {
                "attributes": {
                  "arguments": [
                    null
                  ]
                },
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 3274,
                      "type": "modifier ()",
                      "value": "onlyRegisteredScheme"
                    },
                    "id": 3996,
                    "name": "Identifier",
                    "src": "12517:20:6"
                  }
                ],
                "id": 3997,
                "name": "ModifierInvocation",
                "src": "12517:20:6"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 3407,
                      "type": "modifier (bytes32)",
                      "value": "onlySubjectToConstraint"
                    },
                    "id": 3998,
                    "name": "Identifier",
                    "src": "12542:23:6"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "hexvalue": "73656e644574686572",
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "subdenomination": null,
                      "token": "string",
                      "type": "literal_string \"sendEther\"",
                      "value": "sendEther"
                    },
                    "id": 3999,
                    "name": "Literal",
                    "src": "12566:11:6"
                  }
                ],
                "id": 4000,
                "name": "ModifierInvocation",
                "src": "12542:36:6"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3151,
                              "type": "function (address,uint256,address)",
                              "value": "SendEther"
                            },
                            "id": 4004,
                            "name": "Identifier",
                            "src": "12611:9:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "sender",
                              "referencedDeclaration": null,
                              "type": "address"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 10867,
                                  "type": "msg",
                                  "value": "msg"
                                },
                                "id": 4005,
                                "name": "Identifier",
                                "src": "12621:3:6"
                              }
                            ],
                            "id": 4006,
                            "name": "MemberAccess",
                            "src": "12621:10:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3990,
                              "type": "uint256",
                              "value": "_amountInWei"
                            },
                            "id": 4007,
                            "name": "Identifier",
                            "src": "12633:12:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3992,
                              "type": "address",
                              "value": "_to"
                            },
                            "id": 4008,
                            "name": "Identifier",
                            "src": "12647:3:6"
                          }
                        ],
                        "id": 4009,
                        "name": "FunctionCall",
                        "src": "12611:40:6"
                      }
                    ],
                    "id": 4010,
                    "name": "ExpressionStatement",
                    "src": "12611:40:6"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 4003
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "bool",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "sendEther",
                              "referencedDeclaration": 2944,
                              "type": "function (uint256,address) external returns (bool)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3095,
                                  "type": "contract Avatar",
                                  "value": "avatar"
                                },
                                "id": 4011,
                                "name": "Identifier",
                                "src": "12668:6:6"
                              }
                            ],
                            "id": 4012,
                            "name": "MemberAccess",
                            "src": "12668:16:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3990,
                              "type": "uint256",
                              "value": "_amountInWei"
                            },
                            "id": 4013,
                            "name": "Identifier",
                            "src": "12685:12:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3992,
                              "type": "address",
                              "value": "_to"
                            },
                            "id": 4014,
                            "name": "Identifier",
                            "src": "12699:3:6"
                          }
                        ],
                        "id": 4015,
                        "name": "FunctionCall",
                        "src": "12668:35:6"
                      }
                    ],
                    "id": 4016,
                    "name": "Return",
                    "src": "12661:42:6"
                  }
                ],
                "id": 4017,
                "name": "Block",
                "src": "12601:109:6"
              }
            ],
            "id": 4018,
            "name": "FunctionDefinition",
            "src": "12443:267:6"
          },
          {
            "attributes": {
              "constant": false,
              "implemented": true,
              "isConstructor": false,
              "name": "externalTokenTransfer",
              "payable": false,
              "scope": 4159,
              "stateMutability": "nonpayable",
              "superFunction": 4322,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_externalToken",
                      "scope": 4052,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "contract StandardToken",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "StandardToken",
                          "referencedDeclaration": 10855,
                          "type": "contract StandardToken"
                        },
                        "id": 4019,
                        "name": "UserDefinedTypeName",
                        "src": "13025:13:6"
                      }
                    ],
                    "id": 4020,
                    "name": "VariableDeclaration",
                    "src": "13025:28:6"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_to",
                      "scope": 4052,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 4021,
                        "name": "ElementaryTypeName",
                        "src": "13055:7:6"
                      }
                    ],
                    "id": 4022,
                    "name": "VariableDeclaration",
                    "src": "13055:11:6"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_value",
                      "scope": 4052,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 4023,
                        "name": "ElementaryTypeName",
                        "src": "13068:4:6"
                      }
                    ],
                    "id": 4024,
                    "name": "VariableDeclaration",
                    "src": "13068:11:6"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 4052,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 4025,
                        "name": "ElementaryTypeName",
                        "src": "13080:7:6"
                      }
                    ],
                    "id": 4026,
                    "name": "VariableDeclaration",
                    "src": "13080:7:6"
                  }
                ],
                "id": 4027,
                "name": "ParameterList",
                "src": "13024:64:6"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 4052,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 4033,
                        "name": "ElementaryTypeName",
                        "src": "13190:4:6"
                      }
                    ],
                    "id": 4034,
                    "name": "VariableDeclaration",
                    "src": "13190:4:6"
                  }
                ],
                "id": 4035,
                "name": "ParameterList",
                "src": "13189:6:6"
              },
              {
                "attributes": {
                  "arguments": [
                    null
                  ]
                },
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 3274,
                      "type": "modifier ()",
                      "value": "onlyRegisteredScheme"
                    },
                    "id": 4028,
                    "name": "Identifier",
                    "src": "13104:20:6"
                  }
                ],
                "id": 4029,
                "name": "ModifierInvocation",
                "src": "13104:20:6"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 3407,
                      "type": "modifier (bytes32)",
                      "value": "onlySubjectToConstraint"
                    },
                    "id": 4030,
                    "name": "Identifier",
                    "src": "13129:23:6"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "hexvalue": "65787465726e616c546f6b656e5472616e73666572",
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "subdenomination": null,
                      "token": "string",
                      "type": "literal_string \"externalTokenTransfer\"",
                      "value": "externalTokenTransfer"
                    },
                    "id": 4031,
                    "name": "Literal",
                    "src": "13153:23:6"
                  }
                ],
                "id": 4032,
                "name": "ModifierInvocation",
                "src": "13129:48:6"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_contract$_StandardToken_$10855",
                                  "typeString": "contract StandardToken"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3161,
                              "type": "function (address,address,address,uint256)",
                              "value": "ExternalTokenTransfer"
                            },
                            "id": 4036,
                            "name": "Identifier",
                            "src": "13210:21:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "sender",
                              "referencedDeclaration": null,
                              "type": "address"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 10867,
                                  "type": "msg",
                                  "value": "msg"
                                },
                                "id": 4037,
                                "name": "Identifier",
                                "src": "13232:3:6"
                              }
                            ],
                            "id": 4038,
                            "name": "MemberAccess",
                            "src": "13232:10:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4020,
                              "type": "contract StandardToken",
                              "value": "_externalToken"
                            },
                            "id": 4039,
                            "name": "Identifier",
                            "src": "13244:14:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4022,
                              "type": "address",
                              "value": "_to"
                            },
                            "id": 4040,
                            "name": "Identifier",
                            "src": "13260:3:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4024,
                              "type": "uint256",
                              "value": "_value"
                            },
                            "id": 4041,
                            "name": "Identifier",
                            "src": "13265:6:6"
                          }
                        ],
                        "id": 4042,
                        "name": "FunctionCall",
                        "src": "13210:62:6"
                      }
                    ],
                    "id": 4043,
                    "name": "ExpressionStatement",
                    "src": "13210:62:6"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 4035
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "bool",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_StandardToken_$10855",
                                  "typeString": "contract StandardToken"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "externalTokenTransfer",
                              "referencedDeclaration": 2973,
                              "type": "function (contract StandardToken,address,uint256) external returns (bool)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3095,
                                  "type": "contract Avatar",
                                  "value": "avatar"
                                },
                                "id": 4044,
                                "name": "Identifier",
                                "src": "13289:6:6"
                              }
                            ],
                            "id": 4045,
                            "name": "MemberAccess",
                            "src": "13289:28:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4020,
                              "type": "contract StandardToken",
                              "value": "_externalToken"
                            },
                            "id": 4046,
                            "name": "Identifier",
                            "src": "13318:14:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4022,
                              "type": "address",
                              "value": "_to"
                            },
                            "id": 4047,
                            "name": "Identifier",
                            "src": "13334:3:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4024,
                              "type": "uint256",
                              "value": "_value"
                            },
                            "id": 4048,
                            "name": "Identifier",
                            "src": "13339:6:6"
                          }
                        ],
                        "id": 4049,
                        "name": "FunctionCall",
                        "src": "13289:57:6"
                      }
                    ],
                    "id": 4050,
                    "name": "Return",
                    "src": "13282:64:6"
                  }
                ],
                "id": 4051,
                "name": "Block",
                "src": "13200:153:6"
              }
            ],
            "id": 4052,
            "name": "FunctionDefinition",
            "src": "12994:359:6"
          },
          {
            "attributes": {
              "constant": false,
              "implemented": true,
              "isConstructor": false,
              "name": "externalTokenTransferFrom",
              "payable": false,
              "scope": 4159,
              "stateMutability": "nonpayable",
              "superFunction": 4337,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_externalToken",
                      "scope": 4090,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "contract StandardToken",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "StandardToken",
                          "referencedDeclaration": 10855,
                          "type": "contract StandardToken"
                        },
                        "id": 4053,
                        "name": "UserDefinedTypeName",
                        "src": "13878:13:6"
                      }
                    ],
                    "id": 4054,
                    "name": "VariableDeclaration",
                    "src": "13878:28:6"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_from",
                      "scope": 4090,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 4055,
                        "name": "ElementaryTypeName",
                        "src": "13908:7:6"
                      }
                    ],
                    "id": 4056,
                    "name": "VariableDeclaration",
                    "src": "13908:13:6"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_to",
                      "scope": 4090,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 4057,
                        "name": "ElementaryTypeName",
                        "src": "13923:7:6"
                      }
                    ],
                    "id": 4058,
                    "name": "VariableDeclaration",
                    "src": "13923:11:6"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_value",
                      "scope": 4090,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 4059,
                        "name": "ElementaryTypeName",
                        "src": "13936:4:6"
                      }
                    ],
                    "id": 4060,
                    "name": "VariableDeclaration",
                    "src": "13936:11:6"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 4090,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 4061,
                        "name": "ElementaryTypeName",
                        "src": "13948:7:6"
                      }
                    ],
                    "id": 4062,
                    "name": "VariableDeclaration",
                    "src": "13948:7:6"
                  }
                ],
                "id": 4063,
                "name": "ParameterList",
                "src": "13877:79:6"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 4090,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 4069,
                        "name": "ElementaryTypeName",
                        "src": "14062:4:6"
                      }
                    ],
                    "id": 4070,
                    "name": "VariableDeclaration",
                    "src": "14062:4:6"
                  }
                ],
                "id": 4071,
                "name": "ParameterList",
                "src": "14061:6:6"
              },
              {
                "attributes": {
                  "arguments": [
                    null
                  ]
                },
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 3274,
                      "type": "modifier ()",
                      "value": "onlyRegisteredScheme"
                    },
                    "id": 4064,
                    "name": "Identifier",
                    "src": "13972:20:6"
                  }
                ],
                "id": 4065,
                "name": "ModifierInvocation",
                "src": "13972:20:6"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 3407,
                      "type": "modifier (bytes32)",
                      "value": "onlySubjectToConstraint"
                    },
                    "id": 4066,
                    "name": "Identifier",
                    "src": "13997:23:6"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "hexvalue": "65787465726e616c546f6b656e5472616e7366657246726f6d",
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "subdenomination": null,
                      "token": "string",
                      "type": "literal_string \"externalTokenTransferFrom\"",
                      "value": "externalTokenTransferFrom"
                    },
                    "id": 4067,
                    "name": "Literal",
                    "src": "14021:27:6"
                  }
                ],
                "id": 4068,
                "name": "ModifierInvocation",
                "src": "13997:52:6"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_contract$_StandardToken_$10855",
                                  "typeString": "contract StandardToken"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3173,
                              "type": "function (address,address,address,address,uint256)",
                              "value": "ExternalTokenTransferFrom"
                            },
                            "id": 4072,
                            "name": "Identifier",
                            "src": "14082:25:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "sender",
                              "referencedDeclaration": null,
                              "type": "address"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 10867,
                                  "type": "msg",
                                  "value": "msg"
                                },
                                "id": 4073,
                                "name": "Identifier",
                                "src": "14108:3:6"
                              }
                            ],
                            "id": 4074,
                            "name": "MemberAccess",
                            "src": "14108:10:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4054,
                              "type": "contract StandardToken",
                              "value": "_externalToken"
                            },
                            "id": 4075,
                            "name": "Identifier",
                            "src": "14120:14:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4056,
                              "type": "address",
                              "value": "_from"
                            },
                            "id": 4076,
                            "name": "Identifier",
                            "src": "14136:5:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4058,
                              "type": "address",
                              "value": "_to"
                            },
                            "id": 4077,
                            "name": "Identifier",
                            "src": "14143:3:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4060,
                              "type": "uint256",
                              "value": "_value"
                            },
                            "id": 4078,
                            "name": "Identifier",
                            "src": "14148:6:6"
                          }
                        ],
                        "id": 4079,
                        "name": "FunctionCall",
                        "src": "14082:73:6"
                      }
                    ],
                    "id": 4080,
                    "name": "ExpressionStatement",
                    "src": "14082:73:6"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 4071
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "bool",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_StandardToken_$10855",
                                  "typeString": "contract StandardToken"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "externalTokenTransferFrom",
                              "referencedDeclaration": 3006,
                              "type": "function (contract StandardToken,address,address,uint256) external returns (bool)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3095,
                                  "type": "contract Avatar",
                                  "value": "avatar"
                                },
                                "id": 4081,
                                "name": "Identifier",
                                "src": "14172:6:6"
                              }
                            ],
                            "id": 4082,
                            "name": "MemberAccess",
                            "src": "14172:32:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4054,
                              "type": "contract StandardToken",
                              "value": "_externalToken"
                            },
                            "id": 4083,
                            "name": "Identifier",
                            "src": "14205:14:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4056,
                              "type": "address",
                              "value": "_from"
                            },
                            "id": 4084,
                            "name": "Identifier",
                            "src": "14221:5:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4058,
                              "type": "address",
                              "value": "_to"
                            },
                            "id": 4085,
                            "name": "Identifier",
                            "src": "14228:3:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4060,
                              "type": "uint256",
                              "value": "_value"
                            },
                            "id": 4086,
                            "name": "Identifier",
                            "src": "14233:6:6"
                          }
                        ],
                        "id": 4087,
                        "name": "FunctionCall",
                        "src": "14172:68:6"
                      }
                    ],
                    "id": 4088,
                    "name": "Return",
                    "src": "14165:75:6"
                  }
                ],
                "id": 4089,
                "name": "Block",
                "src": "14072:175:6"
              }
            ],
            "id": 4090,
            "name": "FunctionDefinition",
            "src": "13843:404:6"
          },
          {
            "attributes": {
              "constant": false,
              "implemented": true,
              "isConstructor": false,
              "name": "externalTokenIncreaseApproval",
              "payable": false,
              "scope": 4159,
              "stateMutability": "nonpayable",
              "superFunction": 4350,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_externalToken",
                      "scope": 4124,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "contract StandardToken",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "StandardToken",
                          "referencedDeclaration": 10855,
                          "type": "contract StandardToken"
                        },
                        "id": 4091,
                        "name": "UserDefinedTypeName",
                        "src": "14662:13:6"
                      }
                    ],
                    "id": 4092,
                    "name": "VariableDeclaration",
                    "src": "14662:28:6"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_spender",
                      "scope": 4124,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 4093,
                        "name": "ElementaryTypeName",
                        "src": "14692:7:6"
                      }
                    ],
                    "id": 4094,
                    "name": "VariableDeclaration",
                    "src": "14692:16:6"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_addedValue",
                      "scope": 4124,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 4095,
                        "name": "ElementaryTypeName",
                        "src": "14710:4:6"
                      }
                    ],
                    "id": 4096,
                    "name": "VariableDeclaration",
                    "src": "14710:16:6"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 4124,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 4097,
                        "name": "ElementaryTypeName",
                        "src": "14727:7:6"
                      }
                    ],
                    "id": 4098,
                    "name": "VariableDeclaration",
                    "src": "14727:7:6"
                  }
                ],
                "id": 4099,
                "name": "ParameterList",
                "src": "14661:74:6"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 4124,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 4105,
                        "name": "ElementaryTypeName",
                        "src": "14845:4:6"
                      }
                    ],
                    "id": 4106,
                    "name": "VariableDeclaration",
                    "src": "14845:4:6"
                  }
                ],
                "id": 4107,
                "name": "ParameterList",
                "src": "14844:6:6"
              },
              {
                "attributes": {
                  "arguments": [
                    null
                  ]
                },
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 3274,
                      "type": "modifier ()",
                      "value": "onlyRegisteredScheme"
                    },
                    "id": 4100,
                    "name": "Identifier",
                    "src": "14751:20:6"
                  }
                ],
                "id": 4101,
                "name": "ModifierInvocation",
                "src": "14751:20:6"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 3407,
                      "type": "modifier (bytes32)",
                      "value": "onlySubjectToConstraint"
                    },
                    "id": 4102,
                    "name": "Identifier",
                    "src": "14776:23:6"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "hexvalue": "65787465726e616c546f6b656e496e637265617365417070726f76616c",
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "subdenomination": null,
                      "token": "string",
                      "type": "literal_string \"externalTokenIncreaseApproval\"",
                      "value": "externalTokenIncreaseApproval"
                    },
                    "id": 4103,
                    "name": "Literal",
                    "src": "14800:31:6"
                  }
                ],
                "id": 4104,
                "name": "ModifierInvocation",
                "src": "14776:56:6"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_contract$_StandardToken_$10855",
                                  "typeString": "contract StandardToken"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3183,
                              "type": "function (address,contract StandardToken,address,uint256)",
                              "value": "ExternalTokenIncreaseApproval"
                            },
                            "id": 4108,
                            "name": "Identifier",
                            "src": "14865:29:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "sender",
                              "referencedDeclaration": null,
                              "type": "address"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 10867,
                                  "type": "msg",
                                  "value": "msg"
                                },
                                "id": 4109,
                                "name": "Identifier",
                                "src": "14895:3:6"
                              }
                            ],
                            "id": 4110,
                            "name": "MemberAccess",
                            "src": "14895:10:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4092,
                              "type": "contract StandardToken",
                              "value": "_externalToken"
                            },
                            "id": 4111,
                            "name": "Identifier",
                            "src": "14906:14:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4094,
                              "type": "address",
                              "value": "_spender"
                            },
                            "id": 4112,
                            "name": "Identifier",
                            "src": "14921:8:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4096,
                              "type": "uint256",
                              "value": "_addedValue"
                            },
                            "id": 4113,
                            "name": "Identifier",
                            "src": "14930:11:6"
                          }
                        ],
                        "id": 4114,
                        "name": "FunctionCall",
                        "src": "14865:77:6"
                      }
                    ],
                    "id": 4115,
                    "name": "ExpressionStatement",
                    "src": "14865:77:6"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 4107
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "bool",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_StandardToken_$10855",
                                  "typeString": "contract StandardToken"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "externalTokenIncreaseApproval",
                              "referencedDeclaration": 3035,
                              "type": "function (contract StandardToken,address,uint256) external returns (bool)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3095,
                                  "type": "contract Avatar",
                                  "value": "avatar"
                                },
                                "id": 4116,
                                "name": "Identifier",
                                "src": "14959:6:6"
                              }
                            ],
                            "id": 4117,
                            "name": "MemberAccess",
                            "src": "14959:36:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4092,
                              "type": "contract StandardToken",
                              "value": "_externalToken"
                            },
                            "id": 4118,
                            "name": "Identifier",
                            "src": "14996:14:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4094,
                              "type": "address",
                              "value": "_spender"
                            },
                            "id": 4119,
                            "name": "Identifier",
                            "src": "15012:8:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4096,
                              "type": "uint256",
                              "value": "_addedValue"
                            },
                            "id": 4120,
                            "name": "Identifier",
                            "src": "15022:11:6"
                          }
                        ],
                        "id": 4121,
                        "name": "FunctionCall",
                        "src": "14959:75:6"
                      }
                    ],
                    "id": 4122,
                    "name": "Return",
                    "src": "14952:82:6"
                  }
                ],
                "id": 4123,
                "name": "Block",
                "src": "14855:186:6"
              }
            ],
            "id": 4124,
            "name": "FunctionDefinition",
            "src": "14623:418:6"
          },
          {
            "attributes": {
              "constant": false,
              "implemented": true,
              "isConstructor": false,
              "name": "externalTokenDecreaseApproval",
              "payable": false,
              "scope": 4159,
              "stateMutability": "nonpayable",
              "superFunction": 4363,
              "visibility": "public"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_externalToken",
                      "scope": 4158,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "contract StandardToken",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "contractScope": null,
                          "name": "StandardToken",
                          "referencedDeclaration": 10855,
                          "type": "contract StandardToken"
                        },
                        "id": 4125,
                        "name": "UserDefinedTypeName",
                        "src": "15461:13:6"
                      }
                    ],
                    "id": 4126,
                    "name": "VariableDeclaration",
                    "src": "15461:28:6"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_spender",
                      "scope": 4158,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 4127,
                        "name": "ElementaryTypeName",
                        "src": "15491:7:6"
                      }
                    ],
                    "id": 4128,
                    "name": "VariableDeclaration",
                    "src": "15491:16:6"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "_subtractedValue",
                      "scope": 4158,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint",
                          "type": "uint256"
                        },
                        "id": 4129,
                        "name": "ElementaryTypeName",
                        "src": "15509:4:6"
                      }
                    ],
                    "id": 4130,
                    "name": "VariableDeclaration",
                    "src": "15509:21:6"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 4158,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "type": "address"
                        },
                        "id": 4131,
                        "name": "ElementaryTypeName",
                        "src": "15531:7:6"
                      }
                    ],
                    "id": 4132,
                    "name": "VariableDeclaration",
                    "src": "15531:7:6"
                  }
                ],
                "id": 4133,
                "name": "ParameterList",
                "src": "15460:79:6"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "name": "",
                      "scope": 4158,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "value": null,
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 4139,
                        "name": "ElementaryTypeName",
                        "src": "15649:4:6"
                      }
                    ],
                    "id": 4140,
                    "name": "VariableDeclaration",
                    "src": "15649:4:6"
                  }
                ],
                "id": 4141,
                "name": "ParameterList",
                "src": "15648:6:6"
              },
              {
                "attributes": {
                  "arguments": [
                    null
                  ]
                },
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 3274,
                      "type": "modifier ()",
                      "value": "onlyRegisteredScheme"
                    },
                    "id": 4134,
                    "name": "Identifier",
                    "src": "15555:20:6"
                  }
                ],
                "id": 4135,
                "name": "ModifierInvocation",
                "src": "15555:20:6"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 3407,
                      "type": "modifier (bytes32)",
                      "value": "onlySubjectToConstraint"
                    },
                    "id": 4136,
                    "name": "Identifier",
                    "src": "15580:23:6"
                  },
                  {
                    "attributes": {
                      "argumentTypes": null,
                      "hexvalue": "65787465726e616c546f6b656e4465637265617365417070726f76616c",
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "subdenomination": null,
                      "token": "string",
                      "type": "literal_string \"externalTokenDecreaseApproval\"",
                      "value": "externalTokenDecreaseApproval"
                    },
                    "id": 4137,
                    "name": "Literal",
                    "src": "15604:31:6"
                  }
                ],
                "id": 4138,
                "name": "ModifierInvocation",
                "src": "15580:56:6"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_contract$_StandardToken_$10855",
                                  "typeString": "contract StandardToken"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 3193,
                              "type": "function (address,contract StandardToken,address,uint256)",
                              "value": "ExternalTokenDecreaseApproval"
                            },
                            "id": 4142,
                            "name": "Identifier",
                            "src": "15669:29:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "sender",
                              "referencedDeclaration": null,
                              "type": "address"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 10867,
                                  "type": "msg",
                                  "value": "msg"
                                },
                                "id": 4143,
                                "name": "Identifier",
                                "src": "15699:3:6"
                              }
                            ],
                            "id": 4144,
                            "name": "MemberAccess",
                            "src": "15699:10:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4126,
                              "type": "contract StandardToken",
                              "value": "_externalToken"
                            },
                            "id": 4145,
                            "name": "Identifier",
                            "src": "15710:14:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4128,
                              "type": "address",
                              "value": "_spender"
                            },
                            "id": 4146,
                            "name": "Identifier",
                            "src": "15725:8:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4130,
                              "type": "uint256",
                              "value": "_subtractedValue"
                            },
                            "id": 4147,
                            "name": "Identifier",
                            "src": "15734:16:6"
                          }
                        ],
                        "id": 4148,
                        "name": "FunctionCall",
                        "src": "15669:82:6"
                      }
                    ],
                    "id": 4149,
                    "name": "ExpressionStatement",
                    "src": "15669:82:6"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 4141
                    },
                    "children": [
                      {
                        "attributes": {
                          "argumentTypes": null,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "type": "bool",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_StandardToken_$10855",
                                  "typeString": "contract StandardToken"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "externalTokenDecreaseApproval",
                              "referencedDeclaration": 3064,
                              "type": "function (contract StandardToken,address,uint256) external returns (bool)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "argumentTypes": null,
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 3095,
                                  "type": "contract Avatar",
                                  "value": "avatar"
                                },
                                "id": 4150,
                                "name": "Identifier",
                                "src": "15768:6:6"
                              }
                            ],
                            "id": 4151,
                            "name": "MemberAccess",
                            "src": "15768:36:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4126,
                              "type": "contract StandardToken",
                              "value": "_externalToken"
                            },
                            "id": 4152,
                            "name": "Identifier",
                            "src": "15805:14:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4128,
                              "type": "address",
                              "value": "_spender"
                            },
                            "id": 4153,
                            "name": "Identifier",
                            "src": "15821:8:6"
                          },
                          {
                            "attributes": {
                              "argumentTypes": null,
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4130,
                              "type": "uint256",
                              "value": "_subtractedValue"
                            },
                            "id": 4154,
                            "name": "Identifier",
                            "src": "15831:16:6"
                          }
                        ],
                        "id": 4155,
                        "name": "FunctionCall",
                        "src": "15768:80:6"
                      }
                    ],
                    "id": 4156,
                    "name": "Return",
                    "src": "15761:87:6"
                  }
                ],
                "id": 4157,
                "name": "Block",
                "src": "15659:196:6"
              }
            ],
            "id": 4158,
            "name": "FunctionDefinition",
            "src": "15422:433:6"
          }
        ],
        "id": 4159,
        "name": "ContractDefinition",
        "src": "462:15395:6"
      }
    ],
    "id": 4160,
    "name": "SourceUnit",
    "src": "0:15858:6"
  },
  "compiler": {
    "name": "solc",
    "version": "0.4.18+commit.9cf6e910.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "1.0.1",
  "updatedAt": "2018-01-25T13:15:04.341Z"
}