ETH Price: $2,113.48 (+1.29%)

Contract

0xE5742B2CA1D1DaF17Bd4718B4Ae558d942E18B99
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Execute As Owner126691272021-06-20 4:30:141729 days ago1624163414IN
0xE5742B2C...942E18B99
0 ETH0.014979986
Execute As Owner126505732021-06-17 7:20:521732 days ago1623914452IN
0xE5742B2C...942E18B99
0 ETH0.0419112410.00000145
Execute As Owner126505662021-06-17 7:19:281732 days ago1623914368IN
0xE5742B2C...942E18B99
0 ETH0.0643644610.00000145
Execute As Owner126505562021-06-17 7:16:501732 days ago1623914210IN
0xE5742B2C...942E18B99
0 ETH0.0367566710.00000145
Execute As Owner126505502021-06-17 7:15:341732 days ago1623914134IN
0xE5742B2C...942E18B99
0 ETH0.038371610.00000145
Execute As Owner126505452021-06-17 7:14:301732 days ago1623914070IN
0xE5742B2C...942E18B99
0 ETH0.0377973910.00000145
Execute As Owner126505392021-06-17 7:13:421732 days ago1623914022IN
0xE5742B2C...942E18B99
0 ETH0.0435838110.00000145
Manage Contract126505312021-06-17 7:12:471732 days ago1623913967IN
0xE5742B2C...942E18B99
0 ETH0.0353649510.00000145
Manage Contract126505292021-06-17 7:12:421732 days ago1623913962IN
0xE5742B2C...942E18B99
0 ETH0.0456866510.00000145
Execute As Owner126504282021-06-17 6:48:561732 days ago1623912536IN
0xE5742B2C...942E18B99
0 ETH0.026405639
Manage Contract126500382021-06-17 5:22:261732 days ago1623907346IN
0xE5742B2C...942E18B99
0 ETH0.0456574311
Manage Contract126500162021-06-17 5:17:351732 days ago1623907055IN
0xE5742B2C...942E18B99
0 ETH0.04411
Execute As Owner126500082021-06-17 5:15:381732 days ago1623906938IN
0xE5742B2C...942E18B99
0 ETH0.0337795210
Execute As Owner126500012021-06-17 5:14:391732 days ago1623906879IN
0xE5742B2C...942E18B99
0 ETH0.0608740210
Execute As Owner126499422021-06-17 5:02:131732 days ago1623906133IN
0xE5742B2C...942E18B99
0 ETH0.0318116310
Execute As Owner126499212021-06-17 4:57:561732 days ago1623905876IN
0xE5742B2C...942E18B99
0 ETH0.0359445810
Execute As Owner126499102021-06-17 4:55:191732 days ago1623905719IN
0xE5742B2C...942E18B99
0 ETH0.0352287510
Execute As Owner126498942021-06-17 4:50:591732 days ago1623905459IN
0xE5742B2C...942E18B99
0 ETH0.0410152910
Manage Contract126498902021-06-17 4:50:401732 days ago1623905440IN
0xE5742B2C...942E18B99
0 ETH0.0399997310
Manage Contract126498902021-06-17 4:50:401732 days ago1623905440IN
0xE5742B2C...942E18B99
0 ETH0.031010210
Manage Contract126498902021-06-17 4:50:401732 days ago1623905440IN
0xE5742B2C...942E18B99
0 ETH0.0396200710
Manage Contract126498902021-06-17 4:50:401732 days ago1623905440IN
0xE5742B2C...942E18B99
0 ETH0.0205503510
Disable Contract123088572021-04-25 10:11:571785 days ago1619345517IN
0xE5742B2C...942E18B99
0 ETH0.0083128435.01
Disable Contract123088292021-04-25 10:07:511785 days ago1619345271IN
0xE5742B2C...942E18B99
0 ETH0.0045210936
Execute As Owner123087832021-04-25 10:00:271785 days ago1619344827IN
0xE5742B2C...942E18B99
0 ETH0.1356721842.6
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DependencyController

Compiler Version
v0.8.3+commit.8d00100c

Optimization Enabled:
Yes with 30000 runs

Other Settings:
default evmVersion, None license
// SPDX-License-Identifier: BUSL-1.1
pragma solidity ^0.8.0;

import "./RoleAware.sol";
import "./Executor.sol";
import "../interfaces/IDependencyController.sol";

