{"file_path":"src/WLD.sol","creation_status":"success","source_code":"// SPDX-License-Identifier: MIT\npragma solidity ^0.8.19;\n\nimport {Ownable} from \"openzeppelin/access/Ownable.sol\";\nimport {Ownable2Step} from \"openzeppelin/access/Ownable2Step.sol\";\nimport {ERC20} from \"openzeppelin/token/ERC20/ERC20.sol\";\n\n/// @title WLD token\n/// @notice Contract for Worldcoin's ERC20 WLD token.\n/// \n/// It updates from the previous token contract, which is now deprecated. At\n/// deployment all existing balances are reinstated.\n/// \n/// After deployment, the owner can do a one-time mint of new tokens up to the\n/// `INITIAL_SUPPLY_CAP` of 10 billion.\n/// \n/// After `inflationUnlockTime` the owner can set the minter address, which can\n/// mint new tokens up to the inflation cap. The inflation cap is fixed\n/// percentage per period. From this it follows a maximum inflation rate per\n/// year. Whether or not to allow inflation can be goverened by the owner through\n/// the minter address.\n///\n/// @author Worldcoin\ncontract WLD is ERC20, Ownable2Step {\n    /////////////////////////////////////////////////////////////////////////\n    ///                           PARAMETERS                              ///\n    /////////////////////////////////////////////////////////////////////////\n\n    uint256 constant public INITIAL_SUPPLY_CAP = 10_000_000_000 * (10**18);\n    uint256 constant public WAD_ONE = 10**18;\n\n    /// @notice Has the initial mint been done?\n    bool public initialMintDone;\n\n    /// @notice The address of the inflation minter\n    address public minter;\n\n    /// @notice Inflation parameters, formula in _mint @dev description\n    uint256 immutable public inflationUnlockTime;\n    uint256 immutable public inflationCapPeriod;\n    uint256 immutable public inflationCapWad;\n\n    /// @notice Inflation cap state variables\n    uint256 public currentPeriodEnd;\n    uint256 public currentPeriodSupplyCap;\n\n    /////////////////////////////////////////////////////////////////////////\n    ///                             EVENTS                                ///\n    /////////////////////////////////////////////////////////////////////////\n\n    /// @notice Emitted when constructing the contract\n    event TokenUpdated(\n        address newToken,\n        string name,\n        string symbol,\n        address[] existingHolders,\n        uint256[] existingsAmounts,\n        uint256 inflationCapPeriod,\n        uint256 inflationCapWad,\n        uint256 inflationLockPeriod\n    );\n\n    /// @notice Emitted when minting tokens. Can be emited only once.\n    event TokensMinted(\n        address minter,\n        address[] newHolders,\n        uint256[] newAmounts\n    );\n\n    /// @notice Emitted when inflation tokens are minted, after the initial mint.\n    event InflationTokensMinted(\n        address minter,\n        address to,\n        uint256 amount\n    );\n\n    /////////////////////////////////////////////////////////////////////////\n    ///                           CONSTRUCTOR                             ///\n    /////////////////////////////////////////////////////////////////////////\n\n    /// @notice Deploy a new token contract that replaces an existing one.\n    constructor(\n        address[] memory existingHolders,\n        uint256[] memory existingAmounts,\n        string memory name_,\n        string memory symbol_,\n        uint256 inflationCapPeriod_,\n        uint256 inflationCapWad_,\n        uint256 inflationLockPeriod_\n    ) ERC20(name_, symbol_) Ownable(msg.sender) {\n        // Validate input.\n        require(existingAmounts.length == existingHolders.length);\n        require(inflationCapPeriod_ != 0);\n\n        // Allow one initial mint\n        initialMintDone = false;\n\n        // Set the inflation cap parameters\n        minter = address(0);\n        inflationCapPeriod = inflationCapPeriod_;\n        inflationCapWad = inflationCapWad_;\n        inflationUnlockTime = inflationLockPeriod_ + block.timestamp;\n\n        // Make sure a new inflation period starts on first call to mint.\n        currentPeriodEnd = 0;\n        currentPeriodSupplyCap = 0;\n\n        // Reinstate balances\n        for (uint256 i = 0; i < existingHolders.length; i++) {\n            _update(address(0), existingHolders[i], existingAmounts[i]);\n        }\n\n        // Make sure the initial supply cap is maintained.\n        require(totalSupply() <= INITIAL_SUPPLY_CAP);\n\n        // Emit event.\n        emit TokenUpdated(\n            address(this),\n            name_,\n            symbol_,\n            existingHolders,\n            existingAmounts,\n            inflationCapPeriod_,\n            inflationCapWad_,\n            inflationLockPeriod_\n        );\n    }\n\n    /////////////////////////////////////////////////////////////////////////\n    ///                           OWNER ACTIONS                           ///\n    /////////////////////////////////////////////////////////////////////////\n\n    /// @notice Mint new tokens.\n    function mintOnce(\n        address[] memory newHolders,\n        uint256[] memory newAmounts\n    ) external onlyOwner {\n        // This must be the only time we allow this.\n        require(initialMintDone == false);\n\n        // Validate input.\n        require(newHolders.length == newAmounts.length);\n\n        // Mark initial mint as done.\n        initialMintDone = true;\n\n        // Mint tokens.\n        for (uint256 i = 0; i < newHolders.length; i++) {\n            _mint(newHolders[i], newAmounts[i]);\n        }\n\n        // Make sure the initial supply cap is maintained.\n        require(totalSupply() <= INITIAL_SUPPLY_CAP);\n\n        emit TokensMinted(\n            msg.sender,\n            newHolders,\n            newAmounts\n        );\n    }\n\n    /// @notice Updates minter\n    /// @dev onlyOwner\n    /// @param minter_ new Minter address\n    function setMinter(address minter_) external onlyOwner {\n        minter = minter_;\n    }\n\n    /// @notice Prevents the owner from renouncing ownership\n    /// @dev onlyOwner\n    function renounceOwnership() public view override onlyOwner {\n        revert();\n    }\n\n    ///////////////////////////////////////////////////////////////////\n    ///                        MINTER ACTIONS                       ///\n    ///////////////////////////////////////////////////////////////////\n\n    /// @notice Mints new tokens and assigns them to the target address.\n    /// @dev This function performs inflation checks. Their semantics is as follows:\n    ///     * It is impossible to mint any tokens during the first `inflationLockPeriod_` seconds.\n    //        The end of the lock period is stored in `inflationUnlockTime`.\n    ///     * T inflation cap is in effect.\n    ///       The inflation cap is enforced as follows:\n    ///       1. If the current time is after the end of the current inflation period,\n    ///          it is possible to raise the supply up to (current total supply) * (1 + inflation cap)\n    ///          between now and (now + inflation period length), without any additional constraints;\n    ///       2. If the current time is before the end of the current inflation period,\n    ///          that period's supply is still controlled.\n    /// NB: The logic outlined here means that it is possible for period over period inflation\n    ///     to reach up to (1 + inflation cap)^2 - 1, for some choices of period boundaries.\n    ///     The actual guarantees of this system are:\n    ///     1. For any timestamp t0 and a natural number k, inflation measured between t0 and\n    ///        t0 + k * inflation period does not exceed (1 + inflation cap)^(k + 1) - 1. In other words,\n    ///        there is at most \"one too many\" inflation periods over any period of time.\n    ///     2. For any timestamp t there exists a period tc < inflation period,\n    ///        such that inflation measured between (t + tc) and (t + tc + inflation period)\n    ///        does not exceed the inflation cap. In other words, period over period inflation is\n    ///        bounded by the inflation cap at least for some amount of time during each period.\n    function mintInflation(address to, uint256 amount) external {\n        // Validate input\n        require(to != address(0));\n        require(amount != 0);\n\n        // Must be minter\n        require(msg.sender == minter);\n\n        // Requires that the current time is after the mint lock-in period\n        require(block.timestamp >= inflationUnlockTime);\n\n        // Stars a new inflation period if the previous one ended\n        if (block.timestamp > currentPeriodEnd) {\n            // Update inflation period end\n            currentPeriodEnd = block.timestamp + inflationCapPeriod;\n\n            // Compute maximum supply for this period\n            uint256 initialSupply = totalSupply();\n            uint256 mintable = (initialSupply * inflationCapWad) / WAD_ONE;\n            currentPeriodSupplyCap = initialSupply + mintable;\n        }\n\n        // Mint inflation tokens\n        _mint(to, amount);\n\n        // Check amount against inflation cap for this period\n        require(totalSupply() <= currentPeriodSupplyCap);\n\n        // Emit event\n        emit InflationTokensMinted(msg.sender, to, amount);\n    }\n}\n","deployed_bytecode":"0x608060405234801561001057600080fd5b50600436106101c35760003560e01c8063715018a6116100f9578063a9059cbb11610097578063dd62ed3e11610071578063dd62ed3e146103d8578063e30c3978146103eb578063f2fde38b146103fc578063fca3b5aa1461040f57600080fd5b8063a9059cbb146103a3578063be5ddb99146103b6578063cee8d013146103c957600080fd5b80638da5cb5b116100d35780638da5cb5b1461036e57806395d89b411461037f57806395dba44c14610387578063a457c2d71461039057600080fd5b8063715018a61461034b57806379ba509714610353578063883c3a631461035b57600080fd5b8063313ce5671161016657806341e65e0b1161014057806341e65e0b146102cb57806358794456146102f25780635915b17e146102fb57806370a082311461032257600080fd5b8063313ce5671461029557806336c545ca146102a457806339509351146102b857600080fd5b8063085624ed116101a2578063085624ed14610242578063095ea7b31461025757806318160ddd1461027a57806323b872dd1461028257600080fd5b806216d010146101c857806306fdde03146102025780630754617214610217575b600080fd5b6101ef7f000000000000000000000000000000000000000000000000000469206254fc2481565b6040519081526020015b60405180910390f35b61020a610422565b6040516101f99190610e32565b60075461022a906001600160a01b031681565b6040516001600160a01b0390911681526020016101f9565b610255610250366004610f72565b6104b4565b005b61026a610265366004611032565b6105af565b60405190151581526020016101f9565b6002546101ef565b61026a61029036600461105c565b6105c9565b604051601281526020016101f9565b60065461026a90600160a01b900460ff1681565b61026a6102c6366004611032565b6105ed565b6101ef7f00000000000000000000000000000000000000000000000000000000002819a081565b6101ef60085481565b6101ef7f0000000000000000000000000000000000000000000000000000000080f541c181565b6101ef610330366004611098565b6001600160a01b031660009081526020819052604090205490565b61025561060f565b610255610617565b6101ef6b204fce5e3e2502611000000081565b6005546001600160a01b031661022a565b61020a610696565b6101ef60095481565b61026a61039e366004611032565b6106a5565b61026a6103b1366004611032565b610720565b6102556103c4366004611032565b61072e565b6101ef670de0b6b3a764000081565b6101ef6103e63660046110ba565b610888565b6006546001600160a01b031661022a565b61025561040a366004611098565b6108b3565b61025561041d366004611098565b610924565b606060038054610431906110ed565b80601f016020809104026020016040519081016040528092919081815260200182805461045d906110ed565b80156104aa5780601f1061047f576101008083540402835291602001916104aa565b820191906000526020600020905b81548152906001019060200180831161048d57829003601f168201915b5050505050905090565b6104bc61094e565b600654600160a01b900460ff16156104d357600080fd5b80518251146104e157600080fd5b6006805460ff60a01b1916600160a01b17905560005b825181101561054e5761053c83828151811061051557610515611127565b602002602001015183838151811061052f5761052f611127565b60200260200101516109aa565b8061054681611153565b9150506104f7565b506b204fce5e3e2502611000000061056560025490565b111561057057600080fd5b7f0436dcb8b7b3be78d785be7ea8f04f241ce5d275057aea7f7fd4b6e4dfda3aa43383836040516105a39392919061116c565b60405180910390a15050565b6000336105bd818585610a10565b60019150505b92915050565b6000336105d7858285610b35565b6105e2858585610baf565b506001949350505050565b6000336105bd8185856106008383610888565b61060a9190611200565b610a10565b6101c361094e565b60065433906001600160a01b0316811461068a5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b60648201526084015b60405180910390fd5b61069381610c85565b50565b606060048054610431906110ed565b600033816106b38286610888565b9050838110156107135760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610681565b6105e28286868403610a10565b6000336105bd818585610baf565b6001600160a01b03821661074157600080fd5b8060000361074e57600080fd5b6007546001600160a01b0316331461076557600080fd5b7f0000000000000000000000000000000000000000000000000000000080f541c142101561079257600080fd5b600854421115610827576107c67f00000000000000000000000000000000000000000000000000000000002819a042611200565b60085560006107d460025490565b90506000670de0b6b3a764000061080b7f000000000000000000000000000000000000000000000000000469206254fc2484611213565b610815919061122a565b90506108218183611200565b60095550505b61083182826109aa565b600954600254111561084257600080fd5b604080513381526001600160a01b03841660208201529081018290527f0188e46dffface414ae6c071b6f739093e36d85d0f016e3d159dffe68c1b08cf906060016105a3565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6108bb61094e565b600680546001600160a01b0383166001600160a01b031990911681179091556108ec6005546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b61092c61094e565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146109a85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610681565b565b6001600160a01b038216610a005760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610681565b610a0c60008383610c9e565b5050565b6001600160a01b038316610a725760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610681565b6001600160a01b038216610ad35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610681565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6000610b418484610888565b90506000198114610ba95781811015610b9c5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610681565b610ba98484848403610a10565b50505050565b6001600160a01b038316610c135760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610681565b6001600160a01b038216610c755760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610681565b610c80838383610c9e565b505050565b600680546001600160a01b031916905561069381610de0565b6001600160a01b038316610cc9578060026000828254610cbe9190611200565b90915550610d609050565b6001600160a01b03831660009081526020819052604090205481811015610d415760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610681565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216610d7c57600280548290039055610d9b565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610b2891815260200190565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208083528351808285015260005b81811015610e5f57858101830151858201604001528201610e43565b506000604082860101526040601f19601f8301168501019250505092915050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610ebf57610ebf610e80565b604052919050565b600067ffffffffffffffff821115610ee157610ee1610e80565b5060051b60200190565b80356001600160a01b0381168114610f0257600080fd5b919050565b600082601f830112610f1857600080fd5b81356020610f2d610f2883610ec7565b610e96565b82815260059290921b84018101918181019086841115610f4c57600080fd5b8286015b84811015610f675780358352918301918301610f50565b509695505050505050565b60008060408385031215610f8557600080fd5b823567ffffffffffffffff80821115610f9d57600080fd5b818501915085601f830112610fb157600080fd5b81356020610fc1610f2883610ec7565b82815260059290921b84018101918181019089841115610fe057600080fd5b948201945b8386101561100557610ff686610eeb565b82529482019490820190610fe5565b9650508601359250508082111561101b57600080fd5b5061102885828601610f07565b9150509250929050565b6000806040838503121561104557600080fd5b61104e83610eeb565b946020939093013593505050565b60008060006060848603121561107157600080fd5b61107a84610eeb565b925061108860208501610eeb565b9150604084013590509250925092565b6000602082840312156110aa57600080fd5b6110b382610eeb565b9392505050565b600080604083850312156110cd57600080fd5b6110d683610eeb565b91506110e460208401610eeb565b90509250929050565b600181811c9082168061110157607f821691505b60208210810361112157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016111655761116561113d565b5060010190565b6001600160a01b038481168252606060208084018290528551918401829052600092868201929091906080860190855b818110156111ba57855185168352948301949183019160010161119c565b5050858103604087015286518082529082019350915080860160005b838110156111f2578151855293820193908201906001016111d6565b509298975050505050505050565b808201808211156105c3576105c361113d565b80820281158282048414176105c3576105c361113d565b60008261124757634e487b7160e01b600052601260045260246000fd5b50049056fea26469706673582212208f25c13949d038c74acf5c2d39f639b1fa265ad4e1765ff96ee0c4f504ba27a864736f6c63430008130033","optimization_enabled":true,"verified_twin_address_hash":null,"is_verified":true,"compiler_settings":{"evmVersion":"paris","libraries":{},"metadata":{"bytecodeHash":"ipfs"},"optimizer":{"enabled":true,"runs":200},"remappings":[":ds-test/=lib/forge-std/lib/ds-test/src/",":forge-std/=lib/forge-std/src/",":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/",":openzeppelin-contracts/=lib/openzeppelin-contracts/",":openzeppelin-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/",":openzeppelin/=lib/openzeppelin-contracts/contracts/"]},"optimization_runs":200,"sourcify_repo_url":"https://repo.sourcify.dev/contracts/full_match/1/0x163f8C2467924be0ae7B5347228CABF260318753/","decoded_constructor_args":[[["0x8155EF75b9CCaFF88a6d247B2BeAF30903397f4B","0xFB7F100ED6793FCD63E6E9F201bE9Aa567B2C9cC","0xFB7F100ED6793FCD63E6E9F201bE9Aa567B2C9cC","0xFB7F100ED6793FCD63E6E9F201bE9Aa567B2C9cC","0xFB7F100ED6793FCD63E6E9F201bE9Aa567B2C9cC","0xFB7F100ED6793FCD63E6E9F201bE9Aa567B2C9cC","0xFB7F100ED6793FCD63E6E9F201bE9Aa567B2C9cC","0xFB7F100ED6793FCD63E6E9F201bE9Aa567B2C9cC","0xFB7F100ED6793FCD63E6E9F201bE9Aa567B2C9cC","0xFB7F100ED6793FCD63E6E9F201bE9Aa567B2C9cC","0xFB7F100ED6793FCD63E6E9F201bE9Aa567B2C9cC","0xFB7F100ED6793FCD63E6E9F201bE9Aa567B2C9cC","0xFB7F100ED6793FCD63E6E9F201bE9Aa567B2C9cC","0x59d9AB9C68ef7357de1B96DE91ce7c8f14BB8FE8","0xf8e24ac99420f6576E136B570Fd879cA6356721E","0x8C93ee3C6Ec37DE3292df35b4bFdaEd6A693FA16","0x2825Fe488dA71285a5736c7aE2C21a35446D3225","0x52edFE063ab3ba9EC0DE11a44e3D35338C531E56","0xfC28BcAbFD9Ad2b5AdA7F482F9bba6Df1446623A","0x3BE95Be03Dc8e22c287C045d1e92CFc8Ad8b3Be4","0x0065b237Ab86384DE32331DF8Ae5A46463729830","0xd9d30c8eB0923fe778B3372B3f511D8223D339cD","0x5B9112F95ad564EE5Df62dE749264b3CE48f899D","0xa9Ad1EA2027c741322a3761266f4AFfEeb9B3de4","0xd7ab4A54E2d99D3B979506f6469179fF555f1025","0x0fD3Af73D34D2A18E56195e2589a1231206DBef2","0xF5578Cece5FeC43F932E4b51ADb81DA545D3CaAA","0x2a790327168cc34C607Af02923D5a0b60c37aB0A","0x2F37aaB4808D3CC985d868D516b48D63ec0834b0","0x59BBca737AE0a7e5d2ecb91b07c1b19EA612F52E","0x920fCB7Ba09E97DaFf210Ad46e093d755554E7A7","0xd252fCF298450F93ce2E64c8Da11FC71231D0771","0x848BFd0E34c580610385b004Fe4b267b41ab97D7","0x128Eca5E9fA3c3D556197dF4E82Ef12315865c11","0x3255A865848255b428ca24f0b03fD0F8D93559a2","0x2A2e53A4F503C453311865E076752f557d09dFF2","0x6D16E3fd2DABffCa19cE4DCa9A7CE343EFA57D9A","0xd01a40c59EF84F2b295eb18006A278EAefB24A3e","0xf9A0cd0aAB52E4b6eDcB52388085ff0237b159E4","0x6d7Bc43f6643441d1cbe3b432a9336DD2AE76bC7","0x8Ad4f7eb4Eae409E458119174266C8ff2f8d7aA9","0x46D377c4116dd1e9a3D7FB84A52763B9780FCC21","0x02a7fe8b3178C7B7a94d6124b81400DC15ca9a7C","0x0595a90011D65c33B2eB794fd19600a958579728","0x911e0945cf9F44A1AdB242490058f7D55E0782AD","0x9589b2c136BB86CfCAbEc536d72729379Cd9b46D","0x45852d52fc45419F67Aede1b1553409bb4169fA5","0x49A405DfC24d39bFae3F369e8B17328B0C55fA2c","0x8C08294DfabA1f3A482c0BFDD8880A429164989D","0xb7C7baDa3bfd0E359F1688e01779861C1523787d","0xeF3aB52C9f7b13332D90A0b3aA4D56233d62E4D1","0x4631dd875942Ff2eb32a3da2ec07c16Ca8224908","0x78A6d7B78eCaf05c842D75aF31772f26dCF46935","0x63f4566e966f4B8afFD3Be878b292FDF219Db9Fd","0xb8D0C56F206c2FAF1257A2E0CEc016c87e2f4b3D","0xb61B9d41fF6E3240C0f6F8b79cbD9A671B41914B","0x39473E9B41DA09396eAE3BF87f7E28f19049AB14","0x641813A0A19DeEDA4E251aff40dFEaA85333Bb2d","0x84F1c513379088705ED3a9da743505cD932bd855","0xa7349586dA2048125ad7F214269aa91Cae7c9408","0xfD1Eee3D93D624CCB8e5AA06C735b2c58c1cfd29","0x687FBc6F6A0D34bf07772e503E3765af900Fb828","0xadbd670b7F9b337d013DB341C30dB9f60B6bbe63","0x37eEEfc1B2ccf2aC6291F3Be9F8aAc1cA6e0A7a7","0x0D0A3E9680d7dD7baF71CA6fA17366766C3EabE5"],{"internalType":"address[]","name":"existingHolders","type":"address[]"}],[["1656555000000000000000000000","16500000000000000000000000","10000000000000000000000000","4000000000000000000000000","2500000000000000000000000","1000000000000000000000000","1000000000000000000000000","1000000000000000000000000","800000000000000000000000","750000000000000000000000","150000000000000000000000","150000000000000000000000","50000000000000000000000","250000000000000000000000000","175000000000000000000000000","125000000000000000000000000","50000000000000000000000000","50000000000000000000000000","50000000000000000000000000","30000000000000000000000000","15000000000000000000000000","10000000000000000000000000","5000000000000000000000000","4500000000000000000000000","4000000000000000000000000","3000000000000000000000000","3000000000000000000000000","2500000000000000000000000","2500000000000000000000000","2500000000000000000000000","2500000000000000000000000","2500000000000000000000000","2000000000000000000000000","1500000000000000000000000","1500000000000000000000000","1000000000000000000000000","1000000000000000000000000","1000000000000000000000000","1000000000000000000000000","950000000000000000000000","800000000000000000000000","750000000000000000000000","650000000000000000000000","600000000000000000000000","600000000000000000000000","600000000000000000000000","500000000000000000000000","500000000000000000000000","500000000000000000000000","500000000000000000000000","500000000000000000000000","450000000000000000000000","350000000000000000000000","280000000000000000000000","180000000000000000000000","150000000000000000000000","100000000000000000000000","100000000000000000000000","100000000000000000000000","100000000000000000000000","100000000000000000000000","75000000000000000000000","55000000000000000000000","30000000000000000000000","25000000000000000000000"],{"internalType":"uint256[]","name":"existingAmounts","type":"uint256[]"}],["Worldcoin",{"internalType":"string","name":"name_","type":"string"}],["WLD",{"internalType":"string","name":"symbol_","type":"string"}],["2628000",{"internalType":"uint256","name":"inflationCapPeriod_","type":"uint256"}],["1241487716449316",{"internalType":"uint256","name":"inflationCapWad_","type":"uint256"}],["473938994",{"internalType":"uint256","name":"inflationLockPeriod_","type":"uint256"}]],"compiler_version":"0.8.19+commit.7dd6d404","is_verified_via_verifier_alliance":false,"verified_at":"2023-11-18T08:52:41.048301Z","implementations":[],"proxy_type":null,"external_libraries":[],"creation_bytecode":"0x60e06040523480156200001157600080fd5b5060405162001be438038062001be483398101604081905262000034916200056c565b3385856003620000458382620006d1565b506004620000548282620006d1565b5050506200006881620001ac60201b60201c565b5086518651146200007857600080fd5b826000036200008657600080fd5b6006805460ff60a01b19169055600780546001600160a01b031916905560a083905260c0829052620000b94282620007b3565b6080526000600881905560098190555b875181101562000134576200011f6000898381518110620000ee57620000ee620007cf565b60200260200101518984815181106200010b576200010b620007cf565b6020026020010151620001ca60201b60201c565b806200012b81620007e5565b915050620000c9565b506b204fce5e3e250261100000006200014c60025490565b11156200015857600080fd5b7faee8e7775c0f19be8de058a7cc5030a18741bdaf05c535e36780ed390af0b3ba3086868a8a888888604051620001979897969594939291906200086c565b60405180910390a1505050505050506200091d565b600680546001600160a01b0319169055620001c78162000325565b50565b6001600160a01b038316620001f9578060026000828254620001ed9190620007b3565b90915550620002959050565b6001600160a01b03831660009081526020819052604090205481811015620002765760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840160405180910390fd5b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216620002b357600280548290039055620002d2565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200031891815260200190565b60405180910390a3505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715620003b857620003b862000377565b604052919050565b60006001600160401b03821115620003dc57620003dc62000377565b5060051b60200190565b600082601f830112620003f857600080fd5b81516020620004116200040b83620003c0565b6200038d565b82815260059290921b840181019181810190868411156200043157600080fd5b8286015b84811015620004655780516001600160a01b0381168114620004575760008081fd5b835291830191830162000435565b509695505050505050565b600082601f8301126200048257600080fd5b81516020620004956200040b83620003c0565b82815260059290921b84018101918181019086841115620004b557600080fd5b8286015b84811015620004655780518352918301918301620004b9565b60005b83811015620004ef578181015183820152602001620004d5565b50506000910152565b600082601f8301126200050a57600080fd5b81516001600160401b0381111562000526576200052662000377565b6200053b601f8201601f19166020016200038d565b8181528460208386010111156200055157600080fd5b62000564826020830160208701620004d2565b949350505050565b600080600080600080600060e0888a0312156200058857600080fd5b87516001600160401b0380821115620005a057600080fd5b620005ae8b838c01620003e6565b985060208a0151915080821115620005c557600080fd5b620005d38b838c0162000470565b975060408a0151915080821115620005ea57600080fd5b620005f88b838c01620004f8565b965060608a01519150808211156200060f57600080fd5b506200061e8a828b01620004f8565b9450506080880151925060a0880151915060c0880151905092959891949750929550565b600181811c908216806200065757607f821691505b6020821081036200067857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620006cc57600081815260208120601f850160051c81016020861015620006a75750805b601f850160051c820191505b81811015620006c857828155600101620006b3565b5050505b505050565b81516001600160401b03811115620006ed57620006ed62000377565b6200070581620006fe845462000642565b846200067e565b602080601f8311600181146200073d5760008415620007245750858301515b600019600386901b1c1916600185901b178555620006c8565b600085815260208120601f198616915b828110156200076e578886015182559484019460019091019084016200074d565b50858210156200078d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b80820180821115620007c957620007c96200079d565b92915050565b634e487b7160e01b600052603260045260246000fd5b600060018201620007fa57620007fa6200079d565b5060010190565b600081518084526200081b816020860160208601620004d2565b601f01601f19169290920160200192915050565b600081518084526020808501945080840160005b83811015620008615781518752958201959082019060010162000843565b509495945050505050565b6001600160a01b038981168252610100602080840182905260009290620008968584018d62000801565b92508483036040860152620008ac838c62000801565b85810360608701528a51808252828c0194509082019060005b81811015620008e5578551851683529483019491830191600101620008c5565b50508581036080870152620008fb818b6200082f565b60a08701999099525050505060c082019390935260e001525095945050505050565b60805160a05160c05161128262000962600039600081816101cd01526107e60152600081816102d001526107a1015260008181610300015261076701526112826000f3fe608060405234801561001057600080fd5b50600436106101c35760003560e01c8063715018a6116100f9578063a9059cbb11610097578063dd62ed3e11610071578063dd62ed3e146103d8578063e30c3978146103eb578063f2fde38b146103fc578063fca3b5aa1461040f57600080fd5b8063a9059cbb146103a3578063be5ddb99146103b6578063cee8d013146103c957600080fd5b80638da5cb5b116100d35780638da5cb5b1461036e57806395d89b411461037f57806395dba44c14610387578063a457c2d71461039057600080fd5b8063715018a61461034b57806379ba509714610353578063883c3a631461035b57600080fd5b8063313ce5671161016657806341e65e0b1161014057806341e65e0b146102cb57806358794456146102f25780635915b17e146102fb57806370a082311461032257600080fd5b8063313ce5671461029557806336c545ca146102a457806339509351146102b857600080fd5b8063085624ed116101a2578063085624ed14610242578063095ea7b31461025757806318160ddd1461027a57806323b872dd1461028257600080fd5b806216d010146101c857806306fdde03146102025780630754617214610217575b600080fd5b6101ef7f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b61020a610422565b6040516101f99190610e32565b60075461022a906001600160a01b031681565b6040516001600160a01b0390911681526020016101f9565b610255610250366004610f72565b6104b4565b005b61026a610265366004611032565b6105af565b60405190151581526020016101f9565b6002546101ef565b61026a61029036600461105c565b6105c9565b604051601281526020016101f9565b60065461026a90600160a01b900460ff1681565b61026a6102c6366004611032565b6105ed565b6101ef7f000000000000000000000000000000000000000000000000000000000000000081565b6101ef60085481565b6101ef7f000000000000000000000000000000000000000000000000000000000000000081565b6101ef610330366004611098565b6001600160a01b031660009081526020819052604090205490565b61025561060f565b610255610617565b6101ef6b204fce5e3e2502611000000081565b6005546001600160a01b031661022a565b61020a610696565b6101ef60095481565b61026a61039e366004611032565b6106a5565b61026a6103b1366004611032565b610720565b6102556103c4366004611032565b61072e565b6101ef670de0b6b3a764000081565b6101ef6103e63660046110ba565b610888565b6006546001600160a01b031661022a565b61025561040a366004611098565b6108b3565b61025561041d366004611098565b610924565b606060038054610431906110ed565b80601f016020809104026020016040519081016040528092919081815260200182805461045d906110ed565b80156104aa5780601f1061047f576101008083540402835291602001916104aa565b820191906000526020600020905b81548152906001019060200180831161048d57829003601f168201915b5050505050905090565b6104bc61094e565b600654600160a01b900460ff16156104d357600080fd5b80518251146104e157600080fd5b6006805460ff60a01b1916600160a01b17905560005b825181101561054e5761053c83828151811061051557610515611127565b602002602001015183838151811061052f5761052f611127565b60200260200101516109aa565b8061054681611153565b9150506104f7565b506b204fce5e3e2502611000000061056560025490565b111561057057600080fd5b7f0436dcb8b7b3be78d785be7ea8f04f241ce5d275057aea7f7fd4b6e4dfda3aa43383836040516105a39392919061116c565b60405180910390a15050565b6000336105bd818585610a10565b60019150505b92915050565b6000336105d7858285610b35565b6105e2858585610baf565b506001949350505050565b6000336105bd8185856106008383610888565b61060a9190611200565b610a10565b6101c361094e565b60065433906001600160a01b0316811461068a5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b60648201526084015b60405180910390fd5b61069381610c85565b50565b606060048054610431906110ed565b600033816106b38286610888565b9050838110156107135760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610681565b6105e28286868403610a10565b6000336105bd818585610baf565b6001600160a01b03821661074157600080fd5b8060000361074e57600080fd5b6007546001600160a01b0316331461076557600080fd5b7f000000000000000000000000000000000000000000000000000000000000000042101561079257600080fd5b600854421115610827576107c67f000000000000000000000000000000000000000000000000000000000000000042611200565b60085560006107d460025490565b90506000670de0b6b3a764000061080b7f000000000000000000000000000000000000000000000000000000000000000084611213565b610815919061122a565b90506108218183611200565b60095550505b61083182826109aa565b600954600254111561084257600080fd5b604080513381526001600160a01b03841660208201529081018290527f0188e46dffface414ae6c071b6f739093e36d85d0f016e3d159dffe68c1b08cf906060016105a3565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6108bb61094e565b600680546001600160a01b0383166001600160a01b031990911681179091556108ec6005546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b61092c61094e565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146109a85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610681565b565b6001600160a01b038216610a005760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610681565b610a0c60008383610c9e565b5050565b6001600160a01b038316610a725760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610681565b6001600160a01b038216610ad35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610681565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6000610b418484610888565b90506000198114610ba95781811015610b9c5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610681565b610ba98484848403610a10565b50505050565b6001600160a01b038316610c135760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610681565b6001600160a01b038216610c755760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610681565b610c80838383610c9e565b505050565b600680546001600160a01b031916905561069381610de0565b6001600160a01b038316610cc9578060026000828254610cbe9190611200565b90915550610d609050565b6001600160a01b03831660009081526020819052604090205481811015610d415760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610681565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216610d7c57600280548290039055610d9b565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610b2891815260200190565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060208083528351808285015260005b81811015610e5f57858101830151858201604001528201610e43565b506000604082860101526040601f19601f8301168501019250505092915050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610ebf57610ebf610e80565b604052919050565b600067ffffffffffffffff821115610ee157610ee1610e80565b5060051b60200190565b80356001600160a01b0381168114610f0257600080fd5b919050565b600082601f830112610f1857600080fd5b81356020610f2d610f2883610ec7565b610e96565b82815260059290921b84018101918181019086841115610f4c57600080fd5b8286015b84811015610f675780358352918301918301610f50565b509695505050505050565b60008060408385031215610f8557600080fd5b823567ffffffffffffffff80821115610f9d57600080fd5b818501915085601f830112610fb157600080fd5b81356020610fc1610f2883610ec7565b82815260059290921b84018101918181019089841115610fe057600080fd5b948201945b8386101561100557610ff686610eeb565b82529482019490820190610fe5565b9650508601359250508082111561101b57600080fd5b5061102885828601610f07565b9150509250929050565b6000806040838503121561104557600080fd5b61104e83610eeb565b946020939093013593505050565b60008060006060848603121561107157600080fd5b61107a84610eeb565b925061108860208501610eeb565b9150604084013590509250925092565b6000602082840312156110aa57600080fd5b6110b382610eeb565b9392505050565b600080604083850312156110cd57600080fd5b6110d683610eeb565b91506110e460208401610eeb565b90509250929050565b600181811c9082168061110157607f821691505b60208210810361112157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016111655761116561113d565b5060010190565b6001600160a01b038481168252606060208084018290528551918401829052600092868201929091906080860190855b818110156111ba57855185168352948301949183019160010161119c565b5050858103604087015286518082529082019350915080860160005b838110156111f2578151855293820193908201906001016111d6565b509298975050505050505050565b808201808211156105c3576105c361113d565b80820281158282048414176105c3576105c361113d565b60008261124757634e487b7160e01b600052601260045260246000fd5b50049056fea26469706673582212208f25c13949d038c74acf5c2d39f639b1fa265ad4e1765ff96ee0c4f504ba27a864736f6c6343000813003300000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000920000000000000000000000000000000000000000000000000000000000000116000000000000000000000000000000000000000000000000000000000000011a000000000000000000000000000000000000000000000000000000000002819a0000000000000000000000000000000000000000000000000000469206254fc24000000000000000000000000000000000000000000000000000000001c3fbc3200000000000000000000000000000000000000000000000000000000000000410000000000000000000000008155ef75b9ccaff88a6d247b2beaf30903397f4b000000000000000000000000fb7f100ed6793fcd63e6e9f201be9aa567b2c9cc000000000000000000000000fb7f100ed6793fcd63e6e9f201be9aa567b2c9cc000000000000000000000000fb7f100ed6793fcd63e6e9f201be9aa567b2c9cc000000000000000000000000fb7f100ed6793fcd63e6e9f201be9aa567b2c9cc000000000000000000000000fb7f100ed6793fcd63e6e9f201be9aa567b2c9cc000000000000000000000000fb7f100ed6793fcd63e6e9f201be9aa567b2c9cc000000000000000000000000fb7f100ed6793fcd63e6e9f201be9aa567b2c9cc000000000000000000000000fb7f100ed6793fcd63e6e9f201be9aa567b2c9cc000000000000000000000000fb7f100ed6793fcd63e6e9f201be9aa567b2c9cc000000000000000000000000fb7f100ed6793fcd63e6e9f201be9aa567b2c9cc000000000000000000000000fb7f100ed6793fcd63e6e9f201be9aa567b2c9cc000000000000000000000000fb7f100ed6793fcd63e6e9f201be9aa567b2c9cc00000000000000000000000059d9ab9c68ef7357de1b96de91ce7c8f14bb8fe8000000000000000000000000f8e24ac99420f6576e136b570fd879ca6356721e0000000000000000000000008c93ee3c6ec37de3292df35b4bfdaed6a693fa160000000000000000000000002825fe488da71285a5736c7ae2c21a35446d322500000000000000000000000052edfe063ab3ba9ec0de11a44e3d35338c531e56000000000000000000000000fc28bcabfd9ad2b5ada7f482f9bba6df1446623a0000000000000000000000003be95be03dc8e22c287c045d1e92cfc8ad8b3be40000000000000000000000000065b237ab86384de32331df8ae5a46463729830000000000000000000000000d9d30c8eb0923fe778b3372b3f511d8223d339cd0000000000000000000000005b9112f95ad564ee5df62de749264b3ce48f899d000000000000000000000000a9ad1ea2027c741322a3761266f4affeeb9b3de4000000000000000000000000d7ab4a54e2d99d3b979506f6469179ff555f10250000000000000000000000000fd3af73d34d2a18e56195e2589a1231206dbef2000000000000000000000000f5578cece5fec43f932e4b51adb81da545d3caaa0000000000000000000000002a790327168cc34c607af02923d5a0b60c37ab0a0000000000000000000000002f37aab4808d3cc985d868d516b48d63ec0834b000000000000000000000000059bbca737ae0a7e5d2ecb91b07c1b19ea612f52e000000000000000000000000920fcb7ba09e97daff210ad46e093d755554e7a7000000000000000000000000d252fcf298450f93ce2e64c8da11fc71231d0771000000000000000000000000848bfd0e34c580610385b004fe4b267b41ab97d7000000000000000000000000128eca5e9fa3c3d556197df4e82ef12315865c110000000000000000000000003255a865848255b428ca24f0b03fd0f8d93559a20000000000000000000000002a2e53a4f503c453311865e076752f557d09dff20000000000000000000000006d16e3fd2dabffca19ce4dca9a7ce343efa57d9a000000000000000000000000d01a40c59ef84f2b295eb18006a278eaefb24a3e000000000000000000000000f9a0cd0aab52e4b6edcb52388085ff0237b159e40000000000000000000000006d7bc43f6643441d1cbe3b432a9336dd2ae76bc70000000000000000000000008ad4f7eb4eae409e458119174266c8ff2f8d7aa900000000000000000000000046d377c4116dd1e9a3d7fb84a52763b9780fcc2100000000000000000000000002a7fe8b3178c7b7a94d6124b81400dc15ca9a7c0000000000000000000000000595a90011d65c33b2eb794fd19600a958579728000000000000000000000000911e0945cf9f44a1adb242490058f7d55e0782ad0000000000000000000000009589b2c136bb86cfcabec536d72729379cd9b46d00000000000000000000000045852d52fc45419f67aede1b1553409bb4169fa500000000000000000000000049a405dfc24d39bfae3f369e8b17328b0c55fa2c0000000000000000000000008c08294dfaba1f3a482c0bfdd8880a429164989d000000000000000000000000b7c7bada3bfd0e359f1688e01779861c1523787d000000000000000000000000ef3ab52c9f7b13332d90a0b3aa4d56233d62e4d10000000000000000000000004631dd875942ff2eb32a3da2ec07c16ca822490800000000000000000000000078a6d7b78ecaf05c842d75af31772f26dcf4693500000000000000000000000063f4566e966f4b8affd3be878b292fdf219db9fd000000000000000000000000b8d0c56f206c2faf1257a2e0cec016c87e2f4b3d000000000000000000000000b61b9d41ff6e3240c0f6f8b79cbd9a671b41914b00000000000000000000000039473e9b41da09396eae3bf87f7e28f19049ab14000000000000000000000000641813a0a19deeda4e251aff40dfeaa85333bb2d00000000000000000000000084f1c513379088705ed3a9da743505cd932bd855000000000000000000000000a7349586da2048125ad7f214269aa91cae7c9408000000000000000000000000fd1eee3d93d624ccb8e5aa06c735b2c58c1cfd29000000000000000000000000687fbc6f6a0d34bf07772e503e3765af900fb828000000000000000000000000adbd670b7f9b337d013db341c30db9f60b6bbe6300000000000000000000000037eeefc1b2ccf2ac6291f3be9f8aac1ca6e0a7a70000000000000000000000000d0a3e9680d7dd7baf71ca6fa17366766c3eabe500000000000000000000000000000000000000000000000000000000000000410000000000000000000000000000000000000000055a452a7df95d231ce000000000000000000000000000000000000000000000000da602cad43550e0800000000000000000000000000000000000000000000000084595161401484a000000000000000000000000000000000000000000000000034f086f3b33b684000000000000000000000000000000000000000000000000021165458500521280000000000000000000000000000000000000000000000000d3c21bcecceda100000000000000000000000000000000000000000000000000d3c21bcecceda100000000000000000000000000000000000000000000000000d3c21bcecceda100000000000000000000000000000000000000000000000000a968163f0a57b4000000000000000000000000000000000000000000000000009ed194db19b238c00000000000000000000000000000000000000000000000001fc3842bd1f071c00000000000000000000000000000000000000000000000001fc3842bd1f071c00000000000000000000000000000000000000000000000000a968163f0a57b400000000000000000000000000000000000000000000000cecb8f27f4200f3a00000000000000000000000000000000000000000000000090c1b1025e16710f0000000000000000000000000000000000000000000000006765c793fa10079d000000000000000000000000000000000000000000000000295be96e64066972000000000000000000000000000000000000000000000000295be96e64066972000000000000000000000000000000000000000000000000295be96e6406697200000000000000000000000000000000000000000000000018d0bf423c03d8de0000000000000000000000000000000000000000000000000c685fa11e01ec6f000000000000000000000000000000000000000000000000084595161401484a0000000000000000000000000000000000000000000000000422ca8b0a00a42500000000000000000000000000000000000000000000000003b8e97d229a2d54800000000000000000000000000000000000000000000000034f086f3b33b684000000000000000000000000000000000000000000000000027b46536c66c8e3000000000000000000000000000000000000000000000000027b46536c66c8e30000000000000000000000000000000000000000000000000211654585005212800000000000000000000000000000000000000000000000021165458500521280000000000000000000000000000000000000000000000002116545850052128000000000000000000000000000000000000000000000000211654585005212800000000000000000000000000000000000000000000000021165458500521280000000000000000000000000000000000000000000000001a784379d99db42000000000000000000000000000000000000000000000000013da329b6336471800000000000000000000000000000000000000000000000013da329b633647180000000000000000000000000000000000000000000000000d3c21bcecceda100000000000000000000000000000000000000000000000000d3c21bcecceda100000000000000000000000000000000000000000000000000d3c21bcecceda100000000000000000000000000000000000000000000000000d3c21bcecceda100000000000000000000000000000000000000000000000000c92b9a6adc4825c0000000000000000000000000000000000000000000000000a968163f0a57b4000000000000000000000000000000000000000000000000009ed194db19b238c000000000000000000000000000000000000000000000000089a49213386742400000000000000000000000000000000000000000000000007f0e10af47c1c7000000000000000000000000000000000000000000000000007f0e10af47c1c7000000000000000000000000000000000000000000000000007f0e10af47c1c70000000000000000000000000000000000000000000000000069e10de76676d08000000000000000000000000000000000000000000000000069e10de76676d08000000000000000000000000000000000000000000000000069e10de76676d08000000000000000000000000000000000000000000000000069e10de76676d08000000000000000000000000000000000000000000000000069e10de76676d0800000000000000000000000000000000000000000000000005f4a8c8375d155400000000000000000000000000000000000000000000000004a1d89bb94865ec00000000000000000000000000000000000000000000000003b4ad496106b7f00000000000000000000000000000000000000000000000000261dd1ce2f2088800000000000000000000000000000000000000000000000001fc3842bd1f071c0000000000000000000000000000000000000000000000000152d02c7e14af680000000000000000000000000000000000000000000000000152d02c7e14af680000000000000000000000000000000000000000000000000152d02c7e14af680000000000000000000000000000000000000000000000000152d02c7e14af680000000000000000000000000000000000000000000000000152d02c7e14af6800000000000000000000000000000000000000000000000000fe1c215e8f838e00000000000000000000000000000000000000000000000000ba58e545582d460000000000000000000000000000000000000000000000000065a4da25d3016c0000000000000000000000000000000000000000000000000054b40b1f852bda000000000000000000000000000000000000000000000000000000000000000000009576f726c64636f696e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003574c440000000000000000000000000000000000000000000000000000000000","name":"WLD","is_blueprint":false,"license_type":"none","is_fully_verified":true,"is_verified_via_eth_bytecode_db":true,"language":"solidity","evm_version":"paris","can_be_visualized_via_sol2uml":true,"is_verified_via_sourcify":true,"additional_sources":[{"file_path":"lib/openzeppelin-contracts/contracts/access/Ownable.sol","source_code":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)\n\npragma solidity ^0.8.19;\n\nimport \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n    address private _owner;\n\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n    /**\n     * @dev Initializes the contract setting the deployer as the initial owner.\n     */\n    constructor(address initialOwner) {\n        _transferOwnership(initialOwner);\n    }\n\n    /**\n     * @dev Throws if called by any account other than the owner.\n     */\n    modifier onlyOwner() {\n        _checkOwner();\n        _;\n    }\n\n    /**\n     * @dev Returns the address of the current owner.\n     */\n    function owner() public view virtual returns (address) {\n        return _owner;\n    }\n\n    /**\n     * @dev Throws if the sender is not the owner.\n     */\n    function _checkOwner() internal view virtual {\n        require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n    }\n\n    /**\n     * @dev Leaves the contract without owner. It will not be possible to call\n     * `onlyOwner` functions. Can only be called by the current owner.\n     *\n     * NOTE: Renouncing ownership will leave the contract without an owner,\n     * thereby disabling any functionality that is only available to the owner.\n     */\n    function renounceOwnership() public virtual onlyOwner {\n        _transferOwnership(address(0));\n    }\n\n    /**\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\n     * Can only be called by the current owner.\n     */\n    function transferOwnership(address newOwner) public virtual onlyOwner {\n        require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n        _transferOwnership(newOwner);\n    }\n\n    /**\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\n     * Internal function without access restriction.\n     */\n    function _transferOwnership(address newOwner) internal virtual {\n        address oldOwner = _owner;\n        _owner = newOwner;\n        emit OwnershipTransferred(oldOwner, newOwner);\n    }\n}\n"},{"file_path":"lib/openzeppelin-contracts/contracts/access/Ownable2Step.sol","source_code":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable2Step.sol)\n\npragma solidity ^0.8.19;\n\nimport \"./Ownable.sol\";\n\n/**\n * @dev Contract module which provides access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership} and {acceptOwnership}.\n *\n * This module is used through inheritance. It will make available all functions\n * from parent (Ownable).\n */\nabstract contract Ownable2Step is Ownable {\n    address private _pendingOwner;\n\n    event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner);\n\n    /**\n     * @dev Returns the address of the pending owner.\n     */\n    function pendingOwner() public view virtual returns (address) {\n        return _pendingOwner;\n    }\n\n    /**\n     * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one.\n     * Can only be called by the current owner.\n     */\n    function transferOwnership(address newOwner) public virtual override onlyOwner {\n        _pendingOwner = newOwner;\n        emit OwnershipTransferStarted(owner(), newOwner);\n    }\n\n    /**\n     * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner.\n     * Internal function without access restriction.\n     */\n    function _transferOwnership(address newOwner) internal virtual override {\n        delete _pendingOwner;\n        super._transferOwnership(newOwner);\n    }\n\n    /**\n     * @dev The new owner accepts the ownership transfer.\n     */\n    function acceptOwnership() public virtual {\n        address sender = _msgSender();\n        require(pendingOwner() == sender, \"Ownable2Step: caller is not the new owner\");\n        _transferOwnership(sender);\n    }\n}\n"},{"file_path":"lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol","source_code":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)\n\npragma solidity ^0.8.19;\n\nimport \"./IERC20.sol\";\nimport \"./extensions/IERC20Metadata.sol\";\nimport \"../../utils/Context.sol\";\n\n/**\n * @dev Implementation of the {IERC20} interface.\n *\n * This implementation is agnostic to the way tokens are created. This means\n * that a supply mechanism has to be added in a derived contract using {_mint}.\n *\n * TIP: For a detailed writeup see our guide\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\n * to implement supply mechanisms].\n *\n * The default value of {decimals} is 18. To change this, you should override\n * this function so it returns a different value.\n *\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\n * instead returning `false` on failure. This behavior is nonetheless\n * conventional and does not conflict with the expectations of ERC20\n * applications.\n *\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\n * This allows applications to reconstruct the allowance for all accounts just\n * by listening to said events. Other implementations of the EIP may not emit\n * these events, as it isn't required by the specification.\n *\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\n * functions have been added to mitigate the well-known issues around setting\n * allowances. See {IERC20-approve}.\n */\ncontract ERC20 is Context, IERC20, IERC20Metadata {\n    mapping(address => uint256) private _balances;\n\n    mapping(address => mapping(address => uint256)) private _allowances;\n\n    uint256 private _totalSupply;\n\n    string private _name;\n    string private _symbol;\n\n    /**\n     * @dev Sets the values for {name} and {symbol}.\n     *\n     * All two of these values are immutable: they can only be set once during\n     * construction.\n     */\n    constructor(string memory name_, string memory symbol_) {\n        _name = name_;\n        _symbol = symbol_;\n    }\n\n    /**\n     * @dev Returns the name of the token.\n     */\n    function name() public view virtual override returns (string memory) {\n        return _name;\n    }\n\n    /**\n     * @dev Returns the symbol of the token, usually a shorter version of the\n     * name.\n     */\n    function symbol() public view virtual override returns (string memory) {\n        return _symbol;\n    }\n\n    /**\n     * @dev Returns the number of decimals used to get its user representation.\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\n     *\n     * Tokens usually opt for a value of 18, imitating the relationship between\n     * Ether and Wei. This is the default value returned by this function, unless\n     * it's overridden.\n     *\n     * NOTE: This information is only used for _display_ purposes: it in\n     * no way affects any of the arithmetic of the contract, including\n     * {IERC20-balanceOf} and {IERC20-transfer}.\n     */\n    function decimals() public view virtual override returns (uint8) {\n        return 18;\n    }\n\n    /**\n     * @dev See {IERC20-totalSupply}.\n     */\n    function totalSupply() public view virtual override returns (uint256) {\n        return _totalSupply;\n    }\n\n    /**\n     * @dev See {IERC20-balanceOf}.\n     */\n    function balanceOf(address account) public view virtual override returns (uint256) {\n        return _balances[account];\n    }\n\n    /**\n     * @dev See {IERC20-transfer}.\n     *\n     * Requirements:\n     *\n     * - `to` cannot be the zero address.\n     * - the caller must have a balance of at least `amount`.\n     */\n    function transfer(address to, uint256 amount) public virtual override returns (bool) {\n        address owner = _msgSender();\n        _transfer(owner, to, amount);\n        return true;\n    }\n\n    /**\n     * @dev See {IERC20-allowance}.\n     */\n    function allowance(address owner, address spender) public view virtual override returns (uint256) {\n        return _allowances[owner][spender];\n    }\n\n    /**\n     * @dev See {IERC20-approve}.\n     *\n     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\n     *\n     * Requirements:\n     *\n     * - `spender` cannot be the zero address.\n     */\n    function approve(address spender, uint256 amount) public virtual override returns (bool) {\n        address owner = _msgSender();\n        _approve(owner, spender, amount);\n        return true;\n    }\n\n    /**\n     * @dev See {IERC20-transferFrom}.\n     *\n     * Emits an {Approval} event indicating the updated allowance. This is not\n     * required by the EIP. See the note at the beginning of {ERC20}.\n     *\n     * NOTE: Does not update the allowance if the current allowance\n     * is the maximum `uint256`.\n     *\n     * Requirements:\n     *\n     * - `from` and `to` cannot be the zero address.\n     * - `from` must have a balance of at least `amount`.\n     * - the caller must have allowance for ``from``'s tokens of at least\n     * `amount`.\n     */\n    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {\n        address spender = _msgSender();\n        _spendAllowance(from, spender, amount);\n        _transfer(from, to, amount);\n        return true;\n    }\n\n    /**\n     * @dev Atomically increases the allowance granted to `spender` by the caller.\n     *\n     * This is an alternative to {approve} that can be used as a mitigation for\n     * problems described in {IERC20-approve}.\n     *\n     * Emits an {Approval} event indicating the updated allowance.\n     *\n     * Requirements:\n     *\n     * - `spender` cannot be the zero address.\n     */\n    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\n        address owner = _msgSender();\n        _approve(owner, spender, allowance(owner, spender) + addedValue);\n        return true;\n    }\n\n    /**\n     * @dev Atomically decreases the allowance granted to `spender` by the caller.\n     *\n     * This is an alternative to {approve} that can be used as a mitigation for\n     * problems described in {IERC20-approve}.\n     *\n     * Emits an {Approval} event indicating the updated allowance.\n     *\n     * Requirements:\n     *\n     * - `spender` cannot be the zero address.\n     * - `spender` must have allowance for the caller of at least\n     * `subtractedValue`.\n     */\n    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\n        address owner = _msgSender();\n        uint256 currentAllowance = allowance(owner, spender);\n        require(currentAllowance >= subtractedValue, \"ERC20: decreased allowance below zero\");\n        unchecked {\n            _approve(owner, spender, currentAllowance - subtractedValue);\n        }\n\n        return true;\n    }\n\n    /**\n     * @dev Moves `amount` of tokens from `from` to `to`.\n     *\n     * This internal function is equivalent to {transfer}, and can be used to\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\n     *\n     * Emits a {Transfer} event.\n     *\n     * NOTE: This function is not virtual, {_update} should be overridden instead.\n     */\n    function _transfer(address from, address to, uint256 amount) internal {\n        require(from != address(0), \"ERC20: transfer from the zero address\");\n        require(to != address(0), \"ERC20: transfer to the zero address\");\n        _update(from, to, amount);\n    }\n\n    /**\n     * @dev Transfers `amount` of tokens from `from` to `to`, or alternatively mints (or burns) if `from` (or `to`) is\n     * the zero address. All customizations to transfers, mints, and burns should be done by overriding this function.\n     *\n     * Emits a {Transfer} event.\n     */\n    function _update(address from, address to, uint256 amount) internal virtual {\n        if (from == address(0)) {\n            _totalSupply += amount;\n        } else {\n            uint256 fromBalance = _balances[from];\n            require(fromBalance >= amount, \"ERC20: transfer amount exceeds balance\");\n            unchecked {\n                // Overflow not possible: amount <= fromBalance <= totalSupply.\n                _balances[from] = fromBalance - amount;\n            }\n        }\n\n        if (to == address(0)) {\n            unchecked {\n                // Overflow not possible: amount <= totalSupply or amount <= fromBalance <= totalSupply.\n                _totalSupply -= amount;\n            }\n        } else {\n            unchecked {\n                // Overflow not possible: balance + amount is at most totalSupply, which we know fits into a uint256.\n                _balances[to] += amount;\n            }\n        }\n\n        emit Transfer(from, to, amount);\n    }\n\n    /**\n     * @dev Creates `amount` tokens and assigns them to `account`, by transferring it from address(0).\n     * Relies on the `_update` mechanism\n     *\n     * Emits a {Transfer} event with `from` set to the zero address.\n     *\n     * NOTE: This function is not virtual, {_update} should be overridden instead.\n     */\n    function _mint(address account, uint256 amount) internal {\n        require(account != address(0), \"ERC20: mint to the zero address\");\n        _update(address(0), account, amount);\n    }\n\n    /**\n     * @dev Destroys `amount` tokens from `account`, by transferring it to address(0).\n     * Relies on the `_update` mechanism.\n     *\n     * Emits a {Transfer} event with `to` set to the zero address.\n     *\n     * NOTE: This function is not virtual, {_update} should be overridden instead\n     */\n    function _burn(address account, uint256 amount) internal {\n        require(account != address(0), \"ERC20: burn from the zero address\");\n        _update(account, address(0), amount);\n    }\n\n    /**\n     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\n     *\n     * This internal function is equivalent to `approve`, and can be used to\n     * e.g. set automatic allowances for certain subsystems, etc.\n     *\n     * Emits an {Approval} event.\n     *\n     * Requirements:\n     *\n     * - `owner` cannot be the zero address.\n     * - `spender` cannot be the zero address.\n     */\n    function _approve(address owner, address spender, uint256 amount) internal virtual {\n        require(owner != address(0), \"ERC20: approve from the zero address\");\n        require(spender != address(0), \"ERC20: approve to the zero address\");\n\n        _allowances[owner][spender] = amount;\n        emit Approval(owner, spender, amount);\n    }\n\n    /**\n     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.\n     *\n     * Does not update the allowance amount in case of infinite allowance.\n     * Revert if not enough allowance is available.\n     *\n     * Might emit an {Approval} event.\n     */\n    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {\n        uint256 currentAllowance = allowance(owner, spender);\n        if (currentAllowance != type(uint256).max) {\n            require(currentAllowance >= amount, \"ERC20: insufficient allowance\");\n            unchecked {\n                _approve(owner, spender, currentAllowance - amount);\n            }\n        }\n    }\n}\n"},{"file_path":"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol","source_code":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)\n\npragma solidity ^0.8.19;\n\n/**\n * @dev Interface of the ERC20 standard as defined in the EIP.\n */\ninterface IERC20 {\n    /**\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\n     * another (`to`).\n     *\n     * Note that `value` may be zero.\n     */\n    event Transfer(address indexed from, address indexed to, uint256 value);\n\n    /**\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n     * a call to {approve}. `value` is the new allowance.\n     */\n    event Approval(address indexed owner, address indexed spender, uint256 value);\n\n    /**\n     * @dev Returns the amount of tokens in existence.\n     */\n    function totalSupply() external view returns (uint256);\n\n    /**\n     * @dev Returns the amount of tokens owned by `account`.\n     */\n    function balanceOf(address account) external view returns (uint256);\n\n    /**\n     * @dev Moves `amount` tokens from the caller's account to `to`.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * Emits a {Transfer} event.\n     */\n    function transfer(address to, uint256 amount) external returns (bool);\n\n    /**\n     * @dev Returns the remaining number of tokens that `spender` will be\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\n     * zero by default.\n     *\n     * This value changes when {approve} or {transferFrom} are called.\n     */\n    function allowance(address owner, address spender) external view returns (uint256);\n\n    /**\n     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\n     * that someone may use both the old and the new allowance by unfortunate\n     * transaction ordering. One possible solution to mitigate this race\n     * condition is to first reduce the spender's allowance to 0 and set the\n     * desired value afterwards:\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n     *\n     * Emits an {Approval} event.\n     */\n    function approve(address spender, uint256 amount) external returns (bool);\n\n    /**\n     * @dev Moves `amount` tokens from `from` to `to` using the\n     * allowance mechanism. `amount` is then deducted from the caller's\n     * allowance.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * Emits a {Transfer} event.\n     */\n    function transferFrom(address from, address to, uint256 amount) external returns (bool);\n}\n"},{"file_path":"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol","source_code":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)\n\npragma solidity ^0.8.19;\n\nimport \"../IERC20.sol\";\n\n/**\n * @dev Interface for the optional metadata functions from the ERC20 standard.\n *\n * _Available since v4.1._\n */\ninterface IERC20Metadata is IERC20 {\n    /**\n     * @dev Returns the name of the token.\n     */\n    function name() external view returns (string memory);\n\n    /**\n     * @dev Returns the symbol of the token.\n     */\n    function symbol() external view returns (string memory);\n\n    /**\n     * @dev Returns the decimals places of the token.\n     */\n    function decimals() external view returns (uint8);\n}\n"},{"file_path":"lib/openzeppelin-contracts/contracts/utils/Context.sol","source_code":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\n\npragma solidity ^0.8.19;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n    function _msgSender() internal view virtual returns (address) {\n        return msg.sender;\n    }\n\n    function _msgData() internal view virtual returns (bytes calldata) {\n        return msg.data;\n    }\n}\n"}],"certified":false,"conflicting_implementations":null,"abi":[{"inputs":[{"internalType":"address[]","name":"existingHolders","type":"address[]"},{"internalType":"uint256[]","name":"existingAmounts","type":"uint256[]"},{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"uint256","name":"inflationCapPeriod_","type":"uint256"},{"internalType":"uint256","name":"inflationCapWad_","type":"uint256"},{"internalType":"uint256","name":"inflationLockPeriod_","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"minter","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"InflationTokensMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newToken","type":"address"},{"indexed":false,"internalType":"string","name":"name","type":"string"},{"indexed":false,"internalType":"string","name":"symbol","type":"string"},{"indexed":false,"internalType":"address[]","name":"existingHolders","type":"address[]"},{"indexed":false,"internalType":"uint256[]","name":"existingsAmounts","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"inflationCapPeriod","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"inflationCapWad","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"inflationLockPeriod","type":"uint256"}],"name":"TokenUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"minter","type":"address"},{"indexed":false,"internalType":"address[]","name":"newHolders","type":"address[]"},{"indexed":false,"internalType":"uint256[]","name":"newAmounts","type":"uint256[]"}],"name":"TokensMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"INITIAL_SUPPLY_CAP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WAD_ONE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentPeriodEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentPeriodSupplyCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"inflationCapPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inflationCapWad","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inflationUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialMintDone","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintInflation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"newHolders","type":"address[]"},{"internalType":"uint256[]","name":"newAmounts","type":"uint256[]"}],"name":"mintOnce","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"minter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"minter_","type":"address"}],"name":"setMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"is_changed_bytecode":false,"is_partially_verified":false,"constructor_args":"00000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000920000000000000000000000000000000000000000000000000000000000000116000000000000000000000000000000000000000000000000000000000000011a000000000000000000000000000000000000000000000000000000000002819a0000000000000000000000000000000000000000000000000000469206254fc24000000000000000000000000000000000000000000000000000000001c3fbc3200000000000000000000000000000000000000000000000000000000000000410000000000000000000000008155ef75b9ccaff88a6d247b2beaf30903397f4b000000000000000000000000fb7f100ed6793fcd63e6e9f201be9aa567b2c9cc000000000000000000000000fb7f100ed6793fcd63e6e9f201be9aa567b2c9cc000000000000000000000000fb7f100ed6793fcd63e6e9f201be9aa567b2c9cc000000000000000000000000fb7f100ed6793fcd63e6e9f201be9aa567b2c9cc000000000000000000000000fb7f100ed6793fcd63e6e9f201be9aa567b2c9cc000000000000000000000000fb7f100ed6793fcd63e6e9f201be9aa567b2c9cc000000000000000000000000fb7f100ed6793fcd63e6e9f201be9aa567b2c9cc000000000000000000000000fb7f100ed6793fcd63e6e9f201be9aa567b2c9cc000000000000000000000000fb7f100ed6793fcd63e6e9f201be9aa567b2c9cc000000000000000000000000fb7f100ed6793fcd63e6e9f201be9aa567b2c9cc000000000000000000000000fb7f100ed6793fcd63e6e9f201be9aa567b2c9cc000000000000000000000000fb7f100ed6793fcd63e6e9f201be9aa567b2c9cc00000000000000000000000059d9ab9c68ef7357de1b96de91ce7c8f14bb8fe8000000000000000000000000f8e24ac99420f6576e136b570fd879ca6356721e0000000000000000000000008c93ee3c6ec37de3292df35b4bfdaed6a693fa160000000000000000000000002825fe488da71285a5736c7ae2c21a35446d322500000000000000000000000052edfe063ab3ba9ec0de11a44e3d35338c531e56000000000000000000000000fc28bcabfd9ad2b5ada7f482f9bba6df1446623a0000000000000000000000003be95be03dc8e22c287c045d1e92cfc8ad8b3be40000000000000000000000000065b237ab86384de32331df8ae5a46463729830000000000000000000000000d9d30c8eb0923fe778b3372b3f511d8223d339cd0000000000000000000000005b9112f95ad564ee5df62de749264b3ce48f899d000000000000000000000000a9ad1ea2027c741322a3761266f4affeeb9b3de4000000000000000000000000d7ab4a54e2d99d3b979506f6469179ff555f10250000000000000000000000000fd3af73d34d2a18e56195e2589a1231206dbef2000000000000000000000000f5578cece5fec43f932e4b51adb81da545d3caaa0000000000000000000000002a790327168cc34c607af02923d5a0b60c37ab0a0000000000000000000000002f37aab4808d3cc985d868d516b48d63ec0834b000000000000000000000000059bbca737ae0a7e5d2ecb91b07c1b19ea612f52e000000000000000000000000920fcb7ba09e97daff210ad46e093d755554e7a7000000000000000000000000d252fcf298450f93ce2e64c8da11fc71231d0771000000000000000000000000848bfd0e34c580610385b004fe4b267b41ab97d7000000000000000000000000128eca5e9fa3c3d556197df4e82ef12315865c110000000000000000000000003255a865848255b428ca24f0b03fd0f8d93559a20000000000000000000000002a2e53a4f503c453311865e076752f557d09dff20000000000000000000000006d16e3fd2dabffca19ce4dca9a7ce343efa57d9a000000000000000000000000d01a40c59ef84f2b295eb18006a278eaefb24a3e000000000000000000000000f9a0cd0aab52e4b6edcb52388085ff0237b159e40000000000000000000000006d7bc43f6643441d1cbe3b432a9336dd2ae76bc70000000000000000000000008ad4f7eb4eae409e458119174266c8ff2f8d7aa900000000000000000000000046d377c4116dd1e9a3d7fb84a52763b9780fcc2100000000000000000000000002a7fe8b3178c7b7a94d6124b81400dc15ca9a7c0000000000000000000000000595a90011d65c33b2eb794fd19600a958579728000000000000000000000000911e0945cf9f44a1adb242490058f7d55e0782ad0000000000000000000000009589b2c136bb86cfcabec536d72729379cd9b46d00000000000000000000000045852d52fc45419f67aede1b1553409bb4169fa500000000000000000000000049a405dfc24d39bfae3f369e8b17328b0c55fa2c0000000000000000000000008c08294dfaba1f3a482c0bfdd8880a429164989d000000000000000000000000b7c7bada3bfd0e359f1688e01779861c1523787d000000000000000000000000ef3ab52c9f7b13332d90a0b3aa4d56233d62e4d10000000000000000000000004631dd875942ff2eb32a3da2ec07c16ca822490800000000000000000000000078a6d7b78ecaf05c842d75af31772f26dcf4693500000000000000000000000063f4566e966f4b8affd3be878b292fdf219db9fd000000000000000000000000b8d0c56f206c2faf1257a2e0cec016c87e2f4b3d000000000000000000000000b61b9d41ff6e3240c0f6f8b79cbd9a671b41914b00000000000000000000000039473e9b41da09396eae3bf87f7e28f19049ab14000000000000000000000000641813a0a19deeda4e251aff40dfeaa85333bb2d00000000000000000000000084f1c513379088705ed3a9da743505cd932bd855000000000000000000000000a7349586da2048125ad7f214269aa91cae7c9408000000000000000000000000fd1eee3d93d624ccb8e5aa06c735b2c58c1cfd29000000000000000000000000687fbc6f6a0d34bf07772e503e3765af900fb828000000000000000000000000adbd670b7f9b337d013db341c30db9f60b6bbe6300000000000000000000000037eeefc1b2ccf2ac6291f3be9f8aac1ca6e0a7a70000000000000000000000000d0a3e9680d7dd7baf71ca6fa17366766c3eabe500000000000000000000000000000000000000000000000000000000000000410000000000000000000000000000000000000000055a452a7df95d231ce000000000000000000000000000000000000000000000000da602cad43550e0800000000000000000000000000000000000000000000000084595161401484a000000000000000000000000000000000000000000000000034f086f3b33b684000000000000000000000000000000000000000000000000021165458500521280000000000000000000000000000000000000000000000000d3c21bcecceda100000000000000000000000000000000000000000000000000d3c21bcecceda100000000000000000000000000000000000000000000000000d3c21bcecceda100000000000000000000000000000000000000000000000000a968163f0a57b4000000000000000000000000000000000000000000000000009ed194db19b238c00000000000000000000000000000000000000000000000001fc3842bd1f071c00000000000000000000000000000000000000000000000001fc3842bd1f071c00000000000000000000000000000000000000000000000000a968163f0a57b400000000000000000000000000000000000000000000000cecb8f27f4200f3a00000000000000000000000000000000000000000000000090c1b1025e16710f0000000000000000000000000000000000000000000000006765c793fa10079d000000000000000000000000000000000000000000000000295be96e64066972000000000000000000000000000000000000000000000000295be96e64066972000000000000000000000000000000000000000000000000295be96e6406697200000000000000000000000000000000000000000000000018d0bf423c03d8de0000000000000000000000000000000000000000000000000c685fa11e01ec6f000000000000000000000000000000000000000000000000084595161401484a0000000000000000000000000000000000000000000000000422ca8b0a00a42500000000000000000000000000000000000000000000000003b8e97d229a2d54800000000000000000000000000000000000000000000000034f086f3b33b684000000000000000000000000000000000000000000000000027b46536c66c8e3000000000000000000000000000000000000000000000000027b46536c66c8e30000000000000000000000000000000000000000000000000211654585005212800000000000000000000000000000000000000000000000021165458500521280000000000000000000000000000000000000000000000002116545850052128000000000000000000000000000000000000000000000000211654585005212800000000000000000000000000000000000000000000000021165458500521280000000000000000000000000000000000000000000000001a784379d99db42000000000000000000000000000000000000000000000000013da329b6336471800000000000000000000000000000000000000000000000013da329b633647180000000000000000000000000000000000000000000000000d3c21bcecceda100000000000000000000000000000000000000000000000000d3c21bcecceda100000000000000000000000000000000000000000000000000d3c21bcecceda100000000000000000000000000000000000000000000000000d3c21bcecceda100000000000000000000000000000000000000000000000000c92b9a6adc4825c0000000000000000000000000000000000000000000000000a968163f0a57b4000000000000000000000000000000000000000000000000009ed194db19b238c000000000000000000000000000000000000000000000000089a49213386742400000000000000000000000000000000000000000000000007f0e10af47c1c7000000000000000000000000000000000000000000000000007f0e10af47c1c7000000000000000000000000000000000000000000000000007f0e10af47c1c70000000000000000000000000000000000000000000000000069e10de76676d08000000000000000000000000000000000000000000000000069e10de76676d08000000000000000000000000000000000000000000000000069e10de76676d08000000000000000000000000000000000000000000000000069e10de76676d08000000000000000000000000000000000000000000000000069e10de76676d0800000000000000000000000000000000000000000000000005f4a8c8375d155400000000000000000000000000000000000000000000000004a1d89bb94865ec00000000000000000000000000000000000000000000000003b4ad496106b7f00000000000000000000000000000000000000000000000000261dd1ce2f2088800000000000000000000000000000000000000000000000001fc3842bd1f071c0000000000000000000000000000000000000000000000000152d02c7e14af680000000000000000000000000000000000000000000000000152d02c7e14af680000000000000000000000000000000000000000000000000152d02c7e14af680000000000000000000000000000000000000000000000000152d02c7e14af680000000000000000000000000000000000000000000000000152d02c7e14af6800000000000000000000000000000000000000000000000000fe1c215e8f838e00000000000000000000000000000000000000000000000000ba58e545582d460000000000000000000000000000000000000000000000000065a4da25d3016c0000000000000000000000000000000000000000000000000054b40b1f852bda000000000000000000000000000000000000000000000000000000000000000000009576f726c64636f696e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003574c440000000000000000000000000000000000000000000000000000000000"}