Token

 

Overview

Total Supply:
0 N/A

Holders:
0 addresses

Transfers:
-

Contract:
0x8c82A71B629DB618847682cD3155e6742304B7100x8c82A71B629DB618847682cD3155e6742304B710

Decimals:
18

Social Profiles:
Not Available, Update ?

 
Loading
[ Download CSV Export  ] 
Loading
Loading

Click here to update the token ICO / general information
# Exchange Pair Price  24H Volume % Volume
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
FeeCollector

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license
File 1 of 4 : FeeCollector.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.15;

import { IFeeCollector } from "./interfaces/IFeeCollector.sol";
import { LibAddress } from "./lib/LibAddress.sol";
import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol";

contract FeeCollector is IFeeCollector {
    using LibAddress for address payable;

    address payable public guildFeeCollector;
    uint96 public guildSharex100;

    address payable public poapFeeCollector;
    uint96 public poapSharex100;

    Vault[] internal vaults;

    /// @param guildFeeCollector_ The address that will receive Guild's share from the funds.
    /// @param guildSharex100_ The percentage of Guild's share multiplied by 100 (e.g 500 for a 5% cut).
    /// @param poapFeeCollector_ The address that will receive POAP's share from the funds.
    /// @param poapSharex100_ The percentage of POAP's share multiplied by 100 (e.g 500 for a 5% cut).
    constructor(
        address payable guildFeeCollector_,
        uint96 guildSharex100_,
        address payable poapFeeCollector_,
        uint96 poapSharex100_
    ) {
        guildFeeCollector = guildFeeCollector_;
        guildSharex100 = guildSharex100_;
        poapFeeCollector = poapFeeCollector_;
        poapSharex100 = poapSharex100_;
    }

    function registerVault(
        uint256 eventId,
        address owner,
        address token,
        uint128 fee
    ) external {
        Vault storage vault = vaults.push();
        vault.eventId = eventId;
        vault.owner = owner;
        vault.token = token;
        vault.fee = fee;

        emit VaultRegistered(vaults.length - 1, eventId, owner, token, fee);
    }

    function payFee(uint256 vaultId) external payable {
        if (vaultId >= vaults.length) revert VaultDoesNotExist(vaultId);

        Vault storage vault = vaults[vaultId];
        uint256 requiredAmount = vault.fee;
        vault.collected += uint128(requiredAmount);
        vault.paid[msg.sender] = true;

        // If the tokenAddress is zero, the payment should be in Ether, otherwise in ERC20.
        address tokenAddress = vault.token;
        if (tokenAddress == address(0)) {
            if (msg.value != requiredAmount) revert IncorrectFee(vaultId, msg.value, requiredAmount);
        } else {
            if (msg.value != 0) revert IncorrectFee(vaultId, msg.value, 0);
            if (!IERC20(vault.token).transferFrom(msg.sender, address(this), requiredAmount))
                revert TransferFailed(msg.sender, address(this));
        }

        emit FeeReceived(vaultId, msg.sender, requiredAmount);
    }

    function withdraw(uint256 vaultId) external {
        if (vaultId >= vaults.length) revert VaultDoesNotExist(vaultId);

        Vault storage vault = vaults[vaultId];
        uint256 collected = vault.collected;
        vault.collected = 0;

        // Calculate fees to receive. Guild's and Poap's part is truncated - the remainder goes to the owner (max 2 wei).
        uint256 guildAmount = (collected * guildSharex100) / 10000;
        uint256 poapAmount = (collected * poapSharex100) / 10000;
        uint256 ownerAmount = collected - poapAmount - guildAmount;

        // If the tokenAddress is zero, the collected fees are in Ether, otherwise in ERC20.
        address tokenAddress = vault.token;
        if (tokenAddress == address(0)) _withdrawEther(guildAmount, poapAmount, ownerAmount, vault.owner);
        else _withdrawToken(guildAmount, poapAmount, ownerAmount, vault.owner, tokenAddress);

        emit Withdrawn(vaultId, guildAmount, poapAmount, ownerAmount);
    }

    function setGuildFeeCollector(address payable newFeeCollector) external {
        if (msg.sender != guildFeeCollector) revert AccessDenied(msg.sender, guildFeeCollector);
        guildFeeCollector = newFeeCollector;
        emit GuildFeeCollectorChanged(newFeeCollector);
    }

    function setGuildSharex100(uint96 newShare) external {
        if (msg.sender != guildFeeCollector) revert AccessDenied(msg.sender, guildFeeCollector);
        guildSharex100 = newShare;
        emit GuildSharex100Changed(newShare);
    }

    function setPoapFeeCollector(address payable newFeeCollector) external {
        if (msg.sender != poapFeeCollector) revert AccessDenied(msg.sender, poapFeeCollector);
        poapFeeCollector = newFeeCollector;
        emit PoapFeeCollectorChanged(newFeeCollector);
    }

    function setPoapSharex100(uint96 newShare) external {
        if (msg.sender != poapFeeCollector) revert AccessDenied(msg.sender, poapFeeCollector);
        poapSharex100 = newShare;
        emit PoapSharex100Changed(newShare);
    }

    function getVault(uint256 vaultId)
        external
        view
        returns (
            uint256 eventId,
            address owner,
            address token,
            uint128 fee,
            uint128 collected
        )
    {
        if (vaultId >= vaults.length) revert VaultDoesNotExist(vaultId);
        Vault storage vault = vaults[vaultId];
        return (vault.eventId, vault.owner, vault.token, vault.fee, vault.collected);
    }

    function hasPaid(uint256 vaultId, address account) external view returns (bool paid) {
        if (vaultId >= vaults.length) revert VaultDoesNotExist(vaultId);
        return vaults[vaultId].paid[account];
    }

    function _withdrawEther(
        uint256 guildAmount,
        uint256 poapAmount,
        uint256 ownerAmount,
        address eventOwner
    ) internal {
        guildFeeCollector.sendEther(guildAmount);
        poapFeeCollector.sendEther(poapAmount);
        payable(eventOwner).sendEther(ownerAmount);
    }

    function _withdrawToken(
        uint256 guildAmount,
        uint256 poapAmount,
        uint256 ownerAmount,
        address eventOwner,
        address tokenAddress
    ) internal {
        IERC20 token = IERC20(tokenAddress);
        if (!token.transfer(guildFeeCollector, guildAmount)) revert TransferFailed(address(this), guildFeeCollector);
        if (!token.transfer(poapFeeCollector, poapAmount)) revert TransferFailed(address(this), poapFeeCollector);
        if (!token.transfer(eventOwner, ownerAmount)) revert TransferFailed(address(this), eventOwner);
    }
}