/// @title Provides a single point of reference to verify integrity
/// of the roles structure and facilitate governance actions
/// within our system as well as performing cache invalidation for
/// roles and inter-contract relationships
contract DependencyController is RoleAware, IDependencyController {
    constructor(address _roles) RoleAware(_roles) {}

    address public override currentExecutor;

    address[] public managedContracts;
    mapping(uint256 => bool) public knownCharacters;
    mapping(uint256 => bool) public knownRoles;

    uint256[] public allCharacters;
    uint256[] public allRoles;

    function executeAsOwner(address executor) external onlyOwnerExec {
        uint256[] memory requiredRoles = Executor(executor).requiredRoles();

        for (uint256 i = 0; requiredRoles.length > i; i++) {
            _giveRole(requiredRoles[i], executor);
        }

        updateCaches(executor);
        currentExecutor = executor;
        Executor(executor).execute();
        currentExecutor = address(0);

        uint256 len = requiredRoles.length;
        for (uint256 i = 0; len > i; i++) {
            _removeRole(requiredRoles[i], executor);
        }
    }

    /// Orchestrate roles and permission for contract
    function manageContract(
        address contr,
        uint256[] memory charactersPlayed,
        uint256[] memory rolesPlayed
    ) external onlyOwnerExec {
        managedContracts.push(contr);

        // set up all characters this contract plays
        uint256 len = charactersPlayed.length;
        for (uint256 i = 0; len > i; i++) {
            uint256 character = charactersPlayed[i];
            _setMainCharacter(character, contr);
        }

        // all roles this contract plays
        len = rolesPlayed.length;
        for (uint256 i = 0; len > i; i++) {
            uint256 role = rolesPlayed[i];
            _giveRole(role, contr);
        }

        updateCaches(contr);
    }

    ///  Remove roles and permissions for contract
    function disableContract(address contr) external onlyOwnerExecDisabler {
        _disableContract(contr);
    }

    function _disableContract(address contr) internal {
        uint256 len = allRoles.length;
        for (uint256 i = 0; len > i; i++) {
            if (roles.getRole(allRoles[i], contr)) {
                _removeRole(allRoles[i], contr);
            }
        }

        len = allCharacters.length;
        for (uint256 i = 0; len > i; i++) {
            if (roles.mainCharacters(allCharacters[i]) == contr) {
                _setMainCharacter(allCharacters[i], address(0));
            }
        }
    }

    /// Activate role
    function giveRole(uint256 role, address actor) external onlyOwnerExec {
        _giveRole(role, actor);
    }

    /// Disable role
    function removeRole(uint256 role, address actor)
        external
        onlyOwnerExecDisabler
    {
        _removeRole(role, actor);
    }

    function _removeRole(uint256 role, address actor) internal {
        roles.removeRole(role, actor);
        updateRoleCache(role, actor);
    }

    function setMainCharacter(uint256 role, address actor)
        external
        onlyOwnerExec
    {
        _setMainCharacter(role, actor);
    }

    function _giveRole(uint256 role, address actor) internal {
        if (!knownRoles[role]) {
            knownRoles[role] = true;
            allRoles.push(role);
        }
        roles.giveRole(role, actor);
        updateRoleCache(role, actor);
    }

    function _setMainCharacter(uint256 character, address actor) internal {
        if (!knownCharacters[character]) {
            knownCharacters[character] = true;
            allCharacters.push(character);
        }
        roles.setMainCharacter(character, actor);
        updateMainCharacterCache(character);
    }

    function updateMainCharacterCache(uint256 character) public override {
        uint256 len = managedContracts.length;
        for (uint256 i = 0; len > i; i++) {
            RoleAware(managedContracts[i]).updateMainCharacterCache(character);
        }
    }

    function updateRoleCache(uint256 role, address contr) public override {
        uint256 len = managedContracts.length;
        for (uint256 i = 0; len > i; i++) {
            RoleAware(managedContracts[i]).updateRoleCache(role, contr);
        }
    }

    function updateCaches(address contr) public {
        // update this contract with all characters we know about
        uint256 len = allCharacters.length;
        for (uint256 i = 0; len > i; i++) {
            RoleAware(contr).updateMainCharacterCache(allCharacters[i]);
        }

        // update this contract with all roles for all contracts we know about
        len = allRoles.length;
        for (uint256 i = 0; len > i; i++) {
            for (uint256 j = 0; managedContracts.length > j; j++) {
                RoleAware(contr).updateRoleCache(
                    allRoles[i],
                    managedContracts[j]
                );
            }
        }
    }

    function allManagedContracts() external view returns (address[] memory) {
        return managedContracts;
    }
}

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../utils/Context.sol";
/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

// SPDX-License-Identifier: BUSL-1.1
pragma solidity ^0.8.0;

import "./RoleAware.sol";

abstract contract Executor is RoleAware {
    function requiredRoles() external virtual returns (uint256[] memory);

    function execute() external virtual;
}

// SPDX-License-Identifier: BUSL-1.1
pragma solidity ^0.8.0;

import "./Roles.sol";

