ETH Price: $1,972.14 (+0.18%)
 

Overview

Max Total Supply

30,930.559271893236142862 CANA

Holders

207 (0.00%)

Market

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
First Digital USD: FDUSD Token
Balance
0.01 CANA

Value
$0.00
0xc5f0f7b66764f6ec8c8dff7ba683102295e16409
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

CANA is a DeFi-compatible ERC-20 token backed 1:1 by California Carbon Allowances (CCAs), a regulated commodity with a CPI+5% price floor.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
MaseerOne

Compiler Version
v0.8.30+commit.73712a01

Optimization Enabled:
Yes with 21000 runs

Other Settings:
cancun EvmVersion
File 1 of 2 : MaseerOne.sol
// SPDX-License-Identifier: BUSL-1.1
// Copyright (c) 2025 Maseer LTD
//
// This file is subject to the Business Source License 1.1.
// You may not use this file except in compliance with the License.
//
// You may obtain a copy of the License at:
// https://github.com/Maseer-LTD/maseer-one/blob/master/LICENSE
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
pragma solidity ^0.8.28;

import {MaseerToken} from "./MaseerToken.sol";

interface Gem {
    function transfer(address usr, uint256 wad) external returns (bool);
    function transferFrom(address src, address dst, uint256 wad) external returns (bool);
    function balanceOf(address account) external view returns (uint256);
}

interface Cop {
    function pass(address usr) external view returns (bool);
}

interface Pip {
    function read() external view returns (uint256);
}

interface Act {
    function mintable() external view returns (bool);
    function burnable() external view returns (bool);
    function cooldown() external view returns (uint256);
    function capacity() external view returns (uint256);
    function mintcost(uint256) external view returns (uint256);
    function burncost(uint256) external view returns (uint256);
    function terms() external view returns (string memory);
}

interface Adm {
    function issuer(address usr) external view returns (bool);
}

// ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
// :==============================================================:
// :==============================================================:
// :==============================================================:
// :==============================================================:
// :==============================================================:
// :============@@@@@@@@@@@=@@@@@@==@@@@@@========================:
// :===========@@.........@@@.....@@@....@========================:
// :===========@........@@@.....@@@....@@@========================:
// :===========@......@@@.....@@@.....@@@=========================:
// :===========@....@@@:....@@@.....@@@===========================:
// :===========@..:@@@....@@@-....@@@=============================:
// :===========@:@@@....@@@@....@@@===============================:
// :===========@@@....@@@@....@@@=================================:
// :===========@.....@@@....@@@===================================:
// :===========@...@@@....:@@@====================================:
// :===========@:@@@.....@@@====@@@@@@@@@@====@@@@@@@@@===========:
// :===========@@@.....@@@======@........@+==@@.......@===========:
// :===========@:....@@@========@........@@==@........@===========:
// :===========@...@@@==========@.........@=@@........@===========:
// :===========@.@@@============@.........@@@.........@===========:
// :===========@@@==============@..........@..........@===========:
// :============================@..........#..........@===========:
// :============================@.....................@===========:
// :============================@.....................@===========:
// :============================@......@.......@......@===========:
// :============================@......@@......@......@===========:
// :============================@......@@.....@@......@===========:
// :============================*@@@@@@*#@@@@@#*@@@@@@*===========:
// :==============================================================:
// :==============================================================:
// :==============================================================:
// :==============================================================:
// :==============================================================:
// ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
contract MaseerOne is MaseerToken {

    address immutable public gem;  // Purchase token
    address immutable public pip;  // Oracle price feed
    address immutable public act;  // Market timing feed
    address immutable public adm;  // Issuer control
    address immutable public cop;  // Compliance feed
    address immutable public flo;  // Output conduit

    uint256                         public totalPending;
    uint256                         public redemptionCount;
    mapping (uint256 => Redemption) public redemptions;

    struct Redemption {
        uint256 amount;
        address redeemer;
        uint96  date;
    }

    event ContractCreated(
        address indexed creator,
        uint256 indexed price,
        uint256 indexed amount
    );
    event ContractRedemption(
        uint256 indexed id,
        uint256 indexed date,
        address indexed redeemer,
        uint256         amount
    );
    event ClaimProcessed(
        uint256 indexed id,
        address indexed claimer,
        uint256 indexed amount
    );
    event Settled(
        address indexed conduit,
        uint256 indexed amount
    );
    event Issued(
        address indexed issuer,
        uint256 indexed amount
    );
    event Smelted(
        address indexed smelter,
        uint256 indexed amount
    );

    error NotAuthorized(address usr);
    error TransferToContract();
    error TransferToZeroAddress();
    error TransferFailed();
    error MarketClosed();
    error InvalidPrice();
    error ExceedsCap();
    error ClaimableAfter(uint256 time);
    error NoPendingClaim();
    error DustThreshold(uint256 min);

    constructor(
        address gem_,
        address pip_,
        address act_,
        address adm_,
        address cop_,
        address flo_,
        string memory name_,
        string memory symbol_
    ) MaseerToken(name_, symbol_) {
        gem = gem_;
        pip = pip_;
        act = act_;
        adm = adm_;
        cop = cop_;
        flo = flo_;
    }

    modifier pass(address usr_) {
        if (!_canPass(usr_)) revert NotAuthorized(usr_);
        _;
    }

    modifier mintlive() {
        if (!mintable()) revert MarketClosed();
        _;
    }

    modifier burnlive() {
        if (!burnable()) revert MarketClosed();
        _;
    }

    modifier issuer() {
        if (!Adm(adm).issuer(msg.sender)) revert NotAuthorized(msg.sender);
        _;
    }

    function mint(uint256 amt) external mintlive pass(msg.sender) returns (uint256 _out) {
        // Oracle price check
        uint256 _unit = _read();

        // Revert if the price is zero
        if (_unit == 0) revert InvalidPrice();

        // Adjust the price for minting
        _unit = _mintcost(_unit);

        // Assert minimum purchase amount of one unit to avoid dust
        if (amt < _unit) revert DustThreshold(_unit);

        // Calculate the mint amount
        _out = _wdiv(amt, _unit);

        // Revert if the total supply after mint exceeds the cap
        if (totalSupply + _out > _capacity()) revert ExceedsCap();

        // Transfer tokens in
        _safeTransferFrom(gem, msg.sender, address(this), amt);

        // Mint the tokens
        _mint(msg.sender, _out);

        // Emit contract event
        emit ContractCreated(msg.sender, _unit, _out);
    }

    function redeem(uint256 amt) external burnlive pass(msg.sender) returns (uint256 _id) {
        // Assert minimum redemption amount of one token to avoid dust
        if (amt < WAD) revert DustThreshold(WAD);

        // Oracle price check
        uint256 _unit = _read();

        // Revert if the price is zero
        if (_unit == 0) revert InvalidPrice();

        // Adjust the price for redemption
        _unit = _burncost(_unit);

        // Calculate the redemption amount
        uint256 _claim = _wmul(amt, _unit);

        // Add to the total pending redemptions
        totalPending += _claim;

        // Assign a new redemption ID
        _id = redemptionCount++;

        // Calculate the redemption date
        uint96 _time = uint96(block.timestamp + _cooldown());

        // Store the redemption
        redemptions[_id] = Redemption({
            amount:   _claim,
            redeemer: msg.sender,
            date:     _time
        });

        // Burn the tokens
        _burn(msg.sender, amt);

        // Emit contract event
        emit ContractRedemption(_id, _time, msg.sender, _claim);
    }

    function exit(uint256 id) external pass(msg.sender) returns (uint256 _out) {
        Redemption storage _redemption = redemptions[id];

        uint256 _time = _redemption.date;

        // Check if the claim is past the redemption period
        if (_time > block.timestamp) revert ClaimableAfter(_time);
        if (_time == 0) revert NoPendingClaim();

        uint256 _amt = _redemption.amount;
        uint256 _bal = _gemBalance();
        // User can claim the amount owed or current available balance
        _out = (_amt < _bal) ? _amt : _bal;

        // Decrement the total pending redemptions
        // Decrement the user's pending redemptions
        unchecked {
            totalPending -= _out;
            _redemption.amount -= _out;
        }

        // Transfer the tokens
        _safeTransfer(gem, _redemption.redeemer, _out);

        // Emit claim
        emit ClaimProcessed(id, _redemption.redeemer, _out);
    }

    function settle() external pass(msg.sender) returns (uint256 _out) {
        // Get the gem balance
        uint256 _bal = _gemBalance();
        uint256 _pnd = totalPending;

        // Return 0 if the balance is reserved for pending claims
        if (_bal <= _pnd) return 0;

        // Calculate the balance after pending redemptions
        unchecked {
            _out = _bal - _pnd;
        }

        // Send the remaining balance to the output conduit
        _safeTransfer(gem, flo, _out);

        // Emit settle
        emit Settled(flo, _out);
    }

    // Issuer function for minting assets or bridging
    function issue(uint256 amt) external issuer pass(msg.sender) {
        _mint(msg.sender, amt);

        emit Issued(msg.sender, amt);
    }

    // Issuer smelting function to burn for a specific user
    function smelt(address usr, uint256 amt) external issuer pass(msg.sender) {
        _burn(usr, amt);

        emit Smelted(usr, amt);
    }

    // User-level smelting function for burning tokens
    function smelt(uint256 amt) external pass(msg.sender) {
        _burn(msg.sender, amt);

        emit Smelted(msg.sender, amt);
    }

    // View functions

    function mintable() public view returns (bool) {
        return Act(act).mintable();
    }

    function burnable() public view returns (bool) {
        return Act(act).burnable();
    }

    function canPass(address usr) external view returns (bool) {
        return _canPass(usr);
    }

    function cooldown() external view returns (uint256) {
        return _cooldown();
    }

    function navprice() external view returns (uint256) {
        return _read();
    }

    function mintcost() external view returns (uint256) {
        return _mintcost(_read());
    }

    function burncost() external view returns (uint256) {
        return _burncost(_read());
    }

    function capacity() external view returns (uint256) {
        return _capacity();
    }

    function terms() external view returns (string memory) {
        return Act(act).terms();
    }

    function redemptionAddr(uint256 id) external view returns (address) {
        return redemptions[id].redeemer;
    }

    function redemptionDate(uint256 id) external view returns (uint256) {
        return redemptions[id].date;
    }

    function redemptionAmount(uint256 id) external view returns (uint256) {
        return redemptions[id].amount;
    }

    function unsettled() external view returns (uint256) {
        uint256 _bal = _gemBalance();
        return (_bal < totalPending) ? 0 : _bal - totalPending;
    }

    function obligated() external view returns (uint256) {
        uint256 _bal = _gemBalance();
        return (_bal > totalPending) ? 0 : totalPending - _bal;
    }

    // Token overrides for compliance

    function approve(address usr) public override pass(msg.sender) pass(usr) returns (bool) {
        return super.approve(usr);
    }

    function approve(address usr, uint256 wad) public override pass(msg.sender) pass(usr) returns (bool) {
        return super.approve(usr, wad);
    }

    function transfer(address dst, uint256 wad) public override pass(msg.sender) pass(dst) returns (bool) {
        if (dst == address(this)) revert TransferToContract();
        return super.transfer(dst, wad);
    }

    function transferFrom(address src, address dst, uint256 wad) public override pass(msg.sender) pass(src) pass(dst) returns (bool) {
        if (dst == address(this)) revert TransferToContract();
        return super.transferFrom(src, dst, wad);
    }

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8   v,
        bytes32 r,
        bytes32 s
    ) public override pass(msg.sender) pass(owner) pass(spender) {
        super.permit(owner, spender, value, deadline, v, r, s);
    }

    // Internal utility functions

    function _canPass(address _usr) internal view returns (bool) {
        return Cop(cop).pass(_usr);
    }

    function _cooldown() internal view returns (uint256) {
        return Act(act).cooldown();
    }

    function _mintcost(uint256 _price) internal view returns (uint256) {
        return Act(act).mintcost(_price);
    }

    function _burncost(uint256 _price) internal view returns (uint256) {
        return Act(act).burncost(_price);
    }

    function _capacity() internal view returns (uint256) {
        return Act(act).capacity();
    }

    function _read() internal view returns (uint256) {
        return Pip(pip).read();
    }

    function _gemBalance() internal view returns (uint256) {
        return Gem(gem).balanceOf(address(this));
    }

    function _wdiv(uint256 x, uint256 y) internal pure returns (uint256 z) {
        z = (x * WAD) / y;
    }

    function _wmul(uint256 x, uint256 y) internal pure returns (uint256 z) {
        z = (x * y) / WAD;
    }

    function _safeTransfer(address _token, address _to, uint256 _amt) internal {
        (bool success, bytes memory data) = _token.call(abi.encodeWithSelector(Gem.transfer.selector, _to, _amt));
        if (!success || (data.length > 0 && abi.decode(data, (bool)) == false)) revert TransferFailed();
    }

    function _safeTransferFrom(address _token, address _from, address _to, uint256 _amt) internal {
        (bool success, bytes memory data) = _token.call(abi.encodeWithSelector(Gem.transferFrom.selector, _from, _to, _amt));
        if (!success || (data.length > 0 && abi.decode(data, (bool)) == false)) revert TransferFailed();
    }
}

// SPDX-License-Identifier: BUSL-1.1
// Copyright (c) 2025 Maseer LTD
//
// This file is subject to the Business Source License 1.1.
// You may not use this file except in compliance with the License.
//
// You may obtain a copy of the License at:
// https://github.com/Maseer-LTD/maseer-one/blob/master/LICENSE
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
pragma solidity ^0.8.28;