File 2 of 4 : IFeeCollector.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface IFeeCollector {
    struct Vault {
        uint256 eventId;
        address owner;
        address token;
        uint128 fee;
        uint128 collected;
        mapping(address => bool) paid;
    }

    /// @notice Registers a POAP drop and it's fee.
    /// @param eventId The id of the POAP drop.
    /// @param owner The address that receives the fees from the drop.
    /// @param token The zero address for Ether, otherwise an ERC20 token.
    /// @param fee The amount of fee to pay in wei.
    function registerVault(
        uint256 eventId,
        address owner,
        address token,
        uint128 fee
    ) external;

    /// @notice Registers the paid fee, both in Ether or ERC20.
    /// @param vaultId The id of the vault to pay to.
    function payFee(uint256 vaultId) external payable;

    /// @notice Sets the address that receives Guild's share from the funds.
    /// @dev Callable only by the current Guild fee collector.
    /// @param newFeeCollector The new address of guildFeeCollector.
    function setGuildFeeCollector(address payable newFeeCollector) external;

    /// @notice Sets Guild's share from the funds.
    /// @dev Callable only by the Guild fee collector.
    /// @param newShare The percentual value multiplied by 100.
    function setGuildSharex100(uint96 newShare) external;

    /// @notice Sets the address that receives POAP's share from the funds.
    /// @dev Callable only by the current POAP fee collector.
    /// @param newFeeCollector The new address of poapFeeCollector.
    function setPoapFeeCollector(address payable newFeeCollector) external;

    /// @notice Sets POAP's share from the funds.
    /// @dev Callable only by the POAP fee collector.
    /// @param newShare The percentual value multiplied by 100.
    function setPoapSharex100(uint96 newShare) external;

    /// @notice Distributes the funds from a vault to the fee collectors and the owner.
    /// @param vaultId The id of the vault whose funds should be distributed.
    function withdraw(uint256 vaultId) external;

    /// @notice Returns a vault's details.
    /// @param vaultId The id of the queried vault.
    /// @return eventId The id of the POAP drop.
    /// @return owner The owner of the vault who recieves the funds.
    /// @return token The address of the token to receive funds in (the zero address in case of Ether).
    /// @return fee The amount of required funds in wei.
    /// @return collected The amount of already collected funds.
    function getVault(uint256 vaultId)
        external
        view
        returns (
            uint256 eventId,
            address owner,
            address token,
            uint128 fee,
            uint128 collected
        );

    /// @notice Returns if an account has paid the fee to a vault.
    /// @param vaultId The id of the queried vault.
    /// @param account The address of the queried account.
    function hasPaid(uint256 vaultId, address account) external view returns (bool paid);

    /// @notice Returns the address that receives Guild's share from the funds.
    function guildFeeCollector() external view returns (address payable);

    /// @notice Returns the percentage of Guild's share multiplied by 100.
    function guildSharex100() external view returns (uint96);

    /// @notice Returns the address that receives POAP's share from the funds.
    function poapFeeCollector() external view returns (address payable);

    /// @notice Returns the percentage of POAP's share multiplied by 100.
    function poapSharex100() external view returns (uint96);

    /// @notice Event emitted when a call to {payFee} succeeds.
    /// @param vaultId The id of the vault that received the payment.
    /// @param account The address of the account that paid.
    /// @param amount The amount of fee received in wei.
    event FeeReceived(uint256 indexed vaultId, address indexed account, uint256 amount);

    /// @notice Event emitted when the Guild fee collector address is changed.
    /// @param newFeeCollector The address to change guildFeeCollector to.
    event GuildFeeCollectorChanged(address newFeeCollector);

    /// @notice Event emitted when the share of the Guild fee collector changes.
    /// @param newShare The new value of guildSharex100.
    event GuildSharex100Changed(uint96 newShare);

    /// @notice Event emitted when the POAP fee collector address is changed.
    /// @param newFeeCollector The address to change poapFeeCollector to.
    event PoapFeeCollectorChanged(address newFeeCollector);

    /// @notice Event emitted when the share of the POAP fee collector changes.
    /// @param newShare The new value of poapSharex100.
    event PoapSharex100Changed(uint96 newShare);

    /// @notice Event emitted when a new vault is registered.
    /// @param eventId The id of the POAP drop.
    /// @param owner The address that receives the fees from the drop.
    /// @param token The zero address for Ether, otherwise an ERC20 token.
    /// @param fee The amount of fee to pay in wei.
    event VaultRegistered(
        uint256 vaultId,
        uint256 indexed eventId,
        address indexed owner,
        address indexed token,
        uint256 fee
    );

    /// @notice Event emitted when funds are withdrawn by a vault owner.
    /// @param vaultId The id of the vault.
    /// @param guildAmount The amount received by the Guild fee collector in wei.
    /// @param poapAmount The amount received by the POAP fee collector in wei.
    /// @param ownerAmount The amount received by the vault's owner in wei.
    event Withdrawn(uint256 indexed vaultId, uint256 guildAmount, uint256 poapAmount, uint256 ownerAmount);

    /// @notice Error thrown when an incorrect amount of fee is attempted to be paid.
    /// @dev requiredAmount might be 0 in cases when an ERC20 payment was expected but Ether was received, too.
    /// @param vaultId The id of the vault.
    /// @param paid The amount of funds received.
    /// @param requiredAmount The amount of fees required by the vault.
    error IncorrectFee(uint256 vaultId, uint256 paid, uint256 requiredAmount);

    /// @notice Error thrown when a function is attempted to be called by the wrong address.
    /// @param sender The address that sent the transaction.
    /// @param owner The address that is allowed to call the function.
    error AccessDenied(address sender, address owner);

    /// @notice Error thrown when an ERC20 transfer failed.
    /// @param from The sender of the token.
    /// @param to The recipient of the token.
    error TransferFailed(address from, address to);

    /// @notice Error thrown when a vault does not exist.
    /// @param vaultId The id of the requested vault.
    error VaultDoesNotExist(uint256 vaultId);
}