/// @title Role management behavior
/// Main characters are for service discovery
/// Whereas roles are for access control
contract RoleAware {
    Roles public immutable roles;
    mapping(uint256 => address) public mainCharacterCache;
    mapping(address => mapping(uint256 => bool)) public roleCache;

    constructor(address _roles) {
        require(_roles != address(0), "Please provide valid roles address");
        roles = Roles(_roles);
    }

    modifier noIntermediary() {
        require(
            msg.sender == tx.origin,
            "Currently no intermediaries allowed for this function call"
        );
        _;
    }

    // @dev Throws if called by any account other than the owner or executor
    modifier onlyOwnerExec() {
        require(
            owner() == msg.sender || executor() == msg.sender,
            "Roles: caller is not the owner"
        );
        _;
    }

    modifier onlyOwnerExecDisabler() {
        require(
            owner() == msg.sender ||
                executor() == msg.sender ||
                disabler() == msg.sender,
            "Caller is not the owner, executor or authorized disabler"
        );
        _;
    }

    modifier onlyOwnerExecActivator() {
        require(
            owner() == msg.sender ||
                executor() == msg.sender ||
                isTokenActivator(msg.sender),
            "Caller is not the owner, executor or authorized activator"
        );
        _;
    }

    function updateRoleCache(uint256 role, address contr) public virtual {
        roleCache[contr][role] = roles.getRole(role, contr);
    }

    function updateMainCharacterCache(uint256 role) public virtual {
        mainCharacterCache[role] = roles.mainCharacters(role);
    }

    function owner() internal view returns (address) {
        return roles.owner();
    }

    function executor() internal returns (address) {
        return roles.executor();
    }

    function disabler() internal view returns (address) {
        return mainCharacterCache[DISABLER];
    }

    function fund() internal view returns (address) {
        return mainCharacterCache[FUND];
    }

    function lending() internal view returns (address) {
        return mainCharacterCache[LENDING];
    }

    function marginRouter() internal view returns (address) {
        return mainCharacterCache[MARGIN_ROUTER];
    }

    function crossMarginTrading() internal view returns (address) {
        return mainCharacterCache[CROSS_MARGIN_TRADING];
    }

    function feeController() internal view returns (address) {
        return mainCharacterCache[FEE_CONTROLLER];
    }

    function price() internal view returns (address) {
        return mainCharacterCache[PRICE_CONTROLLER];
    }

    function admin() internal view returns (address) {
        return mainCharacterCache[ADMIN];
    }

    function incentiveDistributor() internal view returns (address) {
        return mainCharacterCache[INCENTIVE_DISTRIBUTION];
    }

    function tokenAdmin() internal view returns (address) {
        return mainCharacterCache[TOKEN_ADMIN];
    }

    function isBorrower(address contr) internal view returns (bool) {
        return roleCache[contr][BORROWER];
    }

    function isFundTransferer(address contr) internal view returns (bool) {
        return roleCache[contr][FUND_TRANSFERER];
    }

    function isMarginTrader(address contr) internal view returns (bool) {
        return roleCache[contr][MARGIN_TRADER];
    }

    function isFeeSource(address contr) internal view returns (bool) {
        return roleCache[contr][FEE_SOURCE];
    }

    function isMarginCaller(address contr) internal view returns (bool) {
        return roleCache[contr][MARGIN_CALLER];
    }

    function isLiquidator(address contr) internal view returns (bool) {
        return roleCache[contr][LIQUIDATOR];
    }

    function isAuthorizedFundTrader(address contr)
        internal
        view
        returns (bool)
    {
        return roleCache[contr][AUTHORIZED_FUND_TRADER];
    }

    function isIncentiveReporter(address contr) internal view returns (bool) {
        return roleCache[contr][INCENTIVE_REPORTER];
    }

    function isTokenActivator(address contr) internal view returns (bool) {
        return roleCache[contr][TOKEN_ACTIVATOR];
    }

    function isStakePenalizer(address contr) internal view returns (bool) {
        return roleCache[contr][STAKE_PENALIZER];
    }
}

// SPDX-License-Identifier: BUSL-1.1
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/access/Ownable.sol";
import "../interfaces/IDependencyController.sol";

// we chose not to go with an enum
// to make this list easy to extend
uint256 constant FUND_TRANSFERER = 1;
uint256 constant MARGIN_CALLER = 2;
uint256 constant BORROWER = 3;
uint256 constant MARGIN_TRADER = 4;
uint256 constant FEE_SOURCE = 5;
uint256 constant LIQUIDATOR = 6;
uint256 constant AUTHORIZED_FUND_TRADER = 7;
uint256 constant INCENTIVE_REPORTER = 8;
uint256 constant TOKEN_ACTIVATOR = 9;
uint256 constant STAKE_PENALIZER = 10;

uint256 constant FUND = 101;
uint256 constant LENDING = 102;
uint256 constant MARGIN_ROUTER = 103;
uint256 constant CROSS_MARGIN_TRADING = 104;
uint256 constant FEE_CONTROLLER = 105;
uint256 constant PRICE_CONTROLLER = 106;
uint256 constant ADMIN = 107;
uint256 constant INCENTIVE_DISTRIBUTION = 108;
uint256 constant TOKEN_ADMIN = 109;

uint256 constant DISABLER = 1001;
uint256 constant DEPENDENCY_CONTROLLER = 1002;