abstract contract MaseerToken {

    // ERC-20
    uint256                                           public totalSupply;
    mapping (address => uint256)                      public balanceOf;
    mapping (address => mapping (address => uint256)) public allowance;
    string                                            public name;
    string                                            public symbol;
    uint8                                    constant public decimals = 18; // standard token precision.

    uint256                                  constant internal WAD = 1e18;

    // EIP-2612
    bytes32 immutable         internal INITIAL_DOMAIN_SEPARATOR;
    uint256 immutable         internal INITIAL_CHAIN_ID;
    mapping(address => uint256) public nonces;

    constructor(string memory name_, string memory symbol_) {
        name   = name_;
        symbol = symbol_;

        INITIAL_CHAIN_ID = block.chainid;
        INITIAL_DOMAIN_SEPARATOR = _computeDomainSeparator();
    }

    event Approval(address indexed src, address indexed usr, uint256 wad);
    event Transfer(address indexed src, address indexed dst, uint256 wad);

    error InvalidChain(uint256 expected, uint256 actual);
    error PermitDeadlineExpired(uint256 deadline, uint256 actual);
    error InvalidSigner(address recovered, address expected);

    function approve(address usr) public virtual returns (bool) {
        return approve(usr, type(uint256).max);
    }

    function approve(address usr, uint256 wad) public virtual returns (bool) {
        allowance[msg.sender][usr] = wad;

        emit Approval(msg.sender, usr, wad);

        return true;
    }

    function transfer(address dst, uint256 wad) public virtual returns (bool) {
        balanceOf[msg.sender] -= wad;

        // Cannot overflow because balance
        //   can't exceed totalSupply
        unchecked {
            balanceOf[dst] += wad;
        }

        emit Transfer(msg.sender, dst, wad);

        return true;
    }

    function transferFrom(address src, address dst, uint256 wad)
        public virtual
        returns (bool)
    {
        uint256 _allowance = allowance[src][msg.sender];
        if (_allowance != type(uint256).max) {
            allowance[src][msg.sender] = _allowance - wad;
        }

        balanceOf[src] -= wad;
        balanceOf[dst] += wad;

        emit Transfer(src, dst, wad);

        return true;
    }

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8   v,
        bytes32 r,
        bytes32 s
    ) public virtual {
        if (deadline < block.timestamp) revert PermitDeadlineExpired(deadline, block.timestamp);

        // Unchecked because the owner's nonce is uint256 which cannot realistically overflow.
        unchecked {
            address recoveredAddress = ecrecover(
                keccak256(
                    abi.encodePacked(
                        "\x19\x01",
                        DOMAIN_SEPARATOR(),
                        keccak256(
                            abi.encode(
                                keccak256(
                                    "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"
                                ),
                                owner,
                                spender,
                                value,
                                nonces[owner]++,
                                deadline
                            )
                        )
                    )
                ),
                v,
                r,
                s
            );

            if (recoveredAddress == address(0) || recoveredAddress != owner) revert InvalidSigner(recoveredAddress, owner);

            allowance[recoveredAddress][spender] = value;
        }

        emit Approval(owner, spender, value);
    }

    function _mint(address usr, uint256 wad) internal {
        totalSupply += wad;
        // Cannot overflow
        unchecked {
            balanceOf[usr] += wad;
        }
        emit Transfer(address(0), usr, wad);
    }

    function _burn(address usr, uint256 wad) internal {
        balanceOf[usr] -= wad;
        // Cannot overflow
        unchecked {
            totalSupply -= wad;
        }
        emit Transfer(usr, address(0), wad);
    }

    function DOMAIN_SEPARATOR() public view returns (bytes32) {
        return (block.chainid == INITIAL_CHAIN_ID) ? INITIAL_DOMAIN_SEPARATOR : _computeDomainSeparator();
    }

    function _computeDomainSeparator() internal view returns (bytes32) {
        return keccak256(abi.encode(
            keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"),
            keccak256(bytes(name)),
            keccak256(bytes("1")),
            block.chainid,
            address(this)
        ));
    }
}

