{
  "contractName": "BaseSalary",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract NFTSalaryRecipient",
          "name": "_salaryRecipients",
          "type": "address"
        },
        {
          "internalType": "string",
          "name": "_uri",
          "type": "string"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "ApprovalForAll",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "contract IERC1155",
          "name": "contractAddress",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "collateralTokenId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "uint64",
          "name": "oracleId",
          "type": "uint64"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "CollateralWithdrawn",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "customer",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "condition",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "ConditionCreated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "customer",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "originalCondition",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "newCondition",
          "type": "uint256"
        }
      ],
      "name": "ConditionReCreate",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "contract IERC1155",
          "name": "collateralContractAddress",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "collateralTokenId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "DonateCollateral",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "oracleId",
          "type": "uint64"
        }
      ],
      "name": "OracleCreated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint64",
          "name": "oracleId",
          "type": "uint64"
        }
      ],
      "name": "OracleFinished",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "oracleOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint64",
          "name": "oracleId",
          "type": "uint64"
        }
      ],
      "name": "OracleOwnerChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint64",
          "name": "oracleId",
          "type": "uint64"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "condition",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "numerator",
          "type": "uint256"
        }
      ],
      "name": "ReportedNumerator",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint64",
          "name": "oracleId",
          "type": "uint64"
        },
        {
          "indexed": true,
          "internalType": "uint64[]",
          "name": "conditions",
          "type": "uint64[]"
        },
        {
          "indexed": false,
          "internalType": "uint256[]",
          "name": "numerators",
          "type": "uint256[]"
        }
      ],
      "name": "ReportedNumeratorsBatch",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "customer",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "condition",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "SalaryMinted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256[]",
          "name": "ids",
          "type": "uint256[]"
        },
        {
          "indexed": false,
          "internalType": "uint256[]",
          "name": "values",
          "type": "uint256[]"
        }
      ],
      "name": "TransferBatch",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "TransferSingle",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "value",
          "type": "string"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        }
      ],
      "name": "URI",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "accounts",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "ids",
          "type": "uint256[]"
        }
      ],
      "name": "balanceOfBatch",
      "outputs": [
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_newOracleOwner",
          "type": "address"
        },
        {
          "internalType": "uint64",
          "name": "_oracleId",
          "type": "uint64"
        }
      ],
      "name": "changeOracleOwner",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC1155",
          "name": "_collateralContractAddress",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_collateralTokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint64",
          "name": "_oracleId",
          "type": "uint64"
        },
        {
          "internalType": "uint256",
          "name": "_condition",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        }
      ],
      "name": "collateralOwing",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "conditionCreationDates",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "conditionOwners",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC1155",
          "name": "_collateralContractAddress",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_collateralTokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint64",
          "name": "_oracleId",
          "type": "uint64"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "donate",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "_oracleId",
          "type": "uint64"
        }
      ],
      "name": "finishOracle",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "firstConditionInChain",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "firstToLastConditionInChain",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC1155",
          "name": "_collateralContractAddress",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_collateralTokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint64",
          "name": "_oracleId",
          "type": "uint64"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "gatherDeFiProfit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "_oracleId",
          "type": "uint64"
        }
      ],
      "name": "gracePeriodEnd",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "isApprovedForAll",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_user",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_condition",
          "type": "uint256"
        }
      ],
      "name": "isConditionalLocked",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "_oracleId",
          "type": "uint64"
        }
      ],
      "name": "isOracleFinished",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "lastCollateralBalanceFirstRoundMap",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "lastCollateralBalanceSecondRoundMap",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "lastSalaryDates",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "maxConditionId",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "maxOracleId",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "onERC1155BatchReceived",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "onERC1155Received",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "onERC721Received",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "_oracleId",
          "type": "uint64"
        }
      ],
      "name": "oracleOwner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "_oracleId",
          "type": "uint64"
        }
      ],
      "name": "payoutDenominator",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "_oracleId",
          "type": "uint64"
        },
        {
          "internalType": "uint256",
          "name": "_condition",
          "type": "uint256"
        }
      ],
      "name": "payoutNumerator",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "_oracleId",
          "type": "uint64"
        },
        {
          "internalType": "uint256",
          "name": "_condition",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_numerator",
          "type": "uint256"
        }
      ],
      "name": "reportNumerator",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "_oracleId",
          "type": "uint64"
        },
        {
          "internalType": "uint64[]",
          "name": "_conditions",
          "type": "uint64[]"
        },
        {
          "internalType": "uint256[]",
          "name": "_numerators",
          "type": "uint256[]"
        }
      ],
      "name": "reportNumeratorsBatch",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256[]",
          "name": "_ids",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "_values",
          "type": "uint256[]"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "safeBatchTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_id",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "salaryRecipients",
      "outputs": [
        {
          "internalType": "contract NFTSalaryRecipient",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "setApprovalForAll",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        }
      ],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "_oracleId",
          "type": "uint64"
        },
        {
          "internalType": "uint256",
          "name": "_time",
          "type": "uint256"
        }
      ],
      "name": "updateGracePeriodEnds",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "uri",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "name": "usersWithdrewInFirstRound",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC1155",
          "name": "_collateralContractAddress",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_collateralTokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint64",
          "name": "_oracleId",
          "type": "uint64"
        },
        {
          "internalType": "uint256",
          "name": "_condition",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "withdrawCollateral",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_condition",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "mintSalary",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_condition",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "recreateCondition",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract NFTSalaryRecipient\",\"name\":\"_salaryRecipients\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"_uri\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC1155\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"collateralTokenId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"oracleId\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CollateralWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"customer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"condition\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ConditionCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"customer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"originalCondition\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newCondition\",\"type\":\"uint256\"}],\"name\":\"ConditionReCreate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC1155\",\"name\":\"collateralContractAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"collateralTokenId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"DonateCollateral\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"oracleId\",\"type\":\"uint64\"}],\"name\":\"OracleCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"oracleId\",\"type\":\"uint64\"}],\"name\":\"OracleFinished\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oracleOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"oracleId\",\"type\":\"uint64\"}],\"name\":\"OracleOwnerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"oracleId\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"condition\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"numerator\",\"type\":\"uint256\"}],\"name\":\"ReportedNumerator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"oracleId\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"uint64[]\",\"name\":\"conditions\",\"type\":\"uint64[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"numerators\",\"type\":\"uint256[]\"}],\"name\":\"ReportedNumeratorsBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"customer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"condition\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"SalaryMinted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"}],\"name\":\"TransferBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"TransferSingle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"URI\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"}],\"name\":\"balanceOfBatch\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newOracleOwner\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"_oracleId\",\"type\":\"uint64\"}],\"name\":\"changeOracleOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC1155\",\"name\":\"_collateralContractAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_collateralTokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"_oracleId\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"_condition\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_user\",\"type\":\"address\"}],\"name\":\"collateralOwing\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"conditionCreationDates\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"conditionOwners\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC1155\",\"name\":\"_collateralContractAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_collateralTokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"_oracleId\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"donate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_oracleId\",\"type\":\"uint64\"}],\"name\":\"finishOracle\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"firstConditionInChain\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"firstToLastConditionInChain\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC1155\",\"name\":\"_collateralContractAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_collateralTokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"_oracleId\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"gatherDeFiProfit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_oracleId\",\"type\":\"uint64\"}],\"name\":\"gracePeriodEnd\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_condition\",\"type\":\"uint256\"}],\"name\":\"isConditionalLocked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_oracleId\",\"type\":\"uint64\"}],\"name\":\"isOracleFinished\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"lastCollateralBalanceFirstRoundMap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"lastCollateralBalanceSecondRoundMap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"lastSalaryDates\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxConditionId\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxOracleId\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_condition\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"mintSalary\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155BatchReceived\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC721Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_oracleId\",\"type\":\"uint64\"}],\"name\":\"oracleOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_oracleId\",\"type\":\"uint64\"}],\"name\":\"payoutDenominator\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_oracleId\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"_condition\",\"type\":\"uint256\"}],\"name\":\"payoutNumerator\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_condition\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"recreateCondition\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_oracleId\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"_condition\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_numerator\",\"type\":\"uint256\"}],\"name\":\"reportNumerator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_oracleId\",\"type\":\"uint64\"},{\"internalType\":\"uint64[]\",\"name\":\"_conditions\",\"type\":\"uint64[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_numerators\",\"type\":\"uint256[]\"}],\"name\":\"reportNumeratorsBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"_ids\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_values\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"safeBatchTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"salaryRecipients\",\"outputs\":[{\"internalType\":\"contract NFTSalaryRecipient\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_oracleId\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"_time\",\"type\":\"uint256\"}],\"name\":\"updateGracePeriodEnds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"uri\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"name\":\"usersWithdrewInFirstRound\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC1155\",\"name\":\"_collateralContractAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_collateralTokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"_oracleId\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"_condition\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"withdrawCollateral\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Victor Porton It was considered to allow the DAO to adjust registration date to pay salary retrospectively, but this seems giving too much rights to the DAO similarly as if it had the right to declare anyone dead. It would cause this effect: A scientist who is already great may register then his date is moved back in time and instantly he or she receives a very big sum of money to his account. If it is done erroneously, there may be no way to move the registration date again forward in time, because the tokens may be already withdrawn. And it cannot be done in a fully decentralized way because it needs oracles. So errors are seem inevitable. On the other hand, somebody malicious may create and register in my system a pool of Ethereum addresses that individuals can receive from them as if they themselves registered in the past. So it in some cases (if the registration date is past the contract deployment) this issue is impossible to mitigate. The salary is paid in minted tokens groups into \\\"chains\\\": the original salary token and anyone can replace it by another token, next in the chain.\",\"events\":{\"ConditionReCreate(address,uint256,uint256)\":{\"params\":{\"customer\":\"The customer address.\",\"newCondition\":\"The new token ID.\",\"originalCondition\":\"The original token ID.\"}},\"SalaryMinted(address,uint256,uint256,bytes)\":{\"params\":{\"amount\":\"The minted amount.\",\"customer\":\"The customer address.\",\"data\":\"Additional data.\"}}},\"kind\":\"dev\",\"methods\":{\"balanceOf(address,uint256)\":{\"details\":\"See {IERC1155-balanceOf}. Requirements: - `account` cannot be the zero address.\"},\"balanceOfBatch(address[],uint256[])\":{\"details\":\"See {IERC1155-balanceOfBatch}. Requirements: - `accounts` and `ids` must have the same length.\"},\"changeOracleOwner(address,uint64)\":{\"params\":{\"_newOracleOwner\":\"New owner.\",\"_oracleId\":\"The oracle whose owner to change.\"}},\"collateralOwing(address,uint256,uint64,uint256,address)\":{\"params\":{\"_collateralContractAddress\":\"The ERC-1155 collateral token contract.\",\"_collateralTokenId\":\"The ERC-1155 collateral token ID.\",\"_condition\":\"The condition (the original receiver of a conditional token).\",\"_oracleId\":\"From which oracle's \\\"account\\\" to withdraw.\",\"_user\":\"The user to which we may owe.\"}},\"constructor\":{\"params\":{\"_uri\":\"The ERC-1155 token URI.\"}},\"donate(address,uint256,uint64,uint256,address,address,bytes)\":{\"params\":{\"_amount\":\"The amount to donate.\",\"_collateralContractAddress\":\"The collateral ERC-1155 contract address.\",\"_collateralTokenId\":\"The collateral ERC-1155 token ID.\",\"_data\":\"Additional transaction data.\",\"_from\":\"From whom to take the donation.\",\"_oracleId\":\"The oracle ID to whose ecosystem to donate to.\",\"_to\":\"On whose account the donation amount is assigned.\"}},\"finishOracle(uint64)\":{\"params\":{\"_oracleId\":\"The oracle ID. You should set grace period end time before calling this method.\"}},\"gatherDeFiProfit(address,uint256,uint64,bytes)\":{\"params\":{\"_collateralContractAddress\":\"The collateral ERC-1155 contract address.\",\"_collateralTokenId\":\"The collateral ERC-1155 token ID.\",\"_data\":\"Additional transaction data.\",\"_oracleId\":\"The oracle ID to whose ecosystem to donate to.\"}},\"gracePeriodEnd(uint64)\":{\"params\":{\"_oracleId\":\"For which oracle.\"}},\"isApprovedForAll(address,address)\":{\"details\":\"See {IERC1155-isApprovedForAll}.\"},\"isConditionalLocked(address,uint256)\":{\"params\":{\"_condition\":\"The condition (the original receiver of a conditional token).\",\"_user\":\"Querying if locked for this user.\"}},\"isOracleFinished(uint64)\":{\"params\":{\"_oracleId\":\"The oracle ID.\"},\"returns\":{\"_0\":\"`true` if it has finished.\"}},\"mintSalary(uint256,bytes)\":{\"params\":{\"_condition\":\"The condition ID.\",\"_data\":\"Additional data. This method can be called only by the salary receiver.\"}},\"onERC721Received(address,address,uint256,bytes)\":{\"details\":\"See {IERC721Receiver-onERC721Received}. Always returns `IERC721Receiver.onERC721Received.selector`.\"},\"oracleOwner(uint64)\":{\"params\":{\"_oracleId\":\"The oracle ID.\"}},\"payoutDenominator(uint64)\":{\"params\":{\"_oracleId\":\"The oracle ID. The result can't change if the oracle has finished.\"}},\"payoutNumerator(uint64,uint256)\":{\"params\":{\"_condition\":\"The condition (the original receiver of a conditional token). The result can't change if the oracle has finished.\",\"_oracleId\":\"The oracle ID.\"}},\"reportNumerator(uint64,uint256,uint256)\":{\"params\":{\"_condition\":\"The condition.\",\"_numerator\":\"The relative score of the condition. Note: We could make oracles easily verificable by a hash of all the data, but       - It may need allowing to set a numerator only once.       - It may be not necessary because future technology will allow to aggregate blockchains.\",\"_oracleId\":\"The oracle ID.\"}},\"reportNumeratorsBatch(uint64,uint64[],uint256[])\":{\"params\":{\"_conditions\":\"The conditions.\",\"_numerators\":\"The relative scores of the condition.\",\"_oracleId\":\"The oracle ID.\"}},\"setApprovalForAll(address,bool)\":{\"details\":\"See {IERC1155-setApprovalForAll}.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}. Time complexity O(1), guaranteed to always use less than 30 000 gas.\"},\"totalSupply(uint256)\":{\"params\":{\"id\":\"Token ID.\"},\"returns\":{\"_0\":\"Total supply.\"}},\"uri(uint256)\":{\"details\":\"See {IERC1155MetadataURI-uri}. This implementation returns the same URI for *all* token types. It relies on the token type ID substitution mechanism https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. Clients calling this function must replace the `\\\\{id\\\\}` substring with the actual token type ID.\"},\"withdrawCollateral(address,uint256,uint64,uint256,bytes)\":{\"params\":{\"_collateralContractAddress\":\"The ERC-1155 collateral token contract.\",\"_collateralTokenId\":\"The ERC-1155 collateral token ID.\",\"_condition\":\"The condition.\",\"_data\":\"Additional data. Notes: - It is made impossible to withdraw somebody's other collateral, as otherwise we can't mark non-active   accounts in grace period. - We can't transfer to somebody other than `msg.sender` because anybody can transfer   (needed for multi-level transfers). - After this function is called, it becomes impossible to transfer the corresponding conditional token   of `msg.sender` (to prevent its repeated withdrawal).\",\"_oracleId\":\"From which oracle's \\\"account\\\" to withdraw.\"}}},\"title\":\"Base class for a \\\"salary\\\" that is paid one token per second using minted conditionals.\",\"version\":1},\"userdoc\":{\"events\":{\"CollateralWithdrawn(address,uint256,uint64,address,uint256)\":{\"notice\":\"Emitted when collateral is withdrawn.\"},\"ConditionCreated(address,address,uint256,bytes)\":{\"notice\":\"Emitted when an oracle owner is set.\"},\"ConditionReCreate(address,uint256,uint256)\":{\"notice\":\"Salary token recreated (salary recalculation request).\"},\"DonateCollateral(address,uint256,address,uint256,address,bytes)\":{\"notice\":\"Emitted when a collateral is donated.\"},\"OracleCreated(address,uint64)\":{\"notice\":\"Emitted when an oracle is created.\"},\"OracleFinished(uint64)\":{\"notice\":\"Emitted when an oracle is marked as having finished its work.\"},\"OracleOwnerChanged(address,uint64)\":{\"notice\":\"Emitted when an oracle owner is set.\"},\"ReportedNumerator(uint64,uint256,uint256)\":{\"notice\":\"A condition score was stored in the chain by an oracle.\"},\"ReportedNumeratorsBatch(uint64,uint64[],uint256[])\":{\"notice\":\"Some condition scores were stored in the chain by an oracle.\"},\"SalaryMinted(address,uint256,uint256,bytes)\":{\"notice\":\"Salary tokens minted.\"}},\"kind\":\"user\",\"methods\":{\"changeOracleOwner(address,uint64)\":{\"notice\":\"Modify the owner of an oracle.\"},\"collateralOwing(address,uint256,uint64,uint256,address)\":{\"notice\":\"Calculate how much collateral is owed to a user.\"},\"constructor\":{\"notice\":\"Constructor.\"},\"donate(address,uint256,uint64,uint256,address,address,bytes)\":{\"notice\":\"Donate funds in an ERC-1155 token. First, the collateral token need to be approved to be spent by this contract from the address `_from`. It also mints a token (with a different ID), that counts donations in that token.\"},\"finishOracle(uint64)\":{\"notice\":\"Need to be called after all numerators were reported.\"},\"firstConditionInChain(uint256)\":{\"notice\":\"Mapping (condition ID => first condition ID in the chain) I call _chain_ of conditions the list of conditions resulting from creating and recreating conditions.\"},\"firstToLastConditionInChain(uint256)\":{\"notice\":\"Mapping (first condition ID in the chain => last condition ID in the chain) I call _chain_ of conditions the list of conditions resulting from creating and recreating conditions.\"},\"gatherDeFiProfit(address,uint256,uint64,bytes)\":{\"notice\":\"Gather a DeFi profit of a token previous donated to this contact.\"},\"gracePeriodEnd(uint64)\":{\"notice\":\"Retrieve the end of the grace period.\"},\"isConditionalLocked(address,uint256)\":{\"notice\":\"Are transfers of a conditinal token locked? This is used to prevent its repeated withdrawal.\"},\"isOracleFinished(uint64)\":{\"notice\":\"Check if an oracle has finished.\"},\"mintSalary(uint256,bytes)\":{\"notice\":\"Mint a salary token.\"},\"oracleOwner(uint64)\":{\"notice\":\"Get the oracle owner.\"},\"payoutDenominator(uint64)\":{\"notice\":\"Retrieve the last stored payout denominator (the sum of all numerators of the oracle).\"},\"payoutNumerator(uint64,uint256)\":{\"notice\":\"Retrieve the last stored payout numerator (relative score of a condition).\"},\"recreateCondition(uint256,bytes)\":{\"notice\":\"Make a new condition that replaces the old one. In other words, it is a request to recalculate somebody's salary. Anyone can request to recalculate anyone's salary. It's also useful to punish someone for decreasing his work performance or an evil act. This is to be called among other when a person dies. Recalculation is also forced when a salary receiver transfers away his current salary token. It is useful to remove a trader's incentive to kill the issuer to reduce the circulating supply. Issue to solve later: Should we recommend: - calling this function on each new project milestone? - calling this function regularly (e.g. every week)? This function also withdraws the old token.\"},\"reportNumerator(uint64,uint256,uint256)\":{\"notice\":\"Called by the oracle owner for reporting results of conditions.\"},\"reportNumeratorsBatch(uint64,uint64[],uint256[])\":{\"notice\":\"Called by the oracle owner for reporting results of several conditions.\"},\"safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)\":{\"notice\":\"An ERC-1155 function. We disallow transfers of conditional tokens after redeem `_to` prevent \\\"gathering\\\" them before redeeming each oracle.\"},\"safeTransferFrom(address,address,uint256,uint256,bytes)\":{\"notice\":\"An ERC-1155 function. We disallow transfers of conditional tokens after redeem `_to` prevent \\\"gathering\\\" them before redeeming each oracle.\"},\"totalSupply(uint256)\":{\"notice\":\"Total supply of a token (conforms to `IERC1155Views`).\"},\"updateGracePeriodEnds(uint64,uint256)\":{\"notice\":\"Set the end time of the grace period. The first withdrawal can be done *only* during the grace period. The second withdrawal can be done after the end of the grace period and only if the first withdrawal was done. The intention of the grace period is to check which of users are active (\\\"alive\\\").\"},\"usersWithdrewInFirstRound(uint64)\":{\"notice\":\"Mapping (oracleId => amount user withdrew in first round) (see `docs/Calculations.md`).\"},\"withdrawCollateral(address,uint256,uint64,uint256,bytes)\":{\"notice\":\"Transfer to `msg.sender` the collateral ERC-1155 token. The amount transferred is proportional to the score of `_condition` by the oracle.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/user/Projects/future-contracts/contracts/BaseSalary.sol\":\"BaseSalary\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"/home/user/Projects/future-contracts/contracts/BaseBidOnAddresses.sol\":{\"keccak256\":\"0x0f468f447255c1349ffac58a16d2a3d64e8b3a14ad8289acdf367538d1dce04e\",\"license\":\"LGPL-3.0-or-later\",\"urls\":[\"bzz-raw://7e610bbd572bfb395b91253f5244e0dd8f5a20c523a9df5d846f9d370b3fbb76\",\"dweb:/ipfs/QmbrcKL49Efghwx95EEM7SD2PArLkUMxdNujUk2tygb91Y\"]},\"/home/user/Projects/future-contracts/contracts/BaseLock.sol\":{\"keccak256\":\"0x477edfd8178110507dd44a101ec4d45bd82e073a8441c30062a9ca3cc3742184\",\"license\":\"LGPL-3.0-or-later\",\"urls\":[\"bzz-raw://0188608bd813e9e1de9472d2c71264fa24655ec646cc59be93d56a648fab1c6c\",\"dweb:/ipfs/QmdERM9oNEvHgmes3AWG8zAyx4ueAFKtXGsegAfXUKryDW\"]},\"/home/user/Projects/future-contracts/contracts/BaseSalary.sol\":{\"keccak256\":\"0xf1b94d7cc7658e89c87ac0041a599af9b37e243441f25c578fb1422814156768\",\"license\":\"LGPL-3.0-or-later\",\"urls\":[\"bzz-raw://3e330bca4e83a61c15c7407c52fe6d9ddb95b5208033f14a9f7defda2fbb5514\",\"dweb:/ipfs/Qmex5ypCeXjyiCrRWqhWZdNzeU6pg5dXPARXRnZmtUiLoz\"]},\"/home/user/Projects/future-contracts/contracts/ERC1155/ERC1155.sol\":{\"keccak256\":\"0x7dcdf324fd4d2dec68846958865ae833956cb4ad80cd83cf6f107e7c33500bf6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5cddf52afd931cbf983100a0415f04e6646aa90d100fd91437d2a75e3b241206\",\"dweb:/ipfs/QmXXJ2qoC1rSsKdg5s87m3BPQ3RFGw2rNrNv7KygzGJ9zQ\"]},\"/home/user/Projects/future-contracts/contracts/ERC1155/ERC1155WithTotals.sol\":{\"keccak256\":\"0x1d5fcf7a70d6f5dcd4ddf25caece633a9b4d17154fb98b5fc9a5ae4600b2db15\",\"license\":\"LGPL-3.0-or-later\",\"urls\":[\"bzz-raw://9638d138ecec5f7f6651cf690295fdaaa99023d58555360fa801ace5cac88a9d\",\"dweb:/ipfs/QmUWf56QEe5uSfpHB7inMUGzufNZSxyu8aszLzoYMZHMYf\"]},\"/home/user/Projects/future-contracts/contracts/NFTSalaryRecipient.sol\":{\"keccak256\":\"0x2a45ffa3125d64a70237df9231e64f47ff80b9e859f2c1fb04ca220087bff2e9\",\"license\":\"LGPL-3.0-or-later\",\"urls\":[\"bzz-raw://03f8f21862486f91bb4dd7b02c84f23b0128331b21b96a997e905b5dbc7793e7\",\"dweb:/ipfs/QmTGuoKuvFT7mk6eZBKDkwLFwtkV36CaC6e7sTZRgLU64J\"]},\"@openzeppelin/contracts/GSN/Context.sol\":{\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ded47ec7c96750f9bd04bbbc84f659992d4ba901cb7b532a52cd468272cf378f\",\"dweb:/ipfs/QmfBrGtQP7rZEqEg6Wz6jh2N2Kukpj1z5v3CGWmAqrzm96\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xf7c39c7e6d06ed3bda90cfefbcbf2ddc32c599c3d6721746546ad64946efccaa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cb57a28e189cd8b05748db44bdd51d608e6f1364dd1b35ad921e1bc82c10631e\",\"dweb:/ipfs/QmaWWTBbVu2pRR9XUbE4iC159NoP59cRF9ZJwhf4ghFN9i\"]},\"@openzeppelin/contracts/introspection/ERC165.sol\":{\"keccak256\":\"0xd6b90e604fb2eb2d641c7110c72440bf2dc999ec6ab8ff60f200e71ca75d1d90\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7b92d8ab83b21ff984b1f0d6d66897d5afb1f2052004cbcb133cea023e0ae468\",\"dweb:/ipfs/QmTarypkQrFp4UMjTh7Zzhz2nZLz5uPS4nJQtHDEuwBVe6\"]},\"@openzeppelin/contracts/introspection/IERC165.sol\":{\"keccak256\":\"0xf70bc25d981e4ec9673a995ad2995d5d493ea188d3d8f388bba9c227ce09fb82\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bd970f51e3a77790c2f02b5b1759827c3b897c3d98c407b3631e8af32e3dc93c\",\"dweb:/ipfs/QmPF85Amgbqjk3SNZKsPCsqCw8JfwYEPMnnhvMJUyX58je\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x3b21f2c8d626de3b9925ae33e972d8bf5c8b1bffb3f4ee94daeed7d0679036e6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7f8d45329fecbf0836ad7543330c3ecd0f8d0ffa42d4016278c3eb2215fdcdfe\",\"dweb:/ipfs/QmXWLT7GcnHtA5NiD6MFi2CV3EWJY4wv5mLNnypqYDrxL3\"]},\"@openzeppelin/contracts/token/ERC1155/ERC1155Holder.sol\":{\"keccak256\":\"0x21428ca879b2437107322dfc1e214d25ecd6b966344961025ee412c3acfd5fc0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9747c875899d05823aede28b60ca8d3719b8c28018f397521c4ffb05041e1ac5\",\"dweb:/ipfs/QmQEQ4jJYEGFNfcngfZ3gPkcrcWYWKbo1Bq2F57scJxbmE\"]},\"@openzeppelin/contracts/token/ERC1155/ERC1155Receiver.sol\":{\"keccak256\":\"0xfce008c2ddf19a62e29e056fdddfa10204b19417ae0f711913703e4ee9dec92c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://37a7bb9249c0e8aaecd0c6f33fae7f03d15aebb015f5f7f1face393cfd58d75b\",\"dweb:/ipfs/QmevqbHb43sTLnpWzrGW9WvWvktMzuP5EzYHhqZox2A5v3\"]},\"@openzeppelin/contracts/token/ERC1155/IERC1155.sol\":{\"keccak256\":\"0x61321d2c86346045bf394885ee3afeecc65f9daad2694bc19110967588fd7b5d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1703b877203e0447ede72dcf73f1c4f2089b415bd1c44877904128a64fafed5b\",\"dweb:/ipfs/QmaZoYDo2FWtKcwCc9zuabU6zri8KV9xJrhU614d93sLid\"]},\"@openzeppelin/contracts/token/ERC1155/IERC1155MetadataURI.sol\":{\"keccak256\":\"0xd918cca1b659f588a6d12d05fd7196179a8b1eac9133d7f77da7ef3133e13256\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7c75d578f42e2e2e427b934e6c41cc759be2d0a52155868308e915328c8feb2b\",\"dweb:/ipfs/QmbFNHtWAoNhe82Hy6yKTePWJRczqzp1APSBfLS9XfAN6e\"]},\"@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol\":{\"keccak256\":\"0x2690a9b7f4f7489b8d25a4fc6bffc02ec3971fb41ed6c8b59adef2833bdab07c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8148c99452b6793ac9599abdc8bdaf4eeb47f34590beea8aa01089be14e2990c\",\"dweb:/ipfs/QmNdenmZ4EDfH9TuBas3pHeGuZvDNo2rsfgUj6ka8vuH37\"]},\"@openzeppelin/contracts/token/ERC721/ERC721.sol\":{\"keccak256\":\"0x5a3de7f7f76e47a071195cf42e2a702265694a6b32037de709463bd8ad784fb5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://678cbad1f972a4d8c9d47bc39fa6d39560b4fc143c8d9c812a63fe99bb13062e\",\"dweb:/ipfs/QmUhLDvUndcbQLakDNg9G4UXz8UPzRqC6S3rWGKupB6DYs\"]},\"@openzeppelin/contracts/token/ERC721/ERC721Holder.sol\":{\"keccak256\":\"0xdb2133d55b8f3a94313af8f4371ae0501a58e412d471b03d8581214c5ea2ce33\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cea1e4bf769f27c8c9c1442f1518b49ef6c8b71a4bd4ce88353da9e9a8ba1704\",\"dweb:/ipfs/QmR1b8sj7fxgeHqDksV4GYTjZS1qajWC3yg9VCMUJus2bF\"]},\"@openzeppelin/contracts/token/ERC721/IERC721.sol\":{\"keccak256\":\"0x5a9f5c29bd7cf0b345e14d97d5f685f68c07e1e5bfdd47e5bcec045e81b0b6ac\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://321cbaa1412fc8d013d8ad3fb5f98c0db7401ddacfb09b70828ea2cebe37397e\",\"dweb:/ipfs/Qmd3Hoc71w6rmxAR6A5VKW9at677VP1L5KDcJnyvu4ksu3\"]},\"@openzeppelin/contracts/token/ERC721/IERC721Enumerable.sol\":{\"keccak256\":\"0xe6bd1b1218338b6f9fe17776f48623b4ac3d8a40405f74a44bc23c00abe2ca13\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0c354c3f6e9c487759aa7869be4fba68e0b2efc777b514d289c4cbd3ff8f7e1a\",\"dweb:/ipfs/QmdF9LcSYVmiUCL7JxLEYmSLrjga6zJsujfi6sgEJD4M1z\"]},\"@openzeppelin/contracts/token/ERC721/IERC721Metadata.sol\":{\"keccak256\":\"0xccb917776f826ac6b68bd5a15a5f711e3967848a52ba11e6104d9a4f593314a7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://430255ad2229ced6d880e61a67bdc6e48dbbaed8354a7c1fe918cd8b8714a886\",\"dweb:/ipfs/QmTHY56odzqEpEC6v6tafaWMYY7vmULw25q5XHJLCCAeox\"]},\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0x52146049d6709c870e8ddcd988b5155cb6c5d640cfcd8978aee52bc1ba2ec4eb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ada84513617b7c1b2f890b44503735abaec73a1acd030112a17aac7e6c66a4a1\",\"dweb:/ipfs/QmaiFwdio67iJrfjAdkMac24eJ5sS1qD7CZW6PhUU6KjiK\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xa6a15ddddcbf29d2922a1e0d4151b5d2d33da24b93cc9ebc12390e0d855532f8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7c119bcaecfa853d564ac88d312777f75fa1126a3bca88a3371adb0ad9f35cb0\",\"dweb:/ipfs/QmY9UPuXeSKq86Zh38fE43VGQPhKMN34mkuFSFqPcr6nvZ\"]},\"@openzeppelin/contracts/utils/EnumerableMap.sol\":{\"keccak256\":\"0xf6bdf22fe038e5310b6f0372ecd01f221e2c0b248b45efc404542d94fcac9133\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e798f3492180627d6616fa94925b61a9f105347eed9e895f3e18a0eb3dfcd3d\",\"dweb:/ipfs/QmQcTro5nv3Lopf4c4rEe1BuykCfPsjRsJmysdNXtHNUdt\"]},\"@openzeppelin/contracts/utils/EnumerableSet.sol\":{\"keccak256\":\"0xae0992eb1ec30fd1ecdf2e04a6036decfc9797bf11dc1ec84b546b74318d5ec2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3b61f99a64e999682ad7bfbb3a1c762a20a0a5b30f9f2011693fa857969af61f\",\"dweb:/ipfs/QmZystFY76wkWCf7V3yKh3buZuKVKbswiE7y6yU62kk3zi\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x16b5422892fbdd9648f12e59de85b42efd57d76b6d6b2358cb46e0f6d4a71aaf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ef38821a4ee756757dc1ce9074ef6096d1b5c760627e92c0852d788dc636ea7\",\"dweb:/ipfs/QmdGwP6BtRMcp4VVJUWwTmXEjYmL52A8WZpBdFJYmzc9pJ\"]},\"abdk-libraries-solidity/ABDKMath64x64.sol\":{\"keccak256\":\"0x67609bc0923563d05d3a8a7c681056f9702a92120777cb0bcbb40d0afbb4a015\",\"license\":\"BSD-4-Clause\",\"urls\":[\"bzz-raw://55e817969394d4e0201a8cd3763ad6776bc9fddc986febe9b4acf120e8b7ad0d\",\"dweb:/ipfs/QmNMve5ZjUfA8DJYic4sYTrDEAN6VyxcC7jWUTX25Wmnnp\"]}},\"version\":1}",
  "bytecode": "0x60806040523480156200001157600080fd5b5060405162004b4438038062004b44833981810160405260408110156200003757600080fd5b8151602083018051604051929492938301929190846401000000008211156200005f57600080fd5b9083019060208201858111156200007557600080fd5b82516401000000008111828201881017156200009057600080fd5b82525081516020918201929091019080838360005b83811015620000bf578181015183820152602001620000a5565b50505050905090810190601f168015620000ed5780820380516001836020036101000a031916815260200191505b506040525082915081905080806200010c6301ffc9a760e01b6200018c565b620001178162000211565b62000129636cdb3d1360e11b6200018c565b6200013b6303a24d0760e21b6200018c565b50620001509050630271189760e51b6200018c565b62000162632d94347160e11b6200018c565b5050601080546001600160a01b0319166001600160a01b03939093169290921790915550620002d6565b6001600160e01b03198082161415620001ec576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152602081905260409020805460ff19166001179055565b8051620002269060039060208401906200022a565b5050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620002625760008555620002ad565b82601f106200027d57805160ff1916838001178555620002ad565b82800160010185558215620002ad579182015b82811115620002ad57825182559160200191906001019062000290565b50620002bb929150620002bf565b5090565b5b80821115620002bb5760008155600101620002c0565b61485e80620002e66000396000f3fe608060405234801561001057600080fd5b50600436106102c75760003560e01c8063789908e91161017b578063bd85b039116100d8578063ee066ef61161008c578063f242432a11610071578063f242432a1461126f578063f52f368d14611311578063f59407b41461134a576102c7565b8063ee066ef61461117a578063f23a6e6114611197576102c7565b8063dbc0a675116100bd578063dbc0a675146110bf578063e985e9c5146110e6578063ebf38ffb14611121576102c7565b8063bd85b0391461105f578063c3dcfd411461107c576102c7565b80639ea529671161012f578063adde70c411610114578063adde70c414610dd6578063b1ece8df14610e83578063bc197c8114610e8b576102c7565b80639ea5296714610d7e578063a22cb46514610d9b576102c7565b8063914b5b5911610160578063914b5b5914610bdc578063922aac9c14610caf57806392d2a6bc14610d57576102c7565b8063789908e914610ba7578063837b0f8414610bd4576102c7565b80632eb2c2d61161022957806356c742dc116101dd5780636695821f116101c25780636695821f14610b2057806368e22f5614610b595780637707444814610b80576102c7565b806356c742dc14610ab357806361fbc14a14610b03576102c7565b806334fc81c41161020e57806334fc81c4146108f057806347a2fd8d146109175780634e1273f41461093c576102c7565b80632eb2c2d6146106fc5780632ef0ce7814610836576102c7565b80630e89341c116102805780631830d83d116102655780631830d83d1461068f5780631f1b9c05146106ac57806328eb7087146106df576102c7565b80630e89341c146104f5578063150b7a0214610587576102c7565b806301ffc9a7116102b157806301ffc9a71461035057806305096f25146103a35780630cbba89c14610448576102c7565b8062fdd58e146102cc57806301a983df14610317575b600080fd5b610305600480360360408110156102e257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611377565b60408051918252519081900360200190f35b6103056004803603604081101561032d57600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff1661141d565b61038f6004803603602081101561036657600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661143a565b604080519115158252519081900360200190f35b610446600480360360808110156103b957600080fd5b73ffffffffffffffffffffffffffffffffffffffff8235169160208101359167ffffffffffffffff604083013516919081019060808101606082013564010000000081111561040757600080fd5b82018360208201111561041957600080fd5b8035906020019184600183028401116401000000008311171561043b57600080fd5b509092509050611471565b005b6104466004803603604081101561045e57600080fd5b8135919081019060408101602082013564010000000081111561048057600080fd5b82018360208201111561049257600080fd5b803590602001918460018302840111640100000000831117156104b457600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061157f945050505050565b6105126004803603602081101561050b57600080fd5b503561178d565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561054c578181015183820152602001610534565b50505050905090810190601f1680156105795780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61065a6004803603608081101561059d57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8235811692602081013590911691604082013591908101906080810160608201356401000000008111156105e557600080fd5b8201836020820111156105f757600080fd5b8035906020019184600183028401116401000000008311171561061957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611843945050505050565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b610305600480360360208110156106a557600080fd5b503561186c565b610446600480360360608110156106c257600080fd5b5067ffffffffffffffff813516906020810135906040013561187e565b610305600480360360208110156106f557600080fd5b50356119e6565b610446600480360360a081101561071257600080fd5b73ffffffffffffffffffffffffffffffffffffffff823581169260208101359091169181019060608101604082013564010000000081111561075357600080fd5b82018360208201111561076557600080fd5b8035906020019184602083028401116401000000008311171561078757600080fd5b9193909290916020810190356401000000008111156107a557600080fd5b8201836020820111156107b757600080fd5b803590602001918460208302840111640100000000831117156107d957600080fd5b9193909290916020810190356401000000008111156107f757600080fd5b82018360208201111561080957600080fd5b8035906020019184600183028401116401000000008311171561082b57600080fd5b5090925090506119f8565b610446600480360360e081101561084c57600080fd5b73ffffffffffffffffffffffffffffffffffffffff823581169260208101359267ffffffffffffffff60408301351692606083013592608081013582169260a08201359092169181019060e0810160c08201356401000000008111156108b157600080fd5b8201836020820111156108c357600080fd5b803590602001918460018302840111640100000000831117156108e557600080fd5b509092509050611ad5565b6103056004803603602081101561090657600080fd5b503567ffffffffffffffff16611d38565b61091f611d54565b6040805167ffffffffffffffff9092168252519081900360200190f35b610a636004803603604081101561095257600080fd5b81019060208101813564010000000081111561096d57600080fd5b82018360208201111561097f57600080fd5b803590602001918460208302840111640100000000831117156109a157600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092959493602081019350359150506401000000008111156109f157600080fd5b820183602082011115610a0357600080fd5b80359060200191846020830284011164010000000083111715610a2557600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611d70945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610a9f578181015183820152602001610a87565b505050509050019250505060405180910390f35b610ada60048036036020811015610ac957600080fd5b503567ffffffffffffffff16611f56565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b610ada60048036036020811015610b1957600080fd5b5035611f88565b61030560048036036040811015610b3657600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff16611fb0565b61044660048036036020811015610b6f57600080fd5b503567ffffffffffffffff16611fcd565b61030560048036036020811015610b9657600080fd5b503567ffffffffffffffff166120d8565b61030560048036036040811015610bbd57600080fd5b5067ffffffffffffffff81351690602001356120ea565b61091f612113565b61044660048036036060811015610bf257600080fd5b67ffffffffffffffff8235169190810190604081016020820135640100000000811115610c1e57600080fd5b820183602082011115610c3057600080fd5b80359060200191846020830284011164010000000083111715610c5257600080fd5b919390929091602081019035640100000000811115610c7057600080fd5b820183602082011115610c8257600080fd5b80359060200191846020830284011164010000000083111715610ca457600080fd5b509092509050612123565b610446600480360360a0811015610cc557600080fd5b73ffffffffffffffffffffffffffffffffffffffff8235169160208101359167ffffffffffffffff6040830135169160608101359181019060a081016080820135640100000000811115610d1857600080fd5b820183602082011115610d2a57600080fd5b80359060200191846001830284011164010000000083111715610d4c57600080fd5b5090925090506123b4565b61038f60048036036020811015610d6d57600080fd5b503567ffffffffffffffff1661267c565b61030560048036036020811015610d9457600080fd5b503561269b565b61044660048036036040811015610db157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013515156126ad565b61030560048036036040811015610dec57600080fd5b81359190810190604081016020820135640100000000811115610e0e57600080fd5b820183602082011115610e2057600080fd5b80359060200191846001830284011164010000000083111715610e4257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612808945050505050565b610ada61281b565b61065a600480360360a0811015610ea157600080fd5b73ffffffffffffffffffffffffffffffffffffffff8235811692602081013590911691810190606081016040820135640100000000811115610ee257600080fd5b820183602082011115610ef457600080fd5b80359060200191846020830284011164010000000083111715610f1657600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050640100000000811115610f6657600080fd5b820183602082011115610f7857600080fd5b80359060200191846020830284011164010000000083111715610f9a57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050640100000000811115610fea57600080fd5b820183602082011115610ffc57600080fd5b8035906020019184600183028401116401000000008311171561101e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612837945050505050565b6103056004803603602081101561107557600080fd5b5035612861565b6104466004803603604081101561109257600080fd5b50803573ffffffffffffffffffffffffffffffffffffffff16906020013567ffffffffffffffff16612873565b610305600480360360208110156110d557600080fd5b503567ffffffffffffffff16612999565b61038f600480360360408110156110fc57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166129b5565b610305600480360360a081101561113757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359167ffffffffffffffff60408301351691606081013591608090910135166129f0565b6103056004803603602081101561119057600080fd5b5035612a1b565b61065a600480360360a08110156111ad57600080fd5b73ffffffffffffffffffffffffffffffffffffffff823581169260208101359091169160408201359160608101359181019060a0810160808201356401000000008111156111fa57600080fd5b82018360208201111561120c57600080fd5b8035906020019184600183028401116401000000008311171561122e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612a2d945050505050565b610446600480360360a081101561128557600080fd5b73ffffffffffffffffffffffffffffffffffffffff823581169260208101359091169160408201359160608101359181019060a0810160808201356401000000008111156112d257600080fd5b8201836020820111156112e457600080fd5b8035906020019184600183028401116401000000008311171561130657600080fd5b509092509050612a57565b61038f6004803603604081101561132757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135612aac565b6104466004803603604081101561136057600080fd5b5067ffffffffffffffff8135169060200135612ae4565b600073ffffffffffffffffffffffffffffffffffffffff83166113e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b81526020018061469b602b913960400191505060405180910390fd5b50600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091529020545b92915050565b600a60209081526000928352604080842090915290825290205481565b7fffffffff000000000000000000000000000000000000000000000000000000001660009081526020819052604090205460ff1690565b600061147e868686612ba1565b9050600061148c8787612c24565b9050600061154061149d3084611377565b604080517efdd58e000000000000000000000000000000000000000000000000000000008152306004820152602481018b9052905173ffffffffffffffffffffffffffffffffffffffff8c169162fdd58e916044808301926020929190829003018186803b15801561150e57600080fd5b505afa158015611522573d6000803e3d6000fd5b505050506040513d602081101561153857600080fd5b505190612c7b565b9050600061154e3084611377565b6115583086611377565b83028161156157fe5b0490506115748989898430308c8c611ad5565b505050505050505050565b8161158981612cbd565b801561159457508015155b80156115a457506115a481612ccb565b61160f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4f6e6c7920666f7220746865206c6173742073616c61727920746f6b656e2e00604482015290519081900360640190fd5b6000838152601260205260409020548061168a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f596f7520617265206e6f7420726567697374657265642e000000000000000000604482015290519081900360640190fd5b600084815260146020526040902054670de0b6b3a76400004283900302906116b59033908387612ceb565b426012600087815260200190815260200160002081905550843373ffffffffffffffffffffffffffffffffffffffff167fc90c562994ec9ecaf5aa16faa5c6c70b7d24049b12d49796f49b5b1d3d42a24a83876040518083815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561174b578181015183820152602001611733565b50505050905090810190601f1680156117785780820380516001836020036101000a031916815260200191505b50935050505060405180910390a35050505050565b60038054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156118375780601f1061180c57610100808354040283529160200191611837565b820191906000526020600020905b81548152906001019060200180831161181a57829003601f168201915b50505050509050919050565b7f150b7a0200000000000000000000000000000000000000000000000000000000949350505050565b60126020526000908152604090205481565b67ffffffffffffffff8316600090815260066020526040902054839073ffffffffffffffffffffffffffffffffffffffff16331461191d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4e6f7420746865206f7261636c65206f776e65722e0000000000000000000000604482015290519081900360640190fd5b836119278161267c565b1561199357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f7261636c652069732066696e69736865642e00000000000000000000000000604482015290519081900360640190fd5b61199e858486612d9a565b604080518481529051859167ffffffffffffffff8816917f44a2b4e2bb6268fa3953b60953d3ffaca7ea60812d3a68e03fd99b6893d32f7f9181900360200190a35050505050565b60136020526000908152604090205481565b60005b85811015611a2757611a1f878783818110611a1257fe5b905060200201358a612e15565b6001016119fb565b50611acb888888888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808c0282810182019093528b82529093508b92508a91829185019084908082843760009201919091525050604080516020601f8b018190048102820181019092528981529250899150889081908401838280828437600092019190915250612ea392505050565b5050505050505050565b6000611ae2898989612ba1565b9050611b2684828886868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061317f92505050565b6000611b328a8a612c24565b9050611b7685828987878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061317f92505050565b8573ffffffffffffffffffffffffffffffffffffffff16898b73ffffffffffffffffffffffffffffffffffffffff167fe29f51ae5c82c0500c7c66f9ab40c2f68e940a624c8ba42e287ee98eeced4e378a898989604051808581526020018473ffffffffffffffffffffffffffffffffffffffff168152602001806020018281038252848482818152602001925080828437600083820152604051601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920182900397509095505050505050a48973ffffffffffffffffffffffffffffffffffffffff1663f242432a87308c8b89896040518763ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050975050505050505050600060405180830381600087803b158015611d1457600080fd5b505af1158015611d28573d6000803e3d6000fd5b5050505050505050505050505050565b67ffffffffffffffff1660009081526007602052604090205490565b60055468010000000000000000900467ffffffffffffffff1681565b60608151835114611dcc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806147df6029913960400191505060405180910390fd5b6000835167ffffffffffffffff81118015611de657600080fd5b50604051908082528060200260200182016040528015611e10578160200160208202803683370190505b50905060005b8451811015611f4e57600073ffffffffffffffffffffffffffffffffffffffff16858281518110611e4357fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415611eb8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806146c66031913960400191505060405180910390fd5b60016000858381518110611ec857fe5b602002602001015181526020019081526020016000206000868381518110611eec57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054828281518110611f3b57fe5b6020908102919091010152600101611e16565b509392505050565b67ffffffffffffffff1660009081526006602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b600c6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b600960209081526000928352604080842090915290825290205481565b67ffffffffffffffff8116600090815260066020526040902054819073ffffffffffffffffffffffffffffffffffffffff16331461206c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4e6f7420746865206f7261636c65206f776e65722e0000000000000000000000604482015290519081900360640190fd5b67ffffffffffffffff82166000818152600d602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517f88ed9118615ffe36496d032760017d3855c5093cbbf7fdb20dd99a4fcc66fe6d9190a25050565b600b6020526000908152604090205481565b67ffffffffffffffff919091166000908152600e60209081526040808320938352929052205490565b60055467ffffffffffffffff1681565b67ffffffffffffffff8516600090815260066020526040902054859073ffffffffffffffffffffffffffffffffffffffff1633146121c257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4e6f7420746865206f7261636c65206f776e65722e0000000000000000000000604482015290519081900360640190fd5b856121cc8161267c565b1561223857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f7261636c652069732066696e69736865642e00000000000000000000000000604482015290519081900360640190fd5b8483146122a657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f4c656e677468206d69736d617463682e00000000000000000000000000000000604482015290519081900360640190fd5b60005b858110156122fc576122f4888686848181106122c157fe5b905060200201358989858181106122d457fe5b9050602002013567ffffffffffffffff1667ffffffffffffffff16612d9a565b6001016122a9565b50858560405180838360200280828437808301925050509250505060405180910390208767ffffffffffffffff167f3a3975f17a5a0bcdd6052bff8c418bfc6511822e89e2dc3e3b8c0ce07b22220e868660405180806020018281038252848482818152602001925060200280828437600083820152604051601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018290039550909350505050a350505050505050565b6123bd8461267c565b61242857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f746f6f206561726c790000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60006124338561325d565b336000818152600860209081526040808320898452909152812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055919250819061248d908a908a908a908a908861327c565b91509150806000146124ec5760006124a483612861565b905083156124cd57600083815260096020908152604080832033845290915290208190556124ea565b6000838152600a6020908152604080832033845290915290208190555b505b826125305767ffffffffffffffff87166000908152600b60205260409020546125159082613381565b67ffffffffffffffff88166000908152600b60205260409020555b8873ffffffffffffffffffffffffffffffffffffffff1663f242432a30338b858a8a6040518763ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050975050505050505050600060405180830381600087803b1580156125fb57600080fd5b505af115801561260f573d6000803e3d6000fd5b50506040805133815260208101859052815167ffffffffffffffff8c1694508c935073ffffffffffffffffffffffffffffffffffffffff8e16927f72d4fd47a9fbaff0f6860417149191d0520595c12e2f7d4828bac210e6ad3dbc928290030190a4505050505050505050565b67ffffffffffffffff166000908152600d602052604090205460ff1690565b60146020526000908152604090205481565b8173ffffffffffffffffffffffffffffffffffffffff166126cc6133f5565b73ffffffffffffffffffffffffffffffffffffffff161415612739576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806147876029913960400191505060405180910390fd5b80600260006127466133f5565b73ffffffffffffffffffffffffffffffffffffffff90811682526020808301939093526040918201600090812091871680825291909352912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016921515929092179091556127b56133f5565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b600061281483836133fa565b9392505050565b60105473ffffffffffffffffffffffffffffffffffffffff1681565b7fbc197c810000000000000000000000000000000000000000000000000000000095945050505050565b60009081526004602052604090205490565b67ffffffffffffffff8116600090815260066020526040902054819073ffffffffffffffffffffffffffffffffffffffff16331461291257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4e6f7420746865206f7261636c65206f776e65722e0000000000000000000000604482015290519081900360640190fd5b67ffffffffffffffff821660008181526006602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8816908117909155905190917f74793e794a02a6a170c6c9946770eee45a5b771297549c7a134b186d7004f2d491a3505050565b67ffffffffffffffff166000908152600f602052604090205490565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020908152604080832093909416825291909152205460ff1690565b6000806129fc8561325d565b90506000612a0e88888888888761327c565b9998505050505050505050565b60116020526000908152604090205481565b7ff23a6e610000000000000000000000000000000000000000000000000000000095945050505050565b612a618487612e15565b612aa48686868686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061369b92505050565b505050505050565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600860209081526040808320938352929052205460ff1690565b67ffffffffffffffff8216600090815260066020526040902054829073ffffffffffffffffffffffffffffffffffffffff163314612b8357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4e6f7420746865206f7261636c65206f776e65722e0000000000000000000000604482015290519081900360640190fd5b5067ffffffffffffffff909116600090815260076020526040902055565b6040805160609490941b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602080860191909152603485019390935260c09190911b7fffffffffffffffff0000000000000000000000000000000000000000000000001660548401528051808403603c018152605c9093019052815191012090565b6040805160609390931b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166020808501919091526034808501939093528151808503909301835260549093019052805191012090565b600061281483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613853565b680100000000000000001190565b600081815260136020908152604080832054835260149091529020541490565b6000838152600c602052604090205473ffffffffffffffffffffffffffffffffffffffff858116911614612d8057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4f7468657227732073616c6172792067657420617474656d70742e0000000000604482015290519081900360640190fd5b612d94612d8c856133f7565b84848461317f565b50505050565b67ffffffffffffffff83166000818152600e60209081526040808320858452825280832054938352600f909152902054612ddf9190612dd99085613381565b90612c7b565b67ffffffffffffffff9093166000908152600f6020908152604080832095909555600e8152848220928252919091529190912055565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260086020908152604080832085845290915290205460ff1615612e9f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806146f76030913960400191505060405180910390fd5b5050565b8151835114612efd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001806147b0602f913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8416612f69576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806147276028913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8516331480612fc2575073ffffffffffffffffffffffffffffffffffffffff8516600090815260026020908152604080832033845290915290205460ff1615156001145b613017576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603881526020018061474f6038913960400191505060405180910390fd5b60005b835181101561306957600084828151811061303157fe5b60200260200101519050600084838151811061304957fe5b6020026020010151905061305f82898984613904565b505060010161301a565b508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156131165781810151838201526020016130fe565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561315557818101518382015260200161313d565b5050505090500194505050505060405180910390a46131783386868686866139ee565b5050505050565b73ffffffffffffffffffffffffffffffffffffffff84166131eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806148086021913960400191505060405180910390fd5b6131f6848484613d20565b6040805184815260208101849052815173ffffffffffffffffffffffffffffffffffffffff87169260009233927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62929181900390910190a4612d9433600086868686613d80565b67ffffffffffffffff1660009081526007602052604090205442111590565b600080600061328b8587611377565b90506000846132b35767ffffffffffffffff88166000908152600b60205260409020546132bc565b6132bc87612861565b90506132c98a8a8a612ba1565b935060006132d78383613f70565b9050600086613315576000868152600a6020908152604080832073ffffffffffffffffffffffffffffffffffffffff8c168452909152902054613346565b600086815260096020908152604080832073ffffffffffffffffffffffffffffffffffffffff8c1684529091529020545b61334f87612861565b039050600061335f8b8b85613fb9565b905061336f600f82900b83613fdf565b95505050505050965096945050505050565b60008282018381101561281457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b335b90565b60008261340681612cbd565b801561341157508015155b8015613421575061342181614061565b61348c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4f6e6c7920666f7220746865206c6173742073616c61727920746f6b656e2e00604482015290519081900360640190fd5b601054604080517f6352211e00000000000000000000000000000000000000000000000000000000815260048101879052905160009273ffffffffffffffffffffffffffffffffffffffff1691636352211e916024808301926020929190829003018186803b1580156134fe57600080fd5b505afa158015613512573d6000803e3d6000fd5b505050506040513d602081101561352857600080fd5b50516000868152601460205260408120549192506135468387614074565b60008181526013602090815260408083208b9055858352600180835281842073ffffffffffffffffffffffffffffffffffffffff8916808652818552838620805488885293865284872082885286528487208490559185529085905582518d815293840182905282519596509094909233927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6292918290030190a46040805183815260208101839052815173ffffffffffffffffffffffffffffffffffffffff87169260009233927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62929181900390910190a460008881526012602052604080822054848352818320555183918a9173ffffffffffffffffffffffffffffffffffffffff8816917f336d2bb69144fc71fe04e0e4a9b896f65406408bfb116e35ac52c15d0e477ce091a4509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff8416613707576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806147276028913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8516331480613760575073ffffffffffffffffffffffffffffffffffffffff8516600090815260026020908152604080832033845290915290205460ff1615156001145b6137b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603881526020018061474f6038913960400191505060405180910390fd5b6137c183868685613904565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628686604051808381526020018281526020019250505060405180910390a4613178338686868686613d80565b600081848411156138fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156138c15781810151838201526020016138a9565b50505050905090810190601f1680156138ee5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b61391084848484614142565b83158015906139cf5750601054604080517f6352211e000000000000000000000000000000000000000000000000000000008152600481018790529051339273ffffffffffffffffffffffffffffffffffffffff1691636352211e916024808301926020929190829003018186803b15801561398b57600080fd5b505afa15801561399f573d6000803e3d6000fd5b505050506040513d60208110156139b557600080fd5b505173ffffffffffffffffffffffffffffffffffffffff16145b15612d945760606139df85612ccb565b1561317857612aa485826133fa565b613a0d8473ffffffffffffffffffffffffffffffffffffffff166141f8565b15612aa4578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff168152602001806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b83811015613ac2578181015183820152602001613aaa565b50505050905001848103835286818151815260200191508051906020019060200280838360005b83811015613b01578181015183820152602001613ae9565b50505050905001848103825285818151815260200191508051906020019080838360005b83811015613b3d578181015183820152602001613b25565b50505050905090810190601f168015613b6a5780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b158015613b8f57600080fd5b505af1925050508015613bb457506040513d6020811015613baf57600080fd5b505160015b613c7d57613bc061455d565b80613bcb5750613c2c565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482018181528351602484015283518493919283926044019190850190808383600083156138c15781810151838201526020016138a9565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603481526020018061463f6034913960400191505060405180910390fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081167fbc197c810000000000000000000000000000000000000000000000000000000014613d17576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806146736028913960400191505060405180910390fd5b50505050505050565b600082815260046020526040902054613d399082613381565b6000928352600460209081526040808520929092556001815281842073ffffffffffffffffffffffffffffffffffffffff9590951684529390935291902080549091019055565b613d9f8473ffffffffffffffffffffffffffffffffffffffff166141f8565b15612aa4578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015613e55578181015183820152602001613e3d565b50505050905090810190601f168015613e825780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b158015613ea557600080fd5b505af1925050508015613eca57506040513d6020811015613ec557600080fd5b505160015b613ed657613bc061455d565b7fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e610000000000000000000000000000000000000000000000000000000014613d17576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806146736028913960400191505060405180910390fd5b600081613f7c57600080fd5b6000613f8884846141fe565b90506f7fffffffffffffffffffffffffffffff6fffffffffffffffffffffffffffffffff8216111561281457600080fd5b600080613fc68585614374565b9050613fd6600f84900b826143b1565b95945050505050565b600081613fee57506000611417565b600083600f0b1215613fff57600080fd5b600f83900b6fffffffffffffffffffffffffffffffff8316810260401c90608084901c0277ffffffffffffffffffffffffffffffffffffffffffffffff81111561404857600080fd5b60401b811981111561405957600080fd5b019392505050565b6000818152601360205260409020541490565b6000806140818484614409565b600081815260116020908152604080832042905560138252808320849055601490915280822083905560105481517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff89811660048301526024820186905292519495509116926340c10f199260448084019391929182900301818387803b15801561412257600080fd5b505af1158015614136573d6000803e3d6000fd5b50929695505050505050565b600084815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915290205461417c9082612c7b565b600085815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff88811685529252808320939093558416815220546141c1908290613381565b600094855260016020908152604080872073ffffffffffffffffffffffffffffffffffffffff909516875293905291909320555050565b3b151590565b60008161420a57600080fd5b600077ffffffffffffffffffffffffffffffffffffffffffffffff84116142405782604085901b8161423857fe5b049050614357565b60c084811c6401000000008110614259576020918201911c5b62010000811061426b576010918201911c5b610100811061427c576008918201911c5b6010811061428c576004918201911c5b6004811061429c576002918201911c5b600281106142ab576001820191505b60bf820360018603901c6001018260ff0387901b816142c657fe5b0492506fffffffffffffffffffffffffffffffff8311156142e657600080fd5b608085901c83026fffffffffffffffffffffffffffffffff8616840260c088901c604089901b8281101561431b576001820391505b608084901b92900382811015614332576001820391505b829003608084901c821461434257fe5b88818161434b57fe5b04870196505050505050505b6fffffffffffffffffffffffffffffffff81111561281457600080fd5b67ffffffffffffffff82166000818152600e60209081526040808320858452825280832054938352600f909152812054909190613fd68282613f70565b6000600f83810b9083900b0260401d7fffffffffffffffffffffffffffffffff80000000000000000000000000000000811280159061440057506f7fffffffffffffffffffffffffffffff8113155b61281457600080fd5b600580547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff8116680100000000000000009182900467ffffffffffffffff908116600101908116928302919091179092556000818152600c6020908152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff89169081179091558151838152875181850152875194969594919333937f6c8e9d3264b48d81c4edda219bc448cde54bdb7997ef1703a4bc9a803167cfce938a93928392830191908501908083838e5b8381101561450c5781810151838201526020016144f4565b50505050905090810190601f1680156145395780820380516001836020036101000a031916815260200191505b509250505060405180910390a467ffffffffffffffff169392505050565b60e01c90565b600060443d101561456d576133f7565b600481823e6308c379a06145818251614557565b1461458b576133f7565b6040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3d016004823e80513d67ffffffffffffffff81602484011181841117156145d957505050506133f7565b828401925082519150808211156145f357505050506133f7565b503d8301602082840101111561460b575050506133f7565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01681016020016040529150509056fe455243313135353a207472616e7366657220746f206e6f6e2045524331313535526563656976657220696d706c656d656e746572455243313135353a204552433131353552656365697665722072656a656374656420746f6b656e73455243313135353a2062616c616e636520717565727920666f7220746865207a65726f2061646472657373455243313135353a2062617463682062616c616e636520717565727920666f7220746865207a65726f2061646472657373596f752063616e277420747261646520636f6e646974696f6e616c20746f6b656e732061667465722072656465656d2e455243313135353a207461726765742061646472657373206d757374206265206e6f6e2d7a65726f455243313135353a206e656564206f70657261746f7220617070726f76616c20666f7220337264207061727479207472616e73666572732e455243313135353a2073657474696e6720617070726f76616c2073746174757320666f722073656c66455243313135353a2049447320616e64205f76616c756573206d75737420686176652073616d65206c656e67746873455243313135353a206163636f756e747320616e6420696473206c656e677468206d69736d61746368455243313135353a206d696e7420746f20746865207a65726f2061646472657373a26469706673582212206cf951dfc70baafdf4eac035ad8e2fe9c1a1378f7ea16c0bd632edef1414cb0964736f6c63430007060033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102c75760003560e01c8063789908e91161017b578063bd85b039116100d8578063ee066ef61161008c578063f242432a11610071578063f242432a1461126f578063f52f368d14611311578063f59407b41461134a576102c7565b8063ee066ef61461117a578063f23a6e6114611197576102c7565b8063dbc0a675116100bd578063dbc0a675146110bf578063e985e9c5146110e6578063ebf38ffb14611121576102c7565b8063bd85b0391461105f578063c3dcfd411461107c576102c7565b80639ea529671161012f578063adde70c411610114578063adde70c414610dd6578063b1ece8df14610e83578063bc197c8114610e8b576102c7565b80639ea5296714610d7e578063a22cb46514610d9b576102c7565b8063914b5b5911610160578063914b5b5914610bdc578063922aac9c14610caf57806392d2a6bc14610d57576102c7565b8063789908e914610ba7578063837b0f8414610bd4576102c7565b80632eb2c2d61161022957806356c742dc116101dd5780636695821f116101c25780636695821f14610b2057806368e22f5614610b595780637707444814610b80576102c7565b806356c742dc14610ab357806361fbc14a14610b03576102c7565b806334fc81c41161020e57806334fc81c4146108f057806347a2fd8d146109175780634e1273f41461093c576102c7565b80632eb2c2d6146106fc5780632ef0ce7814610836576102c7565b80630e89341c116102805780631830d83d116102655780631830d83d1461068f5780631f1b9c05146106ac57806328eb7087146106df576102c7565b80630e89341c146104f5578063150b7a0214610587576102c7565b806301ffc9a7116102b157806301ffc9a71461035057806305096f25146103a35780630cbba89c14610448576102c7565b8062fdd58e146102cc57806301a983df14610317575b600080fd5b610305600480360360408110156102e257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611377565b60408051918252519081900360200190f35b6103056004803603604081101561032d57600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff1661141d565b61038f6004803603602081101561036657600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661143a565b604080519115158252519081900360200190f35b610446600480360360808110156103b957600080fd5b73ffffffffffffffffffffffffffffffffffffffff8235169160208101359167ffffffffffffffff604083013516919081019060808101606082013564010000000081111561040757600080fd5b82018360208201111561041957600080fd5b8035906020019184600183028401116401000000008311171561043b57600080fd5b509092509050611471565b005b6104466004803603604081101561045e57600080fd5b8135919081019060408101602082013564010000000081111561048057600080fd5b82018360208201111561049257600080fd5b803590602001918460018302840111640100000000831117156104b457600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061157f945050505050565b6105126004803603602081101561050b57600080fd5b503561178d565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561054c578181015183820152602001610534565b50505050905090810190601f1680156105795780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61065a6004803603608081101561059d57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8235811692602081013590911691604082013591908101906080810160608201356401000000008111156105e557600080fd5b8201836020820111156105f757600080fd5b8035906020019184600183028401116401000000008311171561061957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611843945050505050565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b610305600480360360208110156106a557600080fd5b503561186c565b610446600480360360608110156106c257600080fd5b5067ffffffffffffffff813516906020810135906040013561187e565b610305600480360360208110156106f557600080fd5b50356119e6565b610446600480360360a081101561071257600080fd5b73ffffffffffffffffffffffffffffffffffffffff823581169260208101359091169181019060608101604082013564010000000081111561075357600080fd5b82018360208201111561076557600080fd5b8035906020019184602083028401116401000000008311171561078757600080fd5b9193909290916020810190356401000000008111156107a557600080fd5b8201836020820111156107b757600080fd5b803590602001918460208302840111640100000000831117156107d957600080fd5b9193909290916020810190356401000000008111156107f757600080fd5b82018360208201111561080957600080fd5b8035906020019184600183028401116401000000008311171561082b57600080fd5b5090925090506119f8565b610446600480360360e081101561084c57600080fd5b73ffffffffffffffffffffffffffffffffffffffff823581169260208101359267ffffffffffffffff60408301351692606083013592608081013582169260a08201359092169181019060e0810160c08201356401000000008111156108b157600080fd5b8201836020820111156108c357600080fd5b803590602001918460018302840111640100000000831117156108e557600080fd5b509092509050611ad5565b6103056004803603602081101561090657600080fd5b503567ffffffffffffffff16611d38565b61091f611d54565b6040805167ffffffffffffffff9092168252519081900360200190f35b610a636004803603604081101561095257600080fd5b81019060208101813564010000000081111561096d57600080fd5b82018360208201111561097f57600080fd5b803590602001918460208302840111640100000000831117156109a157600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092959493602081019350359150506401000000008111156109f157600080fd5b820183602082011115610a0357600080fd5b80359060200191846020830284011164010000000083111715610a2557600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611d70945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610a9f578181015183820152602001610a87565b505050509050019250505060405180910390f35b610ada60048036036020811015610ac957600080fd5b503567ffffffffffffffff16611f56565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b610ada60048036036020811015610b1957600080fd5b5035611f88565b61030560048036036040811015610b3657600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff16611fb0565b61044660048036036020811015610b6f57600080fd5b503567ffffffffffffffff16611fcd565b61030560048036036020811015610b9657600080fd5b503567ffffffffffffffff166120d8565b61030560048036036040811015610bbd57600080fd5b5067ffffffffffffffff81351690602001356120ea565b61091f612113565b61044660048036036060811015610bf257600080fd5b67ffffffffffffffff8235169190810190604081016020820135640100000000811115610c1e57600080fd5b820183602082011115610c3057600080fd5b80359060200191846020830284011164010000000083111715610c5257600080fd5b919390929091602081019035640100000000811115610c7057600080fd5b820183602082011115610c8257600080fd5b80359060200191846020830284011164010000000083111715610ca457600080fd5b509092509050612123565b610446600480360360a0811015610cc557600080fd5b73ffffffffffffffffffffffffffffffffffffffff8235169160208101359167ffffffffffffffff6040830135169160608101359181019060a081016080820135640100000000811115610d1857600080fd5b820183602082011115610d2a57600080fd5b80359060200191846001830284011164010000000083111715610d4c57600080fd5b5090925090506123b4565b61038f60048036036020811015610d6d57600080fd5b503567ffffffffffffffff1661267c565b61030560048036036020811015610d9457600080fd5b503561269b565b61044660048036036040811015610db157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013515156126ad565b61030560048036036040811015610dec57600080fd5b81359190810190604081016020820135640100000000811115610e0e57600080fd5b820183602082011115610e2057600080fd5b80359060200191846001830284011164010000000083111715610e4257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612808945050505050565b610ada61281b565b61065a600480360360a0811015610ea157600080fd5b73ffffffffffffffffffffffffffffffffffffffff8235811692602081013590911691810190606081016040820135640100000000811115610ee257600080fd5b820183602082011115610ef457600080fd5b80359060200191846020830284011164010000000083111715610f1657600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050640100000000811115610f6657600080fd5b820183602082011115610f7857600080fd5b80359060200191846020830284011164010000000083111715610f9a57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050640100000000811115610fea57600080fd5b820183602082011115610ffc57600080fd5b8035906020019184600183028401116401000000008311171561101e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612837945050505050565b6103056004803603602081101561107557600080fd5b5035612861565b6104466004803603604081101561109257600080fd5b50803573ffffffffffffffffffffffffffffffffffffffff16906020013567ffffffffffffffff16612873565b610305600480360360208110156110d557600080fd5b503567ffffffffffffffff16612999565b61038f600480360360408110156110fc57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166129b5565b610305600480360360a081101561113757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359167ffffffffffffffff60408301351691606081013591608090910135166129f0565b6103056004803603602081101561119057600080fd5b5035612a1b565b61065a600480360360a08110156111ad57600080fd5b73ffffffffffffffffffffffffffffffffffffffff823581169260208101359091169160408201359160608101359181019060a0810160808201356401000000008111156111fa57600080fd5b82018360208201111561120c57600080fd5b8035906020019184600183028401116401000000008311171561122e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612a2d945050505050565b610446600480360360a081101561128557600080fd5b73ffffffffffffffffffffffffffffffffffffffff823581169260208101359091169160408201359160608101359181019060a0810160808201356401000000008111156112d257600080fd5b8201836020820111156112e457600080fd5b8035906020019184600183028401116401000000008311171561130657600080fd5b509092509050612a57565b61038f6004803603604081101561132757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135612aac565b6104466004803603604081101561136057600080fd5b5067ffffffffffffffff8135169060200135612ae4565b600073ffffffffffffffffffffffffffffffffffffffff83166113e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b81526020018061469b602b913960400191505060405180910390fd5b50600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091529020545b92915050565b600a60209081526000928352604080842090915290825290205481565b7fffffffff000000000000000000000000000000000000000000000000000000001660009081526020819052604090205460ff1690565b600061147e868686612ba1565b9050600061148c8787612c24565b9050600061154061149d3084611377565b604080517efdd58e000000000000000000000000000000000000000000000000000000008152306004820152602481018b9052905173ffffffffffffffffffffffffffffffffffffffff8c169162fdd58e916044808301926020929190829003018186803b15801561150e57600080fd5b505afa158015611522573d6000803e3d6000fd5b505050506040513d602081101561153857600080fd5b505190612c7b565b9050600061154e3084611377565b6115583086611377565b83028161156157fe5b0490506115748989898430308c8c611ad5565b505050505050505050565b8161158981612cbd565b801561159457508015155b80156115a457506115a481612ccb565b61160f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4f6e6c7920666f7220746865206c6173742073616c61727920746f6b656e2e00604482015290519081900360640190fd5b6000838152601260205260409020548061168a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f596f7520617265206e6f7420726567697374657265642e000000000000000000604482015290519081900360640190fd5b600084815260146020526040902054670de0b6b3a76400004283900302906116b59033908387612ceb565b426012600087815260200190815260200160002081905550843373ffffffffffffffffffffffffffffffffffffffff167fc90c562994ec9ecaf5aa16faa5c6c70b7d24049b12d49796f49b5b1d3d42a24a83876040518083815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561174b578181015183820152602001611733565b50505050905090810190601f1680156117785780820380516001836020036101000a031916815260200191505b50935050505060405180910390a35050505050565b60038054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156118375780601f1061180c57610100808354040283529160200191611837565b820191906000526020600020905b81548152906001019060200180831161181a57829003601f168201915b50505050509050919050565b7f150b7a0200000000000000000000000000000000000000000000000000000000949350505050565b60126020526000908152604090205481565b67ffffffffffffffff8316600090815260066020526040902054839073ffffffffffffffffffffffffffffffffffffffff16331461191d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4e6f7420746865206f7261636c65206f776e65722e0000000000000000000000604482015290519081900360640190fd5b836119278161267c565b1561199357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f7261636c652069732066696e69736865642e00000000000000000000000000604482015290519081900360640190fd5b61199e858486612d9a565b604080518481529051859167ffffffffffffffff8816917f44a2b4e2bb6268fa3953b60953d3ffaca7ea60812d3a68e03fd99b6893d32f7f9181900360200190a35050505050565b60136020526000908152604090205481565b60005b85811015611a2757611a1f878783818110611a1257fe5b905060200201358a612e15565b6001016119fb565b50611acb888888888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808c0282810182019093528b82529093508b92508a91829185019084908082843760009201919091525050604080516020601f8b018190048102820181019092528981529250899150889081908401838280828437600092019190915250612ea392505050565b5050505050505050565b6000611ae2898989612ba1565b9050611b2684828886868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061317f92505050565b6000611b328a8a612c24565b9050611b7685828987878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061317f92505050565b8573ffffffffffffffffffffffffffffffffffffffff16898b73ffffffffffffffffffffffffffffffffffffffff167fe29f51ae5c82c0500c7c66f9ab40c2f68e940a624c8ba42e287ee98eeced4e378a898989604051808581526020018473ffffffffffffffffffffffffffffffffffffffff168152602001806020018281038252848482818152602001925080828437600083820152604051601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920182900397509095505050505050a48973ffffffffffffffffffffffffffffffffffffffff1663f242432a87308c8b89896040518763ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050975050505050505050600060405180830381600087803b158015611d1457600080fd5b505af1158015611d28573d6000803e3d6000fd5b5050505050505050505050505050565b67ffffffffffffffff1660009081526007602052604090205490565b60055468010000000000000000900467ffffffffffffffff1681565b60608151835114611dcc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806147df6029913960400191505060405180910390fd5b6000835167ffffffffffffffff81118015611de657600080fd5b50604051908082528060200260200182016040528015611e10578160200160208202803683370190505b50905060005b8451811015611f4e57600073ffffffffffffffffffffffffffffffffffffffff16858281518110611e4357fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415611eb8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806146c66031913960400191505060405180910390fd5b60016000858381518110611ec857fe5b602002602001015181526020019081526020016000206000868381518110611eec57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054828281518110611f3b57fe5b6020908102919091010152600101611e16565b509392505050565b67ffffffffffffffff1660009081526006602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b600c6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b600960209081526000928352604080842090915290825290205481565b67ffffffffffffffff8116600090815260066020526040902054819073ffffffffffffffffffffffffffffffffffffffff16331461206c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4e6f7420746865206f7261636c65206f776e65722e0000000000000000000000604482015290519081900360640190fd5b67ffffffffffffffff82166000818152600d602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517f88ed9118615ffe36496d032760017d3855c5093cbbf7fdb20dd99a4fcc66fe6d9190a25050565b600b6020526000908152604090205481565b67ffffffffffffffff919091166000908152600e60209081526040808320938352929052205490565b60055467ffffffffffffffff1681565b67ffffffffffffffff8516600090815260066020526040902054859073ffffffffffffffffffffffffffffffffffffffff1633146121c257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4e6f7420746865206f7261636c65206f776e65722e0000000000000000000000604482015290519081900360640190fd5b856121cc8161267c565b1561223857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f7261636c652069732066696e69736865642e00000000000000000000000000604482015290519081900360640190fd5b8483146122a657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f4c656e677468206d69736d617463682e00000000000000000000000000000000604482015290519081900360640190fd5b60005b858110156122fc576122f4888686848181106122c157fe5b905060200201358989858181106122d457fe5b9050602002013567ffffffffffffffff1667ffffffffffffffff16612d9a565b6001016122a9565b50858560405180838360200280828437808301925050509250505060405180910390208767ffffffffffffffff167f3a3975f17a5a0bcdd6052bff8c418bfc6511822e89e2dc3e3b8c0ce07b22220e868660405180806020018281038252848482818152602001925060200280828437600083820152604051601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018290039550909350505050a350505050505050565b6123bd8461267c565b61242857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f746f6f206561726c790000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60006124338561325d565b336000818152600860209081526040808320898452909152812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055919250819061248d908a908a908a908a908861327c565b91509150806000146124ec5760006124a483612861565b905083156124cd57600083815260096020908152604080832033845290915290208190556124ea565b6000838152600a6020908152604080832033845290915290208190555b505b826125305767ffffffffffffffff87166000908152600b60205260409020546125159082613381565b67ffffffffffffffff88166000908152600b60205260409020555b8873ffffffffffffffffffffffffffffffffffffffff1663f242432a30338b858a8a6040518763ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050975050505050505050600060405180830381600087803b1580156125fb57600080fd5b505af115801561260f573d6000803e3d6000fd5b50506040805133815260208101859052815167ffffffffffffffff8c1694508c935073ffffffffffffffffffffffffffffffffffffffff8e16927f72d4fd47a9fbaff0f6860417149191d0520595c12e2f7d4828bac210e6ad3dbc928290030190a4505050505050505050565b67ffffffffffffffff166000908152600d602052604090205460ff1690565b60146020526000908152604090205481565b8173ffffffffffffffffffffffffffffffffffffffff166126cc6133f5565b73ffffffffffffffffffffffffffffffffffffffff161415612739576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806147876029913960400191505060405180910390fd5b80600260006127466133f5565b73ffffffffffffffffffffffffffffffffffffffff90811682526020808301939093526040918201600090812091871680825291909352912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016921515929092179091556127b56133f5565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b600061281483836133fa565b9392505050565b60105473ffffffffffffffffffffffffffffffffffffffff1681565b7fbc197c810000000000000000000000000000000000000000000000000000000095945050505050565b60009081526004602052604090205490565b67ffffffffffffffff8116600090815260066020526040902054819073ffffffffffffffffffffffffffffffffffffffff16331461291257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4e6f7420746865206f7261636c65206f776e65722e0000000000000000000000604482015290519081900360640190fd5b67ffffffffffffffff821660008181526006602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8816908117909155905190917f74793e794a02a6a170c6c9946770eee45a5b771297549c7a134b186d7004f2d491a3505050565b67ffffffffffffffff166000908152600f602052604090205490565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020908152604080832093909416825291909152205460ff1690565b6000806129fc8561325d565b90506000612a0e88888888888761327c565b9998505050505050505050565b60116020526000908152604090205481565b7ff23a6e610000000000000000000000000000000000000000000000000000000095945050505050565b612a618487612e15565b612aa48686868686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061369b92505050565b505050505050565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600860209081526040808320938352929052205460ff1690565b67ffffffffffffffff8216600090815260066020526040902054829073ffffffffffffffffffffffffffffffffffffffff163314612b8357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4e6f7420746865206f7261636c65206f776e65722e0000000000000000000000604482015290519081900360640190fd5b5067ffffffffffffffff909116600090815260076020526040902055565b6040805160609490941b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602080860191909152603485019390935260c09190911b7fffffffffffffffff0000000000000000000000000000000000000000000000001660548401528051808403603c018152605c9093019052815191012090565b6040805160609390931b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166020808501919091526034808501939093528151808503909301835260549093019052805191012090565b600061281483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613853565b680100000000000000001190565b600081815260136020908152604080832054835260149091529020541490565b6000838152600c602052604090205473ffffffffffffffffffffffffffffffffffffffff858116911614612d8057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4f7468657227732073616c6172792067657420617474656d70742e0000000000604482015290519081900360640190fd5b612d94612d8c856133f7565b84848461317f565b50505050565b67ffffffffffffffff83166000818152600e60209081526040808320858452825280832054938352600f909152902054612ddf9190612dd99085613381565b90612c7b565b67ffffffffffffffff9093166000908152600f6020908152604080832095909555600e8152848220928252919091529190912055565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260086020908152604080832085845290915290205460ff1615612e9f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806146f76030913960400191505060405180910390fd5b5050565b8151835114612efd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001806147b0602f913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8416612f69576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806147276028913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8516331480612fc2575073ffffffffffffffffffffffffffffffffffffffff8516600090815260026020908152604080832033845290915290205460ff1615156001145b613017576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603881526020018061474f6038913960400191505060405180910390fd5b60005b835181101561306957600084828151811061303157fe5b60200260200101519050600084838151811061304957fe5b6020026020010151905061305f82898984613904565b505060010161301a565b508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156131165781810151838201526020016130fe565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561315557818101518382015260200161313d565b5050505090500194505050505060405180910390a46131783386868686866139ee565b5050505050565b73ffffffffffffffffffffffffffffffffffffffff84166131eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806148086021913960400191505060405180910390fd5b6131f6848484613d20565b6040805184815260208101849052815173ffffffffffffffffffffffffffffffffffffffff87169260009233927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62929181900390910190a4612d9433600086868686613d80565b67ffffffffffffffff1660009081526007602052604090205442111590565b600080600061328b8587611377565b90506000846132b35767ffffffffffffffff88166000908152600b60205260409020546132bc565b6132bc87612861565b90506132c98a8a8a612ba1565b935060006132d78383613f70565b9050600086613315576000868152600a6020908152604080832073ffffffffffffffffffffffffffffffffffffffff8c168452909152902054613346565b600086815260096020908152604080832073ffffffffffffffffffffffffffffffffffffffff8c1684529091529020545b61334f87612861565b039050600061335f8b8b85613fb9565b905061336f600f82900b83613fdf565b95505050505050965096945050505050565b60008282018381101561281457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b335b90565b60008261340681612cbd565b801561341157508015155b8015613421575061342181614061565b61348c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4f6e6c7920666f7220746865206c6173742073616c61727920746f6b656e2e00604482015290519081900360640190fd5b601054604080517f6352211e00000000000000000000000000000000000000000000000000000000815260048101879052905160009273ffffffffffffffffffffffffffffffffffffffff1691636352211e916024808301926020929190829003018186803b1580156134fe57600080fd5b505afa158015613512573d6000803e3d6000fd5b505050506040513d602081101561352857600080fd5b50516000868152601460205260408120549192506135468387614074565b60008181526013602090815260408083208b9055858352600180835281842073ffffffffffffffffffffffffffffffffffffffff8916808652818552838620805488885293865284872082885286528487208490559185529085905582518d815293840182905282519596509094909233927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6292918290030190a46040805183815260208101839052815173ffffffffffffffffffffffffffffffffffffffff87169260009233927fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62929181900390910190a460008881526012602052604080822054848352818320555183918a9173ffffffffffffffffffffffffffffffffffffffff8816917f336d2bb69144fc71fe04e0e4a9b896f65406408bfb116e35ac52c15d0e477ce091a4509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff8416613707576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806147276028913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8516331480613760575073ffffffffffffffffffffffffffffffffffffffff8516600090815260026020908152604080832033845290915290205460ff1615156001145b6137b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603881526020018061474f6038913960400191505060405180910390fd5b6137c183868685613904565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628686604051808381526020018281526020019250505060405180910390a4613178338686868686613d80565b600081848411156138fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156138c15781810151838201526020016138a9565b50505050905090810190601f1680156138ee5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b61391084848484614142565b83158015906139cf5750601054604080517f6352211e000000000000000000000000000000000000000000000000000000008152600481018790529051339273ffffffffffffffffffffffffffffffffffffffff1691636352211e916024808301926020929190829003018186803b15801561398b57600080fd5b505afa15801561399f573d6000803e3d6000fd5b505050506040513d60208110156139b557600080fd5b505173ffffffffffffffffffffffffffffffffffffffff16145b15612d945760606139df85612ccb565b1561317857612aa485826133fa565b613a0d8473ffffffffffffffffffffffffffffffffffffffff166141f8565b15612aa4578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff168152602001806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b83811015613ac2578181015183820152602001613aaa565b50505050905001848103835286818151815260200191508051906020019060200280838360005b83811015613b01578181015183820152602001613ae9565b50505050905001848103825285818151815260200191508051906020019080838360005b83811015613b3d578181015183820152602001613b25565b50505050905090810190601f168015613b6a5780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b158015613b8f57600080fd5b505af1925050508015613bb457506040513d6020811015613baf57600080fd5b505160015b613c7d57613bc061455d565b80613bcb5750613c2c565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482018181528351602484015283518493919283926044019190850190808383600083156138c15781810151838201526020016138a9565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603481526020018061463f6034913960400191505060405180910390fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081167fbc197c810000000000000000000000000000000000000000000000000000000014613d17576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806146736028913960400191505060405180910390fd5b50505050505050565b600082815260046020526040902054613d399082613381565b6000928352600460209081526040808520929092556001815281842073ffffffffffffffffffffffffffffffffffffffff9590951684529390935291902080549091019055565b613d9f8473ffffffffffffffffffffffffffffffffffffffff166141f8565b15612aa4578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015613e55578181015183820152602001613e3d565b50505050905090810190601f168015613e825780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b158015613ea557600080fd5b505af1925050508015613eca57506040513d6020811015613ec557600080fd5b505160015b613ed657613bc061455d565b7fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e610000000000000000000000000000000000000000000000000000000014613d17576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806146736028913960400191505060405180910390fd5b600081613f7c57600080fd5b6000613f8884846141fe565b90506f7fffffffffffffffffffffffffffffff6fffffffffffffffffffffffffffffffff8216111561281457600080fd5b600080613fc68585614374565b9050613fd6600f84900b826143b1565b95945050505050565b600081613fee57506000611417565b600083600f0b1215613fff57600080fd5b600f83900b6fffffffffffffffffffffffffffffffff8316810260401c90608084901c0277ffffffffffffffffffffffffffffffffffffffffffffffff81111561404857600080fd5b60401b811981111561405957600080fd5b019392505050565b6000818152601360205260409020541490565b6000806140818484614409565b600081815260116020908152604080832042905560138252808320849055601490915280822083905560105481517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff89811660048301526024820186905292519495509116926340c10f199260448084019391929182900301818387803b15801561412257600080fd5b505af1158015614136573d6000803e3d6000fd5b50929695505050505050565b600084815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915290205461417c9082612c7b565b600085815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff88811685529252808320939093558416815220546141c1908290613381565b600094855260016020908152604080872073ffffffffffffffffffffffffffffffffffffffff909516875293905291909320555050565b3b151590565b60008161420a57600080fd5b600077ffffffffffffffffffffffffffffffffffffffffffffffff84116142405782604085901b8161423857fe5b049050614357565b60c084811c6401000000008110614259576020918201911c5b62010000811061426b576010918201911c5b610100811061427c576008918201911c5b6010811061428c576004918201911c5b6004811061429c576002918201911c5b600281106142ab576001820191505b60bf820360018603901c6001018260ff0387901b816142c657fe5b0492506fffffffffffffffffffffffffffffffff8311156142e657600080fd5b608085901c83026fffffffffffffffffffffffffffffffff8616840260c088901c604089901b8281101561431b576001820391505b608084901b92900382811015614332576001820391505b829003608084901c821461434257fe5b88818161434b57fe5b04870196505050505050505b6fffffffffffffffffffffffffffffffff81111561281457600080fd5b67ffffffffffffffff82166000818152600e60209081526040808320858452825280832054938352600f909152812054909190613fd68282613f70565b6000600f83810b9083900b0260401d7fffffffffffffffffffffffffffffffff80000000000000000000000000000000811280159061440057506f7fffffffffffffffffffffffffffffff8113155b61281457600080fd5b600580547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff8116680100000000000000009182900467ffffffffffffffff908116600101908116928302919091179092556000818152600c6020908152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff89169081179091558151838152875181850152875194969594919333937f6c8e9d3264b48d81c4edda219bc448cde54bdb7997ef1703a4bc9a803167cfce938a93928392830191908501908083838e5b8381101561450c5781810151838201526020016144f4565b50505050905090810190601f1680156145395780820380516001836020036101000a031916815260200191505b509250505060405180910390a467ffffffffffffffff169392505050565b60e01c90565b600060443d101561456d576133f7565b600481823e6308c379a06145818251614557565b1461458b576133f7565b6040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3d016004823e80513d67ffffffffffffffff81602484011181841117156145d957505050506133f7565b828401925082519150808211156145f357505050506133f7565b503d8301602082840101111561460b575050506133f7565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01681016020016040529150509056fe455243313135353a207472616e7366657220746f206e6f6e2045524331313535526563656976657220696d706c656d656e746572455243313135353a204552433131353552656365697665722072656a656374656420746f6b656e73455243313135353a2062616c616e636520717565727920666f7220746865207a65726f2061646472657373455243313135353a2062617463682062616c616e636520717565727920666f7220746865207a65726f2061646472657373596f752063616e277420747261646520636f6e646974696f6e616c20746f6b656e732061667465722072656465656d2e455243313135353a207461726765742061646472657373206d757374206265206e6f6e2d7a65726f455243313135353a206e656564206f70657261746f7220617070726f76616c20666f7220337264207061727479207472616e73666572732e455243313135353a2073657474696e6720617070726f76616c2073746174757320666f722073656c66455243313135353a2049447320616e64205f76616c756573206d75737420686176652073616d65206c656e67746873455243313135353a206163636f756e747320616e6420696473206c656e677468206d69736d61746368455243313135353a206d696e7420746f20746865207a65726f2061646472657373a26469706673582212206cf951dfc70baafdf4eac035ad8e2fe9c1a1378f7ea16c0bd632edef1414cb0964736f6c63430007060033",
  "immutableReferences": {},
  "generatedSources": [],
  "deployedGeneratedSources": [
    {
      "ast": {
        "nodeType": "YulBlock",
        "src": "0:992:31",
        "statements": [
          {
            "nodeType": "YulBlock",
            "src": "6:3:31",
            "statements": []
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "71:31:31",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "73:27:31",
                  "value": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "89:3:31",
                        "type": "",
                        "value": "224"
                      },
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "94:5:31"
                      }
                    ],
                    "functionName": {
                      "name": "shr",
                      "nodeType": "YulIdentifier",
                      "src": "85:3:31"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "85:15:31"
                  },
                  "variableNames": [
                    {
                      "name": "newValue",
                      "nodeType": "YulIdentifier",
                      "src": "73:8:31"
                    }
                  ]
                }
              ]
            },
            "name": "shift_right_224_unsigned",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "48:5:31",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "newValue",
                "nodeType": "YulTypedName",
                "src": "58:8:31",
                "type": ""
              }
            ],
            "src": "14:88:31"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "154:836:31",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "194:9:31",
                    "statements": [
                      {
                        "nodeType": "YulLeave",
                        "src": "196:5:31"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [],
                        "functionName": {
                          "name": "returndatasize",
                          "nodeType": "YulIdentifier",
                          "src": "170:14:31"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "170:16:31"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "188:4:31",
                        "type": "",
                        "value": "0x44"
                      }
                    ],
                    "functionName": {
                      "name": "lt",
                      "nodeType": "YulIdentifier",
                      "src": "167:2:31"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "167:26:31"
                  },
                  "nodeType": "YulIf",
                  "src": "164:2:31"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "ret",
                        "nodeType": "YulIdentifier",
                        "src": "227:3:31"
                      },
                      {
                        "name": "ret",
                        "nodeType": "YulIdentifier",
                        "src": "232:3:31"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "237:1:31",
                        "type": "",
                        "value": "4"
                      }
                    ],
                    "functionName": {
                      "name": "returndatacopy",
                      "nodeType": "YulIdentifier",
                      "src": "212:14:31"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "212:27:31"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "212:27:31"
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "312:9:31",
                    "statements": [
                      {
                        "nodeType": "YulLeave",
                        "src": "314:5:31"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "ret",
                                    "nodeType": "YulIdentifier",
                                    "src": "292:3:31"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "286:5:31"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "286:10:31"
                              }
                            ],
                            "functionName": {
                              "name": "shift_right_224_unsigned",
                              "nodeType": "YulIdentifier",
                              "src": "261:24:31"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "261:36:31"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "299:10:31",
                            "type": "",
                            "value": "0x08c379a0"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "258:2:31"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "258:52:31"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "251:6:31"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "251:60:31"
                  },
                  "nodeType": "YulIf",
                  "src": "248:2:31"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "330:21:31",
                  "value": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "348:2:31",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "342:5:31"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "342:9:31"
                  },
                  "variables": [
                    {
                      "name": "data",
                      "nodeType": "YulTypedName",
                      "src": "334:4:31",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "data",
                        "nodeType": "YulIdentifier",
                        "src": "375:4:31"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "381:1:31",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [],
                            "functionName": {
                              "name": "returndatasize",
                              "nodeType": "YulIdentifier",
                              "src": "388:14:31"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "388:16:31"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "406:66:31",
                            "type": "",
                            "value": "0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "384:3:31"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "384:89:31"
                      }
                    ],
                    "functionName": {
                      "name": "returndatacopy",
                      "nodeType": "YulIdentifier",
                      "src": "360:14:31"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "360:114:31"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "360:114:31"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "483:25:31",
                  "value": {
                    "arguments": [
                      {
                        "name": "data",
                        "nodeType": "YulIdentifier",
                        "src": "503:4:31"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "497:5:31"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "497:11:31"
                  },
                  "variables": [
                    {
                      "name": "offset",
                      "nodeType": "YulTypedName",
                      "src": "487:6:31",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "517:26:31",
                  "value": {
                    "arguments": [],
                    "functionName": {
                      "name": "returndatasize",
                      "nodeType": "YulIdentifier",
                      "src": "527:14:31"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "527:16:31"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "521:2:31",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "552:28:31",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "562:18:31",
                    "type": "",
                    "value": "0xffffffffffffffff"
                  },
                  "variables": [
                    {
                      "name": "_2",
                      "nodeType": "YulTypedName",
                      "src": "556:2:31",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "638:9:31",
                    "statements": [
                      {
                        "nodeType": "YulLeave",
                        "src": "640:5:31"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "598:6:31"
                          },
                          {
                            "name": "_2",
                            "nodeType": "YulIdentifier",
                            "src": "606:2:31"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nodeType": "YulIdentifier",
                          "src": "595:2:31"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "595:14:31"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "618:6:31"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "626:4:31",
                                "type": "",
                                "value": "0x24"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "614:3:31"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "614:17:31"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "633:2:31"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nodeType": "YulIdentifier",
                          "src": "611:2:31"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "611:25:31"
                      }
                    ],
                    "functionName": {
                      "name": "or",
                      "nodeType": "YulIdentifier",
                      "src": "592:2:31"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "592:45:31"
                  },
                  "nodeType": "YulIf",
                  "src": "589:2:31"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "656:28:31",
                  "value": {
                    "arguments": [
                      {
                        "name": "data",
                        "nodeType": "YulIdentifier",
                        "src": "671:4:31"
                      },
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "677:6:31"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "667:3:31"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "667:17:31"
                  },
                  "variables": [
                    {
                      "name": "msg",
                      "nodeType": "YulTypedName",
                      "src": "660:3:31",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "693:24:31",
                  "value": {
                    "arguments": [
                      {
                        "name": "msg",
                        "nodeType": "YulIdentifier",
                        "src": "713:3:31"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "707:5:31"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "707:10:31"
                  },
                  "variables": [
                    {
                      "name": "length",
                      "nodeType": "YulTypedName",
                      "src": "697:6:31",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "744:9:31",
                    "statements": [
                      {
                        "nodeType": "YulLeave",
                        "src": "746:5:31"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "732:6:31"
                      },
                      {
                        "name": "_2",
                        "nodeType": "YulIdentifier",
                        "src": "740:2:31"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "729:2:31"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "729:14:31"
                  },
                  "nodeType": "YulIf",
                  "src": "726:2:31"
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "826:9:31",
                    "statements": [
                      {
                        "nodeType": "YulLeave",
                        "src": "828:5:31"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "msg",
                                "nodeType": "YulIdentifier",
                                "src": "776:3:31"
                              },
                              {
                                "name": "length",
                                "nodeType": "YulIdentifier",
                                "src": "781:6:31"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "772:3:31"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "772:16:31"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "790:4:31",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "768:3:31"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "768:27:31"
                      },
                      {
                        "arguments": [
                          {
                            "name": "data",
                            "nodeType": "YulIdentifier",
                            "src": "801:4:31"
                          },
                          {
                            "arguments": [],
                            "functionName": {
                              "name": "returndatasize",
                              "nodeType": "YulIdentifier",
                              "src": "807:14:31"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "807:16:31"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "797:3:31"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "797:27:31"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "765:2:31"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "765:60:31"
                  },
                  "nodeType": "YulIf",
                  "src": "762:2:31"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "851:2:31",
                        "type": "",
                        "value": "64"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "msg",
                                "nodeType": "YulIdentifier",
                                "src": "863:3:31"
                              },
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "876:6:31"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "884:2:31",
                                        "type": "",
                                        "value": "31"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "872:3:31"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "872:15:31"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "889:66:31",
                                    "type": "",
                                    "value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "868:3:31"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "868:88:31"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "859:3:31"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "859:98:31"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "959:4:31",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "855:3:31"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "855:109:31"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "844:6:31"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "844:121:31"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "844:121:31"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "974:10:31",
                  "value": {
                    "name": "msg",
                    "nodeType": "YulIdentifier",
                    "src": "981:3:31"
                  },
                  "variableNames": [
                    {
                      "name": "ret",
                      "nodeType": "YulIdentifier",
                      "src": "974:3:31"
                    }
                  ]
                }
              ]
            },
            "name": "try_decode_error_message",
            "nodeType": "YulFunctionDefinition",
            "returnVariables": [
              {
                "name": "ret",
                "nodeType": "YulTypedName",
                "src": "146:3:31",
                "type": ""
              }
            ],
            "src": "107:883:31"
          }
        ]
      },
      "contents": "{\n    { }\n    function shift_right_224_unsigned(value) -> newValue\n    { newValue := shr(224, value) }\n    function try_decode_error_message() -> ret\n    {\n        if lt(returndatasize(), 0x44) { leave }\n        returndatacopy(ret, ret, 4)\n        if iszero(eq(shift_right_224_unsigned(mload(ret)), 0x08c379a0)) { leave }\n        let data := mload(64)\n        returndatacopy(data, 4, add(returndatasize(), 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc))\n        let offset := mload(data)\n        let _1 := returndatasize()\n        let _2 := 0xffffffffffffffff\n        if or(gt(offset, _2), gt(add(offset, 0x24), _1)) { leave }\n        let msg := add(data, offset)\n        let length := mload(msg)\n        if gt(length, _2) { leave }\n        if gt(add(add(msg, length), 0x20), add(data, returndatasize())) { leave }\n        mstore(64, add(add(msg, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 0x20))\n        ret := msg\n    }\n}",
      "id": 31,
      "language": "Yul",
      "name": "#utility.yul"
    }
  ],
  "sourceMap": "1414:10156:3:-:0;;;3003:160;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3003:160:3;;;;;;;;;;-1:-1:-1;3003:160:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3003:160:3;;-1:-1:-1;3100:4:3;;-1:-1:-1;3100:4:3;;-1:-1:-1;3100:4:3;;768:40:12;-1:-1:-1;;;768:18:12;:40::i;:::-;2199:13:4;2207:4;2199:7;:13::i;:::-;2301:41;-1:-1:-1;;;2301:18:4;:41::i;:::-;2442:54;-1:-1:-1;;;2442:18:4;:54::i;:::-;-1:-1:-1;282:152:16;;-1:-1:-1;;;;282:18:16;:152::i;:::-;4753:190:1::1;-1:-1:-1::0;;;4753:18:1::1;:190::i;:::-;-1:-1:-1::0;;3120:16:3::1;:36:::0;;-1:-1:-1;;;;;;3120:36:3::1;-1:-1:-1::0;;;;;3120:36:3;;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;1414:10156:3;;1499:198:12;-1:-1:-1;;;;;;1582:25:12;;;;;1574:66;;;;;-1:-1:-1;;;1574:66:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1650:33:12;:20;:33;;;;;;;;;;:40;;-1:-1:-1;;1650:40:12;1686:4;1650:40;;;1499:198::o;7807:86:4:-;7873:13;;;;:4;;:13;;;;;:::i;:::-;;7807:86;:::o;1414:10156:3:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1414:10156:3;;;-1:-1:-1;1414:10156:3;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "1414:10156:3:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3141:228:4;;;;;;;;;;;;;;;;-1:-1:-1;3141:228:4;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;4244:90:1;;;;;;;;;;;;;;;;-1:-1:-1;4244:90:1;;;;;;;;;:::i;965:140:12:-;;;;;;;;;;;;;;;;-1:-1:-1;965:140:12;;;;:::i;:::-;;;;;;;;;;;;;;;;;;7966:1184:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7966:1184:1;;-1:-1:-1;7966:1184:1;-1:-1:-1;7966:1184:1;:::i;:::-;;3343:735:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3343:735:3;;-1:-1:-1;3343:735:3;;-1:-1:-1;;;;;3343:735:3:i;2902:97:4:-;;;;;;;;;;;;;;;;-1:-1:-1;2902:97:4;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;538:162:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;538:162:21;;-1:-1:-1;538:162:21;;-1:-1:-1;;;;;538:162:21:i;:::-;;;;;;;;;;;;;;;;;;;2365:47:3;;;;;;;;;;;;;;;;-1:-1:-1;2365:47:3;;:::i;3090:348:0:-;;;;;;;;;;;;;;;;-1:-1:-1;3090:348:0;;;;;;;;;;;;;;:::i;2604:56:3:-;;;;;;;;;;;;;;;;-1:-1:-1;2604:56:3;;:::i;13551:398:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13551:398:1;;-1:-1:-1;13551:398:1;-1:-1:-1;13551:398:1;:::i;6723:889::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6723:889:1;;-1:-1:-1;6723:889:1;-1:-1:-1;6723:889:1;:::i;14894:119::-;;;;;;;;;;;;;;;;-1:-1:-1;14894:119:1;;;;:::i;3468:28::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3526:631:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3526:631:4;;;;;;;;-1:-1:-1;3526:631:4;;-1:-1:-1;;3526:631:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3526:631:4;;-1:-1:-1;3526:631:4;;-1:-1:-1;;;;;3526:631:4:i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14044:119:1;;;;;;;;;;;;;;;;-1:-1:-1;14044:119:1;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4552:50;;;;;;;;;;;;;;;;-1:-1:-1;4552:50:1;;:::i;4045:89::-;;;;;;;;;;;;;;;;-1:-1:-1;4045:89:1;;;;;;;;;:::i;4408:174:0:-;;;;;;;;;;;;;;;;-1:-1:-1;4408:174:0;;;;:::i;4436:59:1:-;;;;;;;;;;;;;;;;-1:-1:-1;4436:59:1;;;;:::i;2121:159:0:-;;;;;;;;;;;;;;;;-1:-1:-1;2121:159:0;;;;;;;;;:::i;3397:25:1:-;;;:::i;3672:547:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3672:547:0;;-1:-1:-1;3672:547:0;-1:-1:-1;3672:547:0;:::i;10987:1916:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10987:1916:1;;-1:-1:-1;10987:1916:1;-1:-1:-1;10987:1916:1;:::i;4712:132:0:-;;;;;;;;;;;;;;;;-1:-1:-1;4712:132:0;;;;:::i;2869:62:3:-;;;;;;;;;;;;;;;;-1:-1:-1;2869:62:3;;:::i;4225:306:4:-;;;;;;;;;;;;;;;;-1:-1:-1;4225:306:4;;;;;;;;;;;:::i;4910:153:3:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4910:153:3;;-1:-1:-1;4910:153:3;;-1:-1:-1;;;;;4910:153:3:i;2122:42::-;;;:::i;366:201:15:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;366:201:15;;;;;;;;-1:-1:-1;366:201:15;;-1:-1:-1;;366:201:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;366:201:15;;;;;;;;-1:-1:-1;366:201:15;;-1:-1:-1;;366:201:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;366:201:15;;-1:-1:-1;366:201:15;;-1:-1:-1;;;;;366:201:15:i;1240:104:5:-;;;;;;;;;;;;;;;;-1:-1:-1;1240:104:5;;:::i;5297:220:1:-;;;;;;;;;;;;;;;;-1:-1:-1;5297:220:1;;;;;;;;;;;:::i;2481:131:0:-;;;;;;;;;;;;;;;;-1:-1:-1;2481:131:0;;;;:::i;4598:166:4:-;;;;;;;;;;;;;;;;-1:-1:-1;4598:166:4;;;;;;;;;;;:::i;9570:467:1:-;;;;;;;;;;;;;;;;-1:-1:-1;9570:467:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;2253:54:3:-;;;;;;;;;;;;;;;;-1:-1:-1;2253:54:3;;:::i;187:173:15:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;187:173:15;;-1:-1:-1;187:173:15;;-1:-1:-1;;;;;187:173:15:i;13081:292:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13081:292:1;;-1:-1:-1;13081:292:1;-1:-1:-1;13081:292:1;:::i;14648:151::-;;;;;;;;;;;;;;;;-1:-1:-1;14648:151:1;;;;;;;;;:::i;5868:140::-;;;;;;;;;;;;;;;;-1:-1:-1;5868:140:1;;;;;;;;;:::i;3141:228:4:-;3227:7;3254:21;;;3246:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3340:13:4;;;;:9;:13;;;;;;;;:22;;;;;;;;;;;3141:228;;;;;:::o;4244:90:1:-;;;;;;;;;;;;;;;;;;;;;;;;:::o;965:140:12:-;1065:33;;1042:4;1065:33;;;;;;;;;;;;;;965:140::o;7966:1184:1:-;8153:39;8195:93;8230:26;8258:18;8278:9;8195:34;:93::i;:::-;8153:135;;8298:30;8331:73;8357:26;8385:18;8331:25;:73::i;:::-;8298:106;;8476:19;8510:145;8603:51;8621:4;8628:25;8603:9;:51::i;:::-;8510:71;;;;;;8555:4;8510:71;;;;;;;;;;;;:36;;;;;;:71;;;;;;;;;;;;;;:36;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8510:71:1;;:75;:145::i;:::-;8476:179;;8665:15;8834:51;8852:4;8859:25;8834:9;:51::i;:::-;8759:60;8777:4;8784:34;8759:9;:60::i;:::-;8733:11;:86;:152;;;;;;8665:220;;8947:196;8967:26;9007:18;9039:9;9062:7;9091:4;9118;9137:5;;8947:6;:196::i;:::-;7966:1184;;;;;;;;;:::o;3343:735:3:-;3438:10;11452:19;11467:3;11452:14;:19::i;:::-;:31;;;;-1:-1:-1;11475:8:3;;;11452:31;:62;;;;;11487:27;11510:3;11487:22;:27::i;:::-;11444:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3473:20:::1;3496:27:::0;;;:15:::1;:27;::::0;;;;;3541:20;3533:56:::1;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;3769:15;3893:39:::0;;;:27:::1;:39;::::0;;;;;3825:6:::1;3788:15;:33:::0;;::::1;3787:44;::::0;3865:84:::1;::::0;3881:10:::1;::::0;3787:44;3943:5;3865:15:::1;:84::i;:::-;3989:15;3959;:27;3975:10;3959:27;;;;;;;;;;;:45;;;;4044:10;4032;4019:52;;;4056:7;4065:5;4019:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11560:1;;3343:735:::0;;;:::o;2902:97:4:-;2988:4;2981:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2956:13;;2981:11;;2988:4;;2981:11;;2988:4;2981:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2902:97;;;:::o;538:162:21:-;663:30;538:162;;;;;;:::o;2365:47:3:-;;;;;;;;;;;;;:::o;3090:348:0:-;22011:26:1;;;;;;;:15;:26;;;;;;3200:9:0;;22011:40:1;:26;22041:10;22011:40;22003:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3238:9:0::1;5591:27;5608:9;5591:16;:27::i;:::-;5590:28;5582:60;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;3313:51:::2;3330:9;3341:10;3353;3313:16;:51::i;:::-;3379:52;::::0;;;;;;;3408:10;;3379:52:::2;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;::::2;22087:1:1::1;3090:348:0::0;;;;:::o;2604:56:3:-;;;;;;;;;;;;;:::o;13551:398:1:-;13773:7;13769:104;13786:16;;;13769:104;;;13824:38;13846:4;;13851:2;13846:8;;;;;;;;;;;;;13856:5;13824:21;:38::i;:::-;13804:4;;13769:104;;;;13882:60;13909:5;13916:3;13921:4;;13882:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13882:60:1;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13927:7:1;;-1:-1:-1;13927:7:1;;;;13882:60;;;13927:7;;13882:60;13927:7;13882:60;;;;;;;;;-1:-1:-1;;13882:60:1;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13936:5:1;;-1:-1:-1;13936:5:1;;;;13882:60;;13936:5;;;;13882:60;;;;;;;;;-1:-1:-1;13882:26:1;;-1:-1:-1;;;13882:60:1:i;:::-;13551:398;;;;;;;;:::o;6723:889::-;6967:39;7009:93;7044:26;7072:18;7092:9;7009:34;:93::i;:::-;6967:135;;7112:62;7118:3;7123:34;7159:7;7168:5;;7112:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7112:5:1;;-1:-1:-1;;;7112:62:1:i;:::-;7184:30;7217:73;7243:26;7271:18;7217:25;:73::i;:::-;7184:106;;7300:53;7306:3;7311:25;7338:7;7347:5;;7300:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7300:5:1;;-1:-1:-1;;;7300:53:1:i;:::-;7433:5;7368:92;;7413:18;7385:26;7368:92;;;7440:7;7449:3;7454:5;;7368:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7368:92:1;;-1:-1:-1;;;;;;7368:92:1;7470:26;:43;;;7514:5;7529:4;7536:18;7556:7;7565:5;;7470:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6723:889;;;;;;;;;;:::o;14894:119::-;14980:26;;14957:4;14980:26;;;:15;:26;;;;;;;14894:119::o;3468:28::-;;;;;;;;;:::o;3526:631:4:-;3699:16;3758:3;:10;3739:8;:15;:29;3731:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3825:30;3872:8;:15;3858:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3858:30:4;;3825:63;;3904:9;3899:221;3923:8;:15;3919:1;:19;3899:221;;;3990:1;3967:25;;:8;3976:1;3967:11;;;;;;;;;;;;;;:25;;;;3959:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4079:9;:17;4089:3;4093:1;4089:6;;;;;;;;;;;;;;4079:17;;;;;;;;;;;:30;4097:8;4106:1;4097:11;;;;;;;;;;;;;;4079:30;;;;;;;;;;;;;;;;4060:13;4074:1;4060:16;;;;;;;;;;;;;;;;;:49;3940:3;;3899:221;;;-1:-1:-1;4137:13:4;3526:631;-1:-1:-1;;;3526:631:4:o;14044:119:1:-;14130:26;;14104:7;14130:26;;;:15;:26;;;;;;;;;14044:119::o;4552:50::-;;;;;;;;;;;;;;;:::o;4045:89::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;4408:174:0:-;22011:26:1;;;;;;;:15;:26;;;;;;4475:9:0;;22011:40:1;:26;22041:10;22011:40;22003:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4500:28:0::1;::::0;::::1;;::::0;;;:17:::1;:28;::::0;;;;;:35;;;::::1;4531:4;4500:35;::::0;;4550:25;::::1;::::0;4500:28;4550:25:::1;4408:174:::0;;:::o;4436:59:1:-;;;;;;;;;;;;;:::o;2121:159:0:-;2231:30;;;;;2205:7;2231:30;;;:19;:30;;;;;;;;:42;;;;;;;;;2121:159::o;3397:25:1:-;;;;;;:::o;3672:547:0:-;22011:26:1;;;;;;;:15;:26;;;;;;3811:9:0;;22011:40:1;:26;22041:10;22011:40;22003:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3849:9:0::1;5591:27;5608:9;5591:16;:27::i;:::-;5590:28;5582:60;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;3932:40:::0;;::::2;3924:69;;;::::0;;::::2;::::0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;4008:7;4003:135;4021:23:::0;;::::2;4003:135;;;4066:61;4083:9;4094:11;;4106:2;4094:15;;;;;;;;;;;;;4111:11;;4123:2;4111:15;;;;;;;;;;;;;;;4066:61;;:16;:61::i;:::-;4046:4;;4003:135;;;;4187:11;;4152:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4176:9;4152:60;;;4200:11;;4152:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::2;::::0;::::2;::::0;::::2;::::0;;::::2;::::0;::::2;::::0;;::::2;::::0;;::::2;::::0;-1:-1:-1;4152:60:0;;-1:-1:-1;;;;4152:60:0::2;22087:1:1::1;3672:547:0::0;;;;;;:::o;10987:1916:1:-;11212:27;11229:9;11212:16;:27::i;:::-;11204:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11327:18;11348:26;11364:9;11348:15;:26::i;:::-;11402:10;11384:29;;;;:17;:29;;;;;;;;:41;;;;;;;;:48;;;;11428:4;11384:48;;;11327:47;;-1:-1:-1;11384:29:1;;11652:118;;11673:26;;11701:18;;11721:9;;11414:10;;11327:47;11652:20;:118::i;:::-;11573:197;;;;11986:13;12003:1;11986:18;11982:409;;12020:17;12040:47;12052:34;12040:11;:47::i;:::-;12020:67;;12105:13;12101:280;;;12138:70;;;;:34;:70;;;;;;;;12209:10;12138:82;;;;;;;:94;;;12101:280;;;12271:71;;;;:35;:71;;;;;;;;12343:10;12271:83;;;;;;;:95;;;12101:280;11982:409;;12405:13;12400:139;;12473:36;;;;;;;:25;:36;;;;;;:55;;12514:13;12473:40;:55::i;:::-;12434:36;;;;;;;:25;:36;;;;;:94;12400:139;12594:26;:43;;;12646:4;12653:10;12665:18;12685:13;12700:5;;12594:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12721:175:1;;;12849:10;12721:175;;;;;;;;;;;;;;-1:-1:-1;12794:18:1;;-1:-1:-1;12721:175:1;;;;;;;;;;;;10987:1916;;;;;;;;;:::o;4712:132:0:-;4809:28;;4786:4;4809:28;;;:17;:28;;;;;;;;;4712:132::o;2869:62:3:-;;;;;;;;;;;;;:::o;4225:306:4:-;4343:8;4327:24;;:12;:10;:12::i;:::-;:24;;;;4319:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4453:8;4408:18;:32;4427:12;:10;:12::i;:::-;4408:32;;;;;;;;;;;;;;;;;;-1:-1:-1;4408:32:4;;;:42;;;;;;;;;;;;:53;;;;;;;;;;;;;;4491:12;:10;:12::i;:::-;4476:48;;;4515:8;4476:48;;;;;;;;;;;;;;;;;;;;4225:306;;:::o;4910:153:3:-;4993:7;5019:37;5038:10;5050:5;5019:18;:37::i;:::-;5012:44;4910:153;-1:-1:-1;;;4910:153:3:o;2122:42::-;;;;;;:::o;366:201:15:-;524:36;366:201;;;;;;;:::o;1240:104:5:-;1294:7;1320:17;;;:13;:17;;;;;;;1240:104::o;5297:220:1:-;22011:26;;;;;;;:15;:26;;;;;;5384:9;;22011:40;:26;22041:10;22011:40;22003:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5405:26:::1;::::0;::::1;;::::0;;;:15:::1;:26;::::0;;;;;:44;;;::::1;;::::0;::::1;::::0;;::::1;::::0;;;5464:46;;5405:44;;5464:46:::1;::::0;::::1;5297:220:::0;;;:::o;2481:131:0:-;2573:32;;2547:7;2573:32;;;:21;:32;;;;;;;2481:131::o;4598:166:4:-;4720:27;;;;4697:4;4720:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;4598:166::o;9570:467:1:-;9781:7;9800:18;9821:26;9837:9;9821:15;:26::i;:::-;9800:47;;9860:16;9892:113;9913:26;9941:18;9961:9;9972:10;9984:5;9991:13;9892:20;:113::i;:::-;9857:148;9570:467;-1:-1:-1;;;;;;;;;9570:467:1:o;2253:54:3:-;;;;;;;;;;;;;:::o;187:173:15:-;322:31;187:173;;;;;;;:::o;13081:292:1:-;13270:33;13292:3;13297:5;13270:21;:33::i;:::-;13313:53;13335:5;13342:3;13347;13352:6;13360:5;;13313:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13313:21:1;;-1:-1:-1;;;13313:53:1:i;:::-;13081:292;;;;;;:::o;14648:151::-;14756:24;;;;;14733:4;14756:24;;;:17;:24;;;;;;;;:36;;;;;;;;;;;14648:151::o;5868:140::-;22011:26;;;;;;;:15;:26;;;;;;5946:9;;22011:40;:26;22041:10;22011:40;22003:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5967:26:1::1;::::0;;::::1;;::::0;;;:15:::1;:26;::::0;;;;:34;5868:140::o;16853:290::-;17059:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17049:86;;;;;;16853:290::o;17531:252::-;17710:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17700:75;;;;;;17531:252::o;1329:134:14:-;1387:7;1413:43;1417:1;1420;1413:43;;;;;;;;;;;;;;;;;:3;:43::i;21679:271:1:-;21937:5;-1:-1:-1;21925:18:1;21679:271::o;10239:160:3:-;10307:4;10358:26;;;:21;:26;;;;;;;;;10330:55;;:27;:55;;;;;;:62;;10239:160::o;15332:307:1:-;15480:27;;;;:15;:27;;;;;;:40;;;;:27;;:40;15472:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15562:70;15568:35;15593:9;15568:24;:35::i;:::-;15605:10;15617:7;15626:5;15562;:70::i;:::-;15332:307;;;;:::o;4850:305:0:-;5040:30;;;;;;;:19;:30;;;;;;;;:42;;;;;;;;;4987:32;;;:21;:32;;;;;;:96;;5040:42;4987:48;;5024:10;4987:36;:48::i;:::-;:52;;:96::i;:::-;4952:32;;;;;;;;:21;:32;;;;;;;;:131;;;;5093:19;:30;;;;;:42;;;;;;;;;;;:55;4850:305::o;17789:181:1:-;17881:24;;;;;;;:17;:24;;;;;;;;:29;;;;;;;;;;;17880:30;17872:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17789:181;;:::o;18565:921::-;18797:7;:14;18782:4;:11;:29;18774:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18881:17;;;18873:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18974:19;;;18983:10;18974:19;;:68;;-1:-1:-1;18997:25:1;;;;;;;:18;:25;;;;;;;;19023:10;18997:37;;;;;;;;;;:45;;:37;:45;18974:68;18953:171;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19140:10;19135:185;19161:4;:11;19156:2;:16;19135:185;;;19194:11;19208:4;19213:2;19208:8;;;;;;;;;;;;;;19194:22;;19230:14;19247:7;19255:2;19247:11;;;;;;;;;;;;;;19230:28;;19273:36;19285:3;19290:5;19297:3;19302:6;19273:11;:36::i;:::-;-1:-1:-1;;19174:4:1;;19135:185;;;;19368:3;19335:52;;19361:5;19335:52;;19349:10;19335:52;;;19373:4;19379:7;19335:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19398:81;19434:10;19446:5;19453:3;19458:4;19464:7;19473:5;19398:35;:81::i;:::-;18565:921;;;;;:::o;1509:357:5:-;1618:16;;;1610:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1683:22;1691:2;1695;1699:5;1683:7;:22::i;:::-;1720:53;;;;;;;;;;;;;;;;;;1755:1;;1735:10;;1720:53;;;;;;;;;;;1784:75;1815:10;1835:1;1839:2;1843;1847:5;1854:4;1784:30;:75::i;21532:141:1:-;21640:26;;21598:4;21640:26;;;:15;:26;;;;;;21621:15;:45;;;21532:141::o;20249:1277::-;20501:39;20542:16;20574:27;20604:28;20614:5;20621:10;20604:9;:28::i;:::-;20574:58;;20642:32;20689:13;:78;;20731:36;;;;;;;:25;:36;;;;;;20689:78;;;20705:23;20717:10;20705:11;:23::i;:::-;20642:125;;20814:93;20849:26;20877:18;20897:9;20814:34;:93::i;:::-;20777:130;;20966:19;20988:65;21007:19;21028:24;20988:18;:65::i;:::-;20966:87;;21063:28;21169:13;:207;;21298:71;;;;:35;:71;;;;;;;;:78;;;;;;;;;;;21169:207;;;21201:70;;;;:34;:70;;;;;;;;:77;;;;;;;;;;;21169:207;21106:47;21118:34;21106:11;:47::i;:::-;:271;21063:314;;21387:18;21408:52;21424:9;21435:10;21447:12;21408:15;:52::i;:::-;21387:73;-1:-1:-1;21481:38:1;:16;;;;21498:20;21481:16;:38::i;:::-;21470:49;;20249:1277;;;;;;;;;;;;;;:::o;882:176:14:-;940:7;971:5;;;994:6;;;;986:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;598:104:10;685:10;598:104;;:::o;8634:1098:3:-;8768:7;8747:10;11217:19;11232:3;11217:14;:19::i;:::-;:31;;;;-1:-1:-1;11240:8:3;;;11217:31;:63;;;;;11252:28;11276:3;11252:23;:28::i;:::-;11209:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8811:16:::1;::::0;:36:::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;8791:17:::1;::::0;8811:16:::1;;::::0;:24:::1;::::0;:36;;;;;::::1;::::0;;;;;;;;:16;:36;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;8811:36:3;8857:21:::1;8881:39:::0;;;:27:::1;8811:36;8881:39:::0;;;;;8811:36;;-1:-1:-1;8954:36:3::1;8811::::0;8984:5;8954:18:::1;:36::i;:::-;9000;::::0;;;:21:::1;:36;::::0;;;;;;;:49;;;9078:24;;;:9:::1;:24:::0;;;;;;:35:::1;::::0;::::1;::::0;;;;;;;;;;;9123:24;;;;;;;;;:35;;;;;;;;:45;;;9178:35;;;:39;;;;9233:70;;;;;;;::::1;::::0;;;;;9000:36;;-1:-1:-1;9078:35:3;;;;9248:10:::1;::::0;9233:70:::1;::::0;;;;;;;::::1;9318:73;::::0;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;9353:1:::1;::::0;9333:10:::1;::::0;9318:73:::1;::::0;;;;;;;;;::::1;9435:27;::::0;;;:15:::1;:27;::::0;;;;;;9402:30;;;;;;:60;9640:55;9418:13;;9451:10;;9640:55:::1;::::0;::::1;::::0;::::1;::::0;::::1;-1:-1:-1::0;9712:13:3;8634:1098;-1:-1:-1;;;;;;8634:1098:3:o;17976:583:1:-;18110:17;;;18102:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18203:19;;;18212:10;18203:19;;:68;;-1:-1:-1;18226:25:1;;;;;;;:18;:25;;;;;;;;18252:10;18226:37;;;;;;;;;;:45;;:37;:45;18203:68;18182:171;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18364:36;18376:3;18381:5;18388:3;18393:6;18364:11;:36::i;:::-;18450:3;18416:51;;18443:5;18416:51;;18431:10;18416:51;;;18455:3;18460:6;18416:51;;;;;;;;;;;;;;;;;;;;;;;;18478:74;18509:10;18521:5;18528:3;18533;18538:6;18546:5;18478:30;:74::i;1754:187:14:-;1840:7;1875:12;1867:6;;;;1859:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1910:5:14;;;1754:187::o;10405:416:3:-;10519:42;10537:3;10542:5;10549:3;10554:6;10519:17;:42::i;:::-;10576:8;;;;;:55;;-1:-1:-1;10588:16:3;;:29;;;;;;;;;;;;;;10621:10;;10588:43;:16;;:24;;:29;;;;;;;;;;;;;;:16;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10588:29:3;:43;;;10576:55;10572:243;;;10647:18;10683:27;10706:3;10683:22;:27::i;:::-;10679:126;;;10760:30;10779:3;10784:5;10760:18;:30::i;13494:779:4:-;13739:15;:2;:13;;;:15::i;:::-;13735:532;;;13791:2;13774:43;;;13818:8;13828:4;13834:3;13839:7;13848:4;13774:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13774:79:4;;;13770:487;;;;:::i;:::-;;;;;;;;14126:14;;;;;;;;;;;;;;;;;;;;14133:6;;14126:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13770:487;14180:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13770:487;13902:64;;;13914:52;13902:64;13898:161;;13990:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13898:161;13854:219;13494:779;;;;;;:::o;3454:250:5:-;3548:17;;;;:13;:17;;;;;;:28;;3570:5;3548:21;:28::i;:::-;3528:17;;;;:13;:17;;;;;;;;:48;;;;3606:9;:13;;;;;:17;;;;;;;;;;;;;;;;:25;;;3586:45;;3454:250::o;12746:742:4:-;12966:15;:2;:13;;;:15::i;:::-;12962:520;;;13018:2;13001:38;;;13040:8;13050:4;13056:2;13060:6;13068:4;13001:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13001:72:4;;;12997:475;;;;:::i;:::-;13122:59;;;13134:47;13122:59;13118:156;;13205:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8234:203:30;8294:6;8317;8308:16;;;;;;8330:14;8347:12;8354:1;8357;8347:5;:12::i;:::-;8330:29;-1:-1:-1;978:34:30;8374:29;;;;;8365:39;;;;;15908:248:1;16023:6;16041:19;16063:39;16080:9;16091:10;16063:16;:39::i;:::-;16041:61;-1:-1:-1;16119:30:1;:16;;;;16041:61;16119:16;:30::i;:::-;16112:37;15908:248;-1:-1:-1;;;;;15908:248:1:o;5958:455:30:-;6017:7;6036:6;6032:20;;-1:-1:-1;6051:1:30;6044:8;;6032:20;6073:1;6068;:6;;;;6059:16;;;;;;6096:11;;;;6115:34;6111:38;;6096:54;;6155:2;6095:62;;6196:3;6191:8;;;6176:24;6222:50;6216:56;;;6207:66;;;;;;6286:2;6279:9;6316:71;;6304:83;;;6295:93;;;;;;6401:7;;5958:455;-1:-1:-1;;;5958:455:30:o;9892:132:3:-;9961:4;9984:26;;;:21;:26;;;;;;:33;;9892:132::o;5069:452::-;5171:7;5190:18;5211:42;5236:9;5247:5;5211:24;:42::i;:::-;5263:34;;;;:22;:34;;;;;;;;5300:15;5263:52;;5325:21;:33;;;;;:46;;;5381:27;:39;;;;;;:52;;;5443:16;;:44;;;;;:16;:44;;;;;;;;;;;;;;;5190:63;;-1:-1:-1;5443:16:3;;;:21;;:44;;;;;5263:34;;5443:44;;;;;;5263:34;5443:16;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5504:10:3;;5069:452;-1:-1:-1;;;;;;5069:452:3:o;16162:232:1:-;16291:14;;;;:9;:14;;;;;;;;:21;;;;;;;;;;;:33;;16317:6;16291:25;:33::i;:::-;16267:14;;;;:9;:14;;;;;;;;:21;;;;;;;;;;;:57;;;;16367:19;;;;;;16356:31;;:6;;:10;:31::i;:::-;16334:14;;;;:9;:14;;;;;;;;:19;;;;;;;;;;;;;:53;-1:-1:-1;;16162:232:1:o;726:413:26:-;1086:20;1124:8;;;726:413::o;20447:1218:30:-;20507:7;20531:6;20522:16;;;;;;20545:14;20575:50;20570:1;:55;20566:1005;;20654:1;20648:2;20643:1;:7;;20642:13;;;;;;20633:22;;20566:1005;;;20688:3;20712:8;;;20738:11;20732:17;;20728:48;;20760:2;20764:9;;;;20753;20728:48;20793:7;20787:2;:13;20783:44;;20811:2;20815:9;;;;20804;20783:44;20844:5;20838:2;:11;20834:40;;20860:1;20863:8;;;;20853;20834:40;20891:4;20885:2;:10;20881:39;;20906:1;20909:8;;;;20899;20881:39;20937:3;20931:2;:9;20927:38;;20951:1;20954:8;;;;20944;20927:38;20982:3;20976:2;:9;20972:23;;20994:1;20987:8;;;;20972:23;21081:3;21075;:9;21070:1;21066;:5;:18;;21088:1;21065:24;21057:3;21051;:9;21046:1;:14;;21045:45;;;;;;21036:54;;21117:34;21107:6;:44;;21098:54;;;;;;21189:3;21184:8;;;21174:19;;21228:34;21224:38;;21214:49;;21290:3;21285:8;;;21319:2;21314:7;;;21334;;;21330:20;;;21349:1;21343:7;;;;21330:20;21422:3;21416:9;;;;21358:8;;21437:7;;;21433:20;;;21452:1;21446:7;;;;21433:20;21461:8;;;21535:3;21529:9;;;21523:15;;21515:24;;;;21563:1;21558:2;:6;;;;;;21548:16;;;;20566:1005;;;;;;;21596:34;21586:6;:44;;21577:54;;;;;5181:318:0;5324:30;;;5285:6;5324:30;;;:19;:30;;;;;;;;:42;;;;;;;;;5399:32;;;:21;:32;;;;;;5285:6;;5324:42;5448:44;5324:42;5399:32;5448:18;:44::i;4186:197:30:-;4243:6;4273:13;:9;;;:13;;;;;4290:2;4273:19;825:35;4307:19;;;;;:42;;-1:-1:-1;978:34:30;4330:19;;;4307:42;4298:52;;;;;19936:307:1;20070:14;20068:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20095:27:1;;;:15;:27;;;;;;;;:39;;;;;;;;;;;;;20150:58;;;;;;;;;;;;;-1:-1:-1;;20068:16:1;;20095:39;;20167:10;;20150:58;;;;;;;;;;;;;;;;;-1:-1:-1;20150:58:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20219:17;;;19936:307;-1:-1:-1;;;19936:307:1:o;14:88:31:-;89:3;85:15;;71:31::o;107:883::-;;188:4;170:16;167:26;164:2;;;196:5;;164:2;237:1;232:3;227;212:27;299:10;261:36;292:3;286:10;261:36;:::i;:::-;258:52;248:2;;314:5;;248:2;348;342:9;406:66;388:16;384:89;381:1;375:4;360:114;503:4;497:11;527:16;562:18;633:2;626:4;618:6;614:17;611:25;606:2;598:6;595:14;592:45;589:2;;;640:5;;;;;;589:2;677:6;671:4;667:17;656:28;;713:3;707:10;693:24;;740:2;732:6;729:14;726:2;;;746:5;;;;;;726:2;;807:16;801:4;797:27;790:4;781:6;776:3;772:16;768:27;765:60;762:2;;;828:5;;;;;762:2;884;872:15;889:66;868:88;859:98;;959:4;855:109;851:2;844:121;863:3;-1:-1:-1;;154:836:31;:::o",
  "source": "// SPDX-License-Identifier: LGPL-3.0-or-later\npragma solidity ^0.7.1;\nimport \"./BaseBidOnAddresses.sol\";\nimport \"./NFTSalaryRecipient.sol\";\n\n/// @title Base class for a \"salary\" that is paid one token per second using minted conditionals.\n/// @author Victor Porton\n/// It was considered to allow the DAO to adjust registration date to pay salary retrospectively,\n/// but this seems giving too much rights to the DAO similarly as if it had the right to declare anyone dead.\n///\n/// It would cause this effect: A scientist who is already great may register then his date is moved back\n/// in time and instantly he or she receives a very big sum of money to his account.\n/// If it is done erroneously, there may be no way to move the registration date again forward in time,\n/// because the tokens may be already withdrawn. And it cannot be done in a fully decentralized way because\n/// it needs oracles. So errors are seem inevitable.\n/// On the other hand, somebody malicious may create and register in my system a pool of Ethereum addresses that\n/// individuals can receive from them as if they themselves registered in the past.\n/// So it in some cases (if the registration date is past the contract deployment) this issue is impossible to\n/// mitigate.\n///\n/// The salary is paid in minted tokens groups into \"chains\":\n/// the original salary token and anyone can replace it by another token, next in the chain.\ncontract BaseSalary is BaseBidOnAddresses {\n    /// Salary tokens minted.\n    /// @param customer The customer address.\n    /// @param amount The minted amount.\n    /// @param data Additional data.\n    event SalaryMinted(\n        address indexed customer,\n        uint256 indexed condition,\n        uint256 amount,\n        bytes data\n    );\n\n    /// Salary token recreated (salary recalculation request).\n    /// @param customer The customer address.\n    /// @param originalCondition The original token ID.\n    /// @param newCondition The new token ID.\n    event ConditionReCreate(\n        address indexed customer,\n        uint256 indexed originalCondition,\n        uint256 indexed newCondition\n    );\n\n    NFTSalaryRecipient public salaryRecipients;\n\n    // FIXME: uint64 instead?\n    // Mapping (condition ID => registration time).\n    mapping(uint256 => uint) public conditionCreationDates;\n    // Mapping (condition ID => salary block time).\n    mapping(uint256 => uint) public lastSalaryDates;\n\n    /// Mapping (condition ID => first condition ID in the chain)\n    ///\n    /// I call _chain_ of conditions the list of conditions resulting from creating and recreating conditions.\n    mapping(uint256 => uint256) public firstConditionInChain;\n    /// Mapping (first condition ID in the chain => last condition ID in the chain)\n    ///\n    /// I call _chain_ of conditions the list of conditions resulting from creating and recreating conditions.\n    mapping(uint256 => uint256) public firstToLastConditionInChain;\n\n    /// Constructor.\n    /// @param _uri The ERC-1155 token URI.\n    constructor(NFTSalaryRecipient _salaryRecipients, string memory _uri)\n        BaseBidOnAddresses(_uri)\n    {\n        salaryRecipients = _salaryRecipients;\n    }\n\n    /// Mint a salary token.\n    /// @param _condition The condition ID.\n    /// @param _data Additional data.\n    /// This method can be called only by the salary receiver.\n    function mintSalary(uint256 _condition, bytes memory _data)\n        ensureLastConditionInChain(_condition) external\n    {\n        uint _lastSalaryDate = lastSalaryDates[_condition];\n        require(_lastSalaryDate != 0, \"You are not registered.\");\n        // Note: Even if you withdraw once per 20 years, you will get only 630,720,000 tokens.\n        // This number is probably not to big to be displayed well in UIs.\n        uint256 _amount = (block.timestamp - _lastSalaryDate) * 10**18; // one token per second\n        _mintToCustomer(msg.sender, firstToLastConditionInChain[_condition], _amount, _data);\n        lastSalaryDates[_condition] = block.timestamp;\n        emit SalaryMinted(msg.sender, _condition, _amount, _data);\n    }\n\n    /// Make a new condition that replaces the old one.\n    ///\n    /// In other words, it is a request to recalculate somebody's salary.\n    ///\n    /// Anyone can request to recalculate anyone's salary.\n    ///\n    /// It's also useful to punish someone for decreasing his work performance or an evil act.\n    /// This is to be called among other when a person dies.\n    ///\n    /// Recalculation is also forced when a salary receiver transfers away his current salary token.\n    /// It is useful to remove a trader's incentive to kill the issuer to reduce the circulating supply.\n    ///\n    /// Issue to solve later: Should we recommend:\n    /// - calling this function on each new project milestone?\n    /// - calling this function regularly (e.g. every week)?\n    ///\n    /// This function also withdraws the old token.\n    function recreateCondition(uint256 _condition, bytes memory _data) public returns (uint256) {\n        return _recreateCondition(_condition, _data);\n    }\n\n    function _doCreateCondition(address _customer, bytes memory _data) internal virtual override returns (uint256) {\n        uint256 _condition = super._doCreateCondition(_customer, _data);\n        conditionCreationDates[_condition] = block.timestamp;\n        firstConditionInChain[_condition] = _condition;\n        firstToLastConditionInChain[_condition] = _condition;\n        salaryRecipients.mint(_customer, _condition);\n        return _condition;\n    }\n\n    /// Make a new condition that replaces the old one.\n    /// The same can be done by transferring to yourself 0 tokens, but this method uses less gas.\n    ///\n    /// We need to create a new condition every time when an outgoimg transfer of a conditional token happens.\n    /// Otherwise an investor would gain if he kills a scientist to reduce the circulating supply of his token to increase the price.\n    /// Allowing old tokens to be exchangeable for new ones? (Allowing the reverse swap would create killer's gain.)\n    /// Additional benefit of this solution: We can have different rewards at different stages of project,\n    /// what may be beneficial for early startups funding.\n    ///\n    /// Problem to be solved later: There should be an advice to switch to a new token at each milestone of a project?\n    ///\n    /// Anyone can create a ERC-1155 contract that allows to use any of the tokens in the list\n    /// by locking any of the tokens in the list as a new \"general\" token. We should recommend customers not to\n    /// use such contracts, because it creates for them the killer exploit.\n    ///\n    /// If we would exchange the old and new tokens for the same amounts of collaterals, then it would be\n    /// effectively the same token and therefore minting more new token would possibly devalue the old one,\n    /// thus triggering the killer's exploit again. So we make old and new completely independent.\n    ///\n    /// Old token is 1:1 converted to the new token.\n    ///\n    /// Remark: To make easy to exchange the token even if it is recreated, we can make a wrapper or locker\n    /// token that uses `firstConditionInChain[]` to aggregate several tokens together.\n    /// A similar wrapper (the customer need to `setApprovalForAll()` on it) that uses\n    /// `firstToLastConditionInChain[]` can be used to transfer away recreated tokens\n    /// even if an evil DAO tries to frontrun the customer by recreating his tokens very often.\n    /// TODO: Test that it's possible to create such a locker.\n    ///\n    /// Note: That wrapper could be carelessly used to create the investor's killing customer incentive\n    /// by the customer using it to transfer to an investor. Even if the customer uses it only for\n    /// exchanges, an investor can buy at an exchange and be a killer.\n    /// To make it safe, it must stop accepting any new tokens after a transfer.\n    /// It can determine if a token is new just comparing by `<` operator.\n    /// It's strongly recommended that an app that uses this contract provides its own swap/exchange UI\n    /// and warns the user not to use arbitrary exchanges as being an incentive to kill the user.\n    ///\n    /// We allow anybody (not just the account owner or DAO) to recreate a condition, because:\n    /// - Exchanges can create a \"composite\" token that allows to withdraw any of the tokens in the chain\n    ///   up to a certain period of time (using on-chain `conditionCreationDates`).\n    /// - Therefore somebody's token can be withdrawn even if its ID changes arbitrarily often.\n    ///\n    /// @param _condition The condition ID.\n    function _recreateCondition(uint256 _condition, bytes memory _data)\n        internal ensureFirstConditionInChain(_condition) returns (uint256)\n    {\n        address _customer = salaryRecipients.ownerOf(_condition);\n        uint256 _oldCondition = firstToLastConditionInChain[_condition];\n        uint256 _newCondition = _doCreateCondition(_customer, _data);\n        firstConditionInChain[_newCondition] = _condition;\n\n        uint256 _amount = _balances[_oldCondition][_customer];\n        _balances[_newCondition][_customer] = _amount;\n        _balances[_oldCondition][_customer] = 0;\n\n        emit TransferSingle(msg.sender, _customer, address(0), _condition, _amount);\n        emit TransferSingle(msg.sender, address(0), _customer, _newCondition, _amount);\n\n        lastSalaryDates[_newCondition] = lastSalaryDates[_condition];\n        // TODO: Should we here set `lastSalaryDates[_condition] = 0` to save storage space? // TODO: It would also eliminate the need to check in mint function.\n\n        emit ConditionReCreate(_customer, _condition, _newCondition);\n        return _newCondition;\n    }\n\n    /// Check if it is the first condition in a chain of conditions.\n    /// @param _id The condition ID.\n    ///\n    /// Must be called with `_id != 0`.\n    function isFirstConditionInChain(uint256 _id) internal view returns (bool) {\n        return firstConditionInChain[_id] == _id;\n    }\n\n    /// Check if it is the last condition in a chain of conditions.\n    /// @param _id The condition ID.\n    ///\n    /// Must be called with `_id != 0`.\n    ///\n    /// TODO: Should make this function public?\n    function isLastConditionInChain(uint256 _id) internal view returns (bool) {\n        return firstToLastConditionInChain[firstConditionInChain[_id]] == _id;\n    }\n\n    function _doTransfer(uint256 _id, address _from, address _to, uint256 _value) internal virtual override {\n        super._doTransfer(_id, _from, _to, _value);\n\n        if (_id != 0 && salaryRecipients.ownerOf(_id) == msg.sender) {\n            bytes memory _data;\n            if (isLastConditionInChain(_id)) { // correct because `_id != 0`\n                _recreateCondition(_id, _data);\n            }\n        }\n    }\n\n    function _registerCustomer(address _customer, bytes calldata _data)\n        virtual internal returns (uint256)\n    {\n        uint256 _condition = _doCreateCondition(_customer, _data);\n        lastSalaryDates[_condition] = block.timestamp;\n        return _condition;\n    }\n\n    modifier ensureFirstConditionInChain(uint256 _id) {\n        // TODO: Is `_id != 0` check needed?\n        require(_isConditional(_id) && _id != 0 && isFirstConditionInChain(_id), \"Only for the last salary token.\");\n        _;\n    }\n\n    modifier ensureLastConditionInChain(uint256 _id) {\n        // TODO: Is `_id != 0` check needed?\n        require(_isConditional(_id) && _id != 0 && isLastConditionInChain(_id), \"Only for the last salary token.\");\n        _;\n    }\n}\n",
  "sourcePath": "/home/user/Projects/future-contracts/contracts/BaseSalary.sol",
  "ast": {
    "absolutePath": "/home/user/Projects/future-contracts/contracts/BaseSalary.sol",
    "exportedSymbols": {
      "ABDKMath64x64": [
        9755
      ],
      "Address": [
        5955
      ],
      "BaseBidOnAddresses": [
        292
      ],
      "BaseLock": [
        1494
      ],
      "BaseSalary": [
        2186
      ],
      "Context": [
        3930
      ],
      "ERC165": [
        4096
      ],
      "ERC721": [
        5492
      ],
      "EnumerableMap": [
        6410
      ],
      "EnumerableSet": [
        6890
      ],
      "IERC165": [
        4108
      ],
      "IERC721": [
        5635
      ],
      "IERC721Enumerable": [
        5666
      ],
      "IERC721Metadata": [
        5693
      ],
      "IERC721Receiver": [
        5711
      ],
      "NFTSalaryRecipient": [
        3795
      ],
      "Ownable": [
        4039
      ],
      "SafeMath": [
        4304
      ],
      "Strings": [
        6977
      ]
    },
    "id": 2187,
    "license": "LGPL-3.0-or-later",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1747,
        "literals": [
          "solidity",
          "^",
          "0.7",
          ".1"
        ],
        "nodeType": "PragmaDirective",
        "src": "46:23:3"
      },
      {
        "absolutePath": "/home/user/Projects/future-contracts/contracts/BaseBidOnAddresses.sol",
        "file": "./BaseBidOnAddresses.sol",
        "id": 1748,
        "nodeType": "ImportDirective",
        "scope": 2187,
        "sourceUnit": 293,
        "src": "70:34:3",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/home/user/Projects/future-contracts/contracts/NFTSalaryRecipient.sol",
        "file": "./NFTSalaryRecipient.sol",
        "id": 1749,
        "nodeType": "ImportDirective",
        "scope": 2187,
        "sourceUnit": 3796,
        "src": "105:34:3",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 1751,
              "name": "BaseBidOnAddresses",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 292,
              "src": "1437:18:3",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_BaseBidOnAddresses_$292",
                "typeString": "contract BaseBidOnAddresses"
              }
            },
            "id": 1752,
            "nodeType": "InheritanceSpecifier",
            "src": "1437:18:3"
          }
        ],
        "contractDependencies": [
          292,
          1494,
          3207,
          3540,
          3930,
          4096,
          4108,
          4355,
          4383,
          4505,
          4520,
          4561,
          5519,
          5711
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 1750,
          "nodeType": "StructuredDocumentation",
          "src": "141:1273:3",
          "text": "@title Base class for a \"salary\" that is paid one token per second using minted conditionals.\n @author Victor Porton\n It was considered to allow the DAO to adjust registration date to pay salary retrospectively,\n but this seems giving too much rights to the DAO similarly as if it had the right to declare anyone dead.\n It would cause this effect: A scientist who is already great may register then his date is moved back\n in time and instantly he or she receives a very big sum of money to his account.\n If it is done erroneously, there may be no way to move the registration date again forward in time,\n because the tokens may be already withdrawn. And it cannot be done in a fully decentralized way because\n it needs oracles. So errors are seem inevitable.\n On the other hand, somebody malicious may create and register in my system a pool of Ethereum addresses that\n individuals can receive from them as if they themselves registered in the past.\n So it in some cases (if the registration date is past the contract deployment) this issue is impossible to\n mitigate.\n The salary is paid in minted tokens groups into \"chains\":\n the original salary token and anyone can replace it by another token, next in the chain."
        },
        "fullyImplemented": true,
        "id": 2186,
        "linearizedBaseContracts": [
          2186,
          292,
          1494,
          5519,
          5711,
          4355,
          4383,
          4561,
          3540,
          3207,
          4520,
          4505,
          4096,
          4108,
          3930
        ],
        "name": "BaseSalary",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "anonymous": false,
            "documentation": {
              "id": 1753,
              "nodeType": "StructuredDocumentation",
              "src": "1462:149:3",
              "text": "Salary tokens minted.\n @param customer The customer address.\n @param amount The minted amount.\n @param data Additional data."
            },
            "id": 1763,
            "name": "SalaryMinted",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 1762,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1755,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "customer",
                  "nodeType": "VariableDeclaration",
                  "scope": 1763,
                  "src": "1644:24:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1754,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1644:7:3",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1757,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "condition",
                  "nodeType": "VariableDeclaration",
                  "scope": 1763,
                  "src": "1678:25:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1756,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1678:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1759,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 1763,
                  "src": "1713:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1758,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1713:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1761,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "data",
                  "nodeType": "VariableDeclaration",
                  "scope": 1763,
                  "src": "1737:10:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1760,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1737:5:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1634:119:3"
            },
            "src": "1616:138:3"
          },
          {
            "anonymous": false,
            "documentation": {
              "id": 1764,
              "nodeType": "StructuredDocumentation",
              "src": "1760:206:3",
              "text": "Salary token recreated (salary recalculation request).\n @param customer The customer address.\n @param originalCondition The original token ID.\n @param newCondition The new token ID."
            },
            "id": 1772,
            "name": "ConditionReCreate",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 1771,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1766,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "customer",
                  "nodeType": "VariableDeclaration",
                  "scope": 1772,
                  "src": "2004:24:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1765,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2004:7:3",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1768,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "originalCondition",
                  "nodeType": "VariableDeclaration",
                  "scope": 1772,
                  "src": "2038:33:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1767,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2038:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1770,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "newCondition",
                  "nodeType": "VariableDeclaration",
                  "scope": 1772,
                  "src": "2081:28:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1769,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2081:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1994:121:3"
            },
            "src": "1971:145:3"
          },
          {
            "constant": false,
            "functionSelector": "b1ece8df",
            "id": 1774,
            "mutability": "mutable",
            "name": "salaryRecipients",
            "nodeType": "VariableDeclaration",
            "scope": 2186,
            "src": "2122:42:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_NFTSalaryRecipient_$3795",
              "typeString": "contract NFTSalaryRecipient"
            },
            "typeName": {
              "id": 1773,
              "name": "NFTSalaryRecipient",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3795,
              "src": "2122:18:3",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_NFTSalaryRecipient_$3795",
                "typeString": "contract NFTSalaryRecipient"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "ee066ef6",
            "id": 1778,
            "mutability": "mutable",
            "name": "conditionCreationDates",
            "nodeType": "VariableDeclaration",
            "scope": 2186,
            "src": "2253:54:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
              "typeString": "mapping(uint256 => uint256)"
            },
            "typeName": {
              "id": 1777,
              "keyType": {
                "id": 1775,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "2261:7:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "Mapping",
              "src": "2253:24:3",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                "typeString": "mapping(uint256 => uint256)"
              },
              "valueType": {
                "id": 1776,
                "name": "uint",
                "nodeType": "ElementaryTypeName",
                "src": "2272:4:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "1830d83d",
            "id": 1782,
            "mutability": "mutable",
            "name": "lastSalaryDates",
            "nodeType": "VariableDeclaration",
            "scope": 2186,
            "src": "2365:47:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
              "typeString": "mapping(uint256 => uint256)"
            },
            "typeName": {
              "id": 1781,
              "keyType": {
                "id": 1779,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "2373:7:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "Mapping",
              "src": "2365:24:3",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                "typeString": "mapping(uint256 => uint256)"
              },
              "valueType": {
                "id": 1780,
                "name": "uint",
                "nodeType": "ElementaryTypeName",
                "src": "2384:4:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "documentation": {
              "id": 1783,
              "nodeType": "StructuredDocumentation",
              "src": "2419:180:3",
              "text": "Mapping (condition ID => first condition ID in the chain)\n I call _chain_ of conditions the list of conditions resulting from creating and recreating conditions."
            },
            "functionSelector": "28eb7087",
            "id": 1787,
            "mutability": "mutable",
            "name": "firstConditionInChain",
            "nodeType": "VariableDeclaration",
            "scope": 2186,
            "src": "2604:56:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
              "typeString": "mapping(uint256 => uint256)"
            },
            "typeName": {
              "id": 1786,
              "keyType": {
                "id": 1784,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "2612:7:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "Mapping",
              "src": "2604:27:3",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                "typeString": "mapping(uint256 => uint256)"
              },
              "valueType": {
                "id": 1785,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "2623:7:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "documentation": {
              "id": 1788,
              "nodeType": "StructuredDocumentation",
              "src": "2666:198:3",
              "text": "Mapping (first condition ID in the chain => last condition ID in the chain)\n I call _chain_ of conditions the list of conditions resulting from creating and recreating conditions."
            },
            "functionSelector": "9ea52967",
            "id": 1792,
            "mutability": "mutable",
            "name": "firstToLastConditionInChain",
            "nodeType": "VariableDeclaration",
            "scope": 2186,
            "src": "2869:62:3",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
              "typeString": "mapping(uint256 => uint256)"
            },
            "typeName": {
              "id": 1791,
              "keyType": {
                "id": 1789,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "2877:7:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "Mapping",
              "src": "2869:27:3",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                "typeString": "mapping(uint256 => uint256)"
              },
              "valueType": {
                "id": 1790,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "2888:7:3",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "visibility": "public"
          },
          {
            "body": {
              "id": 1807,
              "nodeType": "Block",
              "src": "3110:53:3",
              "statements": [
                {
                  "expression": {
                    "id": 1805,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 1803,
                      "name": "salaryRecipients",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1774,
                      "src": "3120:16:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_NFTSalaryRecipient_$3795",
                        "typeString": "contract NFTSalaryRecipient"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 1804,
                      "name": "_salaryRecipients",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1795,
                      "src": "3139:17:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_NFTSalaryRecipient_$3795",
                        "typeString": "contract NFTSalaryRecipient"
                      }
                    },
                    "src": "3120:36:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_NFTSalaryRecipient_$3795",
                      "typeString": "contract NFTSalaryRecipient"
                    }
                  },
                  "id": 1806,
                  "nodeType": "ExpressionStatement",
                  "src": "3120:36:3"
                }
              ]
            },
            "documentation": {
              "id": 1793,
              "nodeType": "StructuredDocumentation",
              "src": "2938:60:3",
              "text": "Constructor.\n @param _uri The ERC-1155 token URI."
            },
            "id": 1808,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 1800,
                    "name": "_uri",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1797,
                    "src": "3100:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  }
                ],
                "id": 1801,
                "modifierName": {
                  "id": 1799,
                  "name": "BaseBidOnAddresses",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 292,
                  "src": "3081:18:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_BaseBidOnAddresses_$292_$",
                    "typeString": "type(contract BaseBidOnAddresses)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3081:24:3"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1798,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1795,
                  "mutability": "mutable",
                  "name": "_salaryRecipients",
                  "nodeType": "VariableDeclaration",
                  "scope": 1808,
                  "src": "3015:36:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_NFTSalaryRecipient_$3795",
                    "typeString": "contract NFTSalaryRecipient"
                  },
                  "typeName": {
                    "id": 1794,
                    "name": "NFTSalaryRecipient",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 3795,
                    "src": "3015:18:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_NFTSalaryRecipient_$3795",
                      "typeString": "contract NFTSalaryRecipient"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1797,
                  "mutability": "mutable",
                  "name": "_uri",
                  "nodeType": "VariableDeclaration",
                  "scope": 1808,
                  "src": "3053:18:3",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1796,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "3053:6:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3014:58:3"
            },
            "returnParameters": {
              "id": 1802,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3110:0:3"
            },
            "scope": 2186,
            "src": "3003:160:3",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1869,
              "nodeType": "Block",
              "src": "3463:615:3",
              "statements": [
                {
                  "assignments": [
                    1820
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1820,
                      "mutability": "mutable",
                      "name": "_lastSalaryDate",
                      "nodeType": "VariableDeclaration",
                      "scope": 1869,
                      "src": "3473:20:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1819,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "3473:4:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1824,
                  "initialValue": {
                    "baseExpression": {
                      "id": 1821,
                      "name": "lastSalaryDates",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1782,
                      "src": "3496:15:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                        "typeString": "mapping(uint256 => uint256)"
                      }
                    },
                    "id": 1823,
                    "indexExpression": {
                      "id": 1822,
                      "name": "_condition",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1811,
                      "src": "3512:10:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "3496:27:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3473:50:3"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1828,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 1826,
                          "name": "_lastSalaryDate",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1820,
                          "src": "3541:15:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 1827,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3560:1:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "3541:20:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "596f7520617265206e6f7420726567697374657265642e",
                        "id": 1829,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3563:25:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_5e1e84273f0da3c7ca99195233d482a359df5ba06848f89b045c6e2e4e7fdefa",
                          "typeString": "literal_string \"You are not registered.\""
                        },
                        "value": "You are not registered."
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_5e1e84273f0da3c7ca99195233d482a359df5ba06848f89b045c6e2e4e7fdefa",
                          "typeString": "literal_string \"You are not registered.\""
                        }
                      ],
                      "id": 1825,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "3533:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1830,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3533:56:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1831,
                  "nodeType": "ExpressionStatement",
                  "src": "3533:56:3"
                },
                {
                  "assignments": [
                    1833
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1833,
                      "mutability": "mutable",
                      "name": "_amount",
                      "nodeType": "VariableDeclaration",
                      "scope": 1869,
                      "src": "3769:15:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1832,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3769:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1843,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1842,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "components": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1837,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 1834,
                              "name": "block",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4294967292,
                              "src": "3788:5:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_block",
                                "typeString": "block"
                              }
                            },
                            "id": 1835,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "timestamp",
                            "nodeType": "MemberAccess",
                            "src": "3788:15:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "id": 1836,
                            "name": "_lastSalaryDate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1820,
                            "src": "3806:15:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "3788:33:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 1838,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "3787:35:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "*",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_rational_1000000000000000000_by_1",
                        "typeString": "int_const 1000000000000000000"
                      },
                      "id": 1841,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "leftExpression": {
                        "hexValue": "3130",
                        "id": 1839,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3825:2:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_10_by_1",
                          "typeString": "int_const 10"
                        },
                        "value": "10"
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "**",
                      "rightExpression": {
                        "hexValue": "3138",
                        "id": 1840,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3829:2:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_18_by_1",
                          "typeString": "int_const 18"
                        },
                        "value": "18"
                      },
                      "src": "3825:6:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1000000000000000000_by_1",
                        "typeString": "int_const 1000000000000000000"
                      }
                    },
                    "src": "3787:44:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3769:62:3"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 1845,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967281,
                          "src": "3881:3:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 1846,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "3881:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "baseExpression": {
                          "id": 1847,
                          "name": "firstToLastConditionInChain",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1792,
                          "src": "3893:27:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                            "typeString": "mapping(uint256 => uint256)"
                          }
                        },
                        "id": 1849,
                        "indexExpression": {
                          "id": 1848,
                          "name": "_condition",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1811,
                          "src": "3921:10:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "3893:39:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 1850,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1833,
                        "src": "3934:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 1851,
                        "name": "_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1813,
                        "src": "3943:5:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 1844,
                      "name": "_mintToCustomer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 970,
                      "src": "3865:15:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (address,uint256,uint256,bytes memory)"
                      }
                    },
                    "id": 1852,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3865:84:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1853,
                  "nodeType": "ExpressionStatement",
                  "src": "3865:84:3"
                },
                {
                  "expression": {
                    "id": 1859,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 1854,
                        "name": "lastSalaryDates",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1782,
                        "src": "3959:15:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                          "typeString": "mapping(uint256 => uint256)"
                        }
                      },
                      "id": 1856,
                      "indexExpression": {
                        "id": 1855,
                        "name": "_condition",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1811,
                        "src": "3975:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "3959:27:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 1857,
                        "name": "block",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967292,
                        "src": "3989:5:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_block",
                          "typeString": "block"
                        }
                      },
                      "id": 1858,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "timestamp",
                      "nodeType": "MemberAccess",
                      "src": "3989:15:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3959:45:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1860,
                  "nodeType": "ExpressionStatement",
                  "src": "3959:45:3"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 1862,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967281,
                          "src": "4032:3:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 1863,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "4032:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 1864,
                        "name": "_condition",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1811,
                        "src": "4044:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 1865,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1833,
                        "src": "4056:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 1866,
                        "name": "_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1813,
                        "src": "4065:5:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 1861,
                      "name": "SalaryMinted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1763,
                      "src": "4019:12:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (address,uint256,uint256,bytes memory)"
                      }
                    },
                    "id": 1867,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4019:52:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1868,
                  "nodeType": "EmitStatement",
                  "src": "4014:57:3"
                }
              ]
            },
            "documentation": {
              "id": 1809,
              "nodeType": "StructuredDocumentation",
              "src": "3169:169:3",
              "text": "Mint a salary token.\n @param _condition The condition ID.\n @param _data Additional data.\n This method can be called only by the salary receiver."
            },
            "functionSelector": "0cbba89c",
            "id": 1870,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 1816,
                    "name": "_condition",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1811,
                    "src": "3438:10:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 1817,
                "modifierName": {
                  "id": 1815,
                  "name": "ensureLastConditionInChain",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2185,
                  "src": "3411:26:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3411:38:3"
              }
            ],
            "name": "mintSalary",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1814,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1811,
                  "mutability": "mutable",
                  "name": "_condition",
                  "nodeType": "VariableDeclaration",
                  "scope": 1870,
                  "src": "3363:18:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1810,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3363:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1813,
                  "mutability": "mutable",
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 1870,
                  "src": "3383:18:3",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1812,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3383:5:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3362:40:3"
            },
            "returnParameters": {
              "id": 1818,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3463:0:3"
            },
            "scope": 2186,
            "src": "3343:735:3",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 1885,
              "nodeType": "Block",
              "src": "5002:61:3",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 1881,
                        "name": "_condition",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1873,
                        "src": "5038:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 1882,
                        "name": "_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1875,
                        "src": "5050:5:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 1880,
                      "name": "_recreateCondition",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2037,
                      "src": "5019:18:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_uint256_$",
                        "typeString": "function (uint256,bytes memory) returns (uint256)"
                      }
                    },
                    "id": 1883,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5019:37:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1879,
                  "id": 1884,
                  "nodeType": "Return",
                  "src": "5012:44:3"
                }
              ]
            },
            "documentation": {
              "id": 1871,
              "nodeType": "StructuredDocumentation",
              "src": "4084:821:3",
              "text": "Make a new condition that replaces the old one.\n In other words, it is a request to recalculate somebody's salary.\n Anyone can request to recalculate anyone's salary.\n It's also useful to punish someone for decreasing his work performance or an evil act.\n This is to be called among other when a person dies.\n Recalculation is also forced when a salary receiver transfers away his current salary token.\n It is useful to remove a trader's incentive to kill the issuer to reduce the circulating supply.\n Issue to solve later: Should we recommend:\n - calling this function on each new project milestone?\n - calling this function regularly (e.g. every week)?\n This function also withdraws the old token."
            },
            "functionSelector": "adde70c4",
            "id": 1886,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "recreateCondition",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1876,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1873,
                  "mutability": "mutable",
                  "name": "_condition",
                  "nodeType": "VariableDeclaration",
                  "scope": 1886,
                  "src": "4937:18:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1872,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4937:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1875,
                  "mutability": "mutable",
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 1886,
                  "src": "4957:18:3",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1874,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "4957:5:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4936:40:3"
            },
            "returnParameters": {
              "id": 1879,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1878,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1886,
                  "src": "4993:7:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1877,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4993:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4992:9:3"
            },
            "scope": 2186,
            "src": "4910:153:3",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              1345
            ],
            "body": {
              "id": 1932,
              "nodeType": "Block",
              "src": "5180:341:3",
              "statements": [
                {
                  "assignments": [
                    1897
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1897,
                      "mutability": "mutable",
                      "name": "_condition",
                      "nodeType": "VariableDeclaration",
                      "scope": 1932,
                      "src": "5190:18:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1896,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5190:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1903,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 1900,
                        "name": "_customer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1888,
                        "src": "5236:9:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1901,
                        "name": "_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1890,
                        "src": "5247:5:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "id": 1898,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967271,
                        "src": "5211:5:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_super$_BaseSalary_$2186",
                          "typeString": "contract super BaseSalary"
                        }
                      },
                      "id": 1899,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_doCreateCondition",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1345,
                      "src": "5211:24:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_uint256_$",
                        "typeString": "function (address,bytes memory) returns (uint256)"
                      }
                    },
                    "id": 1902,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5211:42:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5190:63:3"
                },
                {
                  "expression": {
                    "id": 1909,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 1904,
                        "name": "conditionCreationDates",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1778,
                        "src": "5263:22:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                          "typeString": "mapping(uint256 => uint256)"
                        }
                      },
                      "id": 1906,
                      "indexExpression": {
                        "id": 1905,
                        "name": "_condition",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1897,
                        "src": "5286:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "5263:34:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 1907,
                        "name": "block",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967292,
                        "src": "5300:5:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_block",
                          "typeString": "block"
                        }
                      },
                      "id": 1908,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "timestamp",
                      "nodeType": "MemberAccess",
                      "src": "5300:15:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5263:52:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1910,
                  "nodeType": "ExpressionStatement",
                  "src": "5263:52:3"
                },
                {
                  "expression": {
                    "id": 1915,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 1911,
                        "name": "firstConditionInChain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1787,
                        "src": "5325:21:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                          "typeString": "mapping(uint256 => uint256)"
                        }
                      },
                      "id": 1913,
                      "indexExpression": {
                        "id": 1912,
                        "name": "_condition",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1897,
                        "src": "5347:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "5325:33:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 1914,
                      "name": "_condition",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1897,
                      "src": "5361:10:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5325:46:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1916,
                  "nodeType": "ExpressionStatement",
                  "src": "5325:46:3"
                },
                {
                  "expression": {
                    "id": 1921,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 1917,
                        "name": "firstToLastConditionInChain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1792,
                        "src": "5381:27:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                          "typeString": "mapping(uint256 => uint256)"
                        }
                      },
                      "id": 1919,
                      "indexExpression": {
                        "id": 1918,
                        "name": "_condition",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1897,
                        "src": "5409:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "5381:39:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 1920,
                      "name": "_condition",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1897,
                      "src": "5423:10:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5381:52:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1922,
                  "nodeType": "ExpressionStatement",
                  "src": "5381:52:3"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 1926,
                        "name": "_customer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1888,
                        "src": "5465:9:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1927,
                        "name": "_condition",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1897,
                        "src": "5476:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 1923,
                        "name": "salaryRecipients",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1774,
                        "src": "5443:16:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_NFTSalaryRecipient_$3795",
                          "typeString": "contract NFTSalaryRecipient"
                        }
                      },
                      "id": 1925,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 3711,
                      "src": "5443:21:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) external"
                      }
                    },
                    "id": 1928,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5443:44:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1929,
                  "nodeType": "ExpressionStatement",
                  "src": "5443:44:3"
                },
                {
                  "expression": {
                    "id": 1930,
                    "name": "_condition",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1897,
                    "src": "5504:10:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1895,
                  "id": 1931,
                  "nodeType": "Return",
                  "src": "5497:17:3"
                }
              ]
            },
            "id": 1933,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_doCreateCondition",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 1892,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "5153:8:3"
            },
            "parameters": {
              "id": 1891,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1888,
                  "mutability": "mutable",
                  "name": "_customer",
                  "nodeType": "VariableDeclaration",
                  "scope": 1933,
                  "src": "5097:17:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1887,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5097:7:3",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1890,
                  "mutability": "mutable",
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 1933,
                  "src": "5116:18:3",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1889,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "5116:5:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5096:39:3"
            },
            "returnParameters": {
              "id": 1895,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1894,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1933,
                  "src": "5171:7:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1893,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5171:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5170:9:3"
            },
            "scope": 2186,
            "src": "5069:452:3",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2036,
              "nodeType": "Block",
              "src": "8781:951:3",
              "statements": [
                {
                  "assignments": [
                    1947
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1947,
                      "mutability": "mutable",
                      "name": "_customer",
                      "nodeType": "VariableDeclaration",
                      "scope": 2036,
                      "src": "8791:17:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 1946,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "8791:7:3",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1952,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 1950,
                        "name": "_condition",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1936,
                        "src": "8836:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 1948,
                        "name": "salaryRecipients",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1774,
                        "src": "8811:16:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_NFTSalaryRecipient_$3795",
                          "typeString": "contract NFTSalaryRecipient"
                        }
                      },
                      "id": 1949,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "ownerOf",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 4709,
                      "src": "8811:24:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_address_$",
                        "typeString": "function (uint256) view external returns (address)"
                      }
                    },
                    "id": 1951,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8811:36:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8791:56:3"
                },
                {
                  "assignments": [
                    1954
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1954,
                      "mutability": "mutable",
                      "name": "_oldCondition",
                      "nodeType": "VariableDeclaration",
                      "scope": 2036,
                      "src": "8857:21:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1953,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "8857:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1958,
                  "initialValue": {
                    "baseExpression": {
                      "id": 1955,
                      "name": "firstToLastConditionInChain",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1792,
                      "src": "8881:27:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                        "typeString": "mapping(uint256 => uint256)"
                      }
                    },
                    "id": 1957,
                    "indexExpression": {
                      "id": 1956,
                      "name": "_condition",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1936,
                      "src": "8909:10:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "8881:39:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8857:63:3"
                },
                {
                  "assignments": [
                    1960
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1960,
                      "mutability": "mutable",
                      "name": "_newCondition",
                      "nodeType": "VariableDeclaration",
                      "scope": 2036,
                      "src": "8930:21:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1959,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "8930:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1965,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 1962,
                        "name": "_customer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1947,
                        "src": "8973:9:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1963,
                        "name": "_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1938,
                        "src": "8984:5:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 1961,
                      "name": "_doCreateCondition",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        1933
                      ],
                      "referencedDeclaration": 1933,
                      "src": "8954:18:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_uint256_$",
                        "typeString": "function (address,bytes memory) returns (uint256)"
                      }
                    },
                    "id": 1964,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8954:36:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8930:60:3"
                },
                {
                  "expression": {
                    "id": 1970,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 1966,
                        "name": "firstConditionInChain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1787,
                        "src": "9000:21:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                          "typeString": "mapping(uint256 => uint256)"
                        }
                      },
                      "id": 1968,
                      "indexExpression": {
                        "id": 1967,
                        "name": "_newCondition",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1960,
                        "src": "9022:13:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "9000:36:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 1969,
                      "name": "_condition",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1936,
                      "src": "9039:10:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9000:49:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1971,
                  "nodeType": "ExpressionStatement",
                  "src": "9000:49:3"
                },
                {
                  "assignments": [
                    1973
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1973,
                      "mutability": "mutable",
                      "name": "_amount",
                      "nodeType": "VariableDeclaration",
                      "scope": 2036,
                      "src": "9060:15:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1972,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "9060:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1979,
                  "initialValue": {
                    "baseExpression": {
                      "baseExpression": {
                        "id": 1974,
                        "name": "_balances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2216,
                        "src": "9078:9:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$",
                          "typeString": "mapping(uint256 => mapping(address => uint256))"
                        }
                      },
                      "id": 1976,
                      "indexExpression": {
                        "id": 1975,
                        "name": "_oldCondition",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1954,
                        "src": "9088:13:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "9078:24:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 1978,
                    "indexExpression": {
                      "id": 1977,
                      "name": "_customer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1947,
                      "src": "9103:9:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "9078:35:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9060:53:3"
                },
                {
                  "expression": {
                    "id": 1986,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "baseExpression": {
                          "id": 1980,
                          "name": "_balances",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2216,
                          "src": "9123:9:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$",
                            "typeString": "mapping(uint256 => mapping(address => uint256))"
                          }
                        },
                        "id": 1983,
                        "indexExpression": {
                          "id": 1981,
                          "name": "_newCondition",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1960,
                          "src": "9133:13:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "9123:24:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 1984,
                      "indexExpression": {
                        "id": 1982,
                        "name": "_customer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1947,
                        "src": "9148:9:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "9123:35:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 1985,
                      "name": "_amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1973,
                      "src": "9161:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9123:45:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1987,
                  "nodeType": "ExpressionStatement",
                  "src": "9123:45:3"
                },
                {
                  "expression": {
                    "id": 1994,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "baseExpression": {
                          "id": 1988,
                          "name": "_balances",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2216,
                          "src": "9178:9:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$",
                            "typeString": "mapping(uint256 => mapping(address => uint256))"
                          }
                        },
                        "id": 1991,
                        "indexExpression": {
                          "id": 1989,
                          "name": "_oldCondition",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1954,
                          "src": "9188:13:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "9178:24:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 1992,
                      "indexExpression": {
                        "id": 1990,
                        "name": "_customer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1947,
                        "src": "9203:9:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "9178:35:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "30",
                      "id": 1993,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9216:1:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "9178:39:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1995,
                  "nodeType": "ExpressionStatement",
                  "src": "9178:39:3"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 1997,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967281,
                          "src": "9248:3:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 1998,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "9248:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 1999,
                        "name": "_customer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1947,
                        "src": "9260:9:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 2002,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "9279:1:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 2001,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "9271:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 2000,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "9271:7:3",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 2003,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9271:10:3",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 2004,
                        "name": "_condition",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1936,
                        "src": "9283:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 2005,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1973,
                        "src": "9295:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1996,
                      "name": "TransferSingle",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4402,
                      "src": "9233:14:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,address,uint256,uint256)"
                      }
                    },
                    "id": 2006,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9233:70:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2007,
                  "nodeType": "EmitStatement",
                  "src": "9228:75:3"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 2009,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967281,
                          "src": "9333:3:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 2010,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "9333:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 2013,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "9353:1:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            }
                          ],
                          "id": 2012,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "9345:7:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 2011,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "9345:7:3",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 2014,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9345:10:3",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "id": 2015,
                        "name": "_customer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1947,
                        "src": "9357:9:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 2016,
                        "name": "_newCondition",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1960,
                        "src": "9368:13:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 2017,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1973,
                        "src": "9383:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2008,
                      "name": "TransferSingle",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4402,
                      "src": "9318:14:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,address,uint256,uint256)"
                      }
                    },
                    "id": 2018,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9318:73:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2019,
                  "nodeType": "EmitStatement",
                  "src": "9313:78:3"
                },
                {
                  "expression": {
                    "id": 2026,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 2020,
                        "name": "lastSalaryDates",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1782,
                        "src": "9402:15:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                          "typeString": "mapping(uint256 => uint256)"
                        }
                      },
                      "id": 2022,
                      "indexExpression": {
                        "id": 2021,
                        "name": "_newCondition",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1960,
                        "src": "9418:13:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "9402:30:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "baseExpression": {
                        "id": 2023,
                        "name": "lastSalaryDates",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1782,
                        "src": "9435:15:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                          "typeString": "mapping(uint256 => uint256)"
                        }
                      },
                      "id": 2025,
                      "indexExpression": {
                        "id": 2024,
                        "name": "_condition",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1936,
                        "src": "9451:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "9435:27:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9402:60:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2027,
                  "nodeType": "ExpressionStatement",
                  "src": "9402:60:3"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 2029,
                        "name": "_customer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1947,
                        "src": "9658:9:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 2030,
                        "name": "_condition",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1936,
                        "src": "9669:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 2031,
                        "name": "_newCondition",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1960,
                        "src": "9681:13:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2028,
                      "name": "ConditionReCreate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1772,
                      "src": "9640:17:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256,uint256)"
                      }
                    },
                    "id": 2032,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9640:55:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2033,
                  "nodeType": "EmitStatement",
                  "src": "9635:60:3"
                },
                {
                  "expression": {
                    "id": 2034,
                    "name": "_newCondition",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1960,
                    "src": "9712:13:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1945,
                  "id": 2035,
                  "nodeType": "Return",
                  "src": "9705:20:3"
                }
              ]
            },
            "documentation": {
              "id": 1934,
              "nodeType": "StructuredDocumentation",
              "src": "5527:3102:3",
              "text": "Make a new condition that replaces the old one.\n The same can be done by transferring to yourself 0 tokens, but this method uses less gas.\n We need to create a new condition every time when an outgoimg transfer of a conditional token happens.\n Otherwise an investor would gain if he kills a scientist to reduce the circulating supply of his token to increase the price.\n Allowing old tokens to be exchangeable for new ones? (Allowing the reverse swap would create killer's gain.)\n Additional benefit of this solution: We can have different rewards at different stages of project,\n what may be beneficial for early startups funding.\n Problem to be solved later: There should be an advice to switch to a new token at each milestone of a project?\n Anyone can create a ERC-1155 contract that allows to use any of the tokens in the list\n by locking any of the tokens in the list as a new \"general\" token. We should recommend customers not to\n use such contracts, because it creates for them the killer exploit.\n If we would exchange the old and new tokens for the same amounts of collaterals, then it would be\n effectively the same token and therefore minting more new token would possibly devalue the old one,\n thus triggering the killer's exploit again. So we make old and new completely independent.\n Old token is 1:1 converted to the new token.\n Remark: To make easy to exchange the token even if it is recreated, we can make a wrapper or locker\n token that uses `firstConditionInChain[]` to aggregate several tokens together.\n A similar wrapper (the customer need to `setApprovalForAll()` on it) that uses\n `firstToLastConditionInChain[]` can be used to transfer away recreated tokens\n even if an evil DAO tries to frontrun the customer by recreating his tokens very often.\n TODO: Test that it's possible to create such a locker.\n Note: That wrapper could be carelessly used to create the investor's killing customer incentive\n by the customer using it to transfer to an investor. Even if the customer uses it only for\n exchanges, an investor can buy at an exchange and be a killer.\n To make it safe, it must stop accepting any new tokens after a transfer.\n It can determine if a token is new just comparing by `<` operator.\n It's strongly recommended that an app that uses this contract provides its own swap/exchange UI\n and warns the user not to use arbitrary exchanges as being an incentive to kill the user.\n We allow anybody (not just the account owner or DAO) to recreate a condition, because:\n - Exchanges can create a \"composite\" token that allows to withdraw any of the tokens in the chain\n   up to a certain period of time (using on-chain `conditionCreationDates`).\n - Therefore somebody's token can be withdrawn even if its ID changes arbitrarily often.\n @param _condition The condition ID."
            },
            "id": 2037,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 1941,
                    "name": "_condition",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1936,
                    "src": "8747:10:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 1942,
                "modifierName": {
                  "id": 1940,
                  "name": "ensureFirstConditionInChain",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2164,
                  "src": "8719:27:3",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8719:39:3"
              }
            ],
            "name": "_recreateCondition",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1939,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1936,
                  "mutability": "mutable",
                  "name": "_condition",
                  "nodeType": "VariableDeclaration",
                  "scope": 2037,
                  "src": "8662:18:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1935,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8662:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1938,
                  "mutability": "mutable",
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 2037,
                  "src": "8682:18:3",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1937,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "8682:5:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8661:40:3"
            },
            "returnParameters": {
              "id": 1945,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1944,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2037,
                  "src": "8768:7:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1943,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8768:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8767:9:3"
            },
            "scope": 2186,
            "src": "8634:1098:3",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2051,
              "nodeType": "Block",
              "src": "9967:57:3",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2049,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "baseExpression": {
                        "id": 2045,
                        "name": "firstConditionInChain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1787,
                        "src": "9984:21:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                          "typeString": "mapping(uint256 => uint256)"
                        }
                      },
                      "id": 2047,
                      "indexExpression": {
                        "id": 2046,
                        "name": "_id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2040,
                        "src": "10006:3:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "9984:26:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "id": 2048,
                      "name": "_id",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2040,
                      "src": "10014:3:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9984:33:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 2044,
                  "id": 2050,
                  "nodeType": "Return",
                  "src": "9977:40:3"
                }
              ]
            },
            "documentation": {
              "id": 2038,
              "nodeType": "StructuredDocumentation",
              "src": "9738:149:3",
              "text": "Check if it is the first condition in a chain of conditions.\n @param _id The condition ID.\n Must be called with `_id != 0`."
            },
            "id": 2052,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isFirstConditionInChain",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2041,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2040,
                  "mutability": "mutable",
                  "name": "_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 2052,
                  "src": "9925:11:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2039,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9925:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9924:13:3"
            },
            "returnParameters": {
              "id": 2044,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2043,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2052,
                  "src": "9961:4:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2042,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "9961:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9960:6:3"
            },
            "scope": 2186,
            "src": "9892:132:3",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2068,
              "nodeType": "Block",
              "src": "10313:86:3",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2066,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "baseExpression": {
                        "id": 2060,
                        "name": "firstToLastConditionInChain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1792,
                        "src": "10330:27:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                          "typeString": "mapping(uint256 => uint256)"
                        }
                      },
                      "id": 2064,
                      "indexExpression": {
                        "baseExpression": {
                          "id": 2061,
                          "name": "firstConditionInChain",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1787,
                          "src": "10358:21:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                            "typeString": "mapping(uint256 => uint256)"
                          }
                        },
                        "id": 2063,
                        "indexExpression": {
                          "id": 2062,
                          "name": "_id",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2055,
                          "src": "10380:3:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "10358:26:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "10330:55:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "id": 2065,
                      "name": "_id",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2055,
                      "src": "10389:3:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "10330:62:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 2059,
                  "id": 2067,
                  "nodeType": "Return",
                  "src": "10323:69:3"
                }
              ]
            },
            "documentation": {
              "id": 2053,
              "nodeType": "StructuredDocumentation",
              "src": "10030:204:3",
              "text": "Check if it is the last condition in a chain of conditions.\n @param _id The condition ID.\n Must be called with `_id != 0`.\n TODO: Should make this function public?"
            },
            "id": 2069,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isLastConditionInChain",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2056,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2055,
                  "mutability": "mutable",
                  "name": "_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 2069,
                  "src": "10271:11:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2054,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10271:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10270:13:3"
            },
            "returnParameters": {
              "id": 2059,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2058,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2069,
                  "src": "10307:4:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2057,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "10307:4:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10306:6:3"
            },
            "scope": 2186,
            "src": "10239:160:3",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "baseFunctions": [
              1046
            ],
            "body": {
              "id": 2116,
              "nodeType": "Block",
              "src": "10509:312:3",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 2084,
                        "name": "_id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2071,
                        "src": "10537:3:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 2085,
                        "name": "_from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2073,
                        "src": "10542:5:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 2086,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2075,
                        "src": "10549:3:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 2087,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2077,
                        "src": "10554:6:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 2081,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967271,
                        "src": "10519:5:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_super$_BaseSalary_$2186",
                          "typeString": "contract super BaseSalary"
                        }
                      },
                      "id": 2083,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_doTransfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1046,
                      "src": "10519:17:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,address,address,uint256)"
                      }
                    },
                    "id": 2088,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10519:42:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2089,
                  "nodeType": "ExpressionStatement",
                  "src": "10519:42:3"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 2100,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2092,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 2090,
                        "name": "_id",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2071,
                        "src": "10576:3:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "hexValue": "30",
                        "id": 2091,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10583:1:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "10576:8:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 2099,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "arguments": [
                          {
                            "id": 2095,
                            "name": "_id",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2071,
                            "src": "10613:3:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "id": 2093,
                            "name": "salaryRecipients",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1774,
                            "src": "10588:16:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_NFTSalaryRecipient_$3795",
                              "typeString": "contract NFTSalaryRecipient"
                            }
                          },
                          "id": 2094,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "ownerOf",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 4709,
                          "src": "10588:24:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_address_$",
                            "typeString": "function (uint256) view external returns (address)"
                          }
                        },
                        "id": 2096,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "10588:29:3",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "expression": {
                          "id": 2097,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967281,
                          "src": "10621:3:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 2098,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "10621:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      "src": "10588:43:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "10576:55:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2115,
                  "nodeType": "IfStatement",
                  "src": "10572:243:3",
                  "trueBody": {
                    "id": 2114,
                    "nodeType": "Block",
                    "src": "10633:182:3",
                    "statements": [
                      {
                        "assignments": [
                          2102
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 2102,
                            "mutability": "mutable",
                            "name": "_data",
                            "nodeType": "VariableDeclaration",
                            "scope": 2114,
                            "src": "10647:18:3",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes"
                            },
                            "typeName": {
                              "id": 2101,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "10647:5:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_storage_ptr",
                                "typeString": "bytes"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 2103,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "10647:18:3"
                      },
                      {
                        "condition": {
                          "arguments": [
                            {
                              "id": 2105,
                              "name": "_id",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2071,
                              "src": "10706:3:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2104,
                            "name": "isLastConditionInChain",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2069,
                            "src": "10683:22:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (uint256) view returns (bool)"
                            }
                          },
                          "id": 2106,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10683:27:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 2113,
                        "nodeType": "IfStatement",
                        "src": "10679:126:3",
                        "trueBody": {
                          "id": 2112,
                          "nodeType": "Block",
                          "src": "10712:93:3",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 2108,
                                    "name": "_id",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2071,
                                    "src": "10779:3:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "id": 2109,
                                    "name": "_data",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2102,
                                    "src": "10784:5:3",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_bytes_memory_ptr",
                                      "typeString": "bytes memory"
                                    }
                                  ],
                                  "id": 2107,
                                  "name": "_recreateCondition",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2037,
                                  "src": "10760:18:3",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_uint256_$",
                                    "typeString": "function (uint256,bytes memory) returns (uint256)"
                                  }
                                },
                                "id": 2110,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "10760:30:3",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 2111,
                              "nodeType": "ExpressionStatement",
                              "src": "10760:30:3"
                            }
                          ]
                        }
                      }
                    ]
                  }
                }
              ]
            },
            "id": 2117,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_doTransfer",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 2079,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "10500:8:3"
            },
            "parameters": {
              "id": 2078,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2071,
                  "mutability": "mutable",
                  "name": "_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 2117,
                  "src": "10426:11:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2070,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10426:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2073,
                  "mutability": "mutable",
                  "name": "_from",
                  "nodeType": "VariableDeclaration",
                  "scope": 2117,
                  "src": "10439:13:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2072,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10439:7:3",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2075,
                  "mutability": "mutable",
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 2117,
                  "src": "10454:11:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2074,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10454:7:3",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2077,
                  "mutability": "mutable",
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "scope": 2117,
                  "src": "10467:14:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2076,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10467:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10425:57:3"
            },
            "returnParameters": {
              "id": 2080,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10509:0:3"
            },
            "scope": 2186,
            "src": "10405:416:3",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2142,
              "nodeType": "Block",
              "src": "10942:156:3",
              "statements": [
                {
                  "assignments": [
                    2127
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2127,
                      "mutability": "mutable",
                      "name": "_condition",
                      "nodeType": "VariableDeclaration",
                      "scope": 2142,
                      "src": "10952:18:3",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2126,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "10952:7:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 2132,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 2129,
                        "name": "_customer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2119,
                        "src": "10992:9:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 2130,
                        "name": "_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2121,
                        "src": "11003:5:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      ],
                      "id": 2128,
                      "name": "_doCreateCondition",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        1933
                      ],
                      "referencedDeclaration": 1933,
                      "src": "10973:18:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_uint256_$",
                        "typeString": "function (address,bytes memory) returns (uint256)"
                      }
                    },
                    "id": 2131,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10973:36:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10952:57:3"
                },
                {
                  "expression": {
                    "id": 2138,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 2133,
                        "name": "lastSalaryDates",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1782,
                        "src": "11019:15:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                          "typeString": "mapping(uint256 => uint256)"
                        }
                      },
                      "id": 2135,
                      "indexExpression": {
                        "id": 2134,
                        "name": "_condition",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2127,
                        "src": "11035:10:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "11019:27:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 2136,
                        "name": "block",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 4294967292,
                        "src": "11049:5:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_block",
                          "typeString": "block"
                        }
                      },
                      "id": 2137,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "timestamp",
                      "nodeType": "MemberAccess",
                      "src": "11049:15:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11019:45:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2139,
                  "nodeType": "ExpressionStatement",
                  "src": "11019:45:3"
                },
                {
                  "expression": {
                    "id": 2140,
                    "name": "_condition",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2127,
                    "src": "11081:10:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2125,
                  "id": 2141,
                  "nodeType": "Return",
                  "src": "11074:17:3"
                }
              ]
            },
            "id": 2143,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_registerCustomer",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2122,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2119,
                  "mutability": "mutable",
                  "name": "_customer",
                  "nodeType": "VariableDeclaration",
                  "scope": 2143,
                  "src": "10854:17:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2118,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10854:7:3",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2121,
                  "mutability": "mutable",
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 2143,
                  "src": "10873:20:3",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 2120,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "10873:5:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10853:41:3"
            },
            "returnParameters": {
              "id": 2125,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2124,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2143,
                  "src": "10929:7:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2123,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10929:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10928:9:3"
            },
            "scope": 2186,
            "src": "10827:271:3",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2163,
              "nodeType": "Block",
              "src": "11154:180:3",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 2158,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 2154,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "id": 2149,
                                "name": "_id",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2145,
                                "src": "11232:3:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 2148,
                              "name": "_isConditional",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1464,
                              "src": "11217:14:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_bool_$",
                                "typeString": "function (uint256) pure returns (bool)"
                              }
                            },
                            "id": 2150,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "11217:19:3",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 2153,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 2151,
                              "name": "_id",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2145,
                              "src": "11240:3:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "!=",
                            "rightExpression": {
                              "hexValue": "30",
                              "id": 2152,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "11247:1:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "11240:8:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "11217:31:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "arguments": [
                            {
                              "id": 2156,
                              "name": "_id",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2145,
                              "src": "11276:3:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2155,
                            "name": "isFirstConditionInChain",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2052,
                            "src": "11252:23:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (uint256) view returns (bool)"
                            }
                          },
                          "id": 2157,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11252:28:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "11217:63:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4f6e6c7920666f7220746865206c6173742073616c61727920746f6b656e2e",
                        "id": 2159,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11282:33:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ca8100810b1e55d5faec88eb49d63aef9640bc2e3a82288decf2d5f4b8240118",
                          "typeString": "literal_string \"Only for the last salary token.\""
                        },
                        "value": "Only for the last salary token."
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ca8100810b1e55d5faec88eb49d63aef9640bc2e3a82288decf2d5f4b8240118",
                          "typeString": "literal_string \"Only for the last salary token.\""
                        }
                      ],
                      "id": 2147,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "11209:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2160,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11209:107:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2161,
                  "nodeType": "ExpressionStatement",
                  "src": "11209:107:3"
                },
                {
                  "id": 2162,
                  "nodeType": "PlaceholderStatement",
                  "src": "11326:1:3"
                }
              ]
            },
            "id": 2164,
            "name": "ensureFirstConditionInChain",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 2146,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2145,
                  "mutability": "mutable",
                  "name": "_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 2164,
                  "src": "11141:11:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2144,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11141:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11140:13:3"
            },
            "src": "11104:230:3",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2184,
              "nodeType": "Block",
              "src": "11389:179:3",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 2179,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 2175,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "id": 2170,
                                "name": "_id",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2166,
                                "src": "11467:3:3",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 2169,
                              "name": "_isConditional",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1464,
                              "src": "11452:14:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_bool_$",
                                "typeString": "function (uint256) pure returns (bool)"
                              }
                            },
                            "id": 2171,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "11452:19:3",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 2174,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 2172,
                              "name": "_id",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2166,
                              "src": "11475:3:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "!=",
                            "rightExpression": {
                              "hexValue": "30",
                              "id": 2173,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "11482:1:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "src": "11475:8:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "11452:31:3",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "arguments": [
                            {
                              "id": 2177,
                              "name": "_id",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2166,
                              "src": "11510:3:3",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2176,
                            "name": "isLastConditionInChain",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2069,
                            "src": "11487:22:3",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (uint256) view returns (bool)"
                            }
                          },
                          "id": 2178,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11487:27:3",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "11452:62:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4f6e6c7920666f7220746865206c6173742073616c61727920746f6b656e2e",
                        "id": 2180,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11516:33:3",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ca8100810b1e55d5faec88eb49d63aef9640bc2e3a82288decf2d5f4b8240118",
                          "typeString": "literal_string \"Only for the last salary token.\""
                        },
                        "value": "Only for the last salary token."
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ca8100810b1e55d5faec88eb49d63aef9640bc2e3a82288decf2d5f4b8240118",
                          "typeString": "literal_string \"Only for the last salary token.\""
                        }
                      ],
                      "id": 2168,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "11444:7:3",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 2181,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11444:106:3",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2182,
                  "nodeType": "ExpressionStatement",
                  "src": "11444:106:3"
                },
                {
                  "id": 2183,
                  "nodeType": "PlaceholderStatement",
                  "src": "11560:1:3"
                }
              ]
            },
            "id": 2185,
            "name": "ensureLastConditionInChain",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 2167,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2166,
                  "mutability": "mutable",
                  "name": "_id",
                  "nodeType": "VariableDeclaration",
                  "scope": 2185,
                  "src": "11376:11:3",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2165,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11376:7:3",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11375:13:3"
            },
            "src": "11340:228:3",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 2187,
        "src": "1414:10156:3"
      }
    ],
    "src": "46:11525:3"
  },
  "legacyAST": {
    "attributes": {
      "absolutePath": "/home/user/Projects/future-contracts/contracts/BaseSalary.sol",
      "exportedSymbols": {
        "ABDKMath64x64": [
          9755
        ],
        "Address": [
          5955
        ],
        "BaseBidOnAddresses": [
          292
        ],
        "BaseLock": [
          1494
        ],
        "BaseSalary": [
          2186
        ],
        "Context": [
          3930
        ],
        "ERC165": [
          4096
        ],
        "ERC721": [
          5492
        ],
        "EnumerableMap": [
          6410
        ],
        "EnumerableSet": [
          6890
        ],
        "IERC165": [
          4108
        ],
        "IERC721": [
          5635
        ],
        "IERC721Enumerable": [
          5666
        ],
        "IERC721Metadata": [
          5693
        ],
        "IERC721Receiver": [
          5711
        ],
        "NFTSalaryRecipient": [
          3795
        ],
        "Ownable": [
          4039
        ],
        "SafeMath": [
          4304
        ],
        "Strings": [
          6977
        ]
      },
      "license": "LGPL-3.0-or-later"
    },
    "children": [
      {
        "attributes": {
          "literals": [
            "solidity",
            "^",
            "0.7",
            ".1"
          ]
        },
        "id": 1747,
        "name": "PragmaDirective",
        "src": "46:23:3"
      },
      {
        "attributes": {
          "SourceUnit": 293,
          "absolutePath": "/home/user/Projects/future-contracts/contracts/BaseBidOnAddresses.sol",
          "file": "./BaseBidOnAddresses.sol",
          "scope": 2187,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 1748,
        "name": "ImportDirective",
        "src": "70:34:3"
      },
      {
        "attributes": {
          "SourceUnit": 3796,
          "absolutePath": "/home/user/Projects/future-contracts/contracts/NFTSalaryRecipient.sol",
          "file": "./NFTSalaryRecipient.sol",
          "scope": 2187,
          "symbolAliases": [
            null
          ],
          "unitAlias": ""
        },
        "id": 1749,
        "name": "ImportDirective",
        "src": "105:34:3"
      },
      {
        "attributes": {
          "abstract": false,
          "contractDependencies": [
            292,
            1494,
            3207,
            3540,
            3930,
            4096,
            4108,
            4355,
            4383,
            4505,
            4520,
            4561,
            5519,
            5711
          ],
          "contractKind": "contract",
          "fullyImplemented": true,
          "linearizedBaseContracts": [
            2186,
            292,
            1494,
            5519,
            5711,
            4355,
            4383,
            4561,
            3540,
            3207,
            4520,
            4505,
            4096,
            4108,
            3930
          ],
          "name": "BaseSalary",
          "scope": 2187
        },
        "children": [
          {
            "attributes": {
              "text": "@title Base class for a \"salary\" that is paid one token per second using minted conditionals.\n @author Victor Porton\n It was considered to allow the DAO to adjust registration date to pay salary retrospectively,\n but this seems giving too much rights to the DAO similarly as if it had the right to declare anyone dead.\n It would cause this effect: A scientist who is already great may register then his date is moved back\n in time and instantly he or she receives a very big sum of money to his account.\n If it is done erroneously, there may be no way to move the registration date again forward in time,\n because the tokens may be already withdrawn. And it cannot be done in a fully decentralized way because\n it needs oracles. So errors are seem inevitable.\n On the other hand, somebody malicious may create and register in my system a pool of Ethereum addresses that\n individuals can receive from them as if they themselves registered in the past.\n So it in some cases (if the registration date is past the contract deployment) this issue is impossible to\n mitigate.\n The salary is paid in minted tokens groups into \"chains\":\n the original salary token and anyone can replace it by another token, next in the chain."
            },
            "id": 1750,
            "name": "StructuredDocumentation",
            "src": "141:1273:3"
          },
          {
            "attributes": {},
            "children": [
              {
                "attributes": {
                  "name": "BaseBidOnAddresses",
                  "referencedDeclaration": 292,
                  "type": "contract BaseBidOnAddresses"
                },
                "id": 1751,
                "name": "UserDefinedTypeName",
                "src": "1437:18:3"
              }
            ],
            "id": 1752,
            "name": "InheritanceSpecifier",
            "src": "1437:18:3"
          },
          {
            "attributes": {
              "anonymous": false,
              "name": "SalaryMinted"
            },
            "children": [
              {
                "attributes": {
                  "text": "Salary tokens minted.\n @param customer The customer address.\n @param amount The minted amount.\n @param data Additional data."
                },
                "id": 1753,
                "name": "StructuredDocumentation",
                "src": "1462:149:3"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": true,
                      "mutability": "mutable",
                      "name": "customer",
                      "scope": 1763,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 1754,
                        "name": "ElementaryTypeName",
                        "src": "1644:7:3"
                      }
                    ],
                    "id": 1755,
                    "name": "VariableDeclaration",
                    "src": "1644:24:3"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": true,
                      "mutability": "mutable",
                      "name": "condition",
                      "scope": 1763,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 1756,
                        "name": "ElementaryTypeName",
                        "src": "1678:7:3"
                      }
                    ],
                    "id": 1757,
                    "name": "VariableDeclaration",
                    "src": "1678:25:3"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": false,
                      "mutability": "mutable",
                      "name": "amount",
                      "scope": 1763,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 1758,
                        "name": "ElementaryTypeName",
                        "src": "1713:7:3"
                      }
                    ],
                    "id": 1759,
                    "name": "VariableDeclaration",
                    "src": "1713:14:3"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": false,
                      "mutability": "mutable",
                      "name": "data",
                      "scope": 1763,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bytes",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 1760,
                        "name": "ElementaryTypeName",
                        "src": "1737:5:3"
                      }
                    ],
                    "id": 1761,
                    "name": "VariableDeclaration",
                    "src": "1737:10:3"
                  }
                ],
                "id": 1762,
                "name": "ParameterList",
                "src": "1634:119:3"
              }
            ],
            "id": 1763,
            "name": "EventDefinition",
            "src": "1616:138:3"
          },
          {
            "attributes": {
              "anonymous": false,
              "name": "ConditionReCreate"
            },
            "children": [
              {
                "attributes": {
                  "text": "Salary token recreated (salary recalculation request).\n @param customer The customer address.\n @param originalCondition The original token ID.\n @param newCondition The new token ID."
                },
                "id": 1764,
                "name": "StructuredDocumentation",
                "src": "1760:206:3"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": true,
                      "mutability": "mutable",
                      "name": "customer",
                      "scope": 1772,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 1765,
                        "name": "ElementaryTypeName",
                        "src": "2004:7:3"
                      }
                    ],
                    "id": 1766,
                    "name": "VariableDeclaration",
                    "src": "2004:24:3"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": true,
                      "mutability": "mutable",
                      "name": "originalCondition",
                      "scope": 1772,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 1767,
                        "name": "ElementaryTypeName",
                        "src": "2038:7:3"
                      }
                    ],
                    "id": 1768,
                    "name": "VariableDeclaration",
                    "src": "2038:33:3"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "indexed": true,
                      "mutability": "mutable",
                      "name": "newCondition",
                      "scope": 1772,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 1769,
                        "name": "ElementaryTypeName",
                        "src": "2081:7:3"
                      }
                    ],
                    "id": 1770,
                    "name": "VariableDeclaration",
                    "src": "2081:28:3"
                  }
                ],
                "id": 1771,
                "name": "ParameterList",
                "src": "1994:121:3"
              }
            ],
            "id": 1772,
            "name": "EventDefinition",
            "src": "1971:145:3"
          },
          {
            "attributes": {
              "constant": false,
              "functionSelector": "b1ece8df",
              "mutability": "mutable",
              "name": "salaryRecipients",
              "scope": 2186,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "contract NFTSalaryRecipient",
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "name": "NFTSalaryRecipient",
                  "referencedDeclaration": 3795,
                  "type": "contract NFTSalaryRecipient"
                },
                "id": 1773,
                "name": "UserDefinedTypeName",
                "src": "2122:18:3"
              }
            ],
            "id": 1774,
            "name": "VariableDeclaration",
            "src": "2122:42:3"
          },
          {
            "attributes": {
              "constant": false,
              "functionSelector": "ee066ef6",
              "mutability": "mutable",
              "name": "conditionCreationDates",
              "scope": 2186,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "mapping(uint256 => uint256)",
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "type": "mapping(uint256 => uint256)"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "uint256",
                      "type": "uint256"
                    },
                    "id": 1775,
                    "name": "ElementaryTypeName",
                    "src": "2261:7:3"
                  },
                  {
                    "attributes": {
                      "name": "uint",
                      "type": "uint256"
                    },
                    "id": 1776,
                    "name": "ElementaryTypeName",
                    "src": "2272:4:3"
                  }
                ],
                "id": 1777,
                "name": "Mapping",
                "src": "2253:24:3"
              }
            ],
            "id": 1778,
            "name": "VariableDeclaration",
            "src": "2253:54:3"
          },
          {
            "attributes": {
              "constant": false,
              "functionSelector": "1830d83d",
              "mutability": "mutable",
              "name": "lastSalaryDates",
              "scope": 2186,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "mapping(uint256 => uint256)",
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "type": "mapping(uint256 => uint256)"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "uint256",
                      "type": "uint256"
                    },
                    "id": 1779,
                    "name": "ElementaryTypeName",
                    "src": "2373:7:3"
                  },
                  {
                    "attributes": {
                      "name": "uint",
                      "type": "uint256"
                    },
                    "id": 1780,
                    "name": "ElementaryTypeName",
                    "src": "2384:4:3"
                  }
                ],
                "id": 1781,
                "name": "Mapping",
                "src": "2365:24:3"
              }
            ],
            "id": 1782,
            "name": "VariableDeclaration",
            "src": "2365:47:3"
          },
          {
            "attributes": {
              "constant": false,
              "functionSelector": "28eb7087",
              "mutability": "mutable",
              "name": "firstConditionInChain",
              "scope": 2186,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "mapping(uint256 => uint256)",
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "type": "mapping(uint256 => uint256)"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "uint256",
                      "type": "uint256"
                    },
                    "id": 1784,
                    "name": "ElementaryTypeName",
                    "src": "2612:7:3"
                  },
                  {
                    "attributes": {
                      "name": "uint256",
                      "type": "uint256"
                    },
                    "id": 1785,
                    "name": "ElementaryTypeName",
                    "src": "2623:7:3"
                  }
                ],
                "id": 1786,
                "name": "Mapping",
                "src": "2604:27:3"
              },
              {
                "attributes": {
                  "text": "Mapping (condition ID => first condition ID in the chain)\n I call _chain_ of conditions the list of conditions resulting from creating and recreating conditions."
                },
                "id": 1783,
                "name": "StructuredDocumentation",
                "src": "2419:180:3"
              }
            ],
            "id": 1787,
            "name": "VariableDeclaration",
            "src": "2604:56:3"
          },
          {
            "attributes": {
              "constant": false,
              "functionSelector": "9ea52967",
              "mutability": "mutable",
              "name": "firstToLastConditionInChain",
              "scope": 2186,
              "stateVariable": true,
              "storageLocation": "default",
              "type": "mapping(uint256 => uint256)",
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "type": "mapping(uint256 => uint256)"
                },
                "children": [
                  {
                    "attributes": {
                      "name": "uint256",
                      "type": "uint256"
                    },
                    "id": 1789,
                    "name": "ElementaryTypeName",
                    "src": "2877:7:3"
                  },
                  {
                    "attributes": {
                      "name": "uint256",
                      "type": "uint256"
                    },
                    "id": 1790,
                    "name": "ElementaryTypeName",
                    "src": "2888:7:3"
                  }
                ],
                "id": 1791,
                "name": "Mapping",
                "src": "2869:27:3"
              },
              {
                "attributes": {
                  "text": "Mapping (first condition ID in the chain => last condition ID in the chain)\n I call _chain_ of conditions the list of conditions resulting from creating and recreating conditions."
                },
                "id": 1788,
                "name": "StructuredDocumentation",
                "src": "2666:198:3"
              }
            ],
            "id": 1792,
            "name": "VariableDeclaration",
            "src": "2869:62:3"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": true,
              "kind": "constructor",
              "name": "",
              "scope": 2186,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "text": "Constructor.\n @param _uri The ERC-1155 token URI."
                },
                "id": 1793,
                "name": "StructuredDocumentation",
                "src": "2938:60:3"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "_salaryRecipients",
                      "scope": 1808,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "contract NFTSalaryRecipient",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "NFTSalaryRecipient",
                          "referencedDeclaration": 3795,
                          "type": "contract NFTSalaryRecipient"
                        },
                        "id": 1794,
                        "name": "UserDefinedTypeName",
                        "src": "3015:18:3"
                      }
                    ],
                    "id": 1795,
                    "name": "VariableDeclaration",
                    "src": "3015:36:3"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "_uri",
                      "scope": 1808,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "string",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "string",
                          "type": "string"
                        },
                        "id": 1796,
                        "name": "ElementaryTypeName",
                        "src": "3053:6:3"
                      }
                    ],
                    "id": 1797,
                    "name": "VariableDeclaration",
                    "src": "3053:18:3"
                  }
                ],
                "id": 1798,
                "name": "ParameterList",
                "src": "3014:58:3"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 1802,
                "name": "ParameterList",
                "src": "3110:0:3"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 292,
                      "type": "type(contract BaseBidOnAddresses)",
                      "value": "BaseBidOnAddresses"
                    },
                    "id": 1799,
                    "name": "Identifier",
                    "src": "3081:18:3"
                  },
                  {
                    "attributes": {
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 1797,
                      "type": "string memory",
                      "value": "_uri"
                    },
                    "id": 1800,
                    "name": "Identifier",
                    "src": "3100:4:3"
                  }
                ],
                "id": 1801,
                "name": "ModifierInvocation",
                "src": "3081:24:3"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "contract NFTSalaryRecipient"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1774,
                              "type": "contract NFTSalaryRecipient",
                              "value": "salaryRecipients"
                            },
                            "id": 1803,
                            "name": "Identifier",
                            "src": "3120:16:3"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1795,
                              "type": "contract NFTSalaryRecipient",
                              "value": "_salaryRecipients"
                            },
                            "id": 1804,
                            "name": "Identifier",
                            "src": "3139:17:3"
                          }
                        ],
                        "id": 1805,
                        "name": "Assignment",
                        "src": "3120:36:3"
                      }
                    ],
                    "id": 1806,
                    "name": "ExpressionStatement",
                    "src": "3120:36:3"
                  }
                ],
                "id": 1807,
                "name": "Block",
                "src": "3110:53:3"
              }
            ],
            "id": 1808,
            "name": "FunctionDefinition",
            "src": "3003:160:3"
          },
          {
            "attributes": {
              "functionSelector": "0cbba89c",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "name": "mintSalary",
              "scope": 2186,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "external"
            },
            "children": [
              {
                "attributes": {
                  "text": "Mint a salary token.\n @param _condition The condition ID.\n @param _data Additional data.\n This method can be called only by the salary receiver."
                },
                "id": 1809,
                "name": "StructuredDocumentation",
                "src": "3169:169:3"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "_condition",
                      "scope": 1870,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 1810,
                        "name": "ElementaryTypeName",
                        "src": "3363:7:3"
                      }
                    ],
                    "id": 1811,
                    "name": "VariableDeclaration",
                    "src": "3363:18:3"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "_data",
                      "scope": 1870,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 1812,
                        "name": "ElementaryTypeName",
                        "src": "3383:5:3"
                      }
                    ],
                    "id": 1813,
                    "name": "VariableDeclaration",
                    "src": "3383:18:3"
                  }
                ],
                "id": 1814,
                "name": "ParameterList",
                "src": "3362:40:3"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 1818,
                "name": "ParameterList",
                "src": "3463:0:3"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 2185,
                      "type": "modifier (uint256)",
                      "value": "ensureLastConditionInChain"
                    },
                    "id": 1815,
                    "name": "Identifier",
                    "src": "3411:26:3"
                  },
                  {
                    "attributes": {
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 1811,
                      "type": "uint256",
                      "value": "_condition"
                    },
                    "id": 1816,
                    "name": "Identifier",
                    "src": "3438:10:3"
                  }
                ],
                "id": 1817,
                "name": "ModifierInvocation",
                "src": "3411:38:3"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        1820
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "_lastSalaryDate",
                          "scope": 1869,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint",
                              "type": "uint256"
                            },
                            "id": 1819,
                            "name": "ElementaryTypeName",
                            "src": "3473:4:3"
                          }
                        ],
                        "id": 1820,
                        "name": "VariableDeclaration",
                        "src": "3473:20:3"
                      },
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1782,
                              "type": "mapping(uint256 => uint256)",
                              "value": "lastSalaryDates"
                            },
                            "id": 1821,
                            "name": "Identifier",
                            "src": "3496:15:3"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1811,
                              "type": "uint256",
                              "value": "_condition"
                            },
                            "id": 1822,
                            "name": "Identifier",
                            "src": "3512:10:3"
                          }
                        ],
                        "id": 1823,
                        "name": "IndexAccess",
                        "src": "3496:27:3"
                      }
                    ],
                    "id": 1824,
                    "name": "VariableDeclarationStatement",
                    "src": "3473:50:3"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_5e1e84273f0da3c7ca99195233d482a359df5ba06848f89b045c6e2e4e7fdefa",
                                  "typeString": "literal_string \"You are not registered.\""
                                }
                              ],
                              "overloadedDeclarations": [
                                4294967278,
                                4294967278
                              ],
                              "referencedDeclaration": 4294967278,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 1825,
                            "name": "Identifier",
                            "src": "3533:7:3"
                          },
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "!=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1820,
                                  "type": "uint256",
                                  "value": "_lastSalaryDate"
                                },
                                "id": 1826,
                                "name": "Identifier",
                                "src": "3541:15:3"
                              },
                              {
                                "attributes": {
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 1827,
                                "name": "Literal",
                                "src": "3560:1:3"
                              }
                            ],
                            "id": 1828,
                            "name": "BinaryOperation",
                            "src": "3541:20:3"
                          },
                          {
                            "attributes": {
                              "hexvalue": "596f7520617265206e6f7420726567697374657265642e",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "string",
                              "type": "literal_string \"You are not registered.\"",
                              "value": "You are not registered."
                            },
                            "id": 1829,
                            "name": "Literal",
                            "src": "3563:25:3"
                          }
                        ],
                        "id": 1830,
                        "name": "FunctionCall",
                        "src": "3533:56:3"
                      }
                    ],
                    "id": 1831,
                    "name": "ExpressionStatement",
                    "src": "3533:56:3"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        1833
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "_amount",
                          "scope": 1869,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 1832,
                            "name": "ElementaryTypeName",
                            "src": "3769:7:3"
                          }
                        ],
                        "id": 1833,
                        "name": "VariableDeclaration",
                        "src": "3769:15:3"
                      },
                      {
                        "attributes": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "*",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "-",
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "timestamp",
                                      "type": "uint256"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 4294967292,
                                          "type": "block",
                                          "value": "block"
                                        },
                                        "id": 1834,
                                        "name": "Identifier",
                                        "src": "3788:5:3"
                                      }
                                    ],
                                    "id": 1835,
                                    "name": "MemberAccess",
                                    "src": "3788:15:3"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1820,
                                      "type": "uint256",
                                      "value": "_lastSalaryDate"
                                    },
                                    "id": 1836,
                                    "name": "Identifier",
                                    "src": "3806:15:3"
                                  }
                                ],
                                "id": 1837,
                                "name": "BinaryOperation",
                                "src": "3788:33:3"
                              }
                            ],
                            "id": 1838,
                            "name": "TupleExpression",
                            "src": "3787:35:3"
                          },
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_rational_1000000000000000000_by_1",
                                "typeString": "int_const 1000000000000000000"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "operator": "**",
                              "type": "int_const 1000000000000000000"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "hexvalue": "3130",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "token": "number",
                                  "type": "int_const 10",
                                  "value": "10"
                                },
                                "id": 1839,
                                "name": "Literal",
                                "src": "3825:2:3"
                              },
                              {
                                "attributes": {
                                  "hexvalue": "3138",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "token": "number",
                                  "type": "int_const 18",
                                  "value": "18"
                                },
                                "id": 1840,
                                "name": "Literal",
                                "src": "3829:2:3"
                              }
                            ],
                            "id": 1841,
                            "name": "BinaryOperation",
                            "src": "3825:6:3"
                          }
                        ],
                        "id": 1842,
                        "name": "BinaryOperation",
                        "src": "3787:44:3"
                      }
                    ],
                    "id": 1843,
                    "name": "VariableDeclarationStatement",
                    "src": "3769:62:3"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 970,
                              "type": "function (address,uint256,uint256,bytes memory)",
                              "value": "_mintToCustomer"
                            },
                            "id": 1844,
                            "name": "Identifier",
                            "src": "3865:15:3"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "sender",
                              "type": "address payable"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4294967281,
                                  "type": "msg",
                                  "value": "msg"
                                },
                                "id": 1845,
                                "name": "Identifier",
                                "src": "3881:3:3"
                              }
                            ],
                            "id": 1846,
                            "name": "MemberAccess",
                            "src": "3881:10:3"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1792,
                                  "type": "mapping(uint256 => uint256)",
                                  "value": "firstToLastConditionInChain"
                                },
                                "id": 1847,
                                "name": "Identifier",
                                "src": "3893:27:3"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1811,
                                  "type": "uint256",
                                  "value": "_condition"
                                },
                                "id": 1848,
                                "name": "Identifier",
                                "src": "3921:10:3"
                              }
                            ],
                            "id": 1849,
                            "name": "IndexAccess",
                            "src": "3893:39:3"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1833,
                              "type": "uint256",
                              "value": "_amount"
                            },
                            "id": 1850,
                            "name": "Identifier",
                            "src": "3934:7:3"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1813,
                              "type": "bytes memory",
                              "value": "_data"
                            },
                            "id": 1851,
                            "name": "Identifier",
                            "src": "3943:5:3"
                          }
                        ],
                        "id": 1852,
                        "name": "FunctionCall",
                        "src": "3865:84:3"
                      }
                    ],
                    "id": 1853,
                    "name": "ExpressionStatement",
                    "src": "3865:84:3"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1782,
                                  "type": "mapping(uint256 => uint256)",
                                  "value": "lastSalaryDates"
                                },
                                "id": 1854,
                                "name": "Identifier",
                                "src": "3959:15:3"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1811,
                                  "type": "uint256",
                                  "value": "_condition"
                                },
                                "id": 1855,
                                "name": "Identifier",
                                "src": "3975:10:3"
                              }
                            ],
                            "id": 1856,
                            "name": "IndexAccess",
                            "src": "3959:27:3"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "timestamp",
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4294967292,
                                  "type": "block",
                                  "value": "block"
                                },
                                "id": 1857,
                                "name": "Identifier",
                                "src": "3989:5:3"
                              }
                            ],
                            "id": 1858,
                            "name": "MemberAccess",
                            "src": "3989:15:3"
                          }
                        ],
                        "id": 1859,
                        "name": "Assignment",
                        "src": "3959:45:3"
                      }
                    ],
                    "id": 1860,
                    "name": "ExpressionStatement",
                    "src": "3959:45:3"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1763,
                              "type": "function (address,uint256,uint256,bytes memory)",
                              "value": "SalaryMinted"
                            },
                            "id": 1861,
                            "name": "Identifier",
                            "src": "4019:12:3"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "sender",
                              "type": "address payable"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4294967281,
                                  "type": "msg",
                                  "value": "msg"
                                },
                                "id": 1862,
                                "name": "Identifier",
                                "src": "4032:3:3"
                              }
                            ],
                            "id": 1863,
                            "name": "MemberAccess",
                            "src": "4032:10:3"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1811,
                              "type": "uint256",
                              "value": "_condition"
                            },
                            "id": 1864,
                            "name": "Identifier",
                            "src": "4044:10:3"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1833,
                              "type": "uint256",
                              "value": "_amount"
                            },
                            "id": 1865,
                            "name": "Identifier",
                            "src": "4056:7:3"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1813,
                              "type": "bytes memory",
                              "value": "_data"
                            },
                            "id": 1866,
                            "name": "Identifier",
                            "src": "4065:5:3"
                          }
                        ],
                        "id": 1867,
                        "name": "FunctionCall",
                        "src": "4019:52:3"
                      }
                    ],
                    "id": 1868,
                    "name": "EmitStatement",
                    "src": "4014:57:3"
                  }
                ],
                "id": 1869,
                "name": "Block",
                "src": "3463:615:3"
              }
            ],
            "id": 1870,
            "name": "FunctionDefinition",
            "src": "3343:735:3"
          },
          {
            "attributes": {
              "functionSelector": "adde70c4",
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "recreateCondition",
              "scope": 2186,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "public"
            },
            "children": [
              {
                "attributes": {
                  "text": "Make a new condition that replaces the old one.\n In other words, it is a request to recalculate somebody's salary.\n Anyone can request to recalculate anyone's salary.\n It's also useful to punish someone for decreasing his work performance or an evil act.\n This is to be called among other when a person dies.\n Recalculation is also forced when a salary receiver transfers away his current salary token.\n It is useful to remove a trader's incentive to kill the issuer to reduce the circulating supply.\n Issue to solve later: Should we recommend:\n - calling this function on each new project milestone?\n - calling this function regularly (e.g. every week)?\n This function also withdraws the old token."
                },
                "id": 1871,
                "name": "StructuredDocumentation",
                "src": "4084:821:3"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "_condition",
                      "scope": 1886,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 1872,
                        "name": "ElementaryTypeName",
                        "src": "4937:7:3"
                      }
                    ],
                    "id": 1873,
                    "name": "VariableDeclaration",
                    "src": "4937:18:3"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "_data",
                      "scope": 1886,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 1874,
                        "name": "ElementaryTypeName",
                        "src": "4957:5:3"
                      }
                    ],
                    "id": 1875,
                    "name": "VariableDeclaration",
                    "src": "4957:18:3"
                  }
                ],
                "id": 1876,
                "name": "ParameterList",
                "src": "4936:40:3"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 1886,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 1877,
                        "name": "ElementaryTypeName",
                        "src": "4993:7:3"
                      }
                    ],
                    "id": 1878,
                    "name": "VariableDeclaration",
                    "src": "4993:7:3"
                  }
                ],
                "id": 1879,
                "name": "ParameterList",
                "src": "4992:9:3"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 1879
                    },
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2037,
                              "type": "function (uint256,bytes memory) returns (uint256)",
                              "value": "_recreateCondition"
                            },
                            "id": 1880,
                            "name": "Identifier",
                            "src": "5019:18:3"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1873,
                              "type": "uint256",
                              "value": "_condition"
                            },
                            "id": 1881,
                            "name": "Identifier",
                            "src": "5038:10:3"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1875,
                              "type": "bytes memory",
                              "value": "_data"
                            },
                            "id": 1882,
                            "name": "Identifier",
                            "src": "5050:5:3"
                          }
                        ],
                        "id": 1883,
                        "name": "FunctionCall",
                        "src": "5019:37:3"
                      }
                    ],
                    "id": 1884,
                    "name": "Return",
                    "src": "5012:44:3"
                  }
                ],
                "id": 1885,
                "name": "Block",
                "src": "5002:61:3"
              }
            ],
            "id": 1886,
            "name": "FunctionDefinition",
            "src": "4910:153:3"
          },
          {
            "attributes": {
              "baseFunctions": [
                1345
              ],
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "_doCreateCondition",
              "scope": 2186,
              "stateMutability": "nonpayable",
              "virtual": true,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 1892,
                "name": "OverrideSpecifier",
                "src": "5153:8:3"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "_customer",
                      "scope": 1933,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 1887,
                        "name": "ElementaryTypeName",
                        "src": "5097:7:3"
                      }
                    ],
                    "id": 1888,
                    "name": "VariableDeclaration",
                    "src": "5097:17:3"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "_data",
                      "scope": 1933,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 1889,
                        "name": "ElementaryTypeName",
                        "src": "5116:5:3"
                      }
                    ],
                    "id": 1890,
                    "name": "VariableDeclaration",
                    "src": "5116:18:3"
                  }
                ],
                "id": 1891,
                "name": "ParameterList",
                "src": "5096:39:3"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 1933,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 1893,
                        "name": "ElementaryTypeName",
                        "src": "5171:7:3"
                      }
                    ],
                    "id": 1894,
                    "name": "VariableDeclaration",
                    "src": "5171:7:3"
                  }
                ],
                "id": 1895,
                "name": "ParameterList",
                "src": "5170:9:3"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        1897
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "_condition",
                          "scope": 1932,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 1896,
                            "name": "ElementaryTypeName",
                            "src": "5190:7:3"
                          }
                        ],
                        "id": 1897,
                        "name": "VariableDeclaration",
                        "src": "5190:18:3"
                      },
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "_doCreateCondition",
                              "referencedDeclaration": 1345,
                              "type": "function (address,bytes memory) returns (uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4294967271,
                                  "type": "contract super BaseSalary",
                                  "value": "super"
                                },
                                "id": 1898,
                                "name": "Identifier",
                                "src": "5211:5:3"
                              }
                            ],
                            "id": 1899,
                            "name": "MemberAccess",
                            "src": "5211:24:3"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1888,
                              "type": "address",
                              "value": "_customer"
                            },
                            "id": 1900,
                            "name": "Identifier",
                            "src": "5236:9:3"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1890,
                              "type": "bytes memory",
                              "value": "_data"
                            },
                            "id": 1901,
                            "name": "Identifier",
                            "src": "5247:5:3"
                          }
                        ],
                        "id": 1902,
                        "name": "FunctionCall",
                        "src": "5211:42:3"
                      }
                    ],
                    "id": 1903,
                    "name": "VariableDeclarationStatement",
                    "src": "5190:63:3"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1778,
                                  "type": "mapping(uint256 => uint256)",
                                  "value": "conditionCreationDates"
                                },
                                "id": 1904,
                                "name": "Identifier",
                                "src": "5263:22:3"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1897,
                                  "type": "uint256",
                                  "value": "_condition"
                                },
                                "id": 1905,
                                "name": "Identifier",
                                "src": "5286:10:3"
                              }
                            ],
                            "id": 1906,
                            "name": "IndexAccess",
                            "src": "5263:34:3"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "timestamp",
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4294967292,
                                  "type": "block",
                                  "value": "block"
                                },
                                "id": 1907,
                                "name": "Identifier",
                                "src": "5300:5:3"
                              }
                            ],
                            "id": 1908,
                            "name": "MemberAccess",
                            "src": "5300:15:3"
                          }
                        ],
                        "id": 1909,
                        "name": "Assignment",
                        "src": "5263:52:3"
                      }
                    ],
                    "id": 1910,
                    "name": "ExpressionStatement",
                    "src": "5263:52:3"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1787,
                                  "type": "mapping(uint256 => uint256)",
                                  "value": "firstConditionInChain"
                                },
                                "id": 1911,
                                "name": "Identifier",
                                "src": "5325:21:3"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1897,
                                  "type": "uint256",
                                  "value": "_condition"
                                },
                                "id": 1912,
                                "name": "Identifier",
                                "src": "5347:10:3"
                              }
                            ],
                            "id": 1913,
                            "name": "IndexAccess",
                            "src": "5325:33:3"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1897,
                              "type": "uint256",
                              "value": "_condition"
                            },
                            "id": 1914,
                            "name": "Identifier",
                            "src": "5361:10:3"
                          }
                        ],
                        "id": 1915,
                        "name": "Assignment",
                        "src": "5325:46:3"
                      }
                    ],
                    "id": 1916,
                    "name": "ExpressionStatement",
                    "src": "5325:46:3"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1792,
                                  "type": "mapping(uint256 => uint256)",
                                  "value": "firstToLastConditionInChain"
                                },
                                "id": 1917,
                                "name": "Identifier",
                                "src": "5381:27:3"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1897,
                                  "type": "uint256",
                                  "value": "_condition"
                                },
                                "id": 1918,
                                "name": "Identifier",
                                "src": "5409:10:3"
                              }
                            ],
                            "id": 1919,
                            "name": "IndexAccess",
                            "src": "5381:39:3"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1897,
                              "type": "uint256",
                              "value": "_condition"
                            },
                            "id": 1920,
                            "name": "Identifier",
                            "src": "5423:10:3"
                          }
                        ],
                        "id": 1921,
                        "name": "Assignment",
                        "src": "5381:52:3"
                      }
                    ],
                    "id": 1922,
                    "name": "ExpressionStatement",
                    "src": "5381:52:3"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "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": 3711,
                              "type": "function (address,uint256) external"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1774,
                                  "type": "contract NFTSalaryRecipient",
                                  "value": "salaryRecipients"
                                },
                                "id": 1923,
                                "name": "Identifier",
                                "src": "5443:16:3"
                              }
                            ],
                            "id": 1925,
                            "name": "MemberAccess",
                            "src": "5443:21:3"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1888,
                              "type": "address",
                              "value": "_customer"
                            },
                            "id": 1926,
                            "name": "Identifier",
                            "src": "5465:9:3"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1897,
                              "type": "uint256",
                              "value": "_condition"
                            },
                            "id": 1927,
                            "name": "Identifier",
                            "src": "5476:10:3"
                          }
                        ],
                        "id": 1928,
                        "name": "FunctionCall",
                        "src": "5443:44:3"
                      }
                    ],
                    "id": 1929,
                    "name": "ExpressionStatement",
                    "src": "5443:44:3"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 1895
                    },
                    "children": [
                      {
                        "attributes": {
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 1897,
                          "type": "uint256",
                          "value": "_condition"
                        },
                        "id": 1930,
                        "name": "Identifier",
                        "src": "5504:10:3"
                      }
                    ],
                    "id": 1931,
                    "name": "Return",
                    "src": "5497:17:3"
                  }
                ],
                "id": 1932,
                "name": "Block",
                "src": "5180:341:3"
              }
            ],
            "id": 1933,
            "name": "FunctionDefinition",
            "src": "5069:452:3"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "name": "_recreateCondition",
              "scope": 2186,
              "stateMutability": "nonpayable",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "text": "Make a new condition that replaces the old one.\n The same can be done by transferring to yourself 0 tokens, but this method uses less gas.\n We need to create a new condition every time when an outgoimg transfer of a conditional token happens.\n Otherwise an investor would gain if he kills a scientist to reduce the circulating supply of his token to increase the price.\n Allowing old tokens to be exchangeable for new ones? (Allowing the reverse swap would create killer's gain.)\n Additional benefit of this solution: We can have different rewards at different stages of project,\n what may be beneficial for early startups funding.\n Problem to be solved later: There should be an advice to switch to a new token at each milestone of a project?\n Anyone can create a ERC-1155 contract that allows to use any of the tokens in the list\n by locking any of the tokens in the list as a new \"general\" token. We should recommend customers not to\n use such contracts, because it creates for them the killer exploit.\n If we would exchange the old and new tokens for the same amounts of collaterals, then it would be\n effectively the same token and therefore minting more new token would possibly devalue the old one,\n thus triggering the killer's exploit again. So we make old and new completely independent.\n Old token is 1:1 converted to the new token.\n Remark: To make easy to exchange the token even if it is recreated, we can make a wrapper or locker\n token that uses `firstConditionInChain[]` to aggregate several tokens together.\n A similar wrapper (the customer need to `setApprovalForAll()` on it) that uses\n `firstToLastConditionInChain[]` can be used to transfer away recreated tokens\n even if an evil DAO tries to frontrun the customer by recreating his tokens very often.\n TODO: Test that it's possible to create such a locker.\n Note: That wrapper could be carelessly used to create the investor's killing customer incentive\n by the customer using it to transfer to an investor. Even if the customer uses it only for\n exchanges, an investor can buy at an exchange and be a killer.\n To make it safe, it must stop accepting any new tokens after a transfer.\n It can determine if a token is new just comparing by `<` operator.\n It's strongly recommended that an app that uses this contract provides its own swap/exchange UI\n and warns the user not to use arbitrary exchanges as being an incentive to kill the user.\n We allow anybody (not just the account owner or DAO) to recreate a condition, because:\n - Exchanges can create a \"composite\" token that allows to withdraw any of the tokens in the chain\n   up to a certain period of time (using on-chain `conditionCreationDates`).\n - Therefore somebody's token can be withdrawn even if its ID changes arbitrarily often.\n @param _condition The condition ID."
                },
                "id": 1934,
                "name": "StructuredDocumentation",
                "src": "5527:3102:3"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "_condition",
                      "scope": 2037,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 1935,
                        "name": "ElementaryTypeName",
                        "src": "8662:7:3"
                      }
                    ],
                    "id": 1936,
                    "name": "VariableDeclaration",
                    "src": "8662:18:3"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "_data",
                      "scope": 2037,
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "type": "bytes",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 1937,
                        "name": "ElementaryTypeName",
                        "src": "8682:5:3"
                      }
                    ],
                    "id": 1938,
                    "name": "VariableDeclaration",
                    "src": "8682:18:3"
                  }
                ],
                "id": 1939,
                "name": "ParameterList",
                "src": "8661:40:3"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 2037,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 1943,
                        "name": "ElementaryTypeName",
                        "src": "8768:7:3"
                      }
                    ],
                    "id": 1944,
                    "name": "VariableDeclaration",
                    "src": "8768:7:3"
                  }
                ],
                "id": 1945,
                "name": "ParameterList",
                "src": "8767:9:3"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 2164,
                      "type": "modifier (uint256)",
                      "value": "ensureFirstConditionInChain"
                    },
                    "id": 1940,
                    "name": "Identifier",
                    "src": "8719:27:3"
                  },
                  {
                    "attributes": {
                      "overloadedDeclarations": [
                        null
                      ],
                      "referencedDeclaration": 1936,
                      "type": "uint256",
                      "value": "_condition"
                    },
                    "id": 1941,
                    "name": "Identifier",
                    "src": "8747:10:3"
                  }
                ],
                "id": 1942,
                "name": "ModifierInvocation",
                "src": "8719:39:3"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        1947
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "_customer",
                          "scope": 2036,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "address",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "address",
                              "stateMutability": "nonpayable",
                              "type": "address"
                            },
                            "id": 1946,
                            "name": "ElementaryTypeName",
                            "src": "8791:7:3"
                          }
                        ],
                        "id": 1947,
                        "name": "VariableDeclaration",
                        "src": "8791:17:3"
                      },
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "address",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "ownerOf",
                              "referencedDeclaration": 4709,
                              "type": "function (uint256) view external returns (address)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1774,
                                  "type": "contract NFTSalaryRecipient",
                                  "value": "salaryRecipients"
                                },
                                "id": 1948,
                                "name": "Identifier",
                                "src": "8811:16:3"
                              }
                            ],
                            "id": 1949,
                            "name": "MemberAccess",
                            "src": "8811:24:3"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1936,
                              "type": "uint256",
                              "value": "_condition"
                            },
                            "id": 1950,
                            "name": "Identifier",
                            "src": "8836:10:3"
                          }
                        ],
                        "id": 1951,
                        "name": "FunctionCall",
                        "src": "8811:36:3"
                      }
                    ],
                    "id": 1952,
                    "name": "VariableDeclarationStatement",
                    "src": "8791:56:3"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        1954
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "_oldCondition",
                          "scope": 2036,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 1953,
                            "name": "ElementaryTypeName",
                            "src": "8857:7:3"
                          }
                        ],
                        "id": 1954,
                        "name": "VariableDeclaration",
                        "src": "8857:21:3"
                      },
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1792,
                              "type": "mapping(uint256 => uint256)",
                              "value": "firstToLastConditionInChain"
                            },
                            "id": 1955,
                            "name": "Identifier",
                            "src": "8881:27:3"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1936,
                              "type": "uint256",
                              "value": "_condition"
                            },
                            "id": 1956,
                            "name": "Identifier",
                            "src": "8909:10:3"
                          }
                        ],
                        "id": 1957,
                        "name": "IndexAccess",
                        "src": "8881:39:3"
                      }
                    ],
                    "id": 1958,
                    "name": "VariableDeclarationStatement",
                    "src": "8857:63:3"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        1960
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "_newCondition",
                          "scope": 2036,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 1959,
                            "name": "ElementaryTypeName",
                            "src": "8930:7:3"
                          }
                        ],
                        "id": 1960,
                        "name": "VariableDeclaration",
                        "src": "8930:21:3"
                      },
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_bytes_memory_ptr",
                                  "typeString": "bytes memory"
                                }
                              ],
                              "overloadedDeclarations": [
                                1933
                              ],
                              "referencedDeclaration": 1933,
                              "type": "function (address,bytes memory) returns (uint256)",
                              "value": "_doCreateCondition"
                            },
                            "id": 1961,
                            "name": "Identifier",
                            "src": "8954:18:3"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1947,
                              "type": "address",
                              "value": "_customer"
                            },
                            "id": 1962,
                            "name": "Identifier",
                            "src": "8973:9:3"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1938,
                              "type": "bytes memory",
                              "value": "_data"
                            },
                            "id": 1963,
                            "name": "Identifier",
                            "src": "8984:5:3"
                          }
                        ],
                        "id": 1964,
                        "name": "FunctionCall",
                        "src": "8954:36:3"
                      }
                    ],
                    "id": 1965,
                    "name": "VariableDeclarationStatement",
                    "src": "8930:60:3"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1787,
                                  "type": "mapping(uint256 => uint256)",
                                  "value": "firstConditionInChain"
                                },
                                "id": 1966,
                                "name": "Identifier",
                                "src": "9000:21:3"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1960,
                                  "type": "uint256",
                                  "value": "_newCondition"
                                },
                                "id": 1967,
                                "name": "Identifier",
                                "src": "9022:13:3"
                              }
                            ],
                            "id": 1968,
                            "name": "IndexAccess",
                            "src": "9000:36:3"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1936,
                              "type": "uint256",
                              "value": "_condition"
                            },
                            "id": 1969,
                            "name": "Identifier",
                            "src": "9039:10:3"
                          }
                        ],
                        "id": 1970,
                        "name": "Assignment",
                        "src": "9000:49:3"
                      }
                    ],
                    "id": 1971,
                    "name": "ExpressionStatement",
                    "src": "9000:49:3"
                  },
                  {
                    "attributes": {
                      "assignments": [
                        1973
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "_amount",
                          "scope": 2036,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 1972,
                            "name": "ElementaryTypeName",
                            "src": "9060:7:3"
                          }
                        ],
                        "id": 1973,
                        "name": "VariableDeclaration",
                        "src": "9060:15:3"
                      },
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "type": "mapping(address => uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2216,
                                  "type": "mapping(uint256 => mapping(address => uint256))",
                                  "value": "_balances"
                                },
                                "id": 1974,
                                "name": "Identifier",
                                "src": "9078:9:3"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1954,
                                  "type": "uint256",
                                  "value": "_oldCondition"
                                },
                                "id": 1975,
                                "name": "Identifier",
                                "src": "9088:13:3"
                              }
                            ],
                            "id": 1976,
                            "name": "IndexAccess",
                            "src": "9078:24:3"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1947,
                              "type": "address",
                              "value": "_customer"
                            },
                            "id": 1977,
                            "name": "Identifier",
                            "src": "9103:9:3"
                          }
                        ],
                        "id": 1978,
                        "name": "IndexAccess",
                        "src": "9078:35:3"
                      }
                    ],
                    "id": 1979,
                    "name": "VariableDeclarationStatement",
                    "src": "9060:53:3"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "mapping(address => uint256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2216,
                                      "type": "mapping(uint256 => mapping(address => uint256))",
                                      "value": "_balances"
                                    },
                                    "id": 1980,
                                    "name": "Identifier",
                                    "src": "9123:9:3"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1960,
                                      "type": "uint256",
                                      "value": "_newCondition"
                                    },
                                    "id": 1981,
                                    "name": "Identifier",
                                    "src": "9133:13:3"
                                  }
                                ],
                                "id": 1983,
                                "name": "IndexAccess",
                                "src": "9123:24:3"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1947,
                                  "type": "address",
                                  "value": "_customer"
                                },
                                "id": 1982,
                                "name": "Identifier",
                                "src": "9148:9:3"
                              }
                            ],
                            "id": 1984,
                            "name": "IndexAccess",
                            "src": "9123:35:3"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1973,
                              "type": "uint256",
                              "value": "_amount"
                            },
                            "id": 1985,
                            "name": "Identifier",
                            "src": "9161:7:3"
                          }
                        ],
                        "id": 1986,
                        "name": "Assignment",
                        "src": "9123:45:3"
                      }
                    ],
                    "id": 1987,
                    "name": "ExpressionStatement",
                    "src": "9123:45:3"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "mapping(address => uint256)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2216,
                                      "type": "mapping(uint256 => mapping(address => uint256))",
                                      "value": "_balances"
                                    },
                                    "id": 1988,
                                    "name": "Identifier",
                                    "src": "9178:9:3"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1954,
                                      "type": "uint256",
                                      "value": "_oldCondition"
                                    },
                                    "id": 1989,
                                    "name": "Identifier",
                                    "src": "9188:13:3"
                                  }
                                ],
                                "id": 1991,
                                "name": "IndexAccess",
                                "src": "9178:24:3"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1947,
                                  "type": "address",
                                  "value": "_customer"
                                },
                                "id": 1990,
                                "name": "Identifier",
                                "src": "9203:9:3"
                              }
                            ],
                            "id": 1992,
                            "name": "IndexAccess",
                            "src": "9178:35:3"
                          },
                          {
                            "attributes": {
                              "hexvalue": "30",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "number",
                              "type": "int_const 0",
                              "value": "0"
                            },
                            "id": 1993,
                            "name": "Literal",
                            "src": "9216:1:3"
                          }
                        ],
                        "id": 1994,
                        "name": "Assignment",
                        "src": "9178:39:3"
                      }
                    ],
                    "id": 1995,
                    "name": "ExpressionStatement",
                    "src": "9178:39:3"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4402,
                              "type": "function (address,address,address,uint256,uint256)",
                              "value": "TransferSingle"
                            },
                            "id": 1996,
                            "name": "Identifier",
                            "src": "9233:14:3"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "sender",
                              "type": "address payable"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4294967281,
                                  "type": "msg",
                                  "value": "msg"
                                },
                                "id": 1997,
                                "name": "Identifier",
                                "src": "9248:3:3"
                              }
                            ],
                            "id": 1998,
                            "name": "MemberAccess",
                            "src": "9248:10:3"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1947,
                              "type": "address",
                              "value": "_customer"
                            },
                            "id": 1999,
                            "name": "Identifier",
                            "src": "9260:9:3"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "address payable",
                              "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)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "address"
                                    },
                                    "id": 2000,
                                    "name": "ElementaryTypeName",
                                    "src": "9271:7:3"
                                  }
                                ],
                                "id": 2001,
                                "name": "ElementaryTypeNameExpression",
                                "src": "9271:7:3"
                              },
                              {
                                "attributes": {
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 2002,
                                "name": "Literal",
                                "src": "9279:1:3"
                              }
                            ],
                            "id": 2003,
                            "name": "FunctionCall",
                            "src": "9271:10:3"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1936,
                              "type": "uint256",
                              "value": "_condition"
                            },
                            "id": 2004,
                            "name": "Identifier",
                            "src": "9283:10:3"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1973,
                              "type": "uint256",
                              "value": "_amount"
                            },
                            "id": 2005,
                            "name": "Identifier",
                            "src": "9295:7:3"
                          }
                        ],
                        "id": 2006,
                        "name": "FunctionCall",
                        "src": "9233:70:3"
                      }
                    ],
                    "id": 2007,
                    "name": "EmitStatement",
                    "src": "9228:75:3"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                },
                                {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 4402,
                              "type": "function (address,address,address,uint256,uint256)",
                              "value": "TransferSingle"
                            },
                            "id": 2008,
                            "name": "Identifier",
                            "src": "9318:14:3"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "sender",
                              "type": "address payable"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4294967281,
                                  "type": "msg",
                                  "value": "msg"
                                },
                                "id": 2009,
                                "name": "Identifier",
                                "src": "9333:3:3"
                              }
                            ],
                            "id": 2010,
                            "name": "MemberAccess",
                            "src": "9333:10:3"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "isStructConstructorCall": false,
                              "lValueRequested": false,
                              "names": [
                                null
                              ],
                              "tryCall": false,
                              "type": "address payable",
                              "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)"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "address"
                                    },
                                    "id": 2011,
                                    "name": "ElementaryTypeName",
                                    "src": "9345:7:3"
                                  }
                                ],
                                "id": 2012,
                                "name": "ElementaryTypeNameExpression",
                                "src": "9345:7:3"
                              },
                              {
                                "attributes": {
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 2013,
                                "name": "Literal",
                                "src": "9353:1:3"
                              }
                            ],
                            "id": 2014,
                            "name": "FunctionCall",
                            "src": "9345:10:3"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1947,
                              "type": "address",
                              "value": "_customer"
                            },
                            "id": 2015,
                            "name": "Identifier",
                            "src": "9357:9:3"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1960,
                              "type": "uint256",
                              "value": "_newCondition"
                            },
                            "id": 2016,
                            "name": "Identifier",
                            "src": "9368:13:3"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1973,
                              "type": "uint256",
                              "value": "_amount"
                            },
                            "id": 2017,
                            "name": "Identifier",
                            "src": "9383:7:3"
                          }
                        ],
                        "id": 2018,
                        "name": "FunctionCall",
                        "src": "9318:73:3"
                      }
                    ],
                    "id": 2019,
                    "name": "EmitStatement",
                    "src": "9313:78:3"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1782,
                                  "type": "mapping(uint256 => uint256)",
                                  "value": "lastSalaryDates"
                                },
                                "id": 2020,
                                "name": "Identifier",
                                "src": "9402:15:3"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1960,
                                  "type": "uint256",
                                  "value": "_newCondition"
                                },
                                "id": 2021,
                                "name": "Identifier",
                                "src": "9418:13:3"
                              }
                            ],
                            "id": 2022,
                            "name": "IndexAccess",
                            "src": "9402:30:3"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1782,
                                  "type": "mapping(uint256 => uint256)",
                                  "value": "lastSalaryDates"
                                },
                                "id": 2023,
                                "name": "Identifier",
                                "src": "9435:15:3"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1936,
                                  "type": "uint256",
                                  "value": "_condition"
                                },
                                "id": 2024,
                                "name": "Identifier",
                                "src": "9451:10:3"
                              }
                            ],
                            "id": 2025,
                            "name": "IndexAccess",
                            "src": "9435:27:3"
                          }
                        ],
                        "id": 2026,
                        "name": "Assignment",
                        "src": "9402:60:3"
                      }
                    ],
                    "id": 2027,
                    "name": "ExpressionStatement",
                    "src": "9402:60:3"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1772,
                              "type": "function (address,uint256,uint256)",
                              "value": "ConditionReCreate"
                            },
                            "id": 2028,
                            "name": "Identifier",
                            "src": "9640:17:3"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1947,
                              "type": "address",
                              "value": "_customer"
                            },
                            "id": 2029,
                            "name": "Identifier",
                            "src": "9658:9:3"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1936,
                              "type": "uint256",
                              "value": "_condition"
                            },
                            "id": 2030,
                            "name": "Identifier",
                            "src": "9669:10:3"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 1960,
                              "type": "uint256",
                              "value": "_newCondition"
                            },
                            "id": 2031,
                            "name": "Identifier",
                            "src": "9681:13:3"
                          }
                        ],
                        "id": 2032,
                        "name": "FunctionCall",
                        "src": "9640:55:3"
                      }
                    ],
                    "id": 2033,
                    "name": "EmitStatement",
                    "src": "9635:60:3"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 1945
                    },
                    "children": [
                      {
                        "attributes": {
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 1960,
                          "type": "uint256",
                          "value": "_newCondition"
                        },
                        "id": 2034,
                        "name": "Identifier",
                        "src": "9712:13:3"
                      }
                    ],
                    "id": 2035,
                    "name": "Return",
                    "src": "9705:20:3"
                  }
                ],
                "id": 2036,
                "name": "Block",
                "src": "8781:951:3"
              }
            ],
            "id": 2037,
            "name": "FunctionDefinition",
            "src": "8634:1098:3"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "isFirstConditionInChain",
              "scope": 2186,
              "stateMutability": "view",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "text": "Check if it is the first condition in a chain of conditions.\n @param _id The condition ID.\n Must be called with `_id != 0`."
                },
                "id": 2038,
                "name": "StructuredDocumentation",
                "src": "9738:149:3"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "_id",
                      "scope": 2052,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 2039,
                        "name": "ElementaryTypeName",
                        "src": "9925:7:3"
                      }
                    ],
                    "id": 2040,
                    "name": "VariableDeclaration",
                    "src": "9925:11:3"
                  }
                ],
                "id": 2041,
                "name": "ParameterList",
                "src": "9924:13:3"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 2052,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 2042,
                        "name": "ElementaryTypeName",
                        "src": "9961:4:3"
                      }
                    ],
                    "id": 2043,
                    "name": "VariableDeclaration",
                    "src": "9961:4:3"
                  }
                ],
                "id": 2044,
                "name": "ParameterList",
                "src": "9960:6:3"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 2044
                    },
                    "children": [
                      {
                        "attributes": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "==",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1787,
                                  "type": "mapping(uint256 => uint256)",
                                  "value": "firstConditionInChain"
                                },
                                "id": 2045,
                                "name": "Identifier",
                                "src": "9984:21:3"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2040,
                                  "type": "uint256",
                                  "value": "_id"
                                },
                                "id": 2046,
                                "name": "Identifier",
                                "src": "10006:3:3"
                              }
                            ],
                            "id": 2047,
                            "name": "IndexAccess",
                            "src": "9984:26:3"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2040,
                              "type": "uint256",
                              "value": "_id"
                            },
                            "id": 2048,
                            "name": "Identifier",
                            "src": "10014:3:3"
                          }
                        ],
                        "id": 2049,
                        "name": "BinaryOperation",
                        "src": "9984:33:3"
                      }
                    ],
                    "id": 2050,
                    "name": "Return",
                    "src": "9977:40:3"
                  }
                ],
                "id": 2051,
                "name": "Block",
                "src": "9967:57:3"
              }
            ],
            "id": 2052,
            "name": "FunctionDefinition",
            "src": "9892:132:3"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "isLastConditionInChain",
              "scope": 2186,
              "stateMutability": "view",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "text": "Check if it is the last condition in a chain of conditions.\n @param _id The condition ID.\n Must be called with `_id != 0`.\n TODO: Should make this function public?"
                },
                "id": 2053,
                "name": "StructuredDocumentation",
                "src": "10030:204:3"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "_id",
                      "scope": 2069,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 2054,
                        "name": "ElementaryTypeName",
                        "src": "10271:7:3"
                      }
                    ],
                    "id": 2055,
                    "name": "VariableDeclaration",
                    "src": "10271:11:3"
                  }
                ],
                "id": 2056,
                "name": "ParameterList",
                "src": "10270:13:3"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 2069,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "bool",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bool",
                          "type": "bool"
                        },
                        "id": 2057,
                        "name": "ElementaryTypeName",
                        "src": "10307:4:3"
                      }
                    ],
                    "id": 2058,
                    "name": "VariableDeclaration",
                    "src": "10307:4:3"
                  }
                ],
                "id": 2059,
                "name": "ParameterList",
                "src": "10306:6:3"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "functionReturnParameters": 2059
                    },
                    "children": [
                      {
                        "attributes": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "==",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1792,
                                  "type": "mapping(uint256 => uint256)",
                                  "value": "firstToLastConditionInChain"
                                },
                                "id": 2060,
                                "name": "Identifier",
                                "src": "10330:27:3"
                              },
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "type": "uint256"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 1787,
                                      "type": "mapping(uint256 => uint256)",
                                      "value": "firstConditionInChain"
                                    },
                                    "id": 2061,
                                    "name": "Identifier",
                                    "src": "10358:21:3"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2055,
                                      "type": "uint256",
                                      "value": "_id"
                                    },
                                    "id": 2062,
                                    "name": "Identifier",
                                    "src": "10380:3:3"
                                  }
                                ],
                                "id": 2063,
                                "name": "IndexAccess",
                                "src": "10358:26:3"
                              }
                            ],
                            "id": 2064,
                            "name": "IndexAccess",
                            "src": "10330:55:3"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2055,
                              "type": "uint256",
                              "value": "_id"
                            },
                            "id": 2065,
                            "name": "Identifier",
                            "src": "10389:3:3"
                          }
                        ],
                        "id": 2066,
                        "name": "BinaryOperation",
                        "src": "10330:62:3"
                      }
                    ],
                    "id": 2067,
                    "name": "Return",
                    "src": "10323:69:3"
                  }
                ],
                "id": 2068,
                "name": "Block",
                "src": "10313:86:3"
              }
            ],
            "id": 2069,
            "name": "FunctionDefinition",
            "src": "10239:160:3"
          },
          {
            "attributes": {
              "baseFunctions": [
                1046
              ],
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "_doTransfer",
              "scope": 2186,
              "stateMutability": "nonpayable",
              "virtual": true,
              "visibility": "internal"
            },
            "children": [
              {
                "attributes": {
                  "overrides": [
                    null
                  ]
                },
                "id": 2079,
                "name": "OverrideSpecifier",
                "src": "10500:8:3"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "_id",
                      "scope": 2117,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 2070,
                        "name": "ElementaryTypeName",
                        "src": "10426:7:3"
                      }
                    ],
                    "id": 2071,
                    "name": "VariableDeclaration",
                    "src": "10426:11:3"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "_from",
                      "scope": 2117,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 2072,
                        "name": "ElementaryTypeName",
                        "src": "10439:7:3"
                      }
                    ],
                    "id": 2073,
                    "name": "VariableDeclaration",
                    "src": "10439:13:3"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "_to",
                      "scope": 2117,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 2074,
                        "name": "ElementaryTypeName",
                        "src": "10454:7:3"
                      }
                    ],
                    "id": 2075,
                    "name": "VariableDeclaration",
                    "src": "10454:11:3"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "_value",
                      "scope": 2117,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 2076,
                        "name": "ElementaryTypeName",
                        "src": "10467:7:3"
                      }
                    ],
                    "id": 2077,
                    "name": "VariableDeclaration",
                    "src": "10467:14:3"
                  }
                ],
                "id": 2078,
                "name": "ParameterList",
                "src": "10425:57:3"
              },
              {
                "attributes": {
                  "parameters": [
                    null
                  ]
                },
                "children": [],
                "id": 2080,
                "name": "ParameterList",
                "src": "10509:0:3"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "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": "_doTransfer",
                              "referencedDeclaration": 1046,
                              "type": "function (uint256,address,address,uint256)"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4294967271,
                                  "type": "contract super BaseSalary",
                                  "value": "super"
                                },
                                "id": 2081,
                                "name": "Identifier",
                                "src": "10519:5:3"
                              }
                            ],
                            "id": 2083,
                            "name": "MemberAccess",
                            "src": "10519:17:3"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2071,
                              "type": "uint256",
                              "value": "_id"
                            },
                            "id": 2084,
                            "name": "Identifier",
                            "src": "10537:3:3"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2073,
                              "type": "address",
                              "value": "_from"
                            },
                            "id": 2085,
                            "name": "Identifier",
                            "src": "10542:5:3"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2075,
                              "type": "address",
                              "value": "_to"
                            },
                            "id": 2086,
                            "name": "Identifier",
                            "src": "10549:3:3"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2077,
                              "type": "uint256",
                              "value": "_value"
                            },
                            "id": 2087,
                            "name": "Identifier",
                            "src": "10554:6:3"
                          }
                        ],
                        "id": 2088,
                        "name": "FunctionCall",
                        "src": "10519:42:3"
                      }
                    ],
                    "id": 2089,
                    "name": "ExpressionStatement",
                    "src": "10519:42:3"
                  },
                  {
                    "attributes": {},
                    "children": [
                      {
                        "attributes": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "&&",
                          "type": "bool"
                        },
                        "children": [
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "!=",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2071,
                                  "type": "uint256",
                                  "value": "_id"
                                },
                                "id": 2090,
                                "name": "Identifier",
                                "src": "10576:3:3"
                              },
                              {
                                "attributes": {
                                  "hexvalue": "30",
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "token": "number",
                                  "type": "int_const 0",
                                  "value": "0"
                                },
                                "id": 2091,
                                "name": "Literal",
                                "src": "10583:1:3"
                              }
                            ],
                            "id": 2092,
                            "name": "BinaryOperation",
                            "src": "10576:8:3"
                          },
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "==",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "address",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "member_name": "ownerOf",
                                      "referencedDeclaration": 4709,
                                      "type": "function (uint256) view external returns (address)"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 1774,
                                          "type": "contract NFTSalaryRecipient",
                                          "value": "salaryRecipients"
                                        },
                                        "id": 2093,
                                        "name": "Identifier",
                                        "src": "10588:16:3"
                                      }
                                    ],
                                    "id": 2094,
                                    "name": "MemberAccess",
                                    "src": "10588:24:3"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2071,
                                      "type": "uint256",
                                      "value": "_id"
                                    },
                                    "id": 2095,
                                    "name": "Identifier",
                                    "src": "10613:3:3"
                                  }
                                ],
                                "id": 2096,
                                "name": "FunctionCall",
                                "src": "10588:29:3"
                              },
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "member_name": "sender",
                                  "type": "address payable"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 4294967281,
                                      "type": "msg",
                                      "value": "msg"
                                    },
                                    "id": 2097,
                                    "name": "Identifier",
                                    "src": "10621:3:3"
                                  }
                                ],
                                "id": 2098,
                                "name": "MemberAccess",
                                "src": "10621:10:3"
                              }
                            ],
                            "id": 2099,
                            "name": "BinaryOperation",
                            "src": "10588:43:3"
                          }
                        ],
                        "id": 2100,
                        "name": "BinaryOperation",
                        "src": "10576:55:3"
                      },
                      {
                        "children": [
                          {
                            "attributes": {
                              "assignments": [
                                2102
                              ]
                            },
                            "children": [
                              {
                                "attributes": {
                                  "constant": false,
                                  "mutability": "mutable",
                                  "name": "_data",
                                  "scope": 2114,
                                  "stateVariable": false,
                                  "storageLocation": "memory",
                                  "type": "bytes",
                                  "visibility": "internal"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "name": "bytes",
                                      "type": "bytes"
                                    },
                                    "id": 2101,
                                    "name": "ElementaryTypeName",
                                    "src": "10647:5:3"
                                  }
                                ],
                                "id": 2102,
                                "name": "VariableDeclaration",
                                "src": "10647:18:3"
                              }
                            ],
                            "id": 2103,
                            "name": "VariableDeclarationStatement",
                            "src": "10647:18:3"
                          },
                          {
                            "attributes": {},
                            "children": [
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "bool",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2069,
                                      "type": "function (uint256) view returns (bool)",
                                      "value": "isLastConditionInChain"
                                    },
                                    "id": 2104,
                                    "name": "Identifier",
                                    "src": "10683:22:3"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2071,
                                      "type": "uint256",
                                      "value": "_id"
                                    },
                                    "id": 2105,
                                    "name": "Identifier",
                                    "src": "10706:3:3"
                                  }
                                ],
                                "id": 2106,
                                "name": "FunctionCall",
                                "src": "10683:27:3"
                              },
                              {
                                "children": [
                                  {
                                    "children": [
                                      {
                                        "attributes": {
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "isStructConstructorCall": false,
                                          "lValueRequested": false,
                                          "names": [
                                            null
                                          ],
                                          "tryCall": false,
                                          "type": "uint256",
                                          "type_conversion": false
                                        },
                                        "children": [
                                          {
                                            "attributes": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                },
                                                {
                                                  "typeIdentifier": "t_bytes_memory_ptr",
                                                  "typeString": "bytes memory"
                                                }
                                              ],
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 2037,
                                              "type": "function (uint256,bytes memory) returns (uint256)",
                                              "value": "_recreateCondition"
                                            },
                                            "id": 2107,
                                            "name": "Identifier",
                                            "src": "10760:18:3"
                                          },
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 2071,
                                              "type": "uint256",
                                              "value": "_id"
                                            },
                                            "id": 2108,
                                            "name": "Identifier",
                                            "src": "10779:3:3"
                                          },
                                          {
                                            "attributes": {
                                              "overloadedDeclarations": [
                                                null
                                              ],
                                              "referencedDeclaration": 2102,
                                              "type": "bytes memory",
                                              "value": "_data"
                                            },
                                            "id": 2109,
                                            "name": "Identifier",
                                            "src": "10784:5:3"
                                          }
                                        ],
                                        "id": 2110,
                                        "name": "FunctionCall",
                                        "src": "10760:30:3"
                                      }
                                    ],
                                    "id": 2111,
                                    "name": "ExpressionStatement",
                                    "src": "10760:30:3"
                                  }
                                ],
                                "id": 2112,
                                "name": "Block",
                                "src": "10712:93:3"
                              }
                            ],
                            "id": 2113,
                            "name": "IfStatement",
                            "src": "10679:126:3"
                          }
                        ],
                        "id": 2114,
                        "name": "Block",
                        "src": "10633:182:3"
                      }
                    ],
                    "id": 2115,
                    "name": "IfStatement",
                    "src": "10572:243:3"
                  }
                ],
                "id": 2116,
                "name": "Block",
                "src": "10509:312:3"
              }
            ],
            "id": 2117,
            "name": "FunctionDefinition",
            "src": "10405:416:3"
          },
          {
            "attributes": {
              "implemented": true,
              "isConstructor": false,
              "kind": "function",
              "modifiers": [
                null
              ],
              "name": "_registerCustomer",
              "scope": 2186,
              "stateMutability": "nonpayable",
              "virtual": true,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "_customer",
                      "scope": 2143,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "address",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "address",
                          "stateMutability": "nonpayable",
                          "type": "address"
                        },
                        "id": 2118,
                        "name": "ElementaryTypeName",
                        "src": "10854:7:3"
                      }
                    ],
                    "id": 2119,
                    "name": "VariableDeclaration",
                    "src": "10854:17:3"
                  },
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "_data",
                      "scope": 2143,
                      "stateVariable": false,
                      "storageLocation": "calldata",
                      "type": "bytes",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "bytes",
                          "type": "bytes"
                        },
                        "id": 2120,
                        "name": "ElementaryTypeName",
                        "src": "10873:5:3"
                      }
                    ],
                    "id": 2121,
                    "name": "VariableDeclaration",
                    "src": "10873:20:3"
                  }
                ],
                "id": 2122,
                "name": "ParameterList",
                "src": "10853:41:3"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "",
                      "scope": 2143,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 2123,
                        "name": "ElementaryTypeName",
                        "src": "10929:7:3"
                      }
                    ],
                    "id": 2124,
                    "name": "VariableDeclaration",
                    "src": "10929:7:3"
                  }
                ],
                "id": 2125,
                "name": "ParameterList",
                "src": "10928:9:3"
              },
              {
                "children": [
                  {
                    "attributes": {
                      "assignments": [
                        2127
                      ]
                    },
                    "children": [
                      {
                        "attributes": {
                          "constant": false,
                          "mutability": "mutable",
                          "name": "_condition",
                          "scope": 2142,
                          "stateVariable": false,
                          "storageLocation": "default",
                          "type": "uint256",
                          "visibility": "internal"
                        },
                        "children": [
                          {
                            "attributes": {
                              "name": "uint256",
                              "type": "uint256"
                            },
                            "id": 2126,
                            "name": "ElementaryTypeName",
                            "src": "10952:7:3"
                          }
                        ],
                        "id": 2127,
                        "name": "VariableDeclaration",
                        "src": "10952:18:3"
                      },
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "uint256",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_bytes_calldata_ptr",
                                  "typeString": "bytes calldata"
                                }
                              ],
                              "overloadedDeclarations": [
                                1933
                              ],
                              "referencedDeclaration": 1933,
                              "type": "function (address,bytes memory) returns (uint256)",
                              "value": "_doCreateCondition"
                            },
                            "id": 2128,
                            "name": "Identifier",
                            "src": "10973:18:3"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2119,
                              "type": "address",
                              "value": "_customer"
                            },
                            "id": 2129,
                            "name": "Identifier",
                            "src": "10992:9:3"
                          },
                          {
                            "attributes": {
                              "overloadedDeclarations": [
                                null
                              ],
                              "referencedDeclaration": 2121,
                              "type": "bytes calldata",
                              "value": "_data"
                            },
                            "id": 2130,
                            "name": "Identifier",
                            "src": "11003:5:3"
                          }
                        ],
                        "id": 2131,
                        "name": "FunctionCall",
                        "src": "10973:36:3"
                      }
                    ],
                    "id": 2132,
                    "name": "VariableDeclarationStatement",
                    "src": "10952:57:3"
                  },
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "operator": "=",
                          "type": "uint256"
                        },
                        "children": [
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 1782,
                                  "type": "mapping(uint256 => uint256)",
                                  "value": "lastSalaryDates"
                                },
                                "id": 2133,
                                "name": "Identifier",
                                "src": "11019:15:3"
                              },
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 2127,
                                  "type": "uint256",
                                  "value": "_condition"
                                },
                                "id": 2134,
                                "name": "Identifier",
                                "src": "11035:10:3"
                              }
                            ],
                            "id": 2135,
                            "name": "IndexAccess",
                            "src": "11019:27:3"
                          },
                          {
                            "attributes": {
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "member_name": "timestamp",
                              "type": "uint256"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "overloadedDeclarations": [
                                    null
                                  ],
                                  "referencedDeclaration": 4294967292,
                                  "type": "block",
                                  "value": "block"
                                },
                                "id": 2136,
                                "name": "Identifier",
                                "src": "11049:5:3"
                              }
                            ],
                            "id": 2137,
                            "name": "MemberAccess",
                            "src": "11049:15:3"
                          }
                        ],
                        "id": 2138,
                        "name": "Assignment",
                        "src": "11019:45:3"
                      }
                    ],
                    "id": 2139,
                    "name": "ExpressionStatement",
                    "src": "11019:45:3"
                  },
                  {
                    "attributes": {
                      "functionReturnParameters": 2125
                    },
                    "children": [
                      {
                        "attributes": {
                          "overloadedDeclarations": [
                            null
                          ],
                          "referencedDeclaration": 2127,
                          "type": "uint256",
                          "value": "_condition"
                        },
                        "id": 2140,
                        "name": "Identifier",
                        "src": "11081:10:3"
                      }
                    ],
                    "id": 2141,
                    "name": "Return",
                    "src": "11074:17:3"
                  }
                ],
                "id": 2142,
                "name": "Block",
                "src": "10942:156:3"
              }
            ],
            "id": 2143,
            "name": "FunctionDefinition",
            "src": "10827:271:3"
          },
          {
            "attributes": {
              "name": "ensureFirstConditionInChain",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "_id",
                      "scope": 2164,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 2144,
                        "name": "ElementaryTypeName",
                        "src": "11141:7:3"
                      }
                    ],
                    "id": 2145,
                    "name": "VariableDeclaration",
                    "src": "11141:11:3"
                  }
                ],
                "id": 2146,
                "name": "ParameterList",
                "src": "11140:13:3"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_ca8100810b1e55d5faec88eb49d63aef9640bc2e3a82288decf2d5f4b8240118",
                                  "typeString": "literal_string \"Only for the last salary token.\""
                                }
                              ],
                              "overloadedDeclarations": [
                                4294967278,
                                4294967278
                              ],
                              "referencedDeclaration": 4294967278,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 2147,
                            "name": "Identifier",
                            "src": "11209:7:3"
                          },
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "&&",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "commonType": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "&&",
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "bool",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 1464,
                                          "type": "function (uint256) pure returns (bool)",
                                          "value": "_isConditional"
                                        },
                                        "id": 2148,
                                        "name": "Identifier",
                                        "src": "11217:14:3"
                                      },
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 2145,
                                          "type": "uint256",
                                          "value": "_id"
                                        },
                                        "id": 2149,
                                        "name": "Identifier",
                                        "src": "11232:3:3"
                                      }
                                    ],
                                    "id": 2150,
                                    "name": "FunctionCall",
                                    "src": "11217:19:3"
                                  },
                                  {
                                    "attributes": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "!=",
                                      "type": "bool"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 2145,
                                          "type": "uint256",
                                          "value": "_id"
                                        },
                                        "id": 2151,
                                        "name": "Identifier",
                                        "src": "11240:3:3"
                                      },
                                      {
                                        "attributes": {
                                          "hexvalue": "30",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "token": "number",
                                          "type": "int_const 0",
                                          "value": "0"
                                        },
                                        "id": 2152,
                                        "name": "Literal",
                                        "src": "11247:1:3"
                                      }
                                    ],
                                    "id": 2153,
                                    "name": "BinaryOperation",
                                    "src": "11240:8:3"
                                  }
                                ],
                                "id": 2154,
                                "name": "BinaryOperation",
                                "src": "11217:31:3"
                              },
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "bool",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2052,
                                      "type": "function (uint256) view returns (bool)",
                                      "value": "isFirstConditionInChain"
                                    },
                                    "id": 2155,
                                    "name": "Identifier",
                                    "src": "11252:23:3"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2145,
                                      "type": "uint256",
                                      "value": "_id"
                                    },
                                    "id": 2156,
                                    "name": "Identifier",
                                    "src": "11276:3:3"
                                  }
                                ],
                                "id": 2157,
                                "name": "FunctionCall",
                                "src": "11252:28:3"
                              }
                            ],
                            "id": 2158,
                            "name": "BinaryOperation",
                            "src": "11217:63:3"
                          },
                          {
                            "attributes": {
                              "hexvalue": "4f6e6c7920666f7220746865206c6173742073616c61727920746f6b656e2e",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "string",
                              "type": "literal_string \"Only for the last salary token.\"",
                              "value": "Only for the last salary token."
                            },
                            "id": 2159,
                            "name": "Literal",
                            "src": "11282:33:3"
                          }
                        ],
                        "id": 2160,
                        "name": "FunctionCall",
                        "src": "11209:107:3"
                      }
                    ],
                    "id": 2161,
                    "name": "ExpressionStatement",
                    "src": "11209:107:3"
                  },
                  {
                    "id": 2162,
                    "name": "PlaceholderStatement",
                    "src": "11326:1:3"
                  }
                ],
                "id": 2163,
                "name": "Block",
                "src": "11154:180:3"
              }
            ],
            "id": 2164,
            "name": "ModifierDefinition",
            "src": "11104:230:3"
          },
          {
            "attributes": {
              "name": "ensureLastConditionInChain",
              "virtual": false,
              "visibility": "internal"
            },
            "children": [
              {
                "children": [
                  {
                    "attributes": {
                      "constant": false,
                      "mutability": "mutable",
                      "name": "_id",
                      "scope": 2185,
                      "stateVariable": false,
                      "storageLocation": "default",
                      "type": "uint256",
                      "visibility": "internal"
                    },
                    "children": [
                      {
                        "attributes": {
                          "name": "uint256",
                          "type": "uint256"
                        },
                        "id": 2165,
                        "name": "ElementaryTypeName",
                        "src": "11376:7:3"
                      }
                    ],
                    "id": 2166,
                    "name": "VariableDeclaration",
                    "src": "11376:11:3"
                  }
                ],
                "id": 2167,
                "name": "ParameterList",
                "src": "11375:13:3"
              },
              {
                "children": [
                  {
                    "children": [
                      {
                        "attributes": {
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "isStructConstructorCall": false,
                          "lValueRequested": false,
                          "names": [
                            null
                          ],
                          "tryCall": false,
                          "type": "tuple()",
                          "type_conversion": false
                        },
                        "children": [
                          {
                            "attributes": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_ca8100810b1e55d5faec88eb49d63aef9640bc2e3a82288decf2d5f4b8240118",
                                  "typeString": "literal_string \"Only for the last salary token.\""
                                }
                              ],
                              "overloadedDeclarations": [
                                4294967278,
                                4294967278
                              ],
                              "referencedDeclaration": 4294967278,
                              "type": "function (bool,string memory) pure",
                              "value": "require"
                            },
                            "id": 2168,
                            "name": "Identifier",
                            "src": "11444:7:3"
                          },
                          {
                            "attributes": {
                              "commonType": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "operator": "&&",
                              "type": "bool"
                            },
                            "children": [
                              {
                                "attributes": {
                                  "commonType": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "operator": "&&",
                                  "type": "bool"
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "isStructConstructorCall": false,
                                      "lValueRequested": false,
                                      "names": [
                                        null
                                      ],
                                      "tryCall": false,
                                      "type": "bool",
                                      "type_conversion": false
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 1464,
                                          "type": "function (uint256) pure returns (bool)",
                                          "value": "_isConditional"
                                        },
                                        "id": 2169,
                                        "name": "Identifier",
                                        "src": "11452:14:3"
                                      },
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 2166,
                                          "type": "uint256",
                                          "value": "_id"
                                        },
                                        "id": 2170,
                                        "name": "Identifier",
                                        "src": "11467:3:3"
                                      }
                                    ],
                                    "id": 2171,
                                    "name": "FunctionCall",
                                    "src": "11452:19:3"
                                  },
                                  {
                                    "attributes": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "operator": "!=",
                                      "type": "bool"
                                    },
                                    "children": [
                                      {
                                        "attributes": {
                                          "overloadedDeclarations": [
                                            null
                                          ],
                                          "referencedDeclaration": 2166,
                                          "type": "uint256",
                                          "value": "_id"
                                        },
                                        "id": 2172,
                                        "name": "Identifier",
                                        "src": "11475:3:3"
                                      },
                                      {
                                        "attributes": {
                                          "hexvalue": "30",
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "token": "number",
                                          "type": "int_const 0",
                                          "value": "0"
                                        },
                                        "id": 2173,
                                        "name": "Literal",
                                        "src": "11482:1:3"
                                      }
                                    ],
                                    "id": 2174,
                                    "name": "BinaryOperation",
                                    "src": "11475:8:3"
                                  }
                                ],
                                "id": 2175,
                                "name": "BinaryOperation",
                                "src": "11452:31:3"
                              },
                              {
                                "attributes": {
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "isStructConstructorCall": false,
                                  "lValueRequested": false,
                                  "names": [
                                    null
                                  ],
                                  "tryCall": false,
                                  "type": "bool",
                                  "type_conversion": false
                                },
                                "children": [
                                  {
                                    "attributes": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      ],
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2069,
                                      "type": "function (uint256) view returns (bool)",
                                      "value": "isLastConditionInChain"
                                    },
                                    "id": 2176,
                                    "name": "Identifier",
                                    "src": "11487:22:3"
                                  },
                                  {
                                    "attributes": {
                                      "overloadedDeclarations": [
                                        null
                                      ],
                                      "referencedDeclaration": 2166,
                                      "type": "uint256",
                                      "value": "_id"
                                    },
                                    "id": 2177,
                                    "name": "Identifier",
                                    "src": "11510:3:3"
                                  }
                                ],
                                "id": 2178,
                                "name": "FunctionCall",
                                "src": "11487:27:3"
                              }
                            ],
                            "id": 2179,
                            "name": "BinaryOperation",
                            "src": "11452:62:3"
                          },
                          {
                            "attributes": {
                              "hexvalue": "4f6e6c7920666f7220746865206c6173742073616c61727920746f6b656e2e",
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "token": "string",
                              "type": "literal_string \"Only for the last salary token.\"",
                              "value": "Only for the last salary token."
                            },
                            "id": 2180,
                            "name": "Literal",
                            "src": "11516:33:3"
                          }
                        ],
                        "id": 2181,
                        "name": "FunctionCall",
                        "src": "11444:106:3"
                      }
                    ],
                    "id": 2182,
                    "name": "ExpressionStatement",
                    "src": "11444:106:3"
                  },
                  {
                    "id": 2183,
                    "name": "PlaceholderStatement",
                    "src": "11560:1:3"
                  }
                ],
                "id": 2184,
                "name": "Block",
                "src": "11389:179:3"
              }
            ],
            "id": 2185,
            "name": "ModifierDefinition",
            "src": "11340:228:3"
          }
        ],
        "id": 2186,
        "name": "ContractDefinition",
        "src": "1414:10156:3"
      }
    ],
    "id": 2187,
    "name": "SourceUnit",
    "src": "46:11525:3"
  },
  "compiler": {
    "name": "solc",
    "version": "0.7.6+commit.7338295f.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.4.1",
  "updatedAt": "2021-06-14T03:28:01.967Z",
  "devdoc": {
    "author": "Victor Porton It was considered to allow the DAO to adjust registration date to pay salary retrospectively, but this seems giving too much rights to the DAO similarly as if it had the right to declare anyone dead. It would cause this effect: A scientist who is already great may register then his date is moved back in time and instantly he or she receives a very big sum of money to his account. If it is done erroneously, there may be no way to move the registration date again forward in time, because the tokens may be already withdrawn. And it cannot be done in a fully decentralized way because it needs oracles. So errors are seem inevitable. On the other hand, somebody malicious may create and register in my system a pool of Ethereum addresses that individuals can receive from them as if they themselves registered in the past. So it in some cases (if the registration date is past the contract deployment) this issue is impossible to mitigate. The salary is paid in minted tokens groups into \"chains\": the original salary token and anyone can replace it by another token, next in the chain.",
    "events": {
      "ConditionReCreate(address,uint256,uint256)": {
        "params": {
          "customer": "The customer address.",
          "newCondition": "The new token ID.",
          "originalCondition": "The original token ID."
        }
      },
      "SalaryMinted(address,uint256,uint256,bytes)": {
        "params": {
          "amount": "The minted amount.",
          "customer": "The customer address.",
          "data": "Additional data."
        }
      }
    },
    "kind": "dev",
    "methods": {
      "balanceOf(address,uint256)": {
        "details": "See {IERC1155-balanceOf}. Requirements: - `account` cannot be the zero address."
      },
      "balanceOfBatch(address[],uint256[])": {
        "details": "See {IERC1155-balanceOfBatch}. Requirements: - `accounts` and `ids` must have the same length."
      },
      "changeOracleOwner(address,uint64)": {
        "params": {
          "_newOracleOwner": "New owner.",
          "_oracleId": "The oracle whose owner to change."
        }
      },
      "collateralOwing(address,uint256,uint64,uint256,address)": {
        "params": {
          "_collateralContractAddress": "The ERC-1155 collateral token contract.",
          "_collateralTokenId": "The ERC-1155 collateral token ID.",
          "_condition": "The condition (the original receiver of a conditional token).",
          "_oracleId": "From which oracle's \"account\" to withdraw.",
          "_user": "The user to which we may owe."
        }
      },
      "constructor": {
        "params": {
          "_uri": "The ERC-1155 token URI."
        }
      },
      "donate(address,uint256,uint64,uint256,address,address,bytes)": {
        "params": {
          "_amount": "The amount to donate.",
          "_collateralContractAddress": "The collateral ERC-1155 contract address.",
          "_collateralTokenId": "The collateral ERC-1155 token ID.",
          "_data": "Additional transaction data.",
          "_from": "From whom to take the donation.",
          "_oracleId": "The oracle ID to whose ecosystem to donate to.",
          "_to": "On whose account the donation amount is assigned."
        }
      },
      "finishOracle(uint64)": {
        "params": {
          "_oracleId": "The oracle ID. You should set grace period end time before calling this method."
        }
      },
      "gatherDeFiProfit(address,uint256,uint64,bytes)": {
        "params": {
          "_collateralContractAddress": "The collateral ERC-1155 contract address.",
          "_collateralTokenId": "The collateral ERC-1155 token ID.",
          "_data": "Additional transaction data.",
          "_oracleId": "The oracle ID to whose ecosystem to donate to."
        }
      },
      "gracePeriodEnd(uint64)": {
        "params": {
          "_oracleId": "For which oracle."
        }
      },
      "isApprovedForAll(address,address)": {
        "details": "See {IERC1155-isApprovedForAll}."
      },
      "isConditionalLocked(address,uint256)": {
        "params": {
          "_condition": "The condition (the original receiver of a conditional token).",
          "_user": "Querying if locked for this user."
        }
      },
      "isOracleFinished(uint64)": {
        "params": {
          "_oracleId": "The oracle ID."
        },
        "returns": {
          "_0": "`true` if it has finished."
        }
      },
      "mintSalary(uint256,bytes)": {
        "params": {
          "_condition": "The condition ID.",
          "_data": "Additional data. This method can be called only by the salary receiver."
        }
      },
      "onERC721Received(address,address,uint256,bytes)": {
        "details": "See {IERC721Receiver-onERC721Received}. Always returns `IERC721Receiver.onERC721Received.selector`."
      },
      "oracleOwner(uint64)": {
        "params": {
          "_oracleId": "The oracle ID."
        }
      },
      "payoutDenominator(uint64)": {
        "params": {
          "_oracleId": "The oracle ID. The result can't change if the oracle has finished."
        }
      },
      "payoutNumerator(uint64,uint256)": {
        "params": {
          "_condition": "The condition (the original receiver of a conditional token). The result can't change if the oracle has finished.",
          "_oracleId": "The oracle ID."
        }
      },
      "reportNumerator(uint64,uint256,uint256)": {
        "params": {
          "_condition": "The condition.",
          "_numerator": "The relative score of the condition. Note: We could make oracles easily verificable by a hash of all the data, but       - It may need allowing to set a numerator only once.       - It may be not necessary because future technology will allow to aggregate blockchains.",
          "_oracleId": "The oracle ID."
        }
      },
      "reportNumeratorsBatch(uint64,uint64[],uint256[])": {
        "params": {
          "_conditions": "The conditions.",
          "_numerators": "The relative scores of the condition.",
          "_oracleId": "The oracle ID."
        }
      },
      "setApprovalForAll(address,bool)": {
        "details": "See {IERC1155-setApprovalForAll}."
      },
      "supportsInterface(bytes4)": {
        "details": "See {IERC165-supportsInterface}. Time complexity O(1), guaranteed to always use less than 30 000 gas."
      },
      "totalSupply(uint256)": {
        "params": {
          "id": "Token ID."
        },
        "returns": {
          "_0": "Total supply."
        }
      },
      "uri(uint256)": {
        "details": "See {IERC1155MetadataURI-uri}. This implementation returns the same URI for *all* token types. It relies on the token type ID substitution mechanism https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. Clients calling this function must replace the `\\{id\\}` substring with the actual token type ID."
      },
      "withdrawCollateral(address,uint256,uint64,uint256,bytes)": {
        "params": {
          "_collateralContractAddress": "The ERC-1155 collateral token contract.",
          "_collateralTokenId": "The ERC-1155 collateral token ID.",
          "_condition": "The condition.",
          "_data": "Additional data. Notes: - It is made impossible to withdraw somebody's other collateral, as otherwise we can't mark non-active   accounts in grace period. - We can't transfer to somebody other than `msg.sender` because anybody can transfer   (needed for multi-level transfers). - After this function is called, it becomes impossible to transfer the corresponding conditional token   of `msg.sender` (to prevent its repeated withdrawal).",
          "_oracleId": "From which oracle's \"account\" to withdraw."
        }
      }
    },
    "title": "Base class for a \"salary\" that is paid one token per second using minted conditionals.",
    "version": 1
  },
  "userdoc": {
    "events": {
      "CollateralWithdrawn(address,uint256,uint64,address,uint256)": {
        "notice": "Emitted when collateral is withdrawn."
      },
      "ConditionCreated(address,address,uint256,bytes)": {
        "notice": "Emitted when an oracle owner is set."
      },
      "ConditionReCreate(address,uint256,uint256)": {
        "notice": "Salary token recreated (salary recalculation request)."
      },
      "DonateCollateral(address,uint256,address,uint256,address,bytes)": {
        "notice": "Emitted when a collateral is donated."
      },
      "OracleCreated(address,uint64)": {
        "notice": "Emitted when an oracle is created."
      },
      "OracleFinished(uint64)": {
        "notice": "Emitted when an oracle is marked as having finished its work."
      },
      "OracleOwnerChanged(address,uint64)": {
        "notice": "Emitted when an oracle owner is set."
      },
      "ReportedNumerator(uint64,uint256,uint256)": {
        "notice": "A condition score was stored in the chain by an oracle."
      },
      "ReportedNumeratorsBatch(uint64,uint64[],uint256[])": {
        "notice": "Some condition scores were stored in the chain by an oracle."
      },
      "SalaryMinted(address,uint256,uint256,bytes)": {
        "notice": "Salary tokens minted."
      }
    },
    "kind": "user",
    "methods": {
      "changeOracleOwner(address,uint64)": {
        "notice": "Modify the owner of an oracle."
      },
      "collateralOwing(address,uint256,uint64,uint256,address)": {
        "notice": "Calculate how much collateral is owed to a user."
      },
      "constructor": {
        "notice": "Constructor."
      },
      "donate(address,uint256,uint64,uint256,address,address,bytes)": {
        "notice": "Donate funds in an ERC-1155 token. First, the collateral token need to be approved to be spent by this contract from the address `_from`. It also mints a token (with a different ID), that counts donations in that token."
      },
      "finishOracle(uint64)": {
        "notice": "Need to be called after all numerators were reported."
      },
      "firstConditionInChain(uint256)": {
        "notice": "Mapping (condition ID => first condition ID in the chain) I call _chain_ of conditions the list of conditions resulting from creating and recreating conditions."
      },
      "firstToLastConditionInChain(uint256)": {
        "notice": "Mapping (first condition ID in the chain => last condition ID in the chain) I call _chain_ of conditions the list of conditions resulting from creating and recreating conditions."
      },
      "gatherDeFiProfit(address,uint256,uint64,bytes)": {
        "notice": "Gather a DeFi profit of a token previous donated to this contact."
      },
      "gracePeriodEnd(uint64)": {
        "notice": "Retrieve the end of the grace period."
      },
      "isConditionalLocked(address,uint256)": {
        "notice": "Are transfers of a conditinal token locked? This is used to prevent its repeated withdrawal."
      },
      "isOracleFinished(uint64)": {
        "notice": "Check if an oracle has finished."
      },
      "mintSalary(uint256,bytes)": {
        "notice": "Mint a salary token."
      },
      "oracleOwner(uint64)": {
        "notice": "Get the oracle owner."
      },
      "payoutDenominator(uint64)": {
        "notice": "Retrieve the last stored payout denominator (the sum of all numerators of the oracle)."
      },
      "payoutNumerator(uint64,uint256)": {
        "notice": "Retrieve the last stored payout numerator (relative score of a condition)."
      },
      "recreateCondition(uint256,bytes)": {
        "notice": "Make a new condition that replaces the old one. In other words, it is a request to recalculate somebody's salary. Anyone can request to recalculate anyone's salary. It's also useful to punish someone for decreasing his work performance or an evil act. This is to be called among other when a person dies. Recalculation is also forced when a salary receiver transfers away his current salary token. It is useful to remove a trader's incentive to kill the issuer to reduce the circulating supply. Issue to solve later: Should we recommend: - calling this function on each new project milestone? - calling this function regularly (e.g. every week)? This function also withdraws the old token."
      },
      "reportNumerator(uint64,uint256,uint256)": {
        "notice": "Called by the oracle owner for reporting results of conditions."
      },
      "reportNumeratorsBatch(uint64,uint64[],uint256[])": {
        "notice": "Called by the oracle owner for reporting results of several conditions."
      },
      "safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)": {
        "notice": "An ERC-1155 function. We disallow transfers of conditional tokens after redeem `_to` prevent \"gathering\" them before redeeming each oracle."
      },
      "safeTransferFrom(address,address,uint256,uint256,bytes)": {
        "notice": "An ERC-1155 function. We disallow transfers of conditional tokens after redeem `_to` prevent \"gathering\" them before redeeming each oracle."
      },
      "totalSupply(uint256)": {
        "notice": "Total supply of a token (conforms to `IERC1155Views`)."
      },
      "updateGracePeriodEnds(uint64,uint256)": {
        "notice": "Set the end time of the grace period. The first withdrawal can be done *only* during the grace period. The second withdrawal can be done after the end of the grace period and only if the first withdrawal was done. The intention of the grace period is to check which of users are active (\"alive\")."
      },
      "usersWithdrewInFirstRound(uint64)": {
        "notice": "Mapping (oracleId => amount user withdrew in first round) (see `docs/Calculations.md`)."
      },
      "withdrawCollateral(address,uint256,uint64,uint256,bytes)": {
        "notice": "Transfer to `msg.sender` the collateral ERC-1155 token. The amount transferred is proportional to the score of `_condition` by the oracle."
      }
    },
    "version": 1
  }
}