/// @title Manage permissions of contracts and ownership of everything
/// owned by a multisig wallet (0xEED9D1c6B4cdEcB3af070D85bfd394E7aF179CBd) during
/// beta and will then be transfered to governance
/// https://github.com/marginswap/governance
contract Roles is Ownable {
    mapping(address => mapping(uint256 => bool)) public roles;
    mapping(uint256 => address) public mainCharacters;

    constructor() Ownable() {
        // token activation from the get-go
        roles[msg.sender][TOKEN_ACTIVATOR] = true;
    }

    /// @dev Throws if called by any account other than the owner.
    modifier onlyOwnerExecDepController() {
        require(
            owner() == msg.sender ||
                executor() == msg.sender ||
                mainCharacters[DEPENDENCY_CONTROLLER] == msg.sender,
            "Roles: caller is not the owner"
        );
        _;
    }

    function giveRole(uint256 role, address actor)
        external
        onlyOwnerExecDepController
    {
        roles[actor][role] = true;
    }

    function removeRole(uint256 role, address actor)
        external
        onlyOwnerExecDepController
    {
        roles[actor][role] = false;
    }

    function setMainCharacter(uint256 role, address actor)
        external
        onlyOwnerExecDepController
    {
        mainCharacters[role] = actor;
    }

    function getRole(uint256 role, address contr) external view returns (bool) {
        return roles[contr][role];
    }

    /// @dev current executor
    function executor() public returns (address exec) {
        address depController = mainCharacters[DEPENDENCY_CONTROLLER];
        if (depController != address(0)) {
            exec = IDependencyController(depController).currentExecutor();
        }
    }
}

File 7 of 7 : IDependencyController.sol
// SPDX-License-Identifier: BUSL-1.1
pragma solidity ^0.8.0;

interface IDependencyController {
    function currentExecutor() external returns (address);
}