Settings
{
  "remappings": [
    "forge-std/=lib/forge-std/src/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 21000
  },
  "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "ipfs",
    "appendCBOR": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "cancun",
  "viaIR": false,
  "libraries": {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"gem_","type":"address"},{"internalType":"address","name":"pip_","type":"address"},{"internalType":"address","name":"act_","type":"address"},{"internalType":"address","name":"adm_","type":"address"},{"internalType":"address","name":"cop_","type":"address"},{"internalType":"address","name":"flo_","type":"address"},{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"ClaimableAfter","type":"error"},{"inputs":[{"internalType":"uint256","name":"min","type":"uint256"}],"name":"DustThreshold","type":"error"},{"inputs":[],"name":"ExceedsCap","type":"error"},{"inputs":[{"internalType":"uint256","name":"expected","type":"uint256"},{"internalType":"uint256","name":"actual","type":"uint256"}],"name":"InvalidChain","type":"error"},{"inputs":[],"name":"InvalidPrice","type":"error"},{"inputs":[{"internalType":"address","name":"recovered","type":"address"},{"internalType":"address","name":"expected","type":"address"}],"name":"InvalidSigner","type":"error"},{"inputs":[],"name":"MarketClosed","type":"error"},{"inputs":[],"name":"NoPendingClaim","type":"error"},{"inputs":[{"internalType":"address","name":"usr","type":"address"}],"name":"NotAuthorized","type":"error"},{"inputs":[{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint256","name":"actual","type":"uint256"}],"name":"PermitDeadlineExpired","type":"error"},{"inputs":[],"name":"TransferFailed","type":"error"},{"inputs":[],"name":"TransferToContract","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"src","type":"address"},{"indexed":true,"internalType":"address","name":"usr","type":"address"},{"indexed":false,"internalType":"uint256","name":"wad","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":true,"internalType":"address","name":"claimer","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ClaimProcessed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"creator","type":"address"},{"indexed":true,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ContractCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"date","type":"uint256"},{"indexed":true,"internalType":"address","name":"redeemer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ContractRedemption","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"issuer","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Issued","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"conduit","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Settled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"smelter","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Smelted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"src","type":"address"},{"indexed":true,"internalType":"address","name":"dst","type":"address"},{"indexed":false,"internalType":"uint256","name":"wad","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"act","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"adm","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"usr","type":"address"},{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"usr","type":"address"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burncost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"usr","type":"address"}],"name":"canPass","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"capacity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cooldown","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cop","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"exit","outputs":[{"internalType":"uint256","name":"_out","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flo","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gem","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"issue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"mint","outputs":[{"internalType":"uint256","name":"_out","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintcost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"navprice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"obligated","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pip","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"redeem","outputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"redemptionAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"redemptionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"redemptionCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"redemptionDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"redemptions","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"redeemer","type":"address"},{"internalType":"uint96","name":"date","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"settle","outputs":[{"internalType":"uint256","name":"_out","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"smelt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"usr","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"smelt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"terms","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalPending","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unsettled","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

610180604052348015610010575f5ffd5b506040516132e63803806132e683398101604081905261002f916101f5565b8181600361003d8382610340565b50600461004a8282610340565b504660a05261005761008f565b6080525050506001600160a01b0396871660c0525093851660e05291841661010052831661012052821661014052166101605261046b565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60036040516100c091906103fa565b60408051918290038220828201825260018352603160f81b6020938401528151928301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b80516001600160a01b0381168114610153575f5ffd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011261017b575f5ffd5b81516001600160401b0381111561019457610194610158565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101c2576101c2610158565b6040528181528382016020018510156101d9575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f5f5f5f5f5f5f5f610100898b03121561020d575f5ffd5b6102168961013d565b975061022460208a0161013d565b965061023260408a0161013d565b955061024060608a0161013d565b945061024e60808a0161013d565b935061025c60a08a0161013d565b60c08a01519093506001600160401b03811115610277575f5ffd5b6102838b828c0161016c565b60e08b015190935090506001600160401b038111156102a0575f5ffd5b6102ac8b828c0161016c565b9150509295985092959890939650565b600181811c908216806102d057607f821691505b6020821081036102ee57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561033b57805f5260205f20601f840160051c810160208510156103195750805b601f840160051c820191505b81811015610338575f8155600101610325565b50505b505050565b81516001600160401b0381111561035957610359610158565b61036d8161036784546102bc565b846102f4565b6020601f82116001811461039f575f83156103885750848201515b5f19600385901b1c1916600184901b178455610338565b5f84815260208120601f198516915b828110156103ce57878501518255602094850194600190920191016103ae565b50848210156103eb57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f5f8354610407816102bc565b60018216801561041e576001811461043357610460565b60ff1983168652811515820286019350610460565b865f5260205f205f5b838110156104585781548882015260019091019060200161043c565b505081860193505b509195945050505050565b60805160a05160c05160e05161010051610120516101405161016051612da961053d5f395f818161039701528181610946015261098701525f81816104d50152611adb01525f81816102e10152818161129c015261142901525f818161072c01528181610c40015281816110fd01528181611575015281816120820152818161218401528181612206015261229e01525f81816106ad01526120ec01525f818161052b0152818161092501528181610e5f015281816110940152611bee01525f610be601525f610c1b0152612da95ff3fe608060405234801561000f575f5ffd5b50600436106102d8575f3560e01c806370a0823111610187578063ad1a2396116100dd578063d741e2f911610093578063dd62ed3e1161006e578063dd62ed3e146106f5578063ede750941461071f578063ee42b10b14610727575f5ffd5b8063d741e2f9146106a8578063daea85c5146106cf578063db006a75146106e2575f5ffd5b8063cc872b66116100c3578063cc872b661461067a578063d50256251461068d578063d505accf14610695575f5ffd5b8063ad1a2396146105c5578063beb65893146105d8575f5ffd5b806394c3cbf41161013d578063a0712d6811610118578063a0712d6814610597578063a07c7ce4146105aa578063a9059cbb146105b2575f5ffd5b806394c3cbf41461057f57806395d89b4114610587578063973efb5c1461058f575f5ffd5b80637bd2bea71161016d5780637bd2bea7146105265780637ecebe001461054d5780637f8661a11461056c575f5ffd5b806370a08231146104ff578063787a08a61461051e575f5ffd5b806326ea37991161023c5780634bf365df116101f25780635cfc1a51116101cd5780635cfc1a51146104c85780635f7efbea146104d05780636c96474f146104f7575f5ffd5b80634bf365df146104805780634d773aa61461048857806351f5d98d14610490575f5ffd5b80633644e515116102225780633644e515146104275780633f90916a1461042f57806342c4a1aa14610438575f5ffd5b806326ea379914610404578063313ce5671461040d575f5ffd5b806311da60b411610291578063219df1cc11610277578063219df1cc146103c957806323b872dd146103de578063248c11f5146103f1575f5ffd5b806311da60b4146103b957806318160ddd146103c1575f5ffd5b806306ff7a41116102c157806306ff7a4114610342578063095ea7b31461036f5780630a77bd4914610392575f5ffd5b806304d7aef2146102dc57806306fdde031461032d575b5f5ffd5b6103037f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61033561074e565b6040516103249190612862565b6103616103503660046128b5565b5f9081526008602052604090205490565b604051908152602001610324565b61038261037d3660046128f4565b6107da565b6040519015158152602001610324565b6103037f000000000000000000000000000000000000000000000000000000000000000081565b6103616108a3565b6103615f5481565b6103dc6103d73660046128b5565b6109d3565b005b6103826103ec36600461291c565b610a65565b6103826103ff366004612956565b610bd3565b61036160075481565b610415601281565b60405160ff9091168152602001610324565b610361610be3565b61036160065481565b6103616104463660046128b5565b5f908152600860205260409020600101547401000000000000000000000000000000000000000090046bffffffffffffffffffffffff1690565b610382610c3d565b610361610ccb565b61030361049e3660046128b5565b5f9081526008602052604090206001015473ffffffffffffffffffffffffffffffffffffffff1690565b610361610cfb565b6103037f000000000000000000000000000000000000000000000000000000000000000081565b610361610d04565b61036161050d366004612956565b60016020525f908152604090205481565b610361610d15565b6103037f000000000000000000000000000000000000000000000000000000000000000081565b61036161055b366004612956565b60056020525f908152604090205481565b61036161057a3660046128b5565b610d1e565b610361610eed565b610335610efe565b610361610f0b565b6103616105a53660046128b5565b610f14565b6103826110fa565b6103826105c03660046128f4565b611164565b6103dc6105d33660046128f4565b61126e565b61063c6105e63660046128b5565b60086020525f90815260409020805460019091015473ffffffffffffffffffffffffffffffffffffffff8116907401000000000000000000000000000000000000000090046bffffffffffffffffffffffff1683565b6040805193845273ffffffffffffffffffffffffffffffffffffffff90921660208401526bffffffffffffffffffffffff1690820152606001610324565b6103dc6106883660046128b5565b6113fb565b610335611571565b6103dc6106a336600461296f565b611620565b6103037f000000000000000000000000000000000000000000000000000000000000000081565b6103826106dd366004612956565b611743565b6103616106f03660046128b5565b611805565b6103616107033660046129dc565b600260209081525f928352604080842090915290825290205481565b610361611a72565b6103037f000000000000000000000000000000000000000000000000000000000000000081565b6003805461075b90612a0d565b80601f016020809104026020016040519081016040528092919081815260200182805461078790612a0d565b80156107d25780601f106107a9576101008083540402835291602001916107d2565b820191905f5260205f20905b8154815290600101906020018083116107b557829003601f168201915b505050505081565b5f336107e581611a94565b610838576040517f4a0bfec100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024015b60405180910390fd5b8361084281611a94565b610890576040517f4a0bfec100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260240161082f565b61089a8585611b46565b95945050505050565b5f336108ae81611a94565b6108fc576040517f4a0bfec100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260240161082f565b5f610905611bbe565b60065490915080821161091b575f935050505090565b808203935061096b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000086611c6c565b604051849073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016907f7823e479a1a4ebe2418874847436f8a1680c5ee5b17f38bb59dbff28e1b45552905f90a350505090565b336109dd81611a94565b610a2b576040517f4a0bfec100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260240161082f565b610a353383611dac565b604051829033907f266ba2fe22d2b352fe1eb8c45b5d486ff3c0b83ef953959b6d34397d53fb088d905f90a35050565b5f33610a7081611a94565b610abe576040517f4a0bfec100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260240161082f565b84610ac881611a94565b610b16576040517f4a0bfec100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260240161082f565b84610b2081611a94565b610b6e576040517f4a0bfec100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260240161082f565b3073ffffffffffffffffffffffffffffffffffffffff871603610bbd576040517f3a49fd5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bc8878787611e3d565b979650505050505050565b5f610bdd82611a94565b92915050565b5f7f00000000000000000000000000000000000000000000000000000000000000004614610c1857610c13611fb5565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634bf365df6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ca7573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c139190612a5e565b5f5f610cd5611bbe565b90506006548111610cf35780600654610cee9190612aaa565b610cf5565b5f5b91505090565b5f610c1361207f565b5f610c13610d106120e9565b612153565b5f610c13612203565b5f33610d2981611a94565b610d77576040517f4a0bfec100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260240161082f565b5f83815260086020526040902060018101547401000000000000000000000000000000000000000090046bffffffffffffffffffffffff1642811115610dec576040517f774cceca0000000000000000000000000000000000000000000000000000000081526004810182905260240161082f565b805f03610e25576040517f9b604d0b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81545f610e30611bbe565b9050808210610e3f5780610e41565b815b600680548290039055845481900385556001850154909650610e9b907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff1688611c6c565b6001840154604051879173ffffffffffffffffffffffffffffffffffffffff169089907f786e090d783caced3baddcb29bd555ffb93faf484529ab87feab4ec4c48a81e1905f90a45050505050919050565b5f610c13610ef96120e9565b61226d565b6004805461075b90612a0d565b5f610c136120e9565b5f610f1d610c3d565b610f53576040517f0b5f6bf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33610f5d81611a94565b610fab576040517f4a0bfec100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260240161082f565b5f610fb46120e9565b9050805f03610fee576040517ebfc92100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ff78161226d565b905080841015611036576040517fa4a050250000000000000000000000000000000000000000000000000000000081526004810182905260240161082f565b61104084826122e2565b925061104a61207f565b835f546110579190612abd565b111561108f576040517f2edaff4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110bb7f0000000000000000000000000000000000000000000000000000000000000000333087612307565b6110c53384612450565b6040518390829033907f58781ca443f8e3ecffad28c83044b16c6e549d8e9c677aebb3b8ee176f99f53f905f90a45050919050565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a07c7ce46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ca7573d5f5f3e3d5ffd5b5f3361116f81611a94565b6111bd576040517f4a0bfec100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260240161082f565b836111c781611a94565b611215576040517f4a0bfec100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260240161082f565b3073ffffffffffffffffffffffffffffffffffffffff861603611264576040517f3a49fd5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61089a85856124be565b6040517f5711caaf0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635711caaf90602401602060405180830381865afa1580156112f6573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061131a9190612a5e565b611352576040517f4a0bfec100000000000000000000000000000000000000000000000000000000815233600482015260240161082f565b3361135c81611a94565b6113aa576040517f4a0bfec100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260240161082f565b6113b48383611dac565b604051829073ffffffffffffffffffffffffffffffffffffffff8516907f266ba2fe22d2b352fe1eb8c45b5d486ff3c0b83ef953959b6d34397d53fb088d905f90a3505050565b6040517f5711caaf0000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635711caaf90602401602060405180830381865afa158015611483573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114a79190612a5e565b6114df576040517f4a0bfec100000000000000000000000000000000000000000000000000000000815233600482015260240161082f565b336114e981611a94565b611537576040517f4a0bfec100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260240161082f565b6115413383612450565b604051829033907fa59f12e354e8cd10bb74c559844c2dd69a5458e31fe56c7594c62ca57480509a905f90a35050565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d50256256040518163ffffffff1660e01b81526004015f60405180830381865afa1580156115db573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610c139190810190612afd565b3361162a81611a94565b611678576040517f4a0bfec100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260240161082f565b8761168281611a94565b6116d0576040517f4a0bfec100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260240161082f565b876116da81611a94565b611728576040517f4a0bfec100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260240161082f565b6117378a8a8a8a8a8a8a612541565b50505050505050505050565b5f3361174e81611a94565b61179c576040517f4a0bfec100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260240161082f565b826117a681611a94565b6117f4576040517f4a0bfec100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260240161082f565b6117fd84612823565b949350505050565b5f61180e6110fa565b611844576040517f0b5f6bf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3361184e81611a94565b61189c576040517f4a0bfec100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260240161082f565b670de0b6b3a76400008310156118e8576040517fa4a05025000000000000000000000000000000000000000000000000000000008152670de0b6b3a7640000600482015260240161082f565b5f6118f16120e9565b9050805f0361192b576040517ebfc92100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61193481612153565b90505f611941858361284e565b90508060065f8282546119549190612abd565b909155505060078054905f61196883612bed565b9190505593505f611977612203565b6119819042612abd565b604080516060810182528481523360208083018281526bffffffffffffffffffffffff8087168587019081525f8d81526008909452959092209351845551935116740100000000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff9390931692909217600190910155909150611a099087611dac565b3373ffffffffffffffffffffffffffffffffffffffff16816bffffffffffffffffffffffff16867f5a084092180e1b482afdddc2a20027f4d3619225151fb1a9934c119cd7307f3285604051611a6191815260200190565b60405180910390a450505050919050565b5f5f611a7c611bbe565b90506006548110610cf357600654610cee9082612aaa565b6040517f82c4b3b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301525f917f0000000000000000000000000000000000000000000000000000000000000000909116906382c4b3b290602401602060405180830381865afa158015611b22573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bdd9190612a5e565b335f81815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590611bad9086815260200190565b60405180910390a350600192915050565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015611c48573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c139190612c24565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905291515f92839290871691611d029190612c3b565b5f604051808303815f865af19150503d805f8114611d3b576040519150601f19603f3d011682016040523d82523d5f602084013e611d40565b606091505b5091509150811580611d6e57505f8151118015611d6e575080806020019051810190611d6c9190612a5e565b155b15611da5576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526001602052604081208054839290611de0908490612aaa565b90915550505f8054829003815560405182815273ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526002602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611ecf57611e9e8382612aaa565b73ffffffffffffffffffffffffffffffffffffffff86165f9081526002602090815260408083203384529091529020555b73ffffffffffffffffffffffffffffffffffffffff85165f9081526001602052604081208054859290611f03908490612aaa565b909155505073ffffffffffffffffffffffffffffffffffffffff84165f9081526001602052604081208054859290611f3c908490612abd565b925050819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051611fa291815260200190565b60405180910390a3506001949350505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6003604051611fe69190612c51565b604080519182900382208282018252600183527f31000000000000000000000000000000000000000000000000000000000000006020938401528151928301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635cfc1a516040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c48573d5f5f3e3d5ffd5b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166357de26a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c48573d5f5f3e3d5ffd5b6040517fef86cf56000000000000000000000000000000000000000000000000000000008152600481018290525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063ef86cf56906024015b602060405180830381865afa1580156121df573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bdd9190612c24565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663787a08a66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c48573d5f5f3e3d5ffd5b6040517f5c4f46ed000000000000000000000000000000000000000000000000000000008152600481018290525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690635c4f46ed906024016121c4565b5f816122f6670de0b6b3a764000085612d24565b6123009190612d3b565b9392505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905291515f928392908816916123a59190612c3b565b5f604051808303815f865af19150503d805f81146123de576040519150601f19603f3d011682016040523d82523d5f602084013e6123e3565b606091505b509150915081158061241157505f815111801561241157508080602001905181019061240f9190612a5e565b155b15612448576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b805f5f8282546124609190612abd565b909155505073ffffffffffffffffffffffffffffffffffffffff82165f818152600160209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611e31565b335f908152600160205260408120805483919083906124de908490612aaa565b909155505073ffffffffffffffffffffffffffffffffffffffff83165f81815260016020526040908190208054850190555133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611bad9086815260200190565b42841015612584576040517fc4773cba0000000000000000000000000000000000000000000000000000000081526004810185905242602482015260440161082f565b5f600161258f610be3565b73ffffffffffffffffffffffffffffffffffffffff8a81165f8181526005602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e0830190915280519201919091207f190100000000000000000000000000000000000000000000000000000000000061010083015261010282019290925261012281019190915261014201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201205f84529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa1580156126dd573d5f5f3e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116158061275757508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b156127ae576040517f7ba5ffb500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301528916602482015260440161082f565b73ffffffffffffffffffffffffffffffffffffffff9081165f9081526002602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b5f610bdd827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6107da565b5f670de0b6b3a76400006122f68385612d24565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b5f602082840312156128c5575f5ffd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146128ef575f5ffd5b919050565b5f5f60408385031215612905575f5ffd5b61290e836128cc565b946020939093013593505050565b5f5f5f6060848603121561292e575f5ffd5b612937846128cc565b9250612945602085016128cc565b929592945050506040919091013590565b5f60208284031215612966575f5ffd5b612300826128cc565b5f5f5f5f5f5f5f60e0888a031215612985575f5ffd5b61298e886128cc565b965061299c602089016128cc565b95506040880135945060608801359350608088013560ff811681146129bf575f5ffd5b9699959850939692959460a0840135945060c09093013592915050565b5f5f604083850312156129ed575f5ffd5b6129f6836128cc565b9150612a04602084016128cc565b90509250929050565b600181811c90821680612a2157607f821691505b602082108103612a58577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b5f60208284031215612a6e575f5ffd5b81518015158114612300575f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b81810381811115610bdd57610bdd612a7d565b80820180821115610bdd57610bdd612a7d565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f60208284031215612b0d575f5ffd5b815167ffffffffffffffff811115612b23575f5ffd5b8201601f81018413612b33575f5ffd5b805167ffffffffffffffff811115612b4d57612b4d612ad0565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612bb957612bb9612ad0565b604052818152828201602001861015612bd0575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612c1d57612c1d612a7d565b5060010190565b5f60208284031215612c34575f5ffd5b5051919050565b5f82518060208501845e5f920191825250919050565b5f5f83545f8160011c90506001821680612c6c57607f821691505b602082108103612ca3577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b808015612cb75760018114612cea57612d18565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0084168752821515830287019450612d18565b5f888152602090205f5b84811015612d1057815489820152600190910190602001612cf4565b505082870194505b50929695505050505050565b8082028115828204841417610bdd57610bdd612a7d565b5f82612d6e577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b50049056fea264697066735822122059106cbf2d7123c48402cc6b33b94eb0603e790e371a35a5fda68b7c68f2d04564736f6c634300081e0033000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000e7c5c484a61cc93a638f67906a9900d94b40fda70000000000000000000000003a0de7a4678ca9341a63ffe78041385eda65b12800000000000000000000000000d2dc03b8207b2d261bda5d149dd7fcf3bdf8d7000000000000000000000000456e0074853cd23a3cdea3a1bb85575ed9b1a71800000000000000000000000012c8091a719125bf08875635c3ed738510c5614100000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000002743414e4120486f6c64696e67732043616c69666f726e696120436172626f6e204372656469747300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000443414e4100000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561000f575f5ffd5b50600436106102d8575f3560e01c806370a0823111610187578063ad1a2396116100dd578063d741e2f911610093578063dd62ed3e1161006e578063dd62ed3e146106f5578063ede750941461071f578063ee42b10b14610727575f5ffd5b8063d741e2f9146106a8578063daea85c5146106cf578063db006a75146106e2575f5ffd5b8063cc872b66116100c3578063cc872b661461067a578063d50256251461068d578063d505accf14610695575f5ffd5b8063ad1a2396146105c5578063beb65893146105d8575f5ffd5b806394c3cbf41161013d578063a0712d6811610118578063a0712d6814610597578063a07c7ce4146105aa578063a9059cbb146105b2575f5ffd5b806394c3cbf41461057f57806395d89b4114610587578063973efb5c1461058f575f5ffd5b80637bd2bea71161016d5780637bd2bea7146105265780637ecebe001461054d5780637f8661a11461056c575f5ffd5b806370a08231146104ff578063787a08a61461051e575f5ffd5b806326ea37991161023c5780634bf365df116101f25780635cfc1a51116101cd5780635cfc1a51146104c85780635f7efbea146104d05780636c96474f146104f7575f5ffd5b80634bf365df146104805780634d773aa61461048857806351f5d98d14610490575f5ffd5b80633644e515116102225780633644e515146104275780633f90916a1461042f57806342c4a1aa14610438575f5ffd5b806326ea379914610404578063313ce5671461040d575f5ffd5b806311da60b411610291578063219df1cc11610277578063219df1cc146103c957806323b872dd146103de578063248c11f5146103f1575f5ffd5b806311da60b4146103b957806318160ddd146103c1575f5ffd5b806306ff7a41116102c157806306ff7a4114610342578063095ea7b31461036f5780630a77bd4914610392575f5ffd5b806304d7aef2146102dc57806306fdde031461032d575b5f5ffd5b6103037f00000000000000000000000000d2dc03b8207b2d261bda5d149dd7fcf3bdf8d781565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61033561074e565b6040516103249190612862565b6103616103503660046128b5565b5f9081526008602052604090205490565b604051908152602001610324565b61038261037d3660046128f4565b6107da565b6040519015158152602001610324565b6103037f00000000000000000000000012c8091a719125bf08875635c3ed738510c5614181565b6103616108a3565b6103615f5481565b6103dc6103d73660046128b5565b6109d3565b005b6103826103ec36600461291c565b610a65565b6103826103ff366004612956565b610bd3565b61036160075481565b610415601281565b60405160ff9091168152602001610324565b610361610be3565b61036160065481565b6103616104463660046128b5565b5f908152600860205260409020600101547401000000000000000000000000000000000000000090046bffffffffffffffffffffffff1690565b610382610c3d565b610361610ccb565b61030361049e3660046128b5565b5f9081526008602052604090206001015473ffffffffffffffffffffffffffffffffffffffff1690565b610361610cfb565b6103037f000000000000000000000000456e0074853cd23a3cdea3a1bb85575ed9b1a71881565b610361610d04565b61036161050d366004612956565b60016020525f908152604090205481565b610361610d15565b6103037f000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec781565b61036161055b366004612956565b60056020525f908152604090205481565b61036161057a3660046128b5565b610d1e565b610361610eed565b610335610efe565b610361610f0b565b6103616105a53660046128b5565b610f14565b6103826110fa565b6103826105c03660046128f4565b611164565b6103dc6105d33660046128f4565b61126e565b61063c6105e63660046128b5565b60086020525f90815260409020805460019091015473ffffffffffffffffffffffffffffffffffffffff8116907401000000000000000000000000000000000000000090046bffffffffffffffffffffffff1683565b6040805193845273ffffffffffffffffffffffffffffffffffffffff90921660208401526bffffffffffffffffffffffff1690820152606001610324565b6103dc6106883660046128b5565b6113fb565b610335611571565b6103dc6106a336600461296f565b611620565b6103037f000000000000000000000000e7c5c484a61cc93a638f67906a9900d94b40fda781565b6103826106dd366004612956565b611743565b6103616106f03660046128b5565b611805565b6103616107033660046129dc565b600260209081525f928352604080842090915290825290205481565b610361611a72565b6103037f0000000000000000000000003a0de7a4678ca9341a63ffe78041385eda65b12881565b6003805461075b90612a0d565b80601f016020809104026020016040519081016040528092919081815260200182805461078790612a0d565b80156107d25780601f106107a9576101008083540402835291602001916107d2565b820191905f5260205f20905b8154815290600101906020018083116107b557829003601f168201915b505050505081565b5f336107e581611a94565b610838576040517f4a0bfec100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024015b60405180910390fd5b8361084281611a94565b610890576040517f4a0bfec100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260240161082f565b61089a8585611b46565b95945050505050565b5f336108ae81611a94565b6108fc576040517f4a0bfec100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260240161082f565b5f610905611bbe565b60065490915080821161091b575f935050505090565b808203935061096b7f000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec77f00000000000000000000000012c8091a719125bf08875635c3ed738510c5614186611c6c565b604051849073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000012c8091a719125bf08875635c3ed738510c5614116907f7823e479a1a4ebe2418874847436f8a1680c5ee5b17f38bb59dbff28e1b45552905f90a350505090565b336109dd81611a94565b610a2b576040517f4a0bfec100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260240161082f565b610a353383611dac565b604051829033907f266ba2fe22d2b352fe1eb8c45b5d486ff3c0b83ef953959b6d34397d53fb088d905f90a35050565b5f33610a7081611a94565b610abe576040517f4a0bfec100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260240161082f565b84610ac881611a94565b610b16576040517f4a0bfec100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260240161082f565b84610b2081611a94565b610b6e576040517f4a0bfec100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260240161082f565b3073ffffffffffffffffffffffffffffffffffffffff871603610bbd576040517f3a49fd5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bc8878787611e3d565b979650505050505050565b5f610bdd82611a94565b92915050565b5f7f00000000000000000000000000000000000000000000000000000000000000014614610c1857610c13611fb5565b905090565b507f38762f7bde177d1bc466ab7bc20885f877f926cd07c284b7996cbe182b6f383e90565b5f7f0000000000000000000000003a0de7a4678ca9341a63ffe78041385eda65b12873ffffffffffffffffffffffffffffffffffffffff16634bf365df6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ca7573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c139190612a5e565b5f5f610cd5611bbe565b90506006548111610cf35780600654610cee9190612aaa565b610cf5565b5f5b91505090565b5f610c1361207f565b5f610c13610d106120e9565b612153565b5f610c13612203565b5f33610d2981611a94565b610d77576040517f4a0bfec100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260240161082f565b5f83815260086020526040902060018101547401000000000000000000000000000000000000000090046bffffffffffffffffffffffff1642811115610dec576040517f774cceca0000000000000000000000000000000000000000000000000000000081526004810182905260240161082f565b805f03610e25576040517f9b604d0b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81545f610e30611bbe565b9050808210610e3f5780610e41565b815b600680548290039055845481900385556001850154909650610e9b907f000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec79073ffffffffffffffffffffffffffffffffffffffff1688611c6c565b6001840154604051879173ffffffffffffffffffffffffffffffffffffffff169089907f786e090d783caced3baddcb29bd555ffb93faf484529ab87feab4ec4c48a81e1905f90a45050505050919050565b5f610c13610ef96120e9565b61226d565b6004805461075b90612a0d565b5f610c136120e9565b5f610f1d610c3d565b610f53576040517f0b5f6bf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33610f5d81611a94565b610fab576040517f4a0bfec100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260240161082f565b5f610fb46120e9565b9050805f03610fee576040517ebfc92100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ff78161226d565b905080841015611036576040517fa4a050250000000000000000000000000000000000000000000000000000000081526004810182905260240161082f565b61104084826122e2565b925061104a61207f565b835f546110579190612abd565b111561108f576040517f2edaff4300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110bb7f000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7333087612307565b6110c53384612450565b6040518390829033907f58781ca443f8e3ecffad28c83044b16c6e549d8e9c677aebb3b8ee176f99f53f905f90a45050919050565b5f7f0000000000000000000000003a0de7a4678ca9341a63ffe78041385eda65b12873ffffffffffffffffffffffffffffffffffffffff1663a07c7ce46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ca7573d5f5f3e3d5ffd5b5f3361116f81611a94565b6111bd576040517f4a0bfec100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260240161082f565b836111c781611a94565b611215576040517f4a0bfec100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260240161082f565b3073ffffffffffffffffffffffffffffffffffffffff861603611264576040517f3a49fd5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61089a85856124be565b6040517f5711caaf0000000000000000000000000000000000000000000000000000000081523360048201527f00000000000000000000000000d2dc03b8207b2d261bda5d149dd7fcf3bdf8d773ffffffffffffffffffffffffffffffffffffffff1690635711caaf90602401602060405180830381865afa1580156112f6573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061131a9190612a5e565b611352576040517f4a0bfec100000000000000000000000000000000000000000000000000000000815233600482015260240161082f565b3361135c81611a94565b6113aa576040517f4a0bfec100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260240161082f565b6113b48383611dac565b604051829073ffffffffffffffffffffffffffffffffffffffff8516907f266ba2fe22d2b352fe1eb8c45b5d486ff3c0b83ef953959b6d34397d53fb088d905f90a3505050565b6040517f5711caaf0000000000000000000000000000000000000000000000000000000081523360048201527f00000000000000000000000000d2dc03b8207b2d261bda5d149dd7fcf3bdf8d773ffffffffffffffffffffffffffffffffffffffff1690635711caaf90602401602060405180830381865afa158015611483573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114a79190612a5e565b6114df576040517f4a0bfec100000000000000000000000000000000000000000000000000000000815233600482015260240161082f565b336114e981611a94565b611537576040517f4a0bfec100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260240161082f565b6115413383612450565b604051829033907fa59f12e354e8cd10bb74c559844c2dd69a5458e31fe56c7594c62ca57480509a905f90a35050565b60607f0000000000000000000000003a0de7a4678ca9341a63ffe78041385eda65b12873ffffffffffffffffffffffffffffffffffffffff1663d50256256040518163ffffffff1660e01b81526004015f60405180830381865afa1580156115db573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610c139190810190612afd565b3361162a81611a94565b611678576040517f4a0bfec100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260240161082f565b8761168281611a94565b6116d0576040517f4a0bfec100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260240161082f565b876116da81611a94565b611728576040517f4a0bfec100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260240161082f565b6117378a8a8a8a8a8a8a612541565b50505050505050505050565b5f3361174e81611a94565b61179c576040517f4a0bfec100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260240161082f565b826117a681611a94565b6117f4576040517f4a0bfec100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260240161082f565b6117fd84612823565b949350505050565b5f61180e6110fa565b611844576040517f0b5f6bf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3361184e81611a94565b61189c576040517f4a0bfec100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260240161082f565b670de0b6b3a76400008310156118e8576040517fa4a05025000000000000000000000000000000000000000000000000000000008152670de0b6b3a7640000600482015260240161082f565b5f6118f16120e9565b9050805f0361192b576040517ebfc92100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61193481612153565b90505f611941858361284e565b90508060065f8282546119549190612abd565b909155505060078054905f61196883612bed565b9190505593505f611977612203565b6119819042612abd565b604080516060810182528481523360208083018281526bffffffffffffffffffffffff8087168587019081525f8d81526008909452959092209351845551935116740100000000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff9390931692909217600190910155909150611a099087611dac565b3373ffffffffffffffffffffffffffffffffffffffff16816bffffffffffffffffffffffff16867f5a084092180e1b482afdddc2a20027f4d3619225151fb1a9934c119cd7307f3285604051611a6191815260200190565b60405180910390a450505050919050565b5f5f611a7c611bbe565b90506006548110610cf357600654610cee9082612aaa565b6040517f82c4b3b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301525f917f000000000000000000000000456e0074853cd23a3cdea3a1bb85575ed9b1a718909116906382c4b3b290602401602060405180830381865afa158015611b22573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bdd9190612a5e565b335f81815260026020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590611bad9086815260200190565b60405180910390a350600192915050565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f907f000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec773ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015611c48573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c139190612c24565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905291515f92839290871691611d029190612c3b565b5f604051808303815f865af19150503d805f8114611d3b576040519150601f19603f3d011682016040523d82523d5f602084013e611d40565b606091505b5091509150811580611d6e57505f8151118015611d6e575080806020019051810190611d6c9190612a5e565b155b15611da5576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526001602052604081208054839290611de0908490612aaa565b90915550505f8054829003815560405182815273ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526002602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611ecf57611e9e8382612aaa565b73ffffffffffffffffffffffffffffffffffffffff86165f9081526002602090815260408083203384529091529020555b73ffffffffffffffffffffffffffffffffffffffff85165f9081526001602052604081208054859290611f03908490612aaa565b909155505073ffffffffffffffffffffffffffffffffffffffff84165f9081526001602052604081208054859290611f3c908490612abd565b925050819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051611fa291815260200190565b60405180910390a3506001949350505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6003604051611fe69190612c51565b604080519182900382208282018252600183527f31000000000000000000000000000000000000000000000000000000000000006020938401528151928301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b5f7f0000000000000000000000003a0de7a4678ca9341a63ffe78041385eda65b12873ffffffffffffffffffffffffffffffffffffffff16635cfc1a516040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c48573d5f5f3e3d5ffd5b5f7f000000000000000000000000e7c5c484a61cc93a638f67906a9900d94b40fda773ffffffffffffffffffffffffffffffffffffffff166357de26a46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c48573d5f5f3e3d5ffd5b6040517fef86cf56000000000000000000000000000000000000000000000000000000008152600481018290525f907f0000000000000000000000003a0de7a4678ca9341a63ffe78041385eda65b12873ffffffffffffffffffffffffffffffffffffffff169063ef86cf56906024015b602060405180830381865afa1580156121df573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bdd9190612c24565b5f7f0000000000000000000000003a0de7a4678ca9341a63ffe78041385eda65b12873ffffffffffffffffffffffffffffffffffffffff1663787a08a66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c48573d5f5f3e3d5ffd5b6040517f5c4f46ed000000000000000000000000000000000000000000000000000000008152600481018290525f907f0000000000000000000000003a0de7a4678ca9341a63ffe78041385eda65b12873ffffffffffffffffffffffffffffffffffffffff1690635c4f46ed906024016121c4565b5f816122f6670de0b6b3a764000085612d24565b6123009190612d3b565b9392505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905291515f928392908816916123a59190612c3b565b5f604051808303815f865af19150503d805f81146123de576040519150601f19603f3d011682016040523d82523d5f602084013e6123e3565b606091505b509150915081158061241157505f815111801561241157508080602001905181019061240f9190612a5e565b155b15612448576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b805f5f8282546124609190612abd565b909155505073ffffffffffffffffffffffffffffffffffffffff82165f818152600160209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611e31565b335f908152600160205260408120805483919083906124de908490612aaa565b909155505073ffffffffffffffffffffffffffffffffffffffff83165f81815260016020526040908190208054850190555133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611bad9086815260200190565b42841015612584576040517fc4773cba0000000000000000000000000000000000000000000000000000000081526004810185905242602482015260440161082f565b5f600161258f610be3565b73ffffffffffffffffffffffffffffffffffffffff8a81165f8181526005602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e0830190915280519201919091207f190100000000000000000000000000000000000000000000000000000000000061010083015261010282019290925261012281019190915261014201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201205f84529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa1580156126dd573d5f5f3e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116158061275757508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b156127ae576040517f7ba5ffb500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301528916602482015260440161082f565b73ffffffffffffffffffffffffffffffffffffffff9081165f9081526002602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b5f610bdd827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6107da565b5f670de0b6b3a76400006122f68385612d24565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b5f602082840312156128c5575f5ffd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146128ef575f5ffd5b919050565b5f5f60408385031215612905575f5ffd5b61290e836128cc565b946020939093013593505050565b5f5f5f6060848603121561292e575f5ffd5b612937846128cc565b9250612945602085016128cc565b929592945050506040919091013590565b5f60208284031215612966575f5ffd5b612300826128cc565b5f5f5f5f5f5f5f60e0888a031215612985575f5ffd5b61298e886128cc565b965061299c602089016128cc565b95506040880135945060608801359350608088013560ff811681146129bf575f5ffd5b9699959850939692959460a0840135945060c09093013592915050565b5f5f604083850312156129ed575f5ffd5b6129f6836128cc565b9150612a04602084016128cc565b90509250929050565b600181811c90821680612a2157607f821691505b602082108103612a58577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b5f60208284031215612a6e575f5ffd5b81518015158114612300575f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b81810381811115610bdd57610bdd612a7d565b80820180821115610bdd57610bdd612a7d565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f60208284031215612b0d575f5ffd5b815167ffffffffffffffff811115612b23575f5ffd5b8201601f81018413612b33575f5ffd5b805167ffffffffffffffff811115612b4d57612b4d612ad0565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715612bb957612bb9612ad0565b604052818152828201602001861015612bd0575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612c1d57612c1d612a7d565b5060010190565b5f60208284031215612c34575f5ffd5b5051919050565b5f82518060208501845e5f920191825250919050565b5f5f83545f8160011c90506001821680612c6c57607f821691505b602082108103612ca3577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b808015612cb75760018114612cea57612d18565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0084168752821515830287019450612d18565b5f888152602090205f5b84811015612d1057815489820152600190910190602001612cf4565b505082870194505b50929695505050505050565b8082028115828204841417610bdd57610bdd612a7d565b5f82612d6e577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b50049056fea264697066735822122059106cbf2d7123c48402cc6b33b94eb0603e790e371a35a5fda68b7c68f2d04564736f6c634300081e0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000e7c5c484a61cc93a638f67906a9900d94b40fda70000000000000000000000003a0de7a4678ca9341a63ffe78041385eda65b12800000000000000000000000000d2dc03b8207b2d261bda5d149dd7fcf3bdf8d7000000000000000000000000456e0074853cd23a3cdea3a1bb85575ed9b1a71800000000000000000000000012c8091a719125bf08875635c3ed738510c5614100000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000002743414e4120486f6c64696e67732043616c69666f726e696120436172626f6e204372656469747300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000443414e4100000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : gem_ (address): 0xdAC17F958D2ee523a2206206994597C13D831ec7
Arg [1] : pip_ (address): 0xE7c5c484A61Cc93A638F67906a9900d94b40FDA7
Arg [2] : act_ (address): 0x3a0DE7A4678CA9341a63Ffe78041385EdA65B128
Arg [3] : adm_ (address): 0x00d2dc03B8207b2D261Bda5D149Dd7FcF3bdF8d7
Arg [4] : cop_ (address): 0x456e0074853cd23a3cDeA3A1Bb85575eD9b1a718
Arg [5] : flo_ (address): 0x12C8091a719125Bf08875635c3Ed738510C56141
Arg [6] : name_ (string): CANA Holdings California Carbon Credits
Arg [7] : symbol_ (string): CANA

-----Encoded View---------------
13 Constructor Arguments found :
Arg [0] : 000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7
Arg [1] : 000000000000000000000000e7c5c484a61cc93a638f67906a9900d94b40fda7
Arg [2] : 0000000000000000000000003a0de7a4678ca9341a63ffe78041385eda65b128
Arg [3] : 00000000000000000000000000d2dc03b8207b2d261bda5d149dd7fcf3bdf8d7
Arg [4] : 000000000000000000000000456e0074853cd23a3cdea3a1bb85575ed9b1a718
Arg [5] : 00000000000000000000000012c8091a719125bf08875635c3ed738510c56141
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000027
Arg [9] : 43414e4120486f6c64696e67732043616c69666f726e696120436172626f6e20
Arg [10] : 4372656469747300000000000000000000000000000000000000000000000000
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [12] : 43414e4100000000000000000000000000000000000000000000000000000000


Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.