File 3 of 4 : LibAddress.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

/// @title Library for functions related to addresses.
library LibAddress {
    /// @notice Error thrown when sending ether fails.
    /// @param recipient The address that could not receive the ether.
    error FailedToSendEther(address recipient);

    /// @notice Send ether to an address, forwarding all available gas and reverting on errors.
    /// @param recipient The recipient of the ether.
    /// @param amount The amount of ether to send in wei.
    function sendEther(address payable recipient, uint256 amount) internal {
        // solhint-disable-next-line avoid-low-level-calls
        (bool success, ) = recipient.call{ value: amount }("");
        if (!success) revert FailedToSendEther(recipient);
    }
}

File 4 of 4 : IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);
}

Settings
{
  "metadata": {
    "useLiteralContent": true
  },
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address payable","name":"guildFeeCollector_","type":"address"},{"internalType":"uint96","name":"guildSharex100_","type":"uint96"},{"internalType":"address payable","name":"poapFeeCollector_","type":"address"},{"internalType":"uint96","name":"poapSharex100_","type":"uint96"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"AccessDenied","type":"error"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"}],"name":"FailedToSendEther","type":"error"},{"inputs":[{"internalType":"uint256","name":"vaultId","type":"uint256"},{"internalType":"uint256","name":"paid","type":"uint256"},{"internalType":"uint256","name":"requiredAmount","type":"uint256"}],"name":"IncorrectFee","type":"error"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"TransferFailed","type":"error"},{"inputs":[{"internalType":"uint256","name":"vaultId","type":"uint256"}],"name":"VaultDoesNotExist","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"vaultId","type":"uint256"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"FeeReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newFeeCollector","type":"address"}],"name":"GuildFeeCollectorChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint96","name":"newShare","type":"uint96"}],"name":"GuildSharex100Changed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newFeeCollector","type":"address"}],"name":"PoapFeeCollectorChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint96","name":"newShare","type":"uint96"}],"name":"PoapSharex100Changed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"vaultId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"eventId","type":"uint256"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"}],"name":"VaultRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"vaultId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"guildAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"poapAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ownerAmount","type":"uint256"}],"name":"Withdrawn","type":"event"},{"inputs":[{"internalType":"uint256","name":"vaultId","type":"uint256"}],"name":"getVault","outputs":[{"internalType":"uint256","name":"eventId","type":"uint256"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint128","name":"fee","type":"uint128"},{"internalType":"uint128","name":"collected","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"guildFeeCollector","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"guildSharex100","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"vaultId","type":"uint256"},{"internalType":"address","name":"account","type":"address"}],"name":"hasPaid","outputs":[{"internalType":"bool","name":"paid","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"vaultId","type":"uint256"}],"name":"payFee","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"poapFeeCollector","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poapSharex100","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"eventId","type":"uint256"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint128","name":"fee","type":"uint128"}],"name":"registerVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newFeeCollector","type":"address"}],"name":"setGuildFeeCollector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint96","name":"newShare","type":"uint96"}],"name":"setGuildSharex100","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newFeeCollector","type":"address"}],"name":"setPoapFeeCollector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint96","name":"newShare","type":"uint96"}],"name":"setPoapSharex100","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"vaultId","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b50604051620010ee380380620010ee83398101604081905261003191610096565b6001600160601b03928316600160a01b9081026001600160a01b039586161760005592169091029116176001556100ea565b80516001600160a01b038116811461007a57600080fd5b919050565b80516001600160601b038116811461007a57600080fd5b600080600080608085870312156100ac57600080fd5b6100b585610063565b93506100c36020860161007f565b92506100d160408601610063565b91506100df6060860161007f565b905092959194509250565b610ff480620000fa6000396000f3fe6080604052600436106100c25760003560e01c8063504af59a1161007f578063bf51429e11610059578063bf51429e1461026c578063cf4408251461028c578063d289ade2146102ac578063d8bc7fff146102bf57600080fd5b8063504af59a146101b457806359878fee146101ec5780639403b6341461020c57600080fd5b806307ade415146100c757806310a3c725146100e95780631139cbe91461012d578063228a0831146101545780632e1a7d4d1461017457806337d8eca714610194575b600080fd5b3480156100d357600080fd5b506100e76100e2366004610dde565b6102ef565b005b3480156100f557600080fd5b5060005461011090600160a01b90046001600160601b031681565b6040516001600160601b0390911681526020015b60405180910390f35b34801561013957600080fd5b5060015461011090600160a01b90046001600160601b031681565b34801561016057600080fd5b506100e761016f366004610dde565b610389565b34801561018057600080fd5b506100e761018f366004610e02565b610413565b3480156101a057600080fd5b506100e76101af366004610e1b565b610594565b3480156101c057600080fd5b506000546101d4906001600160a01b031681565b6040516001600160a01b039091168152602001610124565b3480156101f857600080fd5b506100e7610207366004610e7a565b6106e2565b34801561021857600080fd5b5061022c610227366004610e02565b610774565b604080519586526001600160a01b03948516602087015293909216928401929092526001600160801b03918216606084015216608082015260a001610124565b34801561027857600080fd5b506001546101d4906001600160a01b031681565b34801561029857600080fd5b506100e76102a7366004610e7a565b61080c565b6100e76102ba366004610e02565b61089e565b3480156102cb57600080fd5b506102df6102da366004610ea3565b610aa7565b6040519015158152602001610124565b6001546001600160a01b031633146103345760015460405163c21bbf9d60e01b815261032b9133916001600160a01b0390911690600401610ed3565b60405180910390fd5b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f765a078d0c53824942cbd78317aac3cd27d848a557fe67e04d638e056c051b78906020015b60405180910390a150565b6000546001600160a01b031633146103c55760005460405163c21bbf9d60e01b815261032b9133916001600160a01b0390911690600401610ed3565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f41c387ad232996a24e924bd12a8be0da67a8350e31529f702890a9a039cd0c7e9060200161037e565b60025481106104385760405163148eeced60e31b81526004810182905260240161032b565b60006002828154811061044d5761044d610eed565b600091825260208220600591909102016003810180546001600160801b038082169092558354929450600160801b90041691906127109061049e90600160a01b90046001600160601b031684610f19565b6104a89190610f38565b600154909150600090612710906104cf90600160a01b90046001600160601b031685610f19565b6104d99190610f38565b90506000826104e88386610f5a565b6104f29190610f5a565b60028601549091506001600160a01b03168061052a576001860154610525908590859085906001600160a01b0316610b16565b610548565b6001860154610548908590859085906001600160a01b031685610b5b565b604080518581526020810185905290810183905287907ff33ea8296e3b54855453ed4cdaa29d067a97e3cc1d5ebd1fb072699e78aa01e29060600160405180910390a250505050505050565b6002805460018181018355600083905260059091027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace81018781557f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf820180546001600160a01b03808a166001600160a01b031992831681179093557f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad085018054918a169190921681179091557f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad190930180546001600160801b0388166fffffffffffffffffffffffffffffffff1990911617905593549093919288917f6131de68fea5d38cd5891e9aca5f6b1f16c7c75b8cbb86639fee51f0caff52a3916106bc91610f5a565b604080519182526001600160801b03881660208301520160405180910390a45050505050565b6001546001600160a01b0316331461071e5760015460405163c21bbf9d60e01b815261032b9133916001600160a01b0390911690600401610ed3565b600180546001600160a01b0316600160a01b6001600160601b038416908102919091179091556040519081527f55033206c80b8260dfd95de6625e9a90efb0b8f0f3a18e25738791cb3e45b7689060200161037e565b600080600080600060028054905086106107a45760405163148eeced60e31b81526004810187905260240161032b565b6000600287815481106107b9576107b9610eed565b60009182526020909120600590910201805460018201546002830154600390930154919a6001600160a01b039182169a50921697506001600160801b038082169750600160801b90910416945092505050565b6000546001600160a01b031633146108485760005460405163c21bbf9d60e01b815261032b9133916001600160a01b0390911690600401610ed3565b600080546001600160a01b0316600160a01b6001600160601b038416908102919091179091556040519081527feccc8a49da3ca61680c27f3ef094e296ff519532f5aa59634e79b2d5dfdfc41c9060200161037e565b60025481106108c35760405163148eeced60e31b81526004810182905260240161032b565b6000600282815481106108d8576108d8610eed565b600091825260209091206005909102016003810180549192506001600160801b0380831692839291601091610916918591600160801b900416610f71565b82546001600160801b039182166101009390930a9283029190920219909116179055503360009081526004830160205260409020805460ff1916600117905560028201546001600160a01b03168061099d578134146109985760405163119a754560e01b8152600481018590523460248201526044810183905260640161032b565b610a6a565b34156109cc5760405163119a754560e01b8152600481018590523460248201526000604482015260640161032b565b60028301546040516323b872dd60e01b8152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015610a25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a499190610f9c565b610a6a57333060405163291e1d5560e11b815260040161032b929190610ed3565b604051828152339085907f26d8baa91676f5f0ff9373b84d9a9736de9187010efe488a475a0dd91adbdb469060200160405180910390a350505050565b6002546000908310610acf5760405163148eeced60e31b81526004810184905260240161032b565b60028381548110610ae257610ae2610eed565b600091825260208083206001600160a01b03861684526004600590930201919091019052604090205460ff16905092915050565b600054610b2c906001600160a01b031685610d42565b600154610b42906001600160a01b031684610d42565b610b556001600160a01b03821683610d42565b50505050565b60005460405163a9059cbb60e01b81526001600160a01b03918216600482015260248101879052829182169063a9059cbb906044016020604051808303816000875af1158015610baf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd39190610f9c565b610c015760005460405163291e1d5560e11b815261032b9130916001600160a01b0390911690600401610ed3565b60015460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018790529082169063a9059cbb906044016020604051808303816000875af1158015610c54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c789190610f9c565b610ca65760015460405163291e1d5560e11b815261032b9130916001600160a01b0390911690600401610ed3565b60405163a9059cbb60e01b81526001600160a01b0384811660048301526024820186905282169063a9059cbb906044016020604051808303816000875af1158015610cf5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d199190610f9c565b610d3a57308360405163291e1d5560e11b815260040161032b929190610ed3565b505050505050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610d8f576040519150601f19603f3d011682016040523d82523d6000602084013e610d94565b606091505b5050905080610dc157604051632499e3bb60e11b81526001600160a01b038416600482015260240161032b565b505050565b6001600160a01b0381168114610ddb57600080fd5b50565b600060208284031215610df057600080fd5b8135610dfb81610dc6565b9392505050565b600060208284031215610e1457600080fd5b5035919050565b60008060008060808587031215610e3157600080fd5b843593506020850135610e4381610dc6565b92506040850135610e5381610dc6565b915060608501356001600160801b0381168114610e6f57600080fd5b939692955090935050565b600060208284031215610e8c57600080fd5b81356001600160601b0381168114610dfb57600080fd5b60008060408385031215610eb657600080fd5b823591506020830135610ec881610dc6565b809150509250929050565b6001600160a01b0392831681529116602082015260400190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615610f3357610f33610f03565b500290565b600082610f5557634e487b7160e01b600052601260045260246000fd5b500490565b600082821015610f6c57610f6c610f03565b500390565b60006001600160801b03808316818516808303821115610f9357610f93610f03565b01949350505050565b600060208284031215610fae57600080fd5b81518015158114610dfb57600080fdfea26469706673582212208f1b59393db632299b358791c676773377c49e300ff1c7f079ef3ab15fb2436564736f6c634300080f00330000000000000000000000007cd8c45a83d97d74bbd6b94c307919dd6600ccec00000000000000000000000000000000000000000000000000000000000000000000000000000000000000007cd8c45a83d97d74bbd6b94c307919dd6600ccec0000000000000000000000000000000000000000000000000000000000000000

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

