{
  "contractName": "IERC20_Crowdsale",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "mint",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"mint(address,uint256)\":{\"notice\":\"to mint $ENSHROUD tokens to this address automatically with each tier increment\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/Crowdsale.sol\":\"IERC20_Crowdsale\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"project:/contracts/Crowdsale.sol\":{\"keccak256\":\"0x58adf605c8a1042c18f85a52c6be712bf97b09aa28f1a11ff8750a5c3d62aa61\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a8b2575cf3ccc6aeb07ee591e07a674c2773003f9833f42b5bde7e9dcadc7615\",\"dweb:/ipfs/QmRDXdfVnCU2fXtNBPnwf9R7jF89f3wVJnfGscvVHBZwcE\"]},\"project:/contracts/ReentrancyGuard.sol\":{\"keccak256\":\"0x6a42732aa0a681892f66e5f7b3b3075444378bf937c8e93661df5e7443c5c3dc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://778a2ee1360d2ace549ac0f283ccf3f7279bdff8876fdc037c4bcad012652717\",\"dweb:/ipfs/QmTrnghLT57Y3jD9yNR3fycronEc9nVuYEjzxnYtJpjX1F\"]},\"project:/contracts/SafeTransferLib.sol\":{\"keccak256\":\"0xb0500234799f59758b44c78ed63166f2b64a5d8c0c19024fd85208508656164f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f66a271b4ebee7032c91876874f54773a35955249b912621c7321502a365d417\",\"dweb:/ipfs/QmVkYb24oB8BKCebkrQG6eNubX55eUDsyFF7vNTepFjLPi\"]}},\"version\":1}",
  "bytecode": "0x",
  "deployedBytecode": "0x",
  "immutableReferences": {},
  "generatedSources": [],
  "deployedGeneratedSources": [],
  "sourceMap": "",
  "deployedSourceMap": "",
  "source": "// SPDX-License-Identifier: MIT\r\npragma solidity ^0.8.18;\r\n\r\n// These files are strictly provided as-is\r\n// without any express or implied guarantees, representations, or warranties\r\n// as to any of these files or any deployments hereof.\r\n\r\n// Any users of these files are doing so at their own risk.\r\n\r\n/// @notice immutable crowdsale contract for $ENSHROUD tokens, with ETH proceeds routed directly to the DAO treasury\r\n/** @dev allows anyone to exchange ETH for $ENSHROUD tokens, with rates automatically incrementing in tiers.\r\n * each tier increment mints 1 million $ENSHROUD tokens to this contract for purchase, and rate doubles in each new tier -- no hard cap,\r\n * as tiers will eventually become economically impractical according to the price of ETH\r\n */\r\n\r\n// Solbase ReentrancyGuard (https://github.com/Sol-DAO/solbase/blob/main/src/utils/ReentrancyGuard.sol)\r\nimport {ReentrancyGuard} from \"./ReentrancyGuard.sol\";\r\n\r\n// Solbase SafeTransferLib (https://github.com/Sol-DAO/solbase/blob/main/src/utils/SafeTransferLib.sol)\r\nimport {SafeTransferLib} from \"./SafeTransferLib.sol\";\r\n\r\n/*///////////////////////////////////////////////////////////////\r\n                            INTERFACES\r\n//////////////////////////////////////////////////////////////*/\r\n\r\ninterface IERC20_Crowdsale {\r\n    /// @notice to mint $ENSHROUD tokens to this address automatically with each tier increment\r\n    function mint(address to, uint256 value) external;\r\n}\r\n\r\ncontract Crowdsale is ReentrancyGuard {\r\n    uint256 internal constant DECIMAL_PLACES = 1e18;\r\n    uint256 internal minWei;\r\n\r\n    /// @notice token available for acquisition\r\n    address public immutable enshroudToken;\r\n\r\n    /// @notice address where proceeds are routed\r\n    address payable public immutable treasury;\r\n\r\n    bool internal initialised;\r\n\r\n    /// @notice counter for tiers\r\n    uint256 public tierIndex;\r\n\r\n    /// @notice maps tierIndex to how much wei a buyer must send to receive one $ENSHROUD token in return\r\n    mapping(uint256 => uint256) public rates;\r\n\r\n    /// @notice maps tierIndex to how many $ENSHROUD tokens remain in said tier (starting at 1 million per tier)\r\n    mapping(uint256 => uint256) public tokensInTier;\r\n\r\n    /*///////////////////////////////////////////////////////////////\r\n                            EVENTS\r\n    //////////////////////////////////////////////////////////////*/\r\n\r\n    event TierSoldOut(uint256 tierIndex);\r\n\r\n    event TokenPurchase(\r\n        address indexed purchaser,\r\n        uint256 value,\r\n        uint256 amount,\r\n        uint256 remainingTokensInTier\r\n    );\r\n\r\n    /*///////////////////////////////////////////////////////////////\r\n                            ERRORS\r\n    //////////////////////////////////////////////////////////////*/\r\n\r\n    error AlreadyInitialised();\r\n    error CannotPurchaseAnEntireTier();\r\n    error NotEnoughWei();\r\n    error NotInitialised();\r\n\r\n    /*///////////////////////////////////////////////////////////////\r\n                            FUNCTIONS\r\n    //////////////////////////////////////////////////////////////*/\r\n\r\n    /// @param _initialRate initial tier rate of wei per $ENSHROUD token inclusive of decimals: for example for .01 ETH per token, pass 1e16\r\n    /// @param _treasury immutable address where collected funds will be forwarded to\r\n    /// @param _enshroudToken immutable address of the token available for acquisition\r\n    /// @dev rates mapping commences at _initialRate; tierIndex starts at 0, which is mapped to the _initialRate\r\n    constructor(\r\n        uint256 _initialRate,\r\n        address payable _treasury,\r\n        address _enshroudToken\r\n    ) payable {\r\n        treasury = _treasury;\r\n        enshroudToken = _enshroudToken;\r\n        rates[0] = _initialRate;\r\n        minWei = _initialRate;\r\n    }\r\n\r\n    /**\r\n     * @dev calls 'buyTokens()' passing msg.value to ultimately buy $ENSHROUD tokens.\r\n     * 'minWei' corresponds to the minimum amount of wei required for 'buyTokens()' to not revert.\r\n     */\r\n    receive() external payable {\r\n        if (!initialised) revert NotInitialised();\r\n        // msg.value will be preserved, so 'buyTokens()' will revert if msg.value is below minWei\r\n        buyTokens(msg.sender);\r\n    }\r\n\r\n    /// @notice initialise after a minter passes address(this) to updateMinterStatus() in the Enshroud Token contract\r\n    /// @dev only callable once due to 'initialised' check\r\n    function initialise() external {\r\n        if (initialised) revert AlreadyInitialised();\r\n        initialised = true;\r\n        tokensInTier[0] = 1e6 * DECIMAL_PLACES;\r\n        unchecked {\r\n            IERC20_Crowdsale(enshroudToken).mint(\r\n                address(this),\r\n                1e6 * DECIMAL_PLACES\r\n            );\r\n        }\r\n    }\r\n\r\n    /// @notice to purchase $ENSHROUD tokens: purchaser pays by sending ETH as msg.value calling this function or directly to this contract address to be converted in receive()\r\n    /// @param _purchaser address of purchaser (msg.sender if calling this function directly, or address which sent ETH to the receive() function)\r\n    function buyTokens(address _purchaser) public payable nonReentrant {\r\n        if (!initialised) revert NotInitialised();\r\n        if (msg.value <= minWei) revert NotEnoughWei();\r\n\r\n        // either the receive() function is calling this method, or msg.sender chose a different address to receive the $ENSHROUD tokens\r\n\r\n        // calculate token amount, by number of wei per $ENSHROUD token for applicable tier\r\n        uint256 _purchaseAmount = (msg.value / rates[tierIndex]) *\r\n\t\t\tDECIMAL_PLACES;\r\n        uint256 _tokensInTier = tokensInTier[tierIndex];\r\n\r\n        // send msg.value to treasury\r\n        SafeTransferLib.safeTransferETH(treasury, msg.value);\r\n\r\n        if (_purchaseAmount > _tokensInTier) {\r\n            // if '_purchaseAmount' is more than the number of $ENSHROUD tokens remaining in this tier\r\n\t\t\t// tokens bought from next Tier will be half the surplus, because\r\n\t\t\t// the next Tier's price will be 2X that of the current Tier\r\n\t\t\tuint256 _tokensInNextTier = (_purchaseAmount - _tokensInTier) / 2;\r\n\r\n\t\t\t// make the switch to new Tier\r\n            delete tokensInTier[tierIndex]; // tier now empty\r\n            _incrementTier();\r\n\r\n            // revert if purchase would clear an entire tier in one transaction (1 million $ENSHROUD tokens); purchaser should use more than one transaction if so desired.\r\n            if (_tokensInNextTier >= tokensInTier[tierIndex])\r\n                revert CannotPurchaseAnEntireTier();\r\n\r\n            unchecked {\r\n                tokensInTier[tierIndex] -= _tokensInNextTier; // cannot underflow due to prior condition check\r\n\r\n                // deliver $ENSHROUD tokens to '_purchaser'\r\n                SafeTransferLib.safeTransfer(\r\n                    enshroudToken,\r\n                    _purchaser,\r\n                    _tokensInTier + _tokensInNextTier\r\n                );\r\n\r\n                emit TierSoldOut(tierIndex); // these events are 1-based\r\n                emit TokenPurchase(\r\n                    _purchaser,\r\n                    msg.value,\r\n                    _tokensInTier + _tokensInNextTier,\r\n                    tokensInTier[tierIndex]\r\n                );\r\n            }\r\n        } else if (_purchaseAmount == _tokensInTier) {\r\n            // if '_purchaseAmount' exactly equals the number of $ENSHROUD tokens remaining in this tier\r\n            // current tier now empty; increment tierIndex and deliver tokens\r\n            delete tokensInTier[tierIndex];\r\n\r\n            _incrementTier();\r\n\r\n            // deliver $ENSHROUD tokens to '_purchaser'\r\n            SafeTransferLib.safeTransfer(\r\n                enshroudToken,\r\n                _purchaser,\r\n                _purchaseAmount\r\n            );\r\n\r\n            emit TierSoldOut(tierIndex);\r\n            emit TokenPurchase(\r\n                _purchaser,\r\n                msg.value,\r\n                _purchaseAmount,\r\n                tokensInTier[tierIndex]\r\n            );\r\n        } else {\r\n            // if '_purchaseAmount' does not empty tier\r\n            tokensInTier[tierIndex] -= _purchaseAmount;\r\n\r\n            // deliver $ENSHROUD tokens to '_purchaser'\r\n            SafeTransferLib.safeTransfer(\r\n                enshroudToken,\r\n                _purchaser,\r\n                _purchaseAmount\r\n            );\r\n\r\n            emit TokenPurchase(\r\n                _purchaser,\r\n                msg.value,\r\n                _purchaseAmount,\r\n                tokensInTier[tierIndex]\r\n            );\r\n        }\r\n    }\r\n\r\n    function _incrementTier() internal {\r\n        unchecked {\r\n            // increment tier, will not overflow\r\n            ++tierIndex;\r\n\r\n            // new tier rate is double the prior tier's rate; will not overflow until an economically impractical tier, nor underflow due to prior incrementation\r\n            rates[tierIndex] = rates[tierIndex - 1] * 2;\r\n\r\n\t\t\t// minWei likewise doubles\r\n\t\t\tminWei *= 2;\r\n\r\n            // fixed value of 1 million including decimals, will not overflow\r\n            tokensInTier[tierIndex] = 1e6 * DECIMAL_PLACES;\r\n\r\n            // mint 1 million $ENSHROUD tokens to this address for the next tier, fixed amount will not overflow\r\n            IERC20_Crowdsale(enshroudToken).mint(\r\n                address(this),\r\n                1e6 * DECIMAL_PLACES\r\n            );\r\n        }\r\n    }\r\n}\r\n",
  "sourcePath": "/home/ensh/dapp/truffle/contracts/Crowdsale.sol",
  "ast": {
    "absolutePath": "project:/contracts/Crowdsale.sol",
    "exportedSymbols": {
      "Crowdsale": [
        364
      ],
      "IERC20_Crowdsale": [
        14
      ],
      "ReentrancyGuard": [
        7830
      ],
      "SafeTransferLib": [
        7894
      ]
    },
    "id": 365,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1,
        "literals": [
          "solidity",
          "^",
          "0.8",
          ".18"
        ],
        "nodeType": "PragmaDirective",
        "src": "33:24:0"
      },
      {
        "absolutePath": "project:/contracts/ReentrancyGuard.sol",
        "file": "./ReentrancyGuard.sol",
        "id": 3,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 365,
        "sourceUnit": 7831,
        "src": "873:54:0",
        "symbolAliases": [
          {
            "foreign": {
              "id": 2,
              "name": "ReentrancyGuard",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 7830,
              "src": "881:15:0",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/SafeTransferLib.sol",
        "file": "./SafeTransferLib.sol",
        "id": 5,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 365,
        "sourceUnit": 7895,
        "src": "1036:54:0",
        "symbolAliases": [
          {
            "foreign": {
              "id": 4,
              "name": "SafeTransferLib",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 7894,
              "src": "1044:15:0",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [],
        "canonicalName": "IERC20_Crowdsale",
        "contractDependencies": [],
        "contractKind": "interface",
        "fullyImplemented": false,
        "id": 14,
        "linearizedBaseContracts": [
          14
        ],
        "name": "IERC20_Crowdsale",
        "nameLocation": "1279:16:0",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "documentation": {
              "id": 6,
              "nodeType": "StructuredDocumentation",
              "src": "1303:91:0",
              "text": "@notice to mint $ENSHROUD tokens to this address automatically with each tier increment"
            },
            "functionSelector": "40c10f19",
            "id": 13,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "mint",
            "nameLocation": "1409:4:0",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 8,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "1422:2:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 13,
                  "src": "1414:10:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 7,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1414:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 10,
                  "mutability": "mutable",
                  "name": "value",
                  "nameLocation": "1434:5:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 13,
                  "src": "1426:13:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1426:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1413:27:0"
            },
            "returnParameters": {
              "id": 12,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1449:0:0"
            },
            "scope": 14,
            "src": "1400:50:0",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 365,
        "src": "1269:184:0",
        "usedErrors": [],
        "usedEvents": []
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 15,
              "name": "ReentrancyGuard",
              "nameLocations": [
                "1479:15:0"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 7830,
              "src": "1479:15:0"
            },
            "id": 16,
            "nodeType": "InheritanceSpecifier",
            "src": "1479:15:0"
          }
        ],
        "canonicalName": "Crowdsale",
        "contractDependencies": [],
        "contractKind": "contract",
        "fullyImplemented": true,
        "id": 364,
        "linearizedBaseContracts": [
          364,
          7830
        ],
        "name": "Crowdsale",
        "nameLocation": "1466:9:0",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "constant": true,
            "id": 19,
            "mutability": "constant",
            "name": "DECIMAL_PLACES",
            "nameLocation": "1528:14:0",
            "nodeType": "VariableDeclaration",
            "scope": 364,
            "src": "1502:47:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 17,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1502:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "hexValue": "31653138",
              "id": 18,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1545:4:0",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_1000000000000000000_by_1",
                "typeString": "int_const 1000000000000000000"
              },
              "value": "1e18"
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 21,
            "mutability": "mutable",
            "name": "minWei",
            "nameLocation": "1573:6:0",
            "nodeType": "VariableDeclaration",
            "scope": 364,
            "src": "1556:23:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 20,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1556:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "documentation": {
              "id": 22,
              "nodeType": "StructuredDocumentation",
              "src": "1588:43:0",
              "text": "@notice token available for acquisition"
            },
            "functionSelector": "acf2040c",
            "id": 24,
            "mutability": "immutable",
            "name": "enshroudToken",
            "nameLocation": "1662:13:0",
            "nodeType": "VariableDeclaration",
            "scope": 364,
            "src": "1637:38:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 23,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1637:7:0",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "documentation": {
              "id": 25,
              "nodeType": "StructuredDocumentation",
              "src": "1684:45:0",
              "text": "@notice address where proceeds are routed"
            },
            "functionSelector": "61d027b3",
            "id": 27,
            "mutability": "immutable",
            "name": "treasury",
            "nameLocation": "1768:8:0",
            "nodeType": "VariableDeclaration",
            "scope": 364,
            "src": "1735:41:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address_payable",
              "typeString": "address payable"
            },
            "typeName": {
              "id": 26,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1735:15:0",
              "stateMutability": "payable",
              "typeDescriptions": {
                "typeIdentifier": "t_address_payable",
                "typeString": "address payable"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 29,
            "mutability": "mutable",
            "name": "initialised",
            "nameLocation": "1799:11:0",
            "nodeType": "VariableDeclaration",
            "scope": 364,
            "src": "1785:25:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bool",
              "typeString": "bool"
            },
            "typeName": {
              "id": 28,
              "name": "bool",
              "nodeType": "ElementaryTypeName",
              "src": "1785:4:0",
              "typeDescriptions": {
                "typeIdentifier": "t_bool",
                "typeString": "bool"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "documentation": {
              "id": 30,
              "nodeType": "StructuredDocumentation",
              "src": "1819:29:0",
              "text": "@notice counter for tiers"
            },
            "functionSelector": "5368d067",
            "id": 32,
            "mutability": "mutable",
            "name": "tierIndex",
            "nameLocation": "1869:9:0",
            "nodeType": "VariableDeclaration",
            "scope": 364,
            "src": "1854:24:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 31,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1854:7:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "documentation": {
              "id": 33,
              "nodeType": "StructuredDocumentation",
              "src": "1887:101:0",
              "text": "@notice maps tierIndex to how much wei a buyer must send to receive one $ENSHROUD token in return"
            },
            "functionSelector": "dd418ae2",
            "id": 37,
            "mutability": "mutable",
            "name": "rates",
            "nameLocation": "2029:5:0",
            "nodeType": "VariableDeclaration",
            "scope": 364,
            "src": "1994:40:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
              "typeString": "mapping(uint256 => uint256)"
            },
            "typeName": {
              "id": 36,
              "keyName": "",
              "keyNameLocation": "-1:-1:-1",
              "keyType": {
                "id": 34,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "2002:7:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "Mapping",
              "src": "1994:27:0",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                "typeString": "mapping(uint256 => uint256)"
              },
              "valueName": "",
              "valueNameLocation": "-1:-1:-1",
              "valueType": {
                "id": 35,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "2013:7:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "documentation": {
              "id": 38,
              "nodeType": "StructuredDocumentation",
              "src": "2043:108:0",
              "text": "@notice maps tierIndex to how many $ENSHROUD tokens remain in said tier (starting at 1 million per tier)"
            },
            "functionSelector": "e0174ab6",
            "id": 42,
            "mutability": "mutable",
            "name": "tokensInTier",
            "nameLocation": "2192:12:0",
            "nodeType": "VariableDeclaration",
            "scope": 364,
            "src": "2157:47:0",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
              "typeString": "mapping(uint256 => uint256)"
            },
            "typeName": {
              "id": 41,
              "keyName": "",
              "keyNameLocation": "-1:-1:-1",
              "keyType": {
                "id": 39,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "2165:7:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "nodeType": "Mapping",
              "src": "2157:27:0",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                "typeString": "mapping(uint256 => uint256)"
              },
              "valueName": "",
              "valueNameLocation": "-1:-1:-1",
              "valueType": {
                "id": 40,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "2176:7:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "visibility": "public"
          },
          {
            "anonymous": false,
            "eventSelector": "1d5df6530f2915a67196ad4f6db4c6fb6757562f1a6026bdac32b2c74d2e50e2",
            "id": 46,
            "name": "TierSoldOut",
            "nameLocation": "2398:11:0",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 45,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 44,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "tierIndex",
                  "nameLocation": "2418:9:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 46,
                  "src": "2410:17:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 43,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2410:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2409:19:0"
            },
            "src": "2392:37:0"
          },
          {
            "anonymous": false,
            "eventSelector": "347f5f0051b895093800553e6e78ef332849e2552639a4f5ffe66535788ae078",
            "id": 56,
            "name": "TokenPurchase",
            "nameLocation": "2443:13:0",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 55,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 48,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "purchaser",
                  "nameLocation": "2483:9:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 56,
                  "src": "2467:25:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 47,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2467:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 50,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "value",
                  "nameLocation": "2511:5:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 56,
                  "src": "2503:13:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 49,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2503:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 52,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "2535:6:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 56,
                  "src": "2527:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 51,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2527:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 54,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "remainingTokensInTier",
                  "nameLocation": "2560:21:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 56,
                  "src": "2552:29:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 53,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2552:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2456:132:0"
            },
            "src": "2437:152:0"
          },
          {
            "errorSelector": "3c3282e7",
            "id": 58,
            "name": "AlreadyInitialised",
            "nameLocation": "2782:18:0",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 57,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2800:2:0"
            },
            "src": "2776:27:0"
          },
          {
            "errorSelector": "a040b5f1",
            "id": 60,
            "name": "CannotPurchaseAnEntireTier",
            "nameLocation": "2815:26:0",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 59,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2841:2:0"
            },
            "src": "2809:35:0"
          },
          {
            "errorSelector": "95758829",
            "id": 62,
            "name": "NotEnoughWei",
            "nameLocation": "2856:12:0",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 61,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2868:2:0"
            },
            "src": "2850:21:0"
          },
          {
            "errorSelector": "8432e5a2",
            "id": 64,
            "name": "NotInitialised",
            "nameLocation": "2883:14:0",
            "nodeType": "ErrorDefinition",
            "parameters": {
              "id": 63,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2897:2:0"
            },
            "src": "2877:23:0"
          },
          {
            "body": {
              "id": 92,
              "nodeType": "Block",
              "src": "3648:146:0",
              "statements": [
                {
                  "expression": {
                    "id": 76,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 74,
                      "name": "treasury",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 27,
                      "src": "3659:8:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 75,
                      "name": "_treasury",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 69,
                      "src": "3670:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "3659:20:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "id": 77,
                  "nodeType": "ExpressionStatement",
                  "src": "3659:20:0"
                },
                {
                  "expression": {
                    "id": 80,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 78,
                      "name": "enshroudToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24,
                      "src": "3690:13:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 79,
                      "name": "_enshroudToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 71,
                      "src": "3706:14:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "3690:30:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 81,
                  "nodeType": "ExpressionStatement",
                  "src": "3690:30:0"
                },
                {
                  "expression": {
                    "id": 86,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 82,
                        "name": "rates",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 37,
                        "src": "3731:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                          "typeString": "mapping(uint256 => uint256)"
                        }
                      },
                      "id": 84,
                      "indexExpression": {
                        "hexValue": "30",
                        "id": 83,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3737:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "3731:8:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 85,
                      "name": "_initialRate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 67,
                      "src": "3742:12:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3731:23:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 87,
                  "nodeType": "ExpressionStatement",
                  "src": "3731:23:0"
                },
                {
                  "expression": {
                    "id": 90,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 88,
                      "name": "minWei",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21,
                      "src": "3765:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 89,
                      "name": "_initialRate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 67,
                      "src": "3774:12:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3765:21:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 91,
                  "nodeType": "ExpressionStatement",
                  "src": "3765:21:0"
                }
              ]
            },
            "documentation": {
              "id": 65,
              "nodeType": "StructuredDocumentation",
              "src": "3090:425:0",
              "text": "@param _initialRate initial tier rate of wei per $ENSHROUD token inclusive of decimals: for example for .01 ETH per token, pass 1e16\n @param _treasury immutable address where collected funds will be forwarded to\n @param _enshroudToken immutable address of the token available for acquisition\n @dev rates mapping commences at _initialRate; tierIndex starts at 0, which is mapped to the _initialRate"
            },
            "id": 93,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 72,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 67,
                  "mutability": "mutable",
                  "name": "_initialRate",
                  "nameLocation": "3551:12:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 93,
                  "src": "3543:20:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 66,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3543:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 69,
                  "mutability": "mutable",
                  "name": "_treasury",
                  "nameLocation": "3590:9:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 93,
                  "src": "3574:25:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 68,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3574:15:0",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 71,
                  "mutability": "mutable",
                  "name": "_enshroudToken",
                  "nameLocation": "3618:14:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 93,
                  "src": "3610:22:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 70,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3610:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3532:107:0"
            },
            "returnParameters": {
              "id": 73,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3648:0:0"
            },
            "scope": 364,
            "src": "3521:273:0",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 108,
              "nodeType": "Block",
              "src": "4034:191:0",
              "statements": [
                {
                  "condition": {
                    "id": 98,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "4049:12:0",
                    "subExpression": {
                      "id": 97,
                      "name": "initialised",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29,
                      "src": "4050:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 102,
                  "nodeType": "IfStatement",
                  "src": "4045:41:0",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 99,
                        "name": "NotInitialised",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 64,
                        "src": "4070:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                          "typeString": "function () pure returns (error)"
                        }
                      },
                      "id": 100,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4070:16:0",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_error",
                        "typeString": "error"
                      }
                    },
                    "id": 101,
                    "nodeType": "RevertStatement",
                    "src": "4063:23:0"
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 104,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "4206:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 105,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "4210:6:0",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "4206:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 103,
                      "name": "buyTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 318,
                      "src": "4196:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 106,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4196:21:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 107,
                  "nodeType": "ExpressionStatement",
                  "src": "4196:21:0"
                }
              ]
            },
            "documentation": {
              "id": 94,
              "nodeType": "StructuredDocumentation",
              "src": "3802:199:0",
              "text": " @dev calls 'buyTokens()' passing msg.value to ultimately buy $ENSHROUD tokens.\n 'minWei' corresponds to the minimum amount of wei required for 'buyTokens()' to not revert."
            },
            "id": 109,
            "implemented": true,
            "kind": "receive",
            "modifiers": [],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 95,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4014:2:0"
            },
            "returnParameters": {
              "id": 96,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4034:0:0"
            },
            "scope": 364,
            "src": "4007:218:0",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 144,
              "nodeType": "Block",
              "src": "4443:310:0",
              "statements": [
                {
                  "condition": {
                    "id": 113,
                    "name": "initialised",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 29,
                    "src": "4458:11:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 117,
                  "nodeType": "IfStatement",
                  "src": "4454:44:0",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 114,
                        "name": "AlreadyInitialised",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 58,
                        "src": "4478:18:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                          "typeString": "function () pure returns (error)"
                        }
                      },
                      "id": 115,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4478:20:0",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_error",
                        "typeString": "error"
                      }
                    },
                    "id": 116,
                    "nodeType": "RevertStatement",
                    "src": "4471:27:0"
                  }
                },
                {
                  "expression": {
                    "id": 120,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 118,
                      "name": "initialised",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29,
                      "src": "4509:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "74727565",
                      "id": 119,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4523:4:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "4509:18:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 121,
                  "nodeType": "ExpressionStatement",
                  "src": "4509:18:0"
                },
                {
                  "expression": {
                    "id": 128,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 122,
                        "name": "tokensInTier",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42,
                        "src": "4538:12:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                          "typeString": "mapping(uint256 => uint256)"
                        }
                      },
                      "id": 124,
                      "indexExpression": {
                        "hexValue": "30",
                        "id": 123,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4551:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "4538:15:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 127,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "leftExpression": {
                        "hexValue": "316536",
                        "id": 125,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4556:3:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1000000_by_1",
                          "typeString": "int_const 1000000"
                        },
                        "value": "1e6"
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "*",
                      "rightExpression": {
                        "id": 126,
                        "name": "DECIMAL_PLACES",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 19,
                        "src": "4562:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "4556:20:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4538:38:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 129,
                  "nodeType": "ExpressionStatement",
                  "src": "4538:38:0"
                },
                {
                  "id": 143,
                  "nodeType": "UncheckedBlock",
                  "src": "4587:159:0",
                  "statements": [
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "id": 136,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -28,
                                "src": "4675:4:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_Crowdsale_$364",
                                  "typeString": "contract Crowdsale"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_Crowdsale_$364",
                                  "typeString": "contract Crowdsale"
                                }
                              ],
                              "id": 135,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "4667:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 134,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "4667:7:0",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 137,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4667:13:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 140,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "leftExpression": {
                              "hexValue": "316536",
                              "id": 138,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4699:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1000000_by_1",
                                "typeString": "int_const 1000000"
                              },
                              "value": "1e6"
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "*",
                            "rightExpression": {
                              "id": 139,
                              "name": "DECIMAL_PLACES",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19,
                              "src": "4705:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "4699:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "arguments": [
                              {
                                "id": 131,
                                "name": "enshroudToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 24,
                                "src": "4629:13:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 130,
                              "name": "IERC20_Crowdsale",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14,
                              "src": "4612:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_IERC20_Crowdsale_$14_$",
                                "typeString": "type(contract IERC20_Crowdsale)"
                              }
                            },
                            "id": 132,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4612:31:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20_Crowdsale_$14",
                              "typeString": "contract IERC20_Crowdsale"
                            }
                          },
                          "id": 133,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "4644:4:0",
                          "memberName": "mint",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 13,
                          "src": "4612:36:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                            "typeString": "function (address,uint256) external"
                          }
                        },
                        "id": 141,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4612:122:0",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 142,
                      "nodeType": "ExpressionStatement",
                      "src": "4612:122:0"
                    }
                  ]
                }
              ]
            },
            "documentation": {
              "id": 110,
              "nodeType": "StructuredDocumentation",
              "src": "4233:173:0",
              "text": "@notice initialise after a minter passes address(this) to updateMinterStatus() in the Enshroud Token contract\n @dev only callable once due to 'initialised' check"
            },
            "functionSelector": "592e6f59",
            "id": 145,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "initialise",
            "nameLocation": "4421:10:0",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 111,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4431:2:0"
            },
            "returnParameters": {
              "id": 112,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4443:0:0"
            },
            "scope": 364,
            "src": "4412:341:0",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 317,
              "nodeType": "Block",
              "src": "5154:3386:0",
              "statements": [
                {
                  "condition": {
                    "id": 154,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "5169:12:0",
                    "subExpression": {
                      "id": 153,
                      "name": "initialised",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 29,
                      "src": "5170:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 158,
                  "nodeType": "IfStatement",
                  "src": "5165:41:0",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 155,
                        "name": "NotInitialised",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 64,
                        "src": "5190:14:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                          "typeString": "function () pure returns (error)"
                        }
                      },
                      "id": 156,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5190:16:0",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_error",
                        "typeString": "error"
                      }
                    },
                    "id": 157,
                    "nodeType": "RevertStatement",
                    "src": "5183:23:0"
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 162,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 159,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -15,
                        "src": "5221:3:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 160,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "5225:5:0",
                      "memberName": "value",
                      "nodeType": "MemberAccess",
                      "src": "5221:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<=",
                    "rightExpression": {
                      "id": 161,
                      "name": "minWei",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21,
                      "src": "5234:6:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5221:19:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 166,
                  "nodeType": "IfStatement",
                  "src": "5217:46:0",
                  "trueBody": {
                    "errorCall": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "id": 163,
                        "name": "NotEnoughWei",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 62,
                        "src": "5249:12:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                          "typeString": "function () pure returns (error)"
                        }
                      },
                      "id": 164,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "5249:14:0",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_error",
                        "typeString": "error"
                      }
                    },
                    "id": 165,
                    "nodeType": "RevertStatement",
                    "src": "5242:21:0"
                  }
                },
                {
                  "assignments": [
                    168
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 168,
                      "mutability": "mutable",
                      "name": "_purchaseAmount",
                      "nameLocation": "5517:15:0",
                      "nodeType": "VariableDeclaration",
                      "scope": 317,
                      "src": "5509:23:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 167,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5509:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 178,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 177,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "components": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 174,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 169,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "5536:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 170,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "5540:5:0",
                            "memberName": "value",
                            "nodeType": "MemberAccess",
                            "src": "5536:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "/",
                          "rightExpression": {
                            "baseExpression": {
                              "id": 171,
                              "name": "rates",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 37,
                              "src": "5548:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                "typeString": "mapping(uint256 => uint256)"
                              }
                            },
                            "id": 173,
                            "indexExpression": {
                              "id": 172,
                              "name": "tierIndex",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 32,
                              "src": "5554:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "5548:16:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "5536:28:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 175,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "5535:30:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "*",
                    "rightExpression": {
                      "id": 176,
                      "name": "DECIMAL_PLACES",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19,
                      "src": "5572:14:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5535:51:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5509:77:0"
                },
                {
                  "assignments": [
                    180
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 180,
                      "mutability": "mutable",
                      "name": "_tokensInTier",
                      "nameLocation": "5605:13:0",
                      "nodeType": "VariableDeclaration",
                      "scope": 317,
                      "src": "5597:21:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 179,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5597:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 184,
                  "initialValue": {
                    "baseExpression": {
                      "id": 181,
                      "name": "tokensInTier",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 42,
                      "src": "5621:12:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                        "typeString": "mapping(uint256 => uint256)"
                      }
                    },
                    "id": 183,
                    "indexExpression": {
                      "id": 182,
                      "name": "tierIndex",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 32,
                      "src": "5634:9:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "5621:23:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5597:47:0"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 188,
                        "name": "treasury",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 27,
                        "src": "5728:8:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "expression": {
                          "id": 189,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "5738:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 190,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "5742:5:0",
                        "memberName": "value",
                        "nodeType": "MemberAccess",
                        "src": "5738:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 185,
                        "name": "SafeTransferLib",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7894,
                        "src": "5696:15:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_SafeTransferLib_$7894_$",
                          "typeString": "type(library SafeTransferLib)"
                        }
                      },
                      "id": 187,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "5712:15:0",
                      "memberName": "safeTransferETH",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 7855,
                      "src": "5696:31:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 191,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5696:52:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 192,
                  "nodeType": "ExpressionStatement",
                  "src": "5696:52:0"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 195,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 193,
                      "name": "_purchaseAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 168,
                      "src": "5765:15:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "id": 194,
                      "name": "_tokensInTier",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 180,
                      "src": "5783:13:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5765:31:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 258,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 256,
                        "name": "_purchaseAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 168,
                        "src": "7260:15:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "id": 257,
                        "name": "_tokensInTier",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 180,
                        "src": "7279:13:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "7260:32:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": {
                      "id": 314,
                      "nodeType": "Block",
                      "src": "8012:521:0",
                      "statements": [
                        {
                          "expression": {
                            "id": 294,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "baseExpression": {
                                "id": 290,
                                "name": "tokensInTier",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 42,
                                "src": "8084:12:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                  "typeString": "mapping(uint256 => uint256)"
                                }
                              },
                              "id": 292,
                              "indexExpression": {
                                "id": 291,
                                "name": "tierIndex",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 32,
                                "src": "8097:9:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "nodeType": "IndexAccess",
                              "src": "8084:23:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "-=",
                            "rightHandSide": {
                              "id": 293,
                              "name": "_purchaseAmount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 168,
                              "src": "8111:15:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "8084:42:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 295,
                          "nodeType": "ExpressionStatement",
                          "src": "8084:42:0"
                        },
                        {
                          "expression": {
                            "arguments": [
                              {
                                "id": 299,
                                "name": "enshroudToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 24,
                                "src": "8247:13:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "id": 300,
                                "name": "_purchaser",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 148,
                                "src": "8279:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "id": 301,
                                "name": "_purchaseAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 168,
                                "src": "8308:15:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "id": 296,
                                "name": "SafeTransferLib",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7894,
                                "src": "8200:15:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_SafeTransferLib_$7894_$",
                                  "typeString": "type(library SafeTransferLib)"
                                }
                              },
                              "id": 298,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "8216:12:0",
                              "memberName": "safeTransfer",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 7879,
                              "src": "8200:28:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                "typeString": "function (address,address,uint256)"
                              }
                            },
                            "id": 302,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8200:138:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 303,
                          "nodeType": "ExpressionStatement",
                          "src": "8200:138:0"
                        },
                        {
                          "eventCall": {
                            "arguments": [
                              {
                                "id": 305,
                                "name": "_purchaser",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 148,
                                "src": "8392:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "expression": {
                                  "id": 306,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "8421:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 307,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "8425:5:0",
                                "memberName": "value",
                                "nodeType": "MemberAccess",
                                "src": "8421:9:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "id": 308,
                                "name": "_purchaseAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 168,
                                "src": "8449:15:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "baseExpression": {
                                  "id": 309,
                                  "name": "tokensInTier",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 42,
                                  "src": "8483:12:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                    "typeString": "mapping(uint256 => uint256)"
                                  }
                                },
                                "id": 311,
                                "indexExpression": {
                                  "id": 310,
                                  "name": "tierIndex",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 32,
                                  "src": "8496:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "8483:23:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 304,
                              "name": "TokenPurchase",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 56,
                              "src": "8360:13:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                                "typeString": "function (address,uint256,uint256,uint256)"
                              }
                            },
                            "id": 312,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8360:161:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 313,
                          "nodeType": "EmitStatement",
                          "src": "8355:166:0"
                        }
                      ]
                    },
                    "id": 315,
                    "nodeType": "IfStatement",
                    "src": "7256:1277:0",
                    "trueBody": {
                      "id": 289,
                      "nodeType": "Block",
                      "src": "7294:712:0",
                      "statements": [
                        {
                          "expression": {
                            "id": 262,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "delete",
                            "prefix": true,
                            "src": "7494:30:0",
                            "subExpression": {
                              "baseExpression": {
                                "id": 259,
                                "name": "tokensInTier",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 42,
                                "src": "7501:12:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                  "typeString": "mapping(uint256 => uint256)"
                                }
                              },
                              "id": 261,
                              "indexExpression": {
                                "id": 260,
                                "name": "tierIndex",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 32,
                                "src": "7514:9:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": true,
                              "nodeType": "IndexAccess",
                              "src": "7501:23:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 263,
                          "nodeType": "ExpressionStatement",
                          "src": "7494:30:0"
                        },
                        {
                          "expression": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 264,
                              "name": "_incrementTier",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 363,
                              "src": "7541:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                                "typeString": "function ()"
                              }
                            },
                            "id": 265,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7541:16:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 266,
                          "nodeType": "ExpressionStatement",
                          "src": "7541:16:0"
                        },
                        {
                          "expression": {
                            "arguments": [
                              {
                                "id": 270,
                                "name": "enshroudToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 24,
                                "src": "7678:13:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "id": 271,
                                "name": "_purchaser",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 148,
                                "src": "7710:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "id": 272,
                                "name": "_purchaseAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 168,
                                "src": "7739:15:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "id": 267,
                                "name": "SafeTransferLib",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 7894,
                                "src": "7631:15:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_SafeTransferLib_$7894_$",
                                  "typeString": "type(library SafeTransferLib)"
                                }
                              },
                              "id": 269,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "7647:12:0",
                              "memberName": "safeTransfer",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 7879,
                              "src": "7631:28:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                "typeString": "function (address,address,uint256)"
                              }
                            },
                            "id": 273,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7631:138:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 274,
                          "nodeType": "ExpressionStatement",
                          "src": "7631:138:0"
                        },
                        {
                          "eventCall": {
                            "arguments": [
                              {
                                "id": 276,
                                "name": "tierIndex",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 32,
                                "src": "7803:9:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 275,
                              "name": "TierSoldOut",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 46,
                              "src": "7791:11:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                                "typeString": "function (uint256)"
                              }
                            },
                            "id": 277,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7791:22:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 278,
                          "nodeType": "EmitStatement",
                          "src": "7786:27:0"
                        },
                        {
                          "eventCall": {
                            "arguments": [
                              {
                                "id": 280,
                                "name": "_purchaser",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 148,
                                "src": "7865:10:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              {
                                "expression": {
                                  "id": 281,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -15,
                                  "src": "7894:3:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 282,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "7898:5:0",
                                "memberName": "value",
                                "nodeType": "MemberAccess",
                                "src": "7894:9:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "id": 283,
                                "name": "_purchaseAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 168,
                                "src": "7922:15:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              {
                                "baseExpression": {
                                  "id": 284,
                                  "name": "tokensInTier",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 42,
                                  "src": "7956:12:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                    "typeString": "mapping(uint256 => uint256)"
                                  }
                                },
                                "id": 286,
                                "indexExpression": {
                                  "id": 285,
                                  "name": "tierIndex",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 32,
                                  "src": "7969:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "7956:23:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 279,
                              "name": "TokenPurchase",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 56,
                              "src": "7833:13:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                                "typeString": "function (address,uint256,uint256,uint256)"
                              }
                            },
                            "id": 287,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7833:161:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 288,
                          "nodeType": "EmitStatement",
                          "src": "7828:166:0"
                        }
                      ]
                    }
                  },
                  "id": 316,
                  "nodeType": "IfStatement",
                  "src": "5761:2772:0",
                  "trueBody": {
                    "id": 255,
                    "nodeType": "Block",
                    "src": "5798:1452:0",
                    "statements": [
                      {
                        "assignments": [
                          197
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 197,
                            "mutability": "mutable",
                            "name": "_tokensInNextTier",
                            "nameLocation": "6051:17:0",
                            "nodeType": "VariableDeclaration",
                            "scope": 255,
                            "src": "6043:25:0",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 196,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "6043:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 204,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 203,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "components": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 200,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 198,
                                  "name": "_purchaseAmount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 168,
                                  "src": "6072:15:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "id": 199,
                                  "name": "_tokensInTier",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 180,
                                  "src": "6090:13:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "6072:31:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 201,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "6071:33:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "/",
                          "rightExpression": {
                            "hexValue": "32",
                            "id": 202,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6107:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_2_by_1",
                              "typeString": "int_const 2"
                            },
                            "value": "2"
                          },
                          "src": "6071:37:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "6043:65:0"
                      },
                      {
                        "expression": {
                          "id": 208,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "6160:30:0",
                          "subExpression": {
                            "baseExpression": {
                              "id": 205,
                              "name": "tokensInTier",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 42,
                              "src": "6167:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                "typeString": "mapping(uint256 => uint256)"
                              }
                            },
                            "id": 207,
                            "indexExpression": {
                              "id": 206,
                              "name": "tierIndex",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 32,
                              "src": "6180:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "6167:23:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 209,
                        "nodeType": "ExpressionStatement",
                        "src": "6160:30:0"
                      },
                      {
                        "expression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 210,
                            "name": "_incrementTier",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 363,
                            "src": "6223:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                              "typeString": "function ()"
                            }
                          },
                          "id": 211,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6223:16:0",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 212,
                        "nodeType": "ExpressionStatement",
                        "src": "6223:16:0"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 217,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 213,
                            "name": "_tokensInNextTier",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 197,
                            "src": "6433:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">=",
                          "rightExpression": {
                            "baseExpression": {
                              "id": 214,
                              "name": "tokensInTier",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 42,
                              "src": "6454:12:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                "typeString": "mapping(uint256 => uint256)"
                              }
                            },
                            "id": 216,
                            "indexExpression": {
                              "id": 215,
                              "name": "tierIndex",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 32,
                              "src": "6467:9:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "6454:23:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "6433:44:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 221,
                        "nodeType": "IfStatement",
                        "src": "6429:102:0",
                        "trueBody": {
                          "errorCall": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 218,
                              "name": "CannotPurchaseAnEntireTier",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 60,
                              "src": "6503:26:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_error_pure$__$returns$_t_error_$",
                                "typeString": "function () pure returns (error)"
                              }
                            },
                            "id": 219,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6503:28:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_error",
                              "typeString": "error"
                            }
                          },
                          "id": 220,
                          "nodeType": "RevertStatement",
                          "src": "6496:35:0"
                        }
                      },
                      {
                        "id": 254,
                        "nodeType": "UncheckedBlock",
                        "src": "6548:691:0",
                        "statements": [
                          {
                            "expression": {
                              "id": 226,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "baseExpression": {
                                  "id": 222,
                                  "name": "tokensInTier",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 42,
                                  "src": "6577:12:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                    "typeString": "mapping(uint256 => uint256)"
                                  }
                                },
                                "id": 224,
                                "indexExpression": {
                                  "id": 223,
                                  "name": "tierIndex",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 32,
                                  "src": "6590:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": true,
                                "nodeType": "IndexAccess",
                                "src": "6577:23:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "-=",
                              "rightHandSide": {
                                "id": 225,
                                "name": "_tokensInNextTier",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 197,
                                "src": "6604:17:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "6577:44:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 227,
                            "nodeType": "ExpressionStatement",
                            "src": "6577:44:0"
                          },
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 231,
                                  "name": "enshroudToken",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 24,
                                  "src": "6803:13:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 232,
                                  "name": "_purchaser",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 148,
                                  "src": "6839:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 235,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 233,
                                    "name": "_tokensInTier",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 180,
                                    "src": "6872:13:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "+",
                                  "rightExpression": {
                                    "id": 234,
                                    "name": "_tokensInNextTier",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 197,
                                    "src": "6888:17:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "6872:33:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "id": 228,
                                  "name": "SafeTransferLib",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 7894,
                                  "src": "6752:15:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_contract$_SafeTransferLib_$7894_$",
                                    "typeString": "type(library SafeTransferLib)"
                                  }
                                },
                                "id": 230,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "6768:12:0",
                                "memberName": "safeTransfer",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 7879,
                                "src": "6752:28:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                  "typeString": "function (address,address,uint256)"
                                }
                              },
                              "id": 236,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6752:172:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 237,
                            "nodeType": "ExpressionStatement",
                            "src": "6752:172:0"
                          },
                          {
                            "eventCall": {
                              "arguments": [
                                {
                                  "id": 239,
                                  "name": "tierIndex",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 32,
                                  "src": "6962:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 238,
                                "name": "TierSoldOut",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 46,
                                "src": "6950:11:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                                  "typeString": "function (uint256)"
                                }
                              },
                              "id": 240,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "6950:22:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 241,
                            "nodeType": "EmitStatement",
                            "src": "6945:27:0"
                          },
                          {
                            "eventCall": {
                              "arguments": [
                                {
                                  "id": 243,
                                  "name": "_purchaser",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 148,
                                  "src": "7060:10:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "expression": {
                                    "id": 244,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": -15,
                                    "src": "7093:3:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 245,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "7097:5:0",
                                  "memberName": "value",
                                  "nodeType": "MemberAccess",
                                  "src": "7093:9:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 248,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 246,
                                    "name": "_tokensInTier",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 180,
                                    "src": "7125:13:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "+",
                                  "rightExpression": {
                                    "id": 247,
                                    "name": "_tokensInNextTier",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 197,
                                    "src": "7141:17:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "7125:33:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "baseExpression": {
                                    "id": 249,
                                    "name": "tokensInTier",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 42,
                                    "src": "7181:12:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                      "typeString": "mapping(uint256 => uint256)"
                                    }
                                  },
                                  "id": 251,
                                  "indexExpression": {
                                    "id": 250,
                                    "name": "tierIndex",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 32,
                                    "src": "7194:9:0",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "7181:23:0",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 242,
                                "name": "TokenPurchase",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 56,
                                "src": "7024:13:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                                  "typeString": "function (address,uint256,uint256,uint256)"
                                }
                              },
                              "id": 252,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "7024:199:0",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 253,
                            "nodeType": "EmitStatement",
                            "src": "7019:204:0"
                          }
                        ]
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 146,
              "nodeType": "StructuredDocumentation",
              "src": "4761:320:0",
              "text": "@notice to purchase $ENSHROUD tokens: purchaser pays by sending ETH as msg.value calling this function or directly to this contract address to be converted in receive()\n @param _purchaser address of purchaser (msg.sender if calling this function directly, or address which sent ETH to the receive() function)"
            },
            "functionSelector": "ec8ac4d8",
            "id": 318,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 151,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 150,
                  "name": "nonReentrant",
                  "nameLocations": [
                    "5141:12:0"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 7829,
                  "src": "5141:12:0"
                },
                "nodeType": "ModifierInvocation",
                "src": "5141:12:0"
              }
            ],
            "name": "buyTokens",
            "nameLocation": "5096:9:0",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 149,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 148,
                  "mutability": "mutable",
                  "name": "_purchaser",
                  "nameLocation": "5114:10:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 318,
                  "src": "5106:18:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 147,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5106:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5105:20:0"
            },
            "returnParameters": {
              "id": 152,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5154:0:0"
            },
            "scope": 364,
            "src": "5087:3453:0",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 362,
              "nodeType": "Block",
              "src": "8583:784:0",
              "statements": [
                {
                  "id": 361,
                  "nodeType": "UncheckedBlock",
                  "src": "8594:766:0",
                  "statements": [
                    {
                      "expression": {
                        "id": 322,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "++",
                        "prefix": true,
                        "src": "8669:11:0",
                        "subExpression": {
                          "id": 321,
                          "name": "tierIndex",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 32,
                          "src": "8671:9:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 323,
                      "nodeType": "ExpressionStatement",
                      "src": "8669:11:0"
                    },
                    {
                      "expression": {
                        "id": 334,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "baseExpression": {
                            "id": 324,
                            "name": "rates",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 37,
                            "src": "8860:5:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                              "typeString": "mapping(uint256 => uint256)"
                            }
                          },
                          "id": 326,
                          "indexExpression": {
                            "id": 325,
                            "name": "tierIndex",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 32,
                            "src": "8866:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "nodeType": "IndexAccess",
                          "src": "8860:16:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 333,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "baseExpression": {
                              "id": 327,
                              "name": "rates",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 37,
                              "src": "8879:5:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                                "typeString": "mapping(uint256 => uint256)"
                              }
                            },
                            "id": 331,
                            "indexExpression": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 330,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 328,
                                "name": "tierIndex",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 32,
                                "src": "8885:9:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "-",
                              "rightExpression": {
                                "hexValue": "31",
                                "id": 329,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "8897:1:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "src": "8885:13:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "8879:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "*",
                          "rightExpression": {
                            "hexValue": "32",
                            "id": 332,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "8902:1:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_2_by_1",
                              "typeString": "int_const 2"
                            },
                            "value": "2"
                          },
                          "src": "8879:24:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "8860:43:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 335,
                      "nodeType": "ExpressionStatement",
                      "src": "8860:43:0"
                    },
                    {
                      "expression": {
                        "id": 338,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "id": 336,
                          "name": "minWei",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21,
                          "src": "8942:6:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "*=",
                        "rightHandSide": {
                          "hexValue": "32",
                          "id": 337,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "8952:1:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_2_by_1",
                            "typeString": "int_const 2"
                          },
                          "value": "2"
                        },
                        "src": "8942:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 339,
                      "nodeType": "ExpressionStatement",
                      "src": "8942:11:0"
                    },
                    {
                      "expression": {
                        "id": 346,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "baseExpression": {
                            "id": 340,
                            "name": "tokensInTier",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 42,
                            "src": "9049:12:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$",
                              "typeString": "mapping(uint256 => uint256)"
                            }
                          },
                          "id": 342,
                          "indexExpression": {
                            "id": 341,
                            "name": "tierIndex",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 32,
                            "src": "9062:9:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "nodeType": "IndexAccess",
                          "src": "9049:23:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 345,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "leftExpression": {
                            "hexValue": "316536",
                            "id": 343,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "9075:3:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1000000_by_1",
                              "typeString": "int_const 1000000"
                            },
                            "value": "1e6"
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "*",
                          "rightExpression": {
                            "id": 344,
                            "name": "DECIMAL_PLACES",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 19,
                            "src": "9081:14:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "9075:20:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "9049:46:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 347,
                      "nodeType": "ExpressionStatement",
                      "src": "9049:46:0"
                    },
                    {
                      "expression": {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "id": 354,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -28,
                                "src": "9289:4:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_Crowdsale_$364",
                                  "typeString": "contract Crowdsale"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_Crowdsale_$364",
                                  "typeString": "contract Crowdsale"
                                }
                              ],
                              "id": 353,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "9281:7:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 352,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "9281:7:0",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 355,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "9281:13:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 358,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "leftExpression": {
                              "hexValue": "316536",
                              "id": 356,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "9313:3:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1000000_by_1",
                                "typeString": "int_const 1000000"
                              },
                              "value": "1e6"
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "*",
                            "rightExpression": {
                              "id": 357,
                              "name": "DECIMAL_PLACES",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 19,
                              "src": "9319:14:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "9313:20:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "arguments": [
                              {
                                "id": 349,
                                "name": "enshroudToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 24,
                                "src": "9243:13:0",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 348,
                              "name": "IERC20_Crowdsale",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14,
                              "src": "9226:16:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_IERC20_Crowdsale_$14_$",
                                "typeString": "type(contract IERC20_Crowdsale)"
                              }
                            },
                            "id": 350,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "9226:31:0",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IERC20_Crowdsale_$14",
                              "typeString": "contract IERC20_Crowdsale"
                            }
                          },
                          "id": 351,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "9258:4:0",
                          "memberName": "mint",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 13,
                          "src": "9226:36:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                            "typeString": "function (address,uint256) external"
                          }
                        },
                        "id": 359,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9226:122:0",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_tuple$__$",
                          "typeString": "tuple()"
                        }
                      },
                      "id": 360,
                      "nodeType": "ExpressionStatement",
                      "src": "9226:122:0"
                    }
                  ]
                }
              ]
            },
            "id": 363,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_incrementTier",
            "nameLocation": "8557:14:0",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 319,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8571:2:0"
            },
            "returnParameters": {
              "id": 320,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8583:0:0"
            },
            "scope": 364,
            "src": "8548:819:0",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 365,
        "src": "1457:7913:0",
        "usedErrors": [
          58,
          60,
          62,
          64,
          7807
        ],
        "usedEvents": [
          46,
          56
        ]
      }
    ],
    "src": "33:9339:0"
  },
  "compiler": {
    "name": "solc",
    "version": "0.8.28+commit.7893614a.Linux.g++"
  },
  "networks": {},
  "schemaVersion": "3.4.16",
  "updatedAt": "2025-04-29T22:54:48.303Z",
  "devdoc": {
    "kind": "dev",
    "methods": {},
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {
      "mint(address,uint256)": {
        "notice": "to mint $ENSHROUD tokens to this address automatically with each tier increment"
      }
    },
    "version": 1
  }
}