Settings
{
  "evmVersion": "istanbul",
  "libraries": {},
  "metadata": {
    "bytecodeHash": "ipfs",
    "useLiteralContent": true
  },
  "optimizer": {
    "enabled": true,
    "runs": 30000
  },
  "remappings": [],
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_roles","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allCharacters","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allManagedContracts","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allRoles","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentExecutor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contr","type":"address"}],"name":"disableContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"executor","type":"address"}],"name":"executeAsOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"role","type":"uint256"},{"internalType":"address","name":"actor","type":"address"}],"name":"giveRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"knownCharacters","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"knownRoles","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"mainCharacterCache","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contr","type":"address"},{"internalType":"uint256[]","name":"charactersPlayed","type":"uint256[]"},{"internalType":"uint256[]","name":"rolesPlayed","type":"uint256[]"}],"name":"manageContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"managedContracts","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"role","type":"uint256"},{"internalType":"address","name":"actor","type":"address"}],"name":"removeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"roleCache","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"roles","outputs":[{"internalType":"contract Roles","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"role","type":"uint256"},{"internalType":"address","name":"actor","type":"address"}],"name":"setMainCharacter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contr","type":"address"}],"name":"updateCaches","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"character","type":"uint256"}],"name":"updateMainCharacterCache","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"role","type":"uint256"},{"internalType":"address","name":"contr","type":"address"}],"name":"updateRoleCache","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60a060405234801561001057600080fd5b5060405162001dca38038062001dca833981016040819052610031916100ad565b806001600160a01b0381166100975760405162461bcd60e51b815260206004820152602260248201527f506c656173652070726f766964652076616c696420726f6c6573206164647265604482015261737360f01b606482015260840160405180910390fd5b60601b6001600160601b031916608052506100db565b6000602082840312156100be578081fd5b81516001600160a01b03811681146100d4578182fd5b9392505050565b60805160601c611c9f6200012b6000396000818161020801528181611191015281816112360152818161137e015281816114310152818161152e015281816115a3015261173d0152611c9f6000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c80635d4ef0b8116100cd578063a154ce8211610081578063e9c3f77d11610066578063e9c3f77d14610322578063f19990d714610358578063f1ce598e1461037b57610151565b8063a154ce82146102fc578063a1fdc4581461030f57610151565b8063713dade2116100b2578063713dade2146102a85780637a1a04df146102bb578063840c53bd146102e957610151565b80635d4ef0b8146102755780636b60a09b1461028857610151565b80632be5c6c011610124578063392f5f6411610109578063392f5f6414610203578063447d52ba1461024f5780634d5377691461026257610151565b80632be5c6c0146101bd5780633238405b146101f057610151565b8063071060a6146101565780631023d3e01461016b57806317b7b61b1461018957806325398f83146101aa575b600080fd5b610169610164366004611aa6565b61038e565b005b61017361047b565b6040516101809190611aed565b60405180910390f35b61019c610197366004611aa6565b6104ea565b604051908152602001610180565b6101696101b8366004611abe565b61050b565b6101e06101cb366004611aa6565b60056020526000908152604090205460ff1681565b6040519015158152602001610180565b6101696101fe366004611abe565b6105cb565b61022a7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610180565b61016961025d366004611abe565b610710565b610169610270366004611abe565b610806565b610169610283366004611955565b6108bd565b60025461022a9073ffffffffffffffffffffffffffffffffffffffff1681565b6101696102b6366004611916565b610abe565b6101e06102c93660046119c8565b600160209081526000928352604080842090915290825290205460ff1681565b61019c6102f7366004611aa6565b610cfe565b61016961030a366004611916565b610d0e565b61016961031d366004611916565b610e55565b61022a610330366004611aa6565b60006020819052908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6101e0610366366004611aa6565b60046020526000908152604090205460ff1681565b61022a610389366004611aa6565b611156565b60035460005b8082111561047657600381815481106103d6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000918252602090912001546040517f071060a60000000000000000000000000000000000000000000000000000000081526004810185905273ffffffffffffffffffffffffffffffffffffffff9091169063071060a690602401600060405180830381600087803b15801561044b57600080fd5b505af115801561045f573d6000803e3d6000fd5b50505050808061046e90611bba565b915050610394565b505050565b606060038054806020026020016040519081016040528092919081815260200182805480156104e057602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116104b5575b5050505050905090565b600681815481106104fa57600080fd5b600091825260209091200154905081565b3361051461118d565b73ffffffffffffffffffffffffffffffffffffffff16148061055257503361053a611232565b73ffffffffffffffffffffffffffffffffffffffff16145b6105bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f526f6c65733a2063616c6c6572206973206e6f7420746865206f776e6572000060448201526064015b60405180910390fd5b6105c782826112b0565b5050565b336105d461118d565b73ffffffffffffffffffffffffffffffffffffffff1614806106125750336105fa611232565b73ffffffffffffffffffffffffffffffffffffffff16145b8061067a5750336106626103e960009081526020527f236f539bf6e1b3b15a335e3cd157d360bc4be88c071635c19ba8a82b4f665e9f5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16145b610706576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f43616c6c6572206973206e6f7420746865206f776e65722c206578656375746f60448201527f72206f7220617574686f72697a65642064697361626c6572000000000000000060648201526084016105b4565b6105c782826113e5565b60035460005b808211156108005760038181548110610758577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000918252602090912001546040517f447d52ba0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff85811660248301529091169063447d52ba90604401600060405180830381600087803b1580156107d557600080fd5b505af11580156107e9573d6000803e3d6000fd5b5050505080806107f890611bba565b915050610716565b50505050565b3361080f61118d565b73ffffffffffffffffffffffffffffffffffffffff16148061084d575033610835611232565b73ffffffffffffffffffffffffffffffffffffffff16145b6108b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f526f6c65733a2063616c6c6572206973206e6f7420746865206f776e6572000060448201526064016105b4565b6105c78282611460565b336108c661118d565b73ffffffffffffffffffffffffffffffffffffffff1614806109045750336108ec611232565b73ffffffffffffffffffffffffffffffffffffffff16145b61096a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f526f6c65733a2063616c6c6572206973206e6f7420746865206f776e6572000060448201526064016105b4565b6003805460018101825560009182527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86161790558251905b80821115610a47576000848281518110610a20577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050610a348187611460565b5080610a3f81611bba565b9150506109dd565b5050805160005b80821115610ab8576000838281518110610a91577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050610aa581876112b0565b5080610ab081611bba565b915050610a4e565b50610800845b60065460005b80821115610b90578273ffffffffffffffffffffffffffffffffffffffff1663071060a660068381548110610b22577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001546040518263ffffffff1660e01b8152600401610b4b91815260200190565b600060405180830381600087803b158015610b6557600080fd5b505af1158015610b79573d6000803e3d6000fd5b505050508080610b8890611bba565b915050610ac4565b505060075460005b808211156104765760005b600354811015610ceb578373ffffffffffffffffffffffffffffffffffffffff1663447d52ba60078481548110610c03577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015460038481548110610c48577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60009182526020909120015460405160e084901b7fffffffff00000000000000000000000000000000000000000000000000000000168152600481019290925273ffffffffffffffffffffffffffffffffffffffff166024820152604401600060405180830381600087803b158015610cc057600080fd5b505af1158015610cd4573d6000803e3d6000fd5b505050508080610ce390611bba565b915050610ba3565b5080610cf681611bba565b915050610b98565b600781815481106104fa57600080fd5b33610d1761118d565b73ffffffffffffffffffffffffffffffffffffffff161480610d55575033610d3d611232565b73ffffffffffffffffffffffffffffffffffffffff16145b80610dbd575033610da56103e960009081526020527f236f539bf6e1b3b15a335e3cd157d360bc4be88c071635c19ba8a82b4f665e9f5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16145b610e49576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f43616c6c6572206973206e6f7420746865206f776e65722c206578656375746f60448201527f72206f7220617574686f72697a65642064697361626c6572000000000000000060648201526084016105b4565b610e5281611593565b50565b33610e5e61118d565b73ffffffffffffffffffffffffffffffffffffffff161480610e9c575033610e84611232565b73ffffffffffffffffffffffffffffffffffffffff16145b610f02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f526f6c65733a2063616c6c6572206973206e6f7420746865206f776e6572000060448201526064016105b4565b60008173ffffffffffffffffffffffffffffffffffffffff1663cd28fc8f6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610f4c57600080fd5b505af1158015610f60573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610fa691908101906119f3565b905060005b808251111561101057610ffe828281518110610ff0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151846112b0565b8061100881611bba565b915050610fab565b5061101a82610abe565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416908117909155604080517f61461954000000000000000000000000000000000000000000000000000000008152905163614619549160048082019260009290919082900301818387803b1580156110ad57600080fd5b505af11580156110c1573d6000803e3d6000fd5b5050600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555050805160005b8082111561080057611144838281518110611136577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151856113e5565b8061114e81611bba565b9150506110f2565b6003818154811061116657600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156111f557600080fd5b505afa158015611209573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122d9190611939565b905090565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c34c08e56040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561129c57600080fd5b505af1158015611209573d6000803e3d6000fd5b60008281526005602052604090205460ff1661133257600082815260056020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091556007805491820181559091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688018290555b6040517f25398f830000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff82811660248301527f000000000000000000000000000000000000000000000000000000000000000016906325398f83906044015b600060405180830381600087803b1580156113c357600080fd5b505af11580156113d7573d6000803e3d6000fd5b505050506105c78282610710565b6040517f3238405b0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff82811660248301527f00000000000000000000000000000000000000000000000000000000000000001690633238405b906044016113a9565b60008281526004602052604090205460ff166114e257600082815260046020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f018290555b6040517f4d5377690000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff82811660248301527f00000000000000000000000000000000000000000000000000000000000000001690634d53776990604401600060405180830381600087803b15801561157257600080fd5b505af1158015611586573d6000803e3d6000fd5b505050506105c78261038e565b60075460005b80821115611714577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166393552a3d60078381548110611617577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154856040518363ffffffff1660e01b815260040161165f92919091825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b60206040518083038186803b15801561167757600080fd5b505afa15801561168b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116af9190611a86565b1561170257611702600782815481106116f1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154846113e5565b8061170c81611bba565b915050611599565b505060065460005b80821115610476578273ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b4ed0b6d600684815481106117b1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001546040518263ffffffff1660e01b81526004016117da91815260200190565b60206040518083038186803b1580156117f257600080fd5b505afa158015611806573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182a9190611939565b73ffffffffffffffffffffffffffffffffffffffff1614156118955761189560068281548110611883577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001546000611460565b8061189f81611bba565b91505061171c565b600082601f8301126118b7578081fd5b813560206118cc6118c783611b96565b611b47565b80838252828201915082860187848660051b89010111156118eb578586fd5b855b85811015611909578135845292840192908401906001016118ed565b5090979650505050505050565b600060208284031215611927578081fd5b813561193281611c47565b9392505050565b60006020828403121561194a578081fd5b815161193281611c47565b600080600060608486031215611969578182fd5b833561197481611c47565b9250602084013567ffffffffffffffff80821115611990578384fd5b61199c878388016118a7565b935060408601359150808211156119b1578283fd5b506119be868287016118a7565b9150509250925092565b600080604083850312156119da578182fd5b82356119e581611c47565b946020939093013593505050565b60006020808385031215611a05578182fd5b825167ffffffffffffffff811115611a1b578283fd5b8301601f81018513611a2b578283fd5b8051611a396118c782611b96565b80828252848201915084840188868560051b8701011115611a58578687fd5b8694505b83851015611a7a578051835260019490940193918501918501611a5c565b50979650505050505050565b600060208284031215611a97578081fd5b81518015158114611932578182fd5b600060208284031215611ab7578081fd5b5035919050565b60008060408385031215611ad0578182fd5b823591506020830135611ae281611c47565b809150509250929050565b6020808252825182820181905260009190848201906040850190845b81811015611b3b57835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101611b09565b50909695505050505050565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611b8e57611b8e611c18565b604052919050565b600067ffffffffffffffff821115611bb057611bb0611c18565b5060051b60200190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611c11577f4e487b710000000000000000000000000000000000000000000000000000000081526011600452602481fd5b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff81168114610e5257600080fdfea264697066735822122022af1b24627772a0ff3fc7031feeba3e1d0e46e7abd9ab1018915aae2f0ccc5e64736f6c63430008030033000000000000000000000000c6d13a49cdc5afc7798dd0eba7698db9bfcc1d8c

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101515760003560e01c80635d4ef0b8116100cd578063a154ce8211610081578063e9c3f77d11610066578063e9c3f77d14610322578063f19990d714610358578063f1ce598e1461037b57610151565b8063a154ce82146102fc578063a1fdc4581461030f57610151565b8063713dade2116100b2578063713dade2146102a85780637a1a04df146102bb578063840c53bd146102e957610151565b80635d4ef0b8146102755780636b60a09b1461028857610151565b80632be5c6c011610124578063392f5f6411610109578063392f5f6414610203578063447d52ba1461024f5780634d5377691461026257610151565b80632be5c6c0146101bd5780633238405b146101f057610151565b8063071060a6146101565780631023d3e01461016b57806317b7b61b1461018957806325398f83146101aa575b600080fd5b610169610164366004611aa6565b61038e565b005b61017361047b565b6040516101809190611aed565b60405180910390f35b61019c610197366004611aa6565b6104ea565b604051908152602001610180565b6101696101b8366004611abe565b61050b565b6101e06101cb366004611aa6565b60056020526000908152604090205460ff1681565b6040519015158152602001610180565b6101696101fe366004611abe565b6105cb565b61022a7f000000000000000000000000c6d13a49cdc5afc7798dd0eba7698db9bfcc1d8c81565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610180565b61016961025d366004611abe565b610710565b610169610270366004611abe565b610806565b610169610283366004611955565b6108bd565b60025461022a9073ffffffffffffffffffffffffffffffffffffffff1681565b6101696102b6366004611916565b610abe565b6101e06102c93660046119c8565b600160209081526000928352604080842090915290825290205460ff1681565b61019c6102f7366004611aa6565b610cfe565b61016961030a366004611916565b610d0e565b61016961031d366004611916565b610e55565b61022a610330366004611aa6565b60006020819052908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6101e0610366366004611aa6565b60046020526000908152604090205460ff1681565b61022a610389366004611aa6565b611156565b60035460005b8082111561047657600381815481106103d6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000918252602090912001546040517f071060a60000000000000000000000000000000000000000000000000000000081526004810185905273ffffffffffffffffffffffffffffffffffffffff9091169063071060a690602401600060405180830381600087803b15801561044b57600080fd5b505af115801561045f573d6000803e3d6000fd5b50505050808061046e90611bba565b915050610394565b505050565b606060038054806020026020016040519081016040528092919081815260200182805480156104e057602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116104b5575b5050505050905090565b600681815481106104fa57600080fd5b600091825260209091200154905081565b3361051461118d565b73ffffffffffffffffffffffffffffffffffffffff16148061055257503361053a611232565b73ffffffffffffffffffffffffffffffffffffffff16145b6105bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f526f6c65733a2063616c6c6572206973206e6f7420746865206f776e6572000060448201526064015b60405180910390fd5b6105c782826112b0565b5050565b336105d461118d565b73ffffffffffffffffffffffffffffffffffffffff1614806106125750336105fa611232565b73ffffffffffffffffffffffffffffffffffffffff16145b8061067a5750336106626103e960009081526020527f236f539bf6e1b3b15a335e3cd157d360bc4be88c071635c19ba8a82b4f665e9f5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16145b610706576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f43616c6c6572206973206e6f7420746865206f776e65722c206578656375746f60448201527f72206f7220617574686f72697a65642064697361626c6572000000000000000060648201526084016105b4565b6105c782826113e5565b60035460005b808211156108005760038181548110610758577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000918252602090912001546040517f447d52ba0000000000000000000000000000000000000000000000000000000081526004810186905273ffffffffffffffffffffffffffffffffffffffff85811660248301529091169063447d52ba90604401600060405180830381600087803b1580156107d557600080fd5b505af11580156107e9573d6000803e3d6000fd5b5050505080806107f890611bba565b915050610716565b50505050565b3361080f61118d565b73ffffffffffffffffffffffffffffffffffffffff16148061084d575033610835611232565b73ffffffffffffffffffffffffffffffffffffffff16145b6108b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f526f6c65733a2063616c6c6572206973206e6f7420746865206f776e6572000060448201526064016105b4565b6105c78282611460565b336108c661118d565b73ffffffffffffffffffffffffffffffffffffffff1614806109045750336108ec611232565b73ffffffffffffffffffffffffffffffffffffffff16145b61096a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f526f6c65733a2063616c6c6572206973206e6f7420746865206f776e6572000060448201526064016105b4565b6003805460018101825560009182527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86161790558251905b80821115610a47576000848281518110610a20577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050610a348187611460565b5080610a3f81611bba565b9150506109dd565b5050805160005b80821115610ab8576000838281518110610a91577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050610aa581876112b0565b5080610ab081611bba565b915050610a4e565b50610800845b60065460005b80821115610b90578273ffffffffffffffffffffffffffffffffffffffff1663071060a660068381548110610b22577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001546040518263ffffffff1660e01b8152600401610b4b91815260200190565b600060405180830381600087803b158015610b6557600080fd5b505af1158015610b79573d6000803e3d6000fd5b505050508080610b8890611bba565b915050610ac4565b505060075460005b808211156104765760005b600354811015610ceb578373ffffffffffffffffffffffffffffffffffffffff1663447d52ba60078481548110610c03577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015460038481548110610c48577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60009182526020909120015460405160e084901b7fffffffff00000000000000000000000000000000000000000000000000000000168152600481019290925273ffffffffffffffffffffffffffffffffffffffff166024820152604401600060405180830381600087803b158015610cc057600080fd5b505af1158015610cd4573d6000803e3d6000fd5b505050508080610ce390611bba565b915050610ba3565b5080610cf681611bba565b915050610b98565b600781815481106104fa57600080fd5b33610d1761118d565b73ffffffffffffffffffffffffffffffffffffffff161480610d55575033610d3d611232565b73ffffffffffffffffffffffffffffffffffffffff16145b80610dbd575033610da56103e960009081526020527f236f539bf6e1b3b15a335e3cd157d360bc4be88c071635c19ba8a82b4f665e9f5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff16145b610e49576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f43616c6c6572206973206e6f7420746865206f776e65722c206578656375746f60448201527f72206f7220617574686f72697a65642064697361626c6572000000000000000060648201526084016105b4565b610e5281611593565b50565b33610e5e61118d565b73ffffffffffffffffffffffffffffffffffffffff161480610e9c575033610e84611232565b73ffffffffffffffffffffffffffffffffffffffff16145b610f02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f526f6c65733a2063616c6c6572206973206e6f7420746865206f776e6572000060448201526064016105b4565b60008173ffffffffffffffffffffffffffffffffffffffff1663cd28fc8f6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610f4c57600080fd5b505af1158015610f60573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610fa691908101906119f3565b905060005b808251111561101057610ffe828281518110610ff0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151846112b0565b8061100881611bba565b915050610fab565b5061101a82610abe565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416908117909155604080517f61461954000000000000000000000000000000000000000000000000000000008152905163614619549160048082019260009290919082900301818387803b1580156110ad57600080fd5b505af11580156110c1573d6000803e3d6000fd5b5050600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555050805160005b8082111561080057611144838281518110611136577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151856113e5565b8061114e81611bba565b9150506110f2565b6003818154811061116657600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b60007f000000000000000000000000c6d13a49cdc5afc7798dd0eba7698db9bfcc1d8c73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156111f557600080fd5b505afa158015611209573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122d9190611939565b905090565b60007f000000000000000000000000c6d13a49cdc5afc7798dd0eba7698db9bfcc1d8c73ffffffffffffffffffffffffffffffffffffffff1663c34c08e56040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561129c57600080fd5b505af1158015611209573d6000803e3d6000fd5b60008281526005602052604090205460ff1661133257600082815260056020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091556007805491820181559091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688018290555b6040517f25398f830000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff82811660248301527f000000000000000000000000c6d13a49cdc5afc7798dd0eba7698db9bfcc1d8c16906325398f83906044015b600060405180830381600087803b1580156113c357600080fd5b505af11580156113d7573d6000803e3d6000fd5b505050506105c78282610710565b6040517f3238405b0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff82811660248301527f000000000000000000000000c6d13a49cdc5afc7798dd0eba7698db9bfcc1d8c1690633238405b906044016113a9565b60008281526004602052604090205460ff166114e257600082815260046020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f018290555b6040517f4d5377690000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff82811660248301527f000000000000000000000000c6d13a49cdc5afc7798dd0eba7698db9bfcc1d8c1690634d53776990604401600060405180830381600087803b15801561157257600080fd5b505af1158015611586573d6000803e3d6000fd5b505050506105c78261038e565b60075460005b80821115611714577f000000000000000000000000c6d13a49cdc5afc7798dd0eba7698db9bfcc1d8c73ffffffffffffffffffffffffffffffffffffffff166393552a3d60078381548110611617577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154856040518363ffffffff1660e01b815260040161165f92919091825273ffffffffffffffffffffffffffffffffffffffff16602082015260400190565b60206040518083038186803b15801561167757600080fd5b505afa15801561168b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116af9190611a86565b1561170257611702600782815481106116f1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154846113e5565b8061170c81611bba565b915050611599565b505060065460005b80821115610476578273ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000c6d13a49cdc5afc7798dd0eba7698db9bfcc1d8c73ffffffffffffffffffffffffffffffffffffffff1663b4ed0b6d600684815481106117b1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001546040518263ffffffff1660e01b81526004016117da91815260200190565b60206040518083038186803b1580156117f257600080fd5b505afa158015611806573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182a9190611939565b73ffffffffffffffffffffffffffffffffffffffff1614156118955761189560068281548110611883577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001546000611460565b8061189f81611bba565b91505061171c565b600082601f8301126118b7578081fd5b813560206118cc6118c783611b96565b611b47565b80838252828201915082860187848660051b89010111156118eb578586fd5b855b85811015611909578135845292840192908401906001016118ed565b5090979650505050505050565b600060208284031215611927578081fd5b813561193281611c47565b9392505050565b60006020828403121561194a578081fd5b815161193281611c47565b600080600060608486031215611969578182fd5b833561197481611c47565b9250602084013567ffffffffffffffff80821115611990578384fd5b61199c878388016118a7565b935060408601359150808211156119b1578283fd5b506119be868287016118a7565b9150509250925092565b600080604083850312156119da578182fd5b82356119e581611c47565b946020939093013593505050565b60006020808385031215611a05578182fd5b825167ffffffffffffffff811115611a1b578283fd5b8301601f81018513611a2b578283fd5b8051611a396118c782611b96565b80828252848201915084840188868560051b8701011115611a58578687fd5b8694505b83851015611a7a578051835260019490940193918501918501611a5c565b50979650505050505050565b600060208284031215611a97578081fd5b81518015158114611932578182fd5b600060208284031215611ab7578081fd5b5035919050565b60008060408385031215611ad0578182fd5b823591506020830135611ae281611c47565b809150509250929050565b6020808252825182820181905260009190848201906040850190845b81811015611b3b57835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101611b09565b50909695505050505050565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611b8e57611b8e611c18565b604052919050565b600067ffffffffffffffff821115611bb057611bb0611c18565b5060051b60200190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611c11577f4e487b710000000000000000000000000000000000000000000000000000000081526011600452602481fd5b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff81168114610e5257600080fdfea264697066735822122022af1b24627772a0ff3fc7031feeba3e1d0e46e7abd9ab1018915aae2f0ccc5e64736f6c63430008030033

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

000000000000000000000000c6d13a49cdc5afc7798dd0eba7698db9bfcc1d8c

-----Decoded View---------------
Arg [0] : _roles (address): 0xC6D13A49cdC5Afc7798dd0eBA7698DB9BFCc1D8c

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000c6d13a49cdc5afc7798dd0eba7698db9bfcc1d8c


Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.