0000000000000000000000007cd8c45a83d97d74bbd6b94c307919dd6600ccec00000000000000000000000000000000000000000000000000000000000000000000000000000000000000007cd8c45a83d97d74bbd6b94c307919dd6600ccec0000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : guildFeeCollector_ (address): 0x7cd8c45a83d97d74bbd6b94c307919dd6600ccec
Arg [1] : guildSharex100_ (uint96): 0
Arg [2] : poapFeeCollector_ (address): 0x7cd8c45a83d97d74bbd6b94c307919dd6600ccec
Arg [3] : poapSharex100_ (uint96): 0

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000007cd8c45a83d97d74bbd6b94c307919dd6600ccec
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [2] : 0000000000000000000000007cd8c45a83d97d74bbd6b94c307919dd6600ccec
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000


Deployed ByteCode Sourcemap

246:5931:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4099:272;;;;;;;;;;-1:-1:-1;4099:272:0;;;;;:::i;:::-;;:::i;:::-;;380:28;;;;;;;;;;-1:-1:-1;380:28:0;;;;-1:-1:-1;;;380:28:0;;-1:-1:-1;;;;;380:28:0;;;;;;-1:-1:-1;;;;;588:39:4;;;570:58;;558:2;543:18;380:28:0;;;;;;;;460:27;;;;;;;;;;-1:-1:-1;460:27:0;;;;-1:-1:-1;;;460:27:0;;-1:-1:-1;;;;;460:27:0;;;3572:277;;;;;;;;;;-1:-1:-1;3572:277:0;;;;;:::i;:::-;;:::i;2584:982::-;;;;;;;;;;-1:-1:-1;2584:982:0;;;;;:::i;:::-;;:::i;1275:376::-;;;;;;;;;;-1:-1:-1;1275:376:0;;;;;:::i;:::-;;:::i;334:40::-;;;;;;;;;;-1:-1:-1;334:40:0;;;;-1:-1:-1;;;;;334:40:0;;;;;;-1:-1:-1;;;;;1679:32:4;;;1661:51;;1649:2;1634:18;334:40:0;1499:219:4;4377:233:0;;;;;;;;;;-1:-1:-1;4377:233:0;;;;;:::i;:::-;;:::i;4616:448::-;;;;;;;;;;-1:-1:-1;4616:448:0;;;;;:::i;:::-;;:::i;:::-;;;;2279:25:4;;;-1:-1:-1;;;;;2378:15:4;;;2373:2;2358:18;;2351:43;2430:15;;;;2410:18;;;2403:43;;;;-1:-1:-1;;;;;2535:15:4;;;2530:2;2515:18;;2508:43;2588:15;2582:3;2567:19;;2560:44;2266:3;2251:19;4616:448:0;2020:590:4;415:39:0;;;;;;;;;;-1:-1:-1;415:39:0;;;;-1:-1:-1;;;;;415:39:0;;;3855:238;;;;;;;;;;-1:-1:-1;3855:238:0;;;;;:::i;:::-;;:::i;1657:921::-;;;;;;:::i;:::-;;:::i;5070:211::-;;;;;;;;;;-1:-1:-1;5070:211:0;;;;;:::i;:::-;;:::i;:::-;;;3108:14:4;;3101:22;3083:41;;3071:2;3056:18;5070:211:0;2943:187:4;4099:272:0;4198:16;;-1:-1:-1;;;;;4198:16:0;4184:10;:30;4180:85;;4248:16;;4223:42;;-1:-1:-1;;;4223:42:0;;;;4236:10;;-1:-1:-1;;;;;4248:16:0;;;;4223:42;;;:::i;:::-;;;;;;;;4180:85;4275:16;:34;;-1:-1:-1;;;;;;4275:34:0;-1:-1:-1;;;;;4275:34:0;;;;;;;;4324:40;;1661:51:4;;;4324:40:0;;1649:2:4;1634:18;4324:40:0;;;;;;;;4099:272;:::o;3572:277::-;3672:17;;-1:-1:-1;;;;;3672:17:0;3658:10;:31;3654:87;;3723:17;;3698:43;;-1:-1:-1;;;3698:43:0;;;;3711:10;;-1:-1:-1;;;;;3723:17:0;;;;3698:43;;;:::i;3654:87::-;3751:17;:35;;-1:-1:-1;;;;;;3751:35:0;-1:-1:-1;;;;;3751:35:0;;;;;;;;3801:41;;1661:51:4;;;3801:41:0;;1649:2:4;1634:18;3801:41:0;1499:219:4;2584:982:0;2653:6;:13;2642:24;;2638:63;;2675:26;;-1:-1:-1;;;2675:26:0;;;;;3814:25:4;;;3787:18;;2675:26:0;3668:177:4;2638:63:0;2712:19;2734:6;2741:7;2734:15;;;;;;;;:::i;:::-;;;;;;;;;;;;;;2779;;;;;-1:-1:-1;;;;;2804:19:0;;;;;;2991:14;;2734:15;;-1:-1:-1;;;;2779:15:0;;;;2734;3009:5;;2979:26;;-1:-1:-1;;;2991:14:0;;-1:-1:-1;;;;;2991:14:0;2779:15;2979:26;:::i;:::-;2978:36;;;;:::i;:::-;3058:13;;2956:58;;-1:-1:-1;3024:18:0;;3075:5;;3046:25;;-1:-1:-1;;;3058:13:0;;-1:-1:-1;;;;;3058:13:0;3046:9;:25;:::i;:::-;3045:35;;;;:::i;:::-;3024:56;-1:-1:-1;3090:19:0;3137:11;3112:22;3024:56;3112:9;:22;:::i;:::-;:36;;;;:::i;:::-;3275:11;;;;3090:58;;-1:-1:-1;;;;;;3275:11:0;;3296:191;;3381:11;;;;3328:65;;3343:11;;3356:10;;3368:11;;-1:-1:-1;;;;;3381:11:0;3328:14;:65::i;:::-;3296:191;;;3461:11;;;;3408:79;;3423:11;;3436:10;;3448:11;;-1:-1:-1;;;;;3461:11:0;3474:12;3408:14;:79::i;:::-;3503:56;;;4841:25:4;;;4897:2;4882:18;;4875:34;;;4925:18;;;4918:34;;;3513:7:0;;3503:56;;4829:2:4;4814:18;3503:56:0;;;;;;;2628:938;;;;;;2584:982;:::o;1275:376::-;1437:6;:13;;;;;;;;1415:19;1437:13;;;;;;;;;;1460:23;;;1493:11;;;:19;;-1:-1:-1;;;;;1493:19:0;;;-1:-1:-1;;;;;;1493:19:0;;;;;;;;1522:11;;;:19;;;;;;;;;;;;;;1551:9;;;;:15;;-1:-1:-1;;;;;1551:15:0;;-1:-1:-1;;1551:15:0;;;;;;1598:13;;1437;;1522:19;;1476:7;;1582:62;;1598:17;;;:::i;:::-;1582:62;;;5137:25:4;;;-1:-1:-1;;;;;5198:47:4;;5193:2;5178:18;;5171:75;5110:18;1582:62:0;;;;;;;1405:246;1275:376;;;;:::o;4377:233::-;4457:16;;-1:-1:-1;;;;;4457:16:0;4443:10;:30;4439:85;;4507:16;;4482:42;;-1:-1:-1;;;4482:42:0;;;;4495:10;;-1:-1:-1;;;;;4507:16:0;;;;4482:42;;;:::i;4439:85::-;4534:13;:24;;-1:-1:-1;;;;;4534:24:0;-1:-1:-1;;;;;;;;4534:24:0;;;;;;;;;;;;4573:30;;570:58:4;;;4573:30:0;;558:2:4;543:18;4573:30:0;426:208:4;4616:448:0;4711:15;4740:13;4767;4794:11;4819:17;4876:6;:13;;;;4865:7;:24;4861:63;;4898:26;;-1:-1:-1;;;4898:26:0;;;;;3814:25:4;;;3787:18;;4898:26:0;3668:177:4;4861:63:0;4934:19;4956:6;4963:7;4956:15;;;;;;;;:::i;:::-;;;;;;;;;;;;;;4989:13;;5004:11;;;;5017;;;;5030:9;;;;;4989:13;;-1:-1:-1;;;;;5004:11:0;;;;-1:-1:-1;5017:11:0;;;-1:-1:-1;;;;;;5030:9:0;;;;-1:-1:-1;;;;5041:15:0;;;;;-1:-1:-1;4616:448:0;-1:-1:-1;;;4616:448:0:o;3855:238::-;3936:17;;-1:-1:-1;;;;;3936:17:0;3922:10;:31;3918:87;;3987:17;;3962:43;;-1:-1:-1;;;3962:43:0;;;;3975:10;;-1:-1:-1;;;;;3987:17:0;;;;3962:43;;;:::i;3918:87::-;4015:14;:25;;-1:-1:-1;;;;;4015:25:0;-1:-1:-1;;;;;;;;4015:25:0;;;;;;;;;;;;4055:31;;570:58:4;;;4055:31:0;;558:2:4;543:18;4055:31:0;426:208:4;1657:921:0;1732:6;:13;1721:24;;1717:63;;1754:26;;-1:-1:-1;;;1754:26:0;;;;;3814:25:4;;;3787:18;;1754:26:0;3668:177:4;1717:63:0;1791:19;1813:6;1820:7;1813:15;;;;;;;;:::i;:::-;;;;;;;;;;;;;;1863:9;;;;;1813:15;;-1:-1:-1;;;;;;1863:9:0;;;;;;;1882:15;;:42;;1863:9;;-1:-1:-1;;;1882:42:0;;;;:::i;:::-;;;-1:-1:-1;;;;;1882:42:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1945:10:0;-1:-1:-1;1934:22:0;;;:10;;;:22;;;;;:29;;-1:-1:-1;;1934:29:0;-1:-1:-1;1934:29:0;;;2089:11;;;;-1:-1:-1;;;;;2089:11:0;;2110:398;;2173:14;2160:9;:27;2156:88;;2196:48;;-1:-1:-1;;;2196:48:0;;;;;4841:25:4;;;2218:9:0;4882:18:4;;;4875:34;4925:18;;;4918:34;;;4814:18;;2196:48:0;4639:319:4;2156:88:0;2110:398;;;2279:9;:14;2275:62;;2302:35;;-1:-1:-1;;;2302:35:0;;;;;4841:25:4;;;2324:9:0;4882:18:4;;;4875:34;2335:1:0;4925:18:4;;;4918:34;4814:18;;2302:35:0;4639:319:4;2275:62:0;2363:11;;;;2356:75;;-1:-1:-1;;;2356:75:0;;2389:10;2356:75;;;6087:34:4;2409:4:0;6137:18:4;;;6130:43;6189:18;;;6182:34;;;-1:-1:-1;;;;;2363:11:0;;;;2356:32;;6022:18:4;;2356:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2351:146;;2471:10;2491:4;2456:41;;-1:-1:-1;;;2456:41:0;;;;;;;;;:::i;2351:146::-;2523:48;;3814:25:4;;;2544:10:0;;2535:7;;2523:48;;3802:2:4;3787:18;2523:48:0;;;;;;;1707:871;;;1657:921;:::o;5070:211::-;5180:6;:13;5144:9;;5169:24;;5165:63;;5202:26;;-1:-1:-1;;;5202:26:0;;;;;3814:25:4;;;3787:18;;5202:26:0;3668:177:4;5165:63:0;5245:6;5252:7;5245:15;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;5245:29:0;;;;:20;:15;;;;;:20;;;;:29;;;;;;;;;-1:-1:-1;5070:211:0;;;;:::o;5287:310::-;5450:17;;:40;;-1:-1:-1;;;;;5450:17:0;5478:11;5450:27;:40::i;:::-;5500:16;;:38;;-1:-1:-1;;;;;5500:16:0;5527:10;5500:26;:38::i;:::-;5548:42;-1:-1:-1;;;;;5548:29:0;;5578:11;5548:29;:42::i;:::-;5287:310;;;;:::o;5603:572::-;5796:12;5861:17;5846:46;;-1:-1:-1;;;5846:46:0;;-1:-1:-1;;;;;5861:17:0;;;5846:46;;;7000:51:4;7067:18;;;7060:34;;;5818:12:0;;5846:14;;;;;6973:18:4;;5846:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5841:108;;5931:17;;5901:48;;-1:-1:-1;;;5901:48:0;;;;5924:4;;-1:-1:-1;;;;;5931:17:0;;;;5901:48;;;:::i;5841:108::-;5979:16;;5964:44;;-1:-1:-1;;;5964:44:0;;-1:-1:-1;;;;;5979:16:0;;;5964:44;;;7000:51:4;7067:18;;;7060:34;;;5964:14:0;;;;;;6973:18:4;;5964:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5959:105;;6047:16;;6017:47;;-1:-1:-1;;;6017:47:0;;;;6040:4;;-1:-1:-1;;;;;6047:16:0;;;;6017:47;;;:::i;5959:105::-;6079:39;;-1:-1:-1;;;6079:39:0;;-1:-1:-1;;;;;7018:32:4;;;6079:39:0;;;7000:51:4;7067:18;;;7060:34;;;6079:14:0;;;;;6973:18:4;;6079:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6074:94;;6150:4;6157:10;6127:41;;-1:-1:-1;;;6127:41:0;;;;;;;;;:::i;6074:94::-;5786:389;5603:572;;;;;:::o;519:260:2:-;660:12;678:9;-1:-1:-1;;;;;678:14:2;701:6;678:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;659:54;;;728:7;723:49;;744:28;;-1:-1:-1;;;744:28:2;;-1:-1:-1;;;;;1679:32:4;;744:28:2;;;1661:51:4;1634:18;;744:28:2;1499:219:4;723:49:2;590:189;519:260;;:::o;14:139:4:-;-1:-1:-1;;;;;97:31:4;;87:42;;77:70;;143:1;140;133:12;77:70;14:139;:::o;158:263::-;225:6;278:2;266:9;257:7;253:23;249:32;246:52;;;294:1;291;284:12;246:52;333:9;320:23;352:39;385:5;352:39;:::i;:::-;410:5;158:263;-1:-1:-1;;;158:263:4:o;639:180::-;698:6;751:2;739:9;730:7;726:23;722:32;719:52;;;767:1;764;757:12;719:52;-1:-1:-1;790:23:4;;639:180;-1:-1:-1;639:180:4:o;824:670::-;910:6;918;926;934;987:3;975:9;966:7;962:23;958:33;955:53;;;1004:1;1001;994:12;955:53;1040:9;1027:23;1017:33;;1100:2;1089:9;1085:18;1072:32;1113:39;1146:5;1113:39;:::i;:::-;1171:5;-1:-1:-1;1228:2:4;1213:18;;1200:32;1241:41;1200:32;1241:41;:::i;:::-;1301:7;-1:-1:-1;1360:2:4;1345:18;;1332:32;-1:-1:-1;;;;;1395:48:4;;1383:61;;1373:89;;1458:1;1455;1448:12;1373:89;824:670;;;;-1:-1:-1;824:670:4;;-1:-1:-1;;824:670:4:o;1723:292::-;1781:6;1834:2;1822:9;1813:7;1809:23;1805:32;1802:52;;;1850:1;1847;1840:12;1802:52;1889:9;1876:23;-1:-1:-1;;;;;1932:5:4;1928:38;1921:5;1918:49;1908:77;;1981:1;1978;1971:12;2615:323;2683:6;2691;2744:2;2732:9;2723:7;2719:23;2715:32;2712:52;;;2760:1;2757;2750:12;2712:52;2796:9;2783:23;2773:33;;2856:2;2845:9;2841:18;2828:32;2869:39;2902:5;2869:39;:::i;:::-;2927:5;2917:15;;;2615:323;;;;;:::o;3135:312::-;-1:-1:-1;;;;;3373:15:4;;;3355:34;;3425:15;;3420:2;3405:18;;3398:43;3305:2;3290:18;;3135:312::o;3850:127::-;3911:10;3906:3;3902:20;3899:1;3892:31;3942:4;3939:1;3932:15;3966:4;3963:1;3956:15;3982:127;4043:10;4038:3;4034:20;4031:1;4024:31;4074:4;4071:1;4064:15;4098:4;4095:1;4088:15;4114:168;4154:7;4220:1;4216;4212:6;4208:14;4205:1;4202:21;4197:1;4190:9;4183:17;4179:45;4176:71;;;4227:18;;:::i;:::-;-1:-1:-1;4267:9:4;;4114:168::o;4287:217::-;4327:1;4353;4343:132;;4397:10;4392:3;4388:20;4385:1;4378:31;4432:4;4429:1;4422:15;4460:4;4457:1;4450:15;4343:132;-1:-1:-1;4489:9:4;;4287:217::o;4509:125::-;4549:4;4577:1;4574;4571:8;4568:34;;;4582:18;;:::i;:::-;-1:-1:-1;4619:9:4;;4509:125::o;5257:253::-;5297:3;-1:-1:-1;;;;;5386:2:4;5383:1;5379:10;5416:2;5413:1;5409:10;5447:3;5443:2;5439:12;5434:3;5431:21;5428:47;;;5455:18;;:::i;:::-;5491:13;;5257:253;-1:-1:-1;;;;5257:253:4:o;6227:277::-;6294:6;6347:2;6335:9;6326:7;6322:23;6318:32;6315:52;;;6363:1;6360;6353:12;6315:52;6395:9;6389:16;6448:5;6441:13;6434:21;6427:5;6424:32;6414:60;;6470:1;6467;6460:12

Swarm Source

ipfs://8f1b59393db632299b358791c676773377c49e300ff1c7f079ef3ab15fb24365